github.com/kubeshop/testkube@v1.17.23/contrib/executor/scraper/pkg/runner/runner_test.go (about) 1 package runner 2 3 import ( 4 "context" 5 "errors" 6 "log" 7 "testing" 8 9 "github.com/golang/mock/gomock" 10 "github.com/stretchr/testify/assert" 11 12 "github.com/kubeshop/testkube/pkg/api/v1/testkube" 13 "github.com/kubeshop/testkube/pkg/envs" 14 "github.com/kubeshop/testkube/pkg/executor/scraper" 15 ) 16 17 func TestRun(t *testing.T) { 18 t.Parallel() 19 20 mockCtrl := gomock.NewController(t) 21 defer mockCtrl.Finish() 22 23 e := testkube.Execution{ArtifactRequest: &testkube.ArtifactRequest{VolumeMountPath: ".", StorageClassName: "standard"}} 24 tests := []struct { 25 name string 26 scraper func(id string, directories, masks []string) error 27 execution testkube.Execution 28 expectedError string 29 expectedStatus *testkube.ExecutionStatus 30 scraperBuilder func() scraper.Scraper 31 }{ 32 { 33 name: "successful scraper", 34 scraper: func(id string, directories, masks []string) error { return nil }, 35 execution: e, 36 expectedError: "", 37 expectedStatus: nil, 38 scraperBuilder: func() scraper.Scraper { 39 s := scraper.NewMockScraper(mockCtrl) 40 s.EXPECT().Scrape(gomock.Any(), []string{"."}, gomock.Any(), gomock.Eq(e)).Return(nil) 41 s.EXPECT().Close().Return(nil) 42 return s 43 }, 44 }, 45 { 46 name: "failing scraper", 47 scraper: func(id string, directories, masks []string) error { return errors.New("Scraping failed") }, 48 execution: testkube.Execution{ArtifactRequest: &testkube.ArtifactRequest{VolumeMountPath: ".", StorageClassName: "standard"}}, 49 expectedError: "error scraping artifacts from container executor: Scraping failed", 50 expectedStatus: testkube.ExecutionStatusFailed, 51 scraperBuilder: func() scraper.Scraper { 52 s := scraper.NewMockScraper(mockCtrl) 53 s.EXPECT().Scrape(gomock.Any(), []string{"."}, gomock.Any(), gomock.Eq(e)).Return(errors.New("Scraping failed")) 54 s.EXPECT().Close().Return(nil) 55 return s 56 }, 57 }, 58 } 59 60 for i := range tests { 61 test := tests[i] 62 t.Run(test.name, func(t *testing.T) { 63 t.Parallel() 64 65 runner := ScraperRunner{ 66 Params: envs.Params{ScrapperEnabled: true}, 67 Scraper: test.scraperBuilder(), 68 } 69 70 res, err := runner.Run(context.Background(), test.execution) 71 if err != nil { 72 assert.EqualError(t, err, test.expectedError) 73 assert.Equal(t, *test.expectedStatus, *res.Status) 74 } else { 75 assert.Empty(t, test.expectedError) 76 assert.Empty(t, res.Status) 77 } 78 }) 79 } 80 81 } 82 83 // Scraper implements a mock for the Scraper from "github.com/kubeshop/testkube/pkg/executor/scraper" 84 type Scraper struct { 85 ScrapeFn func(id string, directories, masks []string) error 86 } 87 88 func (s Scraper) Scrape(id string, directories, masks []string) error { 89 if s.ScrapeFn == nil { 90 log.Fatal("not implemented") 91 } 92 return s.ScrapeFn(id, directories, masks) 93 }