[🤖] Add Unit-Tests
Build Docker and Deploy / Run goext test-suite (push) Successful in 1m34s

This commit is contained in:
2026-04-27 10:46:08 +02:00
parent dad0e3240d
commit 02d6894ec6
116 changed files with 18795 additions and 1 deletions
+251
View File
@@ -0,0 +1,251 @@
package zipext
import (
"archive/zip"
"bytes"
"io"
"testing"
"git.blackforestbytes.com/BlackForestBytes/goext/tst"
)
func readZipEntries(t *testing.T, data []byte) map[string][]byte {
t.Helper()
r, err := zip.NewReader(bytes.NewReader(data), int64(len(data)))
tst.AssertNoErr(t, err)
out := make(map[string][]byte, len(r.File))
for _, f := range r.File {
rc, err := f.Open()
tst.AssertNoErr(t, err)
body, err := io.ReadAll(rc)
tst.AssertNoErr(t, err)
err = rc.Close()
tst.AssertNoErr(t, err)
out[f.Name] = body
}
return out
}
func TestNewMemoryZipZipOnlyEmpty(t *testing.T) {
mz := NewMemoryZip(true, false)
data, err := mz.GetZip()
tst.AssertNoErr(t, err)
tst.AssertTrue(t, len(data) > 0)
entries := readZipEntries(t, data)
tst.AssertEqual(t, len(entries), 0)
}
func TestMemoryZipAddSingleFile(t *testing.T) {
mz := NewMemoryZip(true, false)
payload := []byte("Hello World")
err := mz.AddFile("hello.txt", payload)
tst.AssertNoErr(t, err)
data, err := mz.GetZip()
tst.AssertNoErr(t, err)
entries := readZipEntries(t, data)
tst.AssertEqual(t, len(entries), 1)
got, ok := entries["hello.txt"]
tst.AssertTrue(t, ok)
tst.AssertArrayEqual(t, got, payload)
}
func TestMemoryZipAddMultipleFiles(t *testing.T) {
mz := NewMemoryZip(true, false)
files := map[string][]byte{
"a.txt": []byte("aaa"),
"sub/b.txt": []byte("bbbb"),
"sub/dir/c.bin": {0, 1, 2, 3, 4, 5, 250, 251, 252, 253, 254, 255},
"empty.txt": {},
"d/e/f/g/h.json": []byte(`{"k":"v"}`),
}
for name, body := range files {
err := mz.AddFile(name, body)
tst.AssertNoErr(t, err)
}
data, err := mz.GetZip()
tst.AssertNoErr(t, err)
entries := readZipEntries(t, data)
tst.AssertEqual(t, len(entries), len(files))
for name, expected := range files {
got, ok := entries[name]
tst.AssertTrue(t, ok)
tst.AssertArrayEqual(t, got, expected)
}
}
func TestMemoryZipAddDuplicatePaths(t *testing.T) {
mz := NewMemoryZip(true, false)
err := mz.AddFile("dup.txt", []byte("first"))
tst.AssertNoErr(t, err)
err = mz.AddFile("dup.txt", []byte("second"))
tst.AssertNoErr(t, err)
data, err := mz.GetZip()
tst.AssertNoErr(t, err)
r, err := zip.NewReader(bytes.NewReader(data), int64(len(data)))
tst.AssertNoErr(t, err)
tst.AssertEqual(t, len(r.File), 2)
}
func TestMemoryZipAddLargerData(t *testing.T) {
mz := NewMemoryZip(true, false)
payload := make([]byte, 64*1024)
for i := range payload {
payload[i] = byte(i % 251)
}
err := mz.AddFile("big.bin", payload)
tst.AssertNoErr(t, err)
data, err := mz.GetZip()
tst.AssertNoErr(t, err)
entries := readZipEntries(t, data)
tst.AssertEqual(t, len(entries), 1)
tst.AssertArrayEqual(t, entries["big.bin"], payload)
}
func TestMemoryZipGetZipClosesWriter(t *testing.T) {
mz := NewMemoryZip(true, false)
err := mz.AddFile("a.txt", []byte("data"))
tst.AssertNoErr(t, err)
tst.AssertTrue(t, mz.open)
_, err = mz.GetZip()
tst.AssertNoErr(t, err)
tst.AssertFalse(t, mz.open)
}
func TestMemoryZipGetZipIdempotent(t *testing.T) {
mz := NewMemoryZip(true, false)
err := mz.AddFile("a.txt", []byte("data"))
tst.AssertNoErr(t, err)
first, err := mz.GetZip()
tst.AssertNoErr(t, err)
second, err := mz.GetZip()
tst.AssertNoErr(t, err)
tst.AssertArrayEqual(t, first, second)
}
func TestMemoryZipAddFileAfterCloseFails(t *testing.T) {
mz := NewMemoryZip(true, false)
err := mz.Close()
tst.AssertNoErr(t, err)
err = mz.AddFile("a.txt", []byte("data"))
tst.AssertTrue(t, err == errAlreadyClosed)
}
func TestMemoryZipAddFileAfterGetZipFails(t *testing.T) {
mz := NewMemoryZip(true, false)
_, err := mz.GetZip()
tst.AssertNoErr(t, err)
err = mz.AddFile("a.txt", []byte("data"))
tst.AssertTrue(t, err == errAlreadyClosed)
}
func TestMemoryZipDoubleCloseIsNoop(t *testing.T) {
mz := NewMemoryZip(true, false)
err := mz.Close()
tst.AssertNoErr(t, err)
err = mz.Close()
tst.AssertNoErr(t, err)
}
func TestMemoryZipGetZipNotEnabled(t *testing.T) {
mz := NewMemoryZip(false, false)
_, err := mz.GetZip()
tst.AssertTrue(t, err == errZipNotEnabled)
}
func TestMemoryZipGetTarGzNotEnabled(t *testing.T) {
mz := NewMemoryZip(true, false)
_, err := mz.GetTarGz()
tst.AssertTrue(t, err == errTgzNotEnabled)
}
func TestMemoryZipBothDisabledClose(t *testing.T) {
mz := NewMemoryZip(false, false)
err := mz.AddFile("a.txt", []byte("data"))
tst.AssertNoErr(t, err)
err = mz.Close()
tst.AssertNoErr(t, err)
_, err = mz.GetZip()
tst.AssertTrue(t, err == errZipNotEnabled)
_, err = mz.GetTarGz()
tst.AssertTrue(t, err == errTgzNotEnabled)
}
func TestMemoryZipBothDisabledAddFileAfterCloseFails(t *testing.T) {
mz := NewMemoryZip(false, false)
err := mz.Close()
tst.AssertNoErr(t, err)
err = mz.AddFile("a.txt", []byte("data"))
tst.AssertTrue(t, err == errAlreadyClosed)
}
func TestMemoryZipNewMemoryZipFlags(t *testing.T) {
z1 := NewMemoryZip(true, false)
tst.AssertTrue(t, z1.zipEnabled)
tst.AssertFalse(t, z1.tarEnabled)
tst.AssertTrue(t, z1.open)
z2 := NewMemoryZip(false, false)
tst.AssertFalse(t, z2.zipEnabled)
tst.AssertFalse(t, z2.tarEnabled)
tst.AssertTrue(t, z2.open)
}
func TestMemoryZipZipBytesAreValidZipMagic(t *testing.T) {
mz := NewMemoryZip(true, false)
err := mz.AddFile("x.txt", []byte("y"))
tst.AssertNoErr(t, err)
data, err := mz.GetZip()
tst.AssertNoErr(t, err)
tst.AssertTrue(t, len(data) >= 4)
tst.AssertEqual(t, data[0], byte(0x50))
tst.AssertEqual(t, data[1], byte(0x4B))
}