serviceInstanceId, bindingId)) .doOnError(e -> logger.debug(e.getMessage(), e))) .flatMap(response -> Mono.just(response.getState().equals(OperationState.SUCCEEDED) && response.isDeleteOperation()) .flatMap(isSuccessfulDelete -> Mono.just(new ResponseEntity<>(response, isSuccessfulDelete ? HttpStatus.GONE : HttpStatus.OK))));
@Test public void responseWithAllValuesIsBuilt() { GetLastServiceOperationResponse response = GetLastServiceOperationResponse.builder() .operationState(OperationState.SUCCEEDED) .description("description") .deleteOperation(true) .build(); assertThat(response.getState()).isEqualTo(OperationState.SUCCEEDED); assertThat(response.getDescription()).isEqualTo("description"); assertThat(response.isDeleteOperation()).isEqualTo(true); DocumentContext json = JsonUtils.toJsonPath(response); assertThat(json).hasPath("$.state").isEqualTo(OperationState.SUCCEEDED.toString()); assertThat(json).hasPath("$.description").isEqualTo("description"); }
@Test public void responseWithAllValuesIsBuilt() { GetLastServiceBindingOperationResponse response = GetLastServiceBindingOperationResponse.builder() .operationState(OperationState.SUCCEEDED) .description("description") .deleteOperation(true) .build(); assertThat(response.getState()).isEqualTo(OperationState.SUCCEEDED); assertThat(response.getDescription()).isEqualTo("description"); assertThat(response.isDeleteOperation()).isEqualTo(true); DocumentContext json = JsonUtils.toJsonPath(response); assertThat(json).hasPath("$.state").isEqualTo(OperationState.SUCCEEDED.toString()); assertThat(json).hasPath("$.description").isEqualTo("description"); }
boolean isSuccessfulDelete = response.getState().equals(OperationState.SUCCEEDED) && response.isDeleteOperation(); return new ResponseEntity<>(response, isSuccessfulDelete ? HttpStatus.GONE : HttpStatus.OK); });
@Test public void lastOperationHasInProgressStatus() throws Exception { setupServiceInstanceBindingService(GetLastServiceBindingOperationResponse.builder() .operationState(OperationState.IN_PROGRESS) .description("working on it") .build()); client.get().uri(buildLastOperationUrl()) .exchange() .expectStatus().isOk() .expectBody() .jsonPath("$.state").isEqualTo(OperationState.IN_PROGRESS.toString()) .jsonPath("$.description", is("working on it")); verify(serviceInstanceBindingService).getLastOperation(any(GetLastServiceBindingOperationRequest.class)); GetLastServiceBindingOperationRequest actualRequest = verifyLastOperation(); assertHeaderValuesNotSet(actualRequest); }
@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); }
@Test public void lastOperationHasSucceededStatusWithDeletionComplete() throws Exception { setupServiceInstanceBindingService(GetLastServiceBindingOperationResponse.builder() .operationState(OperationState.SUCCEEDED) .description("all good") .deleteOperation(true) .build()); client.get().uri(buildLastOperationUrl()) .exchange() .expectStatus().is4xxClientError() .expectStatus().isEqualTo(HttpStatus.GONE) .expectBody() .jsonPath("$.state").isEqualTo(OperationState.SUCCEEDED.toString()) .jsonPath("$.description", is("all good")); verify(serviceInstanceBindingService).getLastOperation(any(GetLastServiceBindingOperationRequest.class)); GetLastServiceBindingOperationRequest actualRequest = verifyLastOperation(); assertHeaderValuesNotSet(actualRequest); }
@GetMapping(value = { "/{platformInstanceId}/v2/service_instances/{instanceId}/service_bindings/{bindingId}/last_operation", "/v2/service_instances/{instanceId}/service_bindings/{bindingId}/last_operation" }) public ResponseEntity<GetLastServiceBindingOperationResponse> getServiceInstanceBindingLastOperation( @PathVariable Map<String, String> pathVariables, @PathVariable(ServiceBrokerRequest.INSTANCE_ID_PATH_VARIABLE) String serviceInstanceId, @PathVariable(ServiceBrokerRequest.BINDING_ID_PATH_VARIABLE) String bindingId, @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) { GetLastServiceBindingOperationRequest request = GetLastServiceBindingOperationRequest.builder() .serviceDefinitionId(serviceDefinitionId) .serviceInstanceId(serviceInstanceId) .bindingId(bindingId) .planId(planId) .operation(operation) .platformInstanceId(pathVariables.get(ServiceBrokerRequest.PLATFORM_INSTANCE_ID_VARIABLE)) .apiInfoLocation(apiInfoLocation) .originatingIdentity(parseOriginatingIdentity(originatingIdentityString)) .build(); logger.debug("Getting service instance binding last operation: request={}", request); GetLastServiceBindingOperationResponse response = service.getLastOperation(request); logger.debug("Getting service instance binding last operation succeeded: serviceInstanceId={}, bindingId={}, response={}", serviceInstanceId, bindingId, response); boolean isSuccessfulDelete = response.getState().equals(OperationState.SUCCEEDED) && response.isDeleteOperation(); return new ResponseEntity<>(response, isSuccessfulDelete ? HttpStatus.GONE : HttpStatus.OK); }
@Test public void lastOperationHasSucceededStatus() throws Exception { setupServiceInstanceBindingService(GetLastServiceBindingOperationResponse.builder() .operationState(OperationState.SUCCEEDED) .description("all good") .build()); client.get().uri(buildLastOperationUrl(PLATFORM_INSTANCE_ID)) .header(API_INFO_LOCATION_HEADER, API_INFO_LOCATION) .header(ORIGINATING_IDENTITY_HEADER, buildOriginatingIdentityHeader()) .exchange() .expectStatus().isOk() .expectBody() .jsonPath("$.state").isEqualTo(OperationState.SUCCEEDED.toString()) .jsonPath("$.description", is("all good")); verify(serviceInstanceBindingService).getLastOperation(any(GetLastServiceBindingOperationRequest.class)); GetLastServiceBindingOperationRequest actualRequest = verifyLastOperation(); assertHeaderValuesSet(actualRequest); }
@Test public void lastOperationHasFailedStatus() throws Exception { setupServiceInstanceBindingService(GetLastServiceBindingOperationResponse.builder() .operationState(OperationState.FAILED) .description("not so good") .build()); client.get().uri(buildLastOperationUrl()) .exchange() .expectStatus().isOk() .expectBody() .jsonPath("$.state").isEqualTo(OperationState.FAILED.toString()) .jsonPath("$.description").isEqualTo("not so good"); verify(serviceInstanceBindingService).getLastOperation(any(GetLastServiceBindingOperationRequest.class)); GetLastServiceBindingOperationRequest actualRequest = verifyLastOperation(); assertHeaderValuesNotSet(actualRequest); }
@Test public void lastOperationHasFailedStatus() throws Exception { setupServiceInstanceService(GetLastServiceOperationResponse.builder() .operationState(OperationState.FAILED) .description("not so good") .build()); MvcResult mvcResult = mockMvc.perform(get(buildLastOperationUrl())) .andExpect(request().asyncStarted()) .andReturn(); mockMvc.perform(asyncDispatch(mvcResult)) .andExpect(status().isOk()) .andExpect(jsonPath("$.state", is(OperationState.FAILED.toString()))) .andExpect(jsonPath("$.description", is("not so good"))); }
@Test public void lastOperationHasSucceededStatusWithDeletionComplete() throws Exception { setupServiceInstanceService(GetLastServiceOperationResponse.builder() .operationState(OperationState.SUCCEEDED) .description("all gone") .deleteOperation(true) .build()); MvcResult mvcResult = mockMvc.perform(get(buildLastOperationUrl())) .andExpect(request().asyncStarted()) .andReturn(); mockMvc.perform(asyncDispatch(mvcResult)) .andExpect(status().isGone()) .andExpect(jsonPath("$.state", is(OperationState.SUCCEEDED.toString()))) .andExpect(jsonPath("$.description", is("all gone"))); }
@Test public void lastOperationHasFailedStatus() throws Exception { setupServiceInstanceBindingService(GetLastServiceBindingOperationResponse.builder() .operationState(OperationState.FAILED) .description("not so good") .build()); MvcResult mvcResult = mockMvc.perform(get(buildLastOperationUrl())) .andExpect(request().asyncStarted()) .andExpect(status().isOk()) .andReturn(); mockMvc.perform(asyncDispatch(mvcResult)) .andExpect(status().isOk()) .andExpect(jsonPath("$.state", is(OperationState.FAILED.toString()))) .andExpect(jsonPath("$.description", is("not so good"))); }
@Test public void lastOperationHasInProgressStatus() throws Exception { setupServiceInstanceService(GetLastServiceOperationResponse.builder() .operationState(OperationState.IN_PROGRESS) .description("working on it") .build()); MvcResult mvcResult = mockMvc.perform(get(buildLastOperationUrl())) .andExpect(request().asyncStarted()) .andReturn(); mockMvc.perform(asyncDispatch(mvcResult)) .andExpect(status().isOk()) .andExpect(jsonPath("$.state", is(OperationState.IN_PROGRESS.toString()))) .andExpect(jsonPath("$.description", is("working on it"))); GetLastServiceOperationRequest actualRequest = verifyLastOperation(); assertHeaderValuesNotSet(actualRequest); }
@Test public void lastOperationHasInProgressStatus() throws Exception { setupServiceInstanceBindingService(GetLastServiceBindingOperationResponse.builder() .operationState(OperationState.IN_PROGRESS) .description("working on it") .build()); MvcResult mvcResult = mockMvc.perform(get(buildLastOperationUrl()) .contentType(MediaType.APPLICATION_JSON)) .andExpect(request().asyncStarted()) .andReturn(); mockMvc.perform(asyncDispatch(mvcResult)) .andExpect(status().isOk()) .andExpect(jsonPath("$.state", is(OperationState.IN_PROGRESS.toString()))) .andExpect(jsonPath("$.description", is("working on it"))); GetLastServiceBindingOperationRequest actualRequest = verifyLastOperation(); assertHeaderValuesNotSet(actualRequest); }
@Test public void lastOperationHasSucceededStatusWithDeletionComplete() throws Exception { setupServiceInstanceBindingService(GetLastServiceBindingOperationResponse.builder() .operationState(OperationState.SUCCEEDED) .description("all gone") .deleteOperation(true) .build()); MvcResult mvcResult = mockMvc.perform(get(buildLastOperationUrl())) .andExpect(request().asyncStarted()) .andExpect(status().isOk()) .andReturn(); mockMvc.perform(asyncDispatch(mvcResult)) .andExpect(status().isGone()) .andExpect(jsonPath("$.state", is(OperationState.SUCCEEDED.toString()))) .andExpect(jsonPath("$.description", is("all gone"))); }
@Test public void lastOperationHasSucceededStatus() throws Exception { setupServiceInstanceService(GetLastServiceOperationResponse.builder() .operationState(OperationState.SUCCEEDED) .description("all good") .build()); MvcResult mvcResult = mockMvc.perform(get(buildLastOperationUrl(PLATFORM_INSTANCE_ID)) .header(API_INFO_LOCATION_HEADER, API_INFO_LOCATION) .header(ORIGINATING_IDENTITY_HEADER, buildOriginatingIdentityHeader())) .andExpect(request().asyncStarted()) .andReturn(); mockMvc.perform(asyncDispatch(mvcResult)) .andExpect(status().isOk()) .andExpect(jsonPath("$.state", is(OperationState.SUCCEEDED.toString()))) .andExpect(jsonPath("$.description", is("all good"))); GetLastServiceOperationRequest actualRequest = verifyLastOperation(); assertHeaderValuesSet(actualRequest); }
@Test public void lastOperationHasFailedStatus() { setupServiceInstanceService(GetLastServiceOperationResponse.builder() .operationState(OperationState.FAILED) .description("not so good") .build()); client.get().uri(buildLastOperationUrl()) .exchange() .expectStatus().isOk() .expectBody() .jsonPath("$.state").isEqualTo(OperationState.FAILED.toString()) .jsonPath("$.description").isEqualTo("not so good"); }
@Test public void lastOperationHasSucceededStatus() throws Exception { setupServiceInstanceBindingService(GetLastServiceBindingOperationResponse.builder() .operationState(OperationState.SUCCEEDED) .description("all good") .build()); MvcResult mvcResult = mockMvc.perform(get(buildLastOperationUrl(PLATFORM_INSTANCE_ID)) .header(API_INFO_LOCATION_HEADER, API_INFO_LOCATION) .header(ORIGINATING_IDENTITY_HEADER, buildOriginatingIdentityHeader())) .andExpect(request().asyncStarted()) .andExpect(status().isOk()) .andReturn(); mockMvc.perform(asyncDispatch(mvcResult)) .andExpect(status().isOk()) .andExpect(jsonPath("$.state", is(OperationState.SUCCEEDED.toString()))) .andExpect(jsonPath("$.description", is("all good"))); GetLastServiceBindingOperationRequest actualRequest = verifyLastOperation(); assertHeaderValuesSet(actualRequest); }
@Test public void lastOperationHasInProgressStatus() { setupServiceInstanceService(GetLastServiceOperationResponse.builder() .operationState(OperationState.IN_PROGRESS) .description("working on it") .build()); client.get().uri(buildLastOperationUrl()) .exchange() .expectStatus().isOk() .expectBody() .jsonPath("$.state").isEqualTo(OperationState.IN_PROGRESS.toString()) .jsonPath("$.description").isEqualTo("working on it"); GetLastServiceOperationRequest actualRequest = verifyLastOperation(); assertHeaderValuesNotSet(actualRequest); }