|
@@ -0,0 +1,96 @@
|
|
|
+package compressor
|
|
|
+
|
|
|
+import (
|
|
|
+ "bytes"
|
|
|
+ "testing"
|
|
|
+)
|
|
|
+
|
|
|
+func TestGetCompressor(t *testing.T) {
|
|
|
+ testCases := []struct {
|
|
|
+ name string
|
|
|
+ compressor string
|
|
|
+ expectedError bool
|
|
|
+ }{
|
|
|
+ {
|
|
|
+ name: "valid compressor zlib",
|
|
|
+ compressor: "zlib",
|
|
|
+ expectedError: false,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "valid compressor gzip",
|
|
|
+ compressor: "gzip",
|
|
|
+ expectedError: false,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "valid compressor flate",
|
|
|
+ compressor: "flate",
|
|
|
+ expectedError: false,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "unsupported compressor",
|
|
|
+ compressor: "invalid",
|
|
|
+ expectedError: true,
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, tc := range testCases {
|
|
|
+ t.Run(tc.name, func(t *testing.T) {
|
|
|
+ compr, err := GetCompressor(tc.compressor)
|
|
|
+ if tc.expectedError && err == nil {
|
|
|
+ t.Errorf("expected error but got nil")
|
|
|
+ }
|
|
|
+ if !tc.expectedError && err != nil {
|
|
|
+ t.Errorf("unexpected error: %v", err)
|
|
|
+ }
|
|
|
+ if !tc.expectedError && compr == nil {
|
|
|
+ t.Errorf("expected non-nil compressor but got nil")
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestCompressAndDecompress(t *testing.T) {
|
|
|
+ testCases := []struct {
|
|
|
+ name string
|
|
|
+ inputData []byte
|
|
|
+ }{
|
|
|
+ {
|
|
|
+ name: "compress/decompress a simple string",
|
|
|
+ inputData: []byte("Hello, world!"),
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: "compress/decompress a larger data set",
|
|
|
+ inputData: bytes.Repeat([]byte{0x01, 0x02, 0x03, 0x04}, 10000),
|
|
|
+ },
|
|
|
+ }
|
|
|
+
|
|
|
+ for _, tc := range testCases {
|
|
|
+ t.Run(tc.name, func(t *testing.T) {
|
|
|
+ for _, name := range []string{ZLIB, GZIP, FLATE} {
|
|
|
+ compr, err := GetCompressor(name)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("get compressor failed: %v", err)
|
|
|
+ }
|
|
|
+ compressedData, err := compr.Compress(tc.inputData)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("unexpected error while compressing data: %v", err)
|
|
|
+ }
|
|
|
+ if len(compressedData) == 0 {
|
|
|
+ t.Error("compressed data should not be empty")
|
|
|
+ }
|
|
|
+
|
|
|
+ decompr, err := GetDecompressor(name)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("get decompressor failed: %v", err)
|
|
|
+ }
|
|
|
+ decompressedData, err := decompr.Decompress(compressedData)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("unexpected error while decompressing data: %v", err)
|
|
|
+ }
|
|
|
+ if !bytes.Equal(tc.inputData, decompressedData) {
|
|
|
+ t.Errorf("decompressed data should be equal to input data: %s", name)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+}
|