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  }