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  }