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  }