github.com/kubeshop/testkube@v1.17.23/pkg/triggers/scraper_test.go (about) 1 package triggers 2 3 import ( 4 "context" 5 "testing" 6 "time" 7 8 "github.com/golang/mock/gomock" 9 "github.com/stretchr/testify/assert" 10 "go.mongodb.org/mongo-driver/mongo" 11 12 "github.com/kubeshop/testkube/pkg/api/v1/testkube" 13 "github.com/kubeshop/testkube/pkg/log" 14 "github.com/kubeshop/testkube/pkg/repository/result" 15 "github.com/kubeshop/testkube/pkg/repository/testresult" 16 ) 17 18 func TestService_runExecutionScraper(t *testing.T) { 19 t.Parallel() 20 21 t.Run("completed jobs", func(t *testing.T) { 22 t.Parallel() 23 24 mockCtrl := gomock.NewController(t) 25 defer mockCtrl.Finish() 26 27 ctx, cancel := context.WithTimeout(context.Background(), 310*time.Millisecond) 28 defer cancel() 29 30 mockResultRepository := result.NewMockRepository(mockCtrl) 31 mockTestResultRepository := testresult.NewMockRepository(mockCtrl) 32 33 mockResultRepository.EXPECT().Get(gomock.Any(), "test-execution-1").Return(testkube.Execution{}, mongo.ErrNoDocuments) 34 testSuiteExecutionStatus := testkube.PASSED_TestSuiteExecutionStatus 35 mockTestSuiteExecution := testkube.TestSuiteExecution{Id: "test-suite-execution-1", Status: &testSuiteExecutionStatus} 36 mockTestResultRepository.EXPECT().Get(gomock.Any(), "test-suite-execution-1").Return(mockTestSuiteExecution, nil) 37 38 statusKey1 := newStatusKey("testkube", "test-trigger-1") 39 statusKey2 := newStatusKey("testkube", "test-trigger-2") 40 triggerStatus1 := &triggerStatus{testExecutionIDs: []string{"test-execution-1"}} 41 triggerStatus2 := &triggerStatus{testSuiteExecutionIDs: []string{"test-suite-execution-1"}} 42 triggerStatusMap := map[statusKey]*triggerStatus{ 43 statusKey1: triggerStatus1, 44 statusKey2: triggerStatus2, 45 } 46 s := &Service{ 47 triggerStatus: triggerStatusMap, 48 resultRepository: mockResultRepository, 49 testResultRepository: mockTestResultRepository, 50 scraperInterval: 100 * time.Millisecond, 51 logger: log.DefaultLogger, 52 } 53 54 s.runExecutionScraper(ctx) 55 56 for testTrigger, status := range s.triggerStatus { 57 assert.Falsef(t, status.hasActiveTests(), "TestTrigger V1 %s should not have active tests", testTrigger) 58 } 59 }) 60 61 t.Run("active jobs", func(t *testing.T) { 62 t.Parallel() 63 64 mockCtrl := gomock.NewController(t) 65 defer mockCtrl.Finish() 66 67 ctx, cancel := context.WithTimeout(context.Background(), 310*time.Millisecond) 68 defer cancel() 69 70 mockResultRepository := result.NewMockRepository(mockCtrl) 71 mockTestResultRepository := testresult.NewMockRepository(mockCtrl) 72 73 testSuiteExecutionStatus := testkube.RUNNING_TestSuiteExecutionStatus 74 mockTestSuiteExecution := testkube.TestSuiteExecution{Id: "test-suite-execution-1", Status: &testSuiteExecutionStatus} 75 mockTestResultRepository.EXPECT().Get(gomock.Any(), "test-suite-execution-1").Return(mockTestSuiteExecution, nil).Times(3) 76 77 statusKey1 := newStatusKey("testkube", "test-trigger-1") 78 triggerStatus1 := &triggerStatus{testSuiteExecutionIDs: []string{"test-suite-execution-1"}} 79 triggerStatusMap := map[statusKey]*triggerStatus{ 80 statusKey1: triggerStatus1, 81 } 82 s := &Service{ 83 triggerStatus: triggerStatusMap, 84 resultRepository: mockResultRepository, 85 testResultRepository: mockTestResultRepository, 86 scraperInterval: 100 * time.Millisecond, 87 logger: log.DefaultLogger, 88 } 89 90 s.runExecutionScraper(ctx) 91 92 for testTrigger, status := range s.triggerStatus { 93 assert.Truef(t, status.hasActiveTests(), "TestTrigger V1 %s should not have finished tests", testTrigger) 94 } 95 }) 96 }