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 }