/* * 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.servicebindings; import org.cloudfoundry.client.v2.Metadata; import org.cloudfoundry.client.v2.jobs.JobEntity; import org.cloudfoundry.client.v2.servicebindings.CreateServiceBindingRequest; import org.cloudfoundry.client.v2.servicebindings.CreateServiceBindingResponse; import org.cloudfoundry.client.v2.servicebindings.DeleteServiceBindingRequest; import org.cloudfoundry.client.v2.servicebindings.DeleteServiceBindingResponse; import org.cloudfoundry.client.v2.servicebindings.GetServiceBindingRequest; import org.cloudfoundry.client.v2.servicebindings.GetServiceBindingResponse; import org.cloudfoundry.client.v2.servicebindings.ListServiceBindingsRequest; import org.cloudfoundry.client.v2.servicebindings.ListServiceBindingsResponse; import org.cloudfoundry.client.v2.servicebindings.ServiceBindingEntity; import org.cloudfoundry.client.v2.servicebindings.ServiceBindingResource; 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.CREATED; import static io.netty.handler.codec.http.HttpResponseStatus.NO_CONTENT; import static io.netty.handler.codec.http.HttpResponseStatus.OK; public final class ReactorServiceBindingsV2Test extends AbstractClientApiTest { private final ReactorServiceBindingsV2 serviceBindings = new ReactorServiceBindingsV2(CONNECTION_CONTEXT, this.root, TOKEN_PROVIDER); @Test public void create() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() .method(POST).path("/v2/service_bindings") .payload("fixtures/client/v2/service_bindings/POST_request.json") .build()) .response(TestResponse.builder() .status(CREATED) .payload("fixtures/client/v2/service_bindings/POST_response.json") .build()) .build()); this.serviceBindings .create(CreateServiceBindingRequest.builder() .applicationId("26ddc1de-3eeb-424b-82f3-f7f30a38b610") .serviceInstanceId("650d0eb7-3b83-414a-82a0-d503d1c8eb5f") .parameters(Collections.singletonMap("the_service_broker", (Object) "wants this object")) .build()) .as(StepVerifier::create) .expectNext(CreateServiceBindingResponse.builder() .metadata(Metadata.builder() .createdAt("2015-07-27T22:43:20Z") .id("42eda707-fe4d-4eed-9b39-7cb5e665c226") .url("/v2/service_bindings/42eda707-fe4d-4eed-9b39-7cb5e665c226") .build()) .entity(ServiceBindingEntity.builder() .applicationId("26ddc1de-3eeb-424b-82f3-f7f30a38b610") .serviceInstanceId("650d0eb7-3b83-414a-82a0-d503d1c8eb5f") .bindingOptions(Collections.emptyMap()) .credential("creds-key-356", "creds-val-356") .gatewayName("") .applicationUrl("/v2/apps/26ddc1de-3eeb-424b-82f3-f7f30a38b610") .serviceInstanceUrl("/v2/service_instances/650d0eb7-3b83-414a-82a0-d503d1c8eb5f") .build()) .build()) .expectComplete() .verify(Duration.ofSeconds(5)); } @Test public void delete() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() .method(DELETE).path("/v2/service_bindings/test-service-binding-id") .build()) .response(TestResponse.builder() .status(NO_CONTENT) .build()) .build()); this.serviceBindings .delete(DeleteServiceBindingRequest.builder() .serviceBindingId("test-service-binding-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_bindings/test-service-binding-id?async=true") .build()) .response(TestResponse.builder() .status(ACCEPTED) .payload("fixtures/client/v2/service_bindings/DELETE_{id}_async_response.json") .build()) .build()); this.serviceBindings .delete(DeleteServiceBindingRequest.builder() .async(true) .serviceBindingId("test-service-binding-id") .build()) .as(StepVerifier::create) .expectNext(DeleteServiceBindingResponse.builder() .metadata(Metadata.builder() .id("c4faac01-5bbd-494f-8849-256a3bab06b8") .createdAt("2016-03-14T22:30:51Z") .url("/v2/jobs/c4faac01-5bbd-494f-8849-256a3bab06b8") .build()) .entity(JobEntity.builder() .id("c4faac01-5bbd-494f-8849-256a3bab06b8") .status("queued") .build()) .build()) .expectComplete() .verify(Duration.ofSeconds(5)); } @Test public void get() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() .method(GET).path("/v2/service_bindings/test-service-binding-id") .build()) .response(TestResponse.builder() .status(OK) .payload("fixtures/client/v2/service_bindings/GET_{id}_response.json") .build()) .build()); this.serviceBindings .get(GetServiceBindingRequest.builder() .serviceBindingId("test-service-binding-id") .build()) .as(StepVerifier::create) .expectNext(GetServiceBindingResponse.builder() .metadata(Metadata.builder() .createdAt("2015-11-03T00:53:50Z") .id("925d8848-4808-47cf-a3e8-049aa0163328") .updatedAt("2015-11-04T12:54:50Z") .url("/v2/service_bindings/925d8848-4808-47cf-a3e8-049aa0163328") .build()) .entity(ServiceBindingEntity.builder() .applicationId("56ae4265-4c1c-43a9-9069-2c1fee7fd42f") .serviceInstanceId("f99b3d23-55f9-48b5-add3-d7ab08b2ff0c") .bindingOptions(Collections.emptyMap()) .credential("creds-key-108", "creds-val-108") .gatewayName("") .applicationUrl("/v2/apps/56ae4265-4c1c-43a9-9069-2c1fee7fd42f") .serviceInstanceUrl("/v2/service_instances/f99b3d23-55f9-48b5-add3-d7ab08b2ff0c") .build()) .build()) .expectComplete() .verify(Duration.ofSeconds(5)); } @Test public void list() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() .method(GET).path("/v2/service_bindings?q=app_guid:dd44fd4f-5e20-4c52-b66d-7af6e201f01e&page=-1") .build()) .response(TestResponse.builder() .status(OK) .payload("fixtures/client/v2/service_bindings/GET_response.json") .build()) .build()); this.serviceBindings .list(ListServiceBindingsRequest.builder() .applicationId("dd44fd4f-5e20-4c52-b66d-7af6e201f01e") .page(-1) .build()) .as(StepVerifier::create) .expectNext(ListServiceBindingsResponse.builder() .totalResults(3) .totalPages(1) .resource(ServiceBindingResource.builder() .metadata(Metadata.builder() .createdAt("2015-07-27T22:43:06Z") .id("d6d87c3d-a38f-4b31-9bbe-2432d2faaa1d") .url("/v2/service_bindings/d6d87c3d-a38f-4b31-9bbe-2432d2faaa1d") .build()) .entity(ServiceBindingEntity.builder() .applicationId("dd44fd4f-5e20-4c52-b66d-7af6e201f01e") .serviceInstanceId("bbd1f170-bb1f-481d-bcf7-def2bbe6a3a2") .bindingOptions(Collections.emptyMap()) .credential("creds-key-3", "creds-val-3") .gatewayName("") .applicationUrl("/v2/apps/dd44fd4f-5e20-4c52-b66d-7af6e201f01e") .serviceInstanceUrl("/v2/service_instances/bbd1f170-bb1f-481d-bcf7-def2bbe6a3a2") .build()) .build()) .resource(ServiceBindingResource.builder() .metadata(Metadata.builder() .createdAt("2015-11-03T00:53:50Z") .id("925d8848-4808-47cf-a3e8-049aa0163328") .updatedAt("2015-11-04T12:54:50Z") .url("/v2/service_bindings/925d8848-4808-47cf-a3e8-049aa0163328") .build()) .entity(ServiceBindingEntity.builder() .applicationId("dd44fd4f-5e20-4c52-b66d-7af6e201f01e") .serviceInstanceId("f99b3d23-55f9-48b5-add3-d7ab08b2ff0c") .bindingOptions(Collections.emptyMap()) .credential("creds-key-108", "creds-val-108") .gatewayName("") .applicationUrl("/v2/apps/dd44fd4f-5e20-4c52-b66d-7af6e201f01e") .serviceInstanceUrl("/v2/service_instances/f99b3d23-55f9-48b5-add3-d7ab08b2ff0c") .build()) .build()) .resource(ServiceBindingResource.builder() .metadata(Metadata.builder() .createdAt("2015-07-27T22:43:20Z") .id("42eda707-fe4d-4eed-9b39-7cb5e665c226") .url("/v2/service_bindings/42eda707-fe4d-4eed-9b39-7cb5e665c226") .build()) .entity(ServiceBindingEntity.builder() .applicationId("dd44fd4f-5e20-4c52-b66d-7af6e201f01e") .serviceInstanceId("650d0eb7-3b83-414a-82a0-d503d1c8eb5f") .bindingOptions(Collections.emptyMap()) .credential("creds-key-356", "creds-val-356") .gatewayName("") .applicationUrl("/v2/apps/dd44fd4f-5e20-4c52-b66d-7af6e201f01e") .serviceInstanceUrl("/v2/service_instances/650d0eb7-3b83-414a-82a0-d503d1c8eb5f") .build()) .build()) .build()) .expectComplete() .verify(Duration.ofSeconds(5)); } }