/** * Construct a {@link GetLastServiceOperationRequest} from the provided values. * * @return the newly constructed {@literal GetLastServiceOperationRequest} */ public GetLastServiceOperationRequest build() { return new GetLastServiceOperationRequest(serviceInstanceId, serviceDefinitionId, planId, operation, platformInstanceId, apiInfoLocation, originatingIdentity); } }
@Test public void requestWithDefaultsIsBuilt() { GetLastServiceOperationRequest request = GetLastServiceOperationRequest.builder() .build(); assertThat(request.getServiceDefinitionId()).isNull(); assertThat(request.getServiceInstanceId()).isNull(); assertThat(request.getPlanId()).isNull(); assertThat(request.getOperation()).isNull(); assertThat(request.getApiInfoLocation()).isNull(); assertThat(request.getPlatformInstanceId()).isNull(); assertThat(request.getOriginatingIdentity()).isNull(); }
@GetMapping(value = { "/{platformInstanceId}/v2/service_instances/{instanceId}/last_operation", "/v2/service_instances/{instanceId}/last_operation" }) public ResponseEntity<GetLastServiceOperationResponse> getServiceInstanceLastOperation( @PathVariable Map<String, String> pathVariables, @PathVariable(ServiceBrokerRequest.INSTANCE_ID_PATH_VARIABLE) String serviceInstanceId, @RequestParam(value = ServiceBrokerRequest.SERVICE_ID_PARAMETER, required = false) String serviceDefinitionId, @RequestParam(value = ServiceBrokerRequest.PLAN_ID_PARAMETER, required = false) String planId, @RequestParam(value = "operation", required = false) String operation, @RequestHeader(value = ServiceBrokerRequest.API_INFO_LOCATION_HEADER, required = false) String apiInfoLocation, @RequestHeader(value = ServiceBrokerRequest.ORIGINATING_IDENTITY_HEADER, required = false) String originatingIdentityString) { GetLastServiceOperationRequest request = GetLastServiceOperationRequest.builder() .serviceDefinitionId(serviceDefinitionId) .serviceInstanceId(serviceInstanceId) .planId(planId) .operation(operation) .platformInstanceId(pathVariables.get(ServiceBrokerRequest.PLATFORM_INSTANCE_ID_VARIABLE)) .apiInfoLocation(apiInfoLocation) .originatingIdentity(parseOriginatingIdentity(originatingIdentityString)) .build(); logger.debug("Getting service instance last operation: request={}", request); GetLastServiceOperationResponse response = service.getLastOperation(request); logger.debug("Getting service instance last operation succeeded: serviceInstanceId={}, response={}", serviceInstanceId, response); boolean isSuccessfulDelete = response.getState().equals(OperationState.SUCCEEDED) && response.isDeleteOperation(); return new ResponseEntity<>(response, isSuccessfulDelete ? HttpStatus.GONE : HttpStatus.OK); }
@Override public Mono<Void> complete( GetLastServiceOperationRequest request, GetLastServiceOperationResponse response) { return results.setAfterLastOperation("after " + request.getServiceInstanceId()); } }))
@Override public Mono<GetLastServiceOperationResponse> getLastOperation(GetLastServiceOperationRequest request) { if (request.getServiceDefinitionId() == null) { return Mono.error(new ServiceBrokerInvalidParametersException("arrrr")); } return Mono.just(GetLastServiceOperationResponse.builder().build()); } }
@Test @SuppressWarnings("serial") public void requestWithAllValuesIsBuilt() { Context originatingIdentity = PlatformContext.builder() .platform("test-platform") .build(); GetLastServiceOperationRequest request = GetLastServiceOperationRequest.builder() .serviceInstanceId("service-instance-id") .serviceDefinitionId("service-definition-id") .planId("plan-id") .operation("working") .platformInstanceId("platform-instance-id") .apiInfoLocation("https://api.example.com") .originatingIdentity(originatingIdentity) .build(); assertThat(request.getServiceInstanceId()).isEqualTo("service-instance-id"); assertThat(request.getServiceDefinitionId()).isEqualTo("service-definition-id"); assertThat(request.getPlanId()).isEqualTo("plan-id"); assertThat(request.getOperation()).isEqualTo("working"); assertThat(request.getPlatformInstanceId()).isEqualTo("platform-instance-id"); assertThat(request.getApiInfoLocation()).isEqualTo("https://api.example.com"); assertThat(request.getOriginatingIdentity()).isEqualTo(originatingIdentity); }
@RequestHeader(value = ServiceBrokerRequest.API_INFO_LOCATION_HEADER, required = false) String apiInfoLocation, @RequestHeader(value = ServiceBrokerRequest.ORIGINATING_IDENTITY_HEADER, required = false) String originatingIdentityString) { return Mono.just(GetLastServiceOperationRequest.builder() .serviceDefinitionId(serviceDefinitionId) .serviceInstanceId(serviceInstanceId)
@Override public Mono<GetLastServiceOperationResponse> getLastOperation(GetLastServiceOperationRequest request) { String serviceInstanceId = request.getServiceInstanceId(); // // determine the status of the operation in progress // OperationState state = OperationState.SUCCEEDED; GetLastServiceOperationResponse response = GetLastServiceOperationResponse.builder() .operationState(state) .build(); return Mono.just(response); } }
@Test public void getLastOperationFails() { prepareLastOperationEventFlows(); StepVerifier .create(serviceInstanceEventService.getLastOperation(GetLastServiceOperationRequest.builder() .serviceInstanceId("foo") .build())) .expectError() .verify(); assertThat(this.results.getBeforeLastOperation()).isEqualTo("before foo"); assertThat(this.results.getAfterLastOperation()).isNullOrEmpty(); assertThat(this.results.getErrorLastOperation()).isEqualTo("error foo"); }
private void prepareLastOperationEventFlows() { this.eventFlowRegistries.getAsyncOperationRegistry() .addInitializationFlow(new AsyncOperationServiceInstanceInitializationFlow() { @Override public Mono<Void> initialize(GetLastServiceOperationRequest request) { return results.setBeforeLastOperation("before " + request.getServiceInstanceId()); } }) .then(this.eventFlowRegistries.getAsyncOperationRegistry() .addCompletionFlow(new AsyncOperationServiceInstanceCompletionFlow() { @Override public Mono<Void> complete( GetLastServiceOperationRequest request, GetLastServiceOperationResponse response) { return results.setAfterLastOperation("after " + request.getServiceInstanceId()); } })) .then(eventFlowRegistries.getAsyncOperationRegistry() .addErrorFlow(new AsyncOperationServiceInstanceErrorFlow() { @Override public Mono<Void> error(GetLastServiceOperationRequest request, Throwable t) { return results.setErrorLastOperation("error " + request.getServiceInstanceId()); } })) .subscribe(); }
/** * Construct a {@link GetLastServiceOperationRequest} from the provided values. * * @return the newly constructed {@literal GetLastServiceOperationRequest} */ public GetLastServiceOperationRequest build() { return new GetLastServiceOperationRequest(serviceInstanceId, serviceDefinitionId, planId, operation, platformInstanceId, apiInfoLocation, originatingIdentity); } }
@Test public void getLastOperationSucceeds() { prepareLastOperationEventFlows(); StepVerifier .create(serviceInstanceEventService.getLastOperation(GetLastServiceOperationRequest.builder() .serviceInstanceId("foo") .serviceDefinitionId("bar") .build())) .expectNext(GetLastServiceOperationResponse.builder().build()) .verifyComplete(); assertThat(this.results.getBeforeLastOperation()).isEqualTo("before foo"); assertThat(this.results.getAfterLastOperation()).isEqualTo("after foo"); assertThat(this.results.getErrorLastOperation()).isNullOrEmpty(); }
@Test public void getServiceInstanceLastOperationParametersAreMappedToRequest() { GetLastServiceOperationRequest expectedRequest = GetLastServiceOperationRequest.builder() .serviceInstanceId("service-instance-id") .serviceDefinitionId("service-definition-id") .planId("plan-id") .operation("operation") .platformInstanceId("platform-instance-id") .apiInfoLocation("api-info-location") .originatingIdentity(identityContext) .build(); ServiceInstanceController controller = createControllerUnderTest(expectedRequest); controller.getServiceInstanceLastOperation(pathVariables, "service-instance-id", "service-definition-id", "plan-id", "operation", "api-info-location", encodeOriginatingIdentity(identityContext)) .block(); }