github.com/kubeshop/testkube@v1.17.23/contrib/executor/template/pkg/runner/runner.go (about) 1 package runner 2 3 import ( 4 "context" 5 "os" 6 7 "github.com/kubeshop/testkube/pkg/api/v1/testkube" 8 "github.com/kubeshop/testkube/pkg/envs" 9 "github.com/kubeshop/testkube/pkg/executor/content" 10 "github.com/kubeshop/testkube/pkg/executor/env" 11 "github.com/kubeshop/testkube/pkg/executor/output" 12 "github.com/kubeshop/testkube/pkg/executor/runner" 13 "github.com/kubeshop/testkube/pkg/ui" 14 ) 15 16 func NewRunner(params envs.Params) *ExampleRunner { 17 return &ExampleRunner{ 18 params: params, 19 } 20 } 21 22 // ExampleRunner for template - change me to some valid runner 23 type ExampleRunner struct { 24 params envs.Params 25 } 26 27 var _ runner.Runner = &ExampleRunner{} 28 29 func (r *ExampleRunner) Run(ctx context.Context, execution testkube.Execution) (result testkube.ExecutionResult, err error) { 30 31 // use `execution.Variables` for variables passed from Test/Execution 32 // variables of type "secret" will be automatically decoded 33 env.NewManager().GetReferenceVars(execution.Variables) 34 path, _, err := content.GetPathAndWorkingDir(execution.Content, r.params.DataDir) 35 if err != nil { 36 output.PrintLogf("%s Failed to resolve absolute directory for %s, using the path directly", ui.IconWarning, r.params.DataDir) 37 } 38 39 output.PrintEvent("created content path", path) 40 41 fileInfo, err := os.Stat(path) 42 if err != nil { 43 return result, err 44 } 45 46 if !fileInfo.IsDir() { 47 output.PrintEvent("using file", execution) 48 // TODO implement file based test content for string, git-file, file-uri, git 49 // or remove if not used 50 } 51 52 if fileInfo.IsDir() { 53 output.PrintEvent("using dir", execution) 54 // TODO implement file based test content for git-dir, git 55 // or remove if not used 56 } 57 58 // TODO run executor here 59 60 // error result should be returned if something is not ok 61 // return result.Err(fmt.Errorf("some test execution related error occured")) 62 63 // TODO return ExecutionResult 64 return testkube.ExecutionResult{ 65 Status: testkube.ExecutionStatusPassed, 66 Output: "exmaple test output", 67 }, nil 68 } 69 70 // GetType returns runner type 71 func (r *ExampleRunner) GetType() runner.Type { 72 return runner.TypeMain 73 }