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  }