RYA-289 Mongo Singleton tests. Closes #216.

Created a mongo client singleton to be used
for tests.
Updated existing tests to use the singleton


Project: http://git-wip-us.apache.org/repos/asf/incubator-rya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rya/commit/e5738966
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rya/tree/e5738966
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rya/diff/e5738966

Branch: refs/heads/master
Commit: e5738966d5df9112da44df3447fc70945c49319c
Parents: 8431dfb
Author: isper3at <smith...@gmail.com>
Authored: Tue Aug 22 18:34:26 2017 -0400
Committer: Caleb Meier <caleb.me...@parsons.com>
Committed: Fri Aug 25 09:43:28 2017 -0700

----------------------------------------------------------------------
 .../org/apache/rya/mongodb/MongoDBRyaDAO.java   |   2 +-
 .../apache/rya/mongodb/MockMongoSingleton.java  |  82 +++++
 .../rya/mongodb/MongoDBQueryEngineTest.java     |  41 +--
 .../org/apache/rya/mongodb/MongoDBRyaDAOIT.java |  61 ++--
 .../apache/rya/mongodb/MongoDBRyaDAOTest.java   |  38 +--
 .../org/apache/rya/mongodb/MongoTestBase.java   |  60 ++++
 .../instance/MongoRyaDetailsRepositoryIT.java   |  27 +-
 .../indexing/mongodb/AbstractMongoIndexer.java  |   1 -
 .../rya/indexing/mongodb/MongoDbSmartUri.java   |   8 -
 .../entity/query/EntityQueryNodeTest.java       |  14 +-
 .../storage/mongo/MongoEntityStorageIT.java     |   3 +-
 .../entity/storage/mongo/MongoITBase.java       |  80 -----
 .../storage/mongo/MongoTypeStorageIT.java       |   3 +-
 .../update/mongo/MongoEntityIndexerIT.java      |   4 +-
 .../external/PrecompJoinOptimizerTest2.java     |   3 +-
 .../rya/indexing/mongo/MongoDbSmartUriIT.java   | 309 +++++++++++++++++
 .../rya/indexing/mongo/MongoDbSmartUriTest.java | 332 -------------------
 .../rya/indexing/mongo/MongoEntityIndexIT.java  |  33 +-
 .../indexing/mongo/MongoEntityIndexTest.java    |  17 +-
 .../mongo/MongoFreeTextIndexerTest.java         |  25 +-
 .../mongo/MongoTemporalIndexerTest.java         |  37 +--
 .../duplication/DuplicateDataDetectorTest.java  |   4 +-
 .../metadata/MongoStatementMetadataIT.java      | 126 +++----
 .../MongoStatementMetadataNodeTest.java         |  56 +---
 .../src/main/java/MongoRyaDirectExample.java    |  10 +-
 .../geotemporal/model/EventQueryNodeTest.java   |  18 +-
 .../mongo/MongoGeoTemporalIndexerIT.java        |  11 -
 .../indexing/geotemporal/mongo/MongoITBase.java |  43 +--
 .../indexing/mongo/MongoGeoIndexerSfTest.java   |  36 +-
 .../rya/indexing/mongo/MongoGeoIndexerTest.java |  31 +-
 .../indexing/mongo/MongoIndexerDeleteIT.java    |  11 +-
 31 files changed, 632 insertions(+), 894 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRyaDAO.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRyaDAO.java 
b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRyaDAO.java
index a32651d..fe0f6f9 100644
--- a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRyaDAO.java
+++ b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRyaDAO.java
@@ -102,7 +102,7 @@ public final class MongoDBRyaDAO implements 
RyaDAO<MongoDBRdfConfiguration>{
     @Override
     public void setConf(final MongoDBRdfConfiguration conf) {
         this.conf = conf;
-        this.auths = conf.getAuthorizations();
+        auths = conf.getAuthorizations();
     }
 
     public MongoClient getMongoClient(){

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MockMongoSingleton.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MockMongoSingleton.java 
b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MockMongoSingleton.java
new file mode 100644
index 0000000..c7860af
--- /dev/null
+++ 
b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MockMongoSingleton.java
@@ -0,0 +1,82 @@
+/*
+ * 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.rya.mongodb;
+
+import java.io.IOException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.mongodb.MongoClient;
+
+/**
+ * To be used for tests. Creates a singleton {@link MongoClient} to be used
+ * throughout all of the MongoDB related tests. Without the singleton, the
+ * embedded mongo factory ends up orphaning processes, consuming resources.
+ */
+public class MockMongoSingleton {
+    public static MongoClient getInstance() {
+        return InstanceHolder.SINGLETON.instance;
+    }
+
+    private MockMongoSingleton() {
+        // hiding implicit default constructor
+    }
+
+    private enum InstanceHolder {
+
+        SINGLETON;
+
+        private final Logger log;
+        private MongoClient instance;
+
+        InstanceHolder() {
+            log = LoggerFactory.getLogger(MockMongoSingleton.class);
+            instance = null;
+            try {
+                instance = MockMongoFactory.newFactory().newMongoClient();
+                // JUnit does not have an overall lifecycle event for tearing 
down
+                // this kind of resource, but shutdown hooks work alright in 
practice
+                // since this should only be used during testing
+
+                // The only other alternative for lifecycle management is to 
use a
+                // suite lifecycle to enclose the tests that need this 
resource.
+                // In practice this becomes unwieldy.
+                Runtime.getRuntime().addShutdownHook(new Thread() {
+                    @Override
+                    public void run() {
+                        try {
+                            instance.close();
+                        } catch (final Throwable t) {
+                            // logging frameworks will likely be shut down
+                            t.printStackTrace(System.err);
+                        }
+                    }
+                });
+
+            } catch (final IOException e) {
+                log.error("Unexpected error while starting mongo client", e);
+            } catch (final Throwable e) {
+                // catching throwable because failure to construct an enum
+                // instance will lead to another error being thrown downstream
+                log.error("Unexpected throwable while starting mongo client", 
e);
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBQueryEngineTest.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBQueryEngineTest.java
 
b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBQueryEngineTest.java
index 4187c85..a8f2d88 100644
--- 
a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBQueryEngineTest.java
+++ 
b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBQueryEngineTest.java
@@ -23,8 +23,6 @@ import java.util.Collection;
 import java.util.Map;
 import java.util.Map.Entry;
 
-import org.apache.hadoop.conf.Configuration;
-import org.apache.rya.api.RdfCloudTripleStoreConfiguration;
 import org.apache.rya.api.RdfCloudTripleStoreUtils;
 import org.apache.rya.api.domain.RyaStatement;
 import org.apache.rya.api.domain.RyaStatement.RyaStatementBuilder;
@@ -37,32 +35,27 @@ import org.openrdf.query.BindingSet;
 import org.openrdf.query.impl.MapBindingSet;
 
 import com.google.common.collect.Lists;
+import com.mongodb.MongoClient;
 
 import info.aduna.iteration.CloseableIteration;
 
-public class MongoDBQueryEngineTest extends MongoRyaTestBase {
-
-    // private dao;
-    // private configuration;
+public class MongoDBQueryEngineTest extends MongoTestBase {
+    private MongoClient client;
+    private MongoDBRyaDAO dao;
 
     private MongoDBQueryEngine engine;
-    private MongoDBRdfConfiguration configuration;
+
+    private static final String DB_NAME = "testInstance";
 
     @Before
     public void setUp() throws Exception {
-        // Set up Mongo/Rya
-        final Configuration conf = new Configuration();
-        conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, getDbName());
-        conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya_");
-        conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, "rya_");
-        configuration = new MongoDBRdfConfiguration(conf);
-        final int port = mongoClient.getServerAddressList().get(0).getPort();
-        configuration.set(MongoDBRdfConfiguration.MONGO_INSTANCE_PORT, 
Integer.toString(port));
+        client = super.getMongoClient();
+        conf.setAuths("A", "B", "C");
 
-        engine = new MongoDBQueryEngine(configuration, mongoClient);
+        engine = new MongoDBQueryEngine(conf, client);
 
         // Add Data
-        final MongoDBRyaDAO dao = new MongoDBRyaDAO(configuration, 
mongoClient);
+        final MongoDBRyaDAO dao = new MongoDBRyaDAO(conf, client);
         dao.add(getStatement("u:a", "u:tt", "u:b"));
         dao.add(getStatement("u:a", "u:tt", "u:c"));
     }
@@ -93,7 +86,7 @@ public class MongoDBQueryEngineTest extends MongoRyaTestBase {
     @Test
     public void statementQuery() throws Exception {
         final RyaStatement s = getStatement("u:a", null, null);
-        Assert.assertEquals(2, size(engine.query(s, configuration)));
+        Assert.assertEquals(2, size(engine.query(s, conf)));
     }
 
     @SuppressWarnings("unchecked")
@@ -106,7 +99,7 @@ public class MongoDBQueryEngineTest extends MongoRyaTestBase 
{
 
         final Map.Entry<RyaStatement, BindingSet> e1 = new 
RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s1, bs1);
         final Collection<Entry<RyaStatement, BindingSet>> stmts1 = 
Lists.newArrayList(e1);
-        Assert.assertEquals(1, size(engine.queryWithBindingSet(stmts1, 
configuration)));
+        Assert.assertEquals(1, size(engine.queryWithBindingSet(stmts1, conf)));
 
 
         final MapBindingSet bs2 = new MapBindingSet();
@@ -117,14 +110,14 @@ public class MongoDBQueryEngineTest extends 
MongoRyaTestBase {
         final Map.Entry<RyaStatement, BindingSet> e2 = new 
RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s2, bs2);
 
         final Collection<Entry<RyaStatement, BindingSet>> stmts2 = 
Lists.newArrayList(e1, e2);
-        Assert.assertEquals(2, size(engine.queryWithBindingSet(stmts2, 
configuration)));
+        Assert.assertEquals(2, size(engine.queryWithBindingSet(stmts2, conf)));
 
 
         final Map.Entry<RyaStatement, BindingSet> e3 = new 
RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s2, bs1);
         final Map.Entry<RyaStatement, BindingSet> e4 = new 
RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s1, bs2);
-        
+
         final Collection<Entry<RyaStatement, BindingSet>> stmts3 = 
Lists.newArrayList(e1, e2, e3, e4);
-        Assert.assertEquals(4, size(engine.queryWithBindingSet(stmts3, 
configuration)));
+        Assert.assertEquals(4, size(engine.queryWithBindingSet(stmts3, conf)));
 }
     @SuppressWarnings("unchecked")
     @Test
@@ -136,7 +129,7 @@ public class MongoDBQueryEngineTest extends 
MongoRyaTestBase {
 
         final Map.Entry<RyaStatement, BindingSet> e1 = new 
RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s, bs1);
         final Collection<Entry<RyaStatement, BindingSet>> stmts1 = 
Lists.newArrayList(e1);
-        Assert.assertEquals(2, size(engine.queryWithBindingSet(stmts1, 
configuration)));
+        Assert.assertEquals(2, size(engine.queryWithBindingSet(stmts1, conf)));
 
 
         final MapBindingSet bs2 = new MapBindingSet();
@@ -145,6 +138,6 @@ public class MongoDBQueryEngineTest extends 
MongoRyaTestBase {
         final Map.Entry<RyaStatement, BindingSet> e2 = new 
RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s, bs2);
 
         final Collection<Entry<RyaStatement, BindingSet>> stmts2 = 
Lists.newArrayList(e1, e2);
-        Assert.assertEquals(4, size(engine.queryWithBindingSet(stmts2, 
configuration)));
+        Assert.assertEquals(4, size(engine.queryWithBindingSet(stmts2, conf)));
 }
 }

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java 
b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java
index dc3e026..5f3605e 100644
--- a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java
+++ b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java
@@ -27,8 +27,6 @@ import static org.junit.Assert.assertTrue;
 import java.io.IOException;
 
 import org.apache.accumulo.core.security.Authorizations;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.rya.api.RdfCloudTripleStoreConfiguration;
 import org.apache.rya.api.domain.RyaStatement;
 import org.apache.rya.api.domain.RyaStatement.RyaStatementBuilder;
 import org.apache.rya.api.domain.RyaURI;
@@ -41,26 +39,20 @@ import org.calrissian.mango.collect.CloseableIterable;
 import org.junit.Before;
 import org.junit.Test;
 
+import com.mongodb.MongoClient;
 import com.mongodb.MongoException;
 import com.mongodb.client.MongoCollection;
 import com.mongodb.client.MongoDatabase;
 
-public class MongoDBRyaDAOIT extends MongoRyaTestBase {
-
+public class MongoDBRyaDAOIT extends MongoTestBase {
+    private MongoClient client;
     private MongoDBRyaDAO dao;
-    private MongoDBRdfConfiguration configuration;
 
     @Before
     public void setUp() throws IOException, RyaDAOException{
-        final Configuration conf = new Configuration();
-        conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, getDbName());
-        conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya_");
-        conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, "rya_");
-        configuration = new MongoDBRdfConfiguration(conf);
-        configuration.setAuths("A", "B", "C");
-        final int port = mongoClient.getServerAddressList().get(0).getPort();
-        configuration.set(MongoDBRdfConfiguration.MONGO_INSTANCE_PORT, 
Integer.toString(port));
-        dao = new MongoDBRyaDAO(configuration, mongoClient);
+        conf.setAuths("A", "B", "C");
+        client = super.getMongoClient();
+        dao = new MongoDBRyaDAO(conf, client);
     }
 
     @Test
@@ -68,7 +60,7 @@ public class MongoDBRyaDAOIT extends MongoRyaTestBase {
         final RyaStatementBuilder builder = new RyaStatementBuilder();
         builder.setPredicate(new RyaURI("http://temp.com";));
         builder.setColumnVisibility(new DocumentVisibility("A").flatten());
-        dao.delete(builder.build(), configuration);
+        dao.delete(builder.build(), conf);
     }
 
     @Test
@@ -79,8 +71,8 @@ public class MongoDBRyaDAOIT extends MongoRyaTestBase {
         builder.setObject(new RyaURI("http://object.com";));
         builder.setColumnVisibility(new DocumentVisibility("B").flatten());
 
-        final MongoDatabase db = 
mongoClient.getDatabase(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
-        final MongoCollection<Document> coll = 
db.getCollection(configuration.getTriplesCollectionName());
+        final MongoDatabase db = 
client.getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
+        final MongoCollection<Document> coll = 
db.getCollection(conf.getTriplesCollectionName());
 
         dao.add(builder.build());
 
@@ -99,16 +91,16 @@ public class MongoDBRyaDAOIT extends MongoRyaTestBase {
         builder.setObject(new RyaURI("http://object.com";));
         builder.setColumnVisibility(new DocumentVisibility("C").flatten());
         final RyaStatement statement = builder.build();
-        final MongoDatabase db = 
mongoClient.getDatabase(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
-        final MongoCollection<Document> coll = 
db.getCollection(configuration.getTriplesCollectionName());
+        final MongoDatabase db = 
client.getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
+        final MongoCollection<Document> coll = 
db.getCollection(conf.getTriplesCollectionName());
 
         dao.add(statement);
 
-        assertEquals(coll.count(),1);
+        assertEquals(1, coll.count());
 
-        dao.delete(statement, configuration);
+        dao.delete(statement, conf);
 
-        assertEquals(coll.count(),0);
+        assertEquals(0, coll.count());
 
     }
 
@@ -122,12 +114,12 @@ public class MongoDBRyaDAOIT extends MongoRyaTestBase {
         builder.setColumnVisibility(new DocumentVisibility("A&B&C").flatten());
         final RyaStatement statement = builder.build();
 
-        final MongoDatabase db = 
mongoClient.getDatabase(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
-        final MongoCollection<Document> coll = 
db.getCollection(configuration.getTriplesCollectionName());
+        final MongoDatabase db = 
client.getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
+        final MongoCollection<Document> coll = 
db.getCollection(conf.getTriplesCollectionName());
 
         dao.add(statement);
 
-        assertEquals(coll.count(),1);
+        assertEquals(1, coll.count());
 
         final RyaStatementBuilder builder2 = new RyaStatementBuilder();
         builder2.setPredicate(new RyaURI("http://temp.com";));
@@ -135,9 +127,9 @@ public class MongoDBRyaDAOIT extends MongoRyaTestBase {
         builder2.setContext(new RyaURI("http://context3.com";));
         final RyaStatement query = builder2.build();
 
-        dao.delete(query, configuration);
+        dao.delete(query, conf);
 
-        assertEquals(coll.count(),1);
+        assertEquals(1, coll.count());
     }
 
     @Test
@@ -286,7 +278,8 @@ public class MongoDBRyaDAOIT extends MongoRyaTestBase {
         // Doc requires ("A" and "B") or ("C" and "D") and user has "A" and 
"B" and "E" = User can view
         assertTrue(testVisibilityStatement("(A&B)|(C&D)", new 
Authorizations("A", "B", "E")));
 
-        // Doc requires ("A" and "B") or ("C" and "D") and user has "C" and 
"D" and "E" = User can view
+        // Doc requires ("A" and "B")mongoClient or ("C" and "D") and user has
+        // "C" and "D" and "E" = User can view
         assertTrue(testVisibilityStatement("(A&B)|(C&D)", new 
Authorizations("C", "D", "E")));
 
         // Doc requires ("A" and "B") or ("C" and "D") and user has "A" and 
"C" = User CANNOT view
@@ -505,8 +498,8 @@ public class MongoDBRyaDAOIT extends MongoRyaTestBase {
      * @throws RyaDAOException
      */
     private boolean testVisibilityStatement(final String documentVisibility, 
final Authorizations userAuthorizations) throws RyaDAOException {
-        final MongoDatabase db = 
mongoClient.getDatabase(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
-        final MongoCollection<Document> coll = 
db.getCollection(configuration.getTriplesCollectionName());
+        final MongoDatabase db = 
client.getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
+        final MongoCollection<Document> coll = 
db.getCollection(conf.getTriplesCollectionName());
 
         final RyaStatement statement = 
buildVisibilityTestRyaStatement(documentVisibility);
 
@@ -514,18 +507,18 @@ public class MongoDBRyaDAOIT extends MongoRyaTestBase {
         dao.add(statement);
         
dao.getConf().setAuths(AuthorizationsUtil.getAuthorizationsStringArray(userAuthorizations
 != null ? userAuthorizations : Authorizations.EMPTY));
 
-        assertEquals(coll.count(), 1);
+        assertEquals(1, coll.count());
 
         final MongoDBQueryEngine queryEngine = (MongoDBQueryEngine) 
dao.getQueryEngine();
-        queryEngine.setConf(configuration);
+        queryEngine.setConf(conf);
         final CloseableIterable<RyaStatement> iter = queryEngine.query(new 
RyaQuery(statement));
 
         // Check if user has authorization to view document based on its 
visibility
         final boolean hasNext = iter.iterator().hasNext();
 
         // Reset
-        dao.delete(statement, configuration);
-        assertEquals(coll.count(), 0);
+        dao.delete(statement, conf);
+        assertEquals(0, coll.count());
         
dao.getConf().setAuths(AuthorizationsUtil.getAuthorizationsStringArray(Authorizations.EMPTY));
 
         return hasNext;

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOTest.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOTest.java 
b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOTest.java
index c7efbf1..8cf75f1 100644
--- 
a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOTest.java
+++ 
b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOTest.java
@@ -21,10 +21,7 @@ package org.apache.rya.mongodb;
 import static org.junit.Assert.assertEquals;
 
 import java.io.IOException;
-import java.util.concurrent.atomic.AtomicInteger;
 
-import org.apache.hadoop.conf.Configuration;
-import org.apache.rya.api.RdfCloudTripleStoreConfiguration;
 import org.apache.rya.api.domain.RyaStatement;
 import org.apache.rya.api.domain.RyaStatement.RyaStatementBuilder;
 import org.apache.rya.api.domain.RyaURI;
@@ -33,33 +30,26 @@ import org.bson.Document;
 import org.junit.Before;
 import org.junit.Test;
 
+import com.mongodb.MongoClient;
 import com.mongodb.MongoException;
 import com.mongodb.client.MongoCollection;
 import com.mongodb.client.MongoDatabase;
 
-public class MongoDBRyaDAOTest extends MongoRyaTestBase {
-
+public class MongoDBRyaDAOTest extends MongoTestBase {
+    private MongoClient client;
     private MongoDBRyaDAO dao;
-    private MongoDBRdfConfiguration configuration;
 
     @Before
     public void setUp() throws IOException, RyaDAOException{
-        final Configuration conf = new Configuration();
-        conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, getDbName());
-        conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya_");
-        conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, "rya_");
-        configuration = new MongoDBRdfConfiguration(conf);
-        final int port = mongoClient.getServerAddressList().get(0).getPort();
-        configuration.set(MongoDBRdfConfiguration.MONGO_INSTANCE_PORT, 
""+port);
-        dao = new MongoDBRyaDAO(configuration, mongoClient);
+        client = super.getMongoClient();
+        dao = new MongoDBRyaDAO(conf, client);
     }
 
-
     @Test
     public void testDeleteWildcard() throws RyaDAOException {
         final RyaStatementBuilder builder = new RyaStatementBuilder();
         builder.setPredicate(new RyaURI("http://temp.com";));
-        dao.delete(builder.build(), configuration);
+        dao.delete(builder.build(), conf);
     }
 
 
@@ -70,8 +60,8 @@ public class MongoDBRyaDAOTest extends MongoRyaTestBase {
         builder.setSubject(new RyaURI("http://subject.com";));
         builder.setObject(new RyaURI("http://object.com";));
 
-        final MongoDatabase db = 
mongoClient.getDatabase(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
-        final MongoCollection<Document> coll = 
db.getCollection(configuration.getTriplesCollectionName());
+        final MongoDatabase db = 
client.getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
+        final MongoCollection<Document> coll = 
db.getCollection(conf.getTriplesCollectionName());
 
         dao.add(builder.build());
 
@@ -87,14 +77,14 @@ public class MongoDBRyaDAOTest extends MongoRyaTestBase {
         builder.setObject(new RyaURI("http://object.com";));
         final RyaStatement statement = builder.build();
 
-        final MongoDatabase db = 
mongoClient.getDatabase(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
-        final MongoCollection<Document> coll = 
db.getCollection(configuration.getTriplesCollectionName());
+        final MongoDatabase db = 
client.getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
+        final MongoCollection<Document> coll = 
db.getCollection(conf.getTriplesCollectionName());
 
         dao.add(statement);
 
         assertEquals(coll.count(),1);
 
-        dao.delete(statement, configuration);
+        dao.delete(statement, conf);
 
         assertEquals(coll.count(),0);
 
@@ -109,8 +99,8 @@ public class MongoDBRyaDAOTest extends MongoRyaTestBase {
         builder.setContext(new RyaURI("http://context.com";));
         final RyaStatement statement = builder.build();
 
-        final MongoDatabase db = 
mongoClient.getDatabase(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
-        final MongoCollection<Document> coll = 
db.getCollection(configuration.getTriplesCollectionName());
+        final MongoDatabase db = 
client.getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
+        final MongoCollection<Document> coll = 
db.getCollection(conf.getTriplesCollectionName());
 
         dao.add(statement);
 
@@ -122,7 +112,7 @@ public class MongoDBRyaDAOTest extends MongoRyaTestBase {
         builder2.setContext(new RyaURI("http://context3.com";));
         final RyaStatement query = builder2.build();
 
-        dao.delete(query, configuration);
+        dao.delete(query, conf);
 
         assertEquals(coll.count(),1);
     }

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoTestBase.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoTestBase.java 
b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoTestBase.java
new file mode 100644
index 0000000..e4578f2
--- /dev/null
+++ b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoTestBase.java
@@ -0,0 +1,60 @@
+/**
+ * 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.rya.mongodb;
+
+import org.apache.hadoop.conf.Configuration;
+import org.junit.After;
+import org.junit.Before;
+
+import com.mongodb.MongoClient;
+
+/**
+ * A base class that may be used when implementing Mongo DB tests that use the
+ * JUnit framework.
+ */
+public class MongoTestBase {
+
+    private static MongoClient mongoClient = null;
+    protected static MongoDBRdfConfiguration conf;
+
+    @Before
+    public void setupTest() throws Exception {
+        conf = new MongoDBRdfConfiguration( new Configuration() );
+        conf.setBoolean("sc.useMongo", true);
+        conf.setTablePrefix("test_");
+        conf.setMongoDBName("testDB");
+        mongoClient = MockMongoSingleton.getInstance();
+        conf.setMongoClient(mongoClient);
+    }
+
+    @After
+    public void cleanupTest() {
+        // Remove any DBs that were created by the test.
+        for(final String dbName : mongoClient.listDatabaseNames()) {
+            mongoClient.dropDatabase(dbName);
+        }
+    }
+
+    /**
+     * @return A {@link MongoClient} that is connected to the embedded 
instance of Mongo DB.
+     */
+    public MongoClient getMongoClient() {
+        return mongoClient;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java
 
b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java
index 8d1694b..cb276cb 100644
--- 
a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java
+++ 
b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java
@@ -23,7 +23,6 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-import java.io.IOException;
 import java.util.Date;
 
 import org.apache.rya.api.instance.RyaDetails;
@@ -41,38 +40,22 @@ import 
org.apache.rya.api.instance.RyaDetailsRepository.AlreadyInitializedExcept
 import 
org.apache.rya.api.instance.RyaDetailsRepository.ConcurrentUpdateException;
 import 
org.apache.rya.api.instance.RyaDetailsRepository.NotInitializedException;
 import 
org.apache.rya.api.instance.RyaDetailsRepository.RyaDetailsRepositoryException;
-import org.junit.AfterClass;
+import org.apache.rya.mongodb.MongoTestBase;
 import org.junit.Before;
-import org.junit.BeforeClass;
 import org.junit.Test;
 
 import com.google.common.base.Optional;
 import com.mongodb.MongoClient;
-import com.mongodb.MongoException;
-
-import de.flapdoodle.embed.mongo.tests.MongodForTestsFactory;
 
 /**
  * Tests the methods of {@link AccumuloRyaDetailsRepository} by using a {@link 
MiniAccumuloCluster}.
  */
-public class MongoRyaDetailsRepositoryIT {
-
-    private static MongoClient client = null;
-
-    @BeforeClass
-    public static void startMiniAccumulo() throws MongoException, IOException {
-        final MongodForTestsFactory mongoFactory = new MongodForTestsFactory();
-        client = mongoFactory.newMongo();
-    }
+public class MongoRyaDetailsRepositoryIT extends MongoTestBase {
+    private MongoClient client;
 
     @Before
-    public void clearLastTest() {
-        client.dropDatabase("testInstance");
-    }
-
-    @AfterClass
-    public static void stopMiniAccumulo() throws IOException, 
InterruptedException {
-        client.close();
+    public void startMongo() {
+        client = super.getMongoClient();
     }
 
     @Test

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/main/java/org/apache/rya/indexing/mongodb/AbstractMongoIndexer.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/org/apache/rya/indexing/mongodb/AbstractMongoIndexer.java
 
b/extras/indexing/src/main/java/org/apache/rya/indexing/mongodb/AbstractMongoIndexer.java
index 69ca274..f8ab40f 100644
--- 
a/extras/indexing/src/main/java/org/apache/rya/indexing/mongodb/AbstractMongoIndexer.java
+++ 
b/extras/indexing/src/main/java/org/apache/rya/indexing/mongodb/AbstractMongoIndexer.java
@@ -121,7 +121,6 @@ public abstract class AbstractMongoIndexer<T extends 
IndexingMongoDBStorageStrat
 
     @Override
     public void close() throws IOException {
-        mongoClient.close();
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/main/java/org/apache/rya/indexing/mongodb/MongoDbSmartUri.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/main/java/org/apache/rya/indexing/mongodb/MongoDbSmartUri.java
 
b/extras/indexing/src/main/java/org/apache/rya/indexing/mongodb/MongoDbSmartUri.java
index b40c9b6..5d353b4 100644
--- 
a/extras/indexing/src/main/java/org/apache/rya/indexing/mongodb/MongoDbSmartUri.java
+++ 
b/extras/indexing/src/main/java/org/apache/rya/indexing/mongodb/MongoDbSmartUri.java
@@ -25,7 +25,6 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
 
-import org.apache.commons.io.IOUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.rya.api.domain.RyaURI;
 import org.apache.rya.indexing.entity.model.Entity;
@@ -159,13 +158,6 @@ public class MongoDbSmartUri implements SmartUriStorage {
     }
 
     /**
-     * Shutdown the MongoDB client.
-     */
-    public void shutdown() {
-        IOUtils.closeQuietly(mongoClient);
-    }
-
-    /**
      * @return the {@link EntityStorage}.
      */
     public EntityStorage getEntityStorage() {

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/test/java/org/apache/rya/indexing/entity/query/EntityQueryNodeTest.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/indexing/entity/query/EntityQueryNodeTest.java
 
b/extras/indexing/src/test/java/org/apache/rya/indexing/entity/query/EntityQueryNodeTest.java
index d2d9a54..874a40e 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/indexing/entity/query/EntityQueryNodeTest.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/indexing/entity/query/EntityQueryNodeTest.java
@@ -32,7 +32,7 @@ import org.apache.rya.indexing.entity.model.Property;
 import org.apache.rya.indexing.entity.model.Type;
 import org.apache.rya.indexing.entity.storage.EntityStorage;
 import org.apache.rya.indexing.entity.storage.mongo.MongoEntityStorage;
-import org.apache.rya.mongodb.MockMongoFactory;
+import org.apache.rya.mongodb.MongoTestBase;
 import org.junit.Test;
 import org.openrdf.model.ValueFactory;
 import org.openrdf.model.impl.ValueFactoryImpl;
@@ -46,14 +46,13 @@ import org.openrdf.query.impl.MapBindingSet;
 import org.openrdf.query.parser.sparql.SPARQLParser;
 
 import com.google.common.collect.ImmutableSet;
-import com.mongodb.MongoClient;
 
 import info.aduna.iteration.CloseableIteration;
 
 /**
  * Unit tests the methods of {@link EntityQueryNode}.
  */
-public class EntityQueryNodeTest {
+public class EntityQueryNodeTest extends MongoTestBase {
 
     private static final Type PERSON_TYPE =
             new Type(new RyaURI("urn:person"),
@@ -152,8 +151,7 @@ public class EntityQueryNodeTest {
 
     @Test
     public void evaluate_constantSubject() throws Exception {
-        final MongoClient client = 
MockMongoFactory.newFactory().newMongoClient();
-        final EntityStorage storage = new MongoEntityStorage(client, "testDB");
+        final EntityStorage storage = new 
MongoEntityStorage(super.getMongoClient(), "testDB");
         final ValueFactory vf = ValueFactoryImpl.getInstance();
         final RyaURI subject = new RyaURI("urn:SSN:111-11-1111");
         final Entity entity = Entity.builder()
@@ -188,8 +186,7 @@ public class EntityQueryNodeTest {
 
     @Test
     public void evaluate_variableSubject() throws Exception {
-        final MongoClient client = 
MockMongoFactory.newFactory().newMongoClient();
-        final EntityStorage storage = new MongoEntityStorage(client, "testDB");
+        final EntityStorage storage = new 
MongoEntityStorage(super.getMongoClient(), "testDB");
         final ValueFactory vf = ValueFactoryImpl.getInstance();
         RyaURI subject = new RyaURI("urn:SSN:111-11-1111");
         final Entity bob = Entity.builder()
@@ -242,8 +239,7 @@ public class EntityQueryNodeTest {
 
     @Test
     public void evaluate_constantObject() throws Exception {
-        final MongoClient client = 
MockMongoFactory.newFactory().newMongoClient();
-        final EntityStorage storage = new MongoEntityStorage(client, "testDB");
+        final EntityStorage storage = new 
MongoEntityStorage(super.getMongoClient(), "testDB");
         final ValueFactory vf = ValueFactoryImpl.getInstance();
         final RyaURI subject = new RyaURI("urn:SSN:111-11-1111");
         final Entity entity = Entity.builder()

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoEntityStorageIT.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoEntityStorageIT.java
 
b/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoEntityStorageIT.java
index 5d26bc0..d8856fe 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoEntityStorageIT.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoEntityStorageIT.java
@@ -36,6 +36,7 @@ import org.apache.rya.indexing.entity.storage.EntityStorage;
 import 
org.apache.rya.indexing.entity.storage.EntityStorage.EntityAlreadyExistsException;
 import 
org.apache.rya.indexing.entity.storage.EntityStorage.EntityStorageException;
 import 
org.apache.rya.indexing.entity.storage.EntityStorage.StaleUpdateException;
+import org.apache.rya.mongodb.MongoTestBase;
 import org.junit.Test;
 import org.openrdf.model.vocabulary.XMLSchema;
 
@@ -45,7 +46,7 @@ import com.google.common.collect.Sets;
 /**
  * Integration tests the methods of {@link MongoEntityStorage}.
  */
-public class MongoEntityStorageIT extends MongoITBase {
+public class MongoEntityStorageIT extends MongoTestBase {
 
     private static final String RYA_INSTANCE_NAME = "testInstance";
 

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoITBase.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoITBase.java
 
b/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoITBase.java
deleted file mode 100644
index 692d1aa..0000000
--- 
a/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoITBase.java
+++ /dev/null
@@ -1,80 +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.rya.indexing.entity.storage.mongo;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import org.apache.hadoop.conf.Configuration;
-import org.apache.rya.mongodb.MockMongoFactory;
-import org.apache.rya.mongodb.MongoConnectorFactory;
-import org.apache.rya.mongodb.MongoDBRdfConfiguration;
-import org.junit.After;
-import org.junit.AfterClass;
-import org.junit.Before;
-
-import com.mongodb.MongoClient;
-
-/**
- * A base class that may be used when implementing Mongo DB integration tests 
that
- * use the JUnit framework.
- */
-public class MongoITBase {
-
-    private MongoClient mongoClient = null;
-    private Set<String> originalDbNames = null;
-    protected MongoDBRdfConfiguration conf;
-
-    @Before
-    public void setupTest() throws Exception {
-        conf = new MongoDBRdfConfiguration( new Configuration() );
-        conf.setMongoDBName("testDB");
-        mongoClient = MockMongoFactory.newFactory().newMongoClient();
-        conf.setMongoClient(mongoClient);
-
-
-        // Store the names of the DBs that are present before running the test.
-        originalDbNames = new HashSet<>();
-        for(final String name : mongoClient.listDatabaseNames()) {
-            originalDbNames.add(name);
-        }
-    }
-
-    @After
-    public void cleanupTest() {
-        // Remove any DBs that were created by the test.
-        for(final String dbName : mongoClient.listDatabaseNames()) {
-            if(!originalDbNames.contains(dbName)) {
-                mongoClient.dropDatabase(dbName);
-            }
-        }
-    }
-
-    @AfterClass
-    public static void shutdown() {
-        MongoConnectorFactory.closeMongoClient();
-    }
-
-    /**
-     * @return A {@link MongoClient} that is connected to the embedded 
instance of Mongo DB.
-     */
-    public MongoClient getMongoClient() {
-        return mongoClient;
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoTypeStorageIT.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoTypeStorageIT.java
 
b/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoTypeStorageIT.java
index 56c10c0..cff4f26 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoTypeStorageIT.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoTypeStorageIT.java
@@ -30,6 +30,7 @@ import org.apache.rya.api.domain.RyaURI;
 import org.apache.rya.indexing.entity.model.Type;
 import org.apache.rya.indexing.entity.storage.TypeStorage;
 import org.apache.rya.indexing.entity.storage.TypeStorage.TypeStorageException;
+import org.apache.rya.mongodb.MongoTestBase;
 import org.junit.Test;
 
 import com.google.common.collect.ImmutableSet;
@@ -38,7 +39,7 @@ import com.google.common.collect.Sets;
 /**
  * Integration tests the methods of {@link MongoTypeStorage}.
  */
-public class MongoTypeStorageIT extends MongoITBase {
+public class MongoTypeStorageIT extends MongoTestBase {
 
     private static final String RYA_INSTANCE_NAME = "testInstance";
 

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/test/java/org/apache/rya/indexing/entity/update/mongo/MongoEntityIndexerIT.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/indexing/entity/update/mongo/MongoEntityIndexerIT.java
 
b/extras/indexing/src/test/java/org/apache/rya/indexing/entity/update/mongo/MongoEntityIndexerIT.java
index a33ddd4..875d54e 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/indexing/entity/update/mongo/MongoEntityIndexerIT.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/indexing/entity/update/mongo/MongoEntityIndexerIT.java
@@ -31,8 +31,8 @@ import org.apache.rya.indexing.entity.model.Type;
 import org.apache.rya.indexing.entity.storage.EntityStorage;
 import org.apache.rya.indexing.entity.storage.TypeStorage;
 import org.apache.rya.indexing.entity.storage.mongo.MongoEntityStorage;
-import org.apache.rya.indexing.entity.storage.mongo.MongoITBase;
 import org.apache.rya.indexing.entity.storage.mongo.MongoTypeStorage;
+import org.apache.rya.mongodb.MongoTestBase;
 import org.junit.Before;
 import org.junit.Test;
 import org.openrdf.model.vocabulary.RDF;
@@ -44,7 +44,7 @@ import com.google.common.collect.Sets;
 /**
  * Integration tests the methods of {@link MongoEntityIndexer}.
  */
-public class MongoEntityIndexerIT extends MongoITBase {
+public class MongoEntityIndexerIT extends MongoTestBase {
 
     private static final String RYA_INSTANCE_NAME = "testDB";
 

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/test/java/org/apache/rya/indexing/external/PrecompJoinOptimizerTest2.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/indexing/external/PrecompJoinOptimizerTest2.java
 
b/extras/indexing/src/test/java/org/apache/rya/indexing/external/PrecompJoinOptimizerTest2.java
index ba26a4b..35e4ca3 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/indexing/external/PrecompJoinOptimizerTest2.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/indexing/external/PrecompJoinOptimizerTest2.java
@@ -686,7 +686,8 @@ public class PrecompJoinOptimizerTest2 {
                                        .getTupleExpr()));
                }
 
-               Assert.assertTrue(qSet.containsAll(set) && eTupSet.size() == 1);
+               Assert.assertTrue(qSet.containsAll(set));
+               Assert.assertEquals(3, eTupSet.size());
        }
 
        @Test

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoDbSmartUriIT.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoDbSmartUriIT.java
 
b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoDbSmartUriIT.java
new file mode 100644
index 0000000..4dc0e8e
--- /dev/null
+++ 
b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoDbSmartUriIT.java
@@ -0,0 +1,309 @@
+/*
+ * 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.rya.indexing.mongo;
+
+import static org.apache.rya.api.domain.RyaTypeUtils.booleanRyaType;
+import static org.apache.rya.api.domain.RyaTypeUtils.byteRyaType;
+import static org.apache.rya.api.domain.RyaTypeUtils.dateRyaType;
+import static org.apache.rya.api.domain.RyaTypeUtils.doubleRyaType;
+import static org.apache.rya.api.domain.RyaTypeUtils.floatRyaType;
+import static org.apache.rya.api.domain.RyaTypeUtils.intRyaType;
+import static org.apache.rya.api.domain.RyaTypeUtils.longRyaType;
+import static org.apache.rya.api.domain.RyaTypeUtils.shortRyaType;
+import static org.apache.rya.api.domain.RyaTypeUtils.stringRyaType;
+import static org.apache.rya.api.domain.RyaTypeUtils.uriRyaType;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.net.URISyntaxException;
+import java.util.Date;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.rya.api.domain.RyaSchema;
+import org.apache.rya.api.domain.RyaURI;
+import org.apache.rya.api.resolver.RdfToRyaConversions;
+import org.apache.rya.api.resolver.RyaToRdfConversions;
+import org.apache.rya.indexing.entity.model.Entity;
+import org.apache.rya.indexing.entity.model.Property;
+import org.apache.rya.indexing.entity.model.Type;
+import org.apache.rya.indexing.entity.model.TypedEntity;
+import org.apache.rya.indexing.entity.query.EntityQueryNode;
+import org.apache.rya.indexing.entity.storage.mongo.ConvertingCursor;
+import org.apache.rya.indexing.mongodb.MongoDbSmartUri;
+import org.apache.rya.indexing.smarturi.SmartUriAdapter;
+import org.apache.rya.indexing.smarturi.SmartUriException;
+import org.apache.rya.mongodb.MongoTestBase;
+import org.joda.time.DateTime;
+import org.junit.Before;
+import org.junit.Test;
+import org.openrdf.model.URI;
+import org.openrdf.model.Value;
+import org.openrdf.model.ValueFactory;
+import org.openrdf.model.impl.URIImpl;
+import org.openrdf.model.impl.ValueFactoryImpl;
+import org.openrdf.model.vocabulary.RDF;
+import org.openrdf.query.BindingSet;
+import org.openrdf.query.MalformedQueryException;
+import org.openrdf.query.QueryEvaluationException;
+import org.openrdf.query.algebra.StatementPattern;
+import org.openrdf.query.algebra.evaluation.QueryBindingSet;
+import org.openrdf.query.algebra.helpers.StatementPatternCollector;
+import org.openrdf.query.parser.sparql.SPARQLParser;
+
+import com.beust.jcommander.internal.Lists;
+import com.google.common.collect.ImmutableSet;
+
+import info.aduna.iteration.CloseableIteration;
+
+/**
+ * Tests for MongoDB based Smart URI.
+ */
+public class MongoDbSmartUriIT extends MongoTestBase {
+    private static final String NAMESPACE = RyaSchema.NAMESPACE;
+    private static final ValueFactory VALUE_FACTORY = 
ValueFactoryImpl.getInstance();
+
+    // People
+    private static final RyaURI BOB = createRyaUri("Bob");
+
+    // Attributes
+    private static final RyaURI HAS_WEIGHT = createRyaUri("hasWeight");
+    private static final RyaURI HAS_HEIGHT = createRyaUri("hasHeight");
+    private static final RyaURI HAS_SSN = createRyaUri("hasSSN");
+    private static final RyaURI HAS_AGE = createRyaUri("hasAge");
+    private static final RyaURI HAS_INCOME = createRyaUri("hasIncome");
+    private static final RyaURI HAS_NUMBER_OF_CHILDREN = 
createRyaUri("hasNumberOfChildren");
+    private static final RyaURI HAS_LICENSE_NUMBER = 
createRyaUri("hasLicenseNumber");
+    private static final RyaURI HAS_EYE_COLOR = createRyaUri("hasEyeColor");
+    private static final RyaURI HAS_HAIR_COLOR = createRyaUri("hasHairColor");
+    private static final RyaURI HAS_DATE_OF_BIRTH = 
createRyaUri("hasDateOfBirth");
+    private static final RyaURI HAS_EXPIRATION_DATE = 
createRyaUri("hasExpirationDate");
+    private static final RyaURI HAS_GLASSES = createRyaUri("hasGlasses");
+    private static final RyaURI HAS_EMAIL_ADDRESS = 
createRyaUri("hasEmailAddress");
+    private static final RyaURI HAS_ATTRIBUTE_SPACE = createRyaUri("has 
Attribute Space");
+    private static final RyaURI HAS_MOTTO = createRyaUri("hasMotto");
+    private static final RyaURI HAS_BLOOD_TYPE = createRyaUri("hasBloodType");
+    private static final RyaURI HAS_SEX = createRyaUri("hasSex");
+    private static final RyaURI HAS_ADDRESS = createRyaUri("hasAddress");
+    private static final RyaURI HAS_POSITION_TITLE = 
createRyaUri("hasPositionTitle");
+    private static final RyaURI HAS_WORK_ADDRESS = 
createRyaUri("hasWorkAddress");
+    private static final RyaURI HAS_EXTENSION = createRyaUri("hasExtension");
+    private static final RyaURI HAS_OFFICE_ROOM_NUMBER = 
createRyaUri("hasOfficeRoomNumber");
+
+    // Type URIs
+    private static final RyaURI PERSON_TYPE_URI = new 
RyaURI("urn:example/person");
+    private static final RyaURI EMPLOYEE_TYPE_URI = new 
RyaURI("urn:example/employee");
+
+    // Entities
+    private static final Entity BOB_ENTITY = createBobEntity();
+
+    // Types
+    private static final Type PERSON_TYPE = createPersonType();
+    private static final Type EMPLOYEE_TYPE = createEmployeeType();
+
+    private static MongoDbSmartUri smartUriConverter;
+
+    @Before
+    public void setup() throws Exception {
+        smartUriConverter = new MongoDbSmartUri(conf);
+    }
+
+    /**
+     * Creates a {@link RyaURI} for the specified local name.
+     * @param localName the URI's local name.
+     * @return the {@link RyraURI}.
+     */
+    private static RyaURI createRyaUri(final String localName) {
+        return createRyaUri(NAMESPACE, localName);
+    }
+
+    /**
+     * Creates a {@link RyaURI} for the specified local name.
+     * @param namespace the namespace.
+     * @param localName the URI's local name.
+     * @return the {@link RyraURI}.
+     */
+    private static RyaURI createRyaUri(final String namespace, final String 
localName) {
+        return 
RdfToRyaConversions.convertURI(VALUE_FACTORY.createURI(namespace, localName));
+    }
+
+    private static Entity createBobEntity() {
+        final Entity bobEntity = Entity.builder()
+            .setSubject(BOB)
+            .setExplicitType(PERSON_TYPE_URI)
+            .setExplicitType(EMPLOYEE_TYPE_URI)
+            .setProperty(PERSON_TYPE_URI, new Property(HAS_WEIGHT, 
floatRyaType(250.75f)))
+            .setProperty(PERSON_TYPE_URI, new Property(HAS_HEIGHT, 
doubleRyaType(72.5)))
+            .setProperty(PERSON_TYPE_URI, new Property(HAS_SSN, 
stringRyaType("123-45-6789")))
+            .setProperty(PERSON_TYPE_URI, new Property(HAS_AGE, 
shortRyaType((short) 40)))
+            .setProperty(PERSON_TYPE_URI, new Property(HAS_INCOME, 
intRyaType(50000)))
+            .setProperty(PERSON_TYPE_URI, new Property(HAS_NUMBER_OF_CHILDREN, 
byteRyaType((byte) 2)))
+            .setProperty(PERSON_TYPE_URI, new Property(HAS_LICENSE_NUMBER, 
longRyaType(123456789012L)))
+            .setProperty(PERSON_TYPE_URI, new Property(HAS_EYE_COLOR, 
stringRyaType("blue")))
+            .setProperty(PERSON_TYPE_URI, new Property(HAS_HAIR_COLOR, 
stringRyaType("brown")))
+            .setProperty(PERSON_TYPE_URI, new Property(HAS_DATE_OF_BIRTH, 
dateRyaType(new DateTime().minusYears(40))))
+            .setProperty(PERSON_TYPE_URI, new Property(HAS_EXPIRATION_DATE, 
dateRyaType(new Date())))
+            .setProperty(PERSON_TYPE_URI, new Property(HAS_GLASSES, 
booleanRyaType(true)))
+            .setProperty(PERSON_TYPE_URI, new Property(HAS_EMAIL_ADDRESS, 
uriRyaType(new URIImpl("mailto:bob.smitc...@gmail.com";))))
+            .setProperty(PERSON_TYPE_URI, new Property(HAS_ATTRIBUTE_SPACE, 
stringRyaType("attribute space")))
+            .setProperty(PERSON_TYPE_URI, new Property(HAS_MOTTO, 
stringRyaType("!@#*\\&%20^ smörgåsbord")))
+            .setProperty(PERSON_TYPE_URI, new Property(HAS_BLOOD_TYPE, 
stringRyaType("A+ blood type")))
+            .setProperty(PERSON_TYPE_URI, new Property(HAS_SEX, 
stringRyaType("M")))
+            .setProperty(PERSON_TYPE_URI, new Property(HAS_ADDRESS, 
stringRyaType("123 Fake St. Washington, DC 20024")))
+            .setProperty(EMPLOYEE_TYPE_URI, new Property(HAS_POSITION_TITLE, 
stringRyaType("Assistant to the Regional Manager")))
+            .setProperty(EMPLOYEE_TYPE_URI, new Property(HAS_WORK_ADDRESS, 
stringRyaType("987 Fake Office Rd. Washington, DC 20024")))
+            .setProperty(EMPLOYEE_TYPE_URI, new Property(HAS_EXTENSION, 
shortRyaType((short) 555)))
+            .setProperty(EMPLOYEE_TYPE_URI, new 
Property(HAS_OFFICE_ROOM_NUMBER, shortRyaType((short) 9999)))
+            .build();
+
+        return bobEntity;
+    }
+
+    private static Type createPersonType() {
+         final Type personType = new Type(PERSON_TYPE_URI,
+            ImmutableSet.<RyaURI>builder()
+                .add(HAS_WEIGHT)
+                .add(HAS_HEIGHT)
+                .add(HAS_SSN)
+                .add(HAS_AGE)
+                .add(HAS_INCOME)
+                .add(HAS_NUMBER_OF_CHILDREN)
+                .add(HAS_LICENSE_NUMBER)
+                .add(HAS_EYE_COLOR)
+                .add(HAS_HAIR_COLOR)
+                .add(HAS_DATE_OF_BIRTH)
+                .add(HAS_EXPIRATION_DATE)
+                .add(HAS_GLASSES)
+                .add(HAS_EMAIL_ADDRESS)
+                .add(HAS_ATTRIBUTE_SPACE)
+                .add(HAS_MOTTO)
+                .add(HAS_BLOOD_TYPE)
+                .add(HAS_SEX)
+                .add(HAS_ADDRESS)
+                .build());
+         return personType;
+    }
+
+    private static Type createEmployeeType() {
+        final Type employeeType = new Type(EMPLOYEE_TYPE_URI,
+            ImmutableSet.<RyaURI>builder()
+                .add(HAS_POSITION_TITLE)
+                .add(HAS_WORK_ADDRESS)
+                .add(HAS_EXTENSION)
+                .add(HAS_OFFICE_ROOM_NUMBER)
+                .build());
+        return employeeType;
+    }
+
+    private static String getRyaUriLocalName(final RyaURI ryaUri) {
+        return new URIImpl(ryaUri.getData()).getLocalName();
+    }
+
+    @Test
+    public void testSerializeDeserialize() throws SmartUriException, 
URISyntaxException {
+        final URI smartUri = SmartUriAdapter.serializeUriEntity(BOB_ENTITY);
+        final Entity resultEntity = 
SmartUriAdapter.deserializeUriEntity(smartUri);
+        assertEquals(BOB_ENTITY.getSubject(), resultEntity.getSubject());
+    }
+
+    @Test
+    public void testStorage() throws SmartUriException, 
MalformedQueryException, RuntimeException, QueryEvaluationException {
+        smartUriConverter.storeEntity(BOB_ENTITY);
+
+        final String sparql = "SELECT * WHERE { " +
+            "<" + BOB.getData() + "> <" + RDF.TYPE + "> <" + 
PERSON_TYPE.getId().getData() + "> . " +
+            "<" + BOB.getData() + "> <" + HAS_SSN.getData() + "> ?ssn . " +
+            "<" + BOB.getData() + "> <" + HAS_AGE.getData() + "> ?age . " +
+            "<" + BOB.getData() + "> <" + HAS_WEIGHT.getData() + "> ?weight . 
" +
+            "<" + BOB.getData() + "> <" + HAS_ADDRESS.getData() + "> ?address 
. " +
+        "}";
+
+        final StatementPatternCollector spCollector = new 
StatementPatternCollector();
+        new SPARQLParser().parseQuery(sparql, 
null).getTupleExpr().visit(spCollector);
+        final List<StatementPattern> patterns = 
spCollector.getStatementPatterns();
+        final EntityQueryNode entityQueryNode = new 
EntityQueryNode(PERSON_TYPE, patterns, smartUriConverter.getEntityStorage());
+        final QueryBindingSet queryBindingSet = new QueryBindingSet();
+        final Property ssnProperty = 
BOB_ENTITY.lookupTypeProperty(PERSON_TYPE, HAS_SSN).get();
+        queryBindingSet.addBinding(HAS_SSN.getData(), 
RyaToRdfConversions.convertValue(ssnProperty.getValue()));
+
+        final CloseableIteration<BindingSet, QueryEvaluationException> iter = 
entityQueryNode.evaluate(queryBindingSet);
+        int count = 0;
+        // These should match what was used in the SPARQL query.
+        final List<String> queryParamNames = Lists.newArrayList("ssn", "age", 
"weight", "address");
+        while (iter.hasNext()) {
+            final BindingSet bs = iter.next();
+            assertTrue(bs.getBindingNames().containsAll(queryParamNames));
+            count++;
+        }
+        assertEquals(count, 1);
+    }
+
+    @Test
+    public void testUpdate() throws SmartUriException {
+        smartUriConverter.storeEntity(BOB_ENTITY);
+
+        // New properties to add
+        final RyaURI hasNickName = createRyaUri("hasNickName");
+        final RyaURI hasWindowOffice = createRyaUri("hasWindowOffice");
+
+        final Entity.Builder builder = Entity.builder(BOB_ENTITY);
+        builder.setProperty(PERSON_TYPE_URI, new Property(HAS_AGE, 
shortRyaType((short) 41)));
+        builder.setProperty(PERSON_TYPE_URI, new Property(hasNickName, 
stringRyaType("Bobby")));
+        builder.setProperty(EMPLOYEE_TYPE_URI, new 
Property(HAS_POSITION_TITLE, stringRyaType("Assistant Regional Manager")));
+        builder.setProperty(EMPLOYEE_TYPE_URI, new Property(hasWindowOffice, 
booleanRyaType(true)));
+        builder.setVersion(BOB_ENTITY.getVersion() + 1);
+        builder.rebuildSmartUri();
+
+        final Entity newBobEntity = builder.build();
+
+        smartUriConverter.updateEntity(BOB_ENTITY, newBobEntity);
+
+        final Entity resultEntity = 
smartUriConverter.queryEntity(BOB_ENTITY.getSubject());
+        assertEquals(newBobEntity.getVersion(), resultEntity.getVersion());
+        assertEquals(newBobEntity.lookupTypeProperty(PERSON_TYPE, HAS_AGE), 
resultEntity.lookupTypeProperty(PERSON_TYPE, HAS_AGE));
+        assertEquals(newBobEntity.lookupTypeProperty(PERSON_TYPE, 
hasNickName), resultEntity.lookupTypeProperty(PERSON_TYPE, hasNickName));
+        assertEquals(newBobEntity.lookupTypeProperty(EMPLOYEE_TYPE, 
HAS_POSITION_TITLE), resultEntity.lookupTypeProperty(EMPLOYEE_TYPE, 
HAS_POSITION_TITLE));
+        assertEquals(newBobEntity.lookupTypeProperty(EMPLOYEE_TYPE, 
hasWindowOffice), resultEntity.lookupTypeProperty(EMPLOYEE_TYPE, 
hasWindowOffice));
+        assertEquals(newBobEntity.getSmartUri(), resultEntity.getSmartUri());
+        final String resultUriString = 
resultEntity.getSmartUri().stringValue();
+        
assertTrue(resultUriString.contains(getRyaUriLocalName(hasWindowOffice)));
+        assertTrue(resultUriString.contains(getRyaUriLocalName(hasNickName)));
+    }
+
+    @Test
+    public void testQuery() throws SmartUriException {
+        smartUriConverter.storeEntity(BOB_ENTITY);
+
+        // Look up Person Type Entities that match Bob's SSN property
+        final Set<Property> properties = new LinkedHashSet<>();
+        properties.add(BOB_ENTITY.lookupTypeProperty(PERSON_TYPE, 
HAS_SSN).get());
+        final Map<URI, Value> map = 
SmartUriAdapter.propertiesToMap(properties);
+
+        final ConvertingCursor<TypedEntity> cursor = 
smartUriConverter.queryEntity(PERSON_TYPE, map);
+        int count = 0;
+        while (cursor.hasNext()) {
+            final TypedEntity typedEntity = cursor.next();
+            System.out.println(typedEntity);
+            count++;
+        }
+        assertEquals(count, 1);
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoDbSmartUriTest.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoDbSmartUriTest.java
 
b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoDbSmartUriTest.java
deleted file mode 100644
index dff271f..0000000
--- 
a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoDbSmartUriTest.java
+++ /dev/null
@@ -1,332 +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.rya.indexing.mongo;
-
-import static org.apache.rya.api.domain.RyaTypeUtils.booleanRyaType;
-import static org.apache.rya.api.domain.RyaTypeUtils.byteRyaType;
-import static org.apache.rya.api.domain.RyaTypeUtils.dateRyaType;
-import static org.apache.rya.api.domain.RyaTypeUtils.doubleRyaType;
-import static org.apache.rya.api.domain.RyaTypeUtils.floatRyaType;
-import static org.apache.rya.api.domain.RyaTypeUtils.intRyaType;
-import static org.apache.rya.api.domain.RyaTypeUtils.longRyaType;
-import static org.apache.rya.api.domain.RyaTypeUtils.shortRyaType;
-import static org.apache.rya.api.domain.RyaTypeUtils.stringRyaType;
-import static org.apache.rya.api.domain.RyaTypeUtils.uriRyaType;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.net.URISyntaxException;
-import java.util.Date;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.rya.api.domain.RyaSchema;
-import org.apache.rya.api.domain.RyaURI;
-import org.apache.rya.api.resolver.RdfToRyaConversions;
-import org.apache.rya.api.resolver.RyaToRdfConversions;
-import org.apache.rya.indexing.accumulo.ConfigUtils;
-import org.apache.rya.indexing.entity.model.Entity;
-import org.apache.rya.indexing.entity.model.Property;
-import org.apache.rya.indexing.entity.model.Type;
-import org.apache.rya.indexing.entity.model.TypedEntity;
-import org.apache.rya.indexing.entity.query.EntityQueryNode;
-import org.apache.rya.indexing.entity.storage.mongo.ConvertingCursor;
-import org.apache.rya.indexing.mongodb.MongoDbSmartUri;
-import org.apache.rya.indexing.smarturi.SmartUriAdapter;
-import org.apache.rya.indexing.smarturi.SmartUriException;
-import org.apache.rya.mongodb.MockMongoFactory;
-import org.apache.rya.mongodb.MongoDBRdfConfiguration;
-import org.joda.time.DateTime;
-import org.junit.Before;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.openrdf.model.URI;
-import org.openrdf.model.Value;
-import org.openrdf.model.ValueFactory;
-import org.openrdf.model.impl.URIImpl;
-import org.openrdf.model.impl.ValueFactoryImpl;
-import org.openrdf.model.vocabulary.RDF;
-import org.openrdf.query.BindingSet;
-import org.openrdf.query.MalformedQueryException;
-import org.openrdf.query.QueryEvaluationException;
-import org.openrdf.query.algebra.StatementPattern;
-import org.openrdf.query.algebra.evaluation.QueryBindingSet;
-import org.openrdf.query.algebra.helpers.StatementPatternCollector;
-import org.openrdf.query.parser.sparql.SPARQLParser;
-
-import com.beust.jcommander.internal.Lists;
-import com.google.common.collect.ImmutableSet;
-import com.mongodb.MongoClient;
-
-import info.aduna.iteration.CloseableIteration;
-
-/**
- * Tests for MongoDB based Smart URI.
- */
-public class MongoDbSmartUriTest {
-    private static final String NAMESPACE = RyaSchema.NAMESPACE;
-    private static final ValueFactory VALUE_FACTORY = 
ValueFactoryImpl.getInstance();
-
-    // People
-    private static final RyaURI BOB = createRyaUri("Bob");
-
-    // Attributes
-    private static final RyaURI HAS_WEIGHT = createRyaUri("hasWeight");
-    private static final RyaURI HAS_HEIGHT = createRyaUri("hasHeight");
-    private static final RyaURI HAS_SSN = createRyaUri("hasSSN");
-    private static final RyaURI HAS_AGE = createRyaUri("hasAge");
-    private static final RyaURI HAS_INCOME = createRyaUri("hasIncome");
-    private static final RyaURI HAS_NUMBER_OF_CHILDREN = 
createRyaUri("hasNumberOfChildren");
-    private static final RyaURI HAS_LICENSE_NUMBER = 
createRyaUri("hasLicenseNumber");
-    private static final RyaURI HAS_EYE_COLOR = createRyaUri("hasEyeColor");
-    private static final RyaURI HAS_HAIR_COLOR = createRyaUri("hasHairColor");
-    private static final RyaURI HAS_DATE_OF_BIRTH = 
createRyaUri("hasDateOfBirth");
-    private static final RyaURI HAS_EXPIRATION_DATE = 
createRyaUri("hasExpirationDate");
-    private static final RyaURI HAS_GLASSES = createRyaUri("hasGlasses");
-    private static final RyaURI HAS_EMAIL_ADDRESS = 
createRyaUri("hasEmailAddress");
-    private static final RyaURI HAS_ATTRIBUTE_SPACE = createRyaUri("has 
Attribute Space");
-    private static final RyaURI HAS_MOTTO = createRyaUri("hasMotto");
-    private static final RyaURI HAS_BLOOD_TYPE = createRyaUri("hasBloodType");
-    private static final RyaURI HAS_SEX = createRyaUri("hasSex");
-    private static final RyaURI HAS_ADDRESS = createRyaUri("hasAddress");
-    private static final RyaURI HAS_POSITION_TITLE = 
createRyaUri("hasPositionTitle");
-    private static final RyaURI HAS_WORK_ADDRESS = 
createRyaUri("hasWorkAddress");
-    private static final RyaURI HAS_EXTENSION = createRyaUri("hasExtension");
-    private static final RyaURI HAS_OFFICE_ROOM_NUMBER = 
createRyaUri("hasOfficeRoomNumber");
-
-    // Type URIs
-    private static final RyaURI PERSON_TYPE_URI = new 
RyaURI("urn:example/person");
-    private static final RyaURI EMPLOYEE_TYPE_URI = new 
RyaURI("urn:example/employee");
-
-    // Entities
-    private static final Entity BOB_ENTITY = createBobEntity();
-
-    // Types
-    private static final Type PERSON_TYPE = createPersonType();
-    private static final Type EMPLOYEE_TYPE = createEmployeeType();
-
-    private static MongoDBRdfConfiguration conf;
-    private static MongoDbSmartUri smartUriConverter;
-
-    @BeforeClass
-    public static void setupClass() throws Exception {
-        conf = new MongoDBRdfConfiguration();
-        conf.set(ConfigUtils.USE_MONGO, "true");
-        conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, "test");
-        conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya_");
-        conf.setTablePrefix("another_");
-    }
-
-    @Before
-    public void setupTest() throws Exception {
-        final MongoClient client = 
MockMongoFactory.newFactory().newMongoClient();
-        conf.setMongoClient(client);
-
-        if (smartUriConverter != null) {
-            smartUriConverter.shutdown();
-        }
-        smartUriConverter = new MongoDbSmartUri(conf);
-    }
-
-    /**
-     * Creates a {@link RyaURI} for the specified local name.
-     * @param localName the URI's local name.
-     * @return the {@link RyraURI}.
-     */
-    private static RyaURI createRyaUri(final String localName) {
-        return createRyaUri(NAMESPACE, localName);
-        //return new RyaURI("http://"; + localName);
-    }
-
-    /**
-     * Creates a {@link RyaURI} for the specified local name.
-     * @param namespace the namespace.
-     * @param localName the URI's local name.
-     * @return the {@link RyraURI}.
-     */
-    private static RyaURI createRyaUri(final String namespace, final String 
localName) {
-        return 
RdfToRyaConversions.convertURI(VALUE_FACTORY.createURI(namespace, localName));
-    }
-
-    private static Entity createBobEntity() {
-        final Entity bobEntity = Entity.builder()
-            .setSubject(BOB)
-            .setExplicitType(PERSON_TYPE_URI)
-            .setExplicitType(EMPLOYEE_TYPE_URI)
-            .setProperty(PERSON_TYPE_URI, new Property(HAS_WEIGHT, 
floatRyaType(250.75f)))
-            .setProperty(PERSON_TYPE_URI, new Property(HAS_HEIGHT, 
doubleRyaType(72.5)))
-            .setProperty(PERSON_TYPE_URI, new Property(HAS_SSN, 
stringRyaType("123-45-6789")))
-            .setProperty(PERSON_TYPE_URI, new Property(HAS_AGE, 
shortRyaType((short) 40)))
-            .setProperty(PERSON_TYPE_URI, new Property(HAS_INCOME, 
intRyaType(50000)))
-            .setProperty(PERSON_TYPE_URI, new Property(HAS_NUMBER_OF_CHILDREN, 
byteRyaType((byte) 2)))
-            .setProperty(PERSON_TYPE_URI, new Property(HAS_LICENSE_NUMBER, 
longRyaType(123456789012L)))
-            .setProperty(PERSON_TYPE_URI, new Property(HAS_EYE_COLOR, 
stringRyaType("blue")))
-            .setProperty(PERSON_TYPE_URI, new Property(HAS_HAIR_COLOR, 
stringRyaType("brown")))
-            .setProperty(PERSON_TYPE_URI, new Property(HAS_DATE_OF_BIRTH, 
dateRyaType(new DateTime().minusYears(40))))
-            .setProperty(PERSON_TYPE_URI, new Property(HAS_EXPIRATION_DATE, 
dateRyaType(new Date())))
-            .setProperty(PERSON_TYPE_URI, new Property(HAS_GLASSES, 
booleanRyaType(true)))
-            .setProperty(PERSON_TYPE_URI, new Property(HAS_EMAIL_ADDRESS, 
uriRyaType(new URIImpl("mailto:bob.smitc...@gmail.com";))))
-            .setProperty(PERSON_TYPE_URI, new Property(HAS_ATTRIBUTE_SPACE, 
stringRyaType("attribute space")))
-            .setProperty(PERSON_TYPE_URI, new Property(HAS_MOTTO, 
stringRyaType("!@#*\\&%20^ smörgåsbord")))
-            .setProperty(PERSON_TYPE_URI, new Property(HAS_BLOOD_TYPE, 
stringRyaType("A+ blood type")))
-            .setProperty(PERSON_TYPE_URI, new Property(HAS_SEX, 
stringRyaType("M")))
-            .setProperty(PERSON_TYPE_URI, new Property(HAS_ADDRESS, 
stringRyaType("123 Fake St. Washington, DC 20024")))
-            .setProperty(EMPLOYEE_TYPE_URI, new Property(HAS_POSITION_TITLE, 
stringRyaType("Assistant to the Regional Manager")))
-            .setProperty(EMPLOYEE_TYPE_URI, new Property(HAS_WORK_ADDRESS, 
stringRyaType("987 Fake Office Rd. Washington, DC 20024")))
-            .setProperty(EMPLOYEE_TYPE_URI, new Property(HAS_EXTENSION, 
shortRyaType((short) 555)))
-            .setProperty(EMPLOYEE_TYPE_URI, new 
Property(HAS_OFFICE_ROOM_NUMBER, shortRyaType((short) 9999)))
-            .build();
-
-        return bobEntity;
-    }
-
-    private static Type createPersonType() {
-         final Type personType = new Type(PERSON_TYPE_URI,
-            ImmutableSet.<RyaURI>builder()
-                .add(HAS_WEIGHT)
-                .add(HAS_HEIGHT)
-                .add(HAS_SSN)
-                .add(HAS_AGE)
-                .add(HAS_INCOME)
-                .add(HAS_NUMBER_OF_CHILDREN)
-                .add(HAS_LICENSE_NUMBER)
-                .add(HAS_EYE_COLOR)
-                .add(HAS_HAIR_COLOR)
-                .add(HAS_DATE_OF_BIRTH)
-                .add(HAS_EXPIRATION_DATE)
-                .add(HAS_GLASSES)
-                .add(HAS_EMAIL_ADDRESS)
-                .add(HAS_ATTRIBUTE_SPACE)
-                .add(HAS_MOTTO)
-                .add(HAS_BLOOD_TYPE)
-                .add(HAS_SEX)
-                .add(HAS_ADDRESS)
-                .build());
-         return personType;
-    }
-
-    private static Type createEmployeeType() {
-        final Type employeeType = new Type(EMPLOYEE_TYPE_URI,
-            ImmutableSet.<RyaURI>builder()
-                .add(HAS_POSITION_TITLE)
-                .add(HAS_WORK_ADDRESS)
-                .add(HAS_EXTENSION)
-                .add(HAS_OFFICE_ROOM_NUMBER)
-                .build());
-        return employeeType;
-    }
-
-    private static String getRyaUriLocalName(final RyaURI ryaUri) {
-        return new URIImpl(ryaUri.getData()).getLocalName();
-    }
-
-    @Test
-    public void testSerializeDeserialize() throws SmartUriException, 
URISyntaxException {
-        final URI smartUri = SmartUriAdapter.serializeUriEntity(BOB_ENTITY);
-        System.out.println(smartUri);
-        final Entity resultEntity = 
SmartUriAdapter.deserializeUriEntity(smartUri);
-        System.out.println(resultEntity);
-        assertEquals(BOB_ENTITY.getSubject(), resultEntity.getSubject());
-    }
-
-    @Test
-    public void testStorage() throws SmartUriException, 
MalformedQueryException, RuntimeException, QueryEvaluationException {
-        smartUriConverter.storeEntity(BOB_ENTITY);
-
-        final String sparql = "SELECT * WHERE { " +
-            "<" + BOB.getData() + "> <" + RDF.TYPE + "> <" + 
PERSON_TYPE.getId().getData() + "> . " +
-            "<" + BOB.getData() + "> <" + HAS_SSN.getData() + "> ?ssn . " +
-            "<" + BOB.getData() + "> <" + HAS_AGE.getData() + "> ?age . " +
-            "<" + BOB.getData() + "> <" + HAS_WEIGHT.getData() + "> ?weight . 
" +
-            "<" + BOB.getData() + "> <" + HAS_ADDRESS.getData() + "> ?address 
. " +
-        "}";
-
-        final StatementPatternCollector spCollector = new 
StatementPatternCollector();
-        new SPARQLParser().parseQuery(sparql, 
null).getTupleExpr().visit(spCollector);
-        final List<StatementPattern> patterns = 
spCollector.getStatementPatterns();
-        final EntityQueryNode entityQueryNode = new 
EntityQueryNode(PERSON_TYPE, patterns, smartUriConverter.getEntityStorage());
-        final QueryBindingSet queryBindingSet = new QueryBindingSet();
-        final Property ssnProperty = 
BOB_ENTITY.lookupTypeProperty(PERSON_TYPE, HAS_SSN).get();
-        queryBindingSet.addBinding(HAS_SSN.getData(), 
RyaToRdfConversions.convertValue(ssnProperty.getValue()));
-
-        final CloseableIteration<BindingSet, QueryEvaluationException> iter = 
entityQueryNode.evaluate(queryBindingSet);
-        int count = 0;
-        // These should match what was used in the SPARQL query.
-        final List<String> queryParamNames = Lists.newArrayList("ssn", "age", 
"weight", "address");
-        while (iter.hasNext()) {
-            final BindingSet bs = iter.next();
-            assertTrue(bs.getBindingNames().containsAll(queryParamNames));
-            count++;
-        }
-        assertEquals(count, 1);
-    }
-
-    @Test
-    public void testUpdate() throws SmartUriException {
-        smartUriConverter.storeEntity(BOB_ENTITY);
-
-        // New properties to add
-        final RyaURI hasNickName = createRyaUri("hasNickName");
-        final RyaURI hasWindowOffice = createRyaUri("hasWindowOffice");
-
-        final Entity.Builder builder = Entity.builder(BOB_ENTITY);
-        builder.setProperty(PERSON_TYPE_URI, new Property(HAS_AGE, 
shortRyaType((short) 41)));
-        builder.setProperty(PERSON_TYPE_URI, new Property(hasNickName, 
stringRyaType("Bobby")));
-        builder.setProperty(EMPLOYEE_TYPE_URI, new 
Property(HAS_POSITION_TITLE, stringRyaType("Assistant Regional Manager")));
-        builder.setProperty(EMPLOYEE_TYPE_URI, new Property(hasWindowOffice, 
booleanRyaType(true)));
-        builder.setVersion(BOB_ENTITY.getVersion() + 1);
-        builder.rebuildSmartUri();
-
-        final Entity newBobEntity = builder.build();
-
-        smartUriConverter.updateEntity(BOB_ENTITY, newBobEntity);
-
-        final Entity resultEntity = 
smartUriConverter.queryEntity(BOB_ENTITY.getSubject());
-        assertEquals(newBobEntity.getVersion(), resultEntity.getVersion());
-        assertEquals(newBobEntity.lookupTypeProperty(PERSON_TYPE, HAS_AGE), 
resultEntity.lookupTypeProperty(PERSON_TYPE, HAS_AGE));
-        assertEquals(newBobEntity.lookupTypeProperty(PERSON_TYPE, 
hasNickName), resultEntity.lookupTypeProperty(PERSON_TYPE, hasNickName));
-        assertEquals(newBobEntity.lookupTypeProperty(EMPLOYEE_TYPE, 
HAS_POSITION_TITLE), resultEntity.lookupTypeProperty(EMPLOYEE_TYPE, 
HAS_POSITION_TITLE));
-        assertEquals(newBobEntity.lookupTypeProperty(EMPLOYEE_TYPE, 
hasWindowOffice), resultEntity.lookupTypeProperty(EMPLOYEE_TYPE, 
hasWindowOffice));
-        assertEquals(newBobEntity.getSmartUri(), resultEntity.getSmartUri());
-        final String resultUriString = 
resultEntity.getSmartUri().stringValue();
-        
assertTrue(resultUriString.contains(getRyaUriLocalName(hasWindowOffice)));
-        assertTrue(resultUriString.contains(getRyaUriLocalName(hasNickName)));
-    }
-
-    @Test
-    public void testQuery() throws SmartUriException {
-        smartUriConverter.storeEntity(BOB_ENTITY);
-
-        // Look up Person Type Entities that match Bob's SSN property
-        final Set<Property> properties = new LinkedHashSet<>();
-        properties.add(BOB_ENTITY.lookupTypeProperty(PERSON_TYPE, 
HAS_SSN).get());
-        final Map<URI, Value> map = 
SmartUriAdapter.propertiesToMap(properties);
-
-        final ConvertingCursor<TypedEntity> cursor = 
smartUriConverter.queryEntity(PERSON_TYPE, map);
-        int count = 0;
-        while (cursor.hasNext()) {
-            final TypedEntity typedEntity = cursor.next();
-            System.out.println(typedEntity);
-            count++;
-        }
-        assertEquals(count, 1);
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexIT.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexIT.java
 
b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexIT.java
index 6fac386..019760d 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexIT.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexIT.java
@@ -25,7 +25,6 @@ import java.util.HashSet;
 import java.util.Optional;
 import java.util.Set;
 
-import org.apache.rya.api.RdfCloudTripleStoreConfiguration;
 import org.apache.rya.api.domain.RyaURI;
 import org.apache.rya.indexing.accumulo.ConfigUtils;
 import org.apache.rya.indexing.entity.model.Entity;
@@ -33,11 +32,8 @@ import org.apache.rya.indexing.entity.model.Type;
 import org.apache.rya.indexing.entity.storage.EntityStorage;
 import org.apache.rya.indexing.entity.storage.TypeStorage;
 import org.apache.rya.indexing.entity.update.mongo.MongoEntityIndexer;
-import org.apache.rya.mongodb.MockMongoFactory;
-import org.apache.rya.mongodb.MongoConnectorFactory;
-import org.apache.rya.mongodb.MongoDBRdfConfiguration;
+import org.apache.rya.mongodb.MongoTestBase;
 import org.apache.rya.sail.config.RyaSailFactory;
-import org.bson.Document;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -55,31 +51,16 @@ import org.openrdf.repository.sail.SailRepositoryConnection;
 import org.openrdf.sail.Sail;
 
 import com.google.common.collect.ImmutableSet;
-import com.mongodb.Block;
-import com.mongodb.MongoClient;
-import com.mongodb.client.MongoDatabase;
 
-import de.flapdoodle.embed.mongo.distribution.Version;
-
-public class MongoEntityIndexIT {
+public class MongoEntityIndexIT extends MongoTestBase {
     private static final ValueFactory VF = ValueFactoryImpl.getInstance();
-    private MongoDBRdfConfiguration conf;
     private SailRepositoryConnection conn;
     private MongoEntityIndexer indexer;
-    private MongoClient mongoClient;
 
     @Before
     public void setUp() throws Exception {
-        mongoClient = 
MockMongoFactory.with(Version.Main.PRODUCTION).newMongoClient();
-        conf = new MongoDBRdfConfiguration();
-        conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, "test");
-        conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya");
-        conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, "rya");
         conf.setBoolean(ConfigUtils.USE_MONGO, true);
-        conf.setMongoClient(mongoClient);
         conf.setBoolean(ConfigUtils.USE_ENTITY, true);
-        final int port = mongoClient.getServerAddressList().get(0).getPort();
-        conf.set(MongoDBRdfConfiguration.MONGO_INSTANCE_PORT, 
Integer.toString(port));
 
         final Sail sail = RyaSailFactory.getInstance(conf);
         conn = new SailRepository(sail).getConnection();
@@ -92,9 +73,6 @@ public class MongoEntityIndexIT {
 
     @After
     public void tearDown() throws Exception {
-        if (mongoClient != null) {
-            MongoConnectorFactory.closeMongoClient();
-        }
         if (conn != null) {
             conn.clear();
         }
@@ -108,12 +86,6 @@ public class MongoEntityIndexIT {
         setupTypes();
         addStatements();
 
-        final MongoDatabase db = mongoClient.getDatabase("test");
-        db.listCollections().forEach((Block<Document>)doc -> {
-            System.out.println(doc);
-        });
-
-
         final EntityStorage entities = indexer.getEntityStorage(conf);
         final RyaURI subject = new RyaURI("urn:alice");
         final Optional<Entity> alice = entities.get(subject);
@@ -136,7 +108,6 @@ public class MongoEntityIndexIT {
         final Set<BindingSet> results = new HashSet<>();
         while(rez.hasNext()) {
             final BindingSet bs = rez.next();
-            System.out.println(bs);
             results.add(bs);
         }
         final MapBindingSet expected = new MapBindingSet();

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexTest.java
----------------------------------------------------------------------
diff --git 
a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexTest.java
 
b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexTest.java
index f4aeaa1..850640f 100644
--- 
a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexTest.java
+++ 
b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexTest.java
@@ -22,7 +22,6 @@ import java.util.List;
 
 import org.apache.rya.api.domain.RyaType;
 import org.apache.rya.api.domain.RyaURI;
-import org.apache.rya.indexing.accumulo.ConfigUtils;
 import org.apache.rya.indexing.entity.EntityIndexOptimizer;
 import org.apache.rya.indexing.entity.model.Entity;
 import org.apache.rya.indexing.entity.model.Property;
@@ -30,8 +29,7 @@ import org.apache.rya.indexing.entity.model.Type;
 import org.apache.rya.indexing.entity.query.EntityQueryNode;
 import org.apache.rya.indexing.entity.storage.EntityStorage;
 import org.apache.rya.indexing.entity.storage.TypeStorage;
-import org.apache.rya.mongodb.MockMongoFactory;
-import org.apache.rya.mongodb.MongoDBRdfConfiguration;
+import org.apache.rya.mongodb.MongoTestBase;
 import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -45,9 +43,8 @@ import 
org.openrdf.query.algebra.helpers.StatementPatternCollector;
 import org.openrdf.query.parser.sparql.SPARQLParser;
 
 import com.google.common.collect.ImmutableSet;
-import com.mongodb.MongoClient;
 
-public class MongoEntityIndexTest {
+public class MongoEntityIndexTest extends MongoTestBase {
     private static final Type PERSON_TYPE =
             new Type(new RyaURI("urn:person"),
                 ImmutableSet.<RyaURI>builder()
@@ -57,21 +54,11 @@ public class MongoEntityIndexTest {
                     .build());
     private static final RyaURI RYA_PERSON_TYPE = new RyaURI("urn:person");
 
-    static MongoDBRdfConfiguration conf;
     private static EntityIndexOptimizer optimizer;
     private static EntityStorage entityStorage;
 
     @BeforeClass
     public static void beforeClass() throws Exception {
-        conf = new MongoDBRdfConfiguration();
-        conf.set(ConfigUtils.USE_MONGO, "true");
-        conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, "test");
-        conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya_");
-        conf.setTablePrefix("another_");
-
-        final MongoClient client = 
MockMongoFactory.newFactory().newMongoClient();
-        conf.setMongoClient(client);
-
         optimizer = new EntityIndexOptimizer();
         optimizer.setConf(conf);
 

Reply via email to