github.com/kubeshop/testkube@v1.17.23/contrib/executor/maven/pkg/runner/runner_integration_test.go (about) 1 package runner 2 3 import ( 4 "context" 5 "fmt" 6 "os" 7 "path/filepath" 8 "testing" 9 10 cp "github.com/otiai10/copy" 11 "github.com/stretchr/testify/assert" 12 13 "github.com/kubeshop/testkube/pkg/api/v1/testkube" 14 "github.com/kubeshop/testkube/pkg/envs" 15 "github.com/kubeshop/testkube/pkg/utils/test" 16 ) 17 18 func TestRun_Integration(t *testing.T) { 19 test.IntegrationTest(t) 20 t.Parallel() 21 22 ctx := context.Background() 23 24 t.Run("run maven wrapper test goal with envs", func(t *testing.T) { 25 t.Parallel() 26 // setup 27 tempDir, err := os.MkdirTemp("", "*") 28 assert.NoErrorf(t, err, "failed to create temp dir: %v", err) 29 defer os.RemoveAll(tempDir) 30 repoDir := filepath.Join(tempDir, "repo") 31 assert.NoError(t, os.Mkdir(repoDir, 0755)) 32 _ = cp.Copy("../../examples/hello-mvnw", repoDir) 33 34 // given 35 params := envs.Params{DataDir: tempDir} 36 _, err = NewRunner(context.Background(), params) 37 assert.NoError(t, err) 38 39 execution := testkube.NewQueuedExecution() 40 execution.TestType = "maven/test" 41 execution.Content = &testkube.TestContent{ 42 Type_: string(testkube.TestContentTypeGitDir), 43 Repository: &testkube.Repository{ 44 Uri: "someuri", 45 Branch: "main", 46 }, 47 } 48 execution.Command = []string{"mvn"} 49 execution.Args = []string{"--settings", "<settingsFile>", "<goalName>", "-Duser.home", "<mavenHome>"} 50 51 execution.Variables = map[string]testkube.Variable{ 52 "wrapper": {Name: "TESTKUBE_MAVEN_WRAPPER", Value: "true", Type_: testkube.VariableTypeBasic}, 53 } 54 55 assert.NoError(t, os.Setenv("TESTKUBE_MAVEN_WRAPPER", "true")) 56 // when 57 58 // TODO: fix flaky tests: TKC-923 59 // result, err := runner.Run(ctx, *execution) 60 61 // then 62 // assert.NoError(t, err) 63 // assert.Equal(t, testkube.ExecutionStatusPassed, result.Status) 64 // assert.Len(t, result.Steps, 1) 65 }) 66 67 t.Run("run maven project with test task and envs", func(t *testing.T) { 68 t.Parallel() 69 // setup 70 tempDir, err := os.MkdirTemp("", "*") 71 assert.NoErrorf(t, err, "failed to create temp dir: %v", err) 72 defer os.RemoveAll(tempDir) 73 repoDir := filepath.Join(tempDir, "repo") 74 assert.NoError(t, os.Mkdir(repoDir, 0755)) 75 _ = cp.Copy("../../examples/hello-maven", repoDir) 76 77 // given 78 params := envs.Params{DataDir: tempDir} 79 runner, err := NewRunner(context.Background(), params) 80 assert.NoError(t, err) 81 82 execution := testkube.NewQueuedExecution() 83 execution.TestType = "maven/project" 84 execution.Content = &testkube.TestContent{ 85 Type_: string(testkube.TestContentTypeGitDir), 86 Repository: &testkube.Repository{ 87 Uri: "someur", 88 Branch: "main", 89 }, 90 } 91 execution.Command = []string{"mvn"} 92 execution.Args = []string{"test", "--settings", "<settingsFile>", "<goalName>", "-Duser.home", "<mavenHome>"} 93 execution.Variables = map[string]testkube.Variable{ 94 "wrapper": {Name: "TESTKUBE_MAVEN", Value: "true", Type_: testkube.VariableTypeBasic}, 95 } 96 97 assert.NoError(t, os.Setenv("TESTKUBE_MAVEN", "true")) 98 // when 99 result, err := runner.Run(ctx, *execution) 100 101 // then 102 assert.NoError(t, err) 103 assert.Equal(t, testkube.ExecutionStatusPassed, result.Status) 104 assert.Len(t, result.Steps, 1) 105 }) 106 107 t.Run("run maven wrapper test goal with envs", func(t *testing.T) { 108 t.Parallel() 109 // setup 110 tempDir, err := os.MkdirTemp("", "*") 111 assert.NoErrorf(t, err, "failed to create temp dir: %v", err) 112 defer os.RemoveAll(tempDir) 113 repoDir := filepath.Join(tempDir, "repo") 114 assert.NoError(t, os.Mkdir(repoDir, 0755)) 115 _ = cp.Copy("../../examples/hello-mvnw", repoDir) 116 117 // given 118 params := envs.Params{DataDir: tempDir} 119 runner, err := NewRunner(context.Background(), params) 120 assert.NoError(t, err) 121 122 execution := testkube.NewQueuedExecution() 123 execution.TestType = "maven/test" 124 execution.Content = &testkube.TestContent{ 125 Type_: string(testkube.TestContentTypeGitDir), 126 Repository: &testkube.Repository{ 127 Uri: "https://github.com/lreimer/hands-on-testkube.git", 128 Branch: "main", 129 }, 130 } 131 execution.Command = []string{"mvn"} 132 execution.Args = []string{"--settings", "<settingsFile>", "<goalName>", "-Duser.home", "<mavenHome>"} 133 execution.Envs = map[string]string{"TESTKUBE_MAVEN_WRAPPER": "true"} 134 135 assert.NoError(t, os.Setenv("TESTKUBE_MAVEN_WRAPPER", "true")) 136 // when 137 result, err := runner.Run(ctx, *execution) 138 139 // then 140 assert.NoError(t, err) 141 assert.Equal(t, testkube.ExecutionStatusPassed, result.Status) 142 assert.Len(t, result.Steps, 1) 143 }) 144 145 t.Run("run maven project with settings.xml", func(t *testing.T) { 146 t.Parallel() 147 // setup 148 tempDir, err := os.MkdirTemp("", "*") 149 assert.NoErrorf(t, err, "failed to create temp dir: %v", err) 150 defer os.RemoveAll(tempDir) 151 repoDir := filepath.Join(tempDir, "repo") 152 assert.NoError(t, os.Mkdir(repoDir, 0755)) 153 _ = cp.Copy("../../examples/hello-maven-settings", repoDir) 154 155 // given 156 params := envs.Params{DataDir: tempDir} 157 runner, err := NewRunner(context.Background(), params) 158 assert.NoError(t, err) 159 160 execution := testkube.NewQueuedExecution() 161 execution.TestType = "maven/test" 162 execution.Content = &testkube.TestContent{ 163 Type_: string(testkube.TestContentTypeGitDir), 164 Repository: &testkube.Repository{ 165 Uri: "someuri", 166 Branch: "main", 167 }, 168 } 169 execution.Command = []string{"mvn"} 170 execution.Args = []string{"--settings", "<settingsFile>", "<goalName>", "-Duser.home", "<mavenHome>"} 171 execution.Variables = map[string]testkube.Variable{ 172 "wrapper": {Name: "TESTKUBE_MAVEN", Value: "true", Type_: testkube.VariableTypeBasic}, 173 } 174 settingsContent, err := os.ReadFile(fmt.Sprintf("%s/settings.xml", repoDir)) 175 assert.NoError(t, err) 176 execution.VariablesFile = string(settingsContent) 177 178 assert.NoError(t, os.Setenv("TESTKUBE_MAVEN", "true")) 179 // when 180 result, err := runner.Run(ctx, *execution) 181 182 // then 183 assert.NoError(t, err) 184 assert.Equal(t, testkube.ExecutionStatusPassed, result.Status) 185 assert.Len(t, result.Steps, 1) 186 }) 187 } 188 189 func TestRunErrors_Integration(t *testing.T) { 190 test.IntegrationTest(t) 191 t.Parallel() 192 193 ctx := context.Background() 194 195 t.Run("no RUNNER_DATADIR", func(t *testing.T) { 196 t.Parallel() 197 // given 198 params := envs.Params{DataDir: "/unknown"} 199 runner, err := NewRunner(context.Background(), params) 200 assert.NoError(t, err) 201 202 execution := testkube.NewQueuedExecution() 203 execution.Command = []string{"mvn"} 204 execution.Args = []string{"--settings", "<settingsFile>", "<goalName>", "-Duser.home", "<mavenHome>"} 205 206 // when 207 _, err = runner.Run(ctx, *execution) 208 209 // then 210 assert.Error(t, err) 211 }) 212 213 t.Run("unsupported file-content", func(t *testing.T) { 214 t.Parallel() 215 216 tempDir, err := os.MkdirTemp("", "*") 217 assert.NoErrorf(t, err, "failed to create temp dir: %v", err) 218 defer os.RemoveAll(tempDir) 219 220 // given 221 params := envs.Params{DataDir: tempDir} 222 runner, err := NewRunner(context.Background(), params) 223 assert.NoError(t, err) 224 225 execution := testkube.NewQueuedExecution() 226 execution.TestType = "maven/test" 227 execution.Content = testkube.NewStringTestContent("") 228 execution.Command = []string{"mvn"} 229 execution.Args = []string{"--settings", "<settingsFile>", "<goalName>", "-Duser.home", "<mavenHome>"} 230 231 // when 232 _, err = runner.Run(ctx, *execution) 233 234 // then 235 assert.Error(t, err) 236 }) 237 238 t.Run("no pom.xml", func(t *testing.T) { 239 t.Parallel() 240 241 // setup 242 tempDir, err := os.MkdirTemp("", "*") 243 assert.NoErrorf(t, err, "failed to create temp dir: %v", err) 244 defer os.RemoveAll(tempDir) 245 repoDir := filepath.Join(tempDir, "repo") 246 assert.NoError(t, os.Mkdir(repoDir, 0755)) 247 248 // given 249 params := envs.Params{DataDir: tempDir} 250 runner, err := NewRunner(context.Background(), params) 251 assert.NoError(t, err) 252 253 execution := testkube.NewQueuedExecution() 254 execution.TestType = "maven/test" 255 execution.Content = &testkube.TestContent{ 256 Type_: string(testkube.TestContentTypeGitDir), 257 Repository: &testkube.Repository{ 258 Uri: "https://github.com/lreimer/hands-on-testkube.git", 259 Branch: "main", 260 }, 261 } 262 execution.Command = []string{"mvn"} 263 execution.Args = []string{"--settings", "<settingsFile>", "<goalName>", "-Duser.home", "<mavenHome>"} 264 265 // when 266 result, err := runner.Run(ctx, *execution) 267 268 // then 269 assert.NoError(t, err) 270 assert.Equal(t, result.Status, testkube.ExecutionStatusFailed) 271 assert.Contains(t, result.ErrorMessage, "no") 272 }) 273 } 274 275 func TestRunMavenProject_Integration(t *testing.T) { 276 test.IntegrationTest(t) 277 t.Parallel() 278 279 ctx := context.Background() 280 281 t.Run("run maven project with test task and envs", func(t *testing.T) { 282 t.Parallel() 283 // setup 284 tempDir, err := os.MkdirTemp("", "*") 285 assert.NoErrorf(t, err, "failed to create temp dir: %v", err) 286 defer os.RemoveAll(tempDir) 287 repoDir := filepath.Join(tempDir, "repo") 288 assert.NoError(t, os.Mkdir(repoDir, 0755)) 289 _ = cp.Copy("../../examples/hello-maven", repoDir) 290 291 // given 292 params := envs.Params{DataDir: tempDir} 293 runner, err := NewRunner(context.Background(), params) 294 assert.NoError(t, err) 295 296 execution := testkube.NewQueuedExecution() 297 execution.TestType = "maven/project" 298 execution.Content = &testkube.TestContent{ 299 Type_: string(testkube.TestContentTypeGitDir), 300 Repository: &testkube.Repository{ 301 Uri: "https://github.com/lreimer/hands-on-testkube.git", 302 Branch: "main", 303 }, 304 } 305 execution.Command = []string{"mvn"} 306 execution.Args = []string{"test", "--settings", "<settingsFile>", "<goalName>", "-Duser.home", "<mavenHome>"} 307 execution.Variables = map[string]testkube.Variable{ 308 "wrapper": {Name: "TESTKUBE_MAVEN", Value: "true", Type_: testkube.VariableTypeBasic}, 309 } 310 311 assert.NoError(t, os.Setenv("TESTKUBE_MAVEN", "true")) 312 313 // when 314 result, err := runner.Run(ctx, *execution) 315 316 // then 317 assert.NoError(t, err) 318 assert.Equal(t, result.Status, testkube.ExecutionStatusPassed) 319 assert.Len(t, result.Steps, 1) 320 }) 321 }