/*
* Copyright 2013-2017 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.cloudfoundry.reactor.client.v2.spacequotadefinitions;
import org.cloudfoundry.client.v2.Metadata;
import org.cloudfoundry.client.v2.jobs.JobEntity;
import org.cloudfoundry.client.v2.spacequotadefinitions.AssociateSpaceQuotaDefinitionRequest;
import org.cloudfoundry.client.v2.spacequotadefinitions.AssociateSpaceQuotaDefinitionResponse;
import org.cloudfoundry.client.v2.spacequotadefinitions.CreateSpaceQuotaDefinitionRequest;
import org.cloudfoundry.client.v2.spacequotadefinitions.CreateSpaceQuotaDefinitionResponse;
import org.cloudfoundry.client.v2.spacequotadefinitions.DeleteSpaceQuotaDefinitionRequest;
import org.cloudfoundry.client.v2.spacequotadefinitions.DeleteSpaceQuotaDefinitionResponse;
import org.cloudfoundry.client.v2.spacequotadefinitions.GetSpaceQuotaDefinitionRequest;
import org.cloudfoundry.client.v2.spacequotadefinitions.GetSpaceQuotaDefinitionResponse;
import org.cloudfoundry.client.v2.spacequotadefinitions.ListSpaceQuotaDefinitionSpacesRequest;
import org.cloudfoundry.client.v2.spacequotadefinitions.ListSpaceQuotaDefinitionSpacesResponse;
import org.cloudfoundry.client.v2.spacequotadefinitions.ListSpaceQuotaDefinitionsRequest;
import org.cloudfoundry.client.v2.spacequotadefinitions.ListSpaceQuotaDefinitionsResponse;
import org.cloudfoundry.client.v2.spacequotadefinitions.RemoveSpaceQuotaDefinitionRequest;
import org.cloudfoundry.client.v2.spacequotadefinitions.SpaceQuotaDefinitionEntity;
import org.cloudfoundry.client.v2.spacequotadefinitions.SpaceQuotaDefinitionResource;
import org.cloudfoundry.client.v2.spacequotadefinitions.UpdateSpaceQuotaDefinitionRequest;
import org.cloudfoundry.client.v2.spacequotadefinitions.UpdateSpaceQuotaDefinitionResponse;
import org.cloudfoundry.client.v2.spaces.SpaceEntity;
import org.cloudfoundry.client.v2.spaces.SpaceResource;
import org.cloudfoundry.reactor.InteractionContext;
import org.cloudfoundry.reactor.TestRequest;
import org.cloudfoundry.reactor.TestResponse;
import org.cloudfoundry.reactor.client.AbstractClientApiTest;
import org.junit.Test;
import reactor.test.StepVerifier;
import java.time.Duration;
import static io.netty.handler.codec.http.HttpMethod.DELETE;
import static io.netty.handler.codec.http.HttpMethod.GET;
import static io.netty.handler.codec.http.HttpMethod.POST;
import static io.netty.handler.codec.http.HttpMethod.PUT;
import static io.netty.handler.codec.http.HttpResponseStatus.ACCEPTED;
import static io.netty.handler.codec.http.HttpResponseStatus.CREATED;
import static io.netty.handler.codec.http.HttpResponseStatus.NO_CONTENT;
import static io.netty.handler.codec.http.HttpResponseStatus.OK;
public final class ReactorSpaceQuotaDefinitionsTest extends AbstractClientApiTest {
private final ReactorSpaceQuotaDefinitions spaceQuotaDefinitions = new ReactorSpaceQuotaDefinitions(CONNECTION_CONTEXT, this.root, TOKEN_PROVIDER);
@Test
public void associateSpace() {
mockRequest(InteractionContext.builder()
.request(TestRequest.builder()
.method(PUT).path("/v2/space_quota_definitions/test-space-quota-definition-id/spaces/test-space-id")
.build())
.response(TestResponse.builder()
.status(OK)
.payload("fixtures/client/v2/space_quota_definitions/PUT_{id}_spaces_{id}_response.json")
.build())
.build());
this.spaceQuotaDefinitions
.associateSpace(AssociateSpaceQuotaDefinitionRequest.builder()
.spaceId("test-space-id")
.spaceQuotaDefinitionId("test-space-quota-definition-id")
.build())
.as(StepVerifier::create)
.expectNext(AssociateSpaceQuotaDefinitionResponse.builder()
.metadata(Metadata.builder()
.id("ea82f16c-c21a-4a8a-947a-f7606e7f63fa")
.url("/v2/space_quota_definitions/ea82f16c-c21a-4a8a-947a-f7606e7f63fa")
.createdAt("2015-11-30T23:38:46Z")
.build())
.entity(SpaceQuotaDefinitionEntity.builder()
.name("name-1887")
.organizationId("e188543a-cb71-4786-8703-9addbebc5bbf")
.nonBasicServicesAllowed(true)
.totalServices(60)
.totalRoutes(1000)
.memoryLimit(20480)
.instanceMemoryLimit(-1)
.applicationInstanceLimit(-1)
.organizationUrl("/v2/organizations/e188543a-cb71-4786-8703-9addbebc5bbf")
.spacesUrl("/v2/space_quota_definitions/ea82f16c-c21a-4a8a-947a-f7606e7f63fa/spaces")
.build())
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void create() {
mockRequest(InteractionContext.builder()
.request(TestRequest.builder()
.method(POST).path("/v2/space_quota_definitions")
.payload("fixtures/client/v2/space_quota_definitions/POST_request.json")
.build())
.response(TestResponse.builder()
.status(CREATED)
.payload("fixtures/client/v2/space_quota_definitions/POST_response.json")
.build())
.build());
this.spaceQuotaDefinitions
.create(CreateSpaceQuotaDefinitionRequest.builder()
.name("gold_quota")
.nonBasicServicesAllowed(true)
.totalServices(-1)
.totalRoutes(10)
.memoryLimit(5120)
.organizationId("c9b4ac17-ab4b-4368-b3e2-5cbf09b17a24")
.totalReservedRoutePorts(5)
.build())
.as(StepVerifier::create)
.expectNext(CreateSpaceQuotaDefinitionResponse.builder()
.metadata(Metadata.builder()
.id("17f055b8-b4c8-47cf-8737-0220d5706b4a")
.url("/v2/space_quota_definitions/17f055b8-b4c8-47cf-8737-0220d5706b4a")
.createdAt("2016-06-08T16:41:29Z")
.build())
.entity(SpaceQuotaDefinitionEntity.builder()
.name("gold_quota")
.organizationId("c9b4ac17-ab4b-4368-b3e2-5cbf09b17a24")
.nonBasicServicesAllowed(true)
.totalServices(-1)
.totalRoutes(10)
.memoryLimit(5120)
.instanceMemoryLimit(-1)
.applicationInstanceLimit(-1)
.applicationTaskLimit(5)
.totalServiceKeys(-1)
.totalReservedRoutePorts(5)
.organizationUrl("/v2/organizations/c9b4ac17-ab4b-4368-b3e2-5cbf09b17a24")
.spacesUrl("/v2/space_quota_definitions/17f055b8-b4c8-47cf-8737-0220d5706b4a/spaces")
.build())
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void delete() {
mockRequest(InteractionContext.builder()
.request(TestRequest.builder()
.method(DELETE).path("/v2/space_quota_definitions/test-space-quota-definition-id")
.build())
.response(TestResponse.builder()
.status(NO_CONTENT)
.build())
.build());
this.spaceQuotaDefinitions
.delete(DeleteSpaceQuotaDefinitionRequest.builder()
.spaceQuotaDefinitionId("test-space-quota-definition-id")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void deleteAsync() {
mockRequest(InteractionContext.builder()
.request(TestRequest.builder()
.method(DELETE).path("/v2/space_quota_definitions/test-space-quota-definition-id?async=true")
.build())
.response(TestResponse.builder()
.status(ACCEPTED)
.payload("fixtures/client/v2/space_quota_definitions/DELETE_{id}_async_response.json")
.build())
.build());
this.spaceQuotaDefinitions
.delete(DeleteSpaceQuotaDefinitionRequest.builder()
.spaceQuotaDefinitionId("test-space-quota-definition-id")
.async(true)
.build())
.as(StepVerifier::create)
.expectNext(DeleteSpaceQuotaDefinitionResponse.builder()
.metadata(Metadata.builder()
.id("2d9707ba-6f0b-4aef-a3de-fe9bdcf0c9d1")
.url("/v2/jobs/2d9707ba-6f0b-4aef-a3de-fe9bdcf0c9d1")
.createdAt("2016-02-02T17:16:31Z")
.build())
.entity(JobEntity.builder()
.id("2d9707ba-6f0b-4aef-a3de-fe9bdcf0c9d1")
.status("queued")
.build())
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void getSpaceQuotaDefinition() {
mockRequest(InteractionContext.builder()
.request(TestRequest.builder()
.method(GET).path("/v2/space_quota_definitions/test-space-quota-definition-id")
.build())
.response(TestResponse.builder()
.status(OK)
.payload("fixtures/client/v2/space_quota_definitions/GET_{id}_response.json")
.build())
.build());
this.spaceQuotaDefinitions
.get(GetSpaceQuotaDefinitionRequest.builder()
.spaceQuotaDefinitionId("test-space-quota-definition-id")
.build())
.as(StepVerifier::create)
.expectNext(GetSpaceQuotaDefinitionResponse.builder()
.metadata(Metadata.builder()
.id("4b8e7d14-71bd-4abb-b474-183375c75c84")
.url("/v2/space_quota_definitions/4b8e7d14-71bd-4abb-b474-183375c75c84")
.createdAt("2015-11-30T23:38:46Z")
.build())
.entity(SpaceQuotaDefinitionEntity.builder()
.name("name-1892")
.organizationId("0dbbac8c-16ac-4ba5-8f59-3d3a79874f5d")
.nonBasicServicesAllowed(true)
.totalServices(60)
.totalRoutes(1000)
.memoryLimit(20480)
.instanceMemoryLimit(-1)
.applicationInstanceLimit(-1)
.organizationUrl("/v2/organizations/0dbbac8c-16ac-4ba5-8f59-3d3a79874f5d")
.spacesUrl("/v2/space_quota_definitions/4b8e7d14-71bd-4abb-b474-183375c75c84/spaces")
.build())
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void list() {
mockRequest(InteractionContext.builder()
.request(TestRequest.builder()
.method(GET).path("/v2/space_quota_definitions?page=-1")
.build())
.response(TestResponse.builder()
.status(OK)
.payload("fixtures/client/v2/space_quota_definitions/GET_response.json")
.build())
.build());
this.spaceQuotaDefinitions
.list(ListSpaceQuotaDefinitionsRequest.builder()
.page(-1)
.build())
.as(StepVerifier::create)
.expectNext(ListSpaceQuotaDefinitionsResponse.builder()
.totalResults(1)
.totalPages(1)
.resource(SpaceQuotaDefinitionResource.builder()
.metadata(Metadata.builder()
.id("be2d5c01-3413-43db-bea2-49b0b60ec74d")
.url("/v2/space_quota_definitions/be2d5c01-3413-43db-bea2-49b0b60ec74d")
.createdAt("2015-07-27T22:43:32Z")
.build())
.entity(SpaceQuotaDefinitionEntity.builder()
.name("name-2236")
.organizationId("a81d5218-b473-474e-9afb-3223a8b2ae9f")
.nonBasicServicesAllowed(true)
.totalServices(60)
.totalRoutes(1000)
.memoryLimit(20480)
.instanceMemoryLimit(-1)
.organizationUrl("/v2/organizations/a81d5218-b473-474e-9afb-3223a8b2ae9f")
.spacesUrl
("/v2/space_quota_definitions/be2d5c01-3413-43db-bea2-49b0b60ec74d/spaces")
.build())
.build())
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void listSpaces() {
mockRequest(InteractionContext.builder()
.request(TestRequest.builder()
.method(GET).path("/v2/space_quota_definitions/e37cdd97-af56-4417-a99d-060093057275/spaces")
.build())
.response(TestResponse.builder()
.status(OK)
.payload("fixtures/client/v2/space_quota_definitions/GET_{id}_spaces_response.json")
.build())
.build());
this.spaceQuotaDefinitions
.listSpaces(ListSpaceQuotaDefinitionSpacesRequest.builder()
.spaceQuotaDefinitionId("e37cdd97-af56-4417-a99d-060093057275")
.build())
.as(StepVerifier::create)
.expectNext(ListSpaceQuotaDefinitionSpacesResponse.builder()
.totalResults(1)
.totalPages(1)
.resource(SpaceResource.builder()
.metadata(Metadata.builder()
.createdAt("2016-06-08T16:41:29Z")
.id("a1f21571-07a6-42df-b9c0-501b97fac05b")
.updatedAt("2016-06-08T16:41:29Z")
.url("/v2/spaces/a1f21571-07a6-42df-b9c0-501b97fac05b")
.build())
.entity(SpaceEntity.builder()
.name("name-1473")
.organizationId("e0878e36-e2f3-4290-b7c6-50f825ce6c77")
.organizationUrl("/v2/organizations/e0878e36-e2f3-4290-b7c6-50f825ce6c77")
.spaceQuotaDefinitionId("e37cdd97-af56-4417-a99d-060093057275")
.spaceQuotaDefinitionUrl("/v2/space_quota_definitions/e37cdd97-af56-4417-a99d-060093057275")
.allowSsh(true)
.developersUrl("/v2/spaces/a1f21571-07a6-42df-b9c0-501b97fac05b/developers")
.managersUrl("/v2/spaces/a1f21571-07a6-42df-b9c0-501b97fac05b/managers")
.auditorsUrl("/v2/spaces/a1f21571-07a6-42df-b9c0-501b97fac05b/auditors")
.applicationsUrl("/v2/spaces/a1f21571-07a6-42df-b9c0-501b97fac05b/apps")
.routesUrl("/v2/spaces/a1f21571-07a6-42df-b9c0-501b97fac05b/routes")
.domainsUrl("/v2/spaces/a1f21571-07a6-42df-b9c0-501b97fac05b/domains")
.serviceInstancesUrl("/v2/spaces/a1f21571-07a6-42df-b9c0-501b97fac05b/service_instances")
.applicationEventsUrl("/v2/spaces/a1f21571-07a6-42df-b9c0-501b97fac05b/app_events")
.eventsUrl("/v2/spaces/a1f21571-07a6-42df-b9c0-501b97fac05b/events")
.securityGroupsUrl("/v2/spaces/a1f21571-07a6-42df-b9c0-501b97fac05b/security_groups")
.stagingSecurityGroupsUrl("/v2/spaces/a1f21571-07a6-42df-b9c0-501b97fac05b/staging_security_groups")
.build())
.build())
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void removeSpace() {
mockRequest(InteractionContext.builder()
.request(TestRequest.builder()
.method(DELETE).path("/v2/space_quota_definitions/test-space-quota-definition-id/spaces/test-space-id")
.build())
.response(TestResponse.builder()
.status(NO_CONTENT)
.build())
.build());
this.spaceQuotaDefinitions
.removeSpace(RemoveSpaceQuotaDefinitionRequest.builder()
.spaceId("test-space-id")
.spaceQuotaDefinitionId("test-space-quota-definition-id")
.build())
.as(StepVerifier::create)
.expectComplete()
.verify(Duration.ofSeconds(5));
}
@Test
public void update() {
mockRequest(InteractionContext.builder()
.request(TestRequest.builder()
.method(PUT).path("/v2/space_quota_definitions/bbd837ac-309d-4f53-9d49-67cb75364904")
.payload("fixtures/client/v2/space_quota_definitions/PUT_{id}_request.json")
.build())
.response(TestResponse.builder()
.status(CREATED)
.payload("fixtures/client/v2/space_quota_definitions/PUT_{id}_response.json")
.build())
.build());
this.spaceQuotaDefinitions
.update(UpdateSpaceQuotaDefinitionRequest.builder()
.name("new_name")
.spaceQuotaDefinitionId("bbd837ac-309d-4f53-9d49-67cb75364904")
.build())
.as(StepVerifier::create)
.expectNext(UpdateSpaceQuotaDefinitionResponse.builder()
.metadata(Metadata.builder()
.createdAt("2016-06-08T16:41:29Z")
.id("bbd837ac-309d-4f53-9d49-67cb75364904")
.updatedAt("2016-06-08T16:41:29Z")
.url("/v2/space_quota_definitions/bbd837ac-309d-4f53-9d49-67cb75364904")
.build())
.entity(SpaceQuotaDefinitionEntity.builder()
.applicationInstanceLimit(-1)
.applicationTaskLimit(5)
.instanceMemoryLimit(-1)
.memoryLimit(20480)
.name("new_name")
.nonBasicServicesAllowed(true)
.organizationId("dbd76462-6fec-4add-aaca-35b2ca7493bb")
.organizationUrl("/v2/organizations/dbd76462-6fec-4add-aaca-35b2ca7493bb")
.spacesUrl("/v2/space_quota_definitions/bbd837ac-309d-4f53-9d49-67cb75364904/spaces")
.totalReservedRoutePorts(-1)
.totalRoutes(1000)
.totalServices(60)
.totalServiceKeys(600)
.build())
.build())
.expectComplete()
.verify(Duration.ofSeconds(5));
}
}