github.com/franc20/ayesa_sap@v7.0.0-beta.28.0.20200124003224-302d4d52fa6c+incompatible/actor/v7action/label_test.go (about) 1 package v7action_test 2 3 import ( 4 "errors" 5 6 . "code.cloudfoundry.org/cli/actor/v7action" 7 "code.cloudfoundry.org/cli/actor/v7action/v7actionfakes" 8 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3" 9 "code.cloudfoundry.org/cli/types" 10 . "github.com/onsi/ginkgo" 11 . "github.com/onsi/gomega" 12 ) 13 14 var _ = Describe("labels", func() { 15 var ( 16 actor *Actor 17 fakeCloudControllerClient *v7actionfakes.FakeCloudControllerClient 18 fakeSharedActor *v7actionfakes.FakeSharedActor 19 fakeConfig *v7actionfakes.FakeConfig 20 warnings Warnings 21 executeErr error 22 resourceName string 23 spaceGUID string 24 orgGUID string 25 labels map[string]types.NullString 26 ) 27 28 BeforeEach(func() { 29 fakeCloudControllerClient = new(v7actionfakes.FakeCloudControllerClient) 30 fakeSharedActor = new(v7actionfakes.FakeSharedActor) 31 fakeConfig = new(v7actionfakes.FakeConfig) 32 actor = NewActor(fakeCloudControllerClient, fakeConfig, fakeSharedActor, nil, nil) 33 resourceName = "some-resource" 34 orgGUID = "some-org-guid" 35 spaceGUID = "some-space-guid" 36 }) 37 38 Context("UpdateApplicationLabelsByApplicationName", func() { 39 JustBeforeEach(func() { 40 warnings, executeErr = actor.UpdateApplicationLabelsByApplicationName(resourceName, spaceGUID, labels) 41 }) 42 43 When("there are no client errors", func() { 44 BeforeEach(func() { 45 fakeCloudControllerClient.GetApplicationsReturns( 46 []ccv3.Application{ccv3.Application{GUID: "some-guid"}}, 47 ccv3.Warnings([]string{"warning-1", "warning-2"}), 48 nil, 49 ) 50 fakeCloudControllerClient.UpdateResourceMetadataReturns( 51 ccv3.ResourceMetadata{}, 52 ccv3.Warnings{"set-app-labels-warnings"}, 53 nil, 54 ) 55 }) 56 57 It("gets the application", func() { 58 Expect(fakeCloudControllerClient.GetApplicationsCallCount()).To(Equal(1)) 59 Expect(fakeCloudControllerClient.GetApplicationsArgsForCall(0)).To(ConsistOf( 60 ccv3.Query{Key: ccv3.NameFilter, Values: []string{resourceName}}, 61 ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{spaceGUID}}, 62 )) 63 }) 64 65 It("sets the app labels", func() { 66 Expect(fakeCloudControllerClient.UpdateResourceMetadataCallCount()).To(Equal(1)) 67 resourceType, appGUID, sentMetadata := fakeCloudControllerClient.UpdateResourceMetadataArgsForCall(0) 68 Expect(executeErr).ToNot(HaveOccurred()) 69 Expect(resourceType).To(BeEquivalentTo("app")) 70 Expect(appGUID).To(BeEquivalentTo("some-guid")) 71 Expect(sentMetadata.Labels).To(BeEquivalentTo(labels)) 72 }) 73 74 It("aggregates warnings", func() { 75 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "set-app-labels-warnings")) 76 }) 77 }) 78 79 When("there are client errors", func() { 80 When("GetApplications fails", func() { 81 BeforeEach(func() { 82 fakeCloudControllerClient.GetApplicationsReturns( 83 []ccv3.Application{ccv3.Application{GUID: "some-guid"}}, 84 ccv3.Warnings([]string{"warning-failure-1", "warning-failure-2"}), 85 errors.New("get-apps-error"), 86 ) 87 }) 88 89 It("returns the error and all warnings", func() { 90 Expect(executeErr).To(HaveOccurred()) 91 Expect(warnings).To(ConsistOf("warning-failure-1", "warning-failure-2")) 92 Expect(executeErr).To(MatchError("get-apps-error")) 93 }) 94 }) 95 96 When("UpdateApplication fails", func() { 97 BeforeEach(func() { 98 fakeCloudControllerClient.GetApplicationsReturns( 99 []ccv3.Application{ccv3.Application{GUID: "some-guid"}}, 100 ccv3.Warnings([]string{"warning-1", "warning-2"}), 101 nil, 102 ) 103 fakeCloudControllerClient.UpdateResourceMetadataReturns( 104 ccv3.ResourceMetadata{}, 105 ccv3.Warnings{"set-app-labels-warnings"}, 106 errors.New("update-application-error"), 107 ) 108 }) 109 110 It("returns the error and all warnings", func() { 111 Expect(executeErr).To(HaveOccurred()) 112 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "set-app-labels-warnings")) 113 Expect(executeErr).To(MatchError("update-application-error")) 114 }) 115 }) 116 117 }) 118 }) 119 120 Context("UpdateDomainLabelsByDomainName", func() { 121 JustBeforeEach(func() { 122 warnings, executeErr = actor.UpdateDomainLabelsByDomainName(resourceName, labels) 123 }) 124 125 When("there are no client errors", func() { 126 BeforeEach(func() { 127 fakeCloudControllerClient.GetDomainsReturns( 128 []ccv3.Domain{ccv3.Domain{GUID: "some-guid"}}, 129 ccv3.Warnings([]string{"warning-1", "warning-2"}), 130 nil, 131 ) 132 fakeCloudControllerClient.UpdateResourceMetadataReturns( 133 ccv3.ResourceMetadata{}, 134 ccv3.Warnings{"warning-updating-metadata"}, 135 nil, 136 ) 137 }) 138 139 It("gets the domain", func() { 140 Expect(fakeCloudControllerClient.GetDomainsCallCount()).To(Equal(1)) 141 Expect(fakeCloudControllerClient.GetDomainsArgsForCall(0)).To(ConsistOf( 142 ccv3.Query{Key: ccv3.NameFilter, Values: []string{resourceName}}, 143 )) 144 }) 145 146 It("sets the domain labels", func() { 147 Expect(fakeCloudControllerClient.UpdateResourceMetadataCallCount()).To(Equal(1)) 148 resourceType, domainGUID, sentMetadata := fakeCloudControllerClient.UpdateResourceMetadataArgsForCall(0) 149 Expect(executeErr).ToNot(HaveOccurred()) 150 Expect(resourceType).To(BeEquivalentTo("domain")) 151 Expect(domainGUID).To(BeEquivalentTo("some-guid")) 152 Expect(sentMetadata.Labels).To(BeEquivalentTo(labels)) 153 }) 154 155 It("aggregates warnings", func() { 156 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "warning-updating-metadata")) 157 }) 158 }) 159 160 When("there are client errors", func() { 161 When("fetching the domain fails", func() { 162 BeforeEach(func() { 163 fakeCloudControllerClient.GetDomainsReturns( 164 []ccv3.Domain{ccv3.Domain{GUID: "some-guid"}}, 165 ccv3.Warnings([]string{"warning-failure-1", "warning-failure-2"}), 166 errors.New("get-domains-error"), 167 ) 168 }) 169 170 It("returns the error and all warnings", func() { 171 Expect(executeErr).To(HaveOccurred()) 172 Expect(warnings).To(ConsistOf("warning-failure-1", "warning-failure-2")) 173 Expect(executeErr).To(MatchError("get-domains-error")) 174 }) 175 }) 176 177 When("updating the domain fails", func() { 178 BeforeEach(func() { 179 fakeCloudControllerClient.GetDomainsReturns( 180 []ccv3.Domain{ccv3.Domain{GUID: "some-guid"}}, 181 ccv3.Warnings([]string{"warning-1", "warning-2"}), 182 nil, 183 ) 184 fakeCloudControllerClient.UpdateResourceMetadataReturns( 185 ccv3.ResourceMetadata{}, 186 ccv3.Warnings{"warning-updating-metadata"}, 187 errors.New("update-domain-error"), 188 ) 189 }) 190 It("returns the error and all warnings", func() { 191 Expect(executeErr).To(HaveOccurred()) 192 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "warning-updating-metadata")) 193 Expect(executeErr).To(MatchError("update-domain-error")) 194 }) 195 }) 196 }) 197 }) 198 199 Context("UpdateOrganizationLabelsByOrganizationName", func() { 200 JustBeforeEach(func() { 201 warnings, executeErr = actor.UpdateOrganizationLabelsByOrganizationName(resourceName, labels) 202 }) 203 204 When("there are no client errors", func() { 205 BeforeEach(func() { 206 fakeCloudControllerClient.GetOrganizationsReturns( 207 []ccv3.Organization{ccv3.Organization{GUID: "some-guid"}}, 208 ccv3.Warnings([]string{"warning-1", "warning-2"}), 209 nil, 210 ) 211 fakeCloudControllerClient.UpdateResourceMetadataReturns( 212 ccv3.ResourceMetadata{}, 213 ccv3.Warnings{"set-org"}, 214 nil, 215 ) 216 }) 217 218 It("gets the organization", func() { 219 Expect(fakeCloudControllerClient.GetOrganizationsCallCount()).To(Equal(1)) 220 Expect(fakeCloudControllerClient.GetOrganizationsArgsForCall(0)).To(ConsistOf( 221 ccv3.Query{Key: ccv3.NameFilter, Values: []string{resourceName}}, 222 )) 223 }) 224 225 It("sets the org labels", func() { 226 Expect(fakeCloudControllerClient.UpdateResourceMetadataCallCount()).To(Equal(1)) 227 resourceType, orgGUID, sentMetadata := fakeCloudControllerClient.UpdateResourceMetadataArgsForCall(0) 228 Expect(executeErr).ToNot(HaveOccurred()) 229 Expect(resourceType).To(BeEquivalentTo("org")) 230 Expect(orgGUID).To(BeEquivalentTo("some-guid")) 231 Expect(sentMetadata.Labels).To(BeEquivalentTo(labels)) 232 }) 233 234 It("aggregates warnings", func() { 235 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "set-org")) 236 }) 237 }) 238 239 When("there are client errors", func() { 240 When("fetching the organization fails", func() { 241 BeforeEach(func() { 242 fakeCloudControllerClient.GetOrganizationsReturns( 243 []ccv3.Organization{ccv3.Organization{GUID: "some-guid"}}, 244 ccv3.Warnings([]string{"warning-failure-1", "warning-failure-2"}), 245 errors.New("get-orgs-error"), 246 ) 247 }) 248 249 It("returns the error and all warnings", func() { 250 Expect(executeErr).To(HaveOccurred()) 251 Expect(warnings).To(ConsistOf("warning-failure-1", "warning-failure-2")) 252 Expect(executeErr).To(MatchError("get-orgs-error")) 253 }) 254 }) 255 256 When("updating the organization fails", func() { 257 BeforeEach(func() { 258 fakeCloudControllerClient.GetOrganizationsReturns( 259 []ccv3.Organization{ccv3.Organization{GUID: "some-guid"}}, 260 ccv3.Warnings([]string{"warning-1", "warning-2"}), 261 nil, 262 ) 263 fakeCloudControllerClient.UpdateResourceMetadataReturns( 264 ccv3.ResourceMetadata{}, 265 ccv3.Warnings{"set-org"}, 266 errors.New("update-orgs-error"), 267 ) 268 }) 269 It("returns the error and all warnings", func() { 270 Expect(executeErr).To(HaveOccurred()) 271 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "set-org")) 272 Expect(executeErr).To(MatchError("update-orgs-error")) 273 }) 274 }) 275 }) 276 }) 277 278 Context("UpdateRouteLabels", func() { 279 JustBeforeEach(func() { 280 warnings, executeErr = actor.UpdateRouteLabels("sub.example.com/my-route/path", "space-guid", labels) 281 }) 282 283 When("there are no client errors", func() { 284 BeforeEach(func() { 285 fakeCloudControllerClient.GetDomainsReturns( 286 []ccv3.Domain{ 287 {Name: "domain-name", GUID: "domain-guid"}, 288 }, 289 ccv3.Warnings{"get-domains-warning"}, 290 nil, 291 ) 292 293 fakeCloudControllerClient.GetRoutesReturns( 294 []ccv3.Route{ 295 {GUID: "route-guid", SpaceGUID: "space-guid", DomainGUID: "domain-guid", Host: "hostname", URL: "hostname.domain-name", Path: "/the-path"}, 296 }, 297 ccv3.Warnings{"get-route-warning-1", "get-route-warning-2"}, 298 nil, 299 ) 300 301 fakeCloudControllerClient.UpdateResourceMetadataReturns( 302 ccv3.ResourceMetadata{}, 303 ccv3.Warnings{"set-route-warning"}, 304 nil, 305 ) 306 }) 307 308 It("gets the domain", func() { 309 Expect(fakeCloudControllerClient.GetDomainsCallCount()).To(Equal(1)) 310 Expect(fakeCloudControllerClient.GetDomainsArgsForCall(0)).To(ConsistOf( 311 ccv3.Query{Key: ccv3.NameFilter, Values: []string{"sub.example.com"}}, 312 )) 313 }) 314 315 It("gets the route", func() { 316 Expect(fakeCloudControllerClient.GetRoutesCallCount()).To(Equal(1)) 317 Expect(fakeCloudControllerClient.GetRoutesArgsForCall(0)).To(ConsistOf( 318 ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{"space-guid"}}, 319 ccv3.Query{Key: ccv3.DomainGUIDFilter, Values: []string{"domain-guid"}}, 320 ccv3.Query{Key: ccv3.HostsFilter, Values: []string{""}}, 321 ccv3.Query{Key: ccv3.PathsFilter, Values: []string{"/my-route/path"}}, 322 )) 323 }) 324 325 It("sets the route labels", func() { 326 Expect(fakeCloudControllerClient.UpdateResourceMetadataCallCount()).To(Equal(1)) 327 resourceType, routeGUID, sentMetadata := fakeCloudControllerClient.UpdateResourceMetadataArgsForCall(0) 328 Expect(executeErr).ToNot(HaveOccurred()) 329 Expect(resourceType).To(BeEquivalentTo("route")) 330 Expect(routeGUID).To(BeEquivalentTo("route-guid")) 331 Expect(sentMetadata.Labels).To(BeEquivalentTo(labels)) 332 }) 333 334 It("aggregates warnings", func() { 335 Expect(warnings).To(ConsistOf("get-domains-warning", "get-route-warning-1", "get-route-warning-2", "set-route-warning")) 336 }) 337 }) 338 339 When("there are client errors", func() { 340 When("fetching the route fails", func() { 341 BeforeEach(func() { 342 fakeCloudControllerClient.GetDomainsReturns( 343 nil, 344 ccv3.Warnings{"get-domains-warning"}, 345 errors.New("get-domain-error"), 346 ) 347 }) 348 349 It("returns the error and all warnings", func() { 350 Expect(executeErr).To(HaveOccurred()) 351 Expect(warnings).To(ConsistOf("get-domains-warning")) 352 Expect(executeErr).To(MatchError("get-domain-error")) 353 }) 354 }) 355 356 When("updating the route fails", func() { 357 BeforeEach(func() { 358 fakeCloudControllerClient.GetDomainsReturns( 359 []ccv3.Domain{ 360 {Name: "domain-name", GUID: "domain-guid"}, 361 }, 362 ccv3.Warnings{"get-domains-warning"}, 363 nil, 364 ) 365 366 fakeCloudControllerClient.GetRoutesReturns( 367 []ccv3.Route{ 368 {GUID: "route-guid", SpaceGUID: "space-guid", DomainGUID: "domain-guid", Host: "hostname", URL: "hostname.domain-name", Path: "/the-path"}, 369 }, 370 ccv3.Warnings{"get-route-warning-1", "get-route-warning-2"}, 371 nil, 372 ) 373 374 fakeCloudControllerClient.UpdateResourceMetadataReturns( 375 ccv3.ResourceMetadata{}, 376 ccv3.Warnings{"set-route-warning"}, 377 errors.New("update-route-error"), 378 ) 379 }) 380 381 It("returns the error and all warnings", func() { 382 Expect(executeErr).To(HaveOccurred()) 383 Expect(warnings).To(ConsistOf("get-domains-warning", "get-route-warning-1", "get-route-warning-2", "set-route-warning")) 384 }) 385 }) 386 }) 387 }) 388 389 Context("UpdateSpaceLabelsBySpaceName", func() { 390 JustBeforeEach(func() { 391 warnings, executeErr = actor.UpdateSpaceLabelsBySpaceName(resourceName, orgGUID, labels) 392 }) 393 394 When("there are no client errors", func() { 395 BeforeEach(func() { 396 fakeCloudControllerClient.GetSpacesReturns( 397 []ccv3.Space{ccv3.Space{GUID: "some-guid"}}, 398 ccv3.Warnings([]string{"warning-1", "warning-2"}), 399 nil, 400 ) 401 fakeCloudControllerClient.UpdateResourceMetadataReturns( 402 ccv3.ResourceMetadata{}, 403 ccv3.Warnings{"set-space-metadata"}, 404 nil, 405 ) 406 }) 407 408 It("gets the space", func() { 409 Expect(fakeCloudControllerClient.GetSpacesCallCount()).To(Equal(1)) 410 Expect(fakeCloudControllerClient.GetSpacesArgsForCall(0)).To(ConsistOf( 411 ccv3.Query{Key: ccv3.NameFilter, Values: []string{resourceName}}, 412 ccv3.Query{Key: ccv3.OrganizationGUIDFilter, Values: []string{orgGUID}}, 413 )) 414 }) 415 416 It("sets the space labels", func() { 417 Expect(fakeCloudControllerClient.UpdateResourceMetadataCallCount()).To(Equal(1)) 418 resourceType, spaceGUID, sentMetadata := fakeCloudControllerClient.UpdateResourceMetadataArgsForCall(0) 419 Expect(executeErr).ToNot(HaveOccurred()) 420 Expect(resourceType).To(BeEquivalentTo("space")) 421 Expect(spaceGUID).To(BeEquivalentTo("some-guid")) 422 Expect(sentMetadata.Labels).To(BeEquivalentTo(labels)) 423 }) 424 425 It("aggregates warnings", func() { 426 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "set-space-metadata")) 427 }) 428 }) 429 430 When("there are client errors", func() { 431 When("fetching the space fails", func() { 432 BeforeEach(func() { 433 fakeCloudControllerClient.GetSpacesReturns( 434 []ccv3.Space{ccv3.Space{GUID: "some-guid"}}, 435 ccv3.Warnings([]string{"warning-failure-1", "warning-failure-2"}), 436 errors.New("get-spaces-error"), 437 ) 438 }) 439 440 It("returns the error and all warnings", func() { 441 Expect(executeErr).To(HaveOccurred()) 442 Expect(warnings).To(ConsistOf("warning-failure-1", "warning-failure-2")) 443 Expect(executeErr).To(MatchError("get-spaces-error")) 444 }) 445 }) 446 447 When("updating the space fails", func() { 448 BeforeEach(func() { 449 fakeCloudControllerClient.GetSpacesReturns( 450 []ccv3.Space{ccv3.Space{GUID: "some-guid"}}, 451 ccv3.Warnings([]string{"warning-1", "warning-2"}), 452 nil, 453 ) 454 fakeCloudControllerClient.UpdateResourceMetadataReturns( 455 ccv3.ResourceMetadata{}, 456 ccv3.Warnings{"set-space"}, 457 errors.New("update-space-error"), 458 ) 459 }) 460 It("returns the error and all warnings", func() { 461 Expect(executeErr).To(HaveOccurred()) 462 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "set-space")) 463 Expect(executeErr).To(MatchError("update-space-error")) 464 }) 465 }) 466 }) 467 }) 468 469 Context("UpdateStackLabelsByStackName", func() { 470 JustBeforeEach(func() { 471 warnings, executeErr = actor.UpdateStackLabelsByStackName(resourceName, labels) 472 }) 473 474 When("there are no client errors", func() { 475 BeforeEach(func() { 476 fakeCloudControllerClient.GetStacksReturns( 477 []ccv3.Stack{ccv3.Stack{GUID: "some-guid"}}, 478 ccv3.Warnings([]string{"warning-1", "warning-2"}), 479 nil, 480 ) 481 fakeCloudControllerClient.UpdateResourceMetadataReturns( 482 ccv3.ResourceMetadata{}, 483 ccv3.Warnings{"set-stack-metadata"}, 484 nil, 485 ) 486 }) 487 488 It("gets the stack", func() { 489 Expect(fakeCloudControllerClient.GetStacksCallCount()).To(Equal(1)) 490 Expect(fakeCloudControllerClient.GetStacksArgsForCall(0)).To(ConsistOf( 491 ccv3.Query{Key: ccv3.NameFilter, Values: []string{resourceName}}, 492 )) 493 }) 494 495 It("sets the stack labels", func() { 496 Expect(fakeCloudControllerClient.UpdateResourceMetadataCallCount()).To(Equal(1)) 497 resourceType, stackGUID, sentMetadata := fakeCloudControllerClient.UpdateResourceMetadataArgsForCall(0) 498 Expect(executeErr).ToNot(HaveOccurred()) 499 Expect(resourceType).To(BeEquivalentTo("stack")) 500 Expect(stackGUID).To(BeEquivalentTo("some-guid")) 501 Expect(sentMetadata.Labels).To(BeEquivalentTo(labels)) 502 }) 503 504 It("aggregates warnings", func() { 505 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "set-stack-metadata")) 506 }) 507 }) 508 509 When("there are client errors", func() { 510 When("fetching the stack fails", func() { 511 BeforeEach(func() { 512 fakeCloudControllerClient.GetStacksReturns( 513 []ccv3.Stack{ccv3.Stack{GUID: "some-guid"}}, 514 ccv3.Warnings([]string{"warning-failure-1", "warning-failure-2"}), 515 errors.New("get-stacks-error"), 516 ) 517 }) 518 519 It("returns the error and all warnings", func() { 520 Expect(executeErr).To(HaveOccurred()) 521 Expect(warnings).To(ConsistOf("warning-failure-1", "warning-failure-2")) 522 Expect(executeErr).To(MatchError("get-stacks-error")) 523 }) 524 }) 525 526 When("updating the stack fails", func() { 527 BeforeEach(func() { 528 fakeCloudControllerClient.GetStacksReturns( 529 []ccv3.Stack{ccv3.Stack{GUID: "some-guid"}}, 530 ccv3.Warnings([]string{"warning-1", "warning-2"}), 531 nil, 532 ) 533 fakeCloudControllerClient.UpdateResourceMetadataReturns( 534 ccv3.ResourceMetadata{}, 535 ccv3.Warnings{"set-stack"}, 536 errors.New("update-stack-error"), 537 ) 538 }) 539 It("returns the error and all warnings", func() { 540 Expect(executeErr).To(HaveOccurred()) 541 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "set-stack")) 542 Expect(executeErr).To(MatchError("update-stack-error")) 543 }) 544 }) 545 }) 546 }) 547 548 Context("UpdateServiceBrokerLabelsByServiceBrokerName", func() { 549 JustBeforeEach(func() { 550 warnings, executeErr = actor.UpdateServiceBrokerLabelsByServiceBrokerName(resourceName, labels) 551 }) 552 553 When("there are no client errors", func() { 554 BeforeEach(func() { 555 fakeCloudControllerClient.GetServiceBrokersReturns( 556 []ccv3.ServiceBroker{{GUID: "some-broker-guid", Name: resourceName}}, 557 []string{"warning-1", "warning-2"}, 558 nil, 559 ) 560 561 fakeCloudControllerClient.UpdateResourceMetadataAsyncReturns( 562 ccv3.JobURL("fake-job-url"), 563 ccv3.Warnings{"set-service-broker-metadata"}, 564 nil, 565 ) 566 567 fakeCloudControllerClient.PollJobReturns(ccv3.Warnings{"poll-job-warning"}, nil) 568 }) 569 570 It("gets the service broker", func() { 571 Expect(executeErr).ToNot(HaveOccurred()) 572 Expect(fakeCloudControllerClient.GetServiceBrokersCallCount()).To(Equal(1)) 573 }) 574 575 It("sets the service-broker labels", func() { 576 Expect(executeErr).ToNot(HaveOccurred()) 577 Expect(fakeCloudControllerClient.UpdateResourceMetadataAsyncCallCount()).To(Equal(1)) 578 resourceType, serviceBrokerGUID, sentMetadata := fakeCloudControllerClient.UpdateResourceMetadataAsyncArgsForCall(0) 579 Expect(resourceType).To(BeEquivalentTo("service-broker")) 580 Expect(serviceBrokerGUID).To(BeEquivalentTo("some-broker-guid")) 581 Expect(sentMetadata.Labels).To(BeEquivalentTo(labels)) 582 }) 583 584 It("polls the job", func() { 585 Expect(executeErr).ToNot(HaveOccurred()) 586 Expect(fakeCloudControllerClient.PollJobCallCount()).To(Equal(1)) 587 Expect(fakeCloudControllerClient.PollJobArgsForCall(0)).To(BeEquivalentTo("fake-job-url")) 588 }) 589 590 It("aggregates warnings", func() { 591 Expect(executeErr).ToNot(HaveOccurred()) 592 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "set-service-broker-metadata", "poll-job-warning")) 593 }) 594 }) 595 596 When("there are client errors", func() { 597 When("fetching the service-broker fails", func() { 598 BeforeEach(func() { 599 fakeCloudControllerClient.GetServiceBrokersReturns( 600 []ccv3.ServiceBroker{}, 601 ccv3.Warnings([]string{"warning-failure-1", "warning-failure-2"}), 602 errors.New("get-service-broker-error"), 603 ) 604 }) 605 606 It("returns the error and all warnings", func() { 607 Expect(warnings).To(ConsistOf("warning-failure-1", "warning-failure-2")) 608 Expect(executeErr).To(MatchError("get-service-broker-error")) 609 }) 610 }) 611 612 When("updating the service-broker fails", func() { 613 BeforeEach(func() { 614 fakeCloudControllerClient.GetServiceBrokersReturns( 615 []ccv3.ServiceBroker{ccv3.ServiceBroker{GUID: "some-guid", Name: resourceName}}, 616 ccv3.Warnings([]string{"warning-1", "warning-2"}), 617 nil, 618 ) 619 fakeCloudControllerClient.UpdateResourceMetadataAsyncReturns( 620 ccv3.JobURL(""), 621 ccv3.Warnings{"set-service-broker"}, 622 errors.New("update-service-broker-error"), 623 ) 624 }) 625 626 It("returns the error and all warnings", func() { 627 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "set-service-broker")) 628 Expect(executeErr).To(MatchError("update-service-broker-error")) 629 }) 630 }) 631 632 When("polling the job fails", func() { 633 BeforeEach(func() { 634 fakeCloudControllerClient.GetServiceBrokersReturns( 635 []ccv3.ServiceBroker{ccv3.ServiceBroker{GUID: "some-guid", Name: resourceName}}, 636 ccv3.Warnings([]string{"warning-1", "warning-2"}), 637 nil, 638 ) 639 fakeCloudControllerClient.UpdateResourceMetadataAsyncReturns( 640 ccv3.JobURL("fake-job-url"), 641 ccv3.Warnings{"set-service-broker-metadata"}, 642 nil, 643 ) 644 645 fakeCloudControllerClient.PollJobReturns( 646 ccv3.Warnings{"another-poll-job-warning"}, 647 errors.New("polling-error"), 648 ) 649 }) 650 651 It("returns the error and all warnings", func() { 652 Expect(warnings).To(ConsistOf("warning-1", "warning-2", "set-service-broker-metadata", "another-poll-job-warning")) 653 Expect(executeErr).To(MatchError("polling-error")) 654 }) 655 }) 656 }) 657 }) 658 659 Context("GetDomainLabels", func() { 660 JustBeforeEach(func() { 661 labels, warnings, executeErr = actor.GetDomainLabels(resourceName) 662 }) 663 664 When("there are no client errors", func() { 665 BeforeEach(func() { 666 fakeCloudControllerClient.GetDomainsReturns( 667 []ccv3.Domain{ccv3.Domain{GUID: "some-guid"}}, 668 ccv3.Warnings([]string{"warning-1", "warning-2"}), 669 nil, 670 ) 671 }) 672 673 It("gets the domain", func() { 674 Expect(fakeCloudControllerClient.GetDomainsCallCount()).To(Equal(1)) 675 Expect(fakeCloudControllerClient.GetDomainsArgsForCall(0)).To(ConsistOf( 676 ccv3.Query{Key: ccv3.NameFilter, Values: []string{resourceName}}, 677 )) 678 }) 679 680 When("there are no labels on a domain", func() { 681 It("returns an empty map", func() { 682 Expect(executeErr).NotTo(HaveOccurred()) 683 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 684 Expect(labels).To(BeEmpty()) 685 }) 686 }) 687 688 When("there are labels", func() { 689 var expectedLabels map[string]types.NullString 690 691 BeforeEach(func() { 692 expectedLabels = map[string]types.NullString{"key1": types.NewNullString("value1"), "key2": types.NewNullString("value2")} 693 fakeCloudControllerClient.GetDomainsReturns( 694 []ccv3.Domain{ccv3.Domain{ 695 GUID: "some-guid", 696 Metadata: &ccv3.Metadata{ 697 Labels: expectedLabels, 698 }}}, 699 ccv3.Warnings([]string{"warning-1", "warning-2"}), 700 nil, 701 ) 702 }) 703 It("returns the labels", func() { 704 Expect(executeErr).NotTo(HaveOccurred()) 705 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 706 Expect(labels).To(Equal(expectedLabels)) 707 }) 708 }) 709 }) 710 711 When("there is a client error", func() { 712 BeforeEach(func() { 713 fakeCloudControllerClient.GetDomainsReturns( 714 []ccv3.Domain{ccv3.Domain{GUID: "some-guid"}}, 715 ccv3.Warnings([]string{"warning-1", "warning-2"}), 716 errors.New("get-domains-error"), 717 ) 718 }) 719 When("GetDomainByName fails", func() { 720 It("returns the error and all warnings", func() { 721 Expect(executeErr).To(HaveOccurred()) 722 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 723 Expect(executeErr).To(MatchError("get-domains-error")) 724 }) 725 }) 726 }) 727 }) 728 729 Context("GetRouteLabels", func() { 730 JustBeforeEach(func() { 731 labels, warnings, executeErr = actor.GetRouteLabels("sub.example.com/my-route/path", spaceGUID) 732 }) 733 734 When("there are no client errors", func() { 735 BeforeEach(func() { 736 fakeCloudControllerClient.GetDomainsReturns( 737 []ccv3.Domain{ 738 {Name: "domain-name", GUID: "domain-guid"}, 739 }, 740 ccv3.Warnings{"get-domains-warning"}, 741 nil, 742 ) 743 744 fakeCloudControllerClient.GetRoutesReturns( 745 []ccv3.Route{ 746 {GUID: "route-guid", SpaceGUID: "some-space-guid", DomainGUID: "domain-guid", Host: "hostname", URL: "hostname.domain-name", Path: "/the-path"}, 747 }, 748 ccv3.Warnings([]string{"warning-1", "warning-2"}), 749 nil, 750 ) 751 }) 752 753 It("gets the route", func() { 754 Expect(fakeCloudControllerClient.GetRoutesCallCount()).To(Equal(1)) 755 Expect(fakeCloudControllerClient.GetRoutesArgsForCall(0)).To(ConsistOf( 756 ccv3.Query{Key: ccv3.SpaceGUIDFilter, Values: []string{spaceGUID}}, 757 ccv3.Query{Key: ccv3.DomainGUIDFilter, Values: []string{"domain-guid"}}, 758 ccv3.Query{Key: ccv3.HostsFilter, Values: []string{""}}, 759 ccv3.Query{Key: ccv3.PathsFilter, Values: []string{"/my-route/path"}}, 760 )) 761 }) 762 763 When("there are no labels on a route", func() { 764 It("returns an empty map", func() { 765 Expect(executeErr).NotTo(HaveOccurred()) 766 Expect(warnings).To(ConsistOf("get-domains-warning", "warning-1", "warning-2")) 767 Expect(labels).To(BeEmpty()) 768 }) 769 }) 770 771 When("there are labels", func() { 772 var expectedLabels map[string]types.NullString 773 774 BeforeEach(func() { 775 expectedLabels = map[string]types.NullString{"key1": types.NewNullString("value1"), "key2": types.NewNullString("value2")} 776 fakeCloudControllerClient.GetRoutesReturns( 777 []ccv3.Route{ccv3.Route{ 778 GUID: "some-guid", 779 Metadata: &ccv3.Metadata{ 780 Labels: expectedLabels, 781 }}}, 782 ccv3.Warnings([]string{"warning-1", "warning-2"}), 783 nil, 784 ) 785 }) 786 It("returns the labels", func() { 787 Expect(executeErr).NotTo(HaveOccurred()) 788 Expect(warnings).To(ConsistOf("get-domains-warning", "warning-1", "warning-2")) 789 Expect(labels).To(Equal(expectedLabels)) 790 }) 791 }) 792 }) 793 794 When("there is a client error", func() { 795 BeforeEach(func() { 796 fakeCloudControllerClient.GetDomainsReturns( 797 []ccv3.Domain{ 798 {Name: "domain-name", GUID: "domain-guid"}, 799 }, 800 ccv3.Warnings{"get-domains-warning"}, 801 nil, 802 ) 803 804 fakeCloudControllerClient.GetRoutesReturns( 805 []ccv3.Route{ccv3.Route{GUID: "some-guid"}}, 806 ccv3.Warnings([]string{"warning-1", "warning-2"}), 807 errors.New("get-routes-error"), 808 ) 809 }) 810 811 It("returns the error and all warnings", func() { 812 Expect(executeErr).To(HaveOccurred()) 813 Expect(warnings).To(ConsistOf("get-domains-warning", "warning-1", "warning-2")) 814 Expect(executeErr).To(MatchError("get-routes-error")) 815 }) 816 }) 817 }) 818 819 Context("GetStackLabels", func() { 820 JustBeforeEach(func() { 821 labels, warnings, executeErr = actor.GetStackLabels(resourceName) 822 }) 823 824 When("there are no client errors", func() { 825 BeforeEach(func() { 826 fakeCloudControllerClient.GetStacksReturns( 827 []ccv3.Stack{ccv3.Stack{GUID: "some-guid"}}, 828 ccv3.Warnings([]string{"warning-1", "warning-2"}), 829 nil, 830 ) 831 }) 832 833 It("gets the stack", func() { 834 Expect(fakeCloudControllerClient.GetStacksCallCount()).To(Equal(1)) 835 Expect(fakeCloudControllerClient.GetStacksArgsForCall(0)).To(ConsistOf( 836 ccv3.Query{Key: ccv3.NameFilter, Values: []string{resourceName}}, 837 )) 838 }) 839 840 When("there are no labels on a stack", func() { 841 It("returns an empty map", func() { 842 Expect(executeErr).NotTo(HaveOccurred()) 843 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 844 Expect(labels).To(BeEmpty()) 845 }) 846 }) 847 848 When("there are labels", func() { 849 var expectedLabels map[string]types.NullString 850 851 BeforeEach(func() { 852 expectedLabels = map[string]types.NullString{"key1": types.NewNullString("value1"), "key2": types.NewNullString("value2")} 853 fakeCloudControllerClient.GetStacksReturns( 854 []ccv3.Stack{ccv3.Stack{ 855 GUID: "some-guid", 856 Metadata: &ccv3.Metadata{ 857 Labels: expectedLabels, 858 }}}, 859 ccv3.Warnings([]string{"warning-1", "warning-2"}), 860 nil, 861 ) 862 }) 863 It("returns the labels", func() { 864 Expect(executeErr).NotTo(HaveOccurred()) 865 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 866 Expect(labels).To(Equal(expectedLabels)) 867 }) 868 }) 869 }) 870 871 When("there is a client error", func() { 872 BeforeEach(func() { 873 fakeCloudControllerClient.GetStacksReturns( 874 []ccv3.Stack{ccv3.Stack{GUID: "some-guid"}}, 875 ccv3.Warnings([]string{"warning-1", "warning-2"}), 876 errors.New("get-stacks-error"), 877 ) 878 }) 879 When("GetStackByName fails", func() { 880 It("returns the error and all warnings", func() { 881 Expect(executeErr).To(HaveOccurred()) 882 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 883 Expect(executeErr).To(MatchError("get-stacks-error")) 884 }) 885 }) 886 }) 887 }) 888 889 Context("GetServiceBrokerLabels", func() { 890 When("service broker does not exist", func() { 891 BeforeEach(func() { 892 fakeCloudControllerClient.GetServiceBrokersReturns( 893 []ccv3.ServiceBroker{}, 894 []string{"warning-1", "warning-2"}, 895 nil, 896 ) 897 }) 898 899 JustBeforeEach(func() { 900 labels, warnings, executeErr = actor.GetServiceBrokerLabels(resourceName) 901 }) 902 903 It("returns a service broker not found error and warnings", func() { 904 Expect(executeErr).To(HaveOccurred()) 905 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 906 Expect(executeErr.Error()).To(ContainSubstring("Service broker 'some-resource' not found")) 907 }) 908 }) 909 910 When("client returns an error", func() { 911 BeforeEach(func() { 912 fakeCloudControllerClient.GetServiceBrokersReturns( 913 []ccv3.ServiceBroker{}, 914 []string{"warning"}, 915 errors.New("some random error"), 916 ) 917 }) 918 919 JustBeforeEach(func() { 920 labels, warnings, executeErr = actor.GetServiceBrokerLabels(resourceName) 921 }) 922 923 It("returns error and prints warnings", func() { 924 Expect(executeErr).To(HaveOccurred()) 925 Expect(warnings).To(ConsistOf("warning")) 926 Expect(executeErr).To(MatchError("some random error")) 927 }) 928 }) 929 When("service broker has labels", func() { 930 var expectedLabels map[string]types.NullString 931 932 BeforeEach(func() { 933 expectedLabels = map[string]types.NullString{"key1": types.NewNullString("value1"), "key2": types.NewNullString("value2")} 934 fakeCloudControllerClient.GetServiceBrokersReturns( 935 []ccv3.ServiceBroker{ccv3.ServiceBroker{ 936 GUID: "some-guid", 937 Name: resourceName, 938 Metadata: &ccv3.Metadata{ 939 Labels: expectedLabels, 940 }}}, 941 []string{"warning-1", "warning-2"}, 942 nil, 943 ) 944 }) 945 946 JustBeforeEach(func() { 947 labels, warnings, executeErr = actor.GetServiceBrokerLabels(resourceName) 948 }) 949 950 It("returns labels associated with the service broker as well as warnings", func() { 951 Expect(executeErr).ToNot(HaveOccurred()) 952 Expect(warnings).To(ConsistOf("warning-1", "warning-2")) 953 Expect(labels).To(Equal(expectedLabels)) 954 }) 955 }) 956 957 }) 958 })