github.com/kubeshop/testkube@v1.17.23/pkg/api/v1/client/api.go (about)

     1  package client
     2  
     3  import (
     4  	"net/http"
     5  
     6  	"k8s.io/client-go/kubernetes"
     7  
     8  	"github.com/kubeshop/testkube/pkg/api/v1/testkube"
     9  )
    10  
    11  // check in compile time if interface is implemented
    12  var _ Client = (*APIClient)(nil)
    13  
    14  // NewProxyAPIClient returns proxy api client
    15  func NewProxyAPIClient(client kubernetes.Interface, config APIConfig) APIClient {
    16  	return APIClient{
    17  		TestClient: NewTestClient(
    18  			NewProxyClient[testkube.Test](client, config),
    19  			NewProxyClient[testkube.Execution](client, config),
    20  			NewProxyClient[testkube.TestWithExecution](client, config),
    21  			NewProxyClient[testkube.TestWithExecutionSummary](client, config),
    22  			NewProxyClient[testkube.ExecutionsResult](client, config),
    23  			NewProxyClient[testkube.Artifact](client, config),
    24  			NewProxyClient[testkube.ServerInfo](client, config),
    25  			NewProxyClient[testkube.DebugInfo](client, config),
    26  		),
    27  		TestSuiteClient: NewTestSuiteClient(
    28  			NewProxyClient[testkube.TestSuite](client, config),
    29  			NewProxyClient[testkube.TestSuiteExecution](client, config),
    30  			NewProxyClient[testkube.TestSuiteWithExecution](client, config),
    31  			NewProxyClient[testkube.TestSuiteWithExecutionSummary](client, config),
    32  			NewProxyClient[testkube.TestSuiteExecutionsResult](client, config),
    33  			NewProxyClient[testkube.Artifact](client, config),
    34  		),
    35  		ExecutorClient:   NewExecutorClient(NewProxyClient[testkube.ExecutorDetails](client, config)),
    36  		WebhookClient:    NewWebhookClient(NewProxyClient[testkube.Webhook](client, config)),
    37  		ConfigClient:     NewConfigClient(NewProxyClient[testkube.Config](client, config)),
    38  		TestSourceClient: NewTestSourceClient(NewProxyClient[testkube.TestSource](client, config)),
    39  		CopyFileClient:   NewCopyFileProxyClient(client, config),
    40  		TemplateClient:   NewTemplateClient(NewProxyClient[testkube.Template](client, config)),
    41  		TestWorkflowClient: NewTestWorkflowClient(
    42  			NewProxyClient[testkube.TestWorkflow](client, config),
    43  			NewProxyClient[testkube.TestWorkflowWithExecution](client, config),
    44  			NewProxyClient[testkube.TestWorkflowExecution](client, config),
    45  			NewProxyClient[testkube.TestWorkflowExecutionsResult](client, config),
    46  			NewProxyClient[testkube.Artifact](client, config),
    47  		),
    48  		TestWorkflowTemplateClient: NewTestWorkflowTemplateClient(NewProxyClient[testkube.TestWorkflowTemplate](client, config)),
    49  	}
    50  }
    51  
    52  // NewDirectAPIClient returns direct api client
    53  func NewDirectAPIClient(httpClient *http.Client, sseClient *http.Client, apiURI, apiPathPrefix string) APIClient {
    54  	return APIClient{
    55  		TestClient: NewTestClient(
    56  			NewDirectClient[testkube.Test](httpClient, apiURI, apiPathPrefix).WithSSEClient(sseClient),
    57  			NewDirectClient[testkube.Execution](httpClient, apiURI, apiPathPrefix),
    58  			NewDirectClient[testkube.TestWithExecution](httpClient, apiURI, apiPathPrefix),
    59  			NewDirectClient[testkube.TestWithExecutionSummary](httpClient, apiURI, apiPathPrefix),
    60  			NewDirectClient[testkube.ExecutionsResult](httpClient, apiURI, apiPathPrefix),
    61  			NewDirectClient[testkube.Artifact](httpClient, apiURI, apiPathPrefix),
    62  			NewDirectClient[testkube.ServerInfo](httpClient, apiURI, apiPathPrefix),
    63  			NewDirectClient[testkube.DebugInfo](httpClient, apiURI, apiPathPrefix),
    64  		),
    65  		TestSuiteClient: NewTestSuiteClient(
    66  			NewDirectClient[testkube.TestSuite](httpClient, apiURI, apiPathPrefix),
    67  			NewDirectClient[testkube.TestSuiteExecution](httpClient, apiURI, apiPathPrefix),
    68  			NewDirectClient[testkube.TestSuiteWithExecution](httpClient, apiURI, apiPathPrefix),
    69  			NewDirectClient[testkube.TestSuiteWithExecutionSummary](httpClient, apiURI, apiPathPrefix),
    70  			NewDirectClient[testkube.TestSuiteExecutionsResult](httpClient, apiURI, apiPathPrefix),
    71  			NewDirectClient[testkube.Artifact](httpClient, apiURI, apiPathPrefix),
    72  		),
    73  		ExecutorClient:   NewExecutorClient(NewDirectClient[testkube.ExecutorDetails](httpClient, apiURI, apiPathPrefix)),
    74  		WebhookClient:    NewWebhookClient(NewDirectClient[testkube.Webhook](httpClient, apiURI, apiPathPrefix)),
    75  		ConfigClient:     NewConfigClient(NewDirectClient[testkube.Config](httpClient, apiURI, apiPathPrefix)),
    76  		TestSourceClient: NewTestSourceClient(NewDirectClient[testkube.TestSource](httpClient, apiURI, apiPathPrefix)),
    77  		CopyFileClient:   NewCopyFileDirectClient(httpClient, apiURI, apiPathPrefix),
    78  		TemplateClient:   NewTemplateClient(NewDirectClient[testkube.Template](httpClient, apiURI, apiPathPrefix)),
    79  		TestWorkflowClient: NewTestWorkflowClient(
    80  			NewDirectClient[testkube.TestWorkflow](httpClient, apiURI, apiPathPrefix),
    81  			NewDirectClient[testkube.TestWorkflowWithExecution](httpClient, apiURI, apiPathPrefix),
    82  			NewDirectClient[testkube.TestWorkflowExecution](httpClient, apiURI, apiPathPrefix),
    83  			NewDirectClient[testkube.TestWorkflowExecutionsResult](httpClient, apiURI, apiPathPrefix),
    84  			NewDirectClient[testkube.Artifact](httpClient, apiURI, apiPathPrefix),
    85  		),
    86  		TestWorkflowTemplateClient: NewTestWorkflowTemplateClient(NewDirectClient[testkube.TestWorkflowTemplate](httpClient, apiURI, apiPathPrefix)),
    87  	}
    88  }
    89  
    90  // NewCloudAPIClient returns cloud api client
    91  func NewCloudAPIClient(httpClient *http.Client, sseClient *http.Client, apiURI, apiPathPrefix string) APIClient {
    92  	return APIClient{
    93  		TestClient: NewTestClient(
    94  			NewCloudClient[testkube.Test](httpClient, apiURI, apiPathPrefix).WithSSEClient(sseClient),
    95  			NewCloudClient[testkube.Execution](httpClient, apiURI, apiPathPrefix),
    96  			NewCloudClient[testkube.TestWithExecution](httpClient, apiURI, apiPathPrefix),
    97  			NewCloudClient[testkube.TestWithExecutionSummary](httpClient, apiURI, apiPathPrefix),
    98  			NewCloudClient[testkube.ExecutionsResult](httpClient, apiURI, apiPathPrefix),
    99  			NewCloudClient[testkube.Artifact](httpClient, apiURI, apiPathPrefix),
   100  			NewCloudClient[testkube.ServerInfo](httpClient, apiURI, apiPathPrefix),
   101  			NewCloudClient[testkube.DebugInfo](httpClient, apiURI, apiPathPrefix),
   102  		),
   103  		TestSuiteClient: NewTestSuiteClient(
   104  			NewCloudClient[testkube.TestSuite](httpClient, apiURI, apiPathPrefix),
   105  			NewCloudClient[testkube.TestSuiteExecution](httpClient, apiURI, apiPathPrefix),
   106  			NewCloudClient[testkube.TestSuiteWithExecution](httpClient, apiURI, apiPathPrefix),
   107  			NewCloudClient[testkube.TestSuiteWithExecutionSummary](httpClient, apiURI, apiPathPrefix),
   108  			NewCloudClient[testkube.TestSuiteExecutionsResult](httpClient, apiURI, apiPathPrefix),
   109  			NewCloudClient[testkube.Artifact](httpClient, apiURI, apiPathPrefix),
   110  		),
   111  		ExecutorClient:   NewExecutorClient(NewCloudClient[testkube.ExecutorDetails](httpClient, apiURI, apiPathPrefix)),
   112  		WebhookClient:    NewWebhookClient(NewCloudClient[testkube.Webhook](httpClient, apiURI, apiPathPrefix)),
   113  		ConfigClient:     NewConfigClient(NewCloudClient[testkube.Config](httpClient, apiURI, apiPathPrefix)),
   114  		TestSourceClient: NewTestSourceClient(NewCloudClient[testkube.TestSource](httpClient, apiURI, apiPathPrefix)),
   115  		CopyFileClient:   NewCopyFileDirectClient(httpClient, apiURI, apiPathPrefix),
   116  		TemplateClient:   NewTemplateClient(NewCloudClient[testkube.Template](httpClient, apiURI, apiPathPrefix)),
   117  		TestWorkflowClient: NewTestWorkflowClient(
   118  			NewCloudClient[testkube.TestWorkflow](httpClient, apiURI, apiPathPrefix).WithSSEClient(sseClient),
   119  			NewCloudClient[testkube.TestWorkflowWithExecution](httpClient, apiURI, apiPathPrefix),
   120  			NewCloudClient[testkube.TestWorkflowExecution](httpClient, apiURI, apiPathPrefix),
   121  			NewCloudClient[testkube.TestWorkflowExecutionsResult](httpClient, apiURI, apiPathPrefix),
   122  			NewCloudClient[testkube.Artifact](httpClient, apiURI, apiPathPrefix),
   123  		),
   124  		TestWorkflowTemplateClient: NewTestWorkflowTemplateClient(NewCloudClient[testkube.TestWorkflowTemplate](httpClient, apiURI, apiPathPrefix)),
   125  	}
   126  }
   127  
   128  // APIClient struct managing proxy API Client dependencies
   129  type APIClient struct {
   130  	TestClient
   131  	TestSuiteClient
   132  	ExecutorClient
   133  	WebhookClient
   134  	ConfigClient
   135  	TestSourceClient
   136  	CopyFileClient
   137  	TemplateClient
   138  	TestWorkflowClient
   139  	TestWorkflowTemplateClient
   140  }