diff --git a/encoding.go b/encoding.go index fdb551b8..839f89d9 100644 --- a/encoding.go +++ b/encoding.go @@ -2,8 +2,8 @@ package meilisearch import ( "bytes" - "compress/flate" "compress/gzip" + "compress/zlib" "encoding/json" "github.com/andybalholm/brotli" "io" @@ -38,7 +38,7 @@ func newEncoding(ce ContentEncoding, level EncodingCompressionLevel) encoder { return &flateEncoder{ flWriterPool: &sync.Pool{ New: func() interface{} { - w, err := flate.NewWriter(io.Discard, level.Int()) + w, err := zlib.NewWriterLevel(io.Discard, level.Int()) return &flateWriter{ writer: w, err: err, @@ -124,7 +124,7 @@ type flateEncoder struct { } type flateWriter struct { - writer *flate.Writer + writer *zlib.Writer err error } @@ -152,7 +152,11 @@ func (d *flateEncoder) Encode(rc io.Reader) (*bytes.Buffer, error) { } func (d *flateEncoder) Decode(data []byte, vPtr interface{}) error { - r := flate.NewReader(bytes.NewBuffer(data)) + r, err := zlib.NewReader(bytes.NewBuffer(data)) + if err != nil { + return err + } + defer func() { _ = r.Close() }() diff --git a/encoding_test.go b/encoding_test.go index f38d27b8..f9c461e9 100644 --- a/encoding_test.go +++ b/encoding_test.go @@ -4,6 +4,7 @@ import ( "bytes" "compress/flate" "compress/gzip" + "compress/zlib" "encoding/json" "errors" "github.com/andybalholm/brotli" @@ -54,7 +55,6 @@ func Test_Encode_ErrorOnNewWriter(t *testing.T) { New: func() interface{} { return &flateWriter{ writer: nil, - err: errors.New("new writer error"), } }, }, @@ -93,7 +93,7 @@ func Test_Encode_ErrorInCopyZeroAlloc(t *testing.T) { d := &flateEncoder{ flWriterPool: &sync.Pool{ New: func() interface{} { - w, err := flate.NewWriter(io.Discard, flate.DefaultCompression) + w, err := zlib.NewWriterLevel(io.Discard, flate.DefaultCompression) return &flateWriter{ writer: w, err: err, diff --git a/index_document_test.go b/index_document_test.go index 6ebf1d6d..dd0d389c 100644 --- a/index_document_test.go +++ b/index_document_test.go @@ -41,6 +41,30 @@ func Test_AddOrUpdateDocumentsWithContentEncoding(t *testing.T) { }, }, }, + { + Name: "TestIndexBasicAddDocumentsWithDeflate", + ContentEncoding: DeflateEncoding, + Request: []map[string]interface{}{ + {"ID": "123", "Name": "Pride and Prejudice"}, + }, + Response: struct { + WantResp *TaskInfo + DocResp DocumentsResult + }{WantResp: &TaskInfo{ + TaskUID: 0, + Status: "enqueued", + Type: TaskTypeDocumentAdditionOrUpdate, + }, + DocResp: DocumentsResult{ + Results: []map[string]interface{}{ + {"ID": "123", "Name": "Pride and Prejudice"}, + }, + Limit: 3, + Offset: 0, + Total: 1, + }, + }, + }, { Name: "TestIndexBasicAddDocumentsWithBrotli", ContentEncoding: BrotliEncoding, diff --git a/index_search_test.go b/index_search_test.go index a49bdc76..b1e789dd 100644 --- a/index_search_test.go +++ b/index_search_test.go @@ -50,6 +50,39 @@ func TestIndex_SearchWithContentEncoding(t *testing.T) { Limit: 20, }, }, + { + Name: "SearchResultWithDeflateEncoding", + ContentEncoding: DeflateEncoding, + Query: "prince", + Request: &SearchRequest{ + IndexUID: "indexUID", + }, + Response: &SearchResponse{ + Hits: []interface{}{ + map[string]interface{}{ + "book_id": float64(456), "title": "Le Petit Prince", + }, + map[string]interface{}{ + "Tag": "Epic fantasy", "book_id": float64(4), "title": "Harry Potter and the Half-Blood Prince", + }, + }, + EstimatedTotalHits: 2, + Offset: 0, + Limit: 20, + }, + FacetRequest: &FacetSearchRequest{ + FacetName: "tag", + FacetQuery: "Novel", + }, + FacetResponse: &FacetSearchResponse{ + FacetHits: []interface{}{ + map[string]interface{}{ + "value": "Novel", "count": float64(5), + }, + }, + FacetQuery: "Novel", + }, + }, { Name: "SearchResultWithBrotliEncoding", ContentEncoding: BrotliEncoding, diff --git a/meilisearch_test.go b/meilisearch_test.go index b3b93cb5..8a3b4fc1 100644 --- a/meilisearch_test.go +++ b/meilisearch_test.go @@ -2186,6 +2186,12 @@ func Test_ListIndex(t *testing.T) { Indexes: []string{"foo", "bar"}, WantErr: false, }, + { + Name: "Basic get list of indexes with deflate encoding", + Indexes: []string{"foo", "bar"}, + ContentEncoding: DeflateEncoding, + WantErr: false, + }, { Name: "Basic get list of indexes with encoding", Indexes: []string{"foo", "bar"},