diff --git a/cloudfoundry-client-reactor/src/main/java/org/cloudfoundry/reactor/client/v2/servicebindings/ReactorServiceBindingsV2.java b/cloudfoundry-client-reactor/src/main/java/org/cloudfoundry/reactor/client/v2/servicebindings/ReactorServiceBindingsV2.java index 299397486e8..8b503d8b92b 100644 --- a/cloudfoundry-client-reactor/src/main/java/org/cloudfoundry/reactor/client/v2/servicebindings/ReactorServiceBindingsV2.java +++ b/cloudfoundry-client-reactor/src/main/java/org/cloudfoundry/reactor/client/v2/servicebindings/ReactorServiceBindingsV2.java @@ -20,6 +20,8 @@ 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.GetServiceBindingParametersRequest; +import org.cloudfoundry.client.v2.servicebindings.GetServiceBindingParametersResponse; import org.cloudfoundry.client.v2.servicebindings.GetServiceBindingRequest; import org.cloudfoundry.client.v2.servicebindings.GetServiceBindingResponse; import org.cloudfoundry.client.v2.servicebindings.ListServiceBindingsRequest; @@ -28,6 +30,7 @@ import org.cloudfoundry.reactor.ConnectionContext; import org.cloudfoundry.reactor.TokenProvider; import org.cloudfoundry.reactor.client.v2.AbstractClientV2Operations; + import reactor.core.publisher.Mono; /** @@ -64,6 +67,12 @@ public Mono get(GetServiceBindingRequest request) { .checkpoint(); } + @Override + public Mono getParameters(GetServiceBindingParametersRequest request) { + return get(request, GetServiceBindingParametersResponse.class, builder -> builder.pathSegment("service_bindings", request.getServiceBindingId(), "parameters")) + .checkpoint(); + } + @Override public Mono list(ListServiceBindingsRequest request) { return get(request, ListServiceBindingsResponse.class, builder -> builder.pathSegment("service_bindings")) diff --git a/cloudfoundry-client-reactor/src/main/java/org/cloudfoundry/reactor/client/v2/serviceinstances/ReactorServiceInstances.java b/cloudfoundry-client-reactor/src/main/java/org/cloudfoundry/reactor/client/v2/serviceinstances/ReactorServiceInstances.java index 05bf2c23ea9..d57f59640f8 100644 --- a/cloudfoundry-client-reactor/src/main/java/org/cloudfoundry/reactor/client/v2/serviceinstances/ReactorServiceInstances.java +++ b/cloudfoundry-client-reactor/src/main/java/org/cloudfoundry/reactor/client/v2/serviceinstances/ReactorServiceInstances.java @@ -22,6 +22,8 @@ import org.cloudfoundry.client.v2.serviceinstances.CreateServiceInstanceResponse; import org.cloudfoundry.client.v2.serviceinstances.DeleteServiceInstanceRequest; import org.cloudfoundry.client.v2.serviceinstances.DeleteServiceInstanceResponse; +import org.cloudfoundry.client.v2.serviceinstances.GetServiceInstanceParametersRequest; +import org.cloudfoundry.client.v2.serviceinstances.GetServiceInstanceParametersResponse; import org.cloudfoundry.client.v2.serviceinstances.GetServiceInstancePermissionsRequest; import org.cloudfoundry.client.v2.serviceinstances.GetServiceInstancePermissionsResponse; import org.cloudfoundry.client.v2.serviceinstances.GetServiceInstanceRequest; @@ -41,6 +43,7 @@ import org.cloudfoundry.reactor.ConnectionContext; import org.cloudfoundry.reactor.TokenProvider; import org.cloudfoundry.reactor.client.v2.AbstractClientV2Operations; + import reactor.core.publisher.Mono; /** @@ -83,6 +86,12 @@ public Mono get(GetServiceInstanceRequest request) { .checkpoint(); } + @Override + public Mono getParameters(GetServiceInstanceParametersRequest request) { + return get(request, GetServiceInstanceParametersResponse.class, builder -> builder.pathSegment("service_instances", request.getServiceInstanceId(), "parameters")) + .checkpoint(); + } + @Override public Mono getPermissions(GetServiceInstancePermissionsRequest request) { return get(request, GetServiceInstancePermissionsResponse.class, builder -> builder.pathSegment("service_instances", request.getServiceInstanceId(), "permissions")) diff --git a/cloudfoundry-client-reactor/src/test/java/org/cloudfoundry/reactor/client/v2/servicebindings/ReactorServiceBindingsV2Test.java b/cloudfoundry-client-reactor/src/test/java/org/cloudfoundry/reactor/client/v2/servicebindings/ReactorServiceBindingsV2Test.java index 517e561b2e3..6fec6b26385 100644 --- a/cloudfoundry-client-reactor/src/test/java/org/cloudfoundry/reactor/client/v2/servicebindings/ReactorServiceBindingsV2Test.java +++ b/cloudfoundry-client-reactor/src/test/java/org/cloudfoundry/reactor/client/v2/servicebindings/ReactorServiceBindingsV2Test.java @@ -16,6 +16,16 @@ package org.cloudfoundry.reactor.client.v2.servicebindings; +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; + +import java.time.Duration; +import java.util.Collections; import org.cloudfoundry.client.v2.Metadata; import org.cloudfoundry.client.v2.jobs.JobEntity; @@ -23,6 +33,8 @@ 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.GetServiceBindingParametersRequest; +import org.cloudfoundry.client.v2.servicebindings.GetServiceBindingParametersResponse; import org.cloudfoundry.client.v2.servicebindings.GetServiceBindingRequest; import org.cloudfoundry.client.v2.servicebindings.GetServiceBindingResponse; import org.cloudfoundry.client.v2.servicebindings.LastOperation; @@ -35,18 +47,8 @@ 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; +import reactor.test.StepVerifier; public final class ReactorServiceBindingsV2Test extends AbstractClientApiTest { @@ -56,7 +58,8 @@ public final class ReactorServiceBindingsV2Test extends AbstractClientApiTest { public void create() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() - .method(POST).path("/service_bindings") + .method(POST) + .path("/service_bindings") .payload("fixtures/client/v2/service_bindings/POST_request.json") .build()) .response(TestResponse.builder() @@ -65,12 +68,12 @@ public void create() { .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()) + 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() @@ -82,7 +85,8 @@ public void create() { .applicationId("26ddc1de-3eeb-424b-82f3-f7f30a38b610") .serviceInstanceId("650d0eb7-3b83-414a-82a0-d503d1c8eb5f") .bindingOptions(Collections.emptyMap()) - .credential("creds-key-356", "creds-val-356") + .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") @@ -96,17 +100,17 @@ public void create() { public void delete() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() - .method(DELETE).path("/service_bindings/test-service-binding-id") + .method(DELETE) + .path("/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()) + this.serviceBindings.delete(DeleteServiceBindingRequest.builder() + .serviceBindingId("test-service-binding-id") + .build()) .as(StepVerifier::create) .expectComplete() .verify(Duration.ofSeconds(5)); @@ -116,7 +120,8 @@ public void delete() { public void deleteAsync() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() - .method(DELETE).path("/service_bindings/test-service-binding-id?async=true") + .method(DELETE) + .path("/service_bindings/test-service-binding-id?async=true") .build()) .response(TestResponse.builder() .status(ACCEPTED) @@ -124,11 +129,10 @@ public void deleteAsync() { .build()) .build()); - this.serviceBindings - .delete(DeleteServiceBindingRequest.builder() - .async(true) - .serviceBindingId("test-service-binding-id") - .build()) + this.serviceBindings.delete(DeleteServiceBindingRequest.builder() + .async(true) + .serviceBindingId("test-service-binding-id") + .build()) .as(StepVerifier::create) .expectNext(DeleteServiceBindingResponse.builder() .metadata(Metadata.builder() @@ -149,7 +153,8 @@ public void deleteAsync() { public void get() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() - .method(GET).path("/service_bindings/test-service-binding-id") + .method(GET) + .path("/service_bindings/test-service-binding-id") .build()) .response(TestResponse.builder() .status(OK) @@ -157,10 +162,9 @@ public void get() { .build()) .build()); - this.serviceBindings - .get(GetServiceBindingRequest.builder() - .serviceBindingId("test-service-binding-id") - .build()) + this.serviceBindings.get(GetServiceBindingRequest.builder() + .serviceBindingId("test-service-binding-id") + .build()) .as(StepVerifier::create) .expectNext(GetServiceBindingResponse.builder() .metadata(Metadata.builder() @@ -192,11 +196,40 @@ public void get() { .verify(Duration.ofSeconds(5)); } + @Test + public void getParameters() { + mockRequest(InteractionContext.builder() + .request(TestRequest.builder() + .method(GET) + .path("/service_bindings/test-service-binding-id/parameters") + .build()) + .response(TestResponse.builder() + .status(OK) + .payload("fixtures/client/v2/service_bindings/GET_{id}_parameters_response.json") + .build()) + .build()); + + this.serviceBindings.getParameters(GetServiceBindingParametersRequest.builder() + .serviceBindingId("test-service-binding-id") + .build()) + .as(StepVerifier::create) + .expectNext(GetServiceBindingParametersResponse.builder() + .parameter("foo", "abc") + .parameter("bar", 12345) + .parameter("baz", false) + .parameter("qux", 3.141) + .parameter("quux", null) + .build()) + .expectComplete() + .verify(Duration.ofSeconds(5)); + } + @Test public void list() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() - .method(GET).path("/service_bindings?q=app_guid:dd44fd4f-5e20-4c52-b66d-7af6e201f01e&page=-1") + .method(GET) + .path("/service_bindings?q=app_guid:dd44fd4f-5e20-4c52-b66d-7af6e201f01e&page=-1") .build()) .response(TestResponse.builder() .status(OK) @@ -204,11 +237,10 @@ public void list() { .build()) .build()); - this.serviceBindings - .list(ListServiceBindingsRequest.builder() - .applicationId("dd44fd4f-5e20-4c52-b66d-7af6e201f01e") - .page(-1) - .build()) + this.serviceBindings.list(ListServiceBindingsRequest.builder() + .applicationId("dd44fd4f-5e20-4c52-b66d-7af6e201f01e") + .page(-1) + .build()) .as(StepVerifier::create) .expectNext(ListServiceBindingsResponse.builder() .totalResults(3) @@ -223,7 +255,8 @@ public void list() { .applicationId("dd44fd4f-5e20-4c52-b66d-7af6e201f01e") .serviceInstanceId("bbd1f170-bb1f-481d-bcf7-def2bbe6a3a2") .bindingOptions(Collections.emptyMap()) - .credential("creds-key-3", "creds-val-3") + .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") @@ -240,7 +273,8 @@ public void list() { .applicationId("dd44fd4f-5e20-4c52-b66d-7af6e201f01e") .serviceInstanceId("f99b3d23-55f9-48b5-add3-d7ab08b2ff0c") .bindingOptions(Collections.emptyMap()) - .credential("creds-key-108", "creds-val-108") + .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") @@ -256,7 +290,8 @@ public void list() { .applicationId("dd44fd4f-5e20-4c52-b66d-7af6e201f01e") .serviceInstanceId("650d0eb7-3b83-414a-82a0-d503d1c8eb5f") .bindingOptions(Collections.emptyMap()) - .credential("creds-key-356", "creds-val-356") + .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") diff --git a/cloudfoundry-client-reactor/src/test/java/org/cloudfoundry/reactor/client/v2/serviceinstances/ReactorServiceInstancesTest.java b/cloudfoundry-client-reactor/src/test/java/org/cloudfoundry/reactor/client/v2/serviceinstances/ReactorServiceInstancesTest.java index 1a15d7503a9..13f3f9c85ac 100644 --- a/cloudfoundry-client-reactor/src/test/java/org/cloudfoundry/reactor/client/v2/serviceinstances/ReactorServiceInstancesTest.java +++ b/cloudfoundry-client-reactor/src/test/java/org/cloudfoundry/reactor/client/v2/serviceinstances/ReactorServiceInstancesTest.java @@ -16,6 +16,18 @@ package org.cloudfoundry.reactor.client.v2.serviceinstances; +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; + +import java.time.Duration; +import java.util.Collections; + import org.cloudfoundry.client.v2.Metadata; import org.cloudfoundry.client.v2.jobs.JobEntity; import org.cloudfoundry.client.v2.routes.RouteEntity; @@ -28,6 +40,8 @@ import org.cloudfoundry.client.v2.serviceinstances.CreateServiceInstanceResponse; import org.cloudfoundry.client.v2.serviceinstances.DeleteServiceInstanceRequest; import org.cloudfoundry.client.v2.serviceinstances.DeleteServiceInstanceResponse; +import org.cloudfoundry.client.v2.serviceinstances.GetServiceInstanceParametersRequest; +import org.cloudfoundry.client.v2.serviceinstances.GetServiceInstanceParametersResponse; import org.cloudfoundry.client.v2.serviceinstances.GetServiceInstancePermissionsRequest; import org.cloudfoundry.client.v2.serviceinstances.GetServiceInstancePermissionsResponse; import org.cloudfoundry.client.v2.serviceinstances.GetServiceInstanceRequest; @@ -53,19 +67,8 @@ 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.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; +import reactor.test.StepVerifier; public final class ReactorServiceInstancesTest extends AbstractClientApiTest { @@ -75,7 +78,8 @@ public final class ReactorServiceInstancesTest extends AbstractClientApiTest { public void bindRoute() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() - .method(PUT).path("/service_instances/test-service-instance-id/routes/route-id") + .method(PUT) + .path("/service_instances/test-service-instance-id/routes/route-id") .payload("fixtures/client/v2/service_instances/PUT_{id}_routes_request.json") .build()) .response(TestResponse.builder() @@ -84,12 +88,11 @@ public void bindRoute() { .build()) .build()); - this.serviceInstances - .bindRoute(BindServiceInstanceRouteRequest.builder() - .serviceInstanceId("test-service-instance-id") - .routeId("route-id") - .parameter("the_service_broker", "wants this object") - .build()) + this.serviceInstances.bindRoute(BindServiceInstanceRouteRequest.builder() + .serviceInstanceId("test-service-instance-id") + .routeId("route-id") + .parameter("the_service_broker", "wants this object") + .build()) .as(StepVerifier::create) .expectNext(BindServiceInstanceRouteResponse.builder() .metadata(Metadata.builder() @@ -99,7 +102,8 @@ public void bindRoute() { .build()) .entity(ServiceInstanceEntity.builder() .name("name-160") - .credential("creds-key-89", "creds-val-89") + .credential("creds-key-89", + "creds-val-89") .servicePlanId("957307f5-6811-4eba-8667-ffee5a704a4a") .spaceId("36b01ada-ef02-4ff5-9f78-cd9e704211d2") .type("managed_service_instance") @@ -119,7 +123,8 @@ public void bindRoute() { public void create() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() - .method(POST).path("/service_instances?accepts_incomplete=true") + .method(POST) + .path("/service_instances?accepts_incomplete=true") .payload("fixtures/client/v2/service_instances/POST_request.json") .build()) .response(TestResponse.builder() @@ -128,16 +133,15 @@ public void create() { .build()) .build()); - this.serviceInstances - .create(CreateServiceInstanceRequest.builder() - .acceptsIncomplete(true) - .name("my-service-instance") - .servicePlanId("2048a369-d2d3-48cf-bcfd-eaf9032fa0ab") - .spaceId("86b29f7e-721d-4eb8-b34f-3b1d1eccdf23") - .parameter("the_service_broker", "wants this object") - .tag("accounting") - .tag("mongodb") - .build()) + this.serviceInstances.create(CreateServiceInstanceRequest.builder() + .acceptsIncomplete(true) + .name("my-service-instance") + .servicePlanId("2048a369-d2d3-48cf-bcfd-eaf9032fa0ab") + .spaceId("86b29f7e-721d-4eb8-b34f-3b1d1eccdf23") + .parameter("the_service_broker", "wants this object") + .tag("accounting") + .tag("mongodb") + .build()) .as(StepVerifier::create) .expectNext(CreateServiceInstanceResponse.builder() .metadata(Metadata.builder() @@ -147,7 +151,8 @@ public void create() { .build()) .entity(ServiceInstanceEntity.builder() .name("my-service-instance") - .credential("creds-key-356", "creds-val-356") + .credential("creds-key-356", + "creds-val-356") .servicePlanId("2048a369-d2d3-48cf-bcfd-eaf9032fa0ab") .spaceId("86b29f7e-721d-4eb8-b34f-3b1d1eccdf23") .type("managed_service_instance") @@ -174,19 +179,19 @@ public void create() { public void delete() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() - .method(DELETE).path("/service_instances/test-service-instance-id?accepts_incomplete=true&purge=true") + .method(DELETE) + .path("/service_instances/test-service-instance-id?accepts_incomplete=true&purge=true") .build()) .response(TestResponse.builder() .status(NO_CONTENT) .build()) .build()); - this.serviceInstances - .delete(DeleteServiceInstanceRequest.builder() - .serviceInstanceId("test-service-instance-id") - .acceptsIncomplete(true) - .purge(true) - .build()) + this.serviceInstances.delete(DeleteServiceInstanceRequest.builder() + .serviceInstanceId("test-service-instance-id") + .acceptsIncomplete(true) + .purge(true) + .build()) .as(StepVerifier::create) .expectComplete() .verify(Duration.ofSeconds(5)); @@ -196,7 +201,8 @@ public void delete() { public void deleteAcceptsIncomplete() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() - .method(DELETE).path("/service_instances/test-service-instance-id?accepts_incomplete=true") + .method(DELETE) + .path("/service_instances/test-service-instance-id?accepts_incomplete=true") .build()) .response(TestResponse.builder() .status(ACCEPTED) @@ -204,11 +210,10 @@ public void deleteAcceptsIncomplete() { .build()) .build()); - this.serviceInstances - .delete(DeleteServiceInstanceRequest.builder() - .serviceInstanceId("test-service-instance-id") - .acceptsIncomplete(true) - .build()) + this.serviceInstances.delete(DeleteServiceInstanceRequest.builder() + .serviceInstanceId("test-service-instance-id") + .acceptsIncomplete(true) + .build()) .as(StepVerifier::create) .expectNext(DeleteServiceInstanceResponse.builder() .metadata(Metadata.builder() @@ -245,7 +250,8 @@ public void deleteAcceptsIncomplete() { public void deleteAsync() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() - .method(DELETE).path("/service_instances/test-service-instance-id?async=true&purge=true") + .method(DELETE) + .path("/service_instances/test-service-instance-id?async=true&purge=true") .build()) .response(TestResponse.builder() .status(ACCEPTED) @@ -253,12 +259,11 @@ public void deleteAsync() { .build()) .build()); - this.serviceInstances - .delete(DeleteServiceInstanceRequest.builder() - .async(true) - .serviceInstanceId("test-service-instance-id") - .purge(true) - .build()) + this.serviceInstances.delete(DeleteServiceInstanceRequest.builder() + .async(true) + .serviceInstanceId("test-service-instance-id") + .purge(true) + .build()) .as(StepVerifier::create) .expectNext(DeleteServiceInstanceResponse.builder() .metadata(Metadata.builder() @@ -279,7 +284,8 @@ public void deleteAsync() { public void get() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() - .method(GET).path("/service_instances/test-service-instance-id") + .method(GET) + .path("/service_instances/test-service-instance-id") .build()) .response(TestResponse.builder() .status(OK) @@ -287,10 +293,9 @@ public void get() { .build()) .build()); - this.serviceInstances - .get(GetServiceInstanceRequest.builder() - .serviceInstanceId("test-service-instance-id") - .build()) + this.serviceInstances.get(GetServiceInstanceRequest.builder() + .serviceInstanceId("test-service-instance-id") + .build()) .as(StepVerifier::create) .expectNext(GetServiceInstanceResponse.builder() .metadata(Metadata.builder() @@ -330,11 +335,40 @@ public void get() { .verify(Duration.ofSeconds(5)); } + @Test + public void getParameters() { + mockRequest(InteractionContext.builder() + .request(TestRequest.builder() + .method(GET) + .path("/service_instances/test-service-instance-id/parameters") + .build()) + .response(TestResponse.builder() + .status(OK) + .payload("fixtures/client/v2/service_instances/GET_{id}_parameters_response.json") + .build()) + .build()); + + this.serviceInstances.getParameters(GetServiceInstanceParametersRequest.builder() + .serviceInstanceId("test-service-instance-id") + .build()) + .as(StepVerifier::create) + .expectNext(GetServiceInstanceParametersResponse.builder() + .parameter("foo", "abc") + .parameter("bar", 12345) + .parameter("baz", false) + .parameter("qux", 3.141) + .parameter("quux", null) + .build()) + .expectComplete() + .verify(Duration.ofSeconds(5)); + } + @Test public void getPermissions() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() - .method(GET).path("/service_instances/test-service-instance-id/permissions") + .method(GET) + .path("/service_instances/test-service-instance-id/permissions") .build()) .response(TestResponse.builder() .status(OK) @@ -342,10 +376,9 @@ public void getPermissions() { .build()) .build()); - this.serviceInstances - .getPermissions(GetServiceInstancePermissionsRequest.builder() - .serviceInstanceId("test-service-instance-id") - .build()) + this.serviceInstances.getPermissions(GetServiceInstancePermissionsRequest.builder() + .serviceInstanceId("test-service-instance-id") + .build()) .as(StepVerifier::create) .expectNext(GetServiceInstancePermissionsResponse.builder() .manage(true) @@ -359,7 +392,8 @@ public void getPermissions() { public void list() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() - .method(GET).path("/service_instances?q=name:test-name&page=-1") + .method(GET) + .path("/service_instances?q=name:test-name&page=-1") .build()) .response(TestResponse.builder() .status(OK) @@ -367,11 +401,10 @@ public void list() { .build()) .build()); - this.serviceInstances - .list(ListServiceInstancesRequest.builder() - .name("test-name") - .page(-1) - .build()) + this.serviceInstances.list(ListServiceInstancesRequest.builder() + .name("test-name") + .page(-1) + .build()) .as(StepVerifier::create) .expectNext(ListServiceInstancesResponse.builder() .totalResults(1) @@ -384,7 +417,8 @@ public void list() { .build()) .entity(ServiceInstanceEntity.builder() .name("name-133") - .credential("creds-key-72", "creds-val-72") + .credential("creds-key-72", + "creds-val-72") .servicePlanId("2b53255a-8b40-4671-803d-21d3f5d4183a") .spaceId("83b3e705-49fd-4c40-8adf-f5e34f622a19") .type("managed_service_instance") @@ -399,10 +433,8 @@ public void list() { .tag("mongodb") .spaceUrl("/v2/spaces/83b3e705-49fd-4c40-8adf-f5e34f622a19") .servicePlanUrl("/v2/service_plans/2b53255a-8b40-4671-803d-21d3f5d4183a") - .serviceBindingsUrl - ("/v2/service_instances/24ec15f9-f6c7-434a-8893-51baab8408d8/service_bindings") - .serviceKeysUrl - ("/v2/service_instances/24ec15f9-f6c7-434a-8893-51baab8408d8/service_keys") + .serviceBindingsUrl("/v2/service_instances/24ec15f9-f6c7-434a-8893-51baab8408d8/service_bindings") + .serviceKeysUrl("/v2/service_instances/24ec15f9-f6c7-434a-8893-51baab8408d8/service_keys") .build()) .build()) .build()) @@ -414,7 +446,8 @@ public void list() { public void listRoutes() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() - .method(GET).path("/service_instances/26fae4d0-df82-42f3-ac67-da5873e3a277/routes") + .method(GET) + .path("/service_instances/26fae4d0-df82-42f3-ac67-da5873e3a277/routes") .build()) .response(TestResponse.builder() .status(OK) @@ -422,10 +455,9 @@ public void listRoutes() { .build()) .build()); - this.serviceInstances - .listRoutes(ListServiceInstanceRoutesRequest.builder() - .serviceInstanceId("26fae4d0-df82-42f3-ac67-da5873e3a277") - .build()) + this.serviceInstances.listRoutes(ListServiceInstanceRoutesRequest.builder() + .serviceInstanceId("26fae4d0-df82-42f3-ac67-da5873e3a277") + .build()) .as(StepVerifier::create) .expectNext(ListServiceInstanceRoutesResponse.builder() .totalResults(1) @@ -459,7 +491,8 @@ public void listRoutes() { public void listServiceBindings() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() - .method(GET).path("/service_instances/test-service-instance-id/service_bindings?q=app_guid:test-application-id&page=-1") + .method(GET) + .path("/service_instances/test-service-instance-id/service_bindings?q=app_guid:test-application-id&page=-1") .build()) .response(TestResponse.builder() .status(OK) @@ -467,12 +500,11 @@ public void listServiceBindings() { .build()) .build()); - this.serviceInstances - .listServiceBindings(ListServiceInstanceServiceBindingsRequest.builder() - .serviceInstanceId("test-service-instance-id") - .applicationId("test-application-id") - .page(-1) - .build()) + this.serviceInstances.listServiceBindings(ListServiceInstanceServiceBindingsRequest.builder() + .serviceInstanceId("test-service-instance-id") + .applicationId("test-application-id") + .page(-1) + .build()) .as(StepVerifier::create) .expectNext(ListServiceInstanceServiceBindingsResponse.builder() .totalResults(1) @@ -487,7 +519,8 @@ public void listServiceBindings() { .applicationId("8a50163b-a39d-4f44-aece-dc5a956da848") .serviceInstanceId("a5a0567e-edbf-4da9-ae90-dce24af308a1") .bindingOptions(Collections.emptyMap()) - .credential("creds-key-85", "creds-val-85") + .credential("creds-key-85", + "creds-val-85") .gatewayName("") .applicationUrl("/v2/apps/8a50163b-a39d-4f44-aece-dc5a956da848") .serviceInstanceUrl("/v2/service_instances/a5a0567e-edbf-4da9-ae90-dce24af308a1") @@ -502,7 +535,8 @@ public void listServiceBindings() { public void listServiceKeys() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() - .method(GET).path("/service_instances/test-service-instance-id/service_keys?page=-1") + .method(GET) + .path("/service_instances/test-service-instance-id/service_keys?page=-1") .build()) .response(TestResponse.builder() .status(OK) @@ -510,11 +544,10 @@ public void listServiceKeys() { .build()) .build()); - this.serviceInstances - .listServiceKeys(ListServiceInstanceServiceKeysRequest.builder() - .serviceInstanceId("test-service-instance-id") - .page(-1) - .build()) + this.serviceInstances.listServiceKeys(ListServiceInstanceServiceKeysRequest.builder() + .serviceInstanceId("test-service-instance-id") + .page(-1) + .build()) .as(StepVerifier::create) .expectNext(ListServiceInstanceServiceKeysResponse.builder() .totalResults(1) @@ -528,7 +561,8 @@ public void listServiceKeys() { .entity(ServiceKeyEntity.builder() .name("a-service-key") .serviceInstanceId("28120eae-4a44-42da-a3db-2a34aea8dcaa") - .credential("creds-key-68", "creds-val-68") + .credential("creds-key-68", + "creds-val-68") .serviceInstanceUrl("/v2/service_instances/28120eae-4a44-42da-a3db-2a34aea8dcaa") .build()) .build()) @@ -541,18 +575,18 @@ public void listServiceKeys() { public void unbindRoute() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() - .method(DELETE).path("/service_instances/8fe97ac9-d53a-4858-b6a4-53c20f1fe409/routes/3bbd74b5-516d-409e-a107-19eaf9b2da18") + .method(DELETE) + .path("/service_instances/8fe97ac9-d53a-4858-b6a4-53c20f1fe409/routes/3bbd74b5-516d-409e-a107-19eaf9b2da18") .build()) .response(TestResponse.builder() .status(NO_CONTENT) .build()) .build()); - this.serviceInstances - .unbindRoute(UnbindServiceInstanceRouteRequest.builder() - .routeId("3bbd74b5-516d-409e-a107-19eaf9b2da18") - .serviceInstanceId("8fe97ac9-d53a-4858-b6a4-53c20f1fe409") - .build()) + this.serviceInstances.unbindRoute(UnbindServiceInstanceRouteRequest.builder() + .routeId("3bbd74b5-516d-409e-a107-19eaf9b2da18") + .serviceInstanceId("8fe97ac9-d53a-4858-b6a4-53c20f1fe409") + .build()) .as(StepVerifier::create) .expectComplete() .verify(Duration.ofSeconds(5)); @@ -562,7 +596,8 @@ public void unbindRoute() { public void update() { mockRequest(InteractionContext.builder() .request(TestRequest.builder() - .method(PUT).path("/service_instances/test-service-instance-id?accepts_incomplete=true") + .method(PUT) + .path("/service_instances/test-service-instance-id?accepts_incomplete=true") .payload("fixtures/client/v2/service_instances/PUT_{id}_request.json") .build()) .response(TestResponse.builder() @@ -571,14 +606,13 @@ public void update() { .build()) .build()); - this.serviceInstances - .update(UpdateServiceInstanceRequest.builder() - .acceptsIncomplete(true) - .serviceInstanceId("test-service-instance-id") - .servicePlanId("5b5e984f-bbf6-477b-9d3a-b6d5df941b50") - .parameter("the_service_broker", "wants this object") - .tags(Collections.emptyList()) - .build()) + this.serviceInstances.update(UpdateServiceInstanceRequest.builder() + .acceptsIncomplete(true) + .serviceInstanceId("test-service-instance-id") + .servicePlanId("5b5e984f-bbf6-477b-9d3a-b6d5df941b50") + .parameter("the_service_broker", "wants this object") + .tags(Collections.emptyList()) + .build()) .as(StepVerifier::create) .expectNext(UpdateServiceInstanceResponse.builder() .metadata(Metadata.builder() @@ -588,7 +622,8 @@ public void update() { .build()) .entity(ServiceInstanceEntity.builder() .name("name-139") - .credential("creds-key-75", "creds-val-75") + .credential("creds-key-75", + "creds-val-75") .servicePlanId("b07ff29a-78b8-486f-87a8-3f695368b83d") .spaceId("04219ffa-a817-459f-bbd7-c161bdca541b") .type("managed_service_instance") diff --git a/cloudfoundry-client-reactor/src/test/resources/fixtures/client/v2/service_bindings/GET_{id}_parameters_response.json b/cloudfoundry-client-reactor/src/test/resources/fixtures/client/v2/service_bindings/GET_{id}_parameters_response.json new file mode 100644 index 00000000000..2eb35959385 --- /dev/null +++ b/cloudfoundry-client-reactor/src/test/resources/fixtures/client/v2/service_bindings/GET_{id}_parameters_response.json @@ -0,0 +1,7 @@ +{ + "foo": "abc", + "bar": 12345, + "baz": false, + "qux": 3.141, + "quux": null +} \ No newline at end of file diff --git a/cloudfoundry-client-reactor/src/test/resources/fixtures/client/v2/service_instances/GET_{id}_parameters_response.json b/cloudfoundry-client-reactor/src/test/resources/fixtures/client/v2/service_instances/GET_{id}_parameters_response.json new file mode 100644 index 00000000000..2eb35959385 --- /dev/null +++ b/cloudfoundry-client-reactor/src/test/resources/fixtures/client/v2/service_instances/GET_{id}_parameters_response.json @@ -0,0 +1,7 @@ +{ + "foo": "abc", + "bar": 12345, + "baz": false, + "qux": 3.141, + "quux": null +} \ No newline at end of file diff --git a/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/servicebindings/ServiceBindingsV2.java b/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/servicebindings/ServiceBindingsV2.java index c6ba82b78bd..62a0487fc80 100644 --- a/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/servicebindings/ServiceBindingsV2.java +++ b/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/servicebindings/ServiceBindingsV2.java @@ -47,6 +47,15 @@ public interface ServiceBindingsV2 { */ Mono get(GetServiceBindingRequest request); + /** + * Makes the Retrieve a Particular Service Binding's Parameters + * request + * + * @param request the Get Parameters request + * @return the response from the Get Parameters request + */ + Mono getParameters(GetServiceBindingParametersRequest request); + /** * Makes the List all Service Bindings request * diff --git a/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/servicebindings/_GetServiceBindingParametersRequest.java b/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/servicebindings/_GetServiceBindingParametersRequest.java new file mode 100644 index 00000000000..01da4f7000e --- /dev/null +++ b/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/servicebindings/_GetServiceBindingParametersRequest.java @@ -0,0 +1,19 @@ +package org.cloudfoundry.client.v2.servicebindings; + +import org.immutables.value.Value; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * The request payload for the Get Service Binding Parameters operation + */ +@Value.Immutable +abstract class _GetServiceBindingParametersRequest { + + /** + * The service binding id + */ + @JsonIgnore + abstract String getServiceBindingId(); + +} diff --git a/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/servicebindings/_GetServiceBindingParametersResponse.java b/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/servicebindings/_GetServiceBindingParametersResponse.java new file mode 100644 index 00000000000..7b7bb1ba670 --- /dev/null +++ b/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/servicebindings/_GetServiceBindingParametersResponse.java @@ -0,0 +1,46 @@ +package org.cloudfoundry.client.v2.servicebindings; + +import java.io.IOException; +import java.util.Map; + +import org.cloudfoundry.AllowNulls; +import org.immutables.value.Value; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; + +/** + * The response payload for the Get Service Binding Parameters operation + */ +@JsonDeserialize(using = _GetServiceBindingParametersResponse.ServiceBindingParametersResponseDeserializer.class) +@Value.Immutable +abstract class _GetServiceBindingParametersResponse { + + /** + * The service binding parameters + */ + @AllowNulls + abstract Map getParameters(); + + static final class ServiceBindingParametersResponseDeserializer extends StdDeserializer { + + private static final long serialVersionUID = -2925663073415059473L; + + ServiceBindingParametersResponseDeserializer() { + super(GetServiceBindingParametersResponse.class); + } + + @Override + public GetServiceBindingParametersResponse deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + return GetServiceBindingParametersResponse.builder() + .parameters(p.readValueAs(new TypeReference>() { + + })) + .build(); + } + } + +} diff --git a/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/serviceinstances/ServiceInstances.java b/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/serviceinstances/ServiceInstances.java index 554d0faac5b..062cba9eeb9 100644 --- a/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/serviceinstances/ServiceInstances.java +++ b/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/serviceinstances/ServiceInstances.java @@ -55,6 +55,15 @@ public interface ServiceInstances { */ Mono get(GetServiceInstanceRequest request); + /** + * Makes the + * Retrieve a Particular Service Instance's Parameters request + * + * @param request the Get Parameters request + * @return the response from the Get Parameters request + */ + Mono getParameters(GetServiceInstanceParametersRequest request); + /** * Makes the Retrieving permissions on a Service Instance request * diff --git a/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/serviceinstances/_DeleteServiceInstanceResponse.java b/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/serviceinstances/_DeleteServiceInstanceResponse.java index da063048746..3a7e22ffb56 100644 --- a/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/serviceinstances/_DeleteServiceInstanceResponse.java +++ b/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/serviceinstances/_DeleteServiceInstanceResponse.java @@ -28,8 +28,6 @@ import org.cloudfoundry.client.v2.jobs.JobEntity; import org.immutables.value.Value; -import java.io.IOException; - /** * The response for the Delete Service Instance operation */ diff --git a/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/serviceinstances/_GetServiceInstanceParametersRequest.java b/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/serviceinstances/_GetServiceInstanceParametersRequest.java new file mode 100644 index 00000000000..24febe38cf7 --- /dev/null +++ b/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/serviceinstances/_GetServiceInstanceParametersRequest.java @@ -0,0 +1,19 @@ +package org.cloudfoundry.client.v2.serviceinstances; + +import org.immutables.value.Value; + +import com.fasterxml.jackson.annotation.JsonIgnore; + +/** + * The request payload for the Get Parameters operation + */ +@Value.Immutable +abstract class _GetServiceInstanceParametersRequest { + + /** + * The service instance id + */ + @JsonIgnore + abstract String getServiceInstanceId(); + +} diff --git a/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/serviceinstances/_GetServiceInstanceParametersResponse.java b/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/serviceinstances/_GetServiceInstanceParametersResponse.java new file mode 100644 index 00000000000..94eca5af4f7 --- /dev/null +++ b/cloudfoundry-client/src/main/java/org/cloudfoundry/client/v2/serviceinstances/_GetServiceInstanceParametersResponse.java @@ -0,0 +1,46 @@ +package org.cloudfoundry.client.v2.serviceinstances; + +import java.io.IOException; +import java.util.Map; + +import org.cloudfoundry.AllowNulls; +import org.immutables.value.Value; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; + +/** + * The resource response payload for the Get Parameters Response + */ +@JsonDeserialize(using = _GetServiceInstanceParametersResponse.ServiceInstanceParametersResponseDeserializer.class) +@Value.Immutable +abstract class _GetServiceInstanceParametersResponse { + + /** + * The service instance parameters + */ + @AllowNulls + abstract Map getParameters(); + + static final class ServiceInstanceParametersResponseDeserializer extends StdDeserializer { + + private static final long serialVersionUID = -2925663073415059473L; + + ServiceInstanceParametersResponseDeserializer() { + super(GetServiceInstanceParametersResponse.class); + } + + @Override + public GetServiceInstanceParametersResponse deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + return GetServiceInstanceParametersResponse.builder() + .parameters(p.readValueAs(new TypeReference>() { + + })) + .build(); + } + } + +} diff --git a/cloudfoundry-client/src/test/java/org/cloudfoundry/client/v2/servicebindings/GetServiceBindingParametersRequestTest.java b/cloudfoundry-client/src/test/java/org/cloudfoundry/client/v2/servicebindings/GetServiceBindingParametersRequestTest.java new file mode 100644 index 00000000000..139f2f9aed4 --- /dev/null +++ b/cloudfoundry-client/src/test/java/org/cloudfoundry/client/v2/servicebindings/GetServiceBindingParametersRequestTest.java @@ -0,0 +1,36 @@ +/* + * Copyright 2013-2019 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.client.v2.servicebindings; + +import org.junit.Test; + +public final class GetServiceBindingParametersRequestTest { + + @Test(expected = IllegalStateException.class) + public void noServiceInstanceId() { + GetServiceBindingParametersRequest.builder() + .build(); + } + + @Test + public void valid() { + GetServiceBindingParametersRequest.builder() + .serviceBindingId("test-service-instance-id") + .build(); + } + +} diff --git a/cloudfoundry-client/src/test/java/org/cloudfoundry/client/v2/serviceinstances/GetServiceInstanceParametersRequestTest.java b/cloudfoundry-client/src/test/java/org/cloudfoundry/client/v2/serviceinstances/GetServiceInstanceParametersRequestTest.java new file mode 100644 index 00000000000..905d6f26490 --- /dev/null +++ b/cloudfoundry-client/src/test/java/org/cloudfoundry/client/v2/serviceinstances/GetServiceInstanceParametersRequestTest.java @@ -0,0 +1,36 @@ +/* + * Copyright 2013-2019 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.client.v2.serviceinstances; + +import org.junit.Test; + +public final class GetServiceInstanceParametersRequestTest { + + @Test(expected = IllegalStateException.class) + public void noServiceInstanceId() { + GetServiceInstanceParametersRequest.builder() + .build(); + } + + @Test + public void valid() { + GetServiceInstanceParametersRequest.builder() + .serviceInstanceId("test-service-instance-id") + .build(); + } + +}