@@ -2,6 +2,9 @@ package topicwriterinternal
22
33import (
44 "bytes"
5+ "compress/gzip"
6+ "fmt"
7+ "io"
58 "strings"
69 "testing"
710
@@ -20,7 +23,7 @@ func TestEncoderSelector_CodecMeasure(t *testing.T) {
2023 })
2124 t .Run ("One" , func (t * testing.T ) {
2225 s := NewEncoderSelector (
23- NewEncoderMap (),
26+ NewMultiEncoder (),
2427 rawtopiccommon.SupportedCodecs {rawtopiccommon .CodecRaw },
2528 1 ,
2629 & trace.Topic {},
@@ -206,3 +209,89 @@ func TestCompressMessages(t *testing.T) {
206209 require .Error (t , cacheMessages (messages , rawtopiccommon .CodecGzip , parallelCount ))
207210 })
208211}
212+
213+ func TestMultiEncoder (t * testing.T ) {
214+ decompressGzip := func (rd io.Reader ) string {
215+ gzreader , err := gzip .NewReader (rd )
216+ require .NoError (t , err )
217+
218+ decompressedMsg , err := io .ReadAll (gzreader )
219+ require .NoError (t , err )
220+
221+ return string (decompressedMsg )
222+ }
223+
224+ t .Run ("BuffersPool" , func (t * testing.T ) {
225+ testMultiEncoder := NewMultiEncoder ()
226+
227+ buf := & bytes.Buffer {}
228+ for i := 0 ; i < 50 ; i ++ {
229+ testMsg := []byte (fmt .Sprintf ("test_data_%d" , i ))
230+
231+ buf .Reset ()
232+ _ , err := testMultiEncoder .Encode (rawtopiccommon .CodecGzip , buf , bytes .NewReader (testMsg ))
233+ require .NoError (t , err )
234+
235+ require .Equal (t , string (testMsg ), decompressGzip (buf ))
236+ }
237+ })
238+
239+ t .Run ("NotResetableWriter" , func (t * testing.T ) {
240+ testMultiEncoder := NewMultiEncoder ()
241+ require .Len (t , testMultiEncoder .ep , 2 )
242+
243+ buf := & bytes.Buffer {}
244+ _ , err := testMultiEncoder .EncodeBytes (rawtopiccommon .CodecRaw , buf , []byte ("test_data" ))
245+ require .NoError (t , err )
246+ require .Equal (t , "test_data" , buf .String ())
247+ })
248+
249+ t .Run ("ResetableWriterCustom" , func (t * testing.T ) {
250+ testMultiEncoder := NewMultiEncoder ()
251+
252+ customCodecCode := rawtopiccommon .Codec (10001 )
253+ testMultiEncoder .AddEncoder (customCodecCode , func (writer io.Writer ) (io.WriteCloser , error ) {
254+ return gzip .NewWriter (writer ), nil
255+ })
256+ require .Len (t , testMultiEncoder .ep , 3 )
257+
258+ buf := & bytes.Buffer {}
259+ _ , err := testMultiEncoder .EncodeBytes (customCodecCode , buf , []byte ("test_data_1" ))
260+ require .NoError (t , err )
261+ require .Equal (t , "test_data_1" , decompressGzip (buf ))
262+
263+ buf .Reset ()
264+ _ , err = testMultiEncoder .EncodeBytes (rawtopiccommon .CodecGzip , buf , []byte ("test_data_2" ))
265+ require .NoError (t , err )
266+ require .Equal (t , "test_data_2" , decompressGzip (buf ))
267+ })
268+
269+ t .Run ("ResetableWriter" , func (t * testing.T ) {
270+ testMultiEncoder := NewMultiEncoder ()
271+
272+ buf := & bytes.Buffer {}
273+ _ , err := testMultiEncoder .EncodeBytes (rawtopiccommon .CodecGzip , buf , []byte ("test_data_1" ))
274+ require .NoError (t , err )
275+ require .Equal (t , "test_data_1" , decompressGzip (buf ))
276+
277+ buf .Reset ()
278+ _ , err = testMultiEncoder .EncodeBytes (rawtopiccommon .CodecGzip , buf , []byte ("test_data_2" ))
279+ require .NoError (t , err )
280+ require .Equal (t , "test_data_2" , decompressGzip (buf ))
281+ })
282+
283+ t .Run ("ResetableWriterManyMessages" , func (t * testing.T ) {
284+ testMultiEncoder := NewMultiEncoder ()
285+
286+ buf := & bytes.Buffer {}
287+ for i := 0 ; i < 50 ; i ++ {
288+ testMsg := []byte (fmt .Sprintf ("test_data_%d" , i ))
289+
290+ buf .Reset ()
291+ _ , err := testMultiEncoder .EncodeBytes (rawtopiccommon .CodecGzip , buf , testMsg )
292+ require .NoError (t , err )
293+
294+ require .Equal (t , string (testMsg ), decompressGzip (buf ))
295+ }
296+ })
297+ }
0 commit comments