compressor_test.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package compressor
  2. import (
  3. "bytes"
  4. "testing"
  5. )
  6. func TestGetCompressor(t *testing.T) {
  7. testCases := []struct {
  8. name string
  9. compressor string
  10. expectedError bool
  11. }{
  12. {
  13. name: "valid compressor zlib",
  14. compressor: "zlib",
  15. expectedError: false,
  16. },
  17. {
  18. name: "valid compressor gzip",
  19. compressor: "gzip",
  20. expectedError: false,
  21. },
  22. {
  23. name: "valid compressor flate",
  24. compressor: "flate",
  25. expectedError: false,
  26. },
  27. {
  28. name: "unsupported compressor",
  29. compressor: "invalid",
  30. expectedError: true,
  31. },
  32. }
  33. for _, tc := range testCases {
  34. t.Run(tc.name, func(t *testing.T) {
  35. compr, err := GetCompressor(tc.compressor)
  36. if tc.expectedError && err == nil {
  37. t.Errorf("expected error but got nil")
  38. }
  39. if !tc.expectedError && err != nil {
  40. t.Errorf("unexpected error: %v", err)
  41. }
  42. if !tc.expectedError && compr == nil {
  43. t.Errorf("expected non-nil compressor but got nil")
  44. }
  45. })
  46. }
  47. }
  48. func TestCompressAndDecompress(t *testing.T) {
  49. testCases := []struct {
  50. name string
  51. inputData []byte
  52. }{
  53. {
  54. name: "compress/decompress a simple string",
  55. inputData: []byte("Hello, world!"),
  56. },
  57. {
  58. name: "compress/decompress a larger data set",
  59. inputData: bytes.Repeat([]byte{0x01, 0x02, 0x03, 0x04}, 10000),
  60. },
  61. }
  62. for _, tc := range testCases {
  63. t.Run(tc.name, func(t *testing.T) {
  64. for _, name := range []string{ZLIB, GZIP, FLATE} {
  65. compr, err := GetCompressor(name)
  66. if err != nil {
  67. t.Fatalf("get compressor failed: %v", err)
  68. }
  69. compressedData, err := compr.Compress(tc.inputData)
  70. if err != nil {
  71. t.Fatalf("unexpected error while compressing data: %v", err)
  72. }
  73. if len(compressedData) == 0 {
  74. t.Error("compressed data should not be empty")
  75. }
  76. decompr, err := GetDecompressor(name)
  77. if err != nil {
  78. t.Fatalf("get decompressor failed: %v", err)
  79. }
  80. decompressedData, err := decompr.Decompress(compressedData)
  81. if err != nil {
  82. t.Fatalf("unexpected error while decompressing data: %v", err)
  83. }
  84. if !bytes.Equal(tc.inputData, decompressedData) {
  85. t.Errorf("decompressed data should be equal to input data: %s", name)
  86. }
  87. }
  88. })
  89. }
  90. }