diff options
| author | 2025-11-19 08:00:00 +0800 | |
|---|---|---|
| committer | 2025-11-19 08:00:00 +0800 | |
| commit | ed0a113f034aa42aea23471c4bc0d7af159b7002 (patch) | |
| tree | 7e828011b9e213499ce382eb17e2552da6e48de4 /internal/zlibx/decompress_test.go | |
| parent | Remove some redundant code (diff) | |
| signature | No signature | |
Probably should name the custom packages specially
Diffstat (limited to 'internal/zlibx/decompress_test.go')
| -rw-r--r-- | internal/zlibx/decompress_test.go | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/internal/zlibx/decompress_test.go b/internal/zlibx/decompress_test.go new file mode 100644 index 00000000..a4e9c608 --- /dev/null +++ b/internal/zlibx/decompress_test.go @@ -0,0 +1,84 @@ +package zlibx + +import ( + "bytes" + stdzlib "compress/zlib" + "testing" +) + +func compressZlib(t *testing.T, payload, dict []byte) []byte { + t.Helper() + var buf bytes.Buffer + var ( + w *stdzlib.Writer + err error + ) + if dict != nil { + w, err = stdzlib.NewWriterLevelDict(&buf, stdzlib.DefaultCompression, dict) + } else { + w = stdzlib.NewWriter(&buf) + } + if err != nil { + t.Fatalf("NewWriter: %v", err) + } + if _, err := w.Write(payload); err != nil { + t.Fatalf("Write: %v", err) + } + if err := w.Close(); err != nil { + t.Fatalf("Close: %v", err) + } + return buf.Bytes() +} + +func TestDecompress(t *testing.T) { + payload := []byte("hello, zlib world!") + compressed := compressZlib(t, payload, nil) + + out, err := Decompress(compressed) + if err != nil { + t.Fatalf("Decompress: %v", err) + } + defer out.Release() + + if !bytes.Equal(out.Bytes(), payload) { + t.Fatalf("unexpected payload %q", out.Bytes()) + } +} + +func TestDecompressDict(t *testing.T) { + dict := []byte("git dictionary for zlib") + payload := append([]byte(nil), dict...) + payload = append(payload, []byte(" -- extended body -- extended body")...) + compressed := compressZlib(t, payload, dict) + + out, err := DecompressDict(compressed, dict) + if err != nil { + t.Fatalf("DecompressDict: %v", err) + } + defer out.Release() + + if !bytes.Equal(out.Bytes(), payload) { + t.Fatalf("unexpected payload %q", out.Bytes()) + } +} + +func TestDecompressDictMissing(t *testing.T) { + dict := []byte("preset dictionary") + payload := append([]byte(nil), dict...) + payload = append(payload, []byte(" .. more data ..")...) + compressed := compressZlib(t, payload, dict) + + if _, err := Decompress(compressed); err != ErrDictionary { + t.Fatalf("expected ErrDictionary, got %v", err) + } +} + +func TestDecompressChecksumError(t *testing.T) { + payload := []byte("checksum check") + compressed := compressZlib(t, payload, nil) + compressed[len(compressed)-1] ^= 0xff + + if _, err := Decompress(compressed); err != ErrChecksum { + t.Fatalf("expected ErrChecksum, got %v", err) + } +} |
