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 }