github.com/swisscom/cloudfoundry-cli@v7.1.0+incompatible/actor/v2action/security_group_test.go (about) 1 package v2action_test 2 3 import ( 4 "errors" 5 "fmt" 6 7 "code.cloudfoundry.org/cli/actor/actionerror" 8 . "code.cloudfoundry.org/cli/actor/v2action" 9 "code.cloudfoundry.org/cli/actor/v2action/v2actionfakes" 10 "code.cloudfoundry.org/cli/api/cloudcontroller/ccerror" 11 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2" 12 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/constant" 13 . "github.com/onsi/ginkgo" 14 . "github.com/onsi/gomega" 15 ) 16 17 var _ = Describe("Security Group Actions", func() { 18 var ( 19 actor *Actor 20 fakeCloudControllerClient *v2actionfakes.FakeCloudControllerClient 21 ) 22 23 BeforeEach(func() { 24 fakeCloudControllerClient = new(v2actionfakes.FakeCloudControllerClient) 25 actor = NewActor(fakeCloudControllerClient, nil, nil) 26 }) 27 28 Describe("GetSecurityGroupsWithOrganizationSpaceAndLifecycle", func() { 29 var ( 30 secGroupOrgSpaces []SecurityGroupWithOrganizationSpaceAndLifecycle 31 includeStaging bool 32 warnings Warnings 33 err error 34 ) 35 36 JustBeforeEach(func() { 37 secGroupOrgSpaces, warnings, err = actor.GetSecurityGroupsWithOrganizationSpaceAndLifecycle(includeStaging) 38 }) 39 40 When("an error occurs getting security groups", func() { 41 var returnedError error 42 43 BeforeEach(func() { 44 returnedError = errors.New("get-security-groups-error") 45 fakeCloudControllerClient.GetSecurityGroupsReturns( 46 nil, 47 ccv2.Warnings{"warning-1", "warning-2"}, 48 returnedError, 49 ) 50 }) 51 52 It("returns the error and all warnings", func() { 53 Expect(err).To(MatchError(returnedError)) 54 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 55 }) 56 }) 57 58 When("an error occurs getting running spaces", func() { 59 var returnedError error 60 61 BeforeEach(func() { 62 fakeCloudControllerClient.GetSecurityGroupsReturns( 63 []ccv2.SecurityGroup{ 64 { 65 GUID: "security-group-guid-1", 66 Name: "security-group-1", 67 }, 68 }, 69 ccv2.Warnings{"warning-1", "warning-2"}, 70 nil, 71 ) 72 }) 73 74 When("the error is generic", func() { 75 BeforeEach(func() { 76 returnedError = errors.New("get-spaces-error") 77 fakeCloudControllerClient.GetSecurityGroupSpacesReturns( 78 nil, 79 ccv2.Warnings{"warning-3", "warning-4"}, 80 returnedError, 81 ) 82 }) 83 84 It("returns the error and all warnings", func() { 85 Expect(err).To(MatchError(returnedError)) 86 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "warning-3", "warning-4")) 87 Expect(fakeCloudControllerClient.GetSecurityGroupsCallCount()).To(Equal(1)) 88 Expect(fakeCloudControllerClient.GetSecurityGroupsArgsForCall(0)).To(BeNil()) 89 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesCallCount()).To(Equal(1)) 90 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesArgsForCall(0)).To(Equal("security-group-guid-1")) 91 }) 92 }) 93 94 When("the error is a resource not found error", func() { 95 BeforeEach(func() { 96 returnedError = ccerror.ResourceNotFoundError{Message: "could not find security group"} 97 fakeCloudControllerClient.GetSecurityGroupSpacesReturns( 98 nil, 99 ccv2.Warnings{"warning-3", "warning-4"}, 100 returnedError, 101 ) 102 }) 103 104 It("returns all warnings and continues", func() { 105 Expect(err).ToNot(HaveOccurred()) 106 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "warning-3", "warning-4", returnedError.Error())) 107 }) 108 }) 109 }) 110 111 When("an error occurs getting staging spaces", func() { 112 var returnedError error 113 114 BeforeEach(func() { 115 includeStaging = true 116 117 fakeCloudControllerClient.GetSecurityGroupsReturns( 118 []ccv2.SecurityGroup{ 119 { 120 GUID: "security-group-guid-1", 121 Name: "security-group-1", 122 }, 123 }, 124 ccv2.Warnings{"warning-1", "warning-2"}, 125 nil, 126 ) 127 128 fakeCloudControllerClient.GetSecurityGroupSpacesReturns( 129 nil, 130 ccv2.Warnings{"warning-3", "warning-4"}, 131 nil, 132 ) 133 }) 134 135 When("the error is generic", func() { 136 BeforeEach(func() { 137 returnedError = errors.New("get-staging-spaces-error") 138 fakeCloudControllerClient.GetSecurityGroupStagingSpacesReturns( 139 nil, 140 ccv2.Warnings{"warning-5", "warning-6"}, 141 returnedError, 142 ) 143 }) 144 145 It("returns the error and all warnings", func() { 146 Expect(err).To(MatchError(returnedError)) 147 Expect(warnings).To(ConsistOf( 148 "warning-1", 149 "warning-2", 150 "warning-3", 151 "warning-4", 152 "warning-5", 153 "warning-6", 154 )) 155 Expect(fakeCloudControllerClient.GetSecurityGroupsCallCount()).To(Equal(1)) 156 Expect(fakeCloudControllerClient.GetSecurityGroupsArgsForCall(0)).To(BeNil()) 157 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesCallCount()).To(Equal(1)) 158 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesArgsForCall(0)).To(Equal("security-group-guid-1")) 159 Expect(fakeCloudControllerClient.GetSecurityGroupStagingSpacesCallCount()).To(Equal(1)) 160 Expect(fakeCloudControllerClient.GetSecurityGroupStagingSpacesArgsForCall(0)).To(Equal("security-group-guid-1")) 161 }) 162 }) 163 164 When("the error is a resource not found error", func() { 165 BeforeEach(func() { 166 returnedError = ccerror.ResourceNotFoundError{Message: "could not find security group"} 167 fakeCloudControllerClient.GetSecurityGroupStagingSpacesReturns( 168 nil, 169 ccv2.Warnings{"warning-5", "warning-6"}, 170 returnedError, 171 ) 172 }) 173 174 It("returns all warnings and continues", func() { 175 Expect(err).ToNot(HaveOccurred()) 176 Expect(warnings).To(ConsistOf( 177 "warning-1", 178 "warning-2", 179 "warning-3", 180 "warning-4", 181 "warning-5", 182 "warning-6", 183 returnedError.Error())) 184 }) 185 }) 186 }) 187 188 When("an error occurs getting an organization", func() { 189 var returnedError error 190 191 BeforeEach(func() { 192 includeStaging = true 193 194 fakeCloudControllerClient.GetSecurityGroupsReturns( 195 []ccv2.SecurityGroup{ 196 { 197 GUID: "security-group-guid-1", 198 Name: "security-group-1", 199 }, 200 }, 201 ccv2.Warnings{"warning-1", "warning-2"}, 202 nil, 203 ) 204 fakeCloudControllerClient.GetSecurityGroupSpacesReturns( 205 []ccv2.Space{ 206 { 207 GUID: "space-guid-11", 208 Name: "space-11", 209 OrganizationGUID: "org-guid-11", 210 }, 211 }, 212 ccv2.Warnings{"warning-3", "warning-4"}, 213 nil, 214 ) 215 fakeCloudControllerClient.GetSecurityGroupStagingSpacesReturns( 216 []ccv2.Space{ 217 { 218 GUID: "space-guid-12", 219 Name: "space-12", 220 OrganizationGUID: "org-guid-12", 221 }, 222 }, 223 ccv2.Warnings{"warning-5", "warning-6"}, 224 nil, 225 ) 226 }) 227 228 When("the error is generic", func() { 229 BeforeEach(func() { 230 returnedError = errors.New("get-org-error") 231 fakeCloudControllerClient.GetOrganizationReturns( 232 ccv2.Organization{}, 233 ccv2.Warnings{"warning-7", "warning-8"}, 234 returnedError, 235 ) 236 }) 237 238 It("returns the error and all warnings", func() { 239 Expect(err).To(MatchError(returnedError)) 240 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "warning-3", "warning-4", "warning-5", "warning-6", "warning-7", "warning-8")) 241 Expect(fakeCloudControllerClient.GetSecurityGroupsCallCount()).To(Equal(1)) 242 Expect(fakeCloudControllerClient.GetSecurityGroupsArgsForCall(0)).To(BeNil()) 243 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesCallCount()).To(Equal(1)) 244 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesArgsForCall(0)).To(Equal("security-group-guid-1")) 245 Expect(fakeCloudControllerClient.GetSecurityGroupStagingSpacesCallCount()).To(Equal(1)) 246 Expect(fakeCloudControllerClient.GetSecurityGroupStagingSpacesArgsForCall(0)).To(Equal("security-group-guid-1")) 247 Expect(fakeCloudControllerClient.GetOrganizationCallCount()).To(Equal(1)) 248 Expect(fakeCloudControllerClient.GetOrganizationArgsForCall(0)).To(Equal("org-guid-11")) 249 }) 250 }) 251 252 When("the error is a resource not found error", func() { 253 BeforeEach(func() { 254 returnedError = ccerror.ResourceNotFoundError{Message: "could not find the org"} 255 fakeCloudControllerClient.GetOrganizationReturnsOnCall(0, 256 ccv2.Organization{}, 257 ccv2.Warnings{"warning-7", "warning-8"}, 258 returnedError, 259 ) 260 fakeCloudControllerClient.GetOrganizationReturnsOnCall(1, 261 ccv2.Organization{}, 262 ccv2.Warnings{"warning-9", "warning-10"}, 263 nil, 264 ) 265 }) 266 267 It("returns all warnings and continues", func() { 268 Expect(err).ToNot(HaveOccurred()) 269 Expect(warnings).To(BeEquivalentTo(Warnings{ 270 "warning-1", "warning-2", 271 "warning-3", "warning-4", 272 "warning-5", "warning-6", 273 "warning-7", "warning-8", 274 returnedError.Error(), 275 "warning-9", "warning-10", 276 })) 277 Expect(fakeCloudControllerClient.GetOrganizationCallCount()).To(Equal(2)) 278 Expect(fakeCloudControllerClient.GetOrganizationArgsForCall(0)).To(Equal("org-guid-11")) 279 Expect(fakeCloudControllerClient.GetOrganizationArgsForCall(1)).To(Equal("org-guid-12")) 280 }) 281 }) 282 }) 283 284 When("no errors are encountered", func() { 285 var ( 286 expectedSecurityGroup1 SecurityGroup 287 expectedSecurityGroup2 SecurityGroup 288 expectedSecurityGroup3 SecurityGroup 289 expectedSecurityGroup4 SecurityGroup 290 expectedSecurityGroup5 SecurityGroup 291 expectedSecurityGroup6 SecurityGroup 292 expectedSecurityGroup7 SecurityGroup 293 294 expectedOrg11 Organization 295 expectedOrg12 Organization 296 expectedOrg13 Organization 297 expectedOrg21 Organization 298 expectedOrg23 Organization 299 expectedOrg33 Organization 300 expectedOrgAll Organization 301 302 expectedSpace11 Space 303 expectedSpace12 Space 304 expectedSpace13 Space 305 expectedSpace21 Space 306 expectedSpace22 Space 307 expectedSpace23 Space 308 expectedSpace31 Space 309 expectedSpace32 Space 310 expectedSpace33 Space 311 expectedSpaceAll Space 312 ) 313 314 BeforeEach(func() { 315 expectedSecurityGroup1 = SecurityGroup{ 316 GUID: "security-group-guid-1", 317 Name: "security-group-1", 318 RunningDefault: true, 319 } 320 expectedSecurityGroup2 = SecurityGroup{ 321 GUID: "security-group-guid-2", 322 Name: "security-group-2", 323 StagingDefault: true, 324 } 325 expectedSecurityGroup3 = SecurityGroup{ 326 GUID: "security-group-guid-3", 327 Name: "security-group-3", 328 } 329 expectedSecurityGroup4 = SecurityGroup{ 330 GUID: "security-group-guid-4", 331 Name: "security-group-4", 332 } 333 expectedSecurityGroup5 = SecurityGroup{ 334 GUID: "security-group-guid-5", 335 Name: "security-group-5", 336 RunningDefault: true, 337 } 338 expectedSecurityGroup6 = SecurityGroup{ 339 GUID: "security-group-guid-6", 340 Name: "security-group-6", 341 StagingDefault: true, 342 } 343 expectedSecurityGroup7 = SecurityGroup{ 344 GUID: "security-group-guid-7", 345 Name: "security-group-7", 346 RunningDefault: true, 347 StagingDefault: true, 348 } 349 350 expectedOrg11 = Organization{ 351 GUID: "<<org-guid-11", 352 Name: "org-11", 353 } 354 expectedOrg12 = Organization{ 355 GUID: "org-guid-12", 356 Name: "org-12", 357 } 358 expectedOrg13 = Organization{ 359 GUID: "org-guid-13", 360 Name: "org-13", 361 } 362 expectedOrg21 = Organization{ 363 GUID: "org-guid-21", 364 Name: "org-21", 365 } 366 expectedOrg23 = Organization{ 367 GUID: "org-guid-23", 368 Name: "org-23", 369 } 370 expectedOrg33 = Organization{ 371 GUID: "org-guid-33", 372 Name: "org-33", 373 } 374 expectedOrgAll = Organization{ 375 Name: "", 376 } 377 378 expectedSpace11 = Space{ 379 GUID: "space-guid-11", 380 Name: "space-11", 381 } 382 expectedSpace12 = Space{ 383 GUID: "space-guid-12", 384 Name: "space-12", 385 } 386 expectedSpace13 = Space{ 387 GUID: "space-guid-13", 388 Name: "space-13", 389 } 390 expectedSpace21 = Space{ 391 GUID: "space-guid-21", 392 Name: "space-21", 393 } 394 expectedSpace22 = Space{ 395 GUID: "space-guid-22", 396 Name: "space-22", 397 } 398 expectedSpace23 = Space{ 399 GUID: "space-guid-23", 400 Name: "space-23", 401 } 402 expectedSpace31 = Space{ 403 GUID: "space-guid-31", 404 Name: "space-31", 405 } 406 expectedSpace32 = Space{ 407 GUID: "space-guid-32", 408 Name: "space-32", 409 } 410 expectedSpace33 = Space{ 411 GUID: "space-guid-33", 412 Name: "space-33", 413 } 414 expectedSpaceAll = Space{ 415 Name: "", 416 } 417 418 fakeCloudControllerClient.GetSecurityGroupsReturns( 419 []ccv2.SecurityGroup{ 420 { 421 GUID: "security-group-guid-1", 422 Name: "security-group-1", 423 RunningDefault: true, 424 }, 425 { 426 GUID: "security-group-guid-2", 427 Name: "security-group-2", 428 StagingDefault: true, 429 }, 430 { 431 GUID: "security-group-guid-3", 432 Name: "security-group-3", 433 }, 434 { 435 GUID: "security-group-guid-4", 436 Name: "security-group-4", 437 }, 438 { 439 GUID: "security-group-guid-5", 440 Name: "security-group-5", 441 RunningDefault: true, 442 }, 443 { 444 GUID: "security-group-guid-6", 445 Name: "security-group-6", 446 StagingDefault: true, 447 }, 448 { 449 GUID: "security-group-guid-7", 450 Name: "security-group-7", 451 RunningDefault: true, 452 StagingDefault: true, 453 }, 454 }, 455 ccv2.Warnings{"warning-1", "warning-2"}, 456 nil, 457 ) 458 459 fakeCloudControllerClient.GetSecurityGroupSpacesReturnsOnCall(0, 460 []ccv2.Space{ 461 { 462 GUID: "space-guid-13", 463 Name: "space-13", 464 OrganizationGUID: "org-guid-13", 465 }, 466 { 467 GUID: "space-guid-12", 468 Name: "space-12", 469 OrganizationGUID: "org-guid-12", 470 }, 471 { 472 GUID: "space-guid-11", 473 Name: "space-11", 474 OrganizationGUID: "<<org-guid-11", 475 }, 476 }, 477 ccv2.Warnings{"warning-3", "warning-4"}, 478 nil, 479 ) 480 481 fakeCloudControllerClient.GetSecurityGroupStagingSpacesReturnsOnCall(0, 482 []ccv2.Space{ 483 { 484 GUID: "space-guid-13", 485 Name: "space-13", 486 OrganizationGUID: "org-guid-13", 487 }, 488 { 489 GUID: "space-guid-12", 490 Name: "space-12", 491 OrganizationGUID: "org-guid-12", 492 }, 493 { 494 GUID: "space-guid-11", 495 Name: "space-11", 496 OrganizationGUID: "<<org-guid-11", 497 }, 498 }, 499 ccv2.Warnings{"warning-5", "warning-6"}, 500 nil, 501 ) 502 503 fakeCloudControllerClient.GetSecurityGroupSpacesReturnsOnCall(1, 504 []ccv2.Space{ 505 { 506 GUID: "space-guid-21", 507 Name: "space-21", 508 OrganizationGUID: "org-guid-21", 509 }, 510 { 511 GUID: "space-guid-23", 512 Name: "space-23", 513 OrganizationGUID: "org-guid-23", 514 }, 515 { 516 GUID: "space-guid-22", 517 Name: "space-22", 518 OrganizationGUID: "<<org-guid-11", 519 }, 520 }, 521 ccv2.Warnings{"warning-7", "warning-8"}, 522 nil, 523 ) 524 fakeCloudControllerClient.GetSecurityGroupSpacesReturnsOnCall(2, 525 []ccv2.Space{}, 526 ccv2.Warnings{"warning-9", "warning-10"}, 527 nil, 528 ) 529 fakeCloudControllerClient.GetSecurityGroupSpacesReturnsOnCall(3, 530 []ccv2.Space{ 531 { 532 GUID: "space-guid-31", 533 Name: "space-31", 534 OrganizationGUID: "org-guid-23", 535 }, 536 { 537 GUID: "space-guid-32", 538 Name: "space-32", 539 OrganizationGUID: "<<org-guid-11", 540 }, 541 { 542 GUID: "space-guid-33", 543 Name: "space-33", 544 OrganizationGUID: "org-guid-33", 545 }, 546 }, 547 ccv2.Warnings{"warning-11", "warning-12"}, 548 nil, 549 ) 550 fakeCloudControllerClient.GetSecurityGroupSpacesReturnsOnCall(4, 551 []ccv2.Space{}, 552 ccv2.Warnings{"warning-31", "warning-32"}, 553 nil, 554 ) 555 fakeCloudControllerClient.GetSecurityGroupSpacesReturnsOnCall(5, 556 []ccv2.Space{}, 557 ccv2.Warnings{"warning-33", "warning-34"}, 558 nil, 559 ) 560 fakeCloudControllerClient.GetSecurityGroupSpacesReturnsOnCall(6, 561 []ccv2.Space{}, 562 ccv2.Warnings{"warning-35", "warning-36"}, 563 nil, 564 ) 565 fakeCloudControllerClient.GetOrganizationReturnsOnCall(0, 566 ccv2.Organization{ 567 GUID: "org-guid-13", 568 Name: "org-13", 569 }, 570 ccv2.Warnings{"warning-13", "warning-14"}, 571 nil, 572 ) 573 fakeCloudControllerClient.GetOrganizationReturnsOnCall(1, 574 ccv2.Organization{ 575 GUID: "org-guid-12", 576 Name: "org-12", 577 }, 578 ccv2.Warnings{"warning-15", "warning-16"}, 579 nil, 580 ) 581 fakeCloudControllerClient.GetOrganizationReturnsOnCall(2, 582 ccv2.Organization{ 583 GUID: "<<org-guid-11", 584 Name: "org-11", 585 }, 586 ccv2.Warnings{"warning-17", "warning-18"}, 587 nil, 588 ) 589 fakeCloudControllerClient.GetOrganizationReturnsOnCall(3, 590 ccv2.Organization{ 591 GUID: "org-guid-21", 592 Name: "org-21", 593 }, 594 ccv2.Warnings{"warning-19", "warning-20"}, 595 nil, 596 ) 597 fakeCloudControllerClient.GetOrganizationReturnsOnCall(4, 598 ccv2.Organization{ 599 GUID: "org-guid-23", 600 Name: "org-23", 601 }, 602 ccv2.Warnings{"warning-21", "warning-22"}, 603 nil, 604 ) 605 fakeCloudControllerClient.GetOrganizationReturnsOnCall(5, 606 ccv2.Organization{ 607 GUID: "org-guid-33", 608 Name: "org-33", 609 }, 610 ccv2.Warnings{"warning-25", "warning-26"}, 611 nil, 612 ) 613 }) 614 615 When("security groups bound to spaces in the staging lifecycle are included", func() { 616 BeforeEach(func() { 617 includeStaging = true 618 }) 619 620 It("returns a slice of SecurityGroupWithOrganizationSpaceAndLifecycle and all warnings", func() { 621 Expect(err).NotTo(HaveOccurred()) 622 Expect(warnings).To(ConsistOf( 623 "warning-1", "warning-2", 624 "warning-3", "warning-4", 625 "warning-5", "warning-6", 626 "warning-7", "warning-8", 627 "warning-9", "warning-10", 628 "warning-11", "warning-12", 629 "warning-13", "warning-14", 630 "warning-15", "warning-16", 631 "warning-17", "warning-18", 632 "warning-19", "warning-20", 633 "warning-21", "warning-22", 634 "warning-25", "warning-26", 635 "warning-31", "warning-32", 636 "warning-33", "warning-34", 637 "warning-35", "warning-36", 638 )) 639 expected := []SecurityGroupWithOrganizationSpaceAndLifecycle{ 640 { 641 SecurityGroup: &expectedSecurityGroup1, 642 Organization: &expectedOrgAll, 643 Space: &expectedSpaceAll, 644 Lifecycle: constant.SecurityGroupLifecycleRunning, 645 }, 646 { 647 SecurityGroup: &expectedSecurityGroup1, 648 Organization: &expectedOrg11, 649 Space: &expectedSpace11, 650 Lifecycle: constant.SecurityGroupLifecycleRunning, 651 }, 652 { 653 SecurityGroup: &expectedSecurityGroup1, 654 Organization: &expectedOrg11, 655 Space: &expectedSpace11, 656 Lifecycle: constant.SecurityGroupLifecycleStaging, 657 }, 658 { 659 SecurityGroup: &expectedSecurityGroup1, 660 Organization: &expectedOrg12, 661 Space: &expectedSpace12, 662 Lifecycle: constant.SecurityGroupLifecycleRunning, 663 }, 664 { 665 SecurityGroup: &expectedSecurityGroup1, 666 Organization: &expectedOrg12, 667 Space: &expectedSpace12, 668 Lifecycle: constant.SecurityGroupLifecycleStaging, 669 }, 670 { 671 SecurityGroup: &expectedSecurityGroup1, 672 Organization: &expectedOrg13, 673 Space: &expectedSpace13, 674 Lifecycle: constant.SecurityGroupLifecycleRunning, 675 }, 676 { 677 SecurityGroup: &expectedSecurityGroup1, 678 Organization: &expectedOrg13, 679 Space: &expectedSpace13, 680 Lifecycle: constant.SecurityGroupLifecycleStaging, 681 }, 682 { 683 SecurityGroup: &expectedSecurityGroup2, 684 Organization: &expectedOrgAll, 685 Space: &expectedSpaceAll, 686 Lifecycle: constant.SecurityGroupLifecycleStaging, 687 }, 688 { 689 SecurityGroup: &expectedSecurityGroup2, 690 Organization: &expectedOrg11, 691 Space: &expectedSpace22, 692 Lifecycle: constant.SecurityGroupLifecycleRunning, 693 }, 694 { 695 SecurityGroup: &expectedSecurityGroup2, 696 Organization: &expectedOrg21, 697 Space: &expectedSpace21, 698 Lifecycle: constant.SecurityGroupLifecycleRunning, 699 }, 700 { 701 SecurityGroup: &expectedSecurityGroup2, 702 Organization: &expectedOrg23, 703 Space: &expectedSpace23, 704 Lifecycle: constant.SecurityGroupLifecycleRunning, 705 }, 706 { 707 SecurityGroup: &expectedSecurityGroup3, 708 Organization: &Organization{}, 709 Space: &Space{}, 710 }, 711 { 712 SecurityGroup: &expectedSecurityGroup4, 713 Organization: &expectedOrg11, 714 Space: &expectedSpace32, 715 Lifecycle: constant.SecurityGroupLifecycleRunning, 716 }, 717 { 718 SecurityGroup: &expectedSecurityGroup4, 719 Organization: &expectedOrg23, 720 Space: &expectedSpace31, 721 Lifecycle: constant.SecurityGroupLifecycleRunning, 722 }, 723 { 724 SecurityGroup: &expectedSecurityGroup4, 725 Organization: &expectedOrg33, 726 Space: &expectedSpace33, 727 Lifecycle: constant.SecurityGroupLifecycleRunning, 728 }, 729 { 730 SecurityGroup: &expectedSecurityGroup5, 731 Organization: &expectedOrgAll, 732 Space: &expectedSpaceAll, 733 Lifecycle: constant.SecurityGroupLifecycleRunning, 734 }, 735 { 736 SecurityGroup: &expectedSecurityGroup6, 737 Organization: &expectedOrgAll, 738 Space: &expectedSpaceAll, 739 Lifecycle: constant.SecurityGroupLifecycleStaging, 740 }, 741 { 742 SecurityGroup: &expectedSecurityGroup7, 743 Organization: &expectedOrgAll, 744 Space: &expectedSpaceAll, 745 Lifecycle: constant.SecurityGroupLifecycleRunning, 746 }, 747 { 748 SecurityGroup: &expectedSecurityGroup7, 749 Organization: &expectedOrgAll, 750 Space: &expectedSpaceAll, 751 Lifecycle: constant.SecurityGroupLifecycleStaging, 752 }, 753 } 754 Expect(secGroupOrgSpaces).To(Equal(expected)) 755 Expect(fakeCloudControllerClient.GetSecurityGroupsCallCount()).To(Equal(1)) 756 Expect(fakeCloudControllerClient.GetSecurityGroupsArgsForCall(0)).To(BeNil()) 757 758 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesCallCount()).To(Equal(7)) 759 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesArgsForCall(0)).To(Equal("security-group-guid-1")) 760 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesArgsForCall(1)).To(Equal("security-group-guid-2")) 761 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesArgsForCall(2)).To(Equal("security-group-guid-3")) 762 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesArgsForCall(3)).To(Equal("security-group-guid-4")) 763 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesArgsForCall(4)).To(Equal("security-group-guid-5")) 764 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesArgsForCall(5)).To(Equal("security-group-guid-6")) 765 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesArgsForCall(6)).To(Equal("security-group-guid-7")) 766 767 Expect(fakeCloudControllerClient.GetSecurityGroupStagingSpacesCallCount()).To(Equal(7)) 768 Expect(fakeCloudControllerClient.GetSecurityGroupStagingSpacesArgsForCall(0)).To(Equal("security-group-guid-1")) 769 Expect(fakeCloudControllerClient.GetSecurityGroupStagingSpacesArgsForCall(1)).To(Equal("security-group-guid-2")) 770 Expect(fakeCloudControllerClient.GetSecurityGroupStagingSpacesArgsForCall(2)).To(Equal("security-group-guid-3")) 771 Expect(fakeCloudControllerClient.GetSecurityGroupStagingSpacesArgsForCall(3)).To(Equal("security-group-guid-4")) 772 Expect(fakeCloudControllerClient.GetSecurityGroupStagingSpacesArgsForCall(4)).To(Equal("security-group-guid-5")) 773 Expect(fakeCloudControllerClient.GetSecurityGroupStagingSpacesArgsForCall(5)).To(Equal("security-group-guid-6")) 774 Expect(fakeCloudControllerClient.GetSecurityGroupStagingSpacesArgsForCall(6)).To(Equal("security-group-guid-7")) 775 776 Expect(fakeCloudControllerClient.GetOrganizationCallCount()).To(Equal(6)) 777 Expect(fakeCloudControllerClient.GetOrganizationArgsForCall(0)).To(Equal("org-guid-13")) 778 Expect(fakeCloudControllerClient.GetOrganizationArgsForCall(1)).To(Equal("org-guid-12")) 779 Expect(fakeCloudControllerClient.GetOrganizationArgsForCall(2)).To(Equal("<<org-guid-11")) 780 Expect(fakeCloudControllerClient.GetOrganizationArgsForCall(3)).To(Equal("org-guid-21")) 781 Expect(fakeCloudControllerClient.GetOrganizationArgsForCall(4)).To(Equal("org-guid-23")) 782 Expect(fakeCloudControllerClient.GetOrganizationArgsForCall(5)).To(Equal("org-guid-33")) 783 }) 784 }) 785 786 When("security groups bound to spaces in the staging lifecycle phase are not included", func() { 787 BeforeEach(func() { 788 includeStaging = false 789 }) 790 791 It("returns a slice of SecurityGroupWithOrganizationSpaceAndLifecycle, excluding any which are bound only in the staging lifecycle phase, and all warnings", func() { 792 Expect(err).NotTo(HaveOccurred()) 793 Expect(warnings).To(ConsistOf( 794 "warning-1", "warning-2", 795 "warning-3", "warning-4", 796 "warning-7", "warning-8", 797 "warning-9", "warning-10", 798 "warning-11", "warning-12", 799 "warning-13", "warning-14", 800 "warning-15", "warning-16", 801 "warning-17", "warning-18", 802 "warning-19", "warning-20", 803 "warning-21", "warning-22", 804 "warning-25", "warning-26", 805 "warning-31", "warning-32", 806 "warning-33", "warning-34", 807 "warning-35", "warning-36", 808 )) 809 810 expected := []SecurityGroupWithOrganizationSpaceAndLifecycle{ 811 { 812 SecurityGroup: &expectedSecurityGroup1, 813 Organization: &expectedOrgAll, 814 Space: &expectedSpaceAll, 815 Lifecycle: constant.SecurityGroupLifecycleRunning, 816 }, 817 { 818 SecurityGroup: &expectedSecurityGroup1, 819 Organization: &expectedOrg11, 820 Space: &expectedSpace11, 821 Lifecycle: constant.SecurityGroupLifecycleRunning, 822 }, 823 { 824 SecurityGroup: &expectedSecurityGroup1, 825 Organization: &expectedOrg12, 826 Space: &expectedSpace12, 827 Lifecycle: constant.SecurityGroupLifecycleRunning, 828 }, 829 { 830 SecurityGroup: &expectedSecurityGroup1, 831 Organization: &expectedOrg13, 832 Space: &expectedSpace13, 833 Lifecycle: constant.SecurityGroupLifecycleRunning, 834 }, 835 { 836 SecurityGroup: &expectedSecurityGroup2, 837 Organization: &expectedOrgAll, 838 Space: &expectedSpaceAll, 839 Lifecycle: constant.SecurityGroupLifecycleStaging, 840 }, 841 { 842 SecurityGroup: &expectedSecurityGroup2, 843 Organization: &expectedOrg11, 844 Space: &expectedSpace22, 845 Lifecycle: constant.SecurityGroupLifecycleRunning, 846 }, 847 { 848 SecurityGroup: &expectedSecurityGroup2, 849 Organization: &expectedOrg21, 850 Space: &expectedSpace21, 851 Lifecycle: constant.SecurityGroupLifecycleRunning, 852 }, 853 { 854 SecurityGroup: &expectedSecurityGroup2, 855 Organization: &expectedOrg23, 856 Space: &expectedSpace23, 857 Lifecycle: constant.SecurityGroupLifecycleRunning, 858 }, 859 { 860 SecurityGroup: &expectedSecurityGroup3, 861 Organization: &Organization{}, 862 Space: &Space{}, 863 }, 864 { 865 SecurityGroup: &expectedSecurityGroup4, 866 Organization: &expectedOrg11, 867 Space: &expectedSpace32, 868 Lifecycle: constant.SecurityGroupLifecycleRunning, 869 }, 870 { 871 SecurityGroup: &expectedSecurityGroup4, 872 Organization: &expectedOrg23, 873 Space: &expectedSpace31, 874 Lifecycle: constant.SecurityGroupLifecycleRunning, 875 }, 876 { 877 SecurityGroup: &expectedSecurityGroup4, 878 Organization: &expectedOrg33, 879 Space: &expectedSpace33, 880 Lifecycle: constant.SecurityGroupLifecycleRunning, 881 }, 882 { 883 SecurityGroup: &expectedSecurityGroup5, 884 Organization: &expectedOrgAll, 885 Space: &expectedSpaceAll, 886 Lifecycle: constant.SecurityGroupLifecycleRunning, 887 }, 888 { 889 SecurityGroup: &expectedSecurityGroup6, 890 Organization: &expectedOrgAll, 891 Space: &expectedSpaceAll, 892 Lifecycle: constant.SecurityGroupLifecycleStaging, 893 }, 894 { 895 SecurityGroup: &expectedSecurityGroup7, 896 Organization: &expectedOrgAll, 897 Space: &expectedSpaceAll, 898 Lifecycle: constant.SecurityGroupLifecycleRunning, 899 }, 900 { 901 SecurityGroup: &expectedSecurityGroup7, 902 Organization: &expectedOrgAll, 903 Space: &expectedSpaceAll, 904 Lifecycle: constant.SecurityGroupLifecycleStaging, 905 }, 906 } 907 Expect(secGroupOrgSpaces).To(Equal(expected)) 908 Expect(fakeCloudControllerClient.GetSecurityGroupsCallCount()).To(Equal(1)) 909 Expect(fakeCloudControllerClient.GetSecurityGroupsArgsForCall(0)).To(BeNil()) 910 911 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesCallCount()).To(Equal(7)) 912 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesArgsForCall(0)).To(Equal("security-group-guid-1")) 913 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesArgsForCall(1)).To(Equal("security-group-guid-2")) 914 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesArgsForCall(2)).To(Equal("security-group-guid-3")) 915 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesArgsForCall(3)).To(Equal("security-group-guid-4")) 916 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesArgsForCall(4)).To(Equal("security-group-guid-5")) 917 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesArgsForCall(5)).To(Equal("security-group-guid-6")) 918 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesArgsForCall(6)).To(Equal("security-group-guid-7")) 919 920 Expect(fakeCloudControllerClient.GetSecurityGroupStagingSpacesCallCount()).To(Equal(0)) 921 922 Expect(fakeCloudControllerClient.GetOrganizationCallCount()).To(Equal(6)) 923 Expect(fakeCloudControllerClient.GetOrganizationArgsForCall(0)).To(Equal("org-guid-13")) 924 Expect(fakeCloudControllerClient.GetOrganizationArgsForCall(1)).To(Equal("org-guid-12")) 925 Expect(fakeCloudControllerClient.GetOrganizationArgsForCall(2)).To(Equal("<<org-guid-11")) 926 Expect(fakeCloudControllerClient.GetOrganizationArgsForCall(3)).To(Equal("org-guid-21")) 927 Expect(fakeCloudControllerClient.GetOrganizationArgsForCall(4)).To(Equal("org-guid-23")) 928 Expect(fakeCloudControllerClient.GetOrganizationArgsForCall(5)).To(Equal("org-guid-33")) 929 }) 930 }) 931 }) 932 933 When("interleaved ResourceNotFoundErrors are encountered", func() { 934 var ( 935 expectedSecurityGroup1 SecurityGroup 936 expectedSecurityGroup2 SecurityGroup 937 expectedSecurityGroup3 SecurityGroup 938 939 expectedOrg13 Organization 940 941 expectedSpace11 Space 942 expectedSpace12 Space 943 ) 944 945 BeforeEach(func() { 946 includeStaging = true 947 948 expectedSecurityGroup1 = SecurityGroup{ 949 GUID: "security-group-guid-1", 950 Name: "security-group-1", 951 RunningDefault: true, 952 } 953 expectedSecurityGroup2 = SecurityGroup{ 954 GUID: "security-group-guid-2", 955 Name: "security-group-2", 956 StagingDefault: true, 957 } 958 expectedSecurityGroup3 = SecurityGroup{ 959 GUID: "security-group-guid-3", 960 Name: "security-group-3", 961 } 962 963 expectedOrg13 = Organization{ 964 GUID: "org-guid-13", 965 Name: "org-13", 966 } 967 968 expectedSpace11 = Space{ 969 GUID: "space-guid-11", 970 Name: "space-11", 971 } 972 expectedSpace12 = Space{ 973 GUID: "space-guid-12", 974 Name: "space-12", 975 } 976 977 fakeCloudControllerClient.GetSecurityGroupsReturns( 978 []ccv2.SecurityGroup{ 979 ccv2.SecurityGroup(expectedSecurityGroup1), 980 ccv2.SecurityGroup(expectedSecurityGroup2), 981 ccv2.SecurityGroup(expectedSecurityGroup3), 982 }, 983 ccv2.Warnings{"warning-1", "warning-2"}, 984 nil, 985 ) 986 987 fakeCloudControllerClient.GetSecurityGroupSpacesReturnsOnCall(0, 988 nil, 989 ccv2.Warnings{"warning-3", "warning-4"}, 990 ccerror.ResourceNotFoundError{Message: "running-error-1"}, 991 ) 992 993 fakeCloudControllerClient.GetSecurityGroupSpacesReturnsOnCall(1, 994 []ccv2.Space{ 995 { 996 GUID: "space-guid-13", 997 Name: "space-13", 998 OrganizationGUID: "org-guid-13", 999 }, 1000 { 1001 GUID: "space-guid-12", 1002 Name: "space-12", 1003 OrganizationGUID: "org-guid-12", 1004 }, 1005 { 1006 GUID: "space-guid-11", 1007 Name: "space-11", 1008 OrganizationGUID: "<<org-guid-11", 1009 }, 1010 }, 1011 ccv2.Warnings{"warning-5", "warning-6"}, 1012 nil, 1013 ) 1014 1015 fakeCloudControllerClient.GetSecurityGroupStagingSpacesReturnsOnCall(0, 1016 []ccv2.Space{}, 1017 ccv2.Warnings{"warning-7", "warning-8"}, 1018 ccerror.ResourceNotFoundError{Message: "staging-error-1"}, 1019 ) 1020 1021 fakeCloudControllerClient.GetSecurityGroupSpacesReturnsOnCall(2, 1022 []ccv2.Space{ 1023 { 1024 GUID: "space-guid-11", 1025 Name: "space-11", 1026 OrganizationGUID: "org-guid-13", 1027 }, 1028 }, 1029 ccv2.Warnings{"warning-9", "warning-10"}, 1030 nil, 1031 ) 1032 1033 fakeCloudControllerClient.GetSecurityGroupStagingSpacesReturnsOnCall(1, 1034 []ccv2.Space{ 1035 { 1036 GUID: "space-guid-12", 1037 Name: "space-12", 1038 OrganizationGUID: "org-guid-13", 1039 }, 1040 }, 1041 ccv2.Warnings{"warning-11", "warning-12"}, 1042 nil, 1043 ) 1044 1045 fakeCloudControllerClient.GetOrganizationReturnsOnCall(0, 1046 ccv2.Organization(expectedOrg13), 1047 ccv2.Warnings{"warning-13", "warning-14"}, 1048 nil, 1049 ) 1050 }) 1051 1052 It("returns a slice of SecurityGroupWithOrganizationSpaceAndLifecycle, which have not errored-out, and all warnings", func() { 1053 Expect(err).NotTo(HaveOccurred()) 1054 // Used BeEquivalentTo instead of ConsistOf to enforce order. 1055 Expect(warnings).To(BeEquivalentTo([]string{ 1056 "warning-1", "warning-2", 1057 "warning-3", "warning-4", 1058 "running-error-1", 1059 "warning-5", "warning-6", 1060 "warning-7", "warning-8", 1061 "staging-error-1", 1062 "warning-9", "warning-10", 1063 "warning-11", "warning-12", 1064 "warning-13", "warning-14", 1065 })) 1066 1067 expected := []SecurityGroupWithOrganizationSpaceAndLifecycle{ 1068 { 1069 SecurityGroup: &expectedSecurityGroup3, 1070 Organization: &expectedOrg13, 1071 Space: &expectedSpace11, 1072 Lifecycle: constant.SecurityGroupLifecycleRunning, 1073 }, 1074 { 1075 SecurityGroup: &expectedSecurityGroup3, 1076 Organization: &expectedOrg13, 1077 Space: &expectedSpace12, 1078 Lifecycle: constant.SecurityGroupLifecycleStaging, 1079 }, 1080 } 1081 Expect(secGroupOrgSpaces).To(Equal(expected)) 1082 Expect(fakeCloudControllerClient.GetSecurityGroupsCallCount()).To(Equal(1)) 1083 Expect(fakeCloudControllerClient.GetSecurityGroupsArgsForCall(0)).To(BeNil()) 1084 1085 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesCallCount()).To(Equal(3)) 1086 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesArgsForCall(0)).To(Equal("security-group-guid-1")) 1087 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesArgsForCall(1)).To(Equal("security-group-guid-2")) 1088 Expect(fakeCloudControllerClient.GetSecurityGroupSpacesArgsForCall(2)).To(Equal("security-group-guid-3")) 1089 1090 Expect(fakeCloudControllerClient.GetSecurityGroupStagingSpacesCallCount()).To(Equal(2)) 1091 Expect(fakeCloudControllerClient.GetSecurityGroupStagingSpacesArgsForCall(0)).To(Equal("security-group-guid-2")) 1092 Expect(fakeCloudControllerClient.GetSecurityGroupStagingSpacesArgsForCall(1)).To(Equal("security-group-guid-3")) 1093 1094 Expect(fakeCloudControllerClient.GetOrganizationCallCount()).To(Equal(1)) 1095 Expect(fakeCloudControllerClient.GetOrganizationArgsForCall(0)).To(Equal("org-guid-13")) 1096 }) 1097 }) 1098 }) 1099 1100 Describe("GetSecurityGroupByName", func() { 1101 var ( 1102 securityGroup SecurityGroup 1103 warnings Warnings 1104 err error 1105 ) 1106 1107 JustBeforeEach(func() { 1108 securityGroup, warnings, err = actor.GetSecurityGroupByName("some-security-group") 1109 }) 1110 1111 When("the security group exists", func() { 1112 BeforeEach(func() { 1113 fakeCloudControllerClient.GetSecurityGroupsReturns( 1114 []ccv2.SecurityGroup{ 1115 { 1116 GUID: "some-security-group-guid", 1117 Name: "some-security-group", 1118 }, 1119 }, 1120 ccv2.Warnings{"warning-1", "warning-2"}, 1121 nil, 1122 ) 1123 }) 1124 1125 It("returns the security group and all warnings", func() { 1126 Expect(err).ToNot(HaveOccurred()) 1127 Expect(securityGroup.GUID).To(Equal("some-security-group-guid")) 1128 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 1129 1130 Expect(fakeCloudControllerClient.GetSecurityGroupsCallCount()).To(Equal(1)) 1131 filters := fakeCloudControllerClient.GetSecurityGroupsArgsForCall(0) 1132 Expect(filters).To(Equal( 1133 []ccv2.Filter{{ 1134 Type: constant.NameFilter, 1135 Operator: constant.EqualOperator, 1136 Values: []string{"some-security-group"}, 1137 }})) 1138 }) 1139 }) 1140 1141 When("the security group does not exist", func() { 1142 BeforeEach(func() { 1143 fakeCloudControllerClient.GetSecurityGroupsReturns( 1144 []ccv2.SecurityGroup{}, 1145 ccv2.Warnings{"warning-1", "warning-2"}, 1146 nil, 1147 ) 1148 }) 1149 1150 It("returns a SecurityGroupNotFound error", func() { 1151 Expect(err).To(MatchError(actionerror.SecurityGroupNotFoundError{Name: "some-security-group"})) 1152 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 1153 }) 1154 }) 1155 1156 Context("an error occurs", func() { 1157 var returnedError error 1158 1159 BeforeEach(func() { 1160 returnedError = errors.New("get-security-groups-error") 1161 fakeCloudControllerClient.GetSecurityGroupsReturns( 1162 []ccv2.SecurityGroup{}, 1163 ccv2.Warnings{"warning-1", "warning-2"}, 1164 returnedError, 1165 ) 1166 }) 1167 1168 It("returns the error and all warnings", func() { 1169 Expect(err).To(MatchError(returnedError)) 1170 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 1171 }) 1172 }) 1173 }) 1174 1175 Describe("BindSecurityGroupToSpace", func() { 1176 var ( 1177 lifecycle constant.SecurityGroupLifecycle 1178 err error 1179 warnings []string 1180 ) 1181 1182 JustBeforeEach(func() { 1183 warnings, err = actor.BindSecurityGroupToSpace("some-security-group-guid", "some-space-guid", lifecycle) 1184 }) 1185 1186 When("the lifecycle is neither running nor staging", func() { 1187 BeforeEach(func() { 1188 lifecycle = "bill & ted" 1189 }) 1190 1191 It("returns and appropriate error", func() { 1192 Expect(err).To(MatchError(fmt.Sprintf("Invalid lifecycle: %s", lifecycle))) 1193 }) 1194 }) 1195 1196 When("the lifecycle is running", func() { 1197 BeforeEach(func() { 1198 lifecycle = constant.SecurityGroupLifecycleRunning 1199 }) 1200 1201 When("binding the space does not return an error", func() { 1202 BeforeEach(func() { 1203 fakeCloudControllerClient.UpdateSecurityGroupSpaceReturns( 1204 ccv2.Warnings{"warning-1", "warning-2"}, 1205 nil, 1206 ) 1207 }) 1208 1209 It("returns warnings and no error", func() { 1210 Expect(err).ToNot(HaveOccurred()) 1211 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 1212 Expect(fakeCloudControllerClient.UpdateSecurityGroupSpaceCallCount()).To(Equal(1)) 1213 securityGroupGUID, spaceGUID := fakeCloudControllerClient.UpdateSecurityGroupSpaceArgsForCall(0) 1214 Expect(securityGroupGUID).To(Equal("some-security-group-guid")) 1215 Expect(spaceGUID).To(Equal("some-space-guid")) 1216 }) 1217 }) 1218 1219 When("binding the space returns an error", func() { 1220 var returnedError error 1221 BeforeEach(func() { 1222 returnedError = errors.New("associate-space-error") 1223 fakeCloudControllerClient.UpdateSecurityGroupSpaceReturns( 1224 ccv2.Warnings{"warning-1", "warning-2"}, 1225 returnedError, 1226 ) 1227 }) 1228 1229 It("returns the error and warnings", func() { 1230 Expect(err).To(Equal(returnedError)) 1231 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 1232 }) 1233 }) 1234 }) 1235 1236 When("the lifecycle is staging", func() { 1237 BeforeEach(func() { 1238 lifecycle = constant.SecurityGroupLifecycleStaging 1239 }) 1240 1241 When("binding the space does not return an error", func() { 1242 BeforeEach(func() { 1243 fakeCloudControllerClient.UpdateSecurityGroupStagingSpaceReturns( 1244 ccv2.Warnings{"warning-1", "warning-2"}, 1245 nil, 1246 ) 1247 }) 1248 1249 It("returns warnings and no error", func() { 1250 Expect(err).ToNot(HaveOccurred()) 1251 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 1252 Expect(fakeCloudControllerClient.UpdateSecurityGroupStagingSpaceCallCount()).To(Equal(1)) 1253 securityGroupGUID, spaceGUID := fakeCloudControllerClient.UpdateSecurityGroupStagingSpaceArgsForCall(0) 1254 Expect(securityGroupGUID).To(Equal("some-security-group-guid")) 1255 Expect(spaceGUID).To(Equal("some-space-guid")) 1256 }) 1257 }) 1258 1259 When("binding the space returns an error", func() { 1260 var returnedError error 1261 BeforeEach(func() { 1262 returnedError = errors.New("associate-space-error") 1263 fakeCloudControllerClient.UpdateSecurityGroupStagingSpaceReturns( 1264 ccv2.Warnings{"warning-1", "warning-2"}, 1265 returnedError, 1266 ) 1267 }) 1268 1269 It("returns the error and warnings", func() { 1270 Expect(err).To(Equal(returnedError)) 1271 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 1272 }) 1273 }) 1274 }) 1275 }) 1276 1277 Describe("GetSpaceRunningSecurityGroupsBySpace", func() { 1278 When("the space exists and there are no errors", func() { 1279 BeforeEach(func() { 1280 fakeCloudControllerClient.GetSpaceSecurityGroupsReturns( 1281 []ccv2.SecurityGroup{ 1282 { 1283 Name: "some-shared-security-group", 1284 }, 1285 { 1286 Name: "some-running-security-group", 1287 }, 1288 }, 1289 ccv2.Warnings{"warning-1", "warning-2"}, 1290 nil, 1291 ) 1292 }) 1293 1294 It("returns the security groups and warnings", func() { 1295 securityGroups, warnings, err := actor.GetSpaceRunningSecurityGroupsBySpace("space-guid") 1296 Expect(err).NotTo(HaveOccurred()) 1297 Expect(warnings).To(ConsistOf([]string{"warning-1", "warning-2"})) 1298 Expect(securityGroups).To(Equal( 1299 []SecurityGroup{ 1300 { 1301 Name: "some-shared-security-group", 1302 }, 1303 { 1304 Name: "some-running-security-group", 1305 }, 1306 })) 1307 1308 Expect(fakeCloudControllerClient.GetSpaceSecurityGroupsCallCount()).To(Equal(1)) 1309 spaceGUID, queries := fakeCloudControllerClient.GetSpaceSecurityGroupsArgsForCall(0) 1310 Expect(spaceGUID).To(Equal("space-guid")) 1311 Expect(queries).To(BeNil()) 1312 }) 1313 }) 1314 1315 When("the space does not exist", func() { 1316 BeforeEach(func() { 1317 fakeCloudControllerClient.GetSpaceSecurityGroupsReturns( 1318 nil, 1319 nil, 1320 ccerror.ResourceNotFoundError{}) 1321 }) 1322 1323 It("returns an SpaceNotFoundError", func() { 1324 _, _, err := actor.GetSpaceRunningSecurityGroupsBySpace("space-guid") 1325 Expect(err).To(MatchError(actionerror.SpaceNotFoundError{GUID: "space-guid"})) 1326 }) 1327 }) 1328 1329 When("there is an error", func() { 1330 var expectedErr error 1331 1332 BeforeEach(func() { 1333 expectedErr = errors.New("banana") 1334 fakeCloudControllerClient.GetSpaceSecurityGroupsReturns( 1335 nil, 1336 ccv2.Warnings{"warning-1", "warning-2"}, 1337 expectedErr) 1338 }) 1339 1340 It("returns the error and warnings", func() { 1341 _, warnings, err := actor.GetSpaceRunningSecurityGroupsBySpace("space-guid") 1342 Expect(warnings).To(ConsistOf([]string{"warning-1", "warning-2"})) 1343 Expect(err).To(MatchError(expectedErr)) 1344 }) 1345 }) 1346 }) 1347 1348 Describe("GetSpaceStagingSecurityGroupsBySpace", func() { 1349 When("the space exists and there are no errors", func() { 1350 BeforeEach(func() { 1351 fakeCloudControllerClient.GetSpaceStagingSecurityGroupsReturns( 1352 []ccv2.SecurityGroup{ 1353 { 1354 Name: "some-shared-security-group", 1355 }, 1356 { 1357 Name: "some-staging-security-group", 1358 }, 1359 }, 1360 ccv2.Warnings{"warning-1", "warning-2"}, 1361 nil, 1362 ) 1363 }) 1364 1365 It("returns the security groups and warnings", func() { 1366 securityGroups, warnings, err := actor.GetSpaceStagingSecurityGroupsBySpace("space-guid") 1367 Expect(err).NotTo(HaveOccurred()) 1368 Expect(warnings).To(ConsistOf([]string{"warning-1", "warning-2"})) 1369 Expect(securityGroups).To(Equal( 1370 []SecurityGroup{ 1371 { 1372 Name: "some-shared-security-group", 1373 }, 1374 { 1375 Name: "some-staging-security-group", 1376 }, 1377 })) 1378 1379 Expect(fakeCloudControllerClient.GetSpaceStagingSecurityGroupsCallCount()).To(Equal(1)) 1380 spaceGUID, queries := fakeCloudControllerClient.GetSpaceStagingSecurityGroupsArgsForCall(0) 1381 Expect(spaceGUID).To(Equal("space-guid")) 1382 Expect(queries).To(BeNil()) 1383 }) 1384 }) 1385 1386 When("the space does not exist", func() { 1387 BeforeEach(func() { 1388 fakeCloudControllerClient.GetSpaceStagingSecurityGroupsReturns( 1389 nil, 1390 nil, 1391 ccerror.ResourceNotFoundError{}) 1392 }) 1393 1394 It("returns an SpaceNotFoundError", func() { 1395 _, _, err := actor.GetSpaceStagingSecurityGroupsBySpace("space-guid") 1396 Expect(err).To(MatchError(actionerror.SpaceNotFoundError{GUID: "space-guid"})) 1397 }) 1398 }) 1399 1400 When("there is an error", func() { 1401 var expectedErr error 1402 1403 BeforeEach(func() { 1404 expectedErr = errors.New("banana") 1405 fakeCloudControllerClient.GetSpaceStagingSecurityGroupsReturns( 1406 nil, 1407 ccv2.Warnings{"warning-1", "warning-2"}, 1408 expectedErr) 1409 }) 1410 1411 It("returns the error and warnings", func() { 1412 _, warnings, err := actor.GetSpaceStagingSecurityGroupsBySpace("space-guid") 1413 Expect(warnings).To(ConsistOf([]string{"warning-1", "warning-2"})) 1414 Expect(err).To(MatchError(expectedErr)) 1415 }) 1416 }) 1417 }) 1418 1419 Describe("UnbindSecurityGroupByNameAndSpace", func() { 1420 var ( 1421 lifecycle constant.SecurityGroupLifecycle 1422 warnings Warnings 1423 err error 1424 ) 1425 1426 JustBeforeEach(func() { 1427 warnings, err = actor.UnbindSecurityGroupByNameAndSpace("some-security-group", "some-space-guid", lifecycle) 1428 }) 1429 1430 When("the requested lifecycle is neither running nor staging", func() { 1431 BeforeEach(func() { 1432 lifecycle = "bill & ted" 1433 }) 1434 1435 It("returns and appropriate error", func() { 1436 Expect(err).To(MatchError(fmt.Sprintf("Invalid lifecycle: %s", lifecycle))) 1437 }) 1438 }) 1439 1440 When("the security group is not found", func() { 1441 BeforeEach(func() { 1442 lifecycle = constant.SecurityGroupLifecycleStaging 1443 1444 fakeCloudControllerClient.GetSecurityGroupsReturns( 1445 []ccv2.SecurityGroup{}, 1446 ccv2.Warnings{"security-group-warning"}, 1447 nil) 1448 }) 1449 1450 It("returns the error and all warnings", func() { 1451 Expect(warnings).To(ConsistOf([]string{"security-group-warning"})) 1452 Expect(err).To(MatchError(actionerror.SecurityGroupNotFoundError{Name: "some-security-group"})) 1453 }) 1454 }) 1455 1456 When("an error is encountered fetching security groups", func() { 1457 var returnedError error 1458 1459 BeforeEach(func() { 1460 lifecycle = constant.SecurityGroupLifecycleRunning 1461 1462 returnedError = errors.New("get-security-groups-error") 1463 fakeCloudControllerClient.GetSecurityGroupsReturns( 1464 []ccv2.SecurityGroup{}, 1465 ccv2.Warnings{"warning-1", "warning-2"}, 1466 returnedError) 1467 }) 1468 1469 It("returns all warnings", func() { 1470 Expect(err).To(MatchError(returnedError)) 1471 Expect(warnings).To(ConsistOf(Warnings{"warning-1", "warning-2"})) 1472 }) 1473 }) 1474 1475 When("the requested lifecycle is running", func() { 1476 BeforeEach(func() { 1477 lifecycle = constant.SecurityGroupLifecycleRunning 1478 1479 fakeCloudControllerClient.GetSecurityGroupsReturns( 1480 []ccv2.SecurityGroup{{ 1481 Name: "some-security-group", 1482 GUID: "some-security-group-guid", 1483 }}, 1484 ccv2.Warnings{"warning-1", "warning-2"}, 1485 nil) 1486 }) 1487 1488 When("the security group is bound to running", func() { 1489 BeforeEach(func() { 1490 fakeCloudControllerClient.GetSpaceSecurityGroupsReturns( 1491 []ccv2.SecurityGroup{ 1492 { 1493 Name: "some-security-group", 1494 GUID: "some-security-group-guid", 1495 }, 1496 }, 1497 ccv2.Warnings{"warning-3", "warning-4"}, 1498 nil, 1499 ) 1500 }) 1501 1502 When("an error is encountered checking whether the security group is bound to the space in the running phase", func() { 1503 var returnedError error 1504 1505 BeforeEach(func() { 1506 returnedError = errors.New("get-security-groups-error") 1507 fakeCloudControllerClient.GetSpaceSecurityGroupsReturns( 1508 []ccv2.SecurityGroup{ 1509 { 1510 Name: "some-security-group", 1511 GUID: "some-security-group-guid", 1512 }, 1513 }, 1514 ccv2.Warnings{"warning-3", "warning-4"}, 1515 returnedError, 1516 ) 1517 }) 1518 1519 It("returns all warnings", func() { 1520 Expect(err).To(MatchError(returnedError)) 1521 Expect(warnings).To(ConsistOf(Warnings{"warning-1", "warning-2", "warning-3", "warning-4"})) 1522 }) 1523 }) 1524 1525 When("an error is encountered unbinding the security group from the space", func() { 1526 var returnedError error 1527 1528 BeforeEach(func() { 1529 returnedError = errors.New("associate-space-error") 1530 fakeCloudControllerClient.DeleteSecurityGroupSpaceReturns( 1531 ccv2.Warnings{"warning-5", "warning-6"}, 1532 returnedError) 1533 }) 1534 1535 It("returns the error and all warnings", func() { 1536 Expect(warnings).To(ConsistOf([]string{ 1537 "warning-1", 1538 "warning-2", 1539 "warning-3", 1540 "warning-4", 1541 "warning-5", 1542 "warning-6", 1543 })) 1544 Expect(err).To(MatchError(returnedError)) 1545 }) 1546 }) 1547 1548 When("no errors are encountered", func() { 1549 BeforeEach(func() { 1550 fakeCloudControllerClient.DeleteSecurityGroupSpaceReturns( 1551 ccv2.Warnings{"warning-5", "warning-6"}, 1552 nil) 1553 }) 1554 1555 It("returns all warnings", func() { 1556 Expect(warnings).To(ConsistOf([]string{ 1557 "warning-1", 1558 "warning-2", 1559 "warning-3", 1560 "warning-4", 1561 "warning-5", 1562 "warning-6", 1563 })) 1564 Expect(err).ToNot(HaveOccurred()) 1565 1566 Expect(fakeCloudControllerClient.GetSecurityGroupsCallCount()).To(Equal(1)) 1567 Expect(fakeCloudControllerClient.GetSecurityGroupsArgsForCall(0)).To(Equal([]ccv2.Filter{{ 1568 Type: constant.NameFilter, 1569 Operator: constant.EqualOperator, 1570 Values: []string{"some-security-group"}, 1571 }})) 1572 1573 Expect(fakeCloudControllerClient.GetSpaceSecurityGroupsCallCount()).To(Equal(1)) 1574 spaceGUID, queries := fakeCloudControllerClient.GetSpaceSecurityGroupsArgsForCall(0) 1575 Expect(spaceGUID).To(Equal("some-space-guid")) 1576 Expect(queries).To(Equal([]ccv2.Filter{{ 1577 Type: constant.NameFilter, 1578 Operator: constant.EqualOperator, 1579 Values: []string{"some-security-group"}, 1580 }})) 1581 1582 Expect(fakeCloudControllerClient.GetSpaceStagingSecurityGroupsCallCount()).To(Equal(0)) 1583 1584 Expect(fakeCloudControllerClient.DeleteSecurityGroupSpaceCallCount()).To(Equal(1)) 1585 securityGroupGUID, spaceGUID := fakeCloudControllerClient.DeleteSecurityGroupSpaceArgsForCall(0) 1586 Expect(securityGroupGUID).To(Equal("some-security-group-guid")) 1587 Expect(spaceGUID).To(Equal("some-space-guid")) 1588 1589 Expect(fakeCloudControllerClient.DeleteSecurityGroupStagingSpaceCallCount()).To(Equal(0)) 1590 }) 1591 }) 1592 }) 1593 1594 When("the security group is bound to neither running nor staging", func() { 1595 BeforeEach(func() { 1596 fakeCloudControllerClient.GetSpaceSecurityGroupsReturns( 1597 []ccv2.SecurityGroup{}, 1598 ccv2.Warnings{"warning-3", "warning-4"}, 1599 nil, 1600 ) 1601 fakeCloudControllerClient.GetSpaceStagingSecurityGroupsReturns( 1602 []ccv2.SecurityGroup{}, 1603 ccv2.Warnings{"warning-5", "warning-6"}, 1604 nil, 1605 ) 1606 }) 1607 1608 When("no errors are encountered", func() { 1609 It("returns all warnings", func() { 1610 Expect(warnings).To(ConsistOf([]string{ 1611 "warning-1", 1612 "warning-2", 1613 "warning-3", 1614 "warning-4", 1615 "warning-5", 1616 "warning-6", 1617 })) 1618 Expect(err).ToNot(HaveOccurred()) 1619 1620 Expect(fakeCloudControllerClient.GetSpaceSecurityGroupsCallCount()).To(Equal(1)) 1621 spaceGUIDRunning, queriesRunning := fakeCloudControllerClient.GetSpaceSecurityGroupsArgsForCall(0) 1622 Expect(spaceGUIDRunning).To(Equal("some-space-guid")) 1623 Expect(queriesRunning).To(Equal([]ccv2.Filter{{ 1624 Type: constant.NameFilter, 1625 Operator: constant.EqualOperator, 1626 Values: []string{"some-security-group"}, 1627 }})) 1628 1629 Expect(fakeCloudControllerClient.GetSpaceStagingSecurityGroupsCallCount()).To(Equal(1)) 1630 spaceGUIDStaging, queriesStaging := fakeCloudControllerClient.GetSpaceStagingSecurityGroupsArgsForCall(0) 1631 Expect(spaceGUIDStaging).To(Equal("some-space-guid")) 1632 Expect(queriesStaging).To(Equal([]ccv2.Filter{{ 1633 Type: constant.NameFilter, 1634 Operator: constant.EqualOperator, 1635 Values: []string{"some-security-group"}, 1636 }})) 1637 1638 Expect(fakeCloudControllerClient.DeleteSecurityGroupSpaceCallCount()).To(Equal(0)) 1639 Expect(fakeCloudControllerClient.DeleteSecurityGroupStagingSpaceCallCount()).To(Equal(0)) 1640 }) 1641 }) 1642 }) 1643 1644 When("the security group is bound to staging", func() { 1645 BeforeEach(func() { 1646 fakeCloudControllerClient.GetSpaceSecurityGroupsReturns( 1647 []ccv2.SecurityGroup{}, 1648 ccv2.Warnings{"warning-3", "warning-4"}, 1649 nil, 1650 ) 1651 fakeCloudControllerClient.GetSpaceStagingSecurityGroupsReturns( 1652 []ccv2.SecurityGroup{ 1653 { 1654 Name: "some-security-group", 1655 GUID: "some-security-group-guid", 1656 }, 1657 }, 1658 ccv2.Warnings{"warning-5", "warning-6"}, 1659 nil, 1660 ) 1661 }) 1662 1663 It("returns all warnings and a SecurityGroupNotBoundError", func() { 1664 Expect(warnings).To(ConsistOf([]string{ 1665 "warning-1", 1666 "warning-2", 1667 "warning-3", 1668 "warning-4", 1669 "warning-5", 1670 "warning-6", 1671 })) 1672 Expect(err).To(MatchError(actionerror.SecurityGroupNotBoundError{ 1673 Name: "some-security-group", 1674 Lifecycle: lifecycle, 1675 })) 1676 1677 Expect(fakeCloudControllerClient.GetSpaceSecurityGroupsCallCount()).To(Equal(1)) 1678 spaceGUIDRunning, queriesRunning := fakeCloudControllerClient.GetSpaceSecurityGroupsArgsForCall(0) 1679 Expect(spaceGUIDRunning).To(Equal("some-space-guid")) 1680 Expect(queriesRunning).To(Equal([]ccv2.Filter{{ 1681 Type: constant.NameFilter, 1682 Operator: constant.EqualOperator, 1683 Values: []string{"some-security-group"}, 1684 }})) 1685 1686 Expect(fakeCloudControllerClient.GetSpaceStagingSecurityGroupsCallCount()).To(Equal(1)) 1687 spaceGUIDStaging, queriesStaging := fakeCloudControllerClient.GetSpaceStagingSecurityGroupsArgsForCall(0) 1688 Expect(spaceGUIDStaging).To(Equal("some-space-guid")) 1689 Expect(queriesStaging).To(Equal([]ccv2.Filter{{ 1690 Type: constant.NameFilter, 1691 Operator: constant.EqualOperator, 1692 Values: []string{"some-security-group"}, 1693 }})) 1694 1695 Expect(fakeCloudControllerClient.DeleteSecurityGroupSpaceCallCount()).To(Equal(0)) 1696 Expect(fakeCloudControllerClient.DeleteSecurityGroupStagingSpaceCallCount()).To(Equal(0)) 1697 }) 1698 }) 1699 }) 1700 1701 When("the requested lifecycle is staging", func() { 1702 BeforeEach(func() { 1703 lifecycle = constant.SecurityGroupLifecycleStaging 1704 1705 fakeCloudControllerClient.GetSecurityGroupsReturns( 1706 []ccv2.SecurityGroup{{ 1707 Name: "some-security-group", 1708 GUID: "some-security-group-guid", 1709 }}, 1710 ccv2.Warnings{"warning-1", "warning-2"}, 1711 nil) 1712 }) 1713 1714 When("an error is encountered checking whether the security group is bound to the space in the staging phase", func() { 1715 var returnedError error 1716 1717 BeforeEach(func() { 1718 returnedError = errors.New("get-space-staging-security-groups-error") 1719 fakeCloudControllerClient.GetSpaceStagingSecurityGroupsReturns( 1720 []ccv2.SecurityGroup{}, 1721 ccv2.Warnings{"warning-3", "warning-4"}, 1722 returnedError, 1723 ) 1724 }) 1725 1726 It("returns all warnings", func() { 1727 Expect(err).To(MatchError(returnedError)) 1728 Expect(warnings).To(ConsistOf(Warnings{"warning-1", "warning-2", "warning-3", "warning-4"})) 1729 }) 1730 }) 1731 1732 When("the security group is bound to staging", func() { 1733 BeforeEach(func() { 1734 fakeCloudControllerClient.GetSpaceStagingSecurityGroupsReturns( 1735 []ccv2.SecurityGroup{ 1736 { 1737 Name: "some-security-group", 1738 GUID: "some-security-group-guid", 1739 }, 1740 }, 1741 ccv2.Warnings{"warning-3", "warning-4"}, 1742 nil, 1743 ) 1744 }) 1745 1746 When("an error is encountered unbinding the security group the space", func() { 1747 var returnedError error 1748 1749 BeforeEach(func() { 1750 returnedError = errors.New("associate-space-error") 1751 fakeCloudControllerClient.DeleteSecurityGroupStagingSpaceReturns( 1752 ccv2.Warnings{"warning-5", "warning-6"}, 1753 returnedError) 1754 }) 1755 1756 It("returns the error and all warnings", func() { 1757 Expect(err).To(MatchError(returnedError)) 1758 Expect(warnings).To(ConsistOf([]string{ 1759 "warning-1", 1760 "warning-2", 1761 "warning-3", 1762 "warning-4", 1763 "warning-5", 1764 "warning-6", 1765 })) 1766 }) 1767 }) 1768 1769 When("no errors are encountered", func() { 1770 BeforeEach(func() { 1771 fakeCloudControllerClient.DeleteSecurityGroupStagingSpaceReturns( 1772 ccv2.Warnings{"warning-5", "warning-6"}, 1773 nil) 1774 }) 1775 1776 It("unbinds and returns all warnings", func() { 1777 Expect(err).ToNot(HaveOccurred()) 1778 Expect(warnings).To(ConsistOf([]string{ 1779 "warning-1", 1780 "warning-2", 1781 "warning-3", 1782 "warning-4", 1783 "warning-5", 1784 "warning-6", 1785 })) 1786 1787 Expect(fakeCloudControllerClient.GetSecurityGroupsCallCount()).To(Equal(1)) 1788 Expect(fakeCloudControllerClient.GetSecurityGroupsArgsForCall(0)).To(Equal([]ccv2.Filter{{ 1789 Type: constant.NameFilter, 1790 Operator: constant.EqualOperator, 1791 Values: []string{"some-security-group"}, 1792 }})) 1793 1794 Expect(fakeCloudControllerClient.GetSpaceStagingSecurityGroupsCallCount()).To(Equal(1)) 1795 spaceGUID, queries := fakeCloudControllerClient.GetSpaceStagingSecurityGroupsArgsForCall(0) 1796 Expect(spaceGUID).To(Equal("some-space-guid")) 1797 Expect(queries).To(Equal([]ccv2.Filter{{ 1798 Type: constant.NameFilter, 1799 Operator: constant.EqualOperator, 1800 Values: []string{"some-security-group"}, 1801 }})) 1802 1803 Expect(fakeCloudControllerClient.GetSpaceSecurityGroupsCallCount()).To(Equal(0)) 1804 1805 Expect(fakeCloudControllerClient.DeleteSecurityGroupStagingSpaceCallCount()).To(Equal(1)) 1806 securityGroupGUID, spaceGUID := fakeCloudControllerClient.DeleteSecurityGroupStagingSpaceArgsForCall(0) 1807 Expect(securityGroupGUID).To(Equal("some-security-group-guid")) 1808 Expect(spaceGUID).To(Equal("some-space-guid")) 1809 1810 Expect(fakeCloudControllerClient.DeleteSecurityGroupSpaceCallCount()).To(Equal(0)) 1811 }) 1812 }) 1813 }) 1814 1815 When("the security group is bound to neither running nor staging", func() { 1816 BeforeEach(func() { 1817 fakeCloudControllerClient.GetSpaceStagingSecurityGroupsReturns( 1818 []ccv2.SecurityGroup{}, 1819 ccv2.Warnings{"warning-3", "warning-4"}, 1820 nil, 1821 ) 1822 fakeCloudControllerClient.GetSpaceSecurityGroupsReturns( 1823 []ccv2.SecurityGroup{}, 1824 ccv2.Warnings{"warning-5", "warning-6"}, 1825 nil, 1826 ) 1827 }) 1828 1829 When("no errors are encountered", func() { 1830 It("returns all warnings", func() { 1831 Expect(err).ToNot(HaveOccurred()) 1832 Expect(warnings).To(ConsistOf([]string{ 1833 "warning-1", 1834 "warning-2", 1835 "warning-3", 1836 "warning-4", 1837 "warning-5", 1838 "warning-6", 1839 })) 1840 1841 Expect(fakeCloudControllerClient.GetSpaceStagingSecurityGroupsCallCount()).To(Equal(1)) 1842 spaceGUIDStaging, queriesStaging := fakeCloudControllerClient.GetSpaceStagingSecurityGroupsArgsForCall(0) 1843 Expect(spaceGUIDStaging).To(Equal("some-space-guid")) 1844 Expect(queriesStaging).To(Equal([]ccv2.Filter{{ 1845 Type: constant.NameFilter, 1846 Operator: constant.EqualOperator, 1847 Values: []string{"some-security-group"}, 1848 }})) 1849 1850 Expect(fakeCloudControllerClient.GetSpaceSecurityGroupsCallCount()).To(Equal(1)) 1851 spaceGUIDRunning, queriesRunning := fakeCloudControllerClient.GetSpaceSecurityGroupsArgsForCall(0) 1852 Expect(spaceGUIDRunning).To(Equal("some-space-guid")) 1853 Expect(queriesRunning).To(Equal([]ccv2.Filter{{ 1854 Type: constant.NameFilter, 1855 Operator: constant.EqualOperator, 1856 Values: []string{"some-security-group"}, 1857 }})) 1858 1859 Expect(fakeCloudControllerClient.DeleteSecurityGroupStagingSpaceCallCount()).To(Equal(0)) 1860 Expect(fakeCloudControllerClient.DeleteSecurityGroupSpaceCallCount()).To(Equal(0)) 1861 }) 1862 }) 1863 }) 1864 1865 When("the security group is bound to running", func() { 1866 BeforeEach(func() { 1867 fakeCloudControllerClient.GetSpaceStagingSecurityGroupsReturns( 1868 []ccv2.SecurityGroup{}, 1869 ccv2.Warnings{"warning-3", "warning-4"}, 1870 nil, 1871 ) 1872 fakeCloudControllerClient.GetSpaceSecurityGroupsReturns( 1873 []ccv2.SecurityGroup{ 1874 { 1875 Name: "some-security-group", 1876 GUID: "some-security-group-guid", 1877 }, 1878 }, 1879 ccv2.Warnings{"warning-5", "warning-6"}, 1880 nil, 1881 ) 1882 }) 1883 1884 It("returns all warnings and a SecurityGroupNotBoundError", func() { 1885 Expect(warnings).To(ConsistOf([]string{ 1886 "warning-1", 1887 "warning-2", 1888 "warning-3", 1889 "warning-4", 1890 "warning-5", 1891 "warning-6", 1892 })) 1893 1894 Expect(err).To(MatchError(actionerror.SecurityGroupNotBoundError{ 1895 Name: "some-security-group", 1896 Lifecycle: lifecycle, 1897 })) 1898 1899 Expect(fakeCloudControllerClient.GetSpaceStagingSecurityGroupsCallCount()).To(Equal(1)) 1900 spaceGUIDStaging, queriesStaging := fakeCloudControllerClient.GetSpaceStagingSecurityGroupsArgsForCall(0) 1901 Expect(spaceGUIDStaging).To(Equal("some-space-guid")) 1902 Expect(queriesStaging).To(Equal([]ccv2.Filter{{ 1903 Type: constant.NameFilter, 1904 Operator: constant.EqualOperator, 1905 Values: []string{"some-security-group"}, 1906 }})) 1907 1908 Expect(fakeCloudControllerClient.GetSpaceSecurityGroupsCallCount()).To(Equal(1)) 1909 spaceGUIDRunning, queriesRunning := fakeCloudControllerClient.GetSpaceSecurityGroupsArgsForCall(0) 1910 Expect(spaceGUIDRunning).To(Equal("some-space-guid")) 1911 Expect(queriesRunning).To(Equal([]ccv2.Filter{{ 1912 Type: constant.NameFilter, 1913 Operator: constant.EqualOperator, 1914 Values: []string{"some-security-group"}, 1915 }})) 1916 1917 Expect(fakeCloudControllerClient.DeleteSecurityGroupStagingSpaceCallCount()).To(Equal(0)) 1918 Expect(fakeCloudControllerClient.DeleteSecurityGroupSpaceCallCount()).To(Equal(0)) 1919 }) 1920 }) 1921 1922 When("it is not bound to staging and an error occurs checking whether bound to running", func() { 1923 var returnedError error 1924 1925 BeforeEach(func() { 1926 fakeCloudControllerClient.GetSpaceStagingSecurityGroupsReturns( 1927 []ccv2.SecurityGroup{}, 1928 ccv2.Warnings{"warning-3", "warning-4"}, 1929 nil, 1930 ) 1931 returnedError = errors.New("get-space-running-security-groups-error") 1932 fakeCloudControllerClient.GetSpaceSecurityGroupsReturns( 1933 []ccv2.SecurityGroup{ 1934 { 1935 Name: "some-security-group", 1936 GUID: "some-security-group-guid", 1937 }, 1938 }, 1939 ccv2.Warnings{"warning-5", "warning-6"}, 1940 returnedError, 1941 ) 1942 }) 1943 1944 It("returns all warnings", func() { 1945 Expect(err).To(MatchError(returnedError)) 1946 Expect(warnings).To(ConsistOf(Warnings{"warning-1", "warning-2", "warning-3", "warning-4", "warning-5", "warning-6"})) 1947 }) 1948 }) 1949 }) 1950 }) 1951 1952 Describe("UnbindSecurityGroupByNameOrganizationNameAndSpaceName", func() { 1953 var ( 1954 lifecycle constant.SecurityGroupLifecycle 1955 warnings []string 1956 err error 1957 ) 1958 1959 JustBeforeEach(func() { 1960 warnings, err = actor.UnbindSecurityGroupByNameOrganizationNameAndSpaceName("some-security-group", "some-org", "some-space", lifecycle) 1961 }) 1962 1963 When("the requested lifecycle is neither running nor staging", func() { 1964 BeforeEach(func() { 1965 lifecycle = "bill & ted" 1966 }) 1967 1968 It("returns and appropriate error", func() { 1969 Expect(err).To(MatchError(fmt.Sprintf("Invalid lifecycle: %s", lifecycle))) 1970 }) 1971 }) 1972 1973 When("the security group is not found", func() { 1974 BeforeEach(func() { 1975 lifecycle = constant.SecurityGroupLifecycleRunning 1976 1977 fakeCloudControllerClient.GetSecurityGroupsReturns( 1978 []ccv2.SecurityGroup{}, 1979 ccv2.Warnings{"security-group-warning"}, 1980 nil) 1981 }) 1982 1983 It("returns the error and all warnings", func() { 1984 Expect(warnings).To(ConsistOf([]string{"security-group-warning"})) 1985 Expect(err).To(MatchError(actionerror.SecurityGroupNotFoundError{Name: "some-security-group"})) 1986 }) 1987 }) 1988 1989 When("an error is encountered getting the organization", func() { 1990 BeforeEach(func() { 1991 lifecycle = constant.SecurityGroupLifecycleRunning 1992 1993 fakeCloudControllerClient.GetSecurityGroupsReturns( 1994 []ccv2.SecurityGroup{{ 1995 Name: "some-security-group", 1996 GUID: "some-security-group-guid", 1997 }}, 1998 ccv2.Warnings{"security-group-warning"}, 1999 nil) 2000 fakeCloudControllerClient.GetOrganizationsReturns( 2001 []ccv2.Organization{}, 2002 ccv2.Warnings{"org-warning"}, 2003 nil) 2004 }) 2005 2006 It("returns the error and all warnings", func() { 2007 Expect(warnings).To(ConsistOf([]string{"security-group-warning", "org-warning"})) 2008 Expect(err).To(MatchError(actionerror.OrganizationNotFoundError{Name: "some-org"})) 2009 }) 2010 }) 2011 2012 When("an error is encountered getting the space", func() { 2013 BeforeEach(func() { 2014 lifecycle = constant.SecurityGroupLifecycleRunning 2015 2016 fakeCloudControllerClient.GetSecurityGroupsReturns( 2017 []ccv2.SecurityGroup{{ 2018 Name: "some-security-group", 2019 GUID: "some-security-group-guid", 2020 }}, 2021 ccv2.Warnings{"security-group-warning"}, 2022 nil) 2023 fakeCloudControllerClient.GetOrganizationsReturns( 2024 []ccv2.Organization{{ 2025 Name: "some-org", 2026 GUID: "some-org-guid", 2027 }}, 2028 ccv2.Warnings{"org-warning"}, 2029 nil) 2030 fakeCloudControllerClient.GetSpacesReturns( 2031 []ccv2.Space{}, 2032 ccv2.Warnings{"space-warning"}, 2033 nil) 2034 }) 2035 2036 It("returns the error and all warnings", func() { 2037 Expect(warnings).To(ConsistOf([]string{"security-group-warning", "org-warning", "space-warning"})) 2038 Expect(err).To(MatchError(actionerror.SpaceNotFoundError{Name: "some-space"})) 2039 }) 2040 }) 2041 2042 When("the requested lifecycle is running", func() { 2043 BeforeEach(func() { 2044 lifecycle = constant.SecurityGroupLifecycleRunning 2045 2046 fakeCloudControllerClient.GetSecurityGroupsReturns( 2047 []ccv2.SecurityGroup{{ 2048 Name: "some-security-group", 2049 GUID: "some-security-group-guid", 2050 }}, 2051 ccv2.Warnings{"warning-1", "warning-2"}, 2052 nil) 2053 fakeCloudControllerClient.GetOrganizationsReturns( 2054 []ccv2.Organization{{ 2055 Name: "some-org", 2056 GUID: "some-org-guid", 2057 }}, 2058 ccv2.Warnings{"warning-3", "warning-4"}, 2059 nil) 2060 fakeCloudControllerClient.GetSpacesReturns( 2061 []ccv2.Space{{ 2062 Name: "some-space", 2063 GUID: "some-space-guid", 2064 }}, 2065 ccv2.Warnings{"warning-5", "warning-6"}, 2066 nil) 2067 }) 2068 2069 When("the security group is bound to running", func() { 2070 BeforeEach(func() { 2071 fakeCloudControllerClient.GetSpaceSecurityGroupsReturns( 2072 []ccv2.SecurityGroup{ 2073 { 2074 Name: "some-security-group", 2075 GUID: "some-security-group-guid", 2076 }, 2077 }, 2078 ccv2.Warnings{"warning-7", "warning-8"}, 2079 nil, 2080 ) 2081 }) 2082 2083 When("an error is encountered unbinding the security group from the space", func() { 2084 var returnedError error 2085 2086 BeforeEach(func() { 2087 returnedError = errors.New("associate-space-error") 2088 fakeCloudControllerClient.DeleteSecurityGroupSpaceReturns( 2089 ccv2.Warnings{"warning-9", "warning-10"}, 2090 returnedError) 2091 }) 2092 2093 It("returns the error and all warnings", func() { 2094 Expect(warnings).To(ConsistOf([]string{ 2095 "warning-1", 2096 "warning-2", 2097 "warning-3", 2098 "warning-4", 2099 "warning-5", 2100 "warning-6", 2101 "warning-7", 2102 "warning-8", 2103 "warning-9", 2104 "warning-10", 2105 })) 2106 Expect(err).To(MatchError(returnedError)) 2107 }) 2108 }) 2109 2110 When("no errors are encountered", func() { 2111 BeforeEach(func() { 2112 fakeCloudControllerClient.DeleteSecurityGroupSpaceReturns( 2113 ccv2.Warnings{"warning-9", "warning-10"}, 2114 nil) 2115 }) 2116 2117 It("returns all warnings", func() { 2118 Expect(warnings).To(ConsistOf([]string{ 2119 "warning-1", 2120 "warning-2", 2121 "warning-3", 2122 "warning-4", 2123 "warning-5", 2124 "warning-6", 2125 "warning-7", 2126 "warning-8", 2127 "warning-9", 2128 "warning-10", 2129 })) 2130 Expect(err).ToNot(HaveOccurred()) 2131 2132 Expect(fakeCloudControllerClient.GetSecurityGroupsCallCount()).To(Equal(1)) 2133 Expect(fakeCloudControllerClient.GetSecurityGroupsArgsForCall(0)).To(Equal([]ccv2.Filter{{ 2134 Type: constant.NameFilter, 2135 Operator: constant.EqualOperator, 2136 Values: []string{"some-security-group"}, 2137 }})) 2138 2139 Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1)) 2140 Expect(fakeCloudControllerClient.GetOrganizationsArgsForCall(0)).To(Equal([]ccv2.Filter{{ 2141 Type: constant.NameFilter, 2142 Operator: constant.EqualOperator, 2143 Values: []string{"some-org"}, 2144 }})) 2145 2146 Expect(fakeCloudControllerClient.GetSpacesCallCount()).To(Equal(1)) 2147 Expect(fakeCloudControllerClient.GetSpacesArgsForCall(0)).To(Equal([]ccv2.Filter{{ 2148 Type: constant.NameFilter, 2149 Operator: constant.EqualOperator, 2150 Values: []string{"some-space"}, 2151 }, { 2152 Type: constant.OrganizationGUIDFilter, 2153 Operator: constant.EqualOperator, 2154 Values: []string{"some-org-guid"}, 2155 }})) 2156 2157 Expect(fakeCloudControllerClient.GetSpaceSecurityGroupsCallCount()).To(Equal(1)) 2158 spaceGUID, queries := fakeCloudControllerClient.GetSpaceSecurityGroupsArgsForCall(0) 2159 Expect(spaceGUID).To(Equal("some-space-guid")) 2160 Expect(queries).To(Equal([]ccv2.Filter{{ 2161 Type: constant.NameFilter, 2162 Operator: constant.EqualOperator, 2163 Values: []string{"some-security-group"}, 2164 }})) 2165 2166 Expect(fakeCloudControllerClient.GetSpaceStagingSecurityGroupsCallCount()).To(Equal(0)) 2167 2168 Expect(fakeCloudControllerClient.DeleteSecurityGroupSpaceCallCount()).To(Equal(1)) 2169 securityGroupGUID, spaceGUID := fakeCloudControllerClient.DeleteSecurityGroupSpaceArgsForCall(0) 2170 Expect(securityGroupGUID).To(Equal("some-security-group-guid")) 2171 Expect(spaceGUID).To(Equal("some-space-guid")) 2172 2173 Expect(fakeCloudControllerClient.DeleteSecurityGroupStagingSpaceCallCount()).To(Equal(0)) 2174 }) 2175 }) 2176 }) 2177 2178 When("the security group is bound to neither running nor staging", func() { 2179 BeforeEach(func() { 2180 fakeCloudControllerClient.GetSpaceSecurityGroupsReturns( 2181 []ccv2.SecurityGroup{}, 2182 ccv2.Warnings{"warning-7", "warning-8"}, 2183 nil, 2184 ) 2185 fakeCloudControllerClient.GetSpaceStagingSecurityGroupsReturns( 2186 []ccv2.SecurityGroup{}, 2187 ccv2.Warnings{"warning-9", "warning-10"}, 2188 nil, 2189 ) 2190 }) 2191 2192 When("no errors are encountered", func() { 2193 It("returns all warnings", func() { 2194 Expect(warnings).To(ConsistOf([]string{ 2195 "warning-1", 2196 "warning-2", 2197 "warning-3", 2198 "warning-4", 2199 "warning-5", 2200 "warning-6", 2201 "warning-7", 2202 "warning-8", 2203 "warning-9", 2204 "warning-10", 2205 })) 2206 Expect(err).ToNot(HaveOccurred()) 2207 2208 Expect(fakeCloudControllerClient.GetSpaceSecurityGroupsCallCount()).To(Equal(1)) 2209 spaceGUIDRunning, queriesRunning := fakeCloudControllerClient.GetSpaceSecurityGroupsArgsForCall(0) 2210 Expect(spaceGUIDRunning).To(Equal("some-space-guid")) 2211 Expect(queriesRunning).To(Equal([]ccv2.Filter{{ 2212 Type: constant.NameFilter, 2213 Operator: constant.EqualOperator, 2214 Values: []string{"some-security-group"}, 2215 }})) 2216 2217 Expect(fakeCloudControllerClient.GetSpaceStagingSecurityGroupsCallCount()).To(Equal(1)) 2218 spaceGUIDStaging, queriesStaging := fakeCloudControllerClient.GetSpaceStagingSecurityGroupsArgsForCall(0) 2219 Expect(spaceGUIDStaging).To(Equal("some-space-guid")) 2220 Expect(queriesStaging).To(Equal([]ccv2.Filter{{ 2221 Type: constant.NameFilter, 2222 Operator: constant.EqualOperator, 2223 Values: []string{"some-security-group"}, 2224 }})) 2225 2226 Expect(fakeCloudControllerClient.DeleteSecurityGroupSpaceCallCount()).To(Equal(0)) 2227 Expect(fakeCloudControllerClient.DeleteSecurityGroupStagingSpaceCallCount()).To(Equal(0)) 2228 }) 2229 }) 2230 }) 2231 2232 When("the security group is bound to staging", func() { 2233 BeforeEach(func() { 2234 fakeCloudControllerClient.GetSpaceSecurityGroupsReturns( 2235 []ccv2.SecurityGroup{}, 2236 ccv2.Warnings{"warning-7", "warning-8"}, 2237 nil, 2238 ) 2239 fakeCloudControllerClient.GetSpaceStagingSecurityGroupsReturns( 2240 []ccv2.SecurityGroup{ 2241 { 2242 Name: "some-security-group", 2243 GUID: "some-security-group-guid", 2244 }, 2245 }, 2246 ccv2.Warnings{"warning-9", "warning-10"}, 2247 nil, 2248 ) 2249 }) 2250 2251 It("returns all warnings and a SecurityGroupNotBoundError", func() { 2252 Expect(warnings).To(ConsistOf([]string{ 2253 "warning-1", 2254 "warning-2", 2255 "warning-3", 2256 "warning-4", 2257 "warning-5", 2258 "warning-6", 2259 "warning-7", 2260 "warning-8", 2261 "warning-9", 2262 "warning-10", 2263 })) 2264 Expect(err).To(MatchError(actionerror.SecurityGroupNotBoundError{ 2265 Name: "some-security-group", 2266 Lifecycle: lifecycle, 2267 })) 2268 2269 Expect(fakeCloudControllerClient.GetSpaceSecurityGroupsCallCount()).To(Equal(1)) 2270 spaceGUIDRunning, queriesRunning := fakeCloudControllerClient.GetSpaceSecurityGroupsArgsForCall(0) 2271 Expect(spaceGUIDRunning).To(Equal("some-space-guid")) 2272 Expect(queriesRunning).To(Equal([]ccv2.Filter{{ 2273 Type: constant.NameFilter, 2274 Operator: constant.EqualOperator, 2275 Values: []string{"some-security-group"}, 2276 }})) 2277 2278 Expect(fakeCloudControllerClient.GetSpaceStagingSecurityGroupsCallCount()).To(Equal(1)) 2279 spaceGUIDStaging, queriesStaging := fakeCloudControllerClient.GetSpaceStagingSecurityGroupsArgsForCall(0) 2280 Expect(spaceGUIDStaging).To(Equal("some-space-guid")) 2281 Expect(queriesStaging).To(Equal([]ccv2.Filter{{ 2282 Type: constant.NameFilter, 2283 Operator: constant.EqualOperator, 2284 Values: []string{"some-security-group"}, 2285 }})) 2286 2287 Expect(fakeCloudControllerClient.DeleteSecurityGroupSpaceCallCount()).To(Equal(0)) 2288 Expect(fakeCloudControllerClient.DeleteSecurityGroupStagingSpaceCallCount()).To(Equal(0)) 2289 }) 2290 }) 2291 }) 2292 2293 When("the requested lifecycle is staging", func() { 2294 BeforeEach(func() { 2295 lifecycle = constant.SecurityGroupLifecycleStaging 2296 2297 fakeCloudControllerClient.GetSecurityGroupsReturns( 2298 []ccv2.SecurityGroup{{ 2299 Name: "some-security-group", 2300 GUID: "some-security-group-guid", 2301 }}, 2302 ccv2.Warnings{"warning-1", "warning-2"}, 2303 nil) 2304 fakeCloudControllerClient.GetOrganizationsReturns( 2305 []ccv2.Organization{{ 2306 Name: "some-org", 2307 GUID: "some-org-guid", 2308 }}, 2309 ccv2.Warnings{"warning-3", "warning-4"}, 2310 nil) 2311 fakeCloudControllerClient.GetSpacesReturns( 2312 []ccv2.Space{{ 2313 Name: "some-space", 2314 GUID: "some-space-guid", 2315 }}, 2316 ccv2.Warnings{"warning-5", "warning-6"}, 2317 nil) 2318 }) 2319 2320 When("the security group is bound to staging", func() { 2321 BeforeEach(func() { 2322 fakeCloudControllerClient.GetSpaceStagingSecurityGroupsReturns( 2323 []ccv2.SecurityGroup{ 2324 { 2325 Name: "some-security-group", 2326 GUID: "some-security-group-guid", 2327 }, 2328 }, 2329 ccv2.Warnings{"warning-7", "warning-8"}, 2330 nil, 2331 ) 2332 }) 2333 2334 When("an error is encountered unbinding the security group the space", func() { 2335 var returnedError error 2336 2337 BeforeEach(func() { 2338 fakeCloudControllerClient.GetSpaceStagingSecurityGroupsReturns( 2339 []ccv2.SecurityGroup{ 2340 { 2341 Name: "some-security-group", 2342 GUID: "some-security-group-guid", 2343 }, 2344 }, 2345 ccv2.Warnings{"warning-7", "warning-8"}, 2346 nil, 2347 ) 2348 returnedError = errors.New("associate-space-error") 2349 fakeCloudControllerClient.DeleteSecurityGroupStagingSpaceReturns( 2350 ccv2.Warnings{"warning-9", "warning-10"}, 2351 returnedError) 2352 }) 2353 2354 It("returns the error and all warnings", func() { 2355 Expect(warnings).To(ConsistOf([]string{ 2356 "warning-1", 2357 "warning-2", 2358 "warning-3", 2359 "warning-4", 2360 "warning-5", 2361 "warning-6", 2362 "warning-7", 2363 "warning-8", 2364 "warning-9", 2365 "warning-10", 2366 })) 2367 Expect(err).To(MatchError(returnedError)) 2368 }) 2369 }) 2370 2371 When("no errors are encountered", func() { 2372 BeforeEach(func() { 2373 fakeCloudControllerClient.DeleteSecurityGroupStagingSpaceReturns( 2374 ccv2.Warnings{"warning-9", "warning-10"}, 2375 nil) 2376 }) 2377 2378 It("returns all warnings", func() { 2379 Expect(err).ToNot(HaveOccurred()) 2380 Expect(warnings).To(ConsistOf([]string{ 2381 "warning-1", 2382 "warning-2", 2383 "warning-3", 2384 "warning-4", 2385 "warning-5", 2386 "warning-6", 2387 "warning-7", 2388 "warning-8", 2389 "warning-9", 2390 "warning-10", 2391 })) 2392 2393 Expect(fakeCloudControllerClient.GetSecurityGroupsCallCount()).To(Equal(1)) 2394 Expect(fakeCloudControllerClient.GetSecurityGroupsArgsForCall(0)).To(Equal([]ccv2.Filter{{ 2395 Type: constant.NameFilter, 2396 Operator: constant.EqualOperator, 2397 Values: []string{"some-security-group"}, 2398 }})) 2399 2400 Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1)) 2401 Expect(fakeCloudControllerClient.GetOrganizationsArgsForCall(0)).To(Equal([]ccv2.Filter{{ 2402 Type: constant.NameFilter, 2403 Operator: constant.EqualOperator, 2404 Values: []string{"some-org"}, 2405 }})) 2406 2407 Expect(fakeCloudControllerClient.GetSpacesCallCount()).To(Equal(1)) 2408 Expect(fakeCloudControllerClient.GetSpacesArgsForCall(0)).To(Equal([]ccv2.Filter{{ 2409 Type: constant.NameFilter, 2410 Operator: constant.EqualOperator, 2411 Values: []string{"some-space"}, 2412 }, { 2413 Type: constant.OrganizationGUIDFilter, 2414 Operator: constant.EqualOperator, 2415 Values: []string{"some-org-guid"}, 2416 }})) 2417 2418 Expect(fakeCloudControllerClient.GetSpaceStagingSecurityGroupsCallCount()).To(Equal(1)) 2419 spaceGUID, queries := fakeCloudControllerClient.GetSpaceStagingSecurityGroupsArgsForCall(0) 2420 Expect(spaceGUID).To(Equal("some-space-guid")) 2421 Expect(queries).To(Equal([]ccv2.Filter{{ 2422 Type: constant.NameFilter, 2423 Operator: constant.EqualOperator, 2424 Values: []string{"some-security-group"}, 2425 }})) 2426 2427 Expect(fakeCloudControllerClient.GetSpaceSecurityGroupsCallCount()).To(Equal(0)) 2428 2429 Expect(fakeCloudControllerClient.DeleteSecurityGroupStagingSpaceCallCount()).To(Equal(1)) 2430 securityGroupGUID, spaceGUID := fakeCloudControllerClient.DeleteSecurityGroupStagingSpaceArgsForCall(0) 2431 Expect(securityGroupGUID).To(Equal("some-security-group-guid")) 2432 Expect(spaceGUID).To(Equal("some-space-guid")) 2433 2434 Expect(fakeCloudControllerClient.DeleteSecurityGroupSpaceCallCount()).To(Equal(0)) 2435 }) 2436 }) 2437 }) 2438 2439 When("the security group is bound to neither running nor staging", func() { 2440 BeforeEach(func() { 2441 fakeCloudControllerClient.GetSpaceStagingSecurityGroupsReturns( 2442 []ccv2.SecurityGroup{}, 2443 ccv2.Warnings{"warning-7", "warning-8"}, 2444 nil, 2445 ) 2446 fakeCloudControllerClient.GetSpaceSecurityGroupsReturns( 2447 []ccv2.SecurityGroup{}, 2448 ccv2.Warnings{"warning-9", "warning-10"}, 2449 nil, 2450 ) 2451 }) 2452 2453 When("no errors are encountered", func() { 2454 It("returns all warnings", func() { 2455 Expect(err).ToNot(HaveOccurred()) 2456 Expect(warnings).To(ConsistOf([]string{ 2457 "warning-1", 2458 "warning-2", 2459 "warning-3", 2460 "warning-4", 2461 "warning-5", 2462 "warning-6", 2463 "warning-7", 2464 "warning-8", 2465 "warning-9", 2466 "warning-10", 2467 })) 2468 2469 Expect(fakeCloudControllerClient.GetSpaceStagingSecurityGroupsCallCount()).To(Equal(1)) 2470 spaceGUIDStaging, queriesStaging := fakeCloudControllerClient.GetSpaceStagingSecurityGroupsArgsForCall(0) 2471 Expect(spaceGUIDStaging).To(Equal("some-space-guid")) 2472 Expect(queriesStaging).To(Equal([]ccv2.Filter{{ 2473 Type: constant.NameFilter, 2474 Operator: constant.EqualOperator, 2475 Values: []string{"some-security-group"}, 2476 }})) 2477 2478 Expect(fakeCloudControllerClient.GetSpaceSecurityGroupsCallCount()).To(Equal(1)) 2479 spaceGUIDRunning, queriesRunning := fakeCloudControllerClient.GetSpaceSecurityGroupsArgsForCall(0) 2480 Expect(spaceGUIDRunning).To(Equal("some-space-guid")) 2481 Expect(queriesRunning).To(Equal([]ccv2.Filter{{ 2482 Type: constant.NameFilter, 2483 Operator: constant.EqualOperator, 2484 Values: []string{"some-security-group"}, 2485 }})) 2486 2487 Expect(fakeCloudControllerClient.DeleteSecurityGroupStagingSpaceCallCount()).To(Equal(0)) 2488 Expect(fakeCloudControllerClient.DeleteSecurityGroupSpaceCallCount()).To(Equal(0)) 2489 }) 2490 }) 2491 }) 2492 2493 When("the security group is bound to running", func() { 2494 BeforeEach(func() { 2495 fakeCloudControllerClient.GetSpaceStagingSecurityGroupsReturns( 2496 []ccv2.SecurityGroup{}, 2497 ccv2.Warnings{"warning-7", "warning-8"}, 2498 nil, 2499 ) 2500 fakeCloudControllerClient.GetSpaceSecurityGroupsReturns( 2501 []ccv2.SecurityGroup{ 2502 { 2503 Name: "some-security-group", 2504 GUID: "some-security-group-guid", 2505 }, 2506 }, 2507 ccv2.Warnings{"warning-9", "warning-10"}, 2508 nil, 2509 ) 2510 }) 2511 2512 It("returns all warnings and a SecurityGroupNotBoundError", func() { 2513 Expect(warnings).To(ConsistOf([]string{ 2514 "warning-1", 2515 "warning-2", 2516 "warning-3", 2517 "warning-4", 2518 "warning-5", 2519 "warning-6", 2520 "warning-7", 2521 "warning-8", 2522 "warning-9", 2523 "warning-10", 2524 })) 2525 2526 Expect(err).To(MatchError(actionerror.SecurityGroupNotBoundError{ 2527 Name: "some-security-group", 2528 Lifecycle: lifecycle, 2529 })) 2530 2531 Expect(fakeCloudControllerClient.GetSpaceStagingSecurityGroupsCallCount()).To(Equal(1)) 2532 spaceGUIDStaging, queriesStaging := fakeCloudControllerClient.GetSpaceStagingSecurityGroupsArgsForCall(0) 2533 Expect(spaceGUIDStaging).To(Equal("some-space-guid")) 2534 Expect(queriesStaging).To(Equal([]ccv2.Filter{{ 2535 Type: constant.NameFilter, 2536 Operator: constant.EqualOperator, 2537 Values: []string{"some-security-group"}, 2538 }})) 2539 2540 Expect(fakeCloudControllerClient.GetSpaceSecurityGroupsCallCount()).To(Equal(1)) 2541 spaceGUIDRunning, queriesRunning := fakeCloudControllerClient.GetSpaceSecurityGroupsArgsForCall(0) 2542 Expect(spaceGUIDRunning).To(Equal("some-space-guid")) 2543 Expect(queriesRunning).To(Equal([]ccv2.Filter{{ 2544 Type: constant.NameFilter, 2545 Operator: constant.EqualOperator, 2546 Values: []string{"some-security-group"}, 2547 }})) 2548 2549 Expect(fakeCloudControllerClient.DeleteSecurityGroupStagingSpaceCallCount()).To(Equal(0)) 2550 Expect(fakeCloudControllerClient.DeleteSecurityGroupSpaceCallCount()).To(Equal(0)) 2551 }) 2552 }) 2553 }) 2554 }) 2555 })