Repository: usergrid
Updated Branches:
  refs/heads/master 1d7785b82 -> 8b945c638


http://git-wip-us.apache.org/repos/asf/usergrid/blob/000eaaad/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/CollectionsResourceIT.java
----------------------------------------------------------------------
diff --git 
a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/CollectionsResourceIT.java
 
b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/CollectionsResourceIT.java
index bf06c21..b8baa3d 100644
--- 
a/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/CollectionsResourceIT.java
+++ 
b/stack/rest/src/test/java/org/apache/usergrid/rest/applications/collection/CollectionsResourceIT.java
@@ -18,7 +18,9 @@ package org.apache.usergrid.rest.applications.collection;
 
 
 import com.fasterxml.jackson.databind.JsonNode;
+import net.jcip.annotations.NotThreadSafe;
 import org.apache.commons.lang.RandomStringUtils;
+import org.apache.usergrid.corepersistence.util.CpCollectionUtils;
 import org.apache.usergrid.persistence.Schema;
 import org.apache.usergrid.persistence.entities.Application;
 import org.apache.usergrid.persistence.index.utils.UUIDUtils;
@@ -37,6 +39,7 @@ import java.util.*;
 
 import static junit.framework.TestCase.assertNotNull;
 import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
 
 
 /**
@@ -47,12 +50,159 @@ import static org.junit.Assert.*;
  *  misc tests for collections
  */
 
+@NotThreadSafe
 public class CollectionsResourceIT extends AbstractRestIT {
 
     private final String REGION_SETTING = "authoritativeRegion";
 
     private static final Logger log = LoggerFactory.getLogger( 
CollectionsResourceIT.class );
 
+    @Test
+    public void testValidSettings() throws IOException {
+
+        String randomizer = RandomStringUtils.randomAlphanumeric(10);
+        String collectionName = "collection" + randomizer;
+
+        //Create test collection with test entity that is full text indexed.
+        Entity testEntity = new Entity();
+
+        testEntity.put( "one","value" );
+        app().collection( collectionName ).post( testEntity );
+
+        //Creating schema.
+        //this could be changed to a hashmap.
+        ArrayList<String> indexingArray = new ArrayList<>(  );
+        indexingArray.add( "one" );
+
+        //field "fields" is required.
+        Entity payload = new Entity();
+        payload.put( "fields", indexingArray);
+        payload.put( "queueIndex", "direct");
+
+        //Post index to the collection metadata
+        Entity settings = app().collection( collectionName ).collection( 
"_settings" ).post( payload );
+        waitForQueueDrainAndRefreshIndex();
+
+        Object queueIndexValue = settings.get("queueIndex");
+        assertEquals( "direct", queueIndexValue);
+
+        Object feildsValue = settings.get("fields");
+        assertTrue(feildsValue  instanceof  List);
+        List list = (List) feildsValue;
+        assertEquals(1, list.size()  );
+        assertEquals( "one", list.get(0) );
+
+    }
+
+
+    @Test
+    public void testInvalidSettings() throws IOException {
+
+        String randomizer = RandomStringUtils.randomAlphanumeric(10);
+        String collectionName = "collection" + randomizer;
+
+        //Create test collection with test entity that is full text indexed.
+        Entity testEntity = new Entity();
+
+        testEntity.put( "one","value" );
+        app().collection( collectionName ).post( testEntity );
+
+        //Creating schema.
+        //this could be changed to a hashmap.
+        ArrayList<String> indexingArray = new ArrayList<>(  );
+        indexingArray.add( "one" );
+
+        //field "fields" is required.
+        Entity payload = new Entity();
+        payload.put( "queueIndex", "BADVALUE");
+
+        //Post index to the collection metadata
+        Entity settings = app().collection( collectionName ).collection( 
"_settings" ).post( payload );
+        waitForQueueDrainAndRefreshIndex();
+
+        Object queueIndexValue = settings.get("queueIndex");
+        // BAD value should be rejected and we get the default.
+        assertEquals( "config", queueIndexValue);
+    }
+
+
+    @Test
+    public void testStaleEntries() throws IOException {
+
+        String randomizer = RandomStringUtils.randomAlphanumeric(10);
+        String collectionName = "cars_" + randomizer;
+
+        //Create test collection with test entity that is full text indexed.
+        Entity testEntity1 = new Entity();
+        testEntity1.put( "make","tesla" );
+        testEntity1.put( "color","red" );
+        testEntity1 = app().collection( collectionName ).post( testEntity1 );
+
+        Entity testEntity2 = new Entity();
+        testEntity2.put( "make","honda" );
+        testEntity2.put( "color","red" );
+        testEntity2 = app().collection( collectionName ).post( testEntity2 );
+
+        ArrayList<String> indexingArray = new ArrayList<>(  );
+        indexingArray.add( "make" );
+        indexingArray.add( "color" );
+
+        Entity payload = new Entity();
+        payload.put( "fields", indexingArray);
+        payload.put( "queueIndex", "direct");
+
+        Entity settings = app().collection( collectionName ).collection( 
"_settings" ).post( payload );
+        waitForQueueDrainAndRefreshIndex();
+
+        String query = "color ='red'";
+        QueryParameters queryParameters = new QueryParameters().setQuery( 
query );
+
+        Collection resultEntity = app().collection( collectionName ).get( 
queryParameters, true );
+
+        assertNotNull(resultEntity);
+        assertEquals(resultEntity.getResponse().getEntities().size(), 2);
+
+        Object color0 = 
resultEntity.getResponse().getEntities().get(0).get("color");
+        Object color1 = 
resultEntity.getResponse().getEntities().get(1).get("color");
+
+        assertEquals("red", color0);
+        assertEquals("red", color1);
+
+        // Allow illegal settings
+        CpCollectionUtils.setDebugMode(true);
+        payload.put( "queueIndex", "debug_noindex");
+        payload.put( "indexConsistency", "latest");
+        settings = app().collection( collectionName ).collection( "_settings" 
).post( payload );
+
+        testEntity2.put("color", "blue");
+        Entity response = app().collection( collectionName 
).entity(testEntity2.getUuid()).put(testEntity2);
+
+        queryParameters = new QueryParameters().setQuery( "color ='red'" );
+
+        resultEntity = app().collection( collectionName ).get( 
queryParameters, true );
+
+        waitForQueueDrainAndRefreshIndex();
+
+        assertEquals(resultEntity.getResponse().getEntities().size(), 2);
+
+        Entity entity0 = resultEntity.getResponse().getEntities().get(0);
+        Entity entity1 = resultEntity.getResponse().getEntities().get(1);
+
+        color0 = entity0.get("color");
+        color1 = entity1.get("color");
+
+        Object make0 = entity0.get("make");
+        Object make1 = entity1.get("make");
+
+        if (make0.equals("honda")) {
+            assertEquals("blue", color0);
+            assertEquals("red", color1);
+        } else {
+            assertEquals("red", color0);
+            assertEquals("blue", color1);
+        }
+
+    }
 
     /***
      *
@@ -285,6 +435,7 @@ public class CollectionsResourceIT extends AbstractRestIT {
         //field "fields" is required.
         Entity payload = new Entity();
         payload.put( "fields", indexingArray);
+        payload.put( "queueIndex", "direct");
 
         //Post index to the collection metadata
         Entity thing = this.app().collection( "testCollection" ).collection( 
"_settings" ).post( payload );

Reply via email to