/* * 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.serviceplans; import org.cloudfoundry.client.v2.Metadata; import org.cloudfoundry.client.v2.jobs.JobEntity; import org.cloudfoundry.client.v2.serviceinstances.ServiceInstanceEntity; import org.cloudfoundry.client.v2.serviceinstances.ServiceInstanceResource; import org.cloudfoundry.client.v2.serviceplans.DeleteServicePlanRequest; import org.cloudfoundry.client.v2.serviceplans.DeleteServicePlanResponse; import org.cloudfoundry.client.v2.serviceplans.GetServicePlanRequest; import org.cloudfoundry.client.v2.serviceplans.GetServicePlanResponse; import org.cloudfoundry.client.v2.serviceplans.ListServicePlanServiceInstancesRequest; import org.cloudfoundry.client.v2.serviceplans.ListServicePlanServiceInstancesResponse; import org.cloudfoundry.client.v2.serviceplans.ListServicePlansRequest; import org.cloudfoundry.client.v2.serviceplans.ListServicePlansResponse; import org.cloudfoundry.client.v2.serviceplans.ServicePlanEntity; import org.cloudfoundry.client.v2.serviceplans.ServicePlanResource; import org.cloudfoundry.client.v2.serviceplans.UpdateServicePlanRequest; import org.cloudfoundry.client.v2.serviceplans.UpdateServicePlanResponse; 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.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 ReactorServicePlansTest extends AbstractClientApiTest { private final ReactorServicePlans servicePlans = new ReactorServicePlans(CONNECTION_CONTEXT, this.root, TOKEN_PROVIDER); @Test public void delete() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() .method(DELETE).path("/v2/service_plans/test-service-plan-id") .build()) .response(TestResponse.builder() .status(NO_CONTENT) .build()) .build()); this.servicePlans .delete(DeleteServicePlanRequest.builder() .servicePlanId("test-service-plan-id") .build()) .as(StepVerifier::create) .expectComplete() .verify(Duration.ofSeconds(5)); } @Test public void deleteAsync() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() .method(DELETE).path("/v2/service_plans/test-service-plan-id?async=true") .build()) .response(TestResponse.builder() .status(ACCEPTED) .payload("fixtures/client/v2/service_plans/DELETE_{id}_async_response.json") .build()) .build()); this.servicePlans .delete(DeleteServicePlanRequest.builder() .async(true) .servicePlanId("test-service-plan-id") .build()) .as(StepVerifier::create) .expectNext(DeleteServicePlanResponse.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/service_plans/test-service-plan-id") .build()) .response(TestResponse.builder() .status(OK) .payload("fixtures/client/v2/service_plans/GET_{id}_response.json") .build()) .build()); this.servicePlans .get(GetServicePlanRequest.builder() .servicePlanId("test-service-plan-id") .build()) .as(StepVerifier::create) .expectNext(GetServicePlanResponse.builder() .metadata(Metadata.builder() .createdAt("2015-07-27T22:43:16Z") .id("f6ceb8a2-e6fc-43d5-a11b-7ced9e1b47c7") .url("/v2/service_plans/f6ceb8a2-e6fc-43d5-a11b-7ced9e1b47c7") .build()) .entity(ServicePlanEntity.builder() .name("name-462") .free(false) .description("desc-52") .serviceId("8ac39757-0f9d-4295-9b6f-e626f7ee3cd4") .uniqueId("2aa0162c-9c88-4084-ad1d-566a09e8d316") .publiclyVisible(true) .active(true) .serviceUrl("/v2/services/8ac39757-0f9d-4295-9b6f-e626f7ee3cd4") .serviceInstancesUrl("/v2/service_plans/f6ceb8a2-e6fc-43d5-a11b-7ced9e1b47c7/service_instances") .build()) .build()) .expectComplete() .verify(Duration.ofSeconds(5)); } @Test public void list() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() .method(GET).path("/v2/service_plans?q=service_guid:test-service-id&page=-1") .build()) .response(TestResponse.builder() .status(OK) .payload("fixtures/client/v2/service_plans/GET_response.json") .build()) .build()); this.servicePlans .list(ListServicePlansRequest.builder() .serviceId("test-service-id") .page(-1) .build()) .as(StepVerifier::create) .expectNext(ListServicePlansResponse.builder() .totalResults(1) .totalPages(1) .resource(ServicePlanResource.builder() .metadata(Metadata.builder() .createdAt("2015-07-27T22:43:16Z") .id("956cb355-3acc-4ced-8161-a57b9b5c7943") .url("/v2/service_plans/956cb355-3acc-4ced-8161-a57b9b5c7943") .build()) .entity(ServicePlanEntity.builder() .name("name-464") .free(false) .description("desc-54") .serviceId("83dc64ef-eb0a-454c-b3d9-c554921f3bd2") .uniqueId("49aee95b-2108-4bbb-9769-c6197f308acf") .publiclyVisible(true) .active(true) .serviceUrl("/v2/services/83dc64ef-eb0a-454c-b3d9-c554921f3bd2") .serviceInstancesUrl("/v2/service_plans/956cb355-3acc-4ced-8161-a57b9b5c7943/service_instances") .build()) .build()) .build()) .expectComplete() .verify(Duration.ofSeconds(5)); } @Test public void listServiceInstances() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() .method(GET).path("/v2/service_plans/test-service-plan-id/service_instances?q=space_guid:test-space-id&page=-1") .build()) .response(TestResponse.builder() .status(OK) .payload("fixtures/client/v2/service_plans/GET_{id}_service_instances_response.json") .build()) .build()); this.servicePlans .listServiceInstances(ListServicePlanServiceInstancesRequest.builder() .servicePlanId("test-service-plan-id") .spaceId("test-space-id") .page(-1) .build()) .as(StepVerifier::create) .expectNext(ListServicePlanServiceInstancesResponse.builder() .totalResults(1) .totalPages(1) .resource(ServiceInstanceResource.builder() .metadata(Metadata.builder() .createdAt("2015-07-27T22:43:16Z") .id("b95c56b9-f81b-4d34-9a00-a1a1ddba5f2f") .url("/v2/service_instances/b95c56b9-f81b-4d34-9a00-a1a1ddba5f2f") .build()) .entity(ServiceInstanceEntity.builder() .name("name-457") .credential("creds-key-268", "creds-val-268") .servicePlanId("bb29926c-7482-4ae5-803c-ec99e95aa278") .spaceId("cf5812f5-bf43-40cc-88d4-d50b76d7797d") .type("managed_service_instance") .tags(Collections.emptyList()) .spaceUrl("/v2/spaces/cf5812f5-bf43-40cc-88d4-d50b76d7797d") .servicePlanUrl("/v2/service_plans/bb29926c-7482-4ae5-803c-ec99e95aa278") .serviceBindingsUrl("/v2/service_instances/b95c56b9-f81b-4d34-9a00-a1a1ddba5f2f/service_bindings") .serviceKeysUrl("/v2/service_instances/b95c56b9-f81b-4d34-9a00-a1a1ddba5f2f/service_keys") .build()) .build()) .build()) .expectComplete() .verify(Duration.ofSeconds(5)); } @Test public void update() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() .method(PUT).path("/v2/service_plans/test-service-plan-id") .payload("fixtures/client/v2/service_plans/PUT_{id}_request.json") .build()) .response(TestResponse.builder() .status(CREATED) .payload("fixtures/client/v2/service_plans/PUT_{id}_response.json") .build()) .build()); this.servicePlans .update(UpdateServicePlanRequest.builder() .servicePlanId("test-service-plan-id") .publiclyVisible(false) .build()) .as(StepVerifier::create) .expectNext(UpdateServicePlanResponse.builder() .metadata(Metadata.builder() .id("195f6bd5-0aa4-4a97-9c8d-5410e5e6d4b6") .url("/v2/service_plans/195f6bd5-0aa4-4a97-9c8d-5410e5e6d4b6") .createdAt("2016-02-19T02:04:09Z") .updatedAt("2016-02-19T02:04:09Z") .build()) .entity(ServicePlanEntity.builder() .name("name-2674") .free(false) .description("desc-225") .serviceId("42bea093-8fe5-491a-8a34-b1943dc3709a") .uniqueId("7c4f2f8a-aa82-49e9-9f0c-76248aa1036d") .publiclyVisible(false) .active(true) .serviceUrl("/v2/services/42bea093-8fe5-491a-8a34-b1943dc3709a") .serviceInstancesUrl("/v2/service_plans/195f6bd5-0aa4-4a97-9c8d-5410e5e6d4b6/service_instances") .build()) .build()) .expectComplete() .verify(Duration.ofSeconds(5)); } }