github.com/kubeshop/testkube@v1.17.23/contrib/executor/tracetest/pkg/runner/runner_integration_test.go (about)

     1  package runner_test
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"os"
     7  	"path"
     8  	"path/filepath"
     9  	"runtime"
    10  	"testing"
    11  	"time"
    12  
    13  	"github.com/stretchr/testify/assert"
    14  	"github.com/stretchr/testify/require"
    15  
    16  	"github.com/kubeshop/testkube/contrib/executor/tracetest/pkg/command"
    17  	"github.com/kubeshop/testkube/contrib/executor/tracetest/pkg/runner"
    18  	"github.com/kubeshop/testkube/pkg/api/v1/testkube"
    19  	"github.com/kubeshop/testkube/pkg/envs"
    20  	"github.com/kubeshop/testkube/pkg/utils/test"
    21  )
    22  
    23  func startTracetestEnvironment(t *testing.T, envType string) {
    24  	currentDir := getExecutingDir()
    25  	fullDockerComposeFilePath := fmt.Sprintf("%s/../testing/docker-compose-tracetest-%s.yaml", currentDir, envType)
    26  
    27  	result, err := command.Run("docker", "compose", "--file", fullDockerComposeFilePath, "up", "--detach")
    28  	require.NoErrorf(t, err, "error when starting tracetest core env: %s", string(result))
    29  
    30  	// pokeshop takes some time to warm up, so we need to wait a little bit before doing tests
    31  	time.Sleep(10 * time.Second)
    32  }
    33  
    34  func stopTracetestEnvironment(t *testing.T, envType string) {
    35  	currentDir := getExecutingDir()
    36  	fullDockerComposeFilePath := fmt.Sprintf("%s/../testing/docker-compose-tracetest-%s.yaml", currentDir, envType)
    37  
    38  	result, err := command.Run("docker", "compose", "--file", fullDockerComposeFilePath, "rm", "--force", "--volumes", "--stop")
    39  	require.NoErrorf(t, err, "error when stopping tracetest core env: %s", string(result))
    40  }
    41  
    42  func TestRunFiles_Integration(t *testing.T) {
    43  	test.IntegrationTest(t)
    44  
    45  	ctx := context.Background()
    46  
    47  	t.Run("Run tracetest core with no variables", func(t *testing.T) {
    48  		tempDir, err := os.MkdirTemp("", "*")
    49  		require.NoErrorf(t, err, "failed to create temp dir: %v", err)
    50  		defer os.RemoveAll(tempDir)
    51  
    52  		params := envs.Params{DataDir: tempDir}
    53  		runner, err := runner.NewRunner(context.Background(), params)
    54  		require.NoError(t, err)
    55  
    56  		execution := testkube.NewQueuedExecution()
    57  		execution.Content = testkube.NewStringTestContent("")
    58  		execution.TestType = "tracetest/test"
    59  		execution.Command = []string{
    60  			"tracetest",
    61  		}
    62  		execution.Args = []string{}
    63  		writeTestContent(t, tempDir, "../testing/tracetest-test-script.yaml")
    64  
    65  		// when
    66  		_, err = runner.Run(ctx, *execution)
    67  
    68  		// then
    69  		require.ErrorContains(t, err, "failed to get a Tracetest CLI executor")
    70  	})
    71  
    72  	t.Run("Run tracetest core with simple script", func(t *testing.T) {
    73  		envType := "core"
    74  
    75  		startTracetestEnvironment(t, envType)
    76  		defer stopTracetestEnvironment(t, envType)
    77  
    78  		tempDir, err := os.MkdirTemp("", "*")
    79  		require.NoErrorf(t, err, "failed to create temp dir: %v", err)
    80  		defer os.RemoveAll(tempDir)
    81  
    82  		params := envs.Params{DataDir: tempDir}
    83  		runner, err := runner.NewRunner(context.Background(), params)
    84  		require.NoError(t, err)
    85  
    86  		execution := testkube.NewQueuedExecution()
    87  		execution.Content = testkube.NewStringTestContent("")
    88  		execution.TestType = "tracetest/test"
    89  		execution.Command = []string{
    90  			"tracetest",
    91  		}
    92  		execution.Variables = map[string]testkube.Variable{
    93  			"TRACETEST_ENDPOINT": {
    94  				Name:  "TRACETEST_ENDPOINT",
    95  				Value: "http://localhost:11633",
    96  				Type_: testkube.VariableTypeBasic,
    97  			},
    98  		}
    99  		execution.Args = []string{}
   100  		writeTestContent(t, tempDir, "../testing/tracetest-test-script.yaml")
   101  
   102  		// when
   103  		result, err := runner.Run(ctx, *execution)
   104  
   105  		// then
   106  		require.NoError(t, err)
   107  		require.Equal(t, testkube.ExecutionStatusPassed, result.Status)
   108  	})
   109  
   110  	// t.Run("Run tracetest cloud with simple script", func(t *testing.T) {
   111  	// 	envType := "cloud"
   112  
   113  	// 	os.Setenv("TRACETEST_API_KEY", "some_api_key")
   114  
   115  	// 	startTracetestEnvironment(t, envType)
   116  	// 	defer stopTracetestEnvironment(t, envType)
   117  
   118  	// 	tempDir, err := os.MkdirTemp("", "*")
   119  	// 	require.NoErrorf(t, err, "failed to create temp dir: %v", err)
   120  	// 	defer os.RemoveAll(tempDir)
   121  
   122  	// 	params := envs.Params{DataDir: tempDir}
   123  	// 	runner, err := runner.NewRunner(context.Background(), params)
   124  	// 	require.NoError(t, err)
   125  
   126  	// 	execution := testkube.NewQueuedExecution()
   127  	// 	execution.Content = testkube.NewStringTestContent("")
   128  	// 	execution.TestType = "tracetest/test"
   129  	// 	execution.Command = []string{
   130  	// 		"tracetest",
   131  	// 	}
   132  	// 	execution.Variables = map[string]testkube.Variable{
   133  	// 		"TRACETEST_TOKEN": {
   134  	// 			Name:  "TRACETEST_TOKEN",
   135  	// 			Value: "some_token",
   136  	// 			Type_: testkube.VariableTypeBasic,
   137  	// 		},
   138  	// 		"TRACETEST_ORGANIZATION": {
   139  	// 			Name:  "TRACETEST_ORGANIZATION",
   140  	// 			Value: "some_token",
   141  	// 			Type_: testkube.VariableTypeBasic,
   142  	// 		},
   143  	// 		"TRACETEST_ENVIRONMENT": {
   144  	// 			Name:  "TRACETEST_ENVIRONMENT",
   145  	// 			Value: "some_token",
   146  	// 			Type_: testkube.VariableTypeBasic,
   147  	// 		},
   148  	// 	}
   149  	// 	execution.Args = []string{}
   150  	// 	writeTestContent(t, tempDir, "../testing/tracetest-test-script.yaml")
   151  
   152  	// 	// when
   153  	// 	result, err := runner.Run(ctx, *execution)
   154  
   155  	// 	// then
   156  	// 	require.NoError(t, err)
   157  	// 	require.Equal(t, testkube.ExecutionStatusPassed, result.Status)
   158  	// })
   159  }
   160  
   161  func writeTestContent(t *testing.T, dir string, testScriptPath string) {
   162  	currentDir := getExecutingDir()
   163  	fullTestScriptPath := fmt.Sprintf("%s/%s", currentDir, testScriptPath)
   164  
   165  	testScript, err := os.ReadFile(fullTestScriptPath)
   166  	if err != nil {
   167  		assert.FailNow(t, "Unable to read tracetest test script")
   168  	}
   169  
   170  	err = os.WriteFile(filepath.Join(dir, "test-content"), testScript, 0644)
   171  	if err != nil {
   172  		assert.FailNow(t, "Unable to write tracetest runner test content file")
   173  	}
   174  }
   175  
   176  func getExecutingDir() string {
   177  	_, filename, _, _ := runtime.Caller(0) // get file of the getExecutingDir caller
   178  	return path.Dir(filename)
   179  }