You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@usergrid.apache.org by gr...@apache.org on 2015/03/23 19:12:33 UTC
incubator-usergrid git commit: Added /revokeToken and /revokeTokens
resources to the rest test framework Fixed remaining tests in AccessTokenIT.
Extended/fixed some bugs in NamedResource.
Repository: incubator-usergrid
Updated Branches:
refs/heads/USERGRID-347 a33ae23c7 -> d7734af90
Added /revokeToken and /revokeTokens resources to the rest test framework
Fixed remaining tests in AccessTokenIT.
Extended/fixed some bugs in NamedResource.
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/d7734af9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/d7734af9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/d7734af9
Branch: refs/heads/USERGRID-347
Commit: d7734af907e975baad4887d153db62c330efa2e6
Parents: a33ae23
Author: GERey <gr...@apigee.com>
Authored: Mon Mar 23 11:12:33 2015 -0700
Committer: GERey <gr...@apigee.com>
Committed: Mon Mar 23 11:12:33 2015 -0700
----------------------------------------------------------------------
.../usergrid/rest/management/AccessTokenIT.java | 406 ++++++++-----------
.../endpoints/NamedResource.java | 29 +-
.../endpoints/mgmt/RevokeTokenResource.java | 16 +
.../endpoints/mgmt/RevokeTokensResource.java | 33 ++
.../endpoints/mgmt/UserResource.java | 8 +
5 files changed, 254 insertions(+), 238 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/d7734af9/stack/rest/src/test/java/org/apache/usergrid/rest/management/AccessTokenIT.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/management/AccessTokenIT.java b/stack/rest/src/test/java/org/apache/usergrid/rest/management/AccessTokenIT.java
index 2d7911d..a5adc0e 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/management/AccessTokenIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/management/AccessTokenIT.java
@@ -16,29 +16,25 @@
*/
package org.apache.usergrid.rest.management;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.client.UniformInterfaceException;
-import com.sun.jersey.api.representation.Form;
import java.io.IOException;
-import java.util.HashMap;
import java.util.Map;
-import javax.ws.rs.core.MediaType;
+
+import org.junit.Test;
+
import org.apache.usergrid.rest.test.resource2point0.AbstractRestIT;
-import org.apache.usergrid.rest.management.organizations.OrganizationsResource;
import org.apache.usergrid.rest.test.resource2point0.model.ApiResponse;
import org.apache.usergrid.rest.test.resource2point0.model.Entity;
-import org.apache.usergrid.rest.test.resource2point0.model.Organization;
import org.apache.usergrid.rest.test.resource2point0.model.QueryParameters;
import org.apache.usergrid.rest.test.resource2point0.model.Token;
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.api.client.UniformInterfaceException;
+import com.sun.jersey.api.representation.Form;
+
import static org.apache.usergrid.utils.MapUtils.hashMap;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
-
-import org.jclouds.rest.annotations.Api;
-import org.junit.Ignore;
-import org.junit.Test;
+import static org.junit.Assert.fail;
/**
@@ -107,7 +103,7 @@ public class AccessTokenIT extends AbstractRestIT {
queryParameters.addParam( "ttl", String.valueOf(ttl) );
return queryParameters;
}
-
+
@Test
public void meToken() throws Exception {
tokenMeSetup( 0 );
@@ -139,221 +135,171 @@ public class AccessTokenIT extends AbstractRestIT {
assertNotNull(orgProperties.get("name"));
assertNotNull(orgProperties.get("properties"));
}
-//
-// @Test
-// public void meTokenPost() throws Exception {
-// Map<String, String> payload
-// = hashMap("grant_type", "password")
-// .map("username", "test@usergrid.com").map("password", "test");
-//
-// JsonNode node = mapper.readTree(resource()
-// .path("/management/me")
-// .accept(MediaType.APPLICATION_JSON)
-// .type(MediaType.APPLICATION_JSON_TYPE)
-// .post(String.class, payload));
-//
-// logNode(node);
-// String token = node.get("access_token").textValue();
-//
-// assertNotNull(token);
-//
-// refreshIndex("test-organization", "test-app");
-//
-// node = mapper.readTree(resource()
-// .path("/management/me")
-// .queryParam("access_token", token)
-// .accept(MediaType.APPLICATION_JSON)
-// .get(String.class));
-// logNode(node);
-// }
-//
-// @Test
-// public void meTokenPostForm() throws IOException {
-//
-// Form form = new Form();
-// form.add("grant_type", "password");
-// form.add("username", "test@usergrid.com");
-// form.add("password", "test");
-//
-// JsonNode node = mapper.readTree(resource()
-// .path("/management/me")
-// .accept(MediaType.APPLICATION_JSON)
-// .type(MediaType.APPLICATION_FORM_URLENCODED_TYPE)
-// .entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE)
-// .post(String.class));
-//
-// logNode(node);
-// String token = node.get("access_token").textValue();
-//
-// assertNotNull(token);
-//
-// refreshIndex("test-organization", "test-app");
-//
-// node = mapper.readTree(resource()
-// .path("/management/me")
-// .queryParam("access_token", token)
-// .accept(MediaType.APPLICATION_JSON).get(String.class));
-// logNode(node);
-// }
-//
-// @Test
-// public void ttlNan() throws Exception {
-//
-// Map<String, String> payload = hashMap("grant_type", "password")
-// .map("username", "test@usergrid.com")
-// .map("password", "test")
-// .map("ttl", "derp");
-//
-// ClientResponse.Status responseStatus = null;
-// try {
-// resource().path("/management/token")
-// .accept(MediaType.APPLICATION_JSON)
-// .type(MediaType.APPLICATION_JSON_TYPE)
-// .post(String.class, payload);
-// } catch (UniformInterfaceException uie) {
-// responseStatus = uie.getResponse().getClientResponseStatus();
-// }
-//
-// assertEquals(ClientResponse.Status.BAD_REQUEST, responseStatus);
-// }
-//
-// @Test
-// public void ttlOverMax() throws Exception {
-//
-// Map<String, String> payload = hashMap("grant_type", "password")
-// .map("username", "test@usergrid.com")
-// .map("password", "test")
-// .map("ttl", Long.MAX_VALUE + "");
-//
-// ClientResponse.Status responseStatus = null;
-//
-// try {
-// resource().path("/management/token")
-// .accept(MediaType.APPLICATION_JSON)
-// .type(MediaType.APPLICATION_JSON_TYPE)
-// .post(String.class, payload);
-// } catch (UniformInterfaceException uie) {
-// responseStatus = uie.getResponse().getClientResponseStatus();
-// }
-//
-// assertEquals(ClientResponse.Status.BAD_REQUEST, responseStatus);
-// }
-//
-// @Test
-// public void revokeToken() throws Exception {
-// String token1 = super.adminToken();
-// String token2 = super.adminToken();
-//
-// JsonNode response = mapper.readTree(resource().path("/management/users/test")
-// .queryParam("access_token", token1)
-// .accept(MediaType.APPLICATION_JSON)
-// .type(MediaType.APPLICATION_JSON_TYPE)
-// .get(String.class));
-//
-// assertEquals("test@usergrid.com", response.get("data").get("email").asText());
-//
-// response = mapper.readTree(resource().path("/management/users/test")
-// .queryParam("access_token", token2)
-// .accept(MediaType.APPLICATION_JSON)
-// .type(MediaType.APPLICATION_JSON_TYPE)
-// .get(String.class));
-//
-// assertEquals("test@usergrid.com", response.get("data").get("email").asText());
-//
-// // now revoke the tokens
-// response = mapper.readTree(resource().path("/management/users/test/revoketokens")
-// .queryParam("access_token", superAdminToken())
-// .accept(MediaType.APPLICATION_JSON)
-// .type(MediaType.APPLICATION_JSON_TYPE)
-// .post(String.class));
-//
-// refreshIndex("test-organization", "test-app");
-//
-// // the tokens shouldn't work
-// ClientResponse.Status status = null;
-//
-// try {
-// response = mapper.readTree(resource().path("/management/users/test")
-// .queryParam("access_token", token1)
-// .accept(MediaType.APPLICATION_JSON)
-// .type(MediaType.APPLICATION_JSON_TYPE)
-// .get(String.class));
-// } catch (UniformInterfaceException uie) {
-// status = uie.getResponse().getClientResponseStatus();
-// }
-//
-// assertEquals(ClientResponse.Status.UNAUTHORIZED, status);
-//
-// status = null;
-//
-// try {
-// response = mapper.readTree(resource().path("/management/users/test")
-// .queryParam("access_token", token2)
-// .accept(MediaType.APPLICATION_JSON)
-// .type(MediaType.APPLICATION_JSON_TYPE)
-// .get(String.class));
-// } catch (UniformInterfaceException uie) {
-// status = uie.getResponse().getClientResponseStatus();
-// }
-//
-// assertEquals(ClientResponse.Status.UNAUTHORIZED, status);
-//
-// String token3 = super.adminToken();
-// String token4 = super.adminToken();
-//
-// response = mapper.readTree(resource().path("/management/users/test")
-// .queryParam("access_token", token3)
-// .accept(MediaType.APPLICATION_JSON)
-// .type(MediaType.APPLICATION_JSON_TYPE)
-// .get(String.class));
-//
-// assertEquals("test@usergrid.com", response.get("data").get("email").asText());
-//
-// response = mapper.readTree(resource().path("/management/users/test")
-// .queryParam("access_token", token4)
-// .accept(MediaType.APPLICATION_JSON)
-// .type(MediaType.APPLICATION_JSON_TYPE)
-// .get(String.class));
-//
-// assertEquals("test@usergrid.com", response.get("data").get("email").asText());
-//
-// // now revoke the token3
-// response = mapper.readTree(resource().path("/management/users/test/revoketoken")
-// .queryParam("access_token", token3)
-// .queryParam("token", token3)
-// .accept(MediaType.APPLICATION_JSON)
-// .type(MediaType.APPLICATION_JSON_TYPE)
-// .post(String.class));
-//
-// // the token3 shouldn't work
-// status = null;
-//
-// try {
-// response = mapper.readTree(resource().path("/management/users/test")
-// .queryParam("access_token", token3)
-// .accept(MediaType.APPLICATION_JSON)
-// .type(MediaType.APPLICATION_JSON_TYPE)
-// .get(String.class));
-// } catch (UniformInterfaceException uie) {
-// status = uie.getResponse().getClientResponseStatus();
-// }
-//
-// assertEquals(ClientResponse.Status.UNAUTHORIZED, status);
-//
-// status = null;
-//
-// try {
-// response = mapper.readTree(resource().path("/management/users/test")
-// .queryParam("access_token", token4)
-// .accept(MediaType.APPLICATION_JSON)
-// .type(MediaType.APPLICATION_JSON_TYPE)
-// .get(String.class));
-//
-// status = ClientResponse.Status.OK;
-// } catch (UniformInterfaceException uie) {
-// status = uie.getResponse().getClientResponseStatus();
-// }
-//
-// assertEquals(ClientResponse.Status.OK, status);
-// }
+
+
+ /**
+ * Verify that we can POST and GET using the token that was returned.
+ * @throws Exception
+ */
+ @Test
+ public void meTokenPost() throws Exception {
+ Map<String, String> payload
+ = hashMap("grant_type", "password")
+ .map("username", clientSetup.getUsername()).map("password", clientSetup.getPassword());
+
+ Token token = management().me().post( Token.class, payload );
+
+ assertNotNull( token );
+ assertNotNull( token.getAccessToken() );
+ management().token().setToken( token );
+
+ refreshIndex();
+
+ assertNotNull( management().me().get( Token.class ) );
+
+ }
+
+
+ /**
+ * Verifies that we can POST using a form and GET using the token that was returned.
+ * @throws IOException
+ */
+ @Test
+ public void meTokenPostForm() throws IOException {
+
+ Form form = new Form();
+ form.add("grant_type", "password");
+ form.add("username", clientSetup.getUsername());
+ form.add("password", clientSetup.getPassword());
+
+ Token adminToken = management().me().post( Token.class,form );
+
+ assertNotNull( adminToken );
+ assertNotNull( adminToken.getAccessToken() );
+
+ refreshIndex();
+
+ assertNotNull( management().me().get( Token.class ) );
+
+ }
+
+
+ /**
+ * Checks we get approriate response when giving a bad ttl request
+ * @throws Exception
+ */
+ @Test
+ public void ttlNan() throws Exception {
+
+ Map<String, String> payload = hashMap("grant_type", "password")
+ .map("username", clientSetup.getUsername())
+ .map("password", clientSetup.getPassword())
+ .map("ttl", "derp");
+
+ try {
+ management().token().post( Token.class,payload );
+ } catch (UniformInterfaceException uie) {
+ assertEquals(ClientResponse.Status.BAD_REQUEST, uie.getResponse().getClientResponseStatus());
+ }
+
+ }
+
+ /**
+ * Checks we get approriate response when giving a bad ttl request
+ * @throws Exception
+ */
+ @Test
+ public void ttlOverMax() throws Exception {
+
+ Map<String, String> payload = hashMap("grant_type", "password")
+ .map("username", clientSetup.getUsername())
+ .map("password", clientSetup.getPassword())
+ .map("ttl", Long.MAX_VALUE + "");
+
+ try {
+ management().token().post( Token.class, payload );
+ } catch (UniformInterfaceException uie) {
+ assertEquals(ClientResponse.Status.BAD_REQUEST, uie.getResponse().getClientResponseStatus());
+ }
+
+ }
+
+ /**
+ * Tests that we can revoke all of the tokens that have been assigned to a specific user
+ * @throws Exception
+ */
+ @Test
+ public void revokeTokens() throws Exception {
+ Token token1 = getAdminToken();
+ Token token2 = getAdminToken();
+
+ // using a superuser token, revoke all tokens associated with the admin user
+ management().token().setToken( clientSetup.getSuperuserToken() );
+ management().users().user( clientSetup.getUsername() ).revokeTokens().post( ApiResponse.class );
+
+ refreshIndex();
+
+
+ //test that token 1 doesn't work
+ try {
+ management().token().setToken( token1 );
+ management().users().user( clientSetup.getUsername() ).get();
+ fail( "Token1 should have been revoked" );
+ }
+ catch ( UniformInterfaceException uie ) {
+ assertEquals( ClientResponse.Status.UNAUTHORIZED, uie.getResponse().getClientResponseStatus());
+ }
+
+
+ //test that token 2 doesn't work
+ try {
+ management().token().setToken( token2 );
+ management().users().user( clientSetup.getUsername() ).get();
+ fail( "Token2 should have been revoked" );
+ }
+ catch ( UniformInterfaceException uie ) {
+ assertEquals( ClientResponse.Status.UNAUTHORIZED, uie.getResponse().getClientResponseStatus());
+ }
+ }
+
+ /**
+ * Tests that we can revoke a single token that has been assigned to a specific user
+ * @throws Exception
+ */
+ @Test
+ public void revokeSingleToken() throws Exception {
+ Token token1 = getAdminToken();
+ Token token2 = getAdminToken();
+
+ // using a superuser token, revoke specific token associated with the admin user
+ QueryParameters queryParameters = new QueryParameters();
+ queryParameters.addParam( "token", token1.getAccessToken() );
+
+ management().token().setToken( clientSetup.getSuperuserToken() );
+ management().users().user( clientSetup.getUsername() ).revokeToken().post( ApiResponse.class,queryParameters );
+
+ refreshIndex();
+
+
+ //test that token 1 doesn't work
+ try {
+ management().token().setToken( token1 );
+ management().users().user( clientSetup.getUsername() ).get();
+ fail( "Token1 should have been revoked" );
+ }
+ catch ( UniformInterfaceException uie ) {
+ assertEquals( ClientResponse.Status.UNAUTHORIZED, uie.getResponse().getClientResponseStatus());
+ }
+
+
+ //test that token 2 still works
+ try {
+ management().token().setToken( token2 );
+ management().users().user( clientSetup.getUsername() ).get();
+ }
+ catch ( UniformInterfaceException uie ) {
+ fail( "Token2 shouldn't have been revoked" );
+
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/d7734af9/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/NamedResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/NamedResource.java b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/NamedResource.java
index a5ffc9f..daf3502 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/NamedResource.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/NamedResource.java
@@ -33,6 +33,8 @@ import java.util.Set;
import java.util.UUID;
import javax.ws.rs.core.MediaType;
+import com.sun.jersey.api.representation.Form;
+
/**
@@ -150,6 +152,16 @@ public abstract class NamedResource implements UrlResource {
}
+ public <T> T post(Class<T> type, QueryParameters queryParameters) {
+ WebResource resource = getResource();
+ resource = addParametersToResource(resource, queryParameters);
+ GenericType<T> gt = new GenericType<>((Class) type);
+ return resource.type(MediaType.APPLICATION_JSON_TYPE)
+ .accept( MediaType.APPLICATION_JSON )
+ .post(gt.getRawClass());
+
+ }
+
public <T> T postWithToken(Class<T> type, Object requestEntity) {
GenericType<T> gt = new GenericType<>((Class) type);
return getResource(true).type(MediaType.APPLICATION_JSON_TYPE)
@@ -167,14 +179,15 @@ public abstract class NamedResource implements UrlResource {
}
- //Get Resources
-// public Entity get() {
-// WebResource resource = getResource(true);
-//
-// ApiResponse response = resource.type( MediaType.APPLICATION_JSON_TYPE )
-// .accept( MediaType.APPLICATION_JSON ).get( ApiResponse.class);
-// return new Entity(response);
-// }
+ public <T> T post(Class<T> type, Form requestEntity) {
+ GenericType<T> gt = new GenericType<>((Class) type);
+ return getResource()
+ .accept( MediaType.APPLICATION_JSON )
+ .type( MediaType.APPLICATION_FORM_URLENCODED_TYPE )
+ .entity( requestEntity, MediaType.APPLICATION_FORM_URLENCODED_TYPE )
+ .post( gt.getRawClass() );
+
+ }
//For edge cases like Organizations and Tokens without any payload
public <T> T get(Class<T> type) {
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/d7734af9/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/RevokeTokenResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/RevokeTokenResource.java b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/RevokeTokenResource.java
new file mode 100644
index 0000000..c727521
--- /dev/null
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/RevokeTokenResource.java
@@ -0,0 +1,16 @@
+package org.apache.usergrid.rest.test.resource2point0.endpoints.mgmt;
+
+
+import org.apache.usergrid.rest.test.resource2point0.endpoints.NamedResource;
+import org.apache.usergrid.rest.test.resource2point0.endpoints.UrlResource;
+import org.apache.usergrid.rest.test.resource2point0.state.ClientContext;
+
+
+/**
+ * Handles /revokeToken endpoint ( as opposed to revokeTokens
+ */
+public class RevokeTokenResource extends NamedResource {
+ public RevokeTokenResource( final ClientContext context, final UrlResource parent ) {
+ super( "revoketoken", context, parent );
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/d7734af9/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/RevokeTokensResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/RevokeTokensResource.java b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/RevokeTokensResource.java
new file mode 100644
index 0000000..20796ae
--- /dev/null
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/RevokeTokensResource.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.usergrid.rest.test.resource2point0.endpoints.mgmt;
+
+
+import org.apache.usergrid.rest.test.resource2point0.endpoints.NamedResource;
+import org.apache.usergrid.rest.test.resource2point0.endpoints.UrlResource;
+import org.apache.usergrid.rest.test.resource2point0.state.ClientContext;
+
+
+/**
+ * Handles endpoints against /revoketokens
+ */
+public class RevokeTokensResource extends NamedResource {
+ public RevokeTokensResource( final ClientContext context, final UrlResource parent ) {
+ super( "revoketokens", context, parent );
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/d7734af9/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/UserResource.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/UserResource.java b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/UserResource.java
index 9af23ce..a52d884 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/UserResource.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/test/resource2point0/endpoints/mgmt/UserResource.java
@@ -62,6 +62,14 @@ public class UserResource extends NamedResource {
return new OrgResource( context, this );
}
+ public RevokeTokensResource revokeTokens() {
+ return new RevokeTokensResource( context, this );
+ }
+
+ public RevokeTokenResource revokeToken() {
+ return new RevokeTokenResource( context, this );
+ }
+
public Entity get() {
WebResource resource = getResource( true );
ApiResponse response = resource.type( MediaType.APPLICATION_JSON_TYPE )