github.com/kubeshop/testkube@v1.17.23/contrib/executor/tracetest/pkg/runner/tracetest_runner.go (about) 1 package runner 2 3 import ( 4 "strings" 5 6 "github.com/kubeshop/testkube/contrib/executor/tracetest/pkg/model" 7 8 "github.com/kubeshop/testkube/pkg/api/v1/testkube" 9 "github.com/kubeshop/testkube/pkg/executor" 10 "github.com/kubeshop/testkube/pkg/executor/env" 11 "github.com/kubeshop/testkube/pkg/executor/output" 12 outputPkg "github.com/kubeshop/testkube/pkg/executor/output" 13 "github.com/kubeshop/testkube/pkg/ui" 14 ) 15 16 const ( 17 TRACETEST_TOKEN_VAR = "TRACETEST_TOKEN" 18 TRACETEST_ORGANIZATION_VAR = "TRACETEST_ORGANIZATION" 19 TRACETEST_ENVIRONMENT_VAR = "TRACETEST_ENVIRONMENT" 20 TRACETEST_CLOUD_URL = "https://app.tracetest.io" 21 ) 22 23 type tracetestCloudExecutor struct{} 24 25 var _ TracetestCLIExecutor = (*tracetestCloudExecutor)(nil) 26 27 func (e *tracetestCloudExecutor) RequiredEnvVars() []string { 28 return []string{TRACETEST_TOKEN_VAR, TRACETEST_ORGANIZATION_VAR, TRACETEST_ENVIRONMENT_VAR} 29 } 30 31 func (e *tracetestCloudExecutor) HasEnvVarsDefined(envManager *env.Manager) bool { 32 _, hasTokenVar := envManager.Variables[TRACETEST_TOKEN_VAR] 33 _, hasOrganizationVar := envManager.Variables[TRACETEST_ORGANIZATION_VAR] 34 _, hasEnvironmentVar := envManager.Variables[TRACETEST_ENVIRONMENT_VAR] 35 36 return hasTokenVar && hasOrganizationVar && hasEnvironmentVar 37 } 38 39 func (e *tracetestCloudExecutor) Execute(envManager *env.Manager, execution testkube.Execution, testFilePath string) (model.Result, error) { 40 tracetestToken, err := getVariable(envManager, TRACETEST_TOKEN_VAR) 41 if err != nil { 42 return model.Result{}, err 43 } 44 45 tracetestOrganization, err := getVariable(envManager, TRACETEST_ORGANIZATION_VAR) 46 if err != nil { 47 return model.Result{}, err 48 } 49 50 tracetestEnvironment, err := getVariable(envManager, TRACETEST_ENVIRONMENT_VAR) 51 if err != nil { 52 return model.Result{}, err 53 } 54 55 // setup config with API key 56 output.PrintLogf("%s Configuring Tracetest CLI with Token", ui.IconWorld) 57 58 configArgs := []string{ 59 "configure", "--token", tracetestToken, "--organization", tracetestOrganization, "--environment", tracetestEnvironment, 60 } 61 62 output.PrintLogf("%s Using arguments to configure CLI: %v", ui.IconWorld, envManager.ObfuscateStringSlice(configArgs)) 63 configCommand, configArgs := executor.MergeCommandAndArgs(execution.Command, configArgs) 64 65 output.PrintLogf("%s Configure command %s %s", ui.IconRocket, configCommand, strings.Join(envManager.ObfuscateStringSlice(configArgs), " ")) 66 _, err = executor.Run("", configCommand, envManager, configArgs...) 67 68 if err != nil { 69 outputPkg.PrintLogf("%s Failed to configure Tracetest CLI %v", ui.IconCross, err) 70 return model.Result{}, err 71 } 72 73 // Prepare args for test run command 74 // (since each strategy implementation has its own set of params, we are explicitly ignoring the execution.Args field) 75 runTestArgs := []string{ 76 "run", "test", "--file", testFilePath, "--output", "pretty", 77 } 78 79 output.PrintLogf("%s Using arguments to run test: %v", ui.IconWorld, envManager.ObfuscateStringSlice(runTestArgs)) 80 runTestCommand, runTestArgs := executor.MergeCommandAndArgs(execution.Command, runTestArgs) 81 82 // Run tracetest test from definition file 83 output.PrintLogf("%s Test run command %s %s", ui.IconRocket, runTestCommand, strings.Join(envManager.ObfuscateStringSlice(runTestArgs), " ")) 84 output, err := executor.Run("", runTestCommand, envManager, runTestArgs...) 85 86 result := model.Result{ 87 Output: string(output), 88 ServerEndpoint: TRACETEST_CLOUD_URL, 89 OutputEndpoint: "", 90 } 91 92 return result, err 93 }