diff --git a/middleware/cache_compressor_test.go b/middleware/cache_compressor_test.go index 04e8cc5..b2be3cb 100644 --- a/middleware/cache_compressor_test.go +++ b/middleware/cache_compressor_test.go @@ -62,3 +62,20 @@ func TestNewGzipCompress(t *testing.T) { result, _ = GzipDecompress(result.Bytes()) assert.Equal(data, result) } + +func TestNewZstdCompress(t *testing.T) { + assert := assert.New(t) + compressor := NewCacheZstdCompressor() + compressor.MinLength = 20 + + assert.False(compressor.IsValid("text", 1)) + assert.True(compressor.IsValid("text", 100)) + + data := bytes.NewBufferString("hello world!hello world!hello world!") + result, compressionType, err := compressor.Compress(data) + assert.Equal(CompressionZstd, compressionType) + assert.Nil(err) + assert.NotEqual(data, result) + result, _ = ZstdDecompress(result.Bytes()) + assert.Equal(data, result) +} diff --git a/middleware/compress.go b/middleware/compress.go index f02d544..d676ea4 100644 --- a/middleware/compress.go +++ b/middleware/compress.go @@ -209,6 +209,8 @@ func NewCompress(config CompressConfig) elton.Handler { fillHeader(encoding) c.BodyBuffer = newBuf } + // 已有符合的压缩,处理完成跳出当前循环 + break } return nil } diff --git a/middleware/compress_test.go b/middleware/compress_test.go index d50c4f6..8d2d2de 100644 --- a/middleware/compress_test.go +++ b/middleware/compress_test.go @@ -249,7 +249,7 @@ func TestCompressMiddleware(t *testing.T) { encoding: "gzip", etag: "W/123", }, - // reader pike + // reader pipe { newContext: func() *elton.Context { req := httptest.NewRequest("GET", "/users/me", nil) diff --git a/middleware/zstd.go b/middleware/zstd.go index 796d398..8dffc5e 100644 --- a/middleware/zstd.go +++ b/middleware/zstd.go @@ -72,7 +72,7 @@ func (z *ZstdCompressor) Compress(buf []byte, levels ...int) (*bytes.Buffer, err if len(levels) != 0 && levels[0] != IgnoreCompression { level = levels[0] } - return GzipCompress(buf, level) + return ZstdCompress(buf, level) } // Pipe compress by pipe