You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rya.apache.org by ca...@apache.org on 2017/08/25 16:44:51 UTC
[2/5] incubator-rya git commit: RYA-289 Mongo Singleton tests. Closes
#216.
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 <sm...@gmail.com>
Authored: Tue Aug 22 18:34:26 2017 -0400
Committer: Caleb Meier <ca...@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.smitch00@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.smitch00@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);