@@ -19,10 +19,7 @@ import (
19
19
"github.com/aquasecurity/fanal/extractor"
20
20
"github.com/aquasecurity/fanal/types"
21
21
"github.com/docker/docker/client"
22
- "github.com/genuinetools/reg/registry"
23
- "github.com/opencontainers/go-digest"
24
22
"github.com/stretchr/testify/assert"
25
- "github.com/stretchr/testify/require"
26
23
)
27
24
28
25
// TODO: Use a memory based FS rather than actual fs
@@ -405,127 +402,6 @@ func TestDockerExtractor_Extract(t *testing.T) {
405
402
}
406
403
}
407
404
408
- func TestDocker_ExtractLayerWorker (t * testing.T ) {
409
- goodtarzstdgolden , _ := ioutil .ReadFile ("testdata/testdir.tar.zstd" )
410
- goodReturnedTarContent , _ := ioutil .ReadFile ("testdata/goodTarContent.golden" )
411
-
412
- testCases := []struct {
413
- name string
414
- cacheHit bool
415
- garbageCache bool
416
- requiredFiles []string
417
- expectedCacheContents []byte
418
- expectedReturnedTarContent []byte
419
- }{
420
- {
421
- name : "happy path with cache miss and write back" ,
422
- cacheHit : false ,
423
- requiredFiles : []string {"testdir/helloworld.txt" , "testdir/badworld.txt" },
424
- expectedCacheContents : goodtarzstdgolden ,
425
- expectedReturnedTarContent : goodReturnedTarContent ,
426
- },
427
- {
428
- name : "happy path with cache hit with garbage cache and write back" ,
429
- cacheHit : true ,
430
- garbageCache : true ,
431
- requiredFiles : []string {"testdir/helloworld.txt" , "testdir/badworld.txt" },
432
- expectedCacheContents : goodtarzstdgolden ,
433
- expectedReturnedTarContent : goodReturnedTarContent ,
434
- },
435
- {
436
- name : "happy path with cache hit" ,
437
- cacheHit : true ,
438
- expectedCacheContents : goodtarzstdgolden ,
439
- expectedReturnedTarContent : goodReturnedTarContent ,
440
- },
441
- {
442
- name : "happy path with cache miss but no write back" ,
443
- cacheHit : false ,
444
- expectedCacheContents : []byte {0x28 , 0xb5 , 0x2f , 0xfd , 0x4 , 0x60 , 0x1 , 0x0 , 0x0 , 0x99 , 0xe9 , 0xd8 , 0x51 }, // just the empty tar header
445
- expectedReturnedTarContent : []byte {},
446
- },
447
- }
448
-
449
- for _ , tc := range testCases {
450
- inputDigest := digest .Digest ("sha256:62d8908bee94c202b2d35224a221aaa2058318bfa9879fa541efaecba272331b" )
451
-
452
- ts := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
453
- httpPath := r .URL .String ()
454
- switch {
455
- case strings .Contains (httpPath , "/v2/library/fooimage/blobs/sha256:62d8908bee94c202b2d35224a221aaa2058318bfa9879fa541efaecba272331b" ):
456
- layerData , _ := ioutil .ReadFile ("testdata/testdir.tar.gz" )
457
- _ , _ = w .Write (layerData )
458
- default :
459
- assert .FailNow (t , "unexpected path accessed: " , fmt .Sprintf ("%s %s" , r .URL .String (), tc .name ))
460
- }
461
- }))
462
- defer ts .Close ()
463
-
464
- c , err := client .NewClientWithOpts (client .WithHost (ts .URL ))
465
- assert .NoError (t , err )
466
-
467
- // setup cache
468
- s , tmpDir , err := setupCache ()
469
- require .NoError (t , err , tc .name )
470
- defer os .RemoveAll (tmpDir )
471
-
472
- if tc .cacheHit {
473
- switch tc .garbageCache {
474
- case true :
475
- garbage , _ := ioutil .ReadFile ("testdata/invalidgzvalidtar.tar.gz" )
476
- assert .NoError (t , s .Set (LayerTarsBucket , string (inputDigest ), garbage ))
477
- default :
478
- assert .NoError (t , s .Set (LayerTarsBucket , string (inputDigest ), goodtarzstdgolden ))
479
- }
480
- }
481
-
482
- de := Extractor {
483
- Option : types.DockerOption {
484
- AuthURL : ts .URL ,
485
- NonSSL : true ,
486
- SkipPing : true ,
487
- Timeout : time .Second * 1000 ,
488
- },
489
- Client : c ,
490
- cache : s ,
491
- }
492
-
493
- tsUrl := strings .TrimPrefix (ts .URL , "http://" )
494
- inputImage := registry.Image {
495
- Domain : tsUrl ,
496
- Path : "library/fooimage" ,
497
- Tag : "latest" ,
498
- }
499
-
500
- layerCh := make (chan layer )
501
- errCh := make (chan error )
502
- r , err := de .createRegistryClient (context .TODO (), inputImage .Domain )
503
- go func () {
504
- de .extractLayerWorker (inputDigest , r , context .TODO (), inputImage , errCh , layerCh , tc .requiredFiles )
505
- }()
506
-
507
- var errRecieved error
508
- var layerReceived layer
509
-
510
- select {
511
- case errRecieved = <- errCh :
512
- assert .FailNow (t , "unexpected error received, err: " , fmt .Sprintf ("%s, %s" , errRecieved , tc .name ))
513
- case layerReceived = <- layerCh :
514
- assert .Equal (t , inputDigest , layerReceived .ID , tc .name )
515
- got , _ := ioutil .ReadAll (layerReceived .Content )
516
- assert .Equal (t , tc .expectedReturnedTarContent , got , tc .name )
517
- }
518
-
519
- // check cache contents
520
- var actualCacheContents []byte
521
- found , err := s .Get (LayerTarsBucket , string (inputDigest ), & actualCacheContents )
522
-
523
- assert .True (t , found , tc .name )
524
- assert .NoError (t , err , tc .name )
525
- assert .Equal (t , tc .expectedCacheContents , actualCacheContents , tc .name )
526
- }
527
- }
528
-
529
405
func TestDocker_ExtractLayerFiles (t * testing.T ) {
530
406
de := Extractor {}
531
407
0 commit comments