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  }