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 2014/09/17 23:52:24 UTC
git commit: Further consolidated the tests
Repository: incubator-usergrid
Updated Branches:
refs/heads/two-dot-o-rest-refactor f42ebde4e -> 66b8ecb9e
Further consolidated the tests
Project: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/commit/66b8ecb9
Tree: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/tree/66b8ecb9
Diff: http://git-wip-us.apache.org/repos/asf/incubator-usergrid/diff/66b8ecb9
Branch: refs/heads/two-dot-o-rest-refactor
Commit: 66b8ecb9e4951765e6514a2e851f2ffec9718dc5
Parents: f42ebde
Author: grey <gr...@apigee.com>
Authored: Wed Sep 17 14:52:20 2014 -0700
Committer: grey <gr...@apigee.com>
Committed: Wed Sep 17 14:52:20 2014 -0700
----------------------------------------------------------------------
.../usergrid/rest/ConcurrentRestITSuite.java | 12 +-
.../org/apache/usergrid/rest/RestITSuite.java | 9 +-
.../usergrid/rest/management/AccessTokenIT.java | 81 ++++
.../rest/management/ApplicationsIT.java | 251 +++++++++++++
.../rest/management/ManagementResourceIT.java | 284 --------------
.../rest/management/OrganizationsIT.java | 191 ++++++++++
.../rest/management/RegistrationIT.java | 369 -------------------
.../organizations/AdminEmailEncodingIT.java | 119 ------
.../applications/ApplicationsIT.java | 91 -----
9 files changed, 529 insertions(+), 878 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/66b8ecb9/stack/rest/src/test/java/org/apache/usergrid/rest/ConcurrentRestITSuite.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/ConcurrentRestITSuite.java b/stack/rest/src/test/java/org/apache/usergrid/rest/ConcurrentRestITSuite.java
index 4456054..9a404bf 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/ConcurrentRestITSuite.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/ConcurrentRestITSuite.java
@@ -36,22 +36,16 @@ import org.apache.usergrid.rest.applications.users.OwnershipResourceIT;
import org.apache.usergrid.rest.applications.users.PermissionsResourceIT;
import org.apache.usergrid.rest.applications.users.UserResourceIT;
import org.apache.usergrid.rest.filters.ContentTypeResourceIT;
-import org.apache.usergrid.rest.management.ManagementResourceIT;
-import org.apache.usergrid.rest.management.RegistrationIT;
-import org.apache.usergrid.rest.management.organizations.AdminEmailEncodingIT;
-import org.apache.usergrid.rest.management.users.organizations.UsersOrganizationsResourceIT;
@RunWith(ConcurrentSuite.class)
@Suite.SuiteClasses(
{
- ActivityResourceIT.class, AdminEmailEncodingIT.class, ApplicationRequestCounterIT.class,
+ ActivityResourceIT.class, ApplicationRequestCounterIT.class,
ApplicationResourceIT.class, AssetResourceIT.class, BasicIT.class, CollectionsResourceIT.class,
ContentTypeResourceIT.class, DevicesResourceIT.class, EventsResourceIT.class, GroupResourceIT.class,
- MUUserResourceIT.class, ManagementResourceIT.class, OrganizationResourceIT.class,
- OrganizationsResourceIT.class, OwnershipResourceIT.class, PagingResourceIT.class,
- PermissionsResourceIT.class, RegistrationIT.class, UserResourceIT.class,
- UsersOrganizationsResourceIT.class
+ OwnershipResourceIT.class, PagingResourceIT.class,
+ PermissionsResourceIT.class, UserResourceIT.class
})
@Concurrent()
public class ConcurrentRestITSuite {
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/66b8ecb9/stack/rest/src/test/java/org/apache/usergrid/rest/RestITSuite.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/RestITSuite.java b/stack/rest/src/test/java/org/apache/usergrid/rest/RestITSuite.java
index dbf8834..7630bb1 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/RestITSuite.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/RestITSuite.java
@@ -34,17 +34,14 @@ import org.apache.usergrid.rest.applications.users.OwnershipResourceIT;
import org.apache.usergrid.rest.applications.users.PermissionsResourceIT;
import org.apache.usergrid.rest.applications.users.UserResourceIT;
import org.apache.usergrid.rest.filters.ContentTypeResourceIT;
-import org.apache.usergrid.rest.management.organizations.AdminEmailEncodingIT;
-import org.apache.usergrid.rest.management.users.organizations.UsersOrganizationsResourceIT;
@RunWith(Suite.class)
@Suite.SuiteClasses(
{
- ActivityResourceIT.class, AdminEmailEncodingIT.class, ApplicationRequestCounterIT.class,
+ ActivityResourceIT.class, ApplicationRequestCounterIT.class,
AssetResourceIT.class, BasicIT.class, CollectionsResourceIT.class, ContentTypeResourceIT.class,
- DevicesResourceIT.class, EventsResourceIT.class, GroupResourceIT.class, OrganizationResourceIT.class,
- OrganizationsResourceIT.class, OwnershipResourceIT.class, PagingResourceIT.class,
- PermissionsResourceIT.class, UserResourceIT.class, UsersOrganizationsResourceIT.class
+ DevicesResourceIT.class, EventsResourceIT.class, GroupResourceIT.class, OwnershipResourceIT.class, PagingResourceIT.class,
+ PermissionsResourceIT.class, UserResourceIT.class
})
@Concurrent()
public class RestITSuite {
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/66b8ecb9/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 75743cb..d769870 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
@@ -7,10 +7,13 @@ import java.util.Map;
import javax.ws.rs.core.MediaType;
+import org.junit.Rule;
import org.junit.Test;
import org.apache.usergrid.rest.AbstractRestIT;
+import org.apache.usergrid.rest.TestContextSetup;
import org.apache.usergrid.rest.management.organizations.OrganizationsResource;
+import org.apache.usergrid.rest.test.security.TestAdminUser;
import com.fasterxml.jackson.databind.JsonNode;
import com.sun.jersey.api.client.ClientResponse;
@@ -328,6 +331,84 @@ public class AccessTokenIT extends AbstractRestIT {
assertEquals( ClientResponse.Status.OK, status );
}
+ //Done for AdminEmailEncoding Tests
+ @Rule
+ public TestContextSetup context = new TestContextSetup( this );
+
+
+ @Test
+ public void getTokenPlus() throws Exception {
+ String org = "AdminEmailEncodingTestgetTokenPlus";
+ String app = "Plus";
+
+ doTest( "+", org, app );
+ }
+
+
+ @Test
+ public void getTokenUnderscore() throws Exception {
+ String org = "AdminEmailEncodingTestgetTokenUnderscore";
+ String app = "Underscore";
+
+ doTest( "_", org, app );
+ }
+
+
+ @Test
+ public void getTokenDash() throws Exception {
+ String org = "AdminEmailEncodingTestgetTokenDash";
+ String app = "Dash";
+
+ doTest( "-", org, app );
+ }
+
+
+ private void doTest( String symbol, String org, String app ) throws IOException {
+
+ org = org.toLowerCase();
+ app = app.toLowerCase();
+
+ String email = String.format( "admin%sname@adminemailencodingtest.org", symbol );
+ String user = email;
+ String password = "password";
+
+ TestAdminUser adminUser = new TestAdminUser( user, password, email );
+
+ context.withApp( app ).withOrg( org ).withUser( adminUser );
+
+ // create the org and app
+ context.createNewOrgAndUser();
+
+ // no need for refresh here as Service module does an index refresh when org/app created
+
+ // now log in via a GET
+
+ String getToken = context.management().tokenGet( email, password );
+
+ assertNotNull( getToken );
+
+ String postToken = context.management().tokenPost( email, password );
+
+ assertNotNull( postToken );
+
+ // not log in with our admin
+ context.withUser( adminUser ).loginUser();
+
+ //now get the "me" and ensure it's correct
+
+ JsonNode data = context.management().me().get();
+
+ assertNotNull( data.get( "access_token" ).asText() );
+
+ data = context.management().users().user( email ).get();
+
+ JsonNode admin = data.get( "data" ).get( "organizations" ).get( org ).get( "users" ).get( email );
+
+ assertNotNull( admin );
+
+ assertEquals( email, admin.get( "email" ).asText() );
+ assertEquals( user, admin.get( "username" ).asText() );
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/66b8ecb9/stack/rest/src/test/java/org/apache/usergrid/rest/management/ApplicationsIT.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/management/ApplicationsIT.java b/stack/rest/src/test/java/org/apache/usergrid/rest/management/ApplicationsIT.java
new file mode 100644
index 0000000..05e56a3
--- /dev/null
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/management/ApplicationsIT.java
@@ -0,0 +1,251 @@
+/*
+ * 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.management;
+
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import java.io.IOException;
+import java.util.UUID;
+
+import javax.ws.rs.core.MediaType;
+
+import org.junit.Rule;
+import org.junit.Test;
+
+import org.apache.usergrid.management.OrganizationInfo;
+import org.apache.usergrid.rest.AbstractRestIT;
+import org.apache.usergrid.rest.TestContextSetup;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Ignore;
+
+
+/**
+ *
+ *
+ */
+public class ApplicationsIT extends AbstractRestIT {
+
+ @Rule
+ public TestContextSetup context = new TestContextSetup( this );
+
+
+ @Test
+ @Ignore("ignored because this test fails because it does not account for the default app "
+ + "created by the TestContext and the sandbox app. "
+ + "see also: https://issues.apache.org/jira/browse/USERGRID-210 ")
+ public void test10AppLimit() throws IOException {
+
+ int size = 11;
+
+ Set<String> appNames = new HashSet<String>( size );
+
+ for ( int i = 0; i < size; i++ ) {
+ final String name = i + "";
+
+ appNames.add( name );
+
+ context.withApp( name ).createAppForOrg();
+ refreshIndex(context.getOrgName(), name);
+ }
+
+
+ //now go through and ensure each entry is present
+
+ final JsonNode apps = context.management().orgs().organization( context.getOrgName() ).apps().get();
+
+ final JsonNode data = apps.get( "data" );
+
+ final String orgName = context.getOrgName();
+
+
+ final Set<String> copy = new HashSet<String> (appNames);
+
+ for(String appName: copy){
+
+ final String mapEntryName = String.format( "%s/%s", orgName.toLowerCase(), appName.toLowerCase());
+
+ JsonNode orgApp = data.get( mapEntryName);
+
+ if(orgApp != null){
+ appNames.remove( appName );
+ }
+
+ }
+
+ assertEquals("All elements removed", 0, appNames.size());
+
+ }
+ /**
+ * Test that we can support over 10 items in feed.
+ */
+ @Test
+ public void mgmtFollowsUserFeed() throws Exception {
+ List<String> users1 = new ArrayList<String>();
+ int i;
+ //try with 10 users
+ for ( i = 0; i < 10; i++ ) {
+ users1.add( "follower" + Integer.toString( i ) );
+ }
+
+ refreshIndex("test-organization", "test-app");
+
+ checkFeed( "leader1", users1 );
+ //try with 11
+ List<String> users2 = new ArrayList<String>();
+ for ( i = 20; i < 31; i++ ) {
+ users2.add( "follower" + Integer.toString( i ) );
+ }
+ checkFeed( "leader2", users2 );
+ }
+
+
+ private void checkFeed( String leader, List<String> followers ) throws IOException {
+ JsonNode userFeed;
+
+ //create user
+ createUser( leader );
+ refreshIndex("test-organization", "test-app");
+
+ String preFollowContent = leader + ": pre-something to look for " + UUID.randomUUID().toString();
+
+ addActivity( leader, leader + " " + leader + "son", preFollowContent );
+ refreshIndex("test-organization", "test-app");
+
+ String lastUser = followers.get( followers.size() - 1 );
+ int i = 0;
+ for ( String user : followers ) {
+ createUser( user );
+ refreshIndex("test-organization", "test-app");
+ follow( user, leader );
+ refreshIndex("test-organization", "test-app");
+ }
+ userFeed = getUserFeed( lastUser );
+ assertTrue( userFeed.size() == 1 );
+
+ //retrieve feed
+ userFeed = getUserFeed( lastUser );
+ assertTrue( userFeed.size() == 1 );
+ String postFollowContent = leader + ": something to look for " + UUID.randomUUID().toString();
+ addActivity( leader, leader + " " + leader + "son", postFollowContent );
+
+ refreshIndex("test-organization", "test-app");
+
+ //check feed
+ userFeed = getUserFeed( lastUser );
+ assertNotNull( userFeed );
+ assertTrue( userFeed.size() > 1 );
+ String serialized = userFeed.toString();
+ assertTrue( serialized.indexOf( postFollowContent ) > 0 );
+ assertTrue( serialized.indexOf( preFollowContent ) > 0 );
+ }
+
+
+ private void createUser( String username ) {
+ Map<String, Object> payload = new LinkedHashMap<String, Object>();
+ payload.put( "username", username );
+ resource().path( "/test-organization/test-app/users" ).queryParam( "access_token", access_token )
+ .accept( MediaType.APPLICATION_JSON ).type( MediaType.APPLICATION_JSON_TYPE )
+ .post( String.class, payload );
+ }
+
+
+ private JsonNode getUserFeed( String username ) throws IOException {
+ JsonNode userFeed = mapper.readTree( resource().path( "/test-organization/test-app/users/" + username + "/feed" )
+ .queryParam( "access_token", access_token ).accept( MediaType.APPLICATION_JSON )
+ .get( String.class ));
+ return userFeed.get( "entities" );
+ }
+
+
+ private void follow( String user, String followUser ) {
+ //post follow
+ resource().path( "/test-organization/test-app/users/" + user + "/following/users/" + followUser )
+ .queryParam( "access_token", access_token ).accept( MediaType.APPLICATION_JSON )
+ .type( MediaType.APPLICATION_JSON_TYPE ).post( String.class, new HashMap<String, String>() );
+ }
+
+
+ private void addActivity( String user, String name, String content ) {
+ Map<String, Object> activityPayload = new HashMap<String, Object>();
+ activityPayload.put( "content", content );
+ activityPayload.put( "verb", "post" );
+ Map<String, String> actorMap = new HashMap<String, String>();
+ actorMap.put( "displayName", name );
+ actorMap.put( "username", user );
+ activityPayload.put( "actor", actorMap );
+ resource().path( "/test-organization/test-app/users/" + user + "/activities" )
+ .queryParam( "access_token", access_token ).accept( MediaType.APPLICATION_JSON )
+ .type( MediaType.APPLICATION_JSON_TYPE ).post( String.class, activityPayload );
+ }
+
+
+ @Test
+ public void mgmtCreateAndGetApplication() throws Exception {
+
+ OrganizationInfo orgInfo = setup.getMgmtSvc().getOrganizationByName( "test-organization" );
+ Map<String, String> data = new HashMap<String, String>();
+ data.put( "name", "mgmt-org-app" );
+
+ // POST /applications
+ JsonNode appdata = mapper.readTree( resource().path( "/management/orgs/" + orgInfo.getUuid() + "/applications" )
+ .queryParam( "access_token", adminToken() ).accept( MediaType.APPLICATION_JSON )
+ .type( MediaType.APPLICATION_JSON_TYPE ).post( String.class, data ));
+ logNode( appdata );
+ appdata = getEntity( appdata, 0 );
+
+ refreshIndex("test-organization", "test-app");
+
+ assertEquals( "test-organization/mgmt-org-app", appdata.get( "name" ).asText() );
+ assertNotNull(appdata.get( "metadata" ));
+ assertNotNull(appdata.get( "metadata" ).get( "collections" ));
+ assertNotNull(appdata.get( "metadata" ).get( "collections" ).get( "roles" ));
+ assertNotNull(appdata.get( "metadata" ).get( "collections" ).get( "roles" ).get( "title" ));
+ assertEquals( "Roles", appdata.get( "metadata" ).get( "collections" ).get( "roles" ).get( "title" ).asText() );
+ assertEquals( 3, appdata.get( "metadata" ).get( "collections" ).get( "roles" ).get( "count" ).asInt() );
+
+ refreshIndex("test-organization", "test-app");
+
+ // GET /applications/mgmt-org-app
+ appdata = mapper.readTree( resource().path( "/management/orgs/" + orgInfo.getUuid() + "/applications/mgmt-org-app" )
+ .queryParam( "access_token", adminToken() ).accept( MediaType.APPLICATION_JSON )
+ .type( MediaType.APPLICATION_JSON_TYPE ).get( String.class ));
+ logNode( appdata );
+
+ assertEquals( "test-organization", appdata.get( "organization" ).asText() );
+ assertEquals( "mgmt-org-app", appdata.get( "applicationName" ).asText() );
+ assertEquals( "http://sometestvalue/test-organization/mgmt-org-app", appdata.get( "uri" ).textValue() );
+ appdata = getEntity( appdata, 0 );
+
+ assertEquals( "test-organization/mgmt-org-app", appdata.get( "name" ).asText() );
+ assertEquals( "Roles", appdata.get( "metadata" ).get( "collections" ).get( "roles" ).get( "title" ).asText() );
+ assertEquals( 3, appdata.get( "metadata" ).get( "collections" ).get( "roles" ).get( "count" ).asInt() );
+ }
+}
+
+
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/66b8ecb9/stack/rest/src/test/java/org/apache/usergrid/rest/management/ManagementResourceIT.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/management/ManagementResourceIT.java b/stack/rest/src/test/java/org/apache/usergrid/rest/management/ManagementResourceIT.java
deleted file mode 100644
index 58691a1..0000000
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/management/ManagementResourceIT.java
+++ /dev/null
@@ -1,284 +0,0 @@
-/*
- * 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.management;
-
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-
-import javax.ws.rs.core.MediaType;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import org.junit.Test;
-
-import org.apache.commons.lang.StringUtils;
-
-import org.apache.usergrid.cassandra.Concurrent;
-import org.apache.usergrid.management.OrganizationInfo;
-import org.apache.usergrid.management.OrganizationOwnerInfo;
-import org.apache.usergrid.rest.AbstractRestIT;
-import org.apache.usergrid.rest.management.organizations.OrganizationsResource;
-
-import com.sun.jersey.api.client.ClientResponse.Status;
-import com.sun.jersey.api.client.UniformInterfaceException;
-import com.sun.jersey.api.representation.Form;
-import java.io.IOException;
-
-import static org.apache.usergrid.utils.MapUtils.hashMap;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
-
-/**
- * @author tnine
- */
-@Concurrent()
-public class ManagementResourceIT extends AbstractRestIT {
-
- public ManagementResourceIT() throws Exception {
-
- }
-
-
-
-
- /**
- * Test that admins can't view organizations they're not authorized to view.
- */
- @Test
- public void crossOrgsNotViewable() throws Exception {
-
- OrganizationOwnerInfo orgInfo = setup.getMgmtSvc().createOwnerAndOrganization( "crossOrgsNotViewable",
- "crossOrgsNotViewable", "TestName", "crossOrgsNotViewable@usergrid.org", "password" );
-
- refreshIndex("test-organization", "test-app");
-
- // check that the test admin cannot access the new org info
-
- Status status = null;
-
- try {
- resource().path( String.format( "/management/orgs/%s", orgInfo.getOrganization().getName() ) )
- .queryParam( "access_token", adminAccessToken ).accept( MediaType.APPLICATION_JSON )
- .type( MediaType.APPLICATION_JSON_TYPE ).get( String.class );
- }
- catch ( UniformInterfaceException uie ) {
- status = uie.getResponse().getClientResponseStatus();
- }
-
- assertNotNull( status );
- assertEquals( Status.UNAUTHORIZED, status );
-
- status = null;
-
- try {
- resource().path( String.format( "/management/orgs/%s", orgInfo.getOrganization().getUuid() ) )
- .queryParam( "access_token", adminAccessToken ).accept( MediaType.APPLICATION_JSON )
- .type( MediaType.APPLICATION_JSON_TYPE ).get( String.class );
- }
- catch ( UniformInterfaceException uie ) {
- status = uie.getResponse().getClientResponseStatus();
- }
-
- assertNotNull( status );
- assertEquals( Status.UNAUTHORIZED, status );
-
- // this admin should have access to test org
- status = null;
- try {
- resource().path( "/management/orgs/test-organization" ).queryParam( "access_token", adminAccessToken )
- .accept( MediaType.APPLICATION_JSON ).type( MediaType.APPLICATION_JSON_TYPE )
- .get( String.class );
- }
- catch ( UniformInterfaceException uie ) {
- status = uie.getResponse().getClientResponseStatus();
- }
-
- assertNull( status );
-
- OrganizationInfo org = setup.getMgmtSvc().getOrganizationByName( "test-organization" );
-
- status = null;
- try {
- resource().path( String.format( "/management/orgs/%s", org.getUuid() ) )
- .queryParam( "access_token", adminAccessToken ).accept( MediaType.APPLICATION_JSON )
- .type( MediaType.APPLICATION_JSON_TYPE ).get( String.class );
- }
- catch ( UniformInterfaceException uie ) {
- status = uie.getResponse().getClientResponseStatus();
- }
-
- assertNull( status );
- }
-
-
-
-
-
- /**
- * Test that we can support over 10 items in feed.
- */
- @Test
- public void mgmtFollowsUserFeed() throws Exception {
- List<String> users1 = new ArrayList<String>();
- int i;
- //try with 10 users
- for ( i = 0; i < 10; i++ ) {
- users1.add( "follower" + Integer.toString( i ) );
- }
-
- refreshIndex("test-organization", "test-app");
-
- checkFeed( "leader1", users1 );
- //try with 11
- List<String> users2 = new ArrayList<String>();
- for ( i = 20; i < 31; i++ ) {
- users2.add( "follower" + Integer.toString( i ) );
- }
- checkFeed( "leader2", users2 );
- }
-
-
- private void checkFeed( String leader, List<String> followers ) throws IOException {
- JsonNode userFeed;
-
- //create user
- createUser( leader );
- refreshIndex("test-organization", "test-app");
-
- String preFollowContent = leader + ": pre-something to look for " + UUID.randomUUID().toString();
-
- addActivity( leader, leader + " " + leader + "son", preFollowContent );
- refreshIndex("test-organization", "test-app");
-
- String lastUser = followers.get( followers.size() - 1 );
- int i = 0;
- for ( String user : followers ) {
- createUser( user );
- refreshIndex("test-organization", "test-app");
- follow( user, leader );
- refreshIndex("test-organization", "test-app");
- }
- userFeed = getUserFeed( lastUser );
- assertTrue( userFeed.size() == 1 );
-
- //retrieve feed
- userFeed = getUserFeed( lastUser );
- assertTrue( userFeed.size() == 1 );
- String postFollowContent = leader + ": something to look for " + UUID.randomUUID().toString();
- addActivity( leader, leader + " " + leader + "son", postFollowContent );
-
- refreshIndex("test-organization", "test-app");
-
- //check feed
- userFeed = getUserFeed( lastUser );
- assertNotNull( userFeed );
- assertTrue( userFeed.size() > 1 );
- String serialized = userFeed.toString();
- assertTrue( serialized.indexOf( postFollowContent ) > 0 );
- assertTrue( serialized.indexOf( preFollowContent ) > 0 );
- }
-
-
- private void createUser( String username ) {
- Map<String, Object> payload = new LinkedHashMap<String, Object>();
- payload.put( "username", username );
- resource().path( "/test-organization/test-app/users" ).queryParam( "access_token", access_token )
- .accept( MediaType.APPLICATION_JSON ).type( MediaType.APPLICATION_JSON_TYPE )
- .post( String.class, payload );
- }
-
-
- private JsonNode getUserFeed( String username ) throws IOException {
- JsonNode userFeed = mapper.readTree( resource().path( "/test-organization/test-app/users/" + username + "/feed" )
- .queryParam( "access_token", access_token ).accept( MediaType.APPLICATION_JSON )
- .get( String.class ));
- return userFeed.get( "entities" );
- }
-
-
- private void follow( String user, String followUser ) {
- //post follow
- resource().path( "/test-organization/test-app/users/" + user + "/following/users/" + followUser )
- .queryParam( "access_token", access_token ).accept( MediaType.APPLICATION_JSON )
- .type( MediaType.APPLICATION_JSON_TYPE ).post( String.class, new HashMap<String, String>() );
- }
-
-
- private void addActivity( String user, String name, String content ) {
- Map<String, Object> activityPayload = new HashMap<String, Object>();
- activityPayload.put( "content", content );
- activityPayload.put( "verb", "post" );
- Map<String, String> actorMap = new HashMap<String, String>();
- actorMap.put( "displayName", name );
- actorMap.put( "username", user );
- activityPayload.put( "actor", actorMap );
- resource().path( "/test-organization/test-app/users/" + user + "/activities" )
- .queryParam( "access_token", access_token ).accept( MediaType.APPLICATION_JSON )
- .type( MediaType.APPLICATION_JSON_TYPE ).post( String.class, activityPayload );
- }
-
-
- @Test
- public void mgmtCreateAndGetApplication() throws Exception {
-
- OrganizationInfo orgInfo = setup.getMgmtSvc().getOrganizationByName( "test-organization" );
- Map<String, String> data = new HashMap<String, String>();
- data.put( "name", "mgmt-org-app" );
-
- // POST /applications
- JsonNode appdata = mapper.readTree( resource().path( "/management/orgs/" + orgInfo.getUuid() + "/applications" )
- .queryParam( "access_token", adminToken() ).accept( MediaType.APPLICATION_JSON )
- .type( MediaType.APPLICATION_JSON_TYPE ).post( String.class, data ));
- logNode( appdata );
- appdata = getEntity( appdata, 0 );
-
- refreshIndex("test-organization", "test-app");
-
- assertEquals( "test-organization/mgmt-org-app", appdata.get( "name" ).asText() );
- assertNotNull(appdata.get( "metadata" ));
- assertNotNull(appdata.get( "metadata" ).get( "collections" ));
- assertNotNull(appdata.get( "metadata" ).get( "collections" ).get( "roles" ));
- assertNotNull(appdata.get( "metadata" ).get( "collections" ).get( "roles" ).get( "title" ));
- assertEquals( "Roles", appdata.get( "metadata" ).get( "collections" ).get( "roles" ).get( "title" ).asText() );
- assertEquals( 3, appdata.get( "metadata" ).get( "collections" ).get( "roles" ).get( "count" ).asInt() );
-
- refreshIndex("test-organization", "test-app");
-
- // GET /applications/mgmt-org-app
- appdata = mapper.readTree( resource().path( "/management/orgs/" + orgInfo.getUuid() + "/applications/mgmt-org-app" )
- .queryParam( "access_token", adminToken() ).accept( MediaType.APPLICATION_JSON )
- .type( MediaType.APPLICATION_JSON_TYPE ).get( String.class ));
- logNode( appdata );
-
- assertEquals( "test-organization", appdata.get( "organization" ).asText() );
- assertEquals( "mgmt-org-app", appdata.get( "applicationName" ).asText() );
- assertEquals( "http://sometestvalue/test-organization/mgmt-org-app", appdata.get( "uri" ).textValue() );
- appdata = getEntity( appdata, 0 );
-
- assertEquals( "test-organization/mgmt-org-app", appdata.get( "name" ).asText() );
- assertEquals( "Roles", appdata.get( "metadata" ).get( "collections" ).get( "roles" ).get( "title" ).asText() );
- assertEquals( 3, appdata.get( "metadata" ).get( "collections" ).get( "roles" ).get( "count" ).asInt() );
- }
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/66b8ecb9/stack/rest/src/test/java/org/apache/usergrid/rest/management/OrganizationsIT.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/management/OrganizationsIT.java b/stack/rest/src/test/java/org/apache/usergrid/rest/management/OrganizationsIT.java
index 2a72bc5..35517c5 100644
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/management/OrganizationsIT.java
+++ b/stack/rest/src/test/java/org/apache/usergrid/rest/management/OrganizationsIT.java
@@ -3,9 +3,14 @@ package org.apache.usergrid.rest.management;
import java.io.IOException;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.UUID;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.internet.MimeMultipart;
import javax.ws.rs.core.MediaType;
import org.junit.Rule;
@@ -13,8 +18,11 @@ import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.commons.lang.StringUtils;
+
import org.apache.usergrid.management.ApplicationInfo;
import org.apache.usergrid.management.OrganizationInfo;
+import org.apache.usergrid.management.OrganizationOwnerInfo;
import org.apache.usergrid.management.UserInfo;
import org.apache.usergrid.persistence.EntityManager;
import org.apache.usergrid.persistence.entities.User;
@@ -36,7 +44,9 @@ import static org.apache.usergrid.management.AccountCreationProps.PROPERTIES_SYS
import static org.apache.usergrid.management.AccountCreationProps.PROPERTIES_SYSADMIN_EMAIL;
import static org.apache.usergrid.utils.MapUtils.hashMap;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
@@ -359,4 +369,185 @@ public class OrganizationsIT extends AbstractRestIT {
.asInt() );
}
+
+ /**
+ * Test that admins can't view organizations they're not authorized to view.
+ */
+ @Test
+ public void crossOrgsNotViewable() throws Exception {
+
+ OrganizationOwnerInfo orgInfo = setup.getMgmtSvc().createOwnerAndOrganization( "crossOrgsNotViewable",
+ "crossOrgsNotViewable", "TestName", "crossOrgsNotViewable@usergrid.org", "password" );
+
+ refreshIndex("test-organization", "test-app");
+
+ // check that the test admin cannot access the new org info
+
+ ClientResponse.Status status = null;
+
+ try {
+ resource().path( String.format( "/management/orgs/%s", orgInfo.getOrganization().getName() ) )
+ .queryParam( "access_token", adminAccessToken ).accept( MediaType.APPLICATION_JSON )
+ .type( MediaType.APPLICATION_JSON_TYPE ).get( String.class );
+ }
+ catch ( UniformInterfaceException uie ) {
+ status = uie.getResponse().getClientResponseStatus();
+ }
+
+ assertNotNull( status );
+ assertEquals( ClientResponse.Status.UNAUTHORIZED, status );
+
+ status = null;
+
+ try {
+ resource().path( String.format( "/management/orgs/%s", orgInfo.getOrganization().getUuid() ) )
+ .queryParam( "access_token", adminAccessToken ).accept( MediaType.APPLICATION_JSON )
+ .type( MediaType.APPLICATION_JSON_TYPE ).get( String.class );
+ }
+ catch ( UniformInterfaceException uie ) {
+ status = uie.getResponse().getClientResponseStatus();
+ }
+
+ assertNotNull( status );
+ assertEquals( ClientResponse.Status.UNAUTHORIZED, status );
+
+ // this admin should have access to test org
+ status = null;
+ try {
+ resource().path( "/management/orgs/test-organization" ).queryParam( "access_token", adminAccessToken )
+ .accept( MediaType.APPLICATION_JSON ).type( MediaType.APPLICATION_JSON_TYPE )
+ .get( String.class );
+ }
+ catch ( UniformInterfaceException uie ) {
+ status = uie.getResponse().getClientResponseStatus();
+ }
+
+ assertNull( status );
+
+ OrganizationInfo org = setup.getMgmtSvc().getOrganizationByName( "test-organization" );
+
+ status = null;
+ try {
+ resource().path( String.format( "/management/orgs/%s", org.getUuid() ) )
+ .queryParam( "access_token", adminAccessToken ).accept( MediaType.APPLICATION_JSON )
+ .type( MediaType.APPLICATION_JSON_TYPE ).get( String.class );
+ }
+ catch ( UniformInterfaceException uie ) {
+ status = uie.getResponse().getClientResponseStatus();
+ }
+
+ assertNull( status );
+ }
+
+ @Test
+ public void postCreateOrgAndAdmin() throws Exception {
+
+ Map<String, String> originalProperties = getRemoteTestProperties();
+
+ try {
+ setTestProperty( PROPERTIES_SYSADMIN_APPROVES_ADMIN_USERS, "false" );
+ setTestProperty( PROPERTIES_SYSADMIN_APPROVES_ORGANIZATIONS, "false" );
+ setTestProperty( PROPERTIES_ADMIN_USERS_REQUIRE_CONFIRMATION, "false" );
+ setTestProperty( PROPERTIES_SYSADMIN_EMAIL, "sysadmin-1@mockserver.com" );
+
+ JsonNode node = postCreateOrgAndAdmin( "test-org-1", "test-user-1", "Test User",
+ "test-user-1@mockserver.com", "testpassword" );
+
+ if (true ) return;
+
+ refreshIndex("test-organization", "test-app");
+
+ UUID owner_uuid =
+ UUID.fromString( node.findPath( "data" ).findPath( "owner" ).findPath( "uuid" ).textValue() );
+
+ List<Message> inbox = org.jvnet.mock_javamail.Mailbox.get( "test-user-1@mockserver.com" );
+
+ assertFalse( inbox.isEmpty() );
+
+ Message account_confirmation_message = inbox.get( 0 );
+ assertEquals( "User Account Confirmation: test-user-1@mockserver.com",
+ account_confirmation_message.getSubject() );
+
+ String token = getTokenFromMessage( account_confirmation_message );
+ LOG.info( token );
+
+ setup.getMgmtSvc().disableAdminUser( owner_uuid );
+
+ refreshIndex("test-organization", "test-app");
+
+ try {
+ resource().path( "/management/token" ).queryParam( "grant_type", "password" )
+ .queryParam( "username", "test-user-1" ).queryParam( "password", "testpassword" )
+ .accept( MediaType.APPLICATION_JSON ).type( MediaType.APPLICATION_JSON_TYPE )
+ .get( String.class );
+ org.junit.Assert.fail( "request for disabled user should fail" );
+ }
+ catch ( UniformInterfaceException uie ) {
+ ClientResponse.Status status = uie.getResponse().getClientResponseStatus();
+ JsonNode body = mapper.readTree( uie.getResponse().getEntity( String.class ));
+ assertEquals( "user disabled", body.findPath( "error_description" ).textValue() );
+ }
+
+ setup.getMgmtSvc().deactivateUser( setup.getEmf().getManagementAppId(), owner_uuid );
+ try {
+ resource().path( "/management/token" ).queryParam( "grant_type", "password" )
+ .queryParam( "username", "test-user-1" ).queryParam( "password", "testpassword" )
+ .accept( MediaType.APPLICATION_JSON ).type( MediaType.APPLICATION_JSON_TYPE )
+ .get( String.class );
+ org.junit.Assert.fail( "request for deactivated user should fail" );
+ }
+ catch ( UniformInterfaceException uie ) {
+ ClientResponse.Status status = uie.getResponse().getClientResponseStatus();
+ JsonNode body = mapper.readTree( uie.getResponse().getEntity( String.class ));
+ assertEquals( "user not activated", body.findPath( "error_description" ).textValue() );
+ }
+
+ // assertEquals(ActivationState.ACTIVATED,
+ // svcSetup.getMgmtSvc().handleConfirmationTokenForAdminUser(
+ // owner_uuid, token));
+
+ // need to enable JSP usage in the test version of Jetty to make this test run
+ // String response = resource()
+ // .path("/management/users/" + owner_uuid + "/confirm").get(String.class);
+ // logger.info(response);
+ // Message account_activation_message = inbox.get(1);
+ // assertEquals("User Account Activated", account_activation_message.getSubject());
+
+ }
+ finally {
+ setTestProperties( originalProperties );
+ }
+ }
+
+
+ public String getTokenFromMessage( Message msg ) throws IOException, MessagingException {
+ String body = ( ( MimeMultipart ) msg.getContent() ).getBodyPart( 0 ).getContent().toString();
+ String token = StringUtils.substringAfterLast( body, "token=" );
+ // TODO better token extraction
+ // this is going to get the wrong string if the first part is not
+ // text/plain and the url isn't the last character in the email
+ return token;
+ }
+
+
+ public JsonNode postCreateOrgAndAdmin( String organizationName, String username, String name,
+ String email, String password ) throws IOException {
+
+ JsonNode node = null;
+ Map<String, String> payload = hashMap( "email", email )
+ .map( "username", username )
+ .map( "name", name ).map( "password", password )
+ .map( "organization", organizationName );
+
+ node = mapper.readTree( resource().path( "/management/organizations" )
+ .accept( MediaType.APPLICATION_JSON )
+ .type( MediaType.APPLICATION_JSON_TYPE )
+ .post( String.class, payload ));
+
+ assertNotNull( node );
+ logNode( node );
+ return node;
+ }
+
+ //
}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/66b8ecb9/stack/rest/src/test/java/org/apache/usergrid/rest/management/RegistrationIT.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/management/RegistrationIT.java b/stack/rest/src/test/java/org/apache/usergrid/rest/management/RegistrationIT.java
deleted file mode 100644
index 580be03..0000000
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/management/RegistrationIT.java
+++ /dev/null
@@ -1,369 +0,0 @@
-/*
- * 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.management;
-
-
-import java.io.IOException;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.UUID;
-
-import javax.mail.Folder;
-import javax.mail.Message;
-import javax.mail.MessagingException;
-import javax.mail.Session;
-import javax.mail.Store;
-import javax.mail.internet.MimeMultipart;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.MultivaluedMap;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import org.junit.Test;
-import org.jvnet.mock_javamail.Mailbox;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.apache.usergrid.management.UserInfo;
-import org.apache.usergrid.rest.AbstractRestIT;
-
-import org.apache.commons.lang.StringUtils;
-
-import com.sun.jersey.api.client.ClientResponse;
-import com.sun.jersey.api.client.UniformInterfaceException;
-import com.sun.jersey.core.util.MultivaluedMapImpl;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNotSame;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.apache.usergrid.management.AccountCreationProps.PROPERTIES_ADMIN_RESETPW_URL;
-import static org.apache.usergrid.management.AccountCreationProps.PROPERTIES_ADMIN_USERS_REQUIRE_CONFIRMATION;
-import static org.apache.usergrid.management.AccountCreationProps.PROPERTIES_SYSADMIN_APPROVES_ADMIN_USERS;
-import static org.apache.usergrid.management.AccountCreationProps.PROPERTIES_SYSADMIN_APPROVES_ORGANIZATIONS;
-import static org.apache.usergrid.management.AccountCreationProps.PROPERTIES_SYSADMIN_EMAIL;
-import static org.apache.usergrid.utils.MapUtils.hashMap;
-
-
-public class RegistrationIT extends AbstractRestIT {
-
- private static final Logger logger = LoggerFactory.getLogger( RegistrationIT.class );
-
-
- @Test
- public void postCreateOrgAndAdmin() throws Exception {
-
- Map<String, String> originalProperties = getRemoteTestProperties();
-
- try {
- setTestProperty( PROPERTIES_SYSADMIN_APPROVES_ADMIN_USERS, "false" );
- setTestProperty( PROPERTIES_SYSADMIN_APPROVES_ORGANIZATIONS, "false" );
- setTestProperty( PROPERTIES_ADMIN_USERS_REQUIRE_CONFIRMATION, "false" );
- setTestProperty( PROPERTIES_SYSADMIN_EMAIL, "sysadmin-1@mockserver.com" );
-
- JsonNode node = postCreateOrgAndAdmin( "test-org-1", "test-user-1", "Test User",
- "test-user-1@mockserver.com", "testpassword" );
-
- if (true ) return;
-
- refreshIndex("test-organization", "test-app");
-
- UUID owner_uuid =
- UUID.fromString( node.findPath( "data" ).findPath( "owner" ).findPath( "uuid" ).textValue() );
-
- List<Message> inbox = org.jvnet.mock_javamail.Mailbox.get( "test-user-1@mockserver.com" );
-
- assertFalse( inbox.isEmpty() );
-
- Message account_confirmation_message = inbox.get( 0 );
- assertEquals( "User Account Confirmation: test-user-1@mockserver.com",
- account_confirmation_message.getSubject() );
-
- String token = getTokenFromMessage( account_confirmation_message );
- logger.info( token );
-
- setup.getMgmtSvc().disableAdminUser( owner_uuid );
-
- refreshIndex("test-organization", "test-app");
-
- try {
- resource().path( "/management/token" ).queryParam( "grant_type", "password" )
- .queryParam( "username", "test-user-1" ).queryParam( "password", "testpassword" )
- .accept( MediaType.APPLICATION_JSON ).type( MediaType.APPLICATION_JSON_TYPE )
- .get( String.class );
- fail( "request for disabled user should fail" );
- }
- catch ( UniformInterfaceException uie ) {
- ClientResponse.Status status = uie.getResponse().getClientResponseStatus();
- JsonNode body = mapper.readTree( uie.getResponse().getEntity( String.class ));
- assertEquals( "user disabled", body.findPath( "error_description" ).textValue() );
- }
-
- setup.getMgmtSvc().deactivateUser( setup.getEmf().getManagementAppId(), owner_uuid );
- try {
- resource().path( "/management/token" ).queryParam( "grant_type", "password" )
- .queryParam( "username", "test-user-1" ).queryParam( "password", "testpassword" )
- .accept( MediaType.APPLICATION_JSON ).type( MediaType.APPLICATION_JSON_TYPE )
- .get( String.class );
- fail( "request for deactivated user should fail" );
- }
- catch ( UniformInterfaceException uie ) {
- ClientResponse.Status status = uie.getResponse().getClientResponseStatus();
- JsonNode body = mapper.readTree( uie.getResponse().getEntity( String.class ));
- assertEquals( "user not activated", body.findPath( "error_description" ).textValue() );
- }
-
- // assertEquals(ActivationState.ACTIVATED,
- // svcSetup.getMgmtSvc().handleConfirmationTokenForAdminUser(
- // owner_uuid, token));
-
- // need to enable JSP usage in the test version of Jetty to make this test run
- // String response = resource()
- // .path("/management/users/" + owner_uuid + "/confirm").get(String.class);
- // logger.info(response);
- // Message account_activation_message = inbox.get(1);
- // assertEquals("User Account Activated", account_activation_message.getSubject());
-
- }
- finally {
- setTestProperties( originalProperties );
- }
- }
-
-
- public String getTokenFromMessage( Message msg ) throws IOException, MessagingException {
- String body = ( ( MimeMultipart ) msg.getContent() ).getBodyPart( 0 ).getContent().toString();
- String token = StringUtils.substringAfterLast( body, "token=" );
- // TODO better token extraction
- // this is going to get the wrong string if the first part is not
- // text/plain and the url isn't the last character in the email
- return token;
- }
-
-
- public JsonNode postCreateOrgAndAdmin( String organizationName, String username, String name,
- String email, String password ) throws IOException {
-
- JsonNode node = null;
- Map<String, String> payload = hashMap( "email", email )
- .map( "username", username )
- .map( "name", name ).map( "password", password )
- .map( "organization", organizationName );
-
- node = mapper.readTree( resource().path( "/management/organizations" )
- .accept( MediaType.APPLICATION_JSON )
- .type( MediaType.APPLICATION_JSON_TYPE )
- .post( String.class, payload ));
-
- assertNotNull( node );
- logNode( node );
- return node;
- }
-
-
- @SuppressWarnings({ "unchecked", "rawtypes" })
- public JsonNode postAddAdminToOrg( String organizationName, String email, String password, String token ) throws IOException {
- JsonNode node = null;
-
- MultivaluedMap formData = new MultivaluedMapImpl();
- formData.add( "email", email );
- formData.add( "password", password );
-
- node = mapper.readTree( resource().path( "/management/organizations/" + organizationName + "/users" )
- .queryParam( "access_token", token ).accept( MediaType.APPLICATION_JSON )
- .type( MediaType.APPLICATION_FORM_URLENCODED ).post( String.class, formData ));
-
- assertNotNull( node );
- logNode( node );
- return node;
- }
-
-
- @Test
- public void putAddToOrganizationFail() throws Exception {
-
- Map<String, String> originalProperties = getRemoteTestProperties();
-
- try {
- setTestProperty( PROPERTIES_SYSADMIN_APPROVES_ADMIN_USERS, "false" );
- setTestProperty( PROPERTIES_SYSADMIN_APPROVES_ORGANIZATIONS, "false" );
- setTestProperty( PROPERTIES_ADMIN_USERS_REQUIRE_CONFIRMATION, "false" );
- setTestProperty( PROPERTIES_SYSADMIN_EMAIL, "sysadmin-1@mockserver.com" );
-
- String t = adminToken();
- MultivaluedMap formData = new MultivaluedMapImpl();
- formData.add( "foo", "bar" );
- try {
- resource().path( "/management/organizations/test-organization/users/test-admin-null@mockserver.com" )
- .queryParam( "access_token", t ).accept( MediaType.APPLICATION_JSON )
- .type( MediaType.APPLICATION_FORM_URLENCODED ).put( String.class, formData );
- }
- catch ( UniformInterfaceException e ) {
- assertEquals( "Should receive a 400 Not Found", 400, e.getResponse().getStatus() );
- }
- }
- finally {
- setTestProperties( originalProperties );
- }
- }
-
-
- @Test
- public void postAddToOrganization() throws Exception {
-
- Map<String, String> originalProperties = getRemoteTestProperties();
-
- try {
- setTestProperty( PROPERTIES_SYSADMIN_APPROVES_ADMIN_USERS, "false" );
- setTestProperty( PROPERTIES_SYSADMIN_APPROVES_ORGANIZATIONS, "false" );
- setTestProperty( PROPERTIES_ADMIN_USERS_REQUIRE_CONFIRMATION, "false" );
- setTestProperty( PROPERTIES_SYSADMIN_EMAIL, "sysadmin-1@mockserver.com" );
-
- String t = adminToken();
- postAddAdminToOrg( "test-organization", "test-admin@mockserver.com", "password", t );
- }
- finally {
- setTestProperties( originalProperties );
- }
- }
-
-
- @Test
- public void addNewAdminUserWithNoPwdToOrganization() throws Exception {
-
- Map<String, String> originalProperties = getRemoteTestProperties();
-
- try {
- Mailbox.clearAll();
- setTestProperty( PROPERTIES_SYSADMIN_APPROVES_ADMIN_USERS, "false" );
- setTestProperty( PROPERTIES_SYSADMIN_APPROVES_ORGANIZATIONS, "false" );
- setTestProperty( PROPERTIES_ADMIN_USERS_REQUIRE_CONFIRMATION, "false" );
- setTestProperty( PROPERTIES_SYSADMIN_EMAIL, "sysadmin-1@mockserver.com" );
-
- // this should send resetpwd link in email to newly added org admin user(that did not exist
- ///in usergrid) and "User Invited To Organization" email
- String adminToken = adminToken();
- JsonNode node = postAddAdminToOrg( "test-organization", "test-admin-nopwd@mockserver.com", "", adminToken );
- String uuid = node.get( "data" ).get( "user" ).get( "uuid" ).textValue();
- UUID userId = UUID.fromString( uuid );
-
- refreshIndex("test-organization", "test-app");
-
- String subject = "Password Reset";
- String reset_url = String.format( setup.getProps().getProperty( PROPERTIES_ADMIN_RESETPW_URL ), uuid );
- String invited = "User Invited To Organization";
-
- Message[] msgs = getMessages( "mockserver.com", "test-admin-nopwd", "password" );
-
- // 1 Invite and 1 resetpwd
- assertTrue( msgs.length == 2 );
-
- //email subject
- assertEquals( subject, msgs[0].getSubject() );
- assertEquals( invited, msgs[1].getSubject() );
-
- // reseturl
- String mailContent = ( String ) ( ( MimeMultipart ) msgs[0].getContent() ).getBodyPart( 1 ).getContent();
- logger.info( mailContent );
- assertTrue( StringUtils.contains( mailContent, reset_url ) );
-
- //token
- String token = getTokenFromMessage( msgs[0] );
- assertTrue( setup.getMgmtSvc().checkPasswordResetTokenForAdminUser( userId, token ) );
- }
- finally {
- setTestProperties( originalProperties );
- }
- }
-
-
- @Test
- public void addExistingAdminUserToOrganization() throws Exception {
-
- Map<String, String> originalProperties = getRemoteTestProperties();
-
- try {
- Mailbox.clearAll();
- setTestProperty( PROPERTIES_SYSADMIN_APPROVES_ADMIN_USERS, "false" );
- setTestProperty( PROPERTIES_SYSADMIN_APPROVES_ORGANIZATIONS, "false" );
- setTestProperty( PROPERTIES_ADMIN_USERS_REQUIRE_CONFIRMATION, "false" );
- setTestProperty( PROPERTIES_SYSADMIN_EMAIL, "sysadmin-1@mockserver.com" );
-
- // svcSetup an admin user
- String adminUserName = "AdminUserFromOtherOrg";
- String adminUserEmail = "AdminUserFromOtherOrg@otherorg.com";
-
- UserInfo adminUser = setup.getMgmtSvc().createAdminUser(
- adminUserEmail, adminUserEmail, adminUserEmail, "password1", true, false );
-
- refreshIndex("test-organization", "test-app");
-
- assertNotNull( adminUser );
- Message[] msgs = getMessages( "otherorg.com", adminUserName, "password1" );
- assertEquals( 1, msgs.length );
-
- // add existing admin user to org
-
- // this should NOT send resetpwd link in email to newly added org admin user(that
- // already exists in usergrid) only "User Invited To Organization" email
- String adminToken = adminToken();
- JsonNode node = postAddAdminToOrg( "test-organization",
- adminUserEmail, "password1", adminToken );
- String uuid = node.get( "data" ).get( "user" ).get( "uuid" ).textValue();
- UUID userId = UUID.fromString( uuid );
-
- assertEquals( adminUser.getUuid(), userId );
-
- msgs = getMessages( "otherorg.com", adminUserName, "password1" );
-
- // only 1 invited msg
- assertEquals( 2, msgs.length );
-
- // check email subject
- String resetpwd = "Password Reset";
- assertNotSame( resetpwd, msgs[1].getSubject() );
-
- String invited = "User Invited To Organization";
- assertEquals( invited, msgs[1].getSubject() );
- }
- finally {
- setTestProperties( originalProperties );
- }
- }
-
-
- private Message[] getMessages( String host, String user, String password ) throws MessagingException, IOException {
-
- Session session = Session.getDefaultInstance( new Properties() );
- Store store = session.getStore( "imap" );
- store.connect( host, user, password );
-
- Folder folder = store.getFolder( "inbox" );
- folder.open( Folder.READ_ONLY );
- Message[] msgs = folder.getMessages();
-
- for ( Message m : msgs ) {
- logger.info( "Subject: " + m.getSubject() );
- logger.info(
- "Body content 0 " + ( ( MimeMultipart ) m.getContent() ).getBodyPart( 0 ).getContent());
- logger.info(
- "Body content 1 " + ( ( MimeMultipart ) m.getContent() ).getBodyPart( 1 ).getContent());
- }
- return msgs;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/66b8ecb9/stack/rest/src/test/java/org/apache/usergrid/rest/management/organizations/AdminEmailEncodingIT.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/management/organizations/AdminEmailEncodingIT.java b/stack/rest/src/test/java/org/apache/usergrid/rest/management/organizations/AdminEmailEncodingIT.java
deleted file mode 100644
index 145ccd3..0000000
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/management/organizations/AdminEmailEncodingIT.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * 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.management.organizations;
-
-
-import com.fasterxml.jackson.databind.JsonNode;
-import java.io.IOException;
-import org.junit.Rule;
-import org.junit.Test;
-import org.apache.usergrid.cassandra.Concurrent;
-import org.apache.usergrid.rest.AbstractRestIT;
-import org.apache.usergrid.rest.TestContextSetup;
-import org.apache.usergrid.rest.test.security.TestAdminUser;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
-
-/**
- * Tests for admin emails with + signs create accounts correctly, and can get tokens in both the POST and GET forms of
- * the api
- *
- * @author tnine
- */
-@Concurrent()
-public class AdminEmailEncodingIT extends AbstractRestIT {
-
- @Rule
- public TestContextSetup context = new TestContextSetup( this );
-
-
- @Test
- public void getTokenPlus() throws Exception {
- String org = "AdminEmailEncodingTestgetTokenPlus";
- String app = "Plus";
-
- doTest( "+", org, app );
- }
-
-
- @Test
- public void getTokenUnderscore() throws Exception {
- String org = "AdminEmailEncodingTestgetTokenUnderscore";
- String app = "Underscore";
-
- doTest( "_", org, app );
- }
-
-
- @Test
- public void getTokenDash() throws Exception {
- String org = "AdminEmailEncodingTestgetTokenDash";
- String app = "Dash";
-
- doTest( "-", org, app );
- }
-
-
- private void doTest( String symbol, String org, String app ) throws IOException {
-
- org = org.toLowerCase();
- app = app.toLowerCase();
-
- String email = String.format( "admin%sname@adminemailencodingtest.org", symbol );
- String user = email;
- String password = "password";
-
- TestAdminUser adminUser = new TestAdminUser( user, password, email );
-
- context.withApp( app ).withOrg( org ).withUser( adminUser );
-
- // create the org and app
- context.createNewOrgAndUser();
-
- // no need for refresh here as Service module does an index refresh when org/app created
-
- // now log in via a GET
-
- String getToken = context.management().tokenGet( email, password );
-
- assertNotNull( getToken );
-
- String postToken = context.management().tokenPost( email, password );
-
- assertNotNull( postToken );
-
- // not log in with our admin
- context.withUser( adminUser ).loginUser();
-
- //now get the "me" and ensure it's correct
-
- JsonNode data = context.management().me().get();
-
- assertNotNull( data.get( "access_token" ).asText() );
-
- data = context.management().users().user( email ).get();
-
- JsonNode admin = data.get( "data" ).get( "organizations" ).get( org ).get( "users" ).get( email );
-
- assertNotNull( admin );
-
- assertEquals( email, admin.get( "email" ).asText() );
- assertEquals( user, admin.get( "username" ).asText() );
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-usergrid/blob/66b8ecb9/stack/rest/src/test/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationsIT.java
----------------------------------------------------------------------
diff --git a/stack/rest/src/test/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationsIT.java b/stack/rest/src/test/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationsIT.java
deleted file mode 100644
index b55e3f7..0000000
--- a/stack/rest/src/test/java/org/apache/usergrid/rest/management/organizations/applications/ApplicationsIT.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * 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.management.organizations.applications;
-
-
-import java.util.HashSet;
-import java.util.Set;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import java.io.IOException;
-import org.junit.Rule;
-import org.junit.Test;
-
-import org.apache.usergrid.rest.AbstractRestIT;
-import org.apache.usergrid.rest.TestContextSetup;
-
-import static org.junit.Assert.assertEquals;
-import org.junit.Ignore;
-
-
-/**
- *
- *
- */
-public class ApplicationsIT extends AbstractRestIT {
-
- @Rule
- public TestContextSetup context = new TestContextSetup( this );
-
-
- @Test
- @Ignore("ignored because this test fails because it does not account for the default app "
- + "created by the TestContext and the sandbox app. "
- + "see also: https://issues.apache.org/jira/browse/USERGRID-210 ")
- public void test10AppLimit() throws IOException {
-
- int size = 11;
-
- Set<String> appNames = new HashSet<String>( size );
-
- for ( int i = 0; i < size; i++ ) {
- final String name = i + "";
-
- appNames.add( name );
-
- context.withApp( name ).createAppForOrg();
- refreshIndex(context.getOrgName(), name);
- }
-
-
- //now go through and ensure each entry is present
-
- final JsonNode apps = context.management().orgs().organization( context.getOrgName() ).apps().get();
-
- final JsonNode data = apps.get( "data" );
-
- final String orgName = context.getOrgName();
-
-
- final Set<String> copy = new HashSet<String> (appNames);
-
- for(String appName: copy){
-
- final String mapEntryName = String.format( "%s/%s", orgName.toLowerCase(), appName.toLowerCase());
-
- JsonNode orgApp = data.get( mapEntryName);
-
- if(orgApp != null){
- appNames.remove( appName );
- }
-
- }
-
- assertEquals("All elements removed", 0, appNames.size());
-
- }
-}