github.com/kubeshop/testkube@v1.17.23/pkg/workerpool/service_test.go (about) 1 package workerpool 2 3 import ( 4 "context" 5 "fmt" 6 "testing" 7 8 "github.com/kubeshop/testkube/pkg/api/v1/testkube" 9 ) 10 11 const ( 12 requestCount = 10 13 concurrencylevel = 2 14 ) 15 16 func TestWorkerPool(t *testing.T) { 17 service := New[testkube.Test, testkube.ExecutionRequest, testkube.Execution](concurrencylevel) 18 19 ctx, cancel := context.WithCancel(context.TODO()) 20 defer cancel() 21 22 go service.SendRequests(testRequests()) 23 24 go service.Run(ctx) 25 26 total := 0 27 for r := range service.GetResponses() { 28 if r.Result.Id != r.Result.TestName || r.Result.Id == "" || r.Result.TestName == "" { 29 t.Fatalf("wrong value %v; expected %v", r.Result.Id, r.Result.TestName) 30 } 31 32 total++ 33 } 34 35 if total != requestCount { 36 t.Fatalf("wrong value %v; expected %v", total, requestCount) 37 } 38 } 39 40 var execFn = func(ctx context.Context, object testkube.Test, options testkube.ExecutionRequest) (result testkube.Execution, err error) { 41 return testkube.Execution{Id: options.Name, TestName: object.Name}, nil 42 } 43 44 func testRequests() []Request[testkube.Test, testkube.ExecutionRequest, testkube.Execution] { 45 requests := make([]Request[testkube.Test, testkube.ExecutionRequest, testkube.Execution], requestCount) 46 for i := 0; i < requestCount; i++ { 47 requests[i] = Request[testkube.Test, testkube.ExecutionRequest, testkube.Execution]{ 48 Object: testkube.Test{ 49 Name: fmt.Sprintf("%v", i), 50 }, 51 Options: testkube.ExecutionRequest{ 52 Name: fmt.Sprintf("%v", i), 53 }, 54 ExecFn: execFn, 55 } 56 } 57 return requests 58 }