github.com/buildtool/build-tools@v0.2.29-0.20240322150259-6a1d0a553c23/pkg/deploy/deploy_test.go (about) 1 // MIT License 2 // 3 // Copyright (c) 2018 buildtool 4 // 5 // Permission is hereby granted, free of charge, to any person obtaining a copy 6 // of this software and associated documentation files (the "Software"), to deal 7 // in the Software without restriction, including without limitation the rights 8 // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 // copies of the Software, and to permit persons to whom the Software is 10 // furnished to do so, subject to the following conditions: 11 // 12 // The above copyright notice and this permission notice shall be included in all 13 // copies or substantial portions of the Software. 14 // 15 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 // SOFTWARE. 22 23 package deploy 24 25 import ( 26 "errors" 27 "fmt" 28 "os" 29 "path/filepath" 30 "testing" 31 32 "github.com/apex/log" 33 "github.com/stretchr/testify/assert" 34 mocks "gitlab.com/unboundsoftware/apex-mocks" 35 36 "github.com/buildtool/build-tools/pkg/args" 37 "github.com/buildtool/build-tools/pkg/kubectl" 38 ) 39 40 func TestDeploy_MissingDeploymentFilesDir(t *testing.T) { 41 client := &kubectl.MockKubectl{ 42 Responses: []error{nil}, 43 } 44 defer client.Cleanup() 45 46 logMock := mocks.New() 47 log.SetHandler(logMock) 48 log.SetLevel(log.DebugLevel) 49 err := Deploy(".", "abc123", "registryUrl", "20190513-17:22:36", client, Args{ 50 Globals: args.Globals{}, 51 Target: "", 52 Context: "", 53 Namespace: "", 54 Tag: "", 55 Timeout: "2m", 56 }) 57 58 assert.EqualError(t, err, "open k8s: no such file or directory") 59 logMock.Check(t, []string{}) 60 } 61 62 func TestDeploy_NoFiles(t *testing.T) { 63 client := &kubectl.MockKubectl{ 64 Responses: []error{nil}, 65 } 66 67 name, _ := os.MkdirTemp(os.TempDir(), "build-tools") 68 defer func() { _ = os.RemoveAll(name) }() 69 _ = os.Mkdir(filepath.Join(name, "k8s"), 0777) 70 71 logMock := mocks.New() 72 log.SetHandler(logMock) 73 log.SetLevel(log.DebugLevel) 74 err := Deploy(name, "image", "registryUrl", "20190513-17:22:36", client, Args{ 75 Globals: args.Globals{}, 76 Target: "", 77 Context: "", 78 Namespace: "", 79 Tag: "abc123", 80 Timeout: "2m", 81 }) 82 83 assert.NoError(t, err) 84 assert.Equal(t, 0, len(client.Inputs)) 85 logMock.Check(t, []string{}) 86 } 87 88 func TestDeploy_NoEnvSpecificFiles(t *testing.T) { 89 client := &kubectl.MockKubectl{ 90 Responses: []error{nil}, 91 } 92 93 name, _ := os.MkdirTemp(os.TempDir(), "build-tools") 94 defer func() { _ = os.RemoveAll(name) }() 95 _ = os.Mkdir(filepath.Join(name, "k8s"), 0777) 96 yaml := ` 97 apiVersion: v1 98 kind: Namespace 99 metadata: 100 name: dummy 101 ` 102 deployFile := filepath.Join(name, "k8s", "deploy.yaml") 103 _ = os.WriteFile(deployFile, []byte(yaml), 0777) 104 105 logMock := mocks.New() 106 log.SetHandler(logMock) 107 log.SetLevel(log.DebugLevel) 108 err := Deploy(name, "image", "registryUrl", "20190513-17:22:36", client, Args{ 109 Globals: args.Globals{}, 110 Target: "", 111 Context: "", 112 Namespace: "", 113 Tag: "abc123", 114 Timeout: "2m", 115 }) 116 117 assert.NoError(t, err) 118 assert.Equal(t, 1, len(client.Inputs)) 119 assert.Equal(t, yaml, client.Inputs[0]) 120 logMock.Check(t, []string{ 121 "debug: considering file '<yellow>deploy.yaml</yellow>' for target: <green></green>\n", 122 "debug: using file '<green>deploy.yaml</green>' for target: <green></green>\n", 123 "debug: trying to apply: \n---\n\napiVersion: v1\nkind: Namespace\nmetadata:\n name: dummy\n\n---\n", 124 }) 125 } 126 127 func TestDeploy_UnreadableFile(t *testing.T) { 128 client := &kubectl.MockKubectl{ 129 Responses: []error{nil}, 130 } 131 132 name, _ := os.MkdirTemp(os.TempDir(), "build-tools") 133 defer func() { _ = os.RemoveAll(name) }() 134 _ = os.MkdirAll(filepath.Join(name, "k8s", "deploy.yaml"), 0777) 135 136 logMock := mocks.New() 137 log.SetHandler(logMock) 138 log.SetLevel(log.DebugLevel) 139 err := Deploy(name, "image", "registryUrl", "20190513-17:22:36", client, Args{ 140 Globals: args.Globals{}, 141 Target: "", 142 Context: "", 143 Namespace: "", 144 Tag: "abc123", 145 Timeout: "2m", 146 }) 147 148 assert.EqualError(t, err, fmt.Sprintf("read %s/k8s/deploy.yaml: is a directory", name)) 149 logMock.Check(t, []string{ 150 "debug: considering file '<yellow>deploy.yaml</yellow>' for target: <green></green>\n", 151 "debug: using file '<green>deploy.yaml</green>' for target: <green></green>\n"}) 152 } 153 154 func TestDeploy_FileBrokenSymlink(t *testing.T) { 155 client := &kubectl.MockKubectl{ 156 Responses: []error{nil}, 157 } 158 159 name, _ := os.MkdirTemp(os.TempDir(), "build-tools") 160 defer func() { _ = os.RemoveAll(name) }() 161 _ = os.MkdirAll(filepath.Join(name, "k8s"), 0777) 162 deployFile := filepath.Join(name, "k8s", "ns.yaml") 163 _ = os.WriteFile(deployFile, []byte("test"), 0777) 164 _ = os.Symlink(deployFile, filepath.Join(name, "k8s", "deploy.yaml")) 165 _ = os.Remove(deployFile) 166 167 logMock := mocks.New() 168 log.SetHandler(logMock) 169 log.SetLevel(log.DebugLevel) 170 err := Deploy(name, "image", "registryUrl", "20190513-17:22:36", client, Args{ 171 Globals: args.Globals{}, 172 Target: "", 173 Context: "", 174 Namespace: "", 175 Tag: "abc123", 176 Timeout: "2m", 177 }) 178 179 assert.EqualError(t, err, fmt.Sprintf("open %s/k8s/deploy.yaml: no such file or directory", name)) 180 logMock.Check(t, []string{ 181 "debug: considering file '<yellow>deploy.yaml</yellow>' for target: <green></green>\n", 182 "debug: using file '<green>deploy.yaml</green>' for target: <green></green>\n", 183 }) 184 185 } 186 187 func TestDeploy_EnvSpecificFilesWithSuffix(t *testing.T) { 188 client := &kubectl.MockKubectl{ 189 Responses: []error{nil}, 190 } 191 192 name, _ := os.MkdirTemp(os.TempDir(), "build-tools") 193 defer func() { _ = os.RemoveAll(name) }() 194 _ = os.Mkdir(filepath.Join(name, "k8s"), 0777) 195 yaml := ` 196 apiVersion: v1 197 kind: Namespace 198 metadata: 199 name: dummy 200 ` 201 deployFile := filepath.Join(name, "k8s", "ns-dummy.yaml") 202 _ = os.WriteFile(deployFile, []byte(yaml), 0777) 203 204 logMock := mocks.New() 205 log.SetHandler(logMock) 206 log.SetLevel(log.DebugLevel) 207 err := Deploy(name, "image", "registryUrl", "20190513-17:22:36", client, Args{ 208 Globals: args.Globals{}, 209 Target: "dummy", 210 Context: "", 211 Namespace: "", 212 Tag: "abc123", 213 Timeout: "2m", 214 }) 215 216 assert.NoError(t, err) 217 assert.Equal(t, 1, len(client.Inputs)) 218 assert.Equal(t, yaml, client.Inputs[0]) 219 logMock.Check(t, []string{ 220 "debug: considering file '<yellow>ns-dummy.yaml</yellow>' for target: <green>dummy</green>\n", 221 "debug: using file '<green>ns-dummy.yaml</green>' for target: <green>dummy</green>\n", 222 "debug: trying to apply: \n---\n\napiVersion: v1\nkind: Namespace\nmetadata:\n name: dummy\n\n---\n", 223 }) 224 } 225 226 func TestDeploy_EnvSpecificFiles(t *testing.T) { 227 client := &kubectl.MockKubectl{ 228 Responses: []error{nil}, 229 } 230 231 name, _ := os.MkdirTemp(os.TempDir(), "build-tools") 232 defer func() { _ = os.RemoveAll(name) }() 233 _ = os.MkdirAll(filepath.Join(name, "k8s", "prod"), 0777) 234 deployFile := filepath.Join(name, "k8s", "ns-dummy.yaml") 235 _ = os.WriteFile(deployFile, []byte("dummy yaml content"), 0777) 236 _ = os.WriteFile(filepath.Join(name, "k8s", "ns-prod.yaml"), []byte("prod content"), 0777) 237 _ = os.WriteFile(filepath.Join(name, "k8s", "other-dummy.sh"), []byte("dummy script content"), 0777) 238 239 logMock := mocks.New() 240 log.SetHandler(logMock) 241 log.SetLevel(log.DebugLevel) 242 err := Deploy(name, "image", "registryUrl", "20190513-17:22:36", client, Args{ 243 Globals: args.Globals{}, 244 Target: "prod", 245 Context: "", 246 Namespace: "", 247 Tag: "abc123", 248 Timeout: "2m", 249 }) 250 assert.NoError(t, err) 251 assert.Equal(t, 1, len(client.Inputs)) 252 assert.Equal(t, "prod content", client.Inputs[0]) 253 logMock.Check(t, []string{ 254 "debug: considering file '<yellow>ns-dummy.yaml</yellow>' for target: <green>prod</green>\n", 255 "debug: not using file '<red>ns-dummy.yaml</red>' for target: <green>prod</green>\n", 256 "debug: considering file '<yellow>ns-prod.yaml</yellow>' for target: <green>prod</green>\n", 257 "debug: using file '<green>ns-prod.yaml</green>' for target: <green>prod</green>\n", 258 "debug: considering script '<yellow>other-dummy.sh</yellow>' for target: <green>prod</green>\n", 259 "debug: not using script '<red>other-dummy.sh</red>' for target: <green>prod</green>\n", 260 "debug: trying to apply: \n---\nprod content\n---\n", 261 }) 262 } 263 264 func TestDeploy_IgnoreEmptyFiles(t *testing.T) { 265 client := &kubectl.MockKubectl{ 266 Responses: []error{nil}, 267 } 268 269 name, _ := os.MkdirTemp(os.TempDir(), "build-tools") 270 defer func() { _ = os.RemoveAll(name) }() 271 _ = os.MkdirAll(filepath.Join(name, "k8s", "prod"), 0777) 272 deployFile := filepath.Join(name, "k8s", "ns-dummy.yaml") 273 _ = os.WriteFile(deployFile, []byte("dummy yaml content"), 0777) 274 _ = os.WriteFile(filepath.Join(name, "k8s", "ns-prod.yaml"), []byte(""), 0777) 275 _ = os.WriteFile(filepath.Join(name, "k8s", "other-dummy.sh"), []byte("dummy script content"), 0777) 276 277 logMock := mocks.New() 278 log.SetHandler(logMock) 279 log.SetLevel(log.DebugLevel) 280 err := Deploy(name, "image", "registryUrl", "20190513-17:22:36", client, Args{ 281 Globals: args.Globals{}, 282 Target: "prod", 283 Context: "", 284 Namespace: "", 285 Tag: "abc123", 286 Timeout: "2m", 287 }) 288 assert.NoError(t, err) 289 assert.Equal(t, 0, len(client.Inputs)) 290 logMock.Check(t, []string{ 291 "debug: considering file '<yellow>ns-dummy.yaml</yellow>' for target: <green>prod</green>\n", 292 "debug: not using file '<red>ns-dummy.yaml</red>' for target: <green>prod</green>\n", 293 "debug: considering file '<yellow>ns-prod.yaml</yellow>' for target: <green>prod</green>\n", 294 "debug: using file '<green>ns-prod.yaml</green>' for target: <green>prod</green>\n", 295 "debug: considering script '<yellow>other-dummy.sh</yellow>' for target: <green>prod</green>\n", 296 "debug: not using script '<red>other-dummy.sh</red>' for target: <green>prod</green>\n", 297 "debug: ignoring empty file '<yellow>ns-prod.yaml</yellow>'\n", 298 }) 299 } 300 301 func TestDeploy_ScriptExecution_NameSuffix(t *testing.T) { 302 client := &kubectl.MockKubectl{ 303 Responses: []error{nil}, 304 } 305 306 name, _ := os.MkdirTemp(os.TempDir(), "build-tools") 307 defer func() { _ = os.RemoveAll(name) }() 308 _ = os.MkdirAll(filepath.Join(name, "k8s", "prod"), 0777) 309 script := `#!/usr/bin/env bash 310 echo "Prod-script with suffix"` 311 _ = os.WriteFile(filepath.Join(name, "k8s", "setup-prod.sh"), []byte(script), 0777) 312 313 logMock := mocks.New() 314 log.SetHandler(logMock) 315 log.SetLevel(log.DebugLevel) 316 err := Deploy(name, "image", "registryUrl", "20190513-17:22:36", client, Args{ 317 Globals: args.Globals{}, 318 Target: "prod", 319 Context: "", 320 Namespace: "", 321 Tag: "abc123", 322 Timeout: "2m", 323 }) 324 assert.NoError(t, err) 325 assert.Equal(t, 0, len(client.Inputs)) 326 logMock.Check(t, []string{ 327 "debug: considering script '<yellow>setup-prod.sh</yellow>' for target: <green>prod</green>\n", 328 "debug: using script '<green>setup-prod.sh</green>' for target: <green>prod</green>\n", 329 "info: Prod-script with suffix\n", 330 }) 331 } 332 333 func TestDeploy_ScriptExecution_No_Execute_Of_Common_If_Specific_Exists(t *testing.T) { 334 client := &kubectl.MockKubectl{ 335 Responses: []error{nil}, 336 } 337 338 name, _ := os.MkdirTemp(os.TempDir(), "build-tools") 339 defer func() { _ = os.RemoveAll(name) }() 340 _ = os.MkdirAll(filepath.Join(name, "k8s", "prod"), 0777) 341 script := `#!/usr/bin/env bash 342 echo "Script without suffix should not execute"` 343 _ = os.WriteFile(filepath.Join(name, "k8s", "setup.sh"), []byte(script), 0777) 344 script2 := `#!/usr/bin/env bash 345 echo "Prod-script with suffix"` 346 _ = os.WriteFile(filepath.Join(name, "k8s", "setup-prod.sh"), []byte(script2), 0777) 347 348 logMock := mocks.New() 349 log.SetHandler(logMock) 350 log.SetLevel(log.DebugLevel) 351 err := Deploy(name, "image", "registryUrl", "20190513-17:22:36", client, Args{ 352 Globals: args.Globals{}, 353 Target: "prod", 354 Context: "", 355 Namespace: "", 356 Tag: "abc123", 357 Timeout: "2m", 358 }) 359 assert.NoError(t, err) 360 assert.Equal(t, 0, len(client.Inputs)) 361 logMock.Check(t, []string{ 362 "debug: considering script '<yellow>setup-prod.sh</yellow>' for target: <green>prod</green>\n", 363 "debug: considering script '<yellow>setup.sh</yellow>' for target: <green>prod</green>\n", 364 "debug: using script '<green>setup-prod.sh</green>' for target: <green>prod</green>\n", 365 "debug: not using script '<red>setup.sh</red>' for target: <green>prod</green>\n", 366 "info: Prod-script with suffix\n", 367 }) 368 } 369 370 func TestDeploy_ScriptExecution_NotExecutable(t *testing.T) { 371 client := &kubectl.MockKubectl{ 372 Responses: []error{nil}, 373 } 374 375 name, _ := os.MkdirTemp(os.TempDir(), "build-tools") 376 defer func() { _ = os.RemoveAll(name) }() 377 _ = os.MkdirAll(filepath.Join(name, "k8s", "prod"), 0777) 378 script := `#!/usr/bin/env bash 379 echo "Prod-script with suffix"` 380 scriptName := filepath.Join(name, "k8s", "setup-prod.sh") 381 _ = os.WriteFile(scriptName, []byte(script), 0666) 382 383 err := Deploy(name, "image", "registryUrl", "20190513-17:22:36", client, Args{ 384 Globals: args.Globals{}, 385 Target: "prod", 386 Context: "", 387 Namespace: "", 388 Tag: "abc123", 389 Timeout: "2m", 390 }) 391 assert.EqualError(t, err, fmt.Sprintf("fork/exec %s: permission denied", scriptName)) 392 } 393 394 func TestDeploy_ErrorFromApply(t *testing.T) { 395 client := &kubectl.MockKubectl{ 396 Responses: []error{errors.New("apply failed")}, 397 } 398 399 name, _ := os.MkdirTemp(os.TempDir(), "build-tools") 400 defer func() { _ = os.RemoveAll(name) }() 401 _ = os.Mkdir(filepath.Join(name, "k8s"), 0777) 402 yaml := ` 403 apiVersion: v1 404 kind: Namespace 405 metadata: 406 name: dummy 407 ` 408 deployFile := filepath.Join(name, "k8s", "deploy.yaml") 409 _ = os.WriteFile(deployFile, []byte(yaml), 0777) 410 411 logMock := mocks.New() 412 log.SetHandler(logMock) 413 log.SetLevel(log.DebugLevel) 414 err := Deploy(name, "image", "registryUrl", "20190513-17:22:36", client, Args{ 415 Globals: args.Globals{}, 416 Target: "", 417 Context: "", 418 Namespace: "", 419 Tag: "abc123", 420 Timeout: "2m", 421 }) 422 423 assert.EqualError(t, err, "apply failed") 424 logMock.Check(t, []string{ 425 "debug: considering file '<yellow>deploy.yaml</yellow>' for target: <green></green>\n", 426 "debug: using file '<green>deploy.yaml</green>' for target: <green></green>\n", 427 "debug: trying to apply: \n---\n\napiVersion: v1\nkind: Namespace\nmetadata:\n name: dummy\n\n---\n", 428 }) 429 } 430 431 func TestDeploy_ReplacingCommitAndTimestampAndImage(t *testing.T) { 432 client := &kubectl.MockKubectl{ 433 Responses: []error{nil}, 434 } 435 436 name, _ := os.MkdirTemp(os.TempDir(), "build-tools") 437 defer func() { _ = os.RemoveAll(name) }() 438 _ = os.Mkdir(filepath.Join(name, "k8s"), 0777) 439 yaml := ` 440 apiVersion: v1 441 kind: Namespace 442 metadata: 443 name: dummy 444 commit: ${COMMIT} 445 image: ${IMAGE} 446 timestamp: ${TIMESTAMP} 447 ` 448 deployFile := filepath.Join(name, "k8s", "deploy.yaml") 449 _ = os.WriteFile(deployFile, []byte(yaml), 0777) 450 451 logMock := mocks.New() 452 log.SetHandler(logMock) 453 log.SetLevel(log.DebugLevel) 454 err := Deploy(name, "registryUrl", "image", "2019-05-13T17:22:36Z01:00", client, Args{ 455 Globals: args.Globals{}, 456 Target: "test", 457 Context: "", 458 Namespace: "", 459 Tag: "abc123", 460 Timeout: "2m", 461 }) 462 assert.NoError(t, err) 463 assert.Equal(t, 1, len(client.Inputs)) 464 expectedInput := ` 465 apiVersion: v1 466 kind: Namespace 467 metadata: 468 name: dummy 469 commit: abc123 470 image: registryUrl/image:abc123 471 timestamp: 2019-05-13T17:22:36Z01:00 472 ` 473 assert.Equal(t, expectedInput, client.Inputs[0]) 474 logMock.Check(t, []string{ 475 "debug: considering file '<yellow>deploy.yaml</yellow>' for target: <green>test</green>\n", 476 "debug: using file '<green>deploy.yaml</green>' for target: <green>test</green>\n", 477 "debug: trying to apply: \n---\n\napiVersion: v1\nkind: Namespace\nmetadata:\n name: dummy\n commit: abc123\n image: registryUrl/image:abc123\n timestamp: 2019-05-13T17:22:36Z01:00\n\n---\n", 478 }) 479 } 480 481 func TestDeploy_DeploymentExists(t *testing.T) { 482 client := &kubectl.MockKubectl{ 483 Responses: []error{nil}, 484 Deployment: true, 485 } 486 487 name, _ := os.MkdirTemp(os.TempDir(), "build-tools") 488 defer func() { _ = os.RemoveAll(name) }() 489 _ = os.Mkdir(filepath.Join(name, "k8s"), 0777) 490 yaml := ` 491 apiVersion: v1 492 kind: Namespace 493 metadata: 494 name: dummy 495 ` 496 deployFile := filepath.Join(name, "k8s", "deploy.yaml") 497 _ = os.WriteFile(deployFile, []byte(yaml), 0777) 498 499 logMock := mocks.New() 500 log.SetHandler(logMock) 501 log.SetLevel(log.DebugLevel) 502 err := Deploy(name, "image", "registryUrl", "20190513-17:22:36", client, Args{ 503 Globals: args.Globals{}, 504 Target: "", 505 Context: "", 506 Namespace: "", 507 Tag: "abc123", 508 Timeout: "2m", 509 }) 510 511 assert.EqualError(t, err, "failed to rollout") 512 assert.Equal(t, 1, len(client.Inputs)) 513 assert.Equal(t, yaml, client.Inputs[0]) 514 logMock.Check(t, []string{ 515 "debug: considering file '<yellow>deploy.yaml</yellow>' for target: <green></green>\n", 516 "debug: using file '<green>deploy.yaml</green>' for target: <green></green>\n", 517 "debug: trying to apply: \n---\n\napiVersion: v1\nkind: Namespace\nmetadata:\n name: dummy\n\n---\n", 518 "error: Rollout failed. Fetching events.\n", 519 "error: Deployment events", 520 "error: Pod events", 521 }) 522 } 523 524 func TestDeploy_RolloutStatusFail(t *testing.T) { 525 client := &kubectl.MockKubectl{ 526 Responses: []error{nil}, 527 Deployment: true, 528 Status: false, 529 } 530 531 name, _ := os.MkdirTemp(os.TempDir(), "build-tools") 532 defer func() { _ = os.RemoveAll(name) }() 533 _ = os.Mkdir(filepath.Join(name, "k8s"), 0777) 534 yaml := ` 535 apiVersion: v1 536 kind: Namespace 537 metadata: 538 name: dummy 539 ` 540 deployFile := filepath.Join(name, "k8s", "deploy.yaml") 541 _ = os.WriteFile(deployFile, []byte(yaml), 0777) 542 543 logMock := mocks.New() 544 log.SetHandler(logMock) 545 log.SetLevel(log.DebugLevel) 546 err := Deploy(name, "image", "registryUrl", "20190513-17:22:36", client, Args{ 547 Globals: args.Globals{}, 548 Target: "", 549 Context: "", 550 Namespace: "", 551 Tag: "abc123", 552 Timeout: "2m", 553 }) 554 555 assert.EqualError(t, err, "failed to rollout") 556 assert.Equal(t, 1, len(client.Inputs)) 557 assert.Equal(t, yaml, client.Inputs[0]) 558 logMock.Check(t, []string{"debug: considering file '<yellow>deploy.yaml</yellow>' for target: <green></green>\n", 559 "debug: using file '<green>deploy.yaml</green>' for target: <green></green>\n", 560 "debug: trying to apply: \n---\n\napiVersion: v1\nkind: Namespace\nmetadata:\n name: dummy\n\n---\n", 561 "error: Rollout failed. Fetching events.\n", 562 "error: Deployment events", 563 "error: Pod events", 564 }) 565 } 566 567 func TestDeploy_NoWait(t *testing.T) { 568 client := &kubectl.MockKubectl{ 569 Responses: []error{nil}, 570 Deployment: true, 571 } 572 573 name, _ := os.MkdirTemp(os.TempDir(), "build-tools") 574 defer func() { _ = os.RemoveAll(name) }() 575 _ = os.Mkdir(filepath.Join(name, "k8s"), 0777) 576 yaml := ` 577 apiVersion: v1 578 kind: Namespace 579 metadata: 580 name: dummy 581 ` 582 deployFile := filepath.Join(name, "k8s", "deploy.yaml") 583 _ = os.WriteFile(deployFile, []byte(yaml), 0777) 584 585 logMock := mocks.New() 586 log.SetHandler(logMock) 587 log.SetLevel(log.DebugLevel) 588 err := Deploy(name, "image", "registryUrl", "20190513-17:22:36", client, Args{ 589 Globals: args.Globals{}, 590 Target: "", 591 Context: "", 592 Namespace: "", 593 Tag: "abc123", 594 NoWait: true, 595 }) 596 597 assert.NoError(t, err) 598 logMock.Check(t, []string{ 599 "debug: considering file '<yellow>deploy.yaml</yellow>' for target: <green></green>\n", 600 "debug: using file '<green>deploy.yaml</green>' for target: <green></green>\n", 601 "debug: trying to apply: \n---\n\napiVersion: v1\nkind: Namespace\nmetadata:\n name: dummy\n\n---\n", 602 "info: Not waiting for deployment to succeed\n", 603 }) 604 }