@Override @Synchronized public CompletableFuture<DeleteScopeStatus> deleteScope(final String scopeName) { if (scopes.containsKey(scopeName)) { return scopes.get(scopeName).listStreamsInScope().thenApply(streams -> { if (streams.isEmpty()) { scopes.get(scopeName).deleteScope(); scopes.remove(scopeName); return DeleteScopeStatus.newBuilder().setStatus(DeleteScopeStatus.Status.SUCCESS).build(); } else { return DeleteScopeStatus.newBuilder().setStatus(DeleteScopeStatus.Status.SCOPE_NOT_EMPTY).build(); } }); } else { return CompletableFuture.completedFuture(DeleteScopeStatus.newBuilder().setStatus( DeleteScopeStatus.Status.SCOPE_NOT_FOUND).build()); } }
/** * Delete a scope with given name. * * @param scopeName Name of scope to be deleted * @return DeleteScopeStatus future. */ @Override public CompletableFuture<DeleteScopeStatus> deleteScope(final String scopeName) { return getScope(scopeName).deleteScope().handle((result, ex) -> { if (ex == null) { return DeleteScopeStatus.newBuilder().setStatus(DeleteScopeStatus.Status.SUCCESS).build(); } if (ex.getCause() instanceof StoreException.DataNotFoundException || ex instanceof StoreException.DataNotFoundException) { return DeleteScopeStatus.newBuilder().setStatus(DeleteScopeStatus.Status.SCOPE_NOT_FOUND).build(); } else if (ex.getCause() instanceof StoreException.DataNotEmptyException || ex instanceof StoreException.DataNotEmptyException) { return DeleteScopeStatus.newBuilder().setStatus(DeleteScopeStatus.Status.SCOPE_NOT_EMPTY).build(); } else { log.debug("DeleteScope failed due to {} ", ex); return DeleteScopeStatus.newBuilder().setStatus(DeleteScopeStatus.Status.FAILURE).build(); } }); }
@Test public void testDeleteScope() throws ExecutionException, InterruptedException { when(this.mockControllerService.deleteScope(any())).thenReturn( CompletableFuture.completedFuture(Controller.DeleteScopeStatus.newBuilder() .setStatus(Controller.DeleteScopeStatus.Status.SUCCESS).build())); Assert.assertTrue(this.testController.deleteScope("scope").join()); when(this.mockControllerService.deleteScope(any())).thenReturn( CompletableFuture.completedFuture(Controller.DeleteScopeStatus.newBuilder() .setStatus(Controller.DeleteScopeStatus.Status.SCOPE_NOT_FOUND).build())); Assert.assertFalse(this.testController.deleteScope("scope").join()); when(this.mockControllerService.deleteScope(any())).thenReturn( CompletableFuture.completedFuture(Controller.DeleteScopeStatus.newBuilder() .setStatus(Controller.DeleteScopeStatus.Status.FAILURE).build())); assertThrows("Expected ControllerFailureException", () -> this.testController.deleteScope("scope").join(), ex -> ex instanceof ControllerFailureException); when(this.mockControllerService.deleteScope(any())).thenReturn( CompletableFuture.completedFuture(Controller.DeleteScopeStatus.newBuilder() .setStatus(Controller.DeleteScopeStatus.Status.SCOPE_NOT_EMPTY).build())); assertThrows("Expected IllegalStateException", () -> this.testController.deleteScope("scope").join(), ex -> ex instanceof IllegalStateException); when(this.mockControllerService.deleteScope(any())).thenReturn( CompletableFuture.completedFuture(Controller.DeleteScopeStatus.newBuilder() .setStatusValue(-1).build())); assertThrows("Expected ControllerFailureException", () -> this.testController.deleteScope("scope").join(), ex -> ex instanceof ControllerFailureException); }
DeleteScopeStatus.newBuilder().setStatus(DeleteScopeStatus.Status.SUCCESS).build())); Response response = addAuthHeaders(client.target(resourceURI).request()).buildDelete().invoke(); assertEquals("Delete Scope response code", 204, response.getStatus()); DeleteScopeStatus.newBuilder().setStatus(DeleteScopeStatus.Status.SCOPE_NOT_EMPTY).build())); response = addAuthHeaders(client.target(resourceURI).request()).buildDelete().invoke(); assertEquals("Delete Scope response code", 412, response.getStatus()); DeleteScopeStatus.newBuilder().setStatus(DeleteScopeStatus.Status.SCOPE_NOT_FOUND).build())); response = addAuthHeaders(client.target(resourceURI).request()).buildDelete().invoke(); assertEquals("Delete Scope response code", 404, response.getStatus()); DeleteScopeStatus.newBuilder().setStatus(DeleteScopeStatus.Status.FAILURE).build())); response = addAuthHeaders(client.target(resourceURI).request()).buildDelete().invoke(); assertEquals("Delete Scope response code", 500, response.getStatus());
@Override public void deleteScope(ScopeInfo request, StreamObserver<DeleteScopeStatus> responseObserver) { if (request.getScope().equals("scope1")) { responseObserver.onNext(DeleteScopeStatus.newBuilder().setStatus( DeleteScopeStatus.Status.SUCCESS).build()); responseObserver.onCompleted(); } else if (request.getScope().equals("scope2")) { responseObserver.onNext(DeleteScopeStatus.newBuilder().setStatus( DeleteScopeStatus.Status.FAILURE).build()); responseObserver.onCompleted(); } else if (request.getScope().equals("scope3")) { responseObserver.onNext(DeleteScopeStatus.newBuilder() .setStatus(DeleteScopeStatus.Status.SCOPE_NOT_EMPTY) .build()); responseObserver.onCompleted(); } else if (request.getScope().equals("scope4")) { responseObserver.onNext(DeleteScopeStatus.newBuilder() .setStatus(DeleteScopeStatus.Status.SCOPE_NOT_FOUND) .build()); responseObserver.onCompleted(); } else { responseObserver.onError(Status.INTERNAL.withDescription("Server error").asRuntimeException()); } } };