github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/command/v7/start_command_test.go (about) 1 package v7_test 2 3 import ( 4 "context" 5 "errors" 6 "time" 7 8 "code.cloudfoundry.org/cli/actor/actionerror" 9 "code.cloudfoundry.org/cli/actor/sharedaction" 10 "code.cloudfoundry.org/cli/actor/sharedaction/sharedactionfakes" 11 "code.cloudfoundry.org/cli/actor/v7action" 12 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant" 13 "code.cloudfoundry.org/cli/command/commandfakes" 14 "code.cloudfoundry.org/cli/command/flag" 15 v7 "code.cloudfoundry.org/cli/command/v7" 16 "code.cloudfoundry.org/cli/command/v7/v7fakes" 17 "code.cloudfoundry.org/cli/types" 18 "code.cloudfoundry.org/cli/util/configv3" 19 "code.cloudfoundry.org/cli/util/ui" 20 . "github.com/onsi/ginkgo" 21 . "github.com/onsi/gomega" 22 . "github.com/onsi/gomega/gbytes" 23 ) 24 25 var _ = Describe("start Command", func() { 26 var ( 27 cmd v7.StartCommand 28 testUI *ui.UI 29 fakeConfig *commandfakes.FakeConfig 30 fakeSharedActor *commandfakes.FakeSharedActor 31 fakeActor *v7fakes.FakeStartActor 32 fakeLogCacheClient *sharedactionfakes.FakeLogCacheClient 33 34 binaryName string 35 executeErr error 36 app string 37 packageGUID string 38 ) 39 40 BeforeEach(func() { 41 testUI = ui.NewTestUI(nil, NewBuffer(), NewBuffer()) 42 fakeConfig = new(commandfakes.FakeConfig) 43 fakeSharedActor = new(commandfakes.FakeSharedActor) 44 fakeActor = new(v7fakes.FakeStartActor) 45 fakeLogCacheClient = new(sharedactionfakes.FakeLogCacheClient) 46 47 binaryName = "faceman" 48 fakeConfig.BinaryNameReturns(binaryName) 49 app = "some-app" 50 packageGUID = "some-package-guid" 51 52 cmd = v7.StartCommand{ 53 RequiredArgs: flag.AppName{AppName: app}, 54 55 UI: testUI, 56 Config: fakeConfig, 57 SharedActor: fakeSharedActor, 58 Actor: fakeActor, 59 LogCacheClient: fakeLogCacheClient, 60 } 61 }) 62 63 JustBeforeEach(func() { 64 executeErr = cmd.Execute(nil) 65 }) 66 67 It("displays the experimental warning", func() { 68 Expect(testUI.Err).NotTo(Say("This command is in EXPERIMENTAL stage and may change without notice")) 69 }) 70 71 When("checking target fails", func() { 72 BeforeEach(func() { 73 fakeSharedActor.CheckTargetReturns(actionerror.NoOrganizationTargetedError{BinaryName: binaryName}) 74 }) 75 76 It("returns an error", func() { 77 Expect(executeErr).To(MatchError(actionerror.NoOrganizationTargetedError{BinaryName: binaryName})) 78 79 Expect(fakeSharedActor.CheckTargetCallCount()).To(Equal(1)) 80 checkTargetedOrg, checkTargetedSpace := fakeSharedActor.CheckTargetArgsForCall(0) 81 Expect(checkTargetedOrg).To(BeTrue()) 82 Expect(checkTargetedSpace).To(BeTrue()) 83 }) 84 }) 85 86 When("the user is not logged in", func() { 87 var expectedErr error 88 89 BeforeEach(func() { 90 expectedErr = errors.New("some current user error") 91 fakeConfig.CurrentUserReturns(configv3.User{}, expectedErr) 92 }) 93 94 It("return an error", func() { 95 Expect(executeErr).To(Equal(expectedErr)) 96 }) 97 }) 98 99 When("the actor does not return an error", func() { 100 BeforeEach(func() { 101 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 102 Name: "some-org", 103 }) 104 fakeConfig.TargetedSpaceReturns(configv3.Space{ 105 Name: "some-space", 106 GUID: "some-space-guid", 107 }) 108 fakeConfig.CurrentUserReturns(configv3.User{Name: "steve"}, nil) 109 fakeActor.GetApplicationByNameAndSpaceReturns(v7action.Application{GUID: "some-app-guid", State: constant.ApplicationStopped}, v7action.Warnings{"get-warning-1", "get-warning-2"}, nil) 110 fakeActor.StartApplicationReturns(v7action.Warnings{"start-warning-1", "start-warning-2"}, nil) 111 fakeActor.PollStartReturns(v7action.Warnings{"poll-warning-1", "poll-warning-2"}, nil) 112 }) 113 114 It("says that the app was started and outputs warnings", func() { 115 Expect(executeErr).ToNot(HaveOccurred()) 116 117 Expect(testUI.Out).To(Say(`Starting app some-app in org some-org / space some-space as steve\.\.\.`)) 118 Expect(testUI.Out).To(Say(`Waiting for app to start\.\.\.`)) 119 120 Expect(testUI.Err).To(Say("get-warning-1")) 121 Expect(testUI.Err).To(Say("get-warning-2")) 122 Expect(testUI.Err).To(Say("start-warning-1")) 123 Expect(testUI.Err).To(Say("start-warning-2")) 124 Expect(testUI.Err).To(Say("poll-warning-1")) 125 Expect(testUI.Err).To(Say("poll-warning-2")) 126 127 Expect(fakeActor.StartApplicationCallCount()).To(Equal(1)) 128 appGUID := fakeActor.StartApplicationArgsForCall(0) 129 Expect(appGUID).To(Equal("some-app-guid")) 130 131 Expect(fakeActor.PollStartCallCount()).To(Equal(1)) 132 appGUID, noWait := fakeActor.PollStartArgsForCall(0) 133 Expect(appGUID).To(Equal("some-app-guid")) 134 Expect(noWait).To(Equal(false)) 135 }) 136 }) 137 138 When("the get app call returns a ApplicationNotFoundError", func() { 139 var expectedErr error 140 141 BeforeEach(func() { 142 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 143 Name: "some-org", 144 }) 145 fakeConfig.TargetedSpaceReturns(configv3.Space{ 146 Name: "some-space", 147 }) 148 fakeConfig.CurrentUserReturns(configv3.User{Name: "steve"}, nil) 149 expectedErr = actionerror.ApplicationNotFoundError{Name: app} 150 fakeActor.GetApplicationByNameAndSpaceReturns(v7action.Application{State: constant.ApplicationStopped}, v7action.Warnings{"get-warning-1", "get-warning-2"}, expectedErr) 151 }) 152 153 It("says that the app failed to start", func() { 154 Expect(executeErr).To(Equal(actionerror.ApplicationNotFoundError{Name: app})) 155 Expect(testUI.Out).ToNot(Say("Starting")) 156 157 Expect(testUI.Err).To(Say("get-warning-1")) 158 Expect(testUI.Err).To(Say("get-warning-2")) 159 }) 160 }) 161 162 When("the start app call returns a ApplicationNotFoundError (someone else deleted app after we fetched summary)", func() { 163 var expectedErr error 164 165 BeforeEach(func() { 166 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 167 Name: "some-org", 168 }) 169 fakeConfig.TargetedSpaceReturns(configv3.Space{ 170 Name: "some-space", 171 }) 172 fakeConfig.CurrentUserReturns(configv3.User{Name: "steve"}, nil) 173 fakeActor.GetApplicationByNameAndSpaceReturns(v7action.Application{State: constant.ApplicationStopped}, v7action.Warnings{"get-warning-1", "get-warning-2"}, nil) 174 expectedErr = actionerror.ApplicationNotFoundError{Name: app} 175 fakeActor.StartApplicationReturns(v7action.Warnings{"start-warning-1", "start-warning-2"}, expectedErr) 176 }) 177 178 It("says that the app failed to start", func() { 179 Expect(executeErr).To(Equal(actionerror.ApplicationNotFoundError{Name: app})) 180 Expect(testUI.Out).To(Say(`Starting app some-app in org some-org / space some-space as steve\.\.\.`)) 181 Expect(testUI.Out).To(Say(`Waiting for app to start\.\.\.`)) 182 183 Expect(testUI.Err).To(Say("get-warning-1")) 184 Expect(testUI.Err).To(Say("get-warning-2")) 185 Expect(testUI.Err).To(Say("start-warning-1")) 186 Expect(testUI.Err).To(Say("start-warning-2")) 187 }) 188 }) 189 190 When("there is an error when polling the app", func() { 191 var expectedErr error 192 193 BeforeEach(func() { 194 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 195 Name: "some-org", 196 }) 197 fakeConfig.TargetedSpaceReturns(configv3.Space{ 198 Name: "some-space", 199 }) 200 fakeConfig.CurrentUserReturns(configv3.User{Name: "steve"}, nil) 201 fakeActor.GetApplicationByNameAndSpaceReturns(v7action.Application{State: constant.ApplicationStopped}, v7action.Warnings{"get-warning-1", "get-warning-2"}, nil) 202 expectedErr = actionerror.ApplicationNotStartedError{Name: app} 203 fakeActor.StartApplicationReturns(v7action.Warnings{"start-warning-1", "start-warning-2"}, nil) 204 fakeActor.PollStartReturns(v7action.Warnings{"poll-warning"}, expectedErr) 205 }) 206 207 It("says that the app failed to start", func() { 208 Expect(executeErr).To(Equal(actionerror.ApplicationNotStartedError{Name: app})) 209 Expect(testUI.Out).To(Say(`Starting app some-app in org some-org / space some-space as steve\.\.\.`)) 210 Expect(testUI.Out).To(Say(`Waiting for app to start\.\.\.`)) 211 212 Expect(testUI.Err).To(Say("get-warning-1")) 213 Expect(testUI.Err).To(Say("get-warning-2")) 214 Expect(testUI.Err).To(Say("start-warning-1")) 215 Expect(testUI.Err).To(Say("start-warning-2")) 216 Expect(testUI.Err).To(Say("poll-warning")) 217 }) 218 }) 219 220 When("the app is already started", func() { 221 BeforeEach(func() { 222 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 223 Name: "some-org", 224 }) 225 fakeConfig.TargetedSpaceReturns(configv3.Space{ 226 Name: "some-space", 227 }) 228 fakeConfig.CurrentUserReturns(configv3.User{Name: "steve"}, nil) 229 fakeActor.GetApplicationByNameAndSpaceReturns(v7action.Application{State: constant.ApplicationStarted, Name: app}, v7action.Warnings{"get-warning-1", "get-warning-2"}, nil) 230 }) 231 232 It("says that the app failed to start", func() { 233 Expect(executeErr).ToNot(HaveOccurred()) 234 Expect(testUI.Out).ToNot(Say("Starting")) 235 Expect(testUI.Out).To(Say(`App 'some-app' is already started\.`)) 236 Expect(testUI.Out).To(Say("OK")) 237 238 Expect(testUI.Err).To(Say("get-warning-1")) 239 Expect(testUI.Err).To(Say("get-warning-2")) 240 241 Expect(fakeActor.StartApplicationCallCount()).To(BeZero(), "Expected StartApplication to not be called") 242 }) 243 }) 244 245 When("getting attempting to get the unstaged package returns an error", func() { 246 var expectedErr error 247 BeforeEach(func() { 248 expectedErr = errors.New("error getting package") 249 app = "some-app" 250 fakeActor.GetUnstagedNewestPackageGUIDReturns("", v7action.Warnings{"needs-stage-warnings"}, expectedErr) 251 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 252 Name: "some-org", 253 }) 254 fakeConfig.TargetedSpaceReturns(configv3.Space{ 255 Name: "some-space", 256 GUID: "some-space-guid", 257 }) 258 fakeConfig.CurrentUserReturns(configv3.User{Name: "steve"}, nil) 259 fakeActor.GetApplicationByNameAndSpaceReturns(v7action.Application{State: constant.ApplicationStopped, LifecycleType: constant.AppLifecycleTypeBuildpack, GUID: "some-app-guid"}, v7action.Warnings{"get-warning-1", "get-warning-2"}, nil) 260 }) 261 It("errors", func() { 262 Expect(testUI.Err).To(Say("needs-stage-warnings")) 263 Expect(executeErr).To(MatchError(expectedErr)) 264 Expect(fakeActor.GetUnstagedNewestPackageGUIDCallCount()).To(Equal(1)) 265 appGUID := fakeActor.GetUnstagedNewestPackageGUIDArgsForCall(0) 266 Expect(appGUID).To(Equal("some-app-guid")) 267 }) 268 }) 269 270 When("the app needs staging", func() { 271 BeforeEach(func() { 272 app = "some-app" 273 fakeActor.GetUnstagedNewestPackageGUIDReturns(packageGUID, v7action.Warnings{"needs-stage-warnings"}, nil) 274 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 275 Name: "some-org", 276 }) 277 fakeConfig.TargetedSpaceReturns(configv3.Space{ 278 Name: "some-space", 279 GUID: "some-space-guid", 280 }) 281 fakeConfig.CurrentUserReturns(configv3.User{Name: "steve"}, nil) 282 fakeActor.GetApplicationByNameAndSpaceReturns(v7action.Application{State: constant.ApplicationStopped, LifecycleType: constant.AppLifecycleTypeBuildpack, GUID: "some-app-guid"}, v7action.Warnings{"get-warning-1", "get-warning-2"}, nil) 283 }) 284 285 When("the logging does not error", func() { 286 var allLogsWritten chan bool 287 var closedTheStreams bool 288 289 BeforeEach(func() { 290 allLogsWritten = make(chan bool) 291 fakeActor.GetStreamingLogsForApplicationByNameAndSpaceStub = func(appName string, spaceGUID string, client sharedaction.LogCacheClient) (<-chan sharedaction.LogMessage, <-chan error, context.CancelFunc, v7action.Warnings, error) { 292 logStream := make(chan sharedaction.LogMessage) 293 errorStream := make(chan error) 294 closedTheStreams = false 295 296 cancelFunc := func() { 297 if closedTheStreams { 298 return 299 } 300 closedTheStreams = true 301 close(logStream) 302 close(errorStream) 303 } 304 go func() { 305 logStream <- *sharedaction.NewLogMessage("Here are some staging logs!", "OUT", time.Now(), sharedaction.StagingLog, "sourceInstance") 306 logStream <- *sharedaction.NewLogMessage("Here are some other staging logs!", "OUT", time.Now(), sharedaction.StagingLog, "sourceInstance") 307 allLogsWritten <- true 308 }() 309 310 return logStream, errorStream, cancelFunc, v7action.Warnings{"steve for all I care"}, nil 311 } 312 }) 313 314 JustAfterEach(func() { 315 Expect(closedTheStreams).To(BeTrue()) 316 }) 317 318 When("the staging is successful", func() { 319 const dropletCreateTime = "2017-08-14T21:16:42Z" 320 BeforeEach(func() { 321 fakeActor.StagePackageStub = func(packageGUID, appName, spaceGUID string) (<-chan v7action.Droplet, <-chan v7action.Warnings, <-chan error) { 322 dropletStream := make(chan v7action.Droplet) 323 warningsStream := make(chan v7action.Warnings) 324 errorStream := make(chan error) 325 326 go func() { 327 <-allLogsWritten 328 defer close(dropletStream) 329 defer close(warningsStream) 330 defer close(errorStream) 331 warningsStream <- v7action.Warnings{"some-warning", "some-other-warning"} 332 dropletStream <- v7action.Droplet{ 333 GUID: "some-droplet-guid", 334 CreatedAt: dropletCreateTime, 335 State: constant.DropletStaged, 336 } 337 }() 338 339 return dropletStream, warningsStream, errorStream 340 } 341 fakeActor.SetApplicationDropletReturns(v7action.Warnings{"some-set-droplet-warning"}, nil) 342 }) 343 344 It("stages the package", func() { 345 Expect(executeErr).ToNot(HaveOccurred()) 346 Expect(fakeActor.StagePackageCallCount()).To(Equal(1)) 347 guidArg, appNameArg, spaceGUIDArg := fakeActor.StagePackageArgsForCall(0) 348 Expect(guidArg).To(Equal(packageGUID)) 349 Expect(appNameArg).To(Equal(app)) 350 Expect(spaceGUIDArg).To(Equal("some-space-guid")) 351 }) 352 353 It("displays staging logs and their warnings", func() { 354 Expect(testUI.Out).To(Say("Here are some staging logs!")) 355 Expect(testUI.Out).To(Say("Here are some other staging logs!")) 356 357 Expect(testUI.Err).To(Say("steve for all I care")) 358 359 Expect(fakeActor.GetStreamingLogsForApplicationByNameAndSpaceCallCount()).To(Equal(1)) 360 appNameArg, spaceGUID, logCacheClient := fakeActor.GetStreamingLogsForApplicationByNameAndSpaceArgsForCall(0) 361 Expect(appNameArg).To(Equal(app)) 362 Expect(spaceGUID).To(Equal("some-space-guid")) 363 Expect(logCacheClient).To(Equal(fakeLogCacheClient)) 364 365 Expect(fakeActor.StagePackageCallCount()).To(Equal(1)) 366 guidArg, appNameArg, spaceGUIDArg := fakeActor.StagePackageArgsForCall(0) 367 Expect(guidArg).To(Equal(packageGUID)) 368 Expect(appNameArg).To(Equal(app)) 369 Expect(spaceGUIDArg).To(Equal(spaceGUID)) 370 }) 371 372 When("Assigning the droplet is successful", func() { 373 BeforeEach(func() { 374 fakeActor.SetApplicationDropletReturns(v7action.Warnings{"some-set-droplet-warning"}, nil) 375 }) 376 It("displays that the droplet was assigned", func() { 377 Expect(executeErr).ToNot(HaveOccurred()) 378 Expect(testUI.Err).To(Say("warning-1")) 379 Expect(testUI.Err).To(Say("warning-2")) 380 381 Expect(fakeActor.SetApplicationDropletCallCount()).To(Equal(1)) 382 appGuid, dropletGUID := fakeActor.SetApplicationDropletArgsForCall(0) 383 Expect(appGuid).To(Equal("some-app-guid")) 384 Expect(dropletGUID).To(Equal("some-droplet-guid")) 385 386 }) 387 }) 388 389 When("Assigning the droplet is not successful", func() { 390 var expectedErr error 391 BeforeEach(func() { 392 expectedErr = errors.New("some-error") 393 fakeActor.SetApplicationDropletReturns(v7action.Warnings{"some-set-droplet-warning"}, expectedErr) 394 }) 395 It("errors and displays warnings", func() { 396 Expect(executeErr).To(HaveOccurred()) 397 Expect(testUI.Err).To(Say("some-set-droplet-warning")) 398 }) 399 }) 400 }) 401 402 When("the staging returns an error", func() { 403 var expectedErr error 404 405 BeforeEach(func() { 406 expectedErr = errors.New("any gibberish") 407 fakeActor.StagePackageStub = func(packageGUID, _, _ string) (<-chan v7action.Droplet, <-chan v7action.Warnings, <-chan error) { 408 dropletStream := make(chan v7action.Droplet) 409 warningsStream := make(chan v7action.Warnings) 410 errorStream := make(chan error) 411 412 go func() { 413 <-allLogsWritten 414 defer close(dropletStream) 415 defer close(warningsStream) 416 defer close(errorStream) 417 warningsStream <- v7action.Warnings{"some-warning", "some-other-warning"} 418 errorStream <- expectedErr 419 }() 420 421 return dropletStream, warningsStream, errorStream 422 } 423 }) 424 425 It("returns the error and displays warnings", func() { 426 Expect(executeErr).To(Equal(expectedErr)) 427 428 Expect(testUI.Err).To(Say("some-warning")) 429 Expect(testUI.Err).To(Say("some-other-warning")) 430 }) 431 }) 432 }) 433 434 When("the logging stream has errors", func() { 435 var ( 436 expectedErr error 437 allLogsWritten chan bool 438 closedTheStreams bool 439 ) 440 441 BeforeEach(func() { 442 allLogsWritten = make(chan bool) 443 expectedErr = errors.New("banana") 444 445 fakeActor.GetStreamingLogsForApplicationByNameAndSpaceStub = func(appName string, spaceGUID string, client sharedaction.LogCacheClient) (<-chan sharedaction.LogMessage, <-chan error, context.CancelFunc, v7action.Warnings, error) { 446 logStream := make(chan sharedaction.LogMessage) 447 errorStream := make(chan error) 448 closedTheStreams = false 449 450 cancelFunc := func() { 451 if closedTheStreams { 452 return 453 } 454 closedTheStreams = true 455 close(logStream) 456 close(errorStream) 457 } 458 go func() { 459 logStream <- *sharedaction.NewLogMessage("Here are some staging logs!", "OUT", time.Now(), sharedaction.StagingLog, "sourceInstance") 460 errorStream <- expectedErr 461 allLogsWritten <- true 462 }() 463 464 return logStream, errorStream, cancelFunc, v7action.Warnings{"steve for all I care"}, nil 465 } 466 467 fakeActor.StagePackageStub = func(packageGUID, _, _ string) (<-chan v7action.Droplet, <-chan v7action.Warnings, <-chan error) { 468 dropletStream := make(chan v7action.Droplet) 469 warningsStream := make(chan v7action.Warnings) 470 errorStream := make(chan error) 471 472 go func() { 473 <-allLogsWritten 474 defer close(dropletStream) 475 defer close(warningsStream) 476 defer close(errorStream) 477 warningsStream <- v7action.Warnings{"some-warning", "some-other-warning"} 478 dropletStream <- v7action.Droplet{ 479 GUID: "some-droplet-guid", 480 CreatedAt: "2017-08-14T21:16:42Z", 481 State: constant.DropletStaged, 482 } 483 }() 484 485 return dropletStream, warningsStream, errorStream 486 } 487 }) 488 489 JustAfterEach(func() { 490 Expect(closedTheStreams).To(BeTrue()) 491 }) 492 493 It("displays the errors and continues staging", func() { 494 Expect(executeErr).ToNot(HaveOccurred()) 495 496 Expect(testUI.Err).To(Say("banana")) 497 Expect(testUI.Err).To(Say("some-warning")) 498 Expect(testUI.Err).To(Say("some-other-warning")) 499 }) 500 }) 501 }) 502 503 When("the get application returns an unknown error", func() { 504 var expectedErr error 505 506 BeforeEach(func() { 507 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 508 Name: "some-org", 509 }) 510 fakeConfig.TargetedSpaceReturns(configv3.Space{ 511 Name: "some-space", 512 }) 513 fakeConfig.CurrentUserReturns(configv3.User{Name: "steve"}, nil) 514 expectedErr = errors.New("some-error") 515 fakeActor.GetApplicationByNameAndSpaceReturns(v7action.Application{State: constant.ApplicationStopped}, v7action.Warnings{"get-warning-1", "get-warning-2"}, expectedErr) 516 }) 517 518 It("says that the app failed to start", func() { 519 Expect(executeErr).To(Equal(expectedErr)) 520 Expect(testUI.Out).ToNot(Say("Starting")) 521 522 Expect(testUI.Err).To(Say("get-warning-1")) 523 Expect(testUI.Err).To(Say("get-warning-2")) 524 525 Expect(fakeActor.StartApplicationCallCount()).To(BeZero(), "Expected StartApplication to not be called") 526 }) 527 }) 528 529 When("the start application returns an unknown error", func() { 530 var expectedErr error 531 532 BeforeEach(func() { 533 fakeConfig.TargetedOrganizationReturns(configv3.Organization{ 534 Name: "some-org", 535 }) 536 fakeConfig.TargetedSpaceReturns(configv3.Space{ 537 Name: "some-space", 538 }) 539 fakeConfig.CurrentUserReturns(configv3.User{Name: "steve"}, nil) 540 fakeActor.GetApplicationByNameAndSpaceReturns(v7action.Application{State: constant.ApplicationStopped}, v7action.Warnings{"get-warning-1", "get-warning-2"}, nil) 541 expectedErr = errors.New("some-error") 542 fakeActor.StartApplicationReturns(v7action.Warnings{"start-warning-1", "start-warning-2"}, expectedErr) 543 }) 544 545 It("says that the app failed to start", func() { 546 Expect(executeErr).To(Equal(expectedErr)) 547 Expect(testUI.Out).To(Say(`Starting app some-app in org some-org / space some-space as steve\.\.\.`)) 548 549 Expect(testUI.Err).To(Say("get-warning-1")) 550 Expect(testUI.Err).To(Say("get-warning-2")) 551 Expect(testUI.Err).To(Say("start-warning-1")) 552 Expect(testUI.Err).To(Say("start-warning-2")) 553 }) 554 }) 555 556 When("getting the application summary returns an error", func() { 557 var expectedErr error 558 559 BeforeEach(func() { 560 expectedErr = actionerror.ApplicationNotFoundError{Name: app} 561 fakeActor.GetDetailedAppSummaryReturns(v7action.DetailedApplicationSummary{}, v7action.Warnings{"warning-1", "warning-2"}, expectedErr) 562 }) 563 564 It("returns the error and prints warnings", func() { 565 Expect(executeErr).To(Equal(actionerror.ApplicationNotFoundError{Name: app})) 566 567 Expect(testUI.Out).To(Say(`Waiting for app to start\.\.\.`)) 568 569 Expect(testUI.Err).To(Say("warning-1")) 570 Expect(testUI.Err).To(Say("warning-2")) 571 }) 572 }) 573 574 When("getting the application summary is successful", func() { 575 BeforeEach(func() { 576 fakeConfig.TargetedSpaceReturns(configv3.Space{ 577 Name: "some-space", 578 GUID: "some-space-guid", 579 }) 580 summary := v7action.DetailedApplicationSummary{ 581 ApplicationSummary: v7action.ApplicationSummary{ 582 Application: v7action.Application{ 583 Name: "some-app", 584 State: constant.ApplicationStarted, 585 }, 586 ProcessSummaries: v7action.ProcessSummaries{ 587 { 588 Process: v7action.Process{ 589 Type: constant.ProcessTypeWeb, 590 Command: *types.NewFilteredString("some-command-1"), 591 }, 592 }, 593 { 594 Process: v7action.Process{ 595 Type: "console", 596 Command: *types.NewFilteredString("some-command-2"), 597 }, 598 }, 599 }, 600 }, 601 CurrentDroplet: v7action.Droplet{ 602 Stack: "cflinuxfs2", 603 Buildpacks: []v7action.DropletBuildpack{ 604 { 605 Name: "ruby_buildpack", 606 DetectOutput: "some-detect-output", 607 }, 608 { 609 Name: "some-buildpack", 610 DetectOutput: "", 611 }, 612 }, 613 }, 614 } 615 fakeActor.GetDetailedAppSummaryReturns(summary, v7action.Warnings{"warning-1", "warning-2"}, nil) 616 }) 617 618 It("prints the application summary and outputs warnings", func() { 619 Expect(executeErr).ToNot(HaveOccurred()) 620 621 Expect(testUI.Out).To(Say(`Waiting for app to start\.\.\.`)) 622 Expect(testUI.Out).To(Say(`name:\s+some-app`)) 623 Expect(testUI.Out).To(Say(`requested state:\s+started`)) 624 Expect(testUI.Out).ToNot(Say("start command:")) 625 626 Expect(testUI.Err).To(Say("warning-1")) 627 Expect(testUI.Err).To(Say("warning-2")) 628 629 Expect(fakeActor.GetDetailedAppSummaryCallCount()).To(Equal(1)) 630 appName, spaceGUID, withObfuscatedValues := fakeActor.GetDetailedAppSummaryArgsForCall(0) 631 Expect(appName).To(Equal("some-app")) 632 Expect(spaceGUID).To(Equal("some-space-guid")) 633 Expect(withObfuscatedValues).To(BeFalse()) 634 }) 635 }) 636 })