github.com/lukasheimann/cloudfoundrycli@v7.1.0+incompatible/actor/v7action/space_quota_test.go (about) 1 package v7action_test 2 3 import ( 4 "errors" 5 6 "code.cloudfoundry.org/cli/actor/actionerror" 7 . "code.cloudfoundry.org/cli/actor/v7action" 8 "code.cloudfoundry.org/cli/actor/v7action/v7actionfakes" 9 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3" 10 "code.cloudfoundry.org/cli/resources" 11 "code.cloudfoundry.org/cli/types" 12 . "github.com/onsi/ginkgo" 13 . "github.com/onsi/gomega" 14 ) 15 16 var _ = Describe("Space Quota Actions", func() { 17 var ( 18 actor *Actor 19 fakeCloudControllerClient *v7actionfakes.FakeCloudControllerClient 20 trueValue = true 21 falseValue = true 22 ) 23 24 BeforeEach(func() { 25 actor, fakeCloudControllerClient, _, _, _, _, _ = NewTestActor() 26 }) 27 28 Describe("ApplySpaceQuotaByName", func() { 29 var ( 30 warnings Warnings 31 executeErr error 32 quotaName = "space-quota-name" 33 quotaGUID = "space-quota-guid" 34 spaceGUID = "space-guid" 35 orgGUID = "org-guid" 36 ) 37 38 JustBeforeEach(func() { 39 warnings, executeErr = actor.ApplySpaceQuotaByName(quotaName, spaceGUID, orgGUID) 40 }) 41 42 When("the space quota could not be found", func() { 43 BeforeEach(func() { 44 fakeCloudControllerClient.GetSpaceQuotasReturns( 45 []resources.SpaceQuota{}, 46 ccv3.Warnings{"some-quota-warning"}, 47 nil, 48 ) 49 }) 50 51 It("returns the error and prints warnings", func() { 52 Expect(fakeCloudControllerClient.GetSpaceQuotasCallCount()).To(Equal(1)) 53 Expect(fakeCloudControllerClient.ApplySpaceQuotaCallCount()).To(Equal(0)) 54 55 Expect(warnings).To(ConsistOf("some-quota-warning")) 56 Expect(executeErr).To(MatchError(actionerror.SpaceQuotaNotFoundForNameError{Name: quotaName})) 57 }) 58 }) 59 60 When("applying the quota returns an error", func() { 61 BeforeEach(func() { 62 fakeCloudControllerClient.GetSpaceQuotasReturns( 63 []resources.SpaceQuota{ 64 {Quota: resources.Quota{GUID: "some-quota-guid"}}, 65 }, 66 ccv3.Warnings{"some-quota-warning"}, 67 nil, 68 ) 69 fakeCloudControllerClient.ApplySpaceQuotaReturns( 70 resources.RelationshipList{}, 71 ccv3.Warnings{"apply-quota-warning"}, 72 errors.New("apply-quota-error"), 73 ) 74 }) 75 76 It("returns the error and prints warnings", func() { 77 Expect(fakeCloudControllerClient.GetSpaceQuotasCallCount()).To(Equal(1)) 78 Expect(fakeCloudControllerClient.ApplySpaceQuotaCallCount()).To(Equal(1)) 79 80 Expect(warnings).To(ConsistOf("some-quota-warning", "apply-quota-warning")) 81 Expect(executeErr).To(MatchError("apply-quota-error")) 82 }) 83 }) 84 85 When("the quota is successfully applied to the space", func() { 86 BeforeEach(func() { 87 fakeCloudControllerClient.GetSpaceQuotasReturns( 88 []resources.SpaceQuota{ 89 {Quota: resources.Quota{GUID: quotaGUID}}, 90 }, 91 ccv3.Warnings{"some-quota-warning"}, 92 nil, 93 ) 94 fakeCloudControllerClient.ApplySpaceQuotaReturns( 95 resources.RelationshipList{ 96 GUIDs: []string{orgGUID}, 97 }, 98 ccv3.Warnings{"apply-quota-warning"}, 99 nil, 100 ) 101 }) 102 103 It("returns the error and prints warnings", func() { 104 Expect(fakeCloudControllerClient.GetSpaceQuotasCallCount()).To(Equal(1)) 105 passedQuotaQuery := fakeCloudControllerClient.GetSpaceQuotasArgsForCall(0) 106 Expect(passedQuotaQuery).To(Equal( 107 []ccv3.Query{ 108 { 109 Key: "organization_guids", 110 Values: []string{orgGUID}, 111 }, 112 { 113 Key: "names", 114 Values: []string{quotaName}, 115 }, 116 }, 117 )) 118 119 Expect(fakeCloudControllerClient.ApplySpaceQuotaCallCount()).To(Equal(1)) 120 passedQuotaGUID, passedSpaceGUID := fakeCloudControllerClient.ApplySpaceQuotaArgsForCall(0) 121 Expect(passedQuotaGUID).To(Equal(quotaGUID)) 122 Expect(passedSpaceGUID).To(Equal(spaceGUID)) 123 124 Expect(warnings).To(ConsistOf("some-quota-warning", "apply-quota-warning")) 125 Expect(executeErr).To(BeNil()) 126 }) 127 }) 128 }) 129 130 Describe("CreateSpaceQuota", func() { 131 var ( 132 spaceQuotaName string 133 organizationGuid string 134 warnings Warnings 135 executeErr error 136 limits QuotaLimits 137 ) 138 139 JustBeforeEach(func() { 140 warnings, executeErr = actor.CreateSpaceQuota(spaceQuotaName, organizationGuid, limits) 141 }) 142 143 When("creating a space quota with all values set", func() { 144 BeforeEach(func() { 145 fakeCloudControllerClient.CreateSpaceQuotaReturns(resources.SpaceQuota{}, ccv3.Warnings{"some-quota-warning"}, nil) 146 limits = QuotaLimits{ 147 TotalMemoryInMB: &types.NullInt{IsSet: true, Value: 2}, 148 PerProcessMemoryInMB: &types.NullInt{IsSet: true, Value: 3}, 149 TotalInstances: &types.NullInt{IsSet: true, Value: 4}, 150 PaidServicesAllowed: &trueValue, 151 TotalServiceInstances: &types.NullInt{IsSet: true, Value: 6}, 152 TotalRoutes: &types.NullInt{IsSet: true, Value: 8}, 153 TotalReservedPorts: &types.NullInt{IsSet: true, Value: 9}, 154 } 155 }) 156 157 It("makes the space quota", func() { 158 Expect(executeErr).ToNot(HaveOccurred()) 159 160 Expect(fakeCloudControllerClient.CreateSpaceQuotaCallCount()).To(Equal(1)) 161 givenSpaceQuota := fakeCloudControllerClient.CreateSpaceQuotaArgsForCall(0) 162 163 Expect(givenSpaceQuota).To(Equal(resources.SpaceQuota{ 164 Quota: resources.Quota{ 165 Name: spaceQuotaName, 166 Apps: resources.AppLimit{ 167 TotalMemory: &types.NullInt{IsSet: true, Value: 2}, 168 InstanceMemory: &types.NullInt{IsSet: true, Value: 3}, 169 TotalAppInstances: &types.NullInt{IsSet: true, Value: 4}, 170 }, 171 Services: resources.ServiceLimit{ 172 TotalServiceInstances: &types.NullInt{IsSet: true, Value: 6}, 173 PaidServicePlans: &trueValue, 174 }, 175 Routes: resources.RouteLimit{ 176 TotalRoutes: &types.NullInt{IsSet: true, Value: 8}, 177 TotalReservedPorts: &types.NullInt{IsSet: true, Value: 9}, 178 }, 179 }, 180 OrgGUID: organizationGuid, 181 SpaceGUIDs: nil, 182 })) 183 184 Expect(warnings).To(ConsistOf("some-quota-warning")) 185 }) 186 }) 187 188 When("creating a space quota with empty limits", func() { 189 var ( 190 ccv3Quota resources.SpaceQuota 191 ) 192 193 BeforeEach(func() { 194 spaceQuotaName = "quota-name" 195 limits = QuotaLimits{} 196 197 ccv3Quota = resources.SpaceQuota{ 198 Quota: resources.Quota{ 199 Name: spaceQuotaName, 200 Apps: resources.AppLimit{ 201 TotalMemory: &types.NullInt{Value: 0, IsSet: true}, 202 InstanceMemory: nil, 203 TotalAppInstances: nil, 204 }, 205 Services: resources.ServiceLimit{ 206 TotalServiceInstances: &types.NullInt{Value: 0, IsSet: true}, 207 PaidServicePlans: nil, 208 }, 209 Routes: resources.RouteLimit{ 210 TotalRoutes: &types.NullInt{Value: 0, IsSet: true}, 211 TotalReservedPorts: &types.NullInt{Value: 0, IsSet: true}, 212 }, 213 }, 214 } 215 fakeCloudControllerClient.CreateSpaceQuotaReturns( 216 ccv3Quota, 217 ccv3.Warnings{"some-quota-warning"}, 218 nil, 219 ) 220 }) 221 222 It("call the create endpoint with the respective values and returns warnings", func() { 223 Expect(fakeCloudControllerClient.CreateSpaceQuotaCallCount()).To(Equal(1)) 224 225 Expect(warnings).To(ConsistOf("some-quota-warning")) 226 227 passedQuota := fakeCloudControllerClient.CreateSpaceQuotaArgsForCall(0) 228 Expect(passedQuota).To(Equal(ccv3Quota)) 229 }) 230 }) 231 232 When("creating a quota with all values set to unlimited", func() { 233 var ( 234 ccv3Quota resources.SpaceQuota 235 ) 236 237 BeforeEach(func() { 238 spaceQuotaName = "quota-name" 239 limits = QuotaLimits{ 240 TotalMemoryInMB: &types.NullInt{Value: -1, IsSet: true}, 241 PerProcessMemoryInMB: &types.NullInt{Value: -1, IsSet: true}, 242 TotalInstances: &types.NullInt{Value: -1, IsSet: true}, 243 PaidServicesAllowed: &trueValue, 244 TotalServiceInstances: &types.NullInt{Value: -1, IsSet: true}, 245 TotalRoutes: &types.NullInt{Value: -1, IsSet: true}, 246 TotalReservedPorts: &types.NullInt{Value: -1, IsSet: true}, 247 } 248 ccv3Quota = resources.SpaceQuota{ 249 Quota: resources.Quota{ 250 Name: spaceQuotaName, 251 Apps: resources.AppLimit{ 252 TotalMemory: &types.NullInt{Value: 0, IsSet: false}, 253 InstanceMemory: &types.NullInt{Value: 0, IsSet: false}, 254 TotalAppInstances: &types.NullInt{Value: 0, IsSet: false}, 255 }, 256 Services: resources.ServiceLimit{ 257 TotalServiceInstances: &types.NullInt{Value: 0, IsSet: false}, 258 PaidServicePlans: &trueValue, 259 }, 260 Routes: resources.RouteLimit{ 261 TotalRoutes: &types.NullInt{Value: 0, IsSet: false}, 262 TotalReservedPorts: &types.NullInt{Value: 0, IsSet: false}, 263 }, 264 }, 265 } 266 fakeCloudControllerClient.CreateSpaceQuotaReturns( 267 ccv3Quota, 268 ccv3.Warnings{"some-quota-warning"}, 269 nil, 270 ) 271 }) 272 273 It("call the create endpoint with the respective values and returns warnings", func() { 274 Expect(fakeCloudControllerClient.CreateSpaceQuotaCallCount()).To(Equal(1)) 275 276 Expect(warnings).To(ConsistOf("some-quota-warning")) 277 278 passedQuota := fakeCloudControllerClient.CreateSpaceQuotaArgsForCall(0) 279 Expect(passedQuota).To(Equal(ccv3Quota)) 280 }) 281 }) 282 283 When("creating a quota returns an error", func() { 284 BeforeEach(func() { 285 fakeCloudControllerClient.CreateSpaceQuotaReturns( 286 resources.SpaceQuota{}, 287 ccv3.Warnings{"some-quota-warning"}, 288 errors.New("create-error"), 289 ) 290 }) 291 292 It("returns the error and warnings", func() { 293 Expect(fakeCloudControllerClient.CreateSpaceQuotaCallCount()).To(Equal(1)) 294 295 Expect(warnings).To(ConsistOf("some-quota-warning")) 296 Expect(executeErr).To(MatchError("create-error")) 297 }) 298 }) 299 }) 300 301 Describe("DeleteSpaceQuotaByName", func() { 302 var ( 303 quotaName string 304 orgGUID string 305 warnings Warnings 306 executeErr error 307 ) 308 309 BeforeEach(func() { 310 quotaName = "quota-name" 311 orgGUID = "some-org-guid" 312 313 fakeCloudControllerClient.GetSpaceQuotasReturns( 314 []resources.SpaceQuota{{Quota: resources.Quota{GUID: "some-quota-guid"}}}, 315 ccv3.Warnings{"get-quota-warning"}, 316 nil, 317 ) 318 319 fakeCloudControllerClient.DeleteSpaceQuotaReturns( 320 ccv3.JobURL("some-job-url"), 321 ccv3.Warnings{"delete-quota-warning"}, 322 nil, 323 ) 324 325 fakeCloudControllerClient.PollJobReturns( 326 ccv3.Warnings{"poll-job-warning"}, 327 nil, 328 ) 329 }) 330 331 JustBeforeEach(func() { 332 warnings, executeErr = actor.DeleteSpaceQuotaByName(quotaName, orgGUID) 333 }) 334 335 When("no errors occur", func() { 336 It("retrieves the space quota by name, makes the API call, and polls the deletion job until completion", func() { 337 Expect(executeErr).NotTo(HaveOccurred()) 338 Expect(warnings).To(ConsistOf("get-quota-warning", "delete-quota-warning", "poll-job-warning")) 339 340 Expect(fakeCloudControllerClient.GetSpaceQuotasCallCount()).To(Equal(1)) 341 query := fakeCloudControllerClient.GetSpaceQuotasArgsForCall(0) 342 Expect(query).To(ConsistOf( 343 ccv3.Query{ 344 Key: ccv3.OrganizationGUIDFilter, 345 Values: []string{orgGUID}, 346 }, 347 ccv3.Query{ 348 Key: ccv3.NameFilter, 349 Values: []string{quotaName}, 350 }, 351 )) 352 353 Expect(fakeCloudControllerClient.DeleteSpaceQuotaCallCount()).To(Equal(1)) 354 quotaGUID := fakeCloudControllerClient.DeleteSpaceQuotaArgsForCall(0) 355 Expect(quotaGUID).To(Equal("some-quota-guid")) 356 357 Expect(fakeCloudControllerClient.PollJobCallCount()).To(Equal(1)) 358 inputJobURL := fakeCloudControllerClient.PollJobArgsForCall(0) 359 Expect(inputJobURL).To(Equal(ccv3.JobURL("some-job-url"))) 360 }) 361 }) 362 363 When("there is an error getting the space quota", func() { 364 BeforeEach(func() { 365 fakeCloudControllerClient.GetSpaceQuotasReturns( 366 []resources.SpaceQuota{}, 367 ccv3.Warnings{"get-quota-warning"}, 368 errors.New("get-quota-error"), 369 ) 370 }) 371 372 It("returns warnings and error", func() { 373 Expect(executeErr).To(MatchError("get-quota-error")) 374 Expect(warnings).To(ConsistOf("get-quota-warning")) 375 }) 376 }) 377 378 When("there is an error deleting the space quota", func() { 379 BeforeEach(func() { 380 fakeCloudControllerClient.DeleteSpaceQuotaReturns( 381 "", 382 ccv3.Warnings{"delete-quota-warning"}, 383 errors.New("delete-quota-error"), 384 ) 385 }) 386 387 It("returns warnings and error", func() { 388 Expect(executeErr).To(MatchError("delete-quota-error")) 389 Expect(warnings).To(ConsistOf("get-quota-warning", "delete-quota-warning")) 390 }) 391 }) 392 393 When("there is an error polling the job", func() { 394 BeforeEach(func() { 395 fakeCloudControllerClient.PollJobReturns( 396 ccv3.Warnings{"poll-job-warning"}, 397 errors.New("poll-job-error"), 398 ) 399 }) 400 401 It("returns warnings and error", func() { 402 Expect(executeErr).To(MatchError("poll-job-error")) 403 Expect(warnings).To(ConsistOf("get-quota-warning", "delete-quota-warning", "poll-job-warning")) 404 }) 405 }) 406 }) 407 408 Describe("GetSpaceQuotaByName", func() { 409 var ( 410 quotaName string 411 orgGUID string 412 quota resources.SpaceQuota 413 warnings Warnings 414 executeErr error 415 ) 416 417 BeforeEach(func() { 418 quotaName = "quota-name" 419 orgGUID = "some-org-guid" 420 }) 421 422 JustBeforeEach(func() { 423 quota, warnings, executeErr = actor.GetSpaceQuotaByName(quotaName, orgGUID) 424 }) 425 426 When("when the API layer call returns an error", func() { 427 BeforeEach(func() { 428 fakeCloudControllerClient.GetSpaceQuotasReturns( 429 []resources.SpaceQuota{}, 430 ccv3.Warnings{"some-quota-warning"}, 431 errors.New("list-error"), 432 ) 433 }) 434 435 It("returns the error and prints warnings", func() { 436 Expect(fakeCloudControllerClient.GetSpaceQuotasCallCount()).To(Equal(1)) 437 438 Expect(warnings).To(ConsistOf("some-quota-warning")) 439 Expect(executeErr).To(MatchError("list-error")) 440 Expect(quota).To(Equal(resources.SpaceQuota{})) 441 }) 442 }) 443 444 When("when the space quota could not be found", func() { 445 BeforeEach(func() { 446 fakeCloudControllerClient.GetSpaceQuotasReturns( 447 []resources.SpaceQuota{}, 448 ccv3.Warnings{"some-quota-warning"}, 449 nil, 450 ) 451 }) 452 453 It("returns the error and prints warnings", func() { 454 Expect(fakeCloudControllerClient.GetSpaceQuotasCallCount()).To(Equal(1)) 455 456 Expect(warnings).To(ConsistOf("some-quota-warning")) 457 Expect(executeErr).To(MatchError(actionerror.SpaceQuotaNotFoundForNameError{Name: quotaName})) 458 Expect(quota).To(Equal(resources.SpaceQuota{})) 459 }) 460 }) 461 462 When("getting a single quota by name", func() { 463 BeforeEach(func() { 464 fakeCloudControllerClient.GetSpaceQuotasReturns( 465 []resources.SpaceQuota{ 466 { 467 Quota: resources.Quota{ 468 GUID: "quota-guid", 469 Name: quotaName, 470 }, 471 }, 472 }, 473 ccv3.Warnings{"some-quota-warning"}, 474 nil, 475 ) 476 }) 477 478 It("queries the API and returns the matching space quota", func() { 479 Expect(executeErr).ToNot(HaveOccurred()) 480 481 Expect(fakeCloudControllerClient.GetSpaceQuotasCallCount()).To(Equal(1)) 482 query := fakeCloudControllerClient.GetSpaceQuotasArgsForCall(0) 483 Expect(query).To(ConsistOf( 484 ccv3.Query{Key: ccv3.OrganizationGUIDFilter, Values: []string{orgGUID}}, 485 ccv3.Query{Key: ccv3.NameFilter, Values: []string{quotaName}}, 486 )) 487 488 Expect(warnings).To(ConsistOf("some-quota-warning")) 489 Expect(quota).To(Equal(resources.SpaceQuota{ 490 Quota: resources.Quota{ 491 GUID: "quota-guid", 492 Name: quotaName, 493 }, 494 })) 495 }) 496 }) 497 }) 498 499 Describe("GetSpaceQuotasByOrgGUID", func() { 500 var ( 501 orgGUID string 502 quotas []resources.SpaceQuota 503 warnings Warnings 504 executeErr error 505 ) 506 507 BeforeEach(func() { 508 orgGUID = "org-guid" 509 }) 510 511 JustBeforeEach(func() { 512 quotas, warnings, executeErr = actor.GetSpaceQuotasByOrgGUID(orgGUID) 513 }) 514 515 When("when the API layer call returns an error", func() { 516 BeforeEach(func() { 517 fakeCloudControllerClient.GetSpaceQuotasReturns( 518 []resources.SpaceQuota{}, 519 ccv3.Warnings{"some-quota-warning"}, 520 errors.New("list-error"), 521 ) 522 }) 523 524 It("returns the error and prints warnings", func() { 525 Expect(fakeCloudControllerClient.GetSpaceQuotasCallCount()).To(Equal(1)) 526 527 Expect(warnings).To(ConsistOf("some-quota-warning")) 528 Expect(executeErr).To(MatchError("list-error")) 529 Expect(quotas).To(Equal([]resources.SpaceQuota{})) 530 }) 531 }) 532 533 When("getting all space quotas associated with the same organization", func() { 534 BeforeEach(func() { 535 fakeCloudControllerClient.GetSpaceQuotasReturns( 536 []resources.SpaceQuota{ 537 { 538 Quota: resources.Quota{ 539 GUID: "quota-guid", 540 Name: "quota-beluga", 541 }, 542 OrgGUID: orgGUID, 543 }, 544 { 545 Quota: resources.Quota{ 546 GUID: "quota-2-guid", 547 Name: "quota-manatee", 548 }, 549 OrgGUID: orgGUID, 550 }, 551 }, 552 ccv3.Warnings{"some-quota-warning"}, 553 nil, 554 ) 555 }) 556 557 It("queries the API and returns the matching space quotas", func() { 558 Expect(executeErr).ToNot(HaveOccurred()) 559 560 Expect(fakeCloudControllerClient.GetSpaceQuotasCallCount()).To(Equal(1)) 561 query := fakeCloudControllerClient.GetSpaceQuotasArgsForCall(0) 562 Expect(query).To(ConsistOf( 563 ccv3.Query{Key: ccv3.OrganizationGUIDFilter, Values: []string{orgGUID}}, 564 )) 565 566 Expect(warnings).To(ConsistOf("some-quota-warning")) 567 Expect(quotas).To(ConsistOf( 568 resources.SpaceQuota{ 569 Quota: resources.Quota{ 570 GUID: "quota-guid", 571 Name: "quota-beluga", 572 }, 573 OrgGUID: orgGUID, 574 }, 575 resources.SpaceQuota{ 576 Quota: resources.Quota{ 577 GUID: "quota-2-guid", 578 Name: "quota-manatee", 579 }, 580 OrgGUID: orgGUID, 581 }, 582 )) 583 }) 584 }) 585 }) 586 587 Describe("UpdateSpaceQuota", func() { 588 var ( 589 oldQuotaName string 590 orgGUID string 591 newQuotaName string 592 quotaLimits QuotaLimits 593 warnings Warnings 594 executeErr error 595 ) 596 597 BeforeEach(func() { 598 oldQuotaName = "old-quota-name" 599 orgGUID = "some-org-guid" 600 newQuotaName = "new-quota-name" 601 602 quotaLimits = QuotaLimits{ 603 TotalMemoryInMB: &types.NullInt{Value: 2048, IsSet: true}, 604 PerProcessMemoryInMB: &types.NullInt{Value: 1024, IsSet: true}, 605 TotalInstances: &types.NullInt{Value: 0, IsSet: false}, 606 TotalServiceInstances: &types.NullInt{Value: 0, IsSet: true}, 607 PaidServicesAllowed: &trueValue, 608 TotalRoutes: &types.NullInt{Value: 6, IsSet: true}, 609 TotalReservedPorts: &types.NullInt{Value: 5, IsSet: true}, 610 } 611 612 fakeCloudControllerClient.GetSpaceQuotasReturns( 613 []resources.SpaceQuota{{Quota: resources.Quota{Name: oldQuotaName}}}, 614 ccv3.Warnings{"get-quotas-warning"}, 615 nil, 616 ) 617 }) 618 619 JustBeforeEach(func() { 620 warnings, executeErr = actor.UpdateSpaceQuota(oldQuotaName, orgGUID, newQuotaName, quotaLimits) 621 }) 622 623 When("the update-quota endpoint returns an error", func() { 624 BeforeEach(func() { 625 fakeCloudControllerClient.UpdateSpaceQuotaReturns( 626 resources.SpaceQuota{}, 627 ccv3.Warnings{"update-quota-warning"}, 628 errors.New("update-error"), 629 ) 630 }) 631 632 It("returns the error and warnings", func() { 633 Expect(fakeCloudControllerClient.UpdateSpaceQuotaCallCount()).To(Equal(1)) 634 635 Expect(warnings).To(ConsistOf("get-quotas-warning", "update-quota-warning")) 636 Expect(executeErr).To(MatchError("update-error")) 637 }) 638 }) 639 640 When("no quota limits are being updated", func() { 641 var ( 642 ccv3Quota resources.SpaceQuota 643 ) 644 645 BeforeEach(func() { 646 quotaLimits = QuotaLimits{} 647 648 ccv3Quota = resources.SpaceQuota{ 649 Quota: resources.Quota{ 650 Name: oldQuotaName, 651 Apps: resources.AppLimit{ 652 TotalMemory: nil, 653 InstanceMemory: nil, 654 TotalAppInstances: nil, 655 }, 656 Services: resources.ServiceLimit{ 657 TotalServiceInstances: nil, 658 PaidServicePlans: nil, 659 }, 660 Routes: resources.RouteLimit{ 661 TotalRoutes: nil, 662 TotalReservedPorts: nil, 663 }, 664 }, 665 } 666 667 fakeCloudControllerClient.UpdateSpaceQuotaReturns( 668 ccv3Quota, 669 ccv3.Warnings{"update-quota-warning"}, 670 nil, 671 ) 672 }) 673 674 It("calls the update endpoint with the respective values and returns warnings", func() { 675 Expect(fakeCloudControllerClient.UpdateSpaceQuotaCallCount()).To(Equal(1)) 676 677 Expect(warnings).To(ConsistOf("get-quotas-warning", "update-quota-warning")) 678 679 passedQuota := fakeCloudControllerClient.UpdateSpaceQuotaArgsForCall(0) 680 681 updatedQuota := ccv3Quota 682 updatedQuota.Name = newQuotaName 683 684 Expect(passedQuota).To(Equal(updatedQuota)) 685 }) 686 }) 687 688 When("the update space quota has all values set to unlimited", func() { 689 var ( 690 ccv3Quota resources.SpaceQuota 691 ) 692 693 BeforeEach(func() { 694 quotaLimits = QuotaLimits{ 695 TotalMemoryInMB: &types.NullInt{Value: -1, IsSet: true}, 696 PerProcessMemoryInMB: &types.NullInt{Value: -1, IsSet: true}, 697 TotalInstances: &types.NullInt{Value: -1, IsSet: true}, 698 PaidServicesAllowed: &falseValue, 699 TotalServiceInstances: &types.NullInt{Value: -1, IsSet: true}, 700 TotalRoutes: &types.NullInt{Value: -1, IsSet: true}, 701 TotalReservedPorts: &types.NullInt{Value: -1, IsSet: true}, 702 } 703 704 ccv3Quota = resources.SpaceQuota{ 705 Quota: resources.Quota{ 706 Name: oldQuotaName, 707 Apps: resources.AppLimit{ 708 TotalMemory: &types.NullInt{Value: 0, IsSet: false}, 709 InstanceMemory: &types.NullInt{Value: 0, IsSet: false}, 710 TotalAppInstances: &types.NullInt{Value: 0, IsSet: false}, 711 }, 712 Services: resources.ServiceLimit{ 713 TotalServiceInstances: &types.NullInt{Value: 0, IsSet: false}, 714 PaidServicePlans: &falseValue, 715 }, 716 Routes: resources.RouteLimit{ 717 TotalRoutes: &types.NullInt{Value: 0, IsSet: false}, 718 TotalReservedPorts: &types.NullInt{Value: 0, IsSet: false}, 719 }, 720 }, 721 } 722 723 fakeCloudControllerClient.UpdateSpaceQuotaReturns( 724 ccv3Quota, 725 ccv3.Warnings{"update-quota-warning"}, 726 nil, 727 ) 728 }) 729 730 It("calls the update endpoint with the respective values and returns warnings", func() { 731 Expect(fakeCloudControllerClient.UpdateSpaceQuotaCallCount()).To(Equal(1)) 732 733 Expect(warnings).To(ConsistOf("get-quotas-warning", "update-quota-warning")) 734 735 passedQuota := fakeCloudControllerClient.UpdateSpaceQuotaArgsForCall(0) 736 737 updatedQuota := ccv3Quota 738 updatedQuota.Name = newQuotaName 739 740 Expect(passedQuota).To(Equal(updatedQuota)) 741 }) 742 }) 743 744 When("The update space quota endpoint succeeds", func() { 745 var ( 746 ccv3Quota resources.SpaceQuota 747 ) 748 749 BeforeEach(func() { 750 ccv3Quota = resources.SpaceQuota{ 751 Quota: resources.Quota{ 752 Name: oldQuotaName, 753 Apps: resources.AppLimit{ 754 TotalMemory: &types.NullInt{Value: 2048, IsSet: true}, 755 InstanceMemory: &types.NullInt{Value: 1024, IsSet: true}, 756 TotalAppInstances: &types.NullInt{Value: 0, IsSet: false}, 757 }, 758 Services: resources.ServiceLimit{ 759 TotalServiceInstances: &types.NullInt{Value: 0, IsSet: true}, 760 PaidServicePlans: &trueValue, 761 }, 762 Routes: resources.RouteLimit{ 763 TotalRoutes: &types.NullInt{Value: 6, IsSet: true}, 764 TotalReservedPorts: &types.NullInt{Value: 5, IsSet: true}, 765 }, 766 }, 767 } 768 769 fakeCloudControllerClient.UpdateSpaceQuotaReturns( 770 ccv3Quota, 771 ccv3.Warnings{"update-quota-warning"}, 772 nil, 773 ) 774 }) 775 776 It("calls the update endpoint with the respective values and returns warnings", func() { 777 Expect(fakeCloudControllerClient.UpdateSpaceQuotaCallCount()).To(Equal(1)) 778 779 Expect(warnings).To(ConsistOf("get-quotas-warning", "update-quota-warning")) 780 781 passedQuota := fakeCloudControllerClient.UpdateSpaceQuotaArgsForCall(0) 782 783 updatedQuota := ccv3Quota 784 updatedQuota.Name = newQuotaName 785 786 Expect(passedQuota).To(Equal(updatedQuota)) 787 }) 788 }) 789 790 When("the space quota name is not being updated", func() { 791 var ( 792 ccv3Quota resources.SpaceQuota 793 ) 794 795 BeforeEach(func() { 796 newQuotaName = "" 797 798 ccv3Quota = resources.SpaceQuota{ 799 Quota: resources.Quota{ 800 Name: oldQuotaName, 801 Apps: resources.AppLimit{ 802 TotalMemory: &types.NullInt{Value: 2048, IsSet: true}, 803 InstanceMemory: &types.NullInt{Value: 1024, IsSet: true}, 804 TotalAppInstances: &types.NullInt{Value: 0, IsSet: false}, 805 }, 806 Services: resources.ServiceLimit{ 807 TotalServiceInstances: &types.NullInt{Value: 0, IsSet: true}, 808 PaidServicePlans: &trueValue, 809 }, 810 Routes: resources.RouteLimit{ 811 TotalRoutes: &types.NullInt{Value: 6, IsSet: true}, 812 TotalReservedPorts: &types.NullInt{Value: 5, IsSet: true}, 813 }, 814 }, 815 } 816 817 fakeCloudControllerClient.UpdateSpaceQuotaReturns( 818 ccv3Quota, 819 ccv3.Warnings{"update-quota-warning"}, 820 nil, 821 ) 822 }) 823 It("uses the current space quota name in the API request", func() { 824 Expect(executeErr).NotTo(HaveOccurred()) 825 inputQuota := fakeCloudControllerClient.UpdateSpaceQuotaArgsForCall(0) 826 Expect(inputQuota.Name).To(Equal("old-quota-name")) 827 }) 828 }) 829 }) 830 831 Describe("UnsetSpaceQuota", func() { 832 var ( 833 spaceQuotaName string 834 orgGUID string 835 spaceName string 836 warnings Warnings 837 executeErr error 838 ) 839 840 BeforeEach(func() { 841 spaceQuotaName = "some-quota-name" 842 orgGUID = "some-org-guid" 843 spaceName = "some-space-name" 844 845 fakeCloudControllerClient.GetSpaceQuotasReturns( 846 []resources.SpaceQuota{{Quota: resources.Quota{Name: spaceQuotaName}}}, 847 ccv3.Warnings{"get-quotas-warning"}, 848 nil, 849 ) 850 851 fakeCloudControllerClient.GetSpacesReturns( 852 []resources.Space{{Name: spaceName}}, 853 ccv3.IncludedResources{}, 854 ccv3.Warnings{"get-spaces-warning"}, 855 nil, 856 ) 857 }) 858 859 JustBeforeEach(func() { 860 warnings, executeErr = actor.UnsetSpaceQuota(spaceQuotaName, spaceName, orgGUID) 861 }) 862 863 When("getting the space fails", func() { 864 When("no space with that name exists", func() { 865 BeforeEach(func() { 866 fakeCloudControllerClient.GetSpacesReturns( 867 []resources.Space{}, 868 ccv3.IncludedResources{}, 869 ccv3.Warnings{"get-spaces-warning"}, 870 nil, 871 ) 872 }) 873 874 It("returns the error and prints warnings", func() { 875 Expect(fakeCloudControllerClient.GetSpacesCallCount()).To(Equal(1)) 876 877 Expect(warnings).To(ContainElement("get-spaces-warning")) 878 Expect(executeErr).To(MatchError(actionerror.SpaceNotFoundError{Name: spaceName})) 879 }) 880 }) 881 882 When("getting the space returns an error", func() { 883 BeforeEach(func() { 884 fakeCloudControllerClient.GetSpacesReturns( 885 []resources.Space{}, 886 ccv3.IncludedResources{}, 887 ccv3.Warnings{"get-spaces-warning"}, 888 errors.New("some-get-spaces-error"), 889 ) 890 }) 891 892 It("returns the error and prints warnings", func() { 893 Expect(fakeCloudControllerClient.GetSpacesCallCount()).To(Equal(1)) 894 895 Expect(warnings).To(ContainElement("get-spaces-warning")) 896 Expect(executeErr).To(MatchError("some-get-spaces-error")) 897 }) 898 }) 899 }) 900 901 When("getting the space quota fails", func() { 902 When("no space with that name exists", func() { 903 904 BeforeEach(func() { 905 fakeCloudControllerClient.GetSpaceQuotasReturns( 906 []resources.SpaceQuota{}, 907 ccv3.Warnings{"get-quota-warning"}, 908 nil, 909 ) 910 }) 911 912 It("returns the error and prints warnings", func() { 913 Expect(fakeCloudControllerClient.GetSpacesCallCount()).To(Equal(1)) 914 915 Expect(warnings).To(ContainElement("get-quota-warning")) 916 Expect(executeErr).To(MatchError(actionerror.SpaceQuotaNotFoundForNameError{Name: spaceQuotaName})) 917 }) 918 }) 919 920 When("getting the space returns an error", func() { 921 922 BeforeEach(func() { 923 fakeCloudControllerClient.GetSpaceQuotasReturns( 924 []resources.SpaceQuota{}, 925 ccv3.Warnings{"get-quota-warning"}, 926 errors.New("some-get-quotas-error"), 927 ) 928 }) 929 930 It("returns the error and prints warnings", func() { 931 Expect(fakeCloudControllerClient.GetSpacesCallCount()).To(Equal(1)) 932 933 Expect(warnings).To(ContainElement("get-quota-warning")) 934 Expect(executeErr).To(MatchError("some-get-quotas-error")) 935 }) 936 }) 937 }) 938 939 When("unsetting the space quota fails", func() { 940 BeforeEach(func() { 941 fakeCloudControllerClient.UnsetSpaceQuotaReturns( 942 ccv3.Warnings{"unset-quota-warning"}, 943 errors.New("some-unset-error"), 944 ) 945 }) 946 947 It("returns the error and prints warnings", func() { 948 Expect(warnings).To(ConsistOf("unset-quota-warning", "get-spaces-warning", "get-quotas-warning")) 949 Expect(executeErr).To(MatchError("some-unset-error")) 950 }) 951 }) 952 953 }) 954 955 })