@Override public void sendAuthzError(ResourceState errorState, Resource resource, int status) throws Exception { URI uri = this.destination.resolve(resource.id()); HttpClientRequest request = this.httpClient.put(uri.getPath(), (response) -> { }); request.setChunked(true); RequestContext requestContext = new RequestContext.Builder().build(); ByteBuf encoded = codec.encode(requestContext, errorState); request.write(new Buffer(encoded)); request.end(); }
@Test public void deleteCollection() throws Exception { String methodName = "testDeleteCollection"; assertThat(db.getCollectionNames().contains(methodName)).isFalse(); // create the collection db.createCollection(methodName, new BasicDBObject()); assertThat(db.getCollectionNames().contains(methodName)).isTrue(); client.delete(new RequestContext.Builder().build(), "/testApp/" + BASEPATH + "/" + methodName); // check that it was actually deleted assertThat(db.getCollectionNames().contains(methodName)).isFalse(); }
private void performCommit(Resource resource, RequestType type, Runnable success) { ResourceState state = new DefaultResourceState(); state.putProperty("msg", commitMsg(resource, type)); this.client.create(new RequestContext.Builder().securityContext(this.securityContext).build(), path(), state, (response) -> { if (response.responseType() == ClientResourceResponse.ResponseType.OK) { success.run(); } else { super.error(ResourceErrorResponse.ErrorType.INTERNAL_ERROR, "Unable to commit changes due to: " + response.responseType());; } }); }
@Test public void getStorageEmpty() throws Exception { db.dropDatabase(); // TODO: create a new DB here instead of dropping the old one assertThat(db.getCollectionNames()).hasSize(0); ResourceState result = client.read(new RequestContext.Builder().build(), "/testApp/" + BASEPATH); // verify response assertThat(result).isNotNull(); assertThat(result.id()).isEqualTo(BASEPATH); assertThat(result.getPropertyNames().size()).isEqualTo(2); assertThat(result.getProperty("type")).isEqualTo("database"); assertThat(result.getProperty("count")).isEqualTo(0); assertThat(result.members()).isEmpty(); }
@Override public void resourceUpdated(ResourceResponse resourceResponse) throws Exception { URI uri = destinationUri(resourceResponse.resource()); HttpClientRequest request = this.httpClient.put(uri.getPath(), (response) -> { }); request.setChunked(true); RequestContext requestContext = new RequestContext.Builder().build(); ByteBuf encoded = codec.encode(requestContext, resourceResponse.state()); request.write(new Buffer(encoded)); request.end(); }
@Override public void resourceDeleted(ResourceResponse resourceResponse) throws Exception { URI uri = destinationUri(resourceResponse.resource()); HttpClientRequest request = this.httpClient.delete(uri.getPath(), (response) -> { }); request.setChunked(true); RequestContext requestContext = new RequestContext.Builder().build(); ByteBuf encoded = codec.encode(requestContext, resourceResponse.state()); request.write(new Buffer(encoded)); request.end(); }
@Test public void testDefault() throws Exception { setUpSystem("testDefaultDB", RUNNING_MONGO_HOST, RUNNING_MONGO_PORT); ResourceState result = client.read(new RequestContext.Builder().build(), ADMIN_PATH); assertThat(result.getProperty("db")).isEqualTo("testDefaultDB"); // by default it should exist but be empty assertThat(result.getProperty("credentials")).isNotNull(); assertThat((List) result.getProperty("credentials")).isEmpty(); }
@Test public void rootFound() throws Exception { ResourceState result = client.read(new RequestContext.Builder().build(), "/testApp/storage"); assertThat(result).isNotNull(); }
@Test public void deleteNonExistentId() throws Exception { String methodName = "testDeleteNonExistantId"; assertThat(db.getCollectionNames().contains(methodName)).isFalse(); ObjectId objectId = new ObjectId(); try { client.delete(new RequestContext.Builder().build(), "/testApp/" + BASEPATH + "/" + methodName + "/" + objectId.toString()); Fail.fail("shouldn't get here"); } catch (ResourceNotFoundException e) { // expected } }
@Test public void getInvalidId() throws Exception { String methodName = "testGetInvalidId"; assertFalse(db.collectionExists(methodName)); try { client.read(new RequestContext.Builder().build(), "/testApp/" + BASEPATH + "/" + methodName + "/foobar123"); fail("shouldn't get here"); } catch (ResourceNotFoundException rnfe) { // expected } }
@Test public void uncreatedCollectionNotFound() throws Exception { try { client.read(new RequestContext.Builder().build(), "/storage/movies"); fail("shouldn't get here"); } catch (ResourceNotFoundException e) { assertThat(e.path()).isEqualTo("/storage/movies"); } }
protected StompMessage createMessage(String action, int status, ResourceResponse resourceResponse) throws Exception { Resource resource = resourceResponse.resource(); StompMessage message = new DefaultStompMessage(); message.headers().put(Headers.SUBSCRIPTION, this.subscriptionId); message.headers().put(Headers.CONTENT_TYPE, this.mediaType.toString()); message.headers().put("action", action); message.headers().put("status", "" + status); message.headers().put("location", resource.uri().toString()); RequestContext requestContext = new RequestContext.Builder().build(); message.content(this.codec.encode(requestContext, resourceResponse.state())); return message; }
@Override public void sendAuthzError(ResourceState errorState, Resource resource, int status) throws Exception { StompMessage message = new DefaultStompMessage(true); message.headers().put(Headers.SUBSCRIPTION, this.subscriptionId); message.headers().put(Headers.CONTENT_TYPE, this.mediaType.toString()); message.headers().put("status", "" + status); RequestContext requestContext = new RequestContext.Builder().build(); message.content(this.codec.encode(requestContext, errorState)); this.connection.send(message); }
@Test public void deleteNonExistentCollection() throws Exception { String methodName = "testDeleteNonExistantCollection"; assertThat(db.getCollectionNames().contains(methodName)).isFalse(); try { client.delete(new RequestContext.Builder().build(), "/testApp/" + BASEPATH + "/" + methodName); Fail.fail("shouldn't get here"); } catch (ResourceNotFoundException rnfe) { // expected } }
@Test public void testDataStore() throws Exception { JsonNode configNode = ObjectMapperFactory.create().readTree("{ db: 'testDataStore', datastore: 'foo'}"); setUpSystem((ObjectNode) configNode); ResourceState result = client.read(new RequestContext.Builder().build(), ADMIN_PATH); assertThat(result.members()).isNotNull(); assertThat(result.members().size()).isEqualTo(0); assertThat(result.getProperty("db")).isEqualTo("testDataStore"); assertThat(result.getProperty("datastore")).isEqualTo("foo"); assertThat(result.getProperty("servers")).isNull(); }
private RequestContext createRequestContext(ResourcePath resourcePath, Subscription subscription) { return new RequestContext.Builder() .requestType(RequestType.READ) .resourcePath(resourcePath) .securityContext(subscription.securityContext()).build(); }
private RequestContext createPolicyReq() { RequestAttributes attribs = new DefaultRequestAttributes(); attribs.setAttribute(AuthzConstants.ATTR_REQUEST_CONTEXT, ctxToAuthorize); attribs.setAttribute(AuthzConstants.ATTR_REQUEST_RESOURCE_STATE, reqStateToAuthorize); attribs.setAttribute(AuthzConstants.ATTR_RESPONSE_RESOURCE_STATE, respStateToAuthorize); return new RequestContext.Builder().requestAttributes(attribs).build(); }
@Test public void createCollection() throws Exception { // check that we can create the resource ResourceState state = new DefaultResourceState("movies"); ResourceState createdResource = client.create(new RequestContext.Builder().build(), "/testApp/storage", state); assertThat(createdResource).isNotNull(); assertThat(createdResource.id()).isEqualTo("movies"); // test that we get this resource back on a read ResourceState movies = client.read(new RequestContext.Builder().build(), "/testApp/storage/movies"); assertThat(movies).isNotNull(); assertThat(movies.id()).isEqualTo("movies"); }
@Test public void deleteInvalidId() throws Exception { String methodName = "testDeleteInvalidId"; assertThat(db.getCollectionNames().contains(methodName)).isFalse(); try { client.delete(new RequestContext.Builder().build(), "/testApp/" + BASEPATH + "/foobar123"); Fail.fail("shouldn't get here"); } catch (ResourceNotFoundException e) { // expected } }
@Test public void modifyConfiguration() throws Exception { ResourceState config = new DefaultResourceState(); config.putProperty("db", "testModifyConfiguration"); setUpSystem(config); ResourceState result = client.read(new RequestContext.Builder().build(), ADMIN_PATH); assertThat(result.members()).isNotNull(); assertThat(result.members().size()).isEqualTo(0); client.update(new RequestContext.Builder().build(), ADMIN_PATH, result); }