@@ -5,6 +5,7 @@ package store
55
66import (
77 "compress/gzip"
8+ "context"
89 "errors"
910 "io"
1011 "os"
@@ -257,3 +258,49 @@ func TestReadGZip(t *testing.T) {
257258 l .Close ()
258259 }
259260}
261+
262+ func TestCompressAndEncrypt (t * testing.T ) {
263+ tmpDir := t .TempDir ()
264+ storage , err := NewStorage (tmpDir )
265+ require .NoError (t , err )
266+ defer storage .Close ()
267+ require .NoError (t , storage .WriteFile (context .Background (), "key" , genAesKey ()))
268+ keyFile := filepath .Join (tmpDir , "key" )
269+
270+ // write with compression and encryption
271+ writer , err := newRotateWriter (zap .NewNop (), storage , WriterCfg {
272+ Dir : tmpDir ,
273+ FileSize : 1000 ,
274+ Compress : true ,
275+ EncryptMethod : EncryptAes ,
276+ KeyFile : keyFile ,
277+ })
278+ require .NoError (t , err )
279+ _ , err = writer .Write ([]byte ("test" ))
280+ require .NoError (t , err )
281+ require .NoError (t , writer .Close ())
282+
283+ // make sure data is compressed after encryption
284+ file , err := os .Open (filepath .Join (tmpDir , "traffic-1.log.gz" ))
285+ require .NoError (t , err )
286+ greader , err := gzip .NewReader (file )
287+ require .NoError (t , err )
288+ data := make ([]byte , 1000 )
289+ n , err := io .ReadFull (greader , data )
290+ require .ErrorContains (t , err , "EOF" )
291+ require .Equal (t , 20 , n )
292+ require .NoError (t , file .Close ())
293+
294+ // rotateReader is able to read the file
295+ reader , err := newRotateReader (zap .NewNop (), storage , ReaderCfg {
296+ Dir : tmpDir ,
297+ EncryptMethod : EncryptAes ,
298+ KeyFile : keyFile ,
299+ })
300+ require .NoError (t , err )
301+ n , err = io .ReadFull (reader , data )
302+ require .ErrorContains (t , err , "EOF" )
303+ require .Equal (t , 4 , n )
304+ require .Equal (t , []byte ("test" ), data [:4 ])
305+ require .NoError (t , reader .Close ())
306+ }
0 commit comments