/* * 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.domains; import org.cloudfoundry.client.v2.Metadata; import org.cloudfoundry.client.v2.domains.CreateDomainRequest; import org.cloudfoundry.client.v2.domains.CreateDomainResponse; import org.cloudfoundry.client.v2.domains.DeleteDomainRequest; import org.cloudfoundry.client.v2.domains.DeleteDomainResponse; import org.cloudfoundry.client.v2.domains.DomainEntity; import org.cloudfoundry.client.v2.domains.DomainResource; import org.cloudfoundry.client.v2.domains.GetDomainRequest; import org.cloudfoundry.client.v2.domains.GetDomainResponse; import org.cloudfoundry.client.v2.domains.ListDomainSpacesRequest; import org.cloudfoundry.client.v2.domains.ListDomainSpacesResponse; import org.cloudfoundry.client.v2.domains.ListDomainsRequest; import org.cloudfoundry.client.v2.domains.ListDomainsResponse; import org.cloudfoundry.client.v2.jobs.JobEntity; 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 java.util.Collections; 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.HttpResponseStatus.ACCEPTED; import static io.netty.handler.codec.http.HttpResponseStatus.NO_CONTENT; import static io.netty.handler.codec.http.HttpResponseStatus.OK; public final class ReactorDomainsTest extends AbstractClientApiTest { private final ReactorDomains domains = new ReactorDomains(CONNECTION_CONTEXT, this.root, TOKEN_PROVIDER); @Test public void create() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() .method(POST).path("/v2/domains") .payload("fixtures/client/v2/domains/POST_request.json") .build()) .response(TestResponse.builder() .status(OK) .payload("fixtures/client/v2/domains/POST_response.json") .build()) .build()); this.domains .create(CreateDomainRequest.builder() .name("exmaple.com") .owningOrganizationId("09e0d56f-4e50-4bff-af83-9bd87a7d7f00") .wildcard(true) .build()) .as(StepVerifier::create) .expectNext(CreateDomainResponse.builder() .metadata(Metadata.builder() .id("abb8338f-eaea-4149-85c0-61888bac0737") .url("/v2/domains/abb8338f-eaea-4149-85c0-61888bac0737") .createdAt("2015-07-27T22:43:33Z") .build()) .entity(DomainEntity.builder() .name("exmaple.com") .owningOrganizationId("09e0d56f-4e50-4bff-af83-9bd87a7d7f00") .owningOrganizationUrl("/v2/organizations/09e0d56f-4e50-4bff-af83-9bd87a7d7f00") .sharedOrganizations(Collections.emptyList()) .spacesUrl("/v2/domains/abb8338f-eaea-4149-85c0-61888bac0737/spaces") .build()) .build()) .expectComplete() .verify(Duration.ofSeconds(5)); } @Test public void delete() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() .method(DELETE).path("/v2/domains/test-domain-id") .build()) .response(TestResponse.builder() .status(NO_CONTENT) .build()) .build()); this.domains .delete(DeleteDomainRequest.builder() .domainId("test-domain-id") .build()) .as(StepVerifier::create) .expectComplete() .verify(Duration.ofSeconds(5)); } @Test public void deleteAsync() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() .method(DELETE).path("/v2/domains/test-domain-id?async=true") .build()) .response(TestResponse.builder() .status(ACCEPTED) .payload("fixtures/client/v2/domains/DELETE_{id}_async_response.json") .build()) .build()); this.domains .delete(DeleteDomainRequest.builder() .async(true) .domainId("test-domain-id") .build()) .as(StepVerifier::create) .expectNext(DeleteDomainResponse.builder() .metadata(Metadata.builder() .id("2d9707ba-6f0b-4aef-a3de-fe9bdcf0c9d1") .createdAt("2016-02-02T17:16:31Z") .url("/v2/jobs/2d9707ba-6f0b-4aef-a3de-fe9bdcf0c9d1") .build()) .entity(JobEntity.builder() .id("2d9707ba-6f0b-4aef-a3de-fe9bdcf0c9d1") .status("queued") .build()) .build()) .expectComplete() .verify(Duration.ofSeconds(5)); } @Test public void get() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() .method(GET).path("/v2/domains/test-domain-id") .build()) .response(TestResponse.builder() .status(OK) .payload("fixtures/client/v2/domains/GET_{id}_response.json") .build()) .build()); this.domains .get(GetDomainRequest.builder() .domainId("test-domain-id") .build()) .as(StepVerifier::create) .expectNext(GetDomainResponse.builder() .metadata(Metadata.builder() .id("7cd249aa-197c-425c-8831-57cbc24e8e26") .url("/v2/domains/7cd249aa-197c-425c-8831-57cbc24e8e26") .createdAt("2015-07-27T22:43:33Z") .build()) .entity(DomainEntity.builder() .name("domain-63.example.com") .build()) .build()) .expectComplete() .verify(Duration.ofSeconds(5)); } @Test public void listDomains() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() .method(GET).path("/v2/domains?page=-1") .build()) .response(TestResponse.builder() .status(OK) .payload("fixtures/client/v2/domains/GET_response.json") .build()) .build()); this.domains .list(ListDomainsRequest.builder() .page(-1) .build()) .as(StepVerifier::create) .expectNext(ListDomainsResponse.builder() .totalResults(4) .totalPages(1) .resource(DomainResource.builder() .metadata(Metadata.builder() .id("c8e670ff-2473-4e21-8047-afc6e0c62ce7") .url("/v2/domains/c8e670ff-2473-4e21-8047-afc6e0c62ce7") .createdAt("2015-07-27T22:43:31Z") .build()) .entity(DomainEntity.builder() .name("customer-app-domain1.com") .build()) .build()) .resource(DomainResource.builder() .metadata(Metadata.builder() .id("2b63d3fa-52e9-4f12-87d1-a96af5bd3cd4") .url("/v2/domains/2b63d3fa-52e9-4f12-87d1-a96af5bd3cd4") .createdAt("2015-07-27T22:43:31Z") .build()) .entity(DomainEntity.builder() .name("customer-app-domain2.com") .build()) .build()) .resource(DomainResource.builder() .metadata(Metadata.builder() .id("2c60a78c-0f6e-4ef8-81db-f3a6cb5e31da") .url("/v2/domains/2c60a78c-0f6e-4ef8-81db-f3a6cb5e31da") .createdAt("2015-07-27T22:43:31Z") .build()) .entity(DomainEntity.builder() .name("vcap.me") .owningOrganizationId("f93d5a41-5d35-4e21-ac32-421dfd545d3c") .owningOrganizationUrl("/v2/organizations/f93d5a41-5d35-4e21-ac32-421dfd545d3c") .spacesUrl("/v2/domains/2c60a78c-0f6e-4ef8-81db-f3a6cb5e31da/spaces") .build()) .build()) .resource(DomainResource.builder() .metadata(Metadata.builder() .id("b37aab98-5882-420a-a91f-65539e36e860") .url("/v2/domains/b37aab98-5882-420a-a91f-65539e36e860") .createdAt("2015-07-27T22:43:33Z") .build()) .entity(DomainEntity.builder() .name("domain-62.example.com") .build()) .build()) .build()) .expectComplete() .verify(Duration.ofSeconds(5)); } @Test public void listSpaces() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() .method(GET).path("/v2/domains/test-domain-id/spaces?page=-1") .build()) .response(TestResponse.builder() .status(OK) .payload("fixtures/client/v2/domains/GET_{id}_spaces_response.json") .build()) .build()); this.domains .listSpaces(ListDomainSpacesRequest.builder() .domainId("test-domain-id") .page(-1) .build()) .as(StepVerifier::create) .expectNext(ListDomainSpacesResponse.builder() .totalResults(1) .totalPages(1) .resource(SpaceResource.builder() .metadata(Metadata.builder() .id("d1686ef7-59dc-4ada-8900-85e89d749046") .url("/v2/spaces/d1686ef7-59dc-4ada-8900-85e89d749046") .createdAt("2015-07-27T22:43:33Z") .build()) .entity(SpaceEntity.builder() .name("name-2311") .organizationId("836b112a-30bc-4d55-b8e4-7323849759d1") .allowSsh(true) .organizationUrl("/v2/organizations/836b112a-30bc-4d55-b8e4-7323849759d1") .developersUrl("/v2/spaces/d1686ef7-59dc-4ada-8900-85e89d749046/developers") .managersUrl("/v2/spaces/d1686ef7-59dc-4ada-8900-85e89d749046/managers") .auditorsUrl("/v2/spaces/d1686ef7-59dc-4ada-8900-85e89d749046/auditors") .applicationsUrl("/v2/spaces/d1686ef7-59dc-4ada-8900-85e89d749046/apps") .routesUrl("/v2/spaces/d1686ef7-59dc-4ada-8900-85e89d749046/routes") .domainsUrl("/v2/spaces/d1686ef7-59dc-4ada-8900-85e89d749046/domains") .serviceInstancesUrl("/v2/spaces/d1686ef7-59dc-4ada-8900-85e89d749046/service_instances") .applicationEventsUrl("/v2/spaces/d1686ef7-59dc-4ada-8900-85e89d749046/app_events") .eventsUrl("/v2/spaces/d1686ef7-59dc-4ada-8900-85e89d749046/events") .securityGroupsUrl("/v2/spaces/d1686ef7-59dc-4ada-8900-85e89d749046/security_groups") .build()) .build()) .build()) .expectComplete() .verify(Duration.ofSeconds(5)); } }