@Test public void requestWithDefaultsIsBuilt() { CreateServiceInstanceRequest request = CreateServiceInstanceRequest.builder() .build(); assertThat(request.getServiceDefinitionId()).isNull(); assertThat(request.getServiceInstanceId()).isNull(); assertThat(request.getPlanId()).isNull(); assertThat(request.getServiceDefinition()).isNull(); assertThat(request.getContext()).isNull(); assertThat(request.getParameters()).hasSize(0); assertThat(request.isAsyncAccepted()).isEqualTo(false); assertThat(request.getApiInfoLocation()).isNull(); assertThat(request.getPlatformInstanceId()).isNull(); assertThat(request.getOriginatingIdentity()).isNull(); }
/** * Construct a {@link CreateServiceInstanceRequest} from the provided values. * * @return the newly constructed {@literal CreateServiceInstanceRequest} */ public CreateServiceInstanceRequest build() { return new CreateServiceInstanceRequest(serviceDefinitionId, serviceInstanceId, planId, serviceDefinition, plan, parameters, context, asyncAccepted, platformInstanceId, apiInfoLocation, originatingIdentity); } }
/** * {@inheritDoc} */ @Override public final boolean equals(Object o) { if (this == o) return true; if (!(o instanceof CreateServiceInstanceRequest)) return false; if (!super.equals(o)) return false; CreateServiceInstanceRequest that = (CreateServiceInstanceRequest) o; return that.canEqual(this) && Objects.equals(serviceDefinitionId, that.serviceDefinitionId) && Objects.equals(planId, that.planId) && Objects.equals(organizationGuid, that.organizationGuid) && Objects.equals(spaceGuid, that.spaceGuid) && Objects.equals(serviceInstanceId, that.serviceInstanceId) && Objects.equals(serviceDefinition, that.serviceDefinition) && Objects.equals(plan, that.plan); }
@PutMapping(value = { "/{platformInstanceId}/v2/service_instances/{instanceId}", "/v2/service_instances/{instanceId}" }) public ResponseEntity<CreateServiceInstanceResponse> createServiceInstance( @PathVariable Map<String, String> pathVariables, @PathVariable(ServiceBrokerRequest.INSTANCE_ID_PATH_VARIABLE) String serviceInstanceId, @RequestParam(value = AsyncServiceBrokerRequest.ASYNC_REQUEST_PARAMETER, required = false) boolean acceptsIncomplete, @RequestHeader(value = ServiceBrokerRequest.API_INFO_LOCATION_HEADER, required = false) String apiInfoLocation, @RequestHeader(value = ServiceBrokerRequest.ORIGINATING_IDENTITY_HEADER, required = false) String originatingIdentityString, @Valid @RequestBody CreateServiceInstanceRequest request) { ServiceDefinition serviceDefinition = getRequiredServiceDefinition(request.getServiceDefinitionId()); Plan plan = getServiceDefinitionPlan(serviceDefinition, request.getPlanId()); request.setServiceInstanceId(serviceInstanceId); request.setServiceDefinition(serviceDefinition); request.setPlan(plan); setCommonRequestFields(request, pathVariables.get(ServiceBrokerRequest.PLATFORM_INSTANCE_ID_VARIABLE), apiInfoLocation, originatingIdentityString, acceptsIncomplete); logger.debug("Creating a service instance: request={}", request); CreateServiceInstanceResponse response = service.createServiceInstance(request); logger.debug("Creating a service instance succeeded: serviceInstanceId={}, response={}", serviceInstanceId, response); return new ResponseEntity<>(response, getCreateResponseCode(response)); }
@Test @SuppressWarnings("deprecation") public void requestIsDeserializedFromJson() { CreateServiceInstanceRequest request = JsonUtils.readTestDataFile("createRequest.json", CreateServiceInstanceRequest.class); assertThat(request.getServiceDefinitionId()).isEqualTo("test-service-id"); assertThat(request.getPlanId()).isEqualTo("test-plan-id"); assertThat(request.getOrganizationGuid()).isEqualTo("test-organization-guid"); assertThat(request.getSpaceGuid()).isEqualTo("test-space-guid"); }
@Override public Mono<CreateServiceInstanceResponse> createServiceInstance(CreateServiceInstanceRequest request) { String serviceInstanceId = request.getServiceInstanceId(); String planId = request.getPlanId(); Map<String, Object> parameters = request.getParameters(); // // perform the steps necessary to initiate the asynchronous // provisioning of all necessary resources // String dashboardUrl = new String(/* construct a dashboard URL */); CreateServiceInstanceResponse response = CreateServiceInstanceResponse.builder() .dashboardUrl(dashboardUrl) .async(true) .build(); return Mono.just(response); }
@Test public void createServiceInstanceFiltersPlansSucceeds() throws Exception { setupCatalogService(); setupServiceInstanceService(CreateServiceInstanceResponse .builder() .build()); MvcResult mvcResult = mockMvc .perform(put(buildCreateUpdateUrl()) .content(createRequestBody) .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON)) .andExpect(request().asyncStarted()) .andReturn(); mockMvc.perform(asyncDispatch(mvcResult)) .andExpect(status().isCreated()); CreateServiceInstanceRequest actualRequest = verifyCreateServiceInstance(); assertThat(actualRequest.isAsyncAccepted()).isEqualTo(false); assertThat(actualRequest.getPlan().getId()).isEqualTo(actualRequest.getPlanId()); assertHeaderValuesNotSet(actualRequest); }
@Theory public void createServiceInstanceWithResponseGivesExpectedStatus(CreateResponseAndExpectedStatus data) { Mono<CreateServiceInstanceResponse> responseMono; if (data.response == null) { responseMono = Mono.empty(); } else { responseMono = Mono.just(data.response); } when(serviceInstanceService.createServiceInstance(any(CreateServiceInstanceRequest.class))) .thenReturn(responseMono); CreateServiceInstanceRequest createRequest = CreateServiceInstanceRequest.builder() .serviceDefinitionId("service-definition-id") .build(); ResponseEntity<CreateServiceInstanceResponse> responseEntity = controller .createServiceInstance(pathVariables, null, false, null, null, createRequest) .block(); verify(serviceInstanceService).createServiceInstance(any(CreateServiceInstanceRequest.class)); assertThat(responseEntity.getStatusCode()).isEqualTo(data.expectedStatus); assertThat(responseEntity.getBody()).isEqualTo(data.response); }
@Test public void createServiceInstanceWithoutAsyncAndHeadersSucceeds() { setupCatalogService(); setupServiceInstanceService(CreateServiceInstanceResponse.builder() .build()); client.put().uri(buildCreateUpdateUrl()) .contentType(MediaType.APPLICATION_JSON) .syncBody(createRequestBody) .accept(MediaType.APPLICATION_JSON) .exchange() .expectStatus().isCreated(); CreateServiceInstanceRequest actualRequest = verifyCreateServiceInstance(); assertThat(actualRequest.isAsyncAccepted()).isEqualTo(false); assertHeaderValuesNotSet(actualRequest); }
@Override public Mono<CreateServiceInstanceResponse> createServiceInstance( CreateServiceInstanceRequest request) { if (request.getServiceDefinitionId() == null) { return Mono.error(new ServiceBrokerInvalidParametersException("arrrr")); } return Mono.just(CreateServiceInstanceResponse.builder().build()); }
@Test public void createServiceInstanceFiltersPlanSucceeds() { setupCatalogService(); setupServiceInstanceService(CreateServiceInstanceResponse .builder() .build()); client.put().uri(buildCreateUpdateUrl()) .contentType(MediaType.APPLICATION_JSON) .syncBody(createRequestBody) .accept(MediaType.APPLICATION_JSON) .exchange() .expectStatus().isCreated(); CreateServiceInstanceRequest actualRequest = verifyCreateServiceInstance(); assertThat(actualRequest.isAsyncAccepted()).isEqualTo(false); assertThat(actualRequest.getPlan().getId()).isEqualTo("plan-one-id"); assertHeaderValuesNotSet(actualRequest); }
@Override public Mono<Void> complete( CreateServiceInstanceRequest request, CreateServiceInstanceResponse response) { return results.setAfterCreate("after " + request.getServiceInstanceId()); } }))
@RequestHeader(value = ServiceBrokerRequest.ORIGINATING_IDENTITY_HEADER, required = false) String originatingIdentityString, @Valid @RequestBody CreateServiceInstanceRequest request) { return getRequiredServiceDefinition(request.getServiceDefinitionId()) .flatMap(serviceDefinition -> getServiceDefinitionPlan(serviceDefinition, request.getPlanId()) .map(plan -> { request.setPlan(plan); return request; }) .switchIfEmpty(Mono.just(request)) .map(req -> { req.setServiceInstanceId(serviceInstanceId); req.setServiceDefinition(serviceDefinition); return req; }))
@Test(expected = ServiceDefinitionDoesNotExistException.class) public void createServiceInstanceWithInvalidServiceDefinitionIdThrowsException() { CreateServiceInstanceRequest createRequest = CreateServiceInstanceRequest.builder() .serviceDefinitionId("unknown-service-definition-id") .build(); ServiceInstanceController controller = createControllerUnderTest(); controller.createServiceInstance(pathVariables, null, false, null, null, createRequest) .block(); }
@Test public void createServiceInstanceWithAsyncAndHeadersSucceeds() throws Exception { setupCatalogService(); setupServiceInstanceService(CreateServiceInstanceResponse.builder() .async(true) .build()); client.put().uri(buildCreateUpdateUrl(PLATFORM_INSTANCE_ID, true)) .contentType(MediaType.APPLICATION_JSON) .syncBody(createRequestBody) .header(API_INFO_LOCATION_HEADER, API_INFO_LOCATION) .header(ORIGINATING_IDENTITY_HEADER, buildOriginatingIdentityHeader()) .accept(MediaType.APPLICATION_JSON) .exchange() .expectStatus().isAccepted(); CreateServiceInstanceRequest actualRequest = verifyCreateServiceInstance(); assertThat(actualRequest.isAsyncAccepted()).isEqualTo(true); assertHeaderValuesSet(actualRequest); }
private void prepareCreateEventFlows() { this.eventFlowRegistries.getCreateInstanceRegistry() .addInitializationFlow(new CreateServiceInstanceInitializationFlow() { @Override public Mono<Void> initialize(CreateServiceInstanceRequest request) { return results.setBeforeCreate("before " + request.getServiceInstanceId()); } }) .then(this.eventFlowRegistries.getCreateInstanceRegistry() .addCompletionFlow(new CreateServiceInstanceCompletionFlow() { @Override public Mono<Void> complete( CreateServiceInstanceRequest request, CreateServiceInstanceResponse response) { return results.setAfterCreate("after " + request.getServiceInstanceId()); } })) .then(eventFlowRegistries.getCreateInstanceRegistry() .addErrorFlow(new CreateServiceInstanceErrorFlow() { @Override public Mono<Void> error(CreateServiceInstanceRequest request, Throwable t) { return results.setErrorCreate("error " + request.getServiceInstanceId()); } })) .subscribe(); }
.build(); CreateServiceInstanceRequest request = CreateServiceInstanceRequest.builder() .serviceInstanceId("service-instance-id") .serviceDefinitionId("service-definition-id") .build(); assertThat(request.getServiceInstanceId()).isEqualTo("service-instance-id"); assertThat(request.getServiceDefinitionId()).isEqualTo("service-definition-id"); assertThat(request.getPlanId()).isEqualTo("plan-id"); assertThat(request.getParameters()).hasSize(5); assertThat(request.getParameters().get("field1")).isEqualTo("value1"); assertThat(request.getParameters().get("field2")).isEqualTo(2); assertThat(request.getParameters().get("field3")).isEqualTo(true); assertThat(request.getParameters().get("field4")).isEqualTo("value4"); assertThat(request.getParameters().get("field5")).isEqualTo("value5"); assertThat(request.getContext()).isEqualTo(context); assertThat(request.isAsyncAccepted()).isEqualTo(true); assertThat(request.getPlatformInstanceId()).isEqualTo("platform-instance-id"); assertThat(request.getApiInfoLocation()).isEqualTo("https://api.example.com"); assertThat(request.getOriginatingIdentity()).isEqualTo(originatingIdentity);
@Test public void createServiceInstanceFails() { prepareCreateEventFlows(); StepVerifier.create(serviceInstanceEventService.createServiceInstance( CreateServiceInstanceRequest.builder() .serviceInstanceId("foo") .build())) .expectError() .verify(); assertThat(this.results.getBeforeCreate()).isEqualTo("before foo"); assertThat(this.results.getAfterCreate()).isNullOrEmpty(); assertThat(this.results.getErrorCreate()).isEqualTo("error foo"); }
@Test public void createServiceInstanceWithoutAsyncAndHeadersSucceeds() throws Exception { setupCatalogService(); setupServiceInstanceService(CreateServiceInstanceResponse.builder() .build()); MvcResult mvcResult = mockMvc.perform(put(buildCreateUpdateUrl()) .content(createRequestBody) .contentType(MediaType.APPLICATION_JSON) .accept(MediaType.APPLICATION_JSON)) .andExpect(request().asyncStarted()) .andReturn(); mockMvc.perform(asyncDispatch(mvcResult)) .andExpect(status().isCreated()); CreateServiceInstanceRequest actualRequest = verifyCreateServiceInstance(); assertThat(actualRequest.isAsyncAccepted()).isEqualTo(false); assertHeaderValuesNotSet(actualRequest); }
/** * Construct a {@link CreateServiceInstanceRequest} from the provided values. * * @return the newly constructed {@literal CreateServiceInstanceRequest} */ public CreateServiceInstanceRequest build() { return new CreateServiceInstanceRequest(serviceDefinitionId, serviceInstanceId, planId, serviceDefinition, plan, parameters, context, asyncAccepted, platformInstanceId, apiInfoLocation, originatingIdentity); } }