http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/instance/MongoRyaInstanceDetailsRepository.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/instance/MongoRyaInstanceDetailsRepository.java
 
b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/instance/MongoRyaInstanceDetailsRepository.java
new file mode 100644
index 0000000..dfefa8f
--- /dev/null
+++ 
b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/instance/MongoRyaInstanceDetailsRepository.java
@@ -0,0 +1,144 @@
+package mvm.rya.mongodb.instance;
+
+/*
+ * 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.
+ */
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static java.util.Objects.requireNonNull;
+
+import javax.annotation.ParametersAreNonnullByDefault;
+
+import com.mongodb.BasicDBObject;
+import com.mongodb.DB;
+import com.mongodb.DBCollection;
+import com.mongodb.DBObject;
+import com.mongodb.MongoClient;
+import com.mongodb.WriteResult;
+
+import mvm.rya.api.instance.RyaDetails;
+import mvm.rya.api.instance.RyaDetailsRepository;
+import 
mvm.rya.mongodb.instance.MongoDetailsAdapter.MalformedRyaDetailsException;
+
+/**
+ * An implementation of {@link RyaDetailsRepository} that stores a Rya
+ * instance's {@link RyaDetails} in a Mongo document.
+ */
+@ParametersAreNonnullByDefault
+public class MongoRyaInstanceDetailsRepository implements RyaDetailsRepository 
{
+    private static final String INSTANCE_DETAILS_COLLECTION_NAME = 
"instance_details";
+
+    private final DB db;
+    private final String instanceName;
+
+    /**
+     * Constructs an instance of {@link MongoRyaInstanceDetailsRepository}.
+     *
+     * @param client - Connects to the instance of Mongo that hosts the Rya 
instance. (not null)
+     * @param instanceName - The name of the Rya instance this repository 
represents. (not null)
+     */
+    public MongoRyaInstanceDetailsRepository(final MongoClient client, final 
String instanceName) {
+        checkNotNull(client);
+        this.instanceName = requireNonNull( instanceName );
+        db = client.getDB(this.instanceName);
+    }
+
+    @Override
+    public boolean isInitialized() throws RyaDetailsRepositoryException {
+        final DBCollection col = 
db.getCollection(INSTANCE_DETAILS_COLLECTION_NAME);
+        return col.count() == 1;
+    }
+
+    @Override
+    public void initialize(final RyaDetails details) throws 
AlreadyInitializedException, RyaDetailsRepositoryException {
+        // Preconditions.
+        requireNonNull( details );
+
+        if(!details.getRyaInstanceName().equals( instanceName )) {
+            throw new RyaDetailsRepositoryException("The instance name that 
was in the provided 'details' does not match " +
+                    "the instance name that this repository is connected to. 
Make sure you're connected to the" +
+                    "correct Rya instance.");
+        }
+
+        if(isInitialized()) {
+            throw new AlreadyInitializedException("The repository has already 
been initialized for the Rya instance named '" +
+                    instanceName + "'.");
+        }
+
+        // Create the document that hosts the details if it has not been 
created yet.
+        final DBCollection col = 
db.createCollection(INSTANCE_DETAILS_COLLECTION_NAME, new BasicDBObject());
+
+        // Write the details to the collection.
+        col.insert(MongoDetailsAdapter.toDBObject(details));
+    }
+
+    @Override
+    public RyaDetails getRyaInstanceDetails() throws NotInitializedException, 
RyaDetailsRepositoryException {
+        // Preconditions.
+        if(!isInitialized()) {
+            throw new NotInitializedException("Could not fetch the details for 
the Rya instanced named '" +
+                    instanceName + "' because it has not been initialized 
yet.");
+        }
+
+        // Fetch the value from the collection.
+        final DBCollection col = 
db.getCollection(INSTANCE_DETAILS_COLLECTION_NAME);
+        //There should only be one document in the collection.
+        final DBObject mongoObj = col.findOne();
+
+        try{
+            // Deserialize it.
+            return MongoDetailsAdapter.toRyaDetails( mongoObj );
+        } catch (final MalformedRyaDetailsException e) {
+            throw new RyaDetailsRepositoryException("The existing details 
details are malformed.", e);
+        }
+    }
+
+    @Override
+    public void update(final RyaDetails oldDetails, final RyaDetails 
newDetails)
+            throws NotInitializedException, ConcurrentUpdateException, 
RyaDetailsRepositoryException {
+        // Preconditions.
+        requireNonNull(oldDetails);
+        requireNonNull(newDetails);
+
+        if(!newDetails.getRyaInstanceName().equals( instanceName )) {
+            throw new RyaDetailsRepositoryException("The instance name that 
was in the provided 'newDetails' does not match " +
+                    "the instance name that this repository is connected to. 
Make sure you're connected to the" +
+                    "correct Rya instance.");
+        }
+
+        if(!isInitialized()) {
+            throw new NotInitializedException("Could not update the details 
for the Rya instanced named '" +
+                    instanceName + "' because it has not been initialized 
yet.");
+        }
+
+        if(oldDetails.equals(newDetails)) {
+            return;
+        }
+
+        final DBCollection col = 
db.getCollection(INSTANCE_DETAILS_COLLECTION_NAME);
+        final DBObject oldObj = MongoDetailsAdapter.toDBObject(oldDetails);
+        final DBObject newObj = MongoDetailsAdapter.toDBObject(newDetails);
+        final WriteResult result = col.update(oldObj, newObj);
+
+        //since there is only 1 document, there should only be 1 update.
+        if(result.getN() != 1) {
+            throw new ConcurrentUpdateException("Could not update the details 
for the Rya instance named '" +
+                instanceName + "' because the old value is out of date.");
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/NonCloseableRyaStatementCursorIterator.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/NonCloseableRyaStatementCursorIterator.java
 
b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/NonCloseableRyaStatementCursorIterator.java
new file mode 100644
index 0000000..ba37ca1
--- /dev/null
+++ 
b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/NonCloseableRyaStatementCursorIterator.java
@@ -0,0 +1,57 @@
+package mvm.rya.mongodb.iter;
+
+/*
+ * 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.
+ */
+
+
+import java.util.Iterator;
+
+import mvm.rya.api.domain.RyaStatement;
+import mvm.rya.api.persist.RyaDAOException;
+
+public class NonCloseableRyaStatementCursorIterator implements 
Iterator<RyaStatement> {
+
+       RyaStatementCursorIterator iterator;
+       
+       @Override
+       public boolean hasNext() {
+               return iterator.hasNext();
+       }
+
+       @Override
+       public RyaStatement next() {
+               return iterator.next();
+       }
+
+       public NonCloseableRyaStatementCursorIterator(
+                       RyaStatementCursorIterator iterator) {
+               this.iterator = iterator;
+       }
+
+       @Override
+       public void remove() {
+               try {
+                       iterator.remove();
+               } catch (RyaDAOException e) {
+                       // TODO Auto-generated catch block
+                       e.printStackTrace();
+               }
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementBindingSetCursorIterator.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementBindingSetCursorIterator.java
 
b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementBindingSetCursorIterator.java
new file mode 100644
index 0000000..d24cbdc
--- /dev/null
+++ 
b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementBindingSetCursorIterator.java
@@ -0,0 +1,125 @@
+package mvm.rya.mongodb.iter;
+
+/*
+ * 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.
+ */
+
+
+import info.aduna.iteration.CloseableIteration;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map.Entry;
+
+import mvm.rya.api.RdfCloudTripleStoreUtils;
+import mvm.rya.api.domain.RyaStatement;
+import mvm.rya.api.persist.RyaDAOException;
+import mvm.rya.mongodb.dao.MongoDBStorageStrategy;
+
+import org.openrdf.query.BindingSet;
+
+import com.google.common.collect.Multimap;
+import com.mongodb.DBCollection;
+import com.mongodb.DBCursor;
+import com.mongodb.DBObject;
+
+public class RyaStatementBindingSetCursorIterator implements 
CloseableIteration<Entry<RyaStatement, BindingSet>, RyaDAOException> {
+
+       private DBCollection coll;
+       private Multimap<DBObject, BindingSet> rangeMap;
+       private Iterator<DBObject> queryIterator;
+       private Long maxResults;
+       private DBCursor resultCursor;
+       private RyaStatement currentStatement;
+       private Collection<BindingSet> currentBindingSetCollection;
+       private Iterator<BindingSet> currentBindingSetIterator;
+       private MongoDBStorageStrategy strategy;
+
+       public RyaStatementBindingSetCursorIterator(DBCollection coll,
+                       Multimap<DBObject, BindingSet> rangeMap, 
MongoDBStorageStrategy strategy) {
+               this.coll = coll;
+               this.rangeMap = rangeMap;
+               this.queryIterator = rangeMap.keySet().iterator();
+               this.strategy = strategy;
+       }
+
+       @Override
+       public boolean hasNext() {
+               if (!currentBindingSetIteratorIsValid()) {
+                       findNextResult();
+               }
+               return currentBindingSetIteratorIsValid();
+       }
+
+       @Override
+       public Entry<RyaStatement, BindingSet> next() {
+               if (!currentBindingSetIteratorIsValid()) {
+                       findNextResult();
+               }
+               if (currentBindingSetIteratorIsValid()) {
+                       BindingSet currentBindingSet = 
currentBindingSetIterator.next();
+                       return new 
RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, 
BindingSet>(currentStatement, currentBindingSet);
+               }
+               return null;
+       }
+       
+       private boolean currentBindingSetIteratorIsValid() {
+               return (currentBindingSetIterator != null) && 
currentBindingSetIterator.hasNext();
+       }
+
+       private void findNextResult() {
+               if (!currentResultCursorIsValid()) {
+                       findNextValidResultCursor();
+               }
+               if (currentResultCursorIsValid()) {
+                       // convert to Rya Statement
+                       DBObject queryResult = resultCursor.next();
+                       currentStatement = 
strategy.deserializeDBObject(queryResult);
+                       currentBindingSetIterator = 
currentBindingSetCollection.iterator();
+               }
+       }
+
+       private void findNextValidResultCursor() {
+               while (queryIterator.hasNext()){
+                       DBObject currentQuery = queryIterator.next();
+                       resultCursor = coll.find(currentQuery);
+                       currentBindingSetCollection = 
rangeMap.get(currentQuery);
+                       if (resultCursor.hasNext()) return;
+               }
+       }
+       
+       private boolean currentResultCursorIsValid() {
+               return (resultCursor != null) && resultCursor.hasNext();
+       }
+
+
+       public void setMaxResults(Long maxResults) {
+               this.maxResults = maxResults;
+       }
+
+       @Override
+       public void close() throws RyaDAOException {
+               // TODO don't know what to do here
+       }
+
+       @Override
+       public void remove() throws RyaDAOException {
+               next();
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementCursorIterable.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementCursorIterable.java
 
b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementCursorIterable.java
new file mode 100644
index 0000000..83bd2d4
--- /dev/null
+++ 
b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementCursorIterable.java
@@ -0,0 +1,67 @@
+package mvm.rya.mongodb.iter;
+
+/*
+ * 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.
+ */
+
+
+import info.aduna.iteration.CloseableIteration;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import mvm.rya.api.RdfCloudTripleStoreUtils;
+import mvm.rya.api.domain.RyaStatement;
+import mvm.rya.api.persist.RyaDAOException;
+
+import org.calrissian.mango.collect.CloseableIterable;
+import org.calrissian.mango.collect.CloseableIterator;
+import org.openrdf.query.BindingSet;
+
+import com.mongodb.DBCollection;
+import com.mongodb.DBCursor;
+import com.mongodb.DBObject;
+
+public class RyaStatementCursorIterable implements 
CloseableIterable<RyaStatement> {
+
+
+       private NonCloseableRyaStatementCursorIterator iterator;
+
+       public 
RyaStatementCursorIterable(NonCloseableRyaStatementCursorIterator iterator) {
+               this.iterator = iterator;
+       }
+
+       @Override
+       public Iterator<RyaStatement> iterator() {
+               // TODO Auto-generated method stub
+               return iterator;
+       }
+
+       @Override
+       public void closeQuietly() {
+               //TODO  don't know what to do here
+       }
+
+       @Override
+       public void close() throws IOException {
+               // TODO Auto-generated method stub
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementCursorIterator.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementCursorIterator.java
 
b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementCursorIterator.java
new file mode 100644
index 0000000..8df2c60
--- /dev/null
+++ 
b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementCursorIterator.java
@@ -0,0 +1,104 @@
+package mvm.rya.mongodb.iter;
+
+/*
+ * 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.
+ */
+
+
+import info.aduna.iteration.CloseableIteration;
+
+import java.util.Iterator;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import mvm.rya.api.RdfCloudTripleStoreUtils;
+import mvm.rya.api.domain.RyaStatement;
+import mvm.rya.api.persist.RyaDAOException;
+import mvm.rya.mongodb.dao.MongoDBStorageStrategy;
+
+import org.calrissian.mango.collect.CloseableIterable;
+import org.openrdf.query.BindingSet;
+
+import com.mongodb.DBCollection;
+import com.mongodb.DBCursor;
+import com.mongodb.DBObject;
+
+public class RyaStatementCursorIterator implements 
CloseableIteration<RyaStatement, RyaDAOException> {
+
+       private DBCollection coll;
+       private Iterator<DBObject> queryIterator;
+       private DBCursor currentCursor;
+       private MongoDBStorageStrategy strategy;
+       private Long maxResults;
+
+       public RyaStatementCursorIterator(DBCollection coll, Set<DBObject> 
queries, MongoDBStorageStrategy strategy) {
+               this.coll = coll;
+               this.queryIterator = queries.iterator();
+               this.strategy = strategy;
+       }
+
+       @Override
+       public boolean hasNext() {
+               if (!currentCursorIsValid()) {
+                       findNextValidCursor();
+               }
+               return currentCursorIsValid();
+       }
+
+       @Override
+       public RyaStatement next() {
+               if (!currentCursorIsValid()) {
+                       findNextValidCursor();
+               }
+               if (currentCursorIsValid()) {
+                       // convert to Rya Statement
+                       DBObject queryResult = currentCursor.next();
+                       RyaStatement statement = 
strategy.deserializeDBObject(queryResult);
+                       return statement;
+               }
+               return null;
+       }
+       
+       private void findNextValidCursor() {
+               while (queryIterator.hasNext()){
+                       DBObject currentQuery = queryIterator.next();
+                       currentCursor = coll.find(currentQuery);
+                       if (currentCursor.hasNext()) break;
+               }
+       }
+       
+       private boolean currentCursorIsValid() {
+               return (currentCursor != null) && currentCursor.hasNext();
+       }
+
+
+       public void setMaxResults(Long maxResults) {
+               this.maxResults = maxResults;
+       }
+
+       @Override
+       public void close() throws RyaDAOException {
+               // TODO don't know what to do here
+       }
+
+       @Override
+       public void remove() throws RyaDAOException {
+               next();
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBQueryEngineTest.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBQueryEngineTest.java 
b/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBQueryEngineTest.java
deleted file mode 100644
index 870115c..0000000
--- a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBQueryEngineTest.java
+++ /dev/null
@@ -1,124 +0,0 @@
-package mvm.rya.mongodb;
-
-/*
- * 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.
- */
-
-import java.util.Collection;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import info.aduna.iteration.CloseableIteration;
-import mvm.rya.api.RdfCloudTripleStoreConfiguration;
-import mvm.rya.api.RdfCloudTripleStoreUtils;
-import mvm.rya.api.domain.RyaStatement;
-import mvm.rya.api.domain.RyaStatement.RyaStatementBuilder;
-import mvm.rya.api.domain.RyaURI;
-
-import org.apache.hadoop.conf.Configuration;
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.openrdf.model.impl.URIImpl;
-import org.openrdf.query.BindingSet;
-import org.openrdf.query.impl.MapBindingSet;
-
-import com.google.common.collect.Lists;
-import com.mongodb.MongoClient;
-
-import de.flapdoodle.embed.mongo.distribution.Version;
-import de.flapdoodle.embed.mongo.tests.MongodForTestsFactory;
-
-public class MongoDBQueryEngineTest {
-
-    // private dao;
-    // private configuration;
-
-    private MongoDBQueryEngine engine;
-    private MongoDBRdfConfiguration configuration;
-
-    @Before
-    public void setUp() throws Exception {
-        // Set up Mongo/Rya
-        MongodForTestsFactory testsFactory = 
MongodForTestsFactory.with(Version.Main.PRODUCTION);
-        Configuration conf = new Configuration();
-        conf.set(MongoDBRdfConfiguration.USE_TEST_MONGO, "true");
-        conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, "test");
-        conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya_");
-        conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, "rya_");
-        configuration = new MongoDBRdfConfiguration(conf);
-        MongoClient mongoClient = testsFactory.newMongo();
-        int port = mongoClient.getServerAddressList().get(0).getPort();
-        configuration.set(MongoDBRdfConfiguration.MONGO_INSTANCE_PORT, 
Integer.toString(port));
-
-        engine = new MongoDBQueryEngine(configuration, mongoClient);
-
-        // Add Data
-        MongoDBRyaDAO dao = new MongoDBRyaDAO(configuration, mongoClient);
-        dao.add(getStatement("u:a", "u:tt", "u:b"));
-        dao.add(getStatement("u:a", "u:tt", "u:c"));
-    }
-
-    private RyaStatement getStatement(String s, String p, String o) {
-        RyaStatementBuilder builder = new RyaStatementBuilder();
-        if (s != null)
-            builder.setSubject(new RyaURI(s));
-        if (p != null)
-            builder.setPredicate(new RyaURI(p));
-        if (o != null)
-            builder.setObject(new RyaURI(o));
-        return builder.build();
-    }
-
-    public int size(CloseableIteration<?, ?> iter) throws Exception {
-        int i = 0;
-        while (iter.hasNext()) {
-            i++;
-            iter.next();
-        }
-        return i;
-    }
-
-    @Test
-    public void statementQuery() throws Exception {
-        RyaStatement s = getStatement("u:a", null, null);
-        Assert.assertEquals(2, size(engine.query(s, configuration)));
-    }
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void bindingSetsQuery() throws Exception {
-        RyaStatement s = getStatement("u:a", null, null);
-        
-        MapBindingSet bs1 = new MapBindingSet();
-        bs1.addBinding("foo", new URIImpl("u:x"));
-
-        Map.Entry<RyaStatement, BindingSet> e1 = new 
RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s, bs1);
-        Collection<Entry<RyaStatement, BindingSet>> stmts1 = 
Lists.newArrayList(e1);
-        Assert.assertEquals(2, size(engine.queryWithBindingSet(stmts1, 
configuration)));
-
-        
-        MapBindingSet bs2 = new MapBindingSet();
-        bs2.addBinding("foo", new URIImpl("u:y"));
-
-        Map.Entry<RyaStatement, BindingSet> e2 = new 
RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s, bs2);
-
-        Collection<Entry<RyaStatement, BindingSet>> stmts2 = 
Lists.newArrayList(e1, e2);
-        Assert.assertEquals(4, size(engine.queryWithBindingSet(stmts2, 
configuration)));
-}
-}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBRyaDAOIT.java
----------------------------------------------------------------------
diff --git a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBRyaDAOIT.java 
b/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBRyaDAOIT.java
deleted file mode 100644
index 33531b5..0000000
--- a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBRyaDAOIT.java
+++ /dev/null
@@ -1,139 +0,0 @@
-package mvm.rya.mongodb;
-/*
- * 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.
- */
-
-import static mvm.rya.mongodb.dao.SimpleMongoDBStorageStrategy.TIMESTAMP;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-
-import java.io.IOException;
-
-import org.apache.hadoop.conf.Configuration;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.mongodb.DB;
-import com.mongodb.DBCollection;
-import com.mongodb.DBObject;
-import com.mongodb.MongoClient;
-import com.mongodb.MongoException;
-
-import de.flapdoodle.embed.mongo.distribution.Version;
-import de.flapdoodle.embed.mongo.tests.MongodForTestsFactory;
-import mvm.rya.api.RdfCloudTripleStoreConfiguration;
-import mvm.rya.api.domain.RyaStatement;
-import mvm.rya.api.domain.RyaStatement.RyaStatementBuilder;
-import mvm.rya.api.domain.RyaURI;
-import mvm.rya.api.persist.RyaDAOException;
-
-public class MongoDBRyaDAOIT {
-
-    private MongodForTestsFactory testsFactory;
-    private MongoDBRyaDAO dao;
-    private MongoDBRdfConfiguration configuration;
-    private MongoClient mongoClient;
-
-    @Before
-    public void setUp() throws IOException, RyaDAOException{
-        testsFactory = MongodForTestsFactory.with(Version.Main.PRODUCTION);
-           final Configuration conf = new Configuration();
-            conf.set(MongoDBRdfConfiguration.USE_TEST_MONGO, "true");
-            conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, "test");
-            conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya_");
-            conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, "rya_");
-            configuration = new MongoDBRdfConfiguration(conf);
-            mongoClient = testsFactory.newMongo();
-            final int port = 
mongoClient.getServerAddressList().get(0).getPort();
-            configuration.set(MongoDBRdfConfiguration.MONGO_INSTANCE_PORT, 
Integer.toString(port));
-            dao = new MongoDBRyaDAO(configuration, mongoClient);
-    }
-
-    @Test
-    public void testDeleteWildcard() throws RyaDAOException {
-        final RyaStatementBuilder builder = new RyaStatementBuilder();
-        builder.setPredicate(new RyaURI("http://temp.com";));
-        dao.delete(builder.build(), configuration);
-    }
-
-
-    @Test
-    public void testAdd() throws RyaDAOException, MongoException, IOException {
-        final RyaStatementBuilder builder = new RyaStatementBuilder();
-        builder.setPredicate(new RyaURI("http://temp.com";));
-        builder.setSubject(new RyaURI("http://subject.com";));
-        builder.setObject(new RyaURI("http://object.com";));
-
-        final DB db = 
mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
-        final DBCollection coll = 
db.getCollection(configuration.getTriplesCollectionName());
-
-        dao.add(builder.build());
-
-        assertEquals(coll.count(),1);
-
-        final DBObject dbo = coll.findOne();
-        assertTrue(dbo.containsField(TIMESTAMP));
-    }
-
-    @Test
-    public void testDelete() throws RyaDAOException, MongoException, 
IOException {
-        final RyaStatementBuilder builder = new RyaStatementBuilder();
-        builder.setPredicate(new RyaURI("http://temp.com";));
-        builder.setSubject(new RyaURI("http://subject.com";));
-        builder.setObject(new RyaURI("http://object.com";));
-        final RyaStatement statement = builder.build();
-        final DB db = 
mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
-        final DBCollection coll = 
db.getCollection(configuration.getTriplesCollectionName());
-
-        dao.add(statement);
-
-        assertEquals(coll.count(),1);
-
-        dao.delete(statement, configuration);
-
-        assertEquals(coll.count(),0);
-
-    }
-
-    @Test
-    public void testDeleteWildcardSubjectWithContext() throws RyaDAOException, 
MongoException, IOException {
-        final RyaStatementBuilder builder = new RyaStatementBuilder();
-        builder.setPredicate(new RyaURI("http://temp.com";));
-        builder.setSubject(new RyaURI("http://subject.com";));
-        builder.setObject(new RyaURI("http://object.com";));
-        builder.setContext(new RyaURI("http://context.com";));
-        final RyaStatement statement = builder.build();
-
-        final DB db = 
mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
-        final DBCollection coll = 
db.getCollection(configuration.getTriplesCollectionName());
-
-        dao.add(statement);
-
-        assertEquals(coll.count(),1);
-
-        final RyaStatementBuilder builder2 = new RyaStatementBuilder();
-        builder2.setPredicate(new RyaURI("http://temp.com";));
-        builder2.setObject(new RyaURI("http://object.com";));
-        builder2.setContext(new RyaURI("http://context3.com";));
-        final RyaStatement query = builder2.build();
-
-        dao.delete(query, configuration);
-
-        assertEquals(coll.count(),1);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBRyaDAOTest.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBRyaDAOTest.java 
b/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBRyaDAOTest.java
deleted file mode 100644
index dde0eda..0000000
--- a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBRyaDAOTest.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package mvm.rya.mongodb;
-/*
- * 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.
- */
-
-import static org.junit.Assert.assertEquals;
-
-import java.io.IOException;
-
-import org.apache.hadoop.conf.Configuration;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.mongodb.DB;
-import com.mongodb.DBCollection;
-import com.mongodb.MongoClient;
-import com.mongodb.MongoException;
-
-import de.flapdoodle.embed.mongo.distribution.Version;
-import de.flapdoodle.embed.mongo.tests.MongodForTestsFactory;
-import mvm.rya.api.RdfCloudTripleStoreConfiguration;
-import mvm.rya.api.domain.RyaStatement;
-import mvm.rya.api.domain.RyaStatement.RyaStatementBuilder;
-import mvm.rya.api.domain.RyaURI;
-import mvm.rya.api.persist.RyaDAOException;
-
-public class MongoDBRyaDAOTest {
-
-       private MongodForTestsFactory testsFactory;
-       private MongoDBRyaDAO dao;
-       private MongoDBRdfConfiguration configuration;
-       private MongoClient mongoClient;
-
-       @Before
-       public void setUp() throws IOException, RyaDAOException{
-               testsFactory = 
MongodForTestsFactory.with(Version.Main.PRODUCTION);
-               final Configuration conf = new Configuration();
-        conf.set(MongoDBRdfConfiguration.USE_TEST_MONGO, "true");
-        conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, "test");
-        conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya_");
-        conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, "rya_");
-        configuration = new MongoDBRdfConfiguration(conf);
-               mongoClient = testsFactory.newMongo();
-        final int port = mongoClient.getServerAddressList().get(0).getPort();
-        configuration.set(MongoDBRdfConfiguration.MONGO_INSTANCE_PORT, 
""+port);
-               dao = new MongoDBRyaDAO(configuration, mongoClient);
-       }
-
-       @Test
-       public void testDeleteWildcard() throws RyaDAOException {
-               final RyaStatementBuilder builder = new RyaStatementBuilder();
-               builder.setPredicate(new RyaURI("http://temp.com";));
-               dao.delete(builder.build(), configuration);
-       }
-
-
-       @Test
-       public void testAdd() throws RyaDAOException, MongoException, 
IOException {
-               final RyaStatementBuilder builder = new RyaStatementBuilder();
-               builder.setPredicate(new RyaURI("http://temp.com";));
-               builder.setSubject(new RyaURI("http://subject.com";));
-               builder.setObject(new RyaURI("http://object.com";));
-
-               final DB db = 
mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
-        final DBCollection coll = 
db.getCollection(configuration.getTriplesCollectionName());
-
-               dao.add(builder.build());
-
-        assertEquals(coll.count(),1);
-
-       }
-
-       @Test
-       public void testDelete() throws RyaDAOException, MongoException, 
IOException {
-               final RyaStatementBuilder builder = new RyaStatementBuilder();
-               builder.setPredicate(new RyaURI("http://temp.com";));
-               builder.setSubject(new RyaURI("http://subject.com";));
-               builder.setObject(new RyaURI("http://object.com";));
-               final RyaStatement statement = builder.build();
-
-               final DB db = 
mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
-        final DBCollection coll = 
db.getCollection(configuration.getTriplesCollectionName());
-
-               dao.add(statement);
-
-        assertEquals(coll.count(),1);
-
-        dao.delete(statement, configuration);
-
-        assertEquals(coll.count(),0);
-
-       }
-
-       @Test
-       public void testDeleteWildcardSubjectWithContext() throws 
RyaDAOException, MongoException, IOException {
-               final RyaStatementBuilder builder = new RyaStatementBuilder();
-               builder.setPredicate(new RyaURI("http://temp.com";));
-               builder.setSubject(new RyaURI("http://subject.com";));
-               builder.setObject(new RyaURI("http://object.com";));
-               builder.setContext(new RyaURI("http://context.com";));
-               final RyaStatement statement = builder.build();
-
-               final DB db = 
mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
-        final DBCollection coll = 
db.getCollection(configuration.getTriplesCollectionName());
-
-               dao.add(statement);
-
-        assertEquals(coll.count(),1);
-
-               final RyaStatementBuilder builder2 = new RyaStatementBuilder();
-               builder2.setPredicate(new RyaURI("http://temp.com";));
-               builder2.setObject(new RyaURI("http://object.com";));
-               builder2.setContext(new RyaURI("http://context3.com";));
-               final RyaStatement query = builder2.build();
-
-        dao.delete(query, configuration);
-
-        assertEquals(coll.count(),1);
-
-       }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/SimpleMongoDBStorageStrategyTest.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/SimpleMongoDBStorageStrategyTest.java
 
b/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/SimpleMongoDBStorageStrategyTest.java
deleted file mode 100644
index be5fdb7..0000000
--- 
a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/SimpleMongoDBStorageStrategyTest.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package mvm.rya.mongodb;
-/*
- * 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.
- */
-
-import static org.junit.Assert.assertEquals;
-import static org.openrdf.model.vocabulary.XMLSchema.ANYURI;
-
-import java.io.IOException;
-
-import org.junit.Test;
-
-import com.mongodb.BasicDBObject;
-import com.mongodb.DBObject;
-import com.mongodb.MongoException;
-
-import mvm.rya.api.domain.RyaStatement;
-import mvm.rya.api.domain.RyaStatement.RyaStatementBuilder;
-import mvm.rya.api.domain.RyaURI;
-import mvm.rya.api.persist.RyaDAOException;
-import mvm.rya.mongodb.dao.SimpleMongoDBStorageStrategy;
-
-public class SimpleMongoDBStorageStrategyTest {
-    private static final String SUBJECT = "http://subject.com";;
-    private static final String PREDICATE = "http://temp.com";;
-    private static final String OBJECT = "http://object.com";;
-    private static final String CONTEXT = "http://context.com";;
-
-    private static final RyaStatement testStatement;
-    private static final DBObject testDBO;
-    private final SimpleMongoDBStorageStrategy storageStrategy = new 
SimpleMongoDBStorageStrategy();
-
-    static {
-        final RyaStatementBuilder builder = new RyaStatementBuilder();
-        builder.setPredicate(new RyaURI(PREDICATE));
-        builder.setSubject(new RyaURI(SUBJECT));
-        builder.setObject(new RyaURI(OBJECT));
-        builder.setContext(new RyaURI(CONTEXT));
-        builder.setTimestamp(null);
-        testStatement = builder.build();
-
-        testDBO = new BasicDBObject();
-        testDBO.put("_id", "d5f8fea0e85300478da2c9b4e132c69502e21221");
-        testDBO.put("subject", SUBJECT);
-        testDBO.put("predicate", PREDICATE);
-        testDBO.put("object", OBJECT);
-        testDBO.put("objectType", ANYURI.stringValue());
-        testDBO.put("context", CONTEXT);
-        testDBO.put("insertTimestamp", null);
-    }
-
-    @Test
-    public void testSerializeStatementToDBO() throws RyaDAOException, 
MongoException, IOException {
-
-        final DBObject dbo = storageStrategy.serialize(testStatement);
-        assertEquals(testDBO, dbo);
-    }
-
-    @Test
-    public void testDeSerializeStatementToDBO() throws RyaDAOException, 
MongoException, IOException {
-        final RyaStatement statement = 
storageStrategy.deserializeDBObject(testDBO);
-        /**
-         * Since RyaStatement creates a timestamp using JVM time if the 
timestamp is null, we want to re-null it
-         * for this test.  Timestamp is created at insert time by the Server, 
this test
-         * can be found in the RyaDAO.
-         */
-        statement.setTimestamp(null);
-        assertEquals(testStatement, statement);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoDetailsAdapterTest.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoDetailsAdapterTest.java
 
b/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoDetailsAdapterTest.java
deleted file mode 100644
index 9faa595..0000000
--- 
a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoDetailsAdapterTest.java
+++ /dev/null
@@ -1,296 +0,0 @@
-package mvm.rya.mongodb.instance;
-
-/*
- * 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.
- */
-
-import static org.junit.Assert.assertEquals;
-
-import java.util.Date;
-
-import org.junit.Test;
-
-import com.google.common.base.Optional;
-import com.mongodb.BasicDBObject;
-import com.mongodb.DBObject;
-import com.mongodb.util.JSON;
-
-import mvm.rya.api.instance.RyaDetails;
-import mvm.rya.api.instance.RyaDetails.EntityCentricIndexDetails;
-import mvm.rya.api.instance.RyaDetails.FreeTextIndexDetails;
-import mvm.rya.api.instance.RyaDetails.GeoIndexDetails;
-import mvm.rya.api.instance.RyaDetails.JoinSelectivityDetails;
-import mvm.rya.api.instance.RyaDetails.PCJIndexDetails;
-import mvm.rya.api.instance.RyaDetails.PCJIndexDetails.FluoDetails;
-import mvm.rya.api.instance.RyaDetails.PCJIndexDetails.PCJDetails;
-import 
mvm.rya.api.instance.RyaDetails.PCJIndexDetails.PCJDetails.PCJUpdateStrategy;
-import mvm.rya.api.instance.RyaDetails.ProspectorDetails;
-import mvm.rya.api.instance.RyaDetails.TemporalIndexDetails;
-import 
mvm.rya.mongodb.instance.MongoDetailsAdapter.MalformedRyaDetailsException;
-
-/**
- * Tests the methods of {@link MongoDetailsAdapter}.
- */
-public class MongoDetailsAdapterTest {
-
-    @Test
-    public void ryaDetailsToMongoTest() {
-        // Convert the Details into a Mongo DB OBject.
-        final RyaDetails details = RyaDetails.builder()
-            .setRyaInstanceName("test")
-            .setRyaVersion("1")
-            .setEntityCentricIndexDetails(new EntityCentricIndexDetails(true))
-            .setGeoIndexDetails(new GeoIndexDetails(true))
-            .setPCJIndexDetails(
-                PCJIndexDetails.builder()
-                .setEnabled(true)
-                .setFluoDetails(new FluoDetails("fluo"))
-                .addPCJDetails(
-                        PCJDetails.builder()
-                        .setId("pcj_0")
-                        .setUpdateStrategy(PCJUpdateStrategy.BATCH)
-                        .setLastUpdateTime(new Date(0L)))
-                .addPCJDetails(
-                        PCJDetails.builder()
-                        .setId("pcj_1")
-                        .setUpdateStrategy(PCJUpdateStrategy.BATCH)
-                        .setLastUpdateTime(new Date(1L))))
-            .setTemporalIndexDetails(new TemporalIndexDetails(true))
-            .setFreeTextDetails(new FreeTextIndexDetails(true))
-            .setProspectorDetails(new 
ProspectorDetails(Optional.fromNullable(new Date(0L))))
-            .setJoinSelectivityDetails(new 
JoinSelectivityDetails(Optional.fromNullable(new Date(1L))))
-            .build();
-
-        final BasicDBObject actual = MongoDetailsAdapter.toDBObject(details);
-
-        // Ensure it matches the expected object.
-        final DBObject expected = (DBObject) JSON.parse(
-            "{ "
-            + "instanceName : \"test\","
-            + "version : \"1\","
-            + "entityCentricDetails : true,"
-            + "geoDetails : true,"
-            + "pcjDetails : {"
-            +    "enabled : true ,"
-            +    "fluoName : \"fluo\","
-            +    "pcjs : [ "
-            +       "{"
-            +          "id : \"pcj_0\","
-            +          "updateStrategy : \"BATCH\","
-            +          "lastUpdate : { $date : \"1970-01-01T00:00:00.000Z\"}"
-            +       "},"
-            +       "{"
-            +          "id : \"pcj_1\","
-            +          "updateStrategy : \"BATCH\","
-            +          "lastUpdate : { $date : \"1970-01-01T00:00:00.001Z\"}"
-            +       "}]"
-            + "},"
-            + "temporalDetails : true,"
-            + "freeTextDetails : true,"
-            + "prospectorDetails : { $date : \"1970-01-01T00:00:00.000Z\"},"
-            + "joinSelectivitiyDetails : { $date : 
\"1970-01-01T00:00:00.001Z\"}"
-          + "}"
-        );
-
-        assertEquals(expected.toString(), actual.toString());
-    }
-
-    @Test
-    public void mongoToRyaDetailsTest() throws MalformedRyaDetailsException {
-        // Convert the Mongo object into a RyaDetails.
-        final BasicDBObject mongo = (BasicDBObject) JSON.parse(
-            "{ "
-            + "instanceName : \"test\","
-            + "version : \"1\","
-            + "entityCentricDetails : true,"
-            + "geoDetails : true,"
-            + "pcjDetails : {"
-            +    "enabled : true ,"
-            +    "fluoName : \"fluo\","
-            +    "pcjs : [ "
-            +       "{"
-            +          "id : \"pcj_0\","
-            +          "updateStrategy : \"BATCH\","
-            +          "lastUpdate : { $date : \"1970-01-01T00:00:00.000Z\"}"
-            +       "},"
-            +       "{"
-            +          "id : \"pcj_1\","
-            +          "updateStrategy : \"BATCH\","
-            +          "lastUpdate : { $date : \"1970-01-01T00:00:00.001Z\"}"
-            +       "}]"
-            + "},"
-            + "temporalDetails : true,"
-            + "freeTextDetails : true,"
-            + "prospectorDetails : { $date : \"1970-01-01T00:00:00.000Z\"},"
-            + "joinSelectivitiyDetails : { $date : 
\"1970-01-01T00:00:00.001Z\"}"
-          + "}"
-        );
-
-        final RyaDetails actual = MongoDetailsAdapter.toRyaDetails(mongo);
-
-        // Ensure it matches the expected object.
-        final RyaDetails expected = RyaDetails.builder()
-            .setRyaInstanceName("test")
-            .setRyaVersion("1")
-            .setEntityCentricIndexDetails(new EntityCentricIndexDetails(true))
-            .setGeoIndexDetails(new GeoIndexDetails(true))
-            .setPCJIndexDetails(
-                PCJIndexDetails.builder()
-                    .setEnabled(true)
-                    .setFluoDetails(new FluoDetails("fluo"))
-                    .addPCJDetails(
-                        PCJDetails.builder()
-                            .setId("pcj_0")
-                            .setUpdateStrategy(PCJUpdateStrategy.BATCH)
-                            .setLastUpdateTime(new Date(0L)))
-                    .addPCJDetails(
-                            PCJDetails.builder()
-                                .setId("pcj_1")
-                                .setUpdateStrategy(PCJUpdateStrategy.BATCH)
-                                .setLastUpdateTime(new Date(1L))))
-            .setTemporalIndexDetails(new TemporalIndexDetails(true))
-            .setFreeTextDetails(new FreeTextIndexDetails(true))
-            .setProspectorDetails(new 
ProspectorDetails(Optional.<Date>fromNullable(new Date(0L))))
-            .setJoinSelectivityDetails(new 
JoinSelectivityDetails(Optional.<Date>fromNullable(new Date(1L))))
-            .build();
-
-        assertEquals(expected, actual);
-    }
-
-    @Test
-    public void absentOptionalToRyaDetailsTest() throws 
MalformedRyaDetailsException {
-        // Convert the Mongo object into a RyaDetails.
-        final BasicDBObject mongo = (BasicDBObject) JSON.parse(
-                "{ "
-                + "instanceName : \"test\","
-                + "version : \"1\","
-                + "entityCentricDetails : true,"
-                + "geoDetails : false,"
-                + "pcjDetails : {"
-                +    "enabled : false,"
-                +    "fluoName : \"fluo\","
-                +    "pcjs : [ "
-                +       "{"
-                +          "id : \"pcj_1\","
-                +       "}"
-                +    "]"
-                + "},"
-                + "temporalDetails : false,"
-                + "freeTextDetails : true,"
-                + "prospectorDetails : null,"
-                + "joinSelectivitiyDetails : null"
-              + "}"
-            );
-        final RyaDetails actual = MongoDetailsAdapter.toRyaDetails(mongo);
-
-        // Ensure it matches the expected object.
-        final RyaDetails expected = RyaDetails.builder()
-            .setRyaInstanceName("test")
-            .setRyaVersion("1")
-            .setEntityCentricIndexDetails(new EntityCentricIndexDetails(true))
-            .setGeoIndexDetails(new GeoIndexDetails(false))
-            .setPCJIndexDetails(
-                    PCJIndexDetails.builder()
-                    .setEnabled(false)
-                    .setFluoDetails(new FluoDetails("fluo"))
-                    .addPCJDetails(
-                        PCJDetails.builder()
-                            .setId("pcj_1")
-                            .setLastUpdateTime(null)))
-            .setTemporalIndexDetails(new TemporalIndexDetails(false))
-            .setFreeTextDetails(new FreeTextIndexDetails(true))
-            .setProspectorDetails(new 
ProspectorDetails(Optional.<Date>absent()))
-            .setJoinSelectivityDetails(new 
JoinSelectivityDetails(Optional.<Date>absent()))
-            .build();
-
-        assertEquals(expected, actual);
-    }
-
-    @Test
-    public void absentOptionalToMongoTest() {
-        // Convert the Details into a Mongo DB OBject.
-        final RyaDetails details = RyaDetails.builder()
-            .setRyaInstanceName("test")
-            .setRyaVersion("1")
-            .setEntityCentricIndexDetails(new EntityCentricIndexDetails(true))
-            .setGeoIndexDetails(new GeoIndexDetails(false))
-            .setPCJIndexDetails(
-                PCJIndexDetails.builder()
-                    .setEnabled(true)
-                    .setFluoDetails(new FluoDetails("fluo")))
-            .setTemporalIndexDetails(new TemporalIndexDetails(false))
-            .setFreeTextDetails(new FreeTextIndexDetails(true))
-            .setProspectorDetails(new 
ProspectorDetails(Optional.<Date>absent()))
-            .setJoinSelectivityDetails(new 
JoinSelectivityDetails(Optional.<Date>absent()))
-            .build();
-
-        final DBObject actual = MongoDetailsAdapter.toDBObject(details);
-
-        // Ensure it matches the expected object.
-        final BasicDBObject expected = (BasicDBObject) JSON.parse(
-                "{ "
-                + "instanceName : \"test\","
-                + "version : \"1\","
-                + "entityCentricDetails : true,"
-                + "geoDetails : false,"
-                + "pcjDetails : {"
-                +    "enabled : true,"
-                +    "fluoName : \"fluo\","
-                +    "pcjs : [ ]"
-                + "},"
-                + "temporalDetails : false,"
-                + "freeTextDetails : true"
-              + "}"
-            );
-        assertEquals(expected, actual);
-    }
-
-    @Test
-    public void toDBObject_pcjDetails() {
-        final PCJDetails details = PCJDetails.builder()
-                .setId("pcjId")
-                .setLastUpdateTime( new Date() )
-                .setUpdateStrategy( PCJUpdateStrategy.INCREMENTAL )
-                .build();
-
-        // Convert it into a Mongo DB Object.
-        final BasicDBObject dbo = (BasicDBObject) 
MongoDetailsAdapter.toDBObject(details);
-
-        // Convert the dbo back into the original object.
-        final PCJDetails restored = 
MongoDetailsAdapter.toPCJDetails(dbo).build();
-
-        // Ensure the restored value matches the original.
-        assertEquals(details, restored);
-    }
-
-    @Test
-    public void toDBObject_pcjDetails_missing_optionals() {
-        final PCJDetails details = PCJDetails.builder()
-                .setId("pcjId")
-                .build();
-
-        // Convert it into a Mongo DB Object.
-        final BasicDBObject dbo = (BasicDBObject) 
MongoDetailsAdapter.toDBObject(details);
-
-        // Convert the dbo back into the original object.
-        final PCJDetails restored = 
MongoDetailsAdapter.toPCJDetails(dbo).build();
-
-        // Ensure the restored value matches the original.
-        assertEquals(details, restored);
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java
----------------------------------------------------------------------
diff --git 
a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java
 
b/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java
deleted file mode 100644
index 2ce2e93..0000000
--- 
a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java
+++ /dev/null
@@ -1,307 +0,0 @@
-package mvm.rya.mongodb.instance;
-
-/*
- * 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.
- */
-
-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.junit.AfterClass;
-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;
-import mvm.rya.api.instance.RyaDetails;
-import mvm.rya.api.instance.RyaDetails.EntityCentricIndexDetails;
-import mvm.rya.api.instance.RyaDetails.FreeTextIndexDetails;
-import mvm.rya.api.instance.RyaDetails.GeoIndexDetails;
-import mvm.rya.api.instance.RyaDetails.JoinSelectivityDetails;
-import mvm.rya.api.instance.RyaDetails.PCJIndexDetails;
-import mvm.rya.api.instance.RyaDetails.PCJIndexDetails.FluoDetails;
-import mvm.rya.api.instance.RyaDetails.PCJIndexDetails.PCJDetails;
-import 
mvm.rya.api.instance.RyaDetails.PCJIndexDetails.PCJDetails.PCJUpdateStrategy;
-import mvm.rya.api.instance.RyaDetails.ProspectorDetails;
-import mvm.rya.api.instance.RyaDetails.TemporalIndexDetails;
-import mvm.rya.api.instance.RyaDetailsRepository;
-import mvm.rya.api.instance.RyaDetailsRepository.AlreadyInitializedException;
-import mvm.rya.api.instance.RyaDetailsRepository.ConcurrentUpdateException;
-import mvm.rya.api.instance.RyaDetailsRepository.NotInitializedException;
-import mvm.rya.api.instance.RyaDetailsRepository.RyaDetailsRepositoryException;
-
-/**
- * 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();
-    }
-
-    @Before
-    public void clearLastTest() {
-        client.dropDatabase("testInstance");
-    }
-
-    @AfterClass
-    public static void stopMiniAccumulo() throws IOException, 
InterruptedException {
-        client.close();
-    }
-
-    @Test
-    public void initializeAndGet() throws AlreadyInitializedException, 
RyaDetailsRepositoryException {
-        final String instanceName = "testInstance";
-
-        // Create the metadata object the repository will be initialized with.
-        final RyaDetails details = RyaDetails.builder()
-            .setRyaInstanceName(instanceName)
-            .setRyaVersion("1.2.3.4")
-            .setEntityCentricIndexDetails( new EntityCentricIndexDetails(true) 
)
-            .setGeoIndexDetails( new GeoIndexDetails(true) )
-            .setTemporalIndexDetails( new TemporalIndexDetails(true) )
-            .setFreeTextDetails( new FreeTextIndexDetails(true) )
-            .setPCJIndexDetails(
-                    PCJIndexDetails.builder()
-                        .setEnabled(true)
-                        .setFluoDetails( new 
FluoDetails("test_instance_rya_pcj_updater") )
-                        .addPCJDetails(
-                                PCJDetails.builder()
-                                    .setId("pcj 1")
-                                    .setUpdateStrategy(PCJUpdateStrategy.BATCH)
-                                    .setLastUpdateTime( new Date() ))
-                        .addPCJDetails(
-                                PCJDetails.builder()
-                                    .setId("pcj 2")))
-            .setProspectorDetails( new ProspectorDetails(Optional.of(new 
Date())) )
-            .setJoinSelectivityDetails( new 
JoinSelectivityDetails(Optional.of(new Date())) )
-            .build();
-
-        // Setup the repository that will be tested using a mock instance of 
MongoDB.
-        final RyaDetailsRepository repo = new 
MongoRyaInstanceDetailsRepository(client, instanceName);
-
-        // Initialize the repository
-        repo.initialize(details);
-
-        // Fetch the stored details.
-        final RyaDetails stored = repo.getRyaInstanceDetails();
-
-        // Ensure the fetched object is equivalent to what was stored.
-        assertEquals(details, stored);
-    }
-
-    @Test(expected = AlreadyInitializedException.class)
-    public void initialize_alreadyInitialized() throws 
AlreadyInitializedException, RyaDetailsRepositoryException {
-        final String instanceName = "testInstance";
-
-        // Create the metadata object the repository will be initialized with.
-        final RyaDetails details = RyaDetails.builder()
-            .setRyaInstanceName(instanceName)
-            .setRyaVersion("1.2.3.4")
-            .setEntityCentricIndexDetails( new EntityCentricIndexDetails(true) 
)
-            .setGeoIndexDetails( new GeoIndexDetails(true) )
-            .setTemporalIndexDetails( new TemporalIndexDetails(true) )
-            .setFreeTextDetails( new FreeTextIndexDetails(true) )
-            .setPCJIndexDetails(
-                    PCJIndexDetails.builder()
-                        .setEnabled(true)
-                        .setFluoDetails( new 
FluoDetails("test_instance_rya_pcj_updater") )
-                        .addPCJDetails(
-                                PCJDetails.builder()
-                                    .setId("pcj 1")
-                                    .setUpdateStrategy(PCJUpdateStrategy.BATCH)
-                                    .setLastUpdateTime( new Date() ))
-                        .addPCJDetails(
-                                PCJDetails.builder()
-                                    .setId("pcj 2")))
-            .setProspectorDetails( new ProspectorDetails(Optional.of(new 
Date())) )
-            .setJoinSelectivityDetails( new 
JoinSelectivityDetails(Optional.of(new Date())) )
-            .build();
-
-        // Setup the repository that will be tested using a mock instance of 
MongoDB.
-        final RyaDetailsRepository repo = new 
MongoRyaInstanceDetailsRepository(client, instanceName);
-
-        // Initialize the repository
-        repo.initialize(details);
-
-        // Initialize it again.
-        repo.initialize(details);
-    }
-
-    @Test(expected = NotInitializedException.class)
-    public void getRyaInstance_notInitialized() throws 
NotInitializedException, RyaDetailsRepositoryException {
-        // Setup the repository that will be tested using a mock instance of 
Accumulo.
-        final RyaDetailsRepository repo = new 
MongoRyaInstanceDetailsRepository(client, "testInstance");
-
-        // Try to fetch the details from the uninitialized repository.
-        repo.getRyaInstanceDetails();
-    }
-
-    @Test
-    public void isInitialized_true() throws AlreadyInitializedException, 
RyaDetailsRepositoryException {
-        final String instanceName = "testInstance";
-
-        // Create the metadata object the repository will be initialized with.
-        final RyaDetails details = RyaDetails.builder()
-            .setRyaInstanceName(instanceName)
-            .setRyaVersion("1.2.3.4")
-            .setEntityCentricIndexDetails( new EntityCentricIndexDetails(true) 
)
-            .setGeoIndexDetails( new GeoIndexDetails(true) )
-            .setTemporalIndexDetails( new TemporalIndexDetails(true) )
-            .setFreeTextDetails( new FreeTextIndexDetails(true) )
-            .setPCJIndexDetails(
-                    PCJIndexDetails.builder()
-                        .setEnabled(true)
-                        .setFluoDetails( new 
FluoDetails("test_instance_rya_pcj_updater") )
-                        .addPCJDetails(
-                                PCJDetails.builder()
-                                    .setId("pcj 1")
-                                    .setUpdateStrategy(PCJUpdateStrategy.BATCH)
-                                    .setLastUpdateTime( new Date() ))
-                        .addPCJDetails(
-                                PCJDetails.builder()
-                                    .setId("pcj 2")))
-            .setProspectorDetails( new ProspectorDetails(Optional.of(new 
Date())) )
-            .setJoinSelectivityDetails( new 
JoinSelectivityDetails(Optional.of(new Date())) )
-            .build();
-
-        // Setup the repository that will be tested using a mock instance of 
MongoDB.
-        final RyaDetailsRepository repo = new 
MongoRyaInstanceDetailsRepository(client, "testInstance");
-
-        // Initialize the repository
-        repo.initialize(details);
-
-        // Ensure the repository reports that it has been initialized.
-        assertTrue( repo.isInitialized() );
-    }
-
-    @Test
-    public void isInitialized_false() throws RyaDetailsRepositoryException {
-        // Setup the repository that will be tested using a mock instance of 
MongoDB.
-        final RyaDetailsRepository repo = new 
MongoRyaInstanceDetailsRepository(client, "testInstance");
-
-        // Ensure the repository reports that is has not been initialized.
-        assertFalse( repo.isInitialized() );
-    }
-
-    @Test
-    public void update() throws AlreadyInitializedException, 
RyaDetailsRepositoryException {
-        final String instanceName = "testInstance";
-
-        // Create the metadata object the repository will be initialized with.
-        final RyaDetails details = RyaDetails.builder()
-            .setRyaInstanceName(instanceName)
-            .setRyaVersion("1.2.3.4")
-            .setEntityCentricIndexDetails( new EntityCentricIndexDetails(true) 
)
-            .setGeoIndexDetails( new GeoIndexDetails(true) )
-            .setTemporalIndexDetails( new TemporalIndexDetails(true) )
-            .setFreeTextDetails( new FreeTextIndexDetails(true) )
-            .setPCJIndexDetails(
-                    PCJIndexDetails.builder()
-                        .setEnabled(true)
-                        .setFluoDetails( new 
FluoDetails("test_instance_rya_pcj_updater") )
-                        .addPCJDetails(
-                                PCJDetails.builder()
-                                    .setId("pcj 1")
-                                    .setUpdateStrategy(PCJUpdateStrategy.BATCH)
-                                    .setLastUpdateTime( new Date() ))
-                        .addPCJDetails(
-                                PCJDetails.builder()
-                                    .setId("pcj 2")))
-            .setProspectorDetails( new ProspectorDetails(Optional.of(new 
Date())) )
-            .setJoinSelectivityDetails( new 
JoinSelectivityDetails(Optional.of(new Date())) )
-            .build();
-
-        // Setup the repository that will be tested using a mock instance of 
MongoDB.
-        final RyaDetailsRepository repo = new 
MongoRyaInstanceDetailsRepository(client, "testInstance");
-
-        // Initialize the repository
-        repo.initialize(details);
-
-        // Create a new state for the details.
-        final RyaDetails updated = new RyaDetails.Builder( details )
-                .setGeoIndexDetails( new GeoIndexDetails(false) )
-                .build();
-
-        // Execute the update.
-        repo.update(details, updated);
-
-        // Show the new state that is stored matches the updated state.
-        final RyaDetails fetched = repo.getRyaInstanceDetails();
-        assertEquals(updated, fetched);
-    }
-
-    @Test(expected = ConcurrentUpdateException.class)
-    public void update_outOfDate() throws AlreadyInitializedException, 
RyaDetailsRepositoryException {
-        final String instanceName = "testInstance";
-
-        // Create the metadata object the repository will be initialized with.
-        final RyaDetails details = RyaDetails.builder()
-            .setRyaInstanceName(instanceName)
-            .setRyaVersion("1.2.3.4")
-            .setEntityCentricIndexDetails( new EntityCentricIndexDetails(true) 
)
-            .setGeoIndexDetails( new GeoIndexDetails(true) )
-            .setTemporalIndexDetails( new TemporalIndexDetails(true) )
-            .setFreeTextDetails( new FreeTextIndexDetails(true) )
-            .setPCJIndexDetails(
-                    PCJIndexDetails.builder()
-                        .setEnabled(true)
-                        .setFluoDetails( new 
FluoDetails("test_instance_rya_pcj_updater") )
-                        .addPCJDetails(
-                                PCJDetails.builder()
-                                    .setId("pcj 1")
-                                    .setUpdateStrategy(PCJUpdateStrategy.BATCH)
-                                    .setLastUpdateTime( new Date() ))
-                        .addPCJDetails(
-                                PCJDetails.builder()
-                                    .setId("pcj 2")))
-            .setProspectorDetails( new ProspectorDetails(Optional.of(new 
Date())) )
-            .setJoinSelectivityDetails( new 
JoinSelectivityDetails(Optional.of(new Date())) )
-            .build();
-
-        // Setup the repository that will be tested using a mock instance of 
MongoDB.
-        final RyaDetailsRepository repo = new 
MongoRyaInstanceDetailsRepository(client, "testInstance");
-
-        // Initialize the repository
-        repo.initialize(details);
-
-        // Create a new state for the details.
-        final RyaDetails wrongOriginal = new RyaDetails.Builder( details )
-                .setTemporalIndexDetails( new TemporalIndexDetails(false) )
-                .build();
-
-        final RyaDetails updated = new RyaDetails.Builder( details )
-                .setGeoIndexDetails( new GeoIndexDetails(false) )
-                .build();
-
-        // Try to execute the update where the old state is not the currently 
stored state.
-        repo.update(wrongOriginal, updated);
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/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
new file mode 100644
index 0000000..870115c
--- /dev/null
+++ 
b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBQueryEngineTest.java
@@ -0,0 +1,124 @@
+package mvm.rya.mongodb;
+
+/*
+ * 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.
+ */
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import info.aduna.iteration.CloseableIteration;
+import mvm.rya.api.RdfCloudTripleStoreConfiguration;
+import mvm.rya.api.RdfCloudTripleStoreUtils;
+import mvm.rya.api.domain.RyaStatement;
+import mvm.rya.api.domain.RyaStatement.RyaStatementBuilder;
+import mvm.rya.api.domain.RyaURI;
+
+import org.apache.hadoop.conf.Configuration;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.openrdf.model.impl.URIImpl;
+import org.openrdf.query.BindingSet;
+import org.openrdf.query.impl.MapBindingSet;
+
+import com.google.common.collect.Lists;
+import com.mongodb.MongoClient;
+
+import de.flapdoodle.embed.mongo.distribution.Version;
+import de.flapdoodle.embed.mongo.tests.MongodForTestsFactory;
+
+public class MongoDBQueryEngineTest {
+
+    // private dao;
+    // private configuration;
+
+    private MongoDBQueryEngine engine;
+    private MongoDBRdfConfiguration configuration;
+
+    @Before
+    public void setUp() throws Exception {
+        // Set up Mongo/Rya
+        MongodForTestsFactory testsFactory = 
MongodForTestsFactory.with(Version.Main.PRODUCTION);
+        Configuration conf = new Configuration();
+        conf.set(MongoDBRdfConfiguration.USE_TEST_MONGO, "true");
+        conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, "test");
+        conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya_");
+        conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, "rya_");
+        configuration = new MongoDBRdfConfiguration(conf);
+        MongoClient mongoClient = testsFactory.newMongo();
+        int port = mongoClient.getServerAddressList().get(0).getPort();
+        configuration.set(MongoDBRdfConfiguration.MONGO_INSTANCE_PORT, 
Integer.toString(port));
+
+        engine = new MongoDBQueryEngine(configuration, mongoClient);
+
+        // Add Data
+        MongoDBRyaDAO dao = new MongoDBRyaDAO(configuration, mongoClient);
+        dao.add(getStatement("u:a", "u:tt", "u:b"));
+        dao.add(getStatement("u:a", "u:tt", "u:c"));
+    }
+
+    private RyaStatement getStatement(String s, String p, String o) {
+        RyaStatementBuilder builder = new RyaStatementBuilder();
+        if (s != null)
+            builder.setSubject(new RyaURI(s));
+        if (p != null)
+            builder.setPredicate(new RyaURI(p));
+        if (o != null)
+            builder.setObject(new RyaURI(o));
+        return builder.build();
+    }
+
+    public int size(CloseableIteration<?, ?> iter) throws Exception {
+        int i = 0;
+        while (iter.hasNext()) {
+            i++;
+            iter.next();
+        }
+        return i;
+    }
+
+    @Test
+    public void statementQuery() throws Exception {
+        RyaStatement s = getStatement("u:a", null, null);
+        Assert.assertEquals(2, size(engine.query(s, configuration)));
+    }
+
+    @SuppressWarnings("unchecked")
+    @Test
+    public void bindingSetsQuery() throws Exception {
+        RyaStatement s = getStatement("u:a", null, null);
+        
+        MapBindingSet bs1 = new MapBindingSet();
+        bs1.addBinding("foo", new URIImpl("u:x"));
+
+        Map.Entry<RyaStatement, BindingSet> e1 = new 
RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s, bs1);
+        Collection<Entry<RyaStatement, BindingSet>> stmts1 = 
Lists.newArrayList(e1);
+        Assert.assertEquals(2, size(engine.queryWithBindingSet(stmts1, 
configuration)));
+
+        
+        MapBindingSet bs2 = new MapBindingSet();
+        bs2.addBinding("foo", new URIImpl("u:y"));
+
+        Map.Entry<RyaStatement, BindingSet> e2 = new 
RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s, bs2);
+
+        Collection<Entry<RyaStatement, BindingSet>> stmts2 = 
Lists.newArrayList(e1, e2);
+        Assert.assertEquals(4, size(engine.queryWithBindingSet(stmts2, 
configuration)));
+}
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/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
new file mode 100644
index 0000000..33531b5
--- /dev/null
+++ b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java
@@ -0,0 +1,139 @@
+package mvm.rya.mongodb;
+/*
+ * 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.
+ */
+
+import static mvm.rya.mongodb.dao.SimpleMongoDBStorageStrategy.TIMESTAMP;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+
+import org.apache.hadoop.conf.Configuration;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.mongodb.DB;
+import com.mongodb.DBCollection;
+import com.mongodb.DBObject;
+import com.mongodb.MongoClient;
+import com.mongodb.MongoException;
+
+import de.flapdoodle.embed.mongo.distribution.Version;
+import de.flapdoodle.embed.mongo.tests.MongodForTestsFactory;
+import mvm.rya.api.RdfCloudTripleStoreConfiguration;
+import mvm.rya.api.domain.RyaStatement;
+import mvm.rya.api.domain.RyaStatement.RyaStatementBuilder;
+import mvm.rya.api.domain.RyaURI;
+import mvm.rya.api.persist.RyaDAOException;
+
+public class MongoDBRyaDAOIT {
+
+    private MongodForTestsFactory testsFactory;
+    private MongoDBRyaDAO dao;
+    private MongoDBRdfConfiguration configuration;
+    private MongoClient mongoClient;
+
+    @Before
+    public void setUp() throws IOException, RyaDAOException{
+        testsFactory = MongodForTestsFactory.with(Version.Main.PRODUCTION);
+           final Configuration conf = new Configuration();
+            conf.set(MongoDBRdfConfiguration.USE_TEST_MONGO, "true");
+            conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, "test");
+            conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya_");
+            conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, "rya_");
+            configuration = new MongoDBRdfConfiguration(conf);
+            mongoClient = testsFactory.newMongo();
+            final int port = 
mongoClient.getServerAddressList().get(0).getPort();
+            configuration.set(MongoDBRdfConfiguration.MONGO_INSTANCE_PORT, 
Integer.toString(port));
+            dao = new MongoDBRyaDAO(configuration, mongoClient);
+    }
+
+    @Test
+    public void testDeleteWildcard() throws RyaDAOException {
+        final RyaStatementBuilder builder = new RyaStatementBuilder();
+        builder.setPredicate(new RyaURI("http://temp.com";));
+        dao.delete(builder.build(), configuration);
+    }
+
+
+    @Test
+    public void testAdd() throws RyaDAOException, MongoException, IOException {
+        final RyaStatementBuilder builder = new RyaStatementBuilder();
+        builder.setPredicate(new RyaURI("http://temp.com";));
+        builder.setSubject(new RyaURI("http://subject.com";));
+        builder.setObject(new RyaURI("http://object.com";));
+
+        final DB db = 
mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
+        final DBCollection coll = 
db.getCollection(configuration.getTriplesCollectionName());
+
+        dao.add(builder.build());
+
+        assertEquals(coll.count(),1);
+
+        final DBObject dbo = coll.findOne();
+        assertTrue(dbo.containsField(TIMESTAMP));
+    }
+
+    @Test
+    public void testDelete() throws RyaDAOException, MongoException, 
IOException {
+        final RyaStatementBuilder builder = new RyaStatementBuilder();
+        builder.setPredicate(new RyaURI("http://temp.com";));
+        builder.setSubject(new RyaURI("http://subject.com";));
+        builder.setObject(new RyaURI("http://object.com";));
+        final RyaStatement statement = builder.build();
+        final DB db = 
mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
+        final DBCollection coll = 
db.getCollection(configuration.getTriplesCollectionName());
+
+        dao.add(statement);
+
+        assertEquals(coll.count(),1);
+
+        dao.delete(statement, configuration);
+
+        assertEquals(coll.count(),0);
+
+    }
+
+    @Test
+    public void testDeleteWildcardSubjectWithContext() throws RyaDAOException, 
MongoException, IOException {
+        final RyaStatementBuilder builder = new RyaStatementBuilder();
+        builder.setPredicate(new RyaURI("http://temp.com";));
+        builder.setSubject(new RyaURI("http://subject.com";));
+        builder.setObject(new RyaURI("http://object.com";));
+        builder.setContext(new RyaURI("http://context.com";));
+        final RyaStatement statement = builder.build();
+
+        final DB db = 
mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
+        final DBCollection coll = 
db.getCollection(configuration.getTriplesCollectionName());
+
+        dao.add(statement);
+
+        assertEquals(coll.count(),1);
+
+        final RyaStatementBuilder builder2 = new RyaStatementBuilder();
+        builder2.setPredicate(new RyaURI("http://temp.com";));
+        builder2.setObject(new RyaURI("http://object.com";));
+        builder2.setContext(new RyaURI("http://context3.com";));
+        final RyaStatement query = builder2.build();
+
+        dao.delete(query, configuration);
+
+        assertEquals(coll.count(),1);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/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
new file mode 100644
index 0000000..dde0eda
--- /dev/null
+++ 
b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOTest.java
@@ -0,0 +1,137 @@
+package mvm.rya.mongodb;
+/*
+ * 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.
+ */
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.IOException;
+
+import org.apache.hadoop.conf.Configuration;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.mongodb.DB;
+import com.mongodb.DBCollection;
+import com.mongodb.MongoClient;
+import com.mongodb.MongoException;
+
+import de.flapdoodle.embed.mongo.distribution.Version;
+import de.flapdoodle.embed.mongo.tests.MongodForTestsFactory;
+import mvm.rya.api.RdfCloudTripleStoreConfiguration;
+import mvm.rya.api.domain.RyaStatement;
+import mvm.rya.api.domain.RyaStatement.RyaStatementBuilder;
+import mvm.rya.api.domain.RyaURI;
+import mvm.rya.api.persist.RyaDAOException;
+
+public class MongoDBRyaDAOTest {
+
+       private MongodForTestsFactory testsFactory;
+       private MongoDBRyaDAO dao;
+       private MongoDBRdfConfiguration configuration;
+       private MongoClient mongoClient;
+
+       @Before
+       public void setUp() throws IOException, RyaDAOException{
+               testsFactory = 
MongodForTestsFactory.with(Version.Main.PRODUCTION);
+               final Configuration conf = new Configuration();
+        conf.set(MongoDBRdfConfiguration.USE_TEST_MONGO, "true");
+        conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, "test");
+        conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya_");
+        conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, "rya_");
+        configuration = new MongoDBRdfConfiguration(conf);
+               mongoClient = testsFactory.newMongo();
+        final int port = mongoClient.getServerAddressList().get(0).getPort();
+        configuration.set(MongoDBRdfConfiguration.MONGO_INSTANCE_PORT, 
""+port);
+               dao = new MongoDBRyaDAO(configuration, mongoClient);
+       }
+
+       @Test
+       public void testDeleteWildcard() throws RyaDAOException {
+               final RyaStatementBuilder builder = new RyaStatementBuilder();
+               builder.setPredicate(new RyaURI("http://temp.com";));
+               dao.delete(builder.build(), configuration);
+       }
+
+
+       @Test
+       public void testAdd() throws RyaDAOException, MongoException, 
IOException {
+               final RyaStatementBuilder builder = new RyaStatementBuilder();
+               builder.setPredicate(new RyaURI("http://temp.com";));
+               builder.setSubject(new RyaURI("http://subject.com";));
+               builder.setObject(new RyaURI("http://object.com";));
+
+               final DB db = 
mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
+        final DBCollection coll = 
db.getCollection(configuration.getTriplesCollectionName());
+
+               dao.add(builder.build());
+
+        assertEquals(coll.count(),1);
+
+       }
+
+       @Test
+       public void testDelete() throws RyaDAOException, MongoException, 
IOException {
+               final RyaStatementBuilder builder = new RyaStatementBuilder();
+               builder.setPredicate(new RyaURI("http://temp.com";));
+               builder.setSubject(new RyaURI("http://subject.com";));
+               builder.setObject(new RyaURI("http://object.com";));
+               final RyaStatement statement = builder.build();
+
+               final DB db = 
mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
+        final DBCollection coll = 
db.getCollection(configuration.getTriplesCollectionName());
+
+               dao.add(statement);
+
+        assertEquals(coll.count(),1);
+
+        dao.delete(statement, configuration);
+
+        assertEquals(coll.count(),0);
+
+       }
+
+       @Test
+       public void testDeleteWildcardSubjectWithContext() throws 
RyaDAOException, MongoException, IOException {
+               final RyaStatementBuilder builder = new RyaStatementBuilder();
+               builder.setPredicate(new RyaURI("http://temp.com";));
+               builder.setSubject(new RyaURI("http://subject.com";));
+               builder.setObject(new RyaURI("http://object.com";));
+               builder.setContext(new RyaURI("http://context.com";));
+               final RyaStatement statement = builder.build();
+
+               final DB db = 
mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME));
+        final DBCollection coll = 
db.getCollection(configuration.getTriplesCollectionName());
+
+               dao.add(statement);
+
+        assertEquals(coll.count(),1);
+
+               final RyaStatementBuilder builder2 = new RyaStatementBuilder();
+               builder2.setPredicate(new RyaURI("http://temp.com";));
+               builder2.setObject(new RyaURI("http://object.com";));
+               builder2.setContext(new RyaURI("http://context3.com";));
+               final RyaStatement query = builder2.build();
+
+        dao.delete(query, configuration);
+
+        assertEquals(coll.count(),1);
+
+       }
+
+}

Reply via email to