diff --git a/decompress.go b/decompress.go new file mode 100644 index 000000000..061b1d55f --- /dev/null +++ b/decompress.go @@ -0,0 +1,23 @@ +package httpexpect + +import ( + "bytes" + "compress/gzip" + "io/ioutil" +) + +// DecompressGZIP decompresses a GZIP compressed string and returns the original string +func DecompressGZIP(compressedData []byte) (string, error) { + reader, err := gzip.NewReader(bytes.NewBuffer(compressedData)) + if err != nil { + return "", err + } + defer reader.Close() + + decompressedData, err := ioutil.ReadAll(reader) + if err != nil { + return "", err + } + + return string(decompressedData), nil +} diff --git a/decompress_test.go b/decompress_test.go new file mode 100644 index 000000000..25dfc6e17 --- /dev/null +++ b/decompress_test.go @@ -0,0 +1,46 @@ +package httpexpect + +import ( + "bytes" + "compress/gzip" + "testing" +) + +// Helper function to compress a string (for testing purposes) +func compressString(input string) ([]byte, error) { + var buf bytes.Buffer + writer := gzip.NewWriter(&buf) + + _, err := writer.Write([]byte(input)) + if err != nil { + return nil, err + } + + err = writer.Close() + if err != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +func TestDecompressGZIP(t *testing.T) { + originalText := "Hello, this is a test string for decompression." + + // First, compress the original text + compressedData, err := compressString(originalText) + if err != nil { + t.Fatalf("Failed to compress string: %v", err) + } + + // Now, decompress it using your function + decompressedText, err := DecompressGZIP(compressedData) + if err != nil { + t.Fatalf("Failed to decompress string: %v", err) + } + + // Verify + if decompressedText != originalText { + t.Errorf("Expected %q but got %q", originalText, decompressedText) + } +}