package codec import ( "bytes" "compress/gzip" "errors" "fmt" "testing" "github.com/stretchr/testify/assert" ) func TestGzip(t *testing.T) { var buf bytes.Buffer for i := 0; i < 10000; i++ { fmt.Fprint(&buf, i) } bs := Gzip(buf.Bytes()) actual, err := Gunzip(bs) assert.Nil(t, err) assert.True(t, len(bs) < buf.Len()) assert.Equal(t, buf.Bytes(), actual) } func TestGunzip(t *testing.T) { tests := []struct { name string input []byte expected []byte expectedErr error }{ { name: "valid input", input: func() []byte { var buf bytes.Buffer gz := gzip.NewWriter(&buf) gz.Write([]byte("hello")) gz.Close() return buf.Bytes() }(), expected: []byte("hello"), expectedErr: nil, }, { name: "invalid input", input: []byte("invalid input"), expected: nil, expectedErr: gzip.ErrHeader, }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { result, err := Gunzip(test.input) if !bytes.Equal(result, test.expected) { t.Errorf("unexpected result: %v", result) } if !errors.Is(err, test.expectedErr) { t.Errorf("unexpected error: %v", err) } }) } }