RYA-289 Mongo Singleton tests. Closes #216. Created a mongo client singleton to be used for tests. Updated existing tests to use the singleton
Project: http://git-wip-us.apache.org/repos/asf/incubator-rya/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-rya/commit/e5738966 Tree: http://git-wip-us.apache.org/repos/asf/incubator-rya/tree/e5738966 Diff: http://git-wip-us.apache.org/repos/asf/incubator-rya/diff/e5738966 Branch: refs/heads/master Commit: e5738966d5df9112da44df3447fc70945c49319c Parents: 8431dfb Author: isper3at <smith...@gmail.com> Authored: Tue Aug 22 18:34:26 2017 -0400 Committer: Caleb Meier <caleb.me...@parsons.com> Committed: Fri Aug 25 09:43:28 2017 -0700 ---------------------------------------------------------------------- .../org/apache/rya/mongodb/MongoDBRyaDAO.java | 2 +- .../apache/rya/mongodb/MockMongoSingleton.java | 82 +++++ .../rya/mongodb/MongoDBQueryEngineTest.java | 41 +-- .../org/apache/rya/mongodb/MongoDBRyaDAOIT.java | 61 ++-- .../apache/rya/mongodb/MongoDBRyaDAOTest.java | 38 +-- .../org/apache/rya/mongodb/MongoTestBase.java | 60 ++++ .../instance/MongoRyaDetailsRepositoryIT.java | 27 +- .../indexing/mongodb/AbstractMongoIndexer.java | 1 - .../rya/indexing/mongodb/MongoDbSmartUri.java | 8 - .../entity/query/EntityQueryNodeTest.java | 14 +- .../storage/mongo/MongoEntityStorageIT.java | 3 +- .../entity/storage/mongo/MongoITBase.java | 80 ----- .../storage/mongo/MongoTypeStorageIT.java | 3 +- .../update/mongo/MongoEntityIndexerIT.java | 4 +- .../external/PrecompJoinOptimizerTest2.java | 3 +- .../rya/indexing/mongo/MongoDbSmartUriIT.java | 309 +++++++++++++++++ .../rya/indexing/mongo/MongoDbSmartUriTest.java | 332 ------------------- .../rya/indexing/mongo/MongoEntityIndexIT.java | 33 +- .../indexing/mongo/MongoEntityIndexTest.java | 17 +- .../mongo/MongoFreeTextIndexerTest.java | 25 +- .../mongo/MongoTemporalIndexerTest.java | 37 +-- .../duplication/DuplicateDataDetectorTest.java | 4 +- .../metadata/MongoStatementMetadataIT.java | 126 +++---- .../MongoStatementMetadataNodeTest.java | 56 +--- .../src/main/java/MongoRyaDirectExample.java | 10 +- .../geotemporal/model/EventQueryNodeTest.java | 18 +- .../mongo/MongoGeoTemporalIndexerIT.java | 11 - .../indexing/geotemporal/mongo/MongoITBase.java | 43 +-- .../indexing/mongo/MongoGeoIndexerSfTest.java | 36 +- .../rya/indexing/mongo/MongoGeoIndexerTest.java | 31 +- .../indexing/mongo/MongoIndexerDeleteIT.java | 11 +- 31 files changed, 632 insertions(+), 894 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRyaDAO.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRyaDAO.java b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRyaDAO.java index a32651d..fe0f6f9 100644 --- a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRyaDAO.java +++ b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/MongoDBRyaDAO.java @@ -102,7 +102,7 @@ public final class MongoDBRyaDAO implements RyaDAO<MongoDBRdfConfiguration>{ @Override public void setConf(final MongoDBRdfConfiguration conf) { this.conf = conf; - this.auths = conf.getAuthorizations(); + auths = conf.getAuthorizations(); } public MongoClient getMongoClient(){ http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MockMongoSingleton.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MockMongoSingleton.java b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MockMongoSingleton.java new file mode 100644 index 0000000..c7860af --- /dev/null +++ b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MockMongoSingleton.java @@ -0,0 +1,82 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.rya.mongodb; + +import java.io.IOException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.mongodb.MongoClient; + +/** + * To be used for tests. Creates a singleton {@link MongoClient} to be used + * throughout all of the MongoDB related tests. Without the singleton, the + * embedded mongo factory ends up orphaning processes, consuming resources. + */ +public class MockMongoSingleton { + public static MongoClient getInstance() { + return InstanceHolder.SINGLETON.instance; + } + + private MockMongoSingleton() { + // hiding implicit default constructor + } + + private enum InstanceHolder { + + SINGLETON; + + private final Logger log; + private MongoClient instance; + + InstanceHolder() { + log = LoggerFactory.getLogger(MockMongoSingleton.class); + instance = null; + try { + instance = MockMongoFactory.newFactory().newMongoClient(); + // JUnit does not have an overall lifecycle event for tearing down + // this kind of resource, but shutdown hooks work alright in practice + // since this should only be used during testing + + // The only other alternative for lifecycle management is to use a + // suite lifecycle to enclose the tests that need this resource. + // In practice this becomes unwieldy. + Runtime.getRuntime().addShutdownHook(new Thread() { + @Override + public void run() { + try { + instance.close(); + } catch (final Throwable t) { + // logging frameworks will likely be shut down + t.printStackTrace(System.err); + } + } + }); + + } catch (final IOException e) { + log.error("Unexpected error while starting mongo client", e); + } catch (final Throwable e) { + // catching throwable because failure to construct an enum + // instance will lead to another error being thrown downstream + log.error("Unexpected throwable while starting mongo client", e); + } + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBQueryEngineTest.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBQueryEngineTest.java b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBQueryEngineTest.java index 4187c85..a8f2d88 100644 --- a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBQueryEngineTest.java +++ b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBQueryEngineTest.java @@ -23,8 +23,6 @@ import java.util.Collection; import java.util.Map; import java.util.Map.Entry; -import org.apache.hadoop.conf.Configuration; -import org.apache.rya.api.RdfCloudTripleStoreConfiguration; import org.apache.rya.api.RdfCloudTripleStoreUtils; import org.apache.rya.api.domain.RyaStatement; import org.apache.rya.api.domain.RyaStatement.RyaStatementBuilder; @@ -37,32 +35,27 @@ import org.openrdf.query.BindingSet; import org.openrdf.query.impl.MapBindingSet; import com.google.common.collect.Lists; +import com.mongodb.MongoClient; import info.aduna.iteration.CloseableIteration; -public class MongoDBQueryEngineTest extends MongoRyaTestBase { - - // private dao; - // private configuration; +public class MongoDBQueryEngineTest extends MongoTestBase { + private MongoClient client; + private MongoDBRyaDAO dao; private MongoDBQueryEngine engine; - private MongoDBRdfConfiguration configuration; + + private static final String DB_NAME = "testInstance"; @Before public void setUp() throws Exception { - // Set up Mongo/Rya - final Configuration conf = new Configuration(); - conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, getDbName()); - conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya_"); - conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, "rya_"); - configuration = new MongoDBRdfConfiguration(conf); - final int port = mongoClient.getServerAddressList().get(0).getPort(); - configuration.set(MongoDBRdfConfiguration.MONGO_INSTANCE_PORT, Integer.toString(port)); + client = super.getMongoClient(); + conf.setAuths("A", "B", "C"); - engine = new MongoDBQueryEngine(configuration, mongoClient); + engine = new MongoDBQueryEngine(conf, client); // Add Data - final MongoDBRyaDAO dao = new MongoDBRyaDAO(configuration, mongoClient); + final MongoDBRyaDAO dao = new MongoDBRyaDAO(conf, client); dao.add(getStatement("u:a", "u:tt", "u:b")); dao.add(getStatement("u:a", "u:tt", "u:c")); } @@ -93,7 +86,7 @@ public class MongoDBQueryEngineTest extends MongoRyaTestBase { @Test public void statementQuery() throws Exception { final RyaStatement s = getStatement("u:a", null, null); - Assert.assertEquals(2, size(engine.query(s, configuration))); + Assert.assertEquals(2, size(engine.query(s, conf))); } @SuppressWarnings("unchecked") @@ -106,7 +99,7 @@ public class MongoDBQueryEngineTest extends MongoRyaTestBase { final Map.Entry<RyaStatement, BindingSet> e1 = new RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s1, bs1); final Collection<Entry<RyaStatement, BindingSet>> stmts1 = Lists.newArrayList(e1); - Assert.assertEquals(1, size(engine.queryWithBindingSet(stmts1, configuration))); + Assert.assertEquals(1, size(engine.queryWithBindingSet(stmts1, conf))); final MapBindingSet bs2 = new MapBindingSet(); @@ -117,14 +110,14 @@ public class MongoDBQueryEngineTest extends MongoRyaTestBase { final Map.Entry<RyaStatement, BindingSet> e2 = new RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s2, bs2); final Collection<Entry<RyaStatement, BindingSet>> stmts2 = Lists.newArrayList(e1, e2); - Assert.assertEquals(2, size(engine.queryWithBindingSet(stmts2, configuration))); + Assert.assertEquals(2, size(engine.queryWithBindingSet(stmts2, conf))); final Map.Entry<RyaStatement, BindingSet> e3 = new RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s2, bs1); final Map.Entry<RyaStatement, BindingSet> e4 = new RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s1, bs2); - + final Collection<Entry<RyaStatement, BindingSet>> stmts3 = Lists.newArrayList(e1, e2, e3, e4); - Assert.assertEquals(4, size(engine.queryWithBindingSet(stmts3, configuration))); + Assert.assertEquals(4, size(engine.queryWithBindingSet(stmts3, conf))); } @SuppressWarnings("unchecked") @Test @@ -136,7 +129,7 @@ public class MongoDBQueryEngineTest extends MongoRyaTestBase { final Map.Entry<RyaStatement, BindingSet> e1 = new RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s, bs1); final Collection<Entry<RyaStatement, BindingSet>> stmts1 = Lists.newArrayList(e1); - Assert.assertEquals(2, size(engine.queryWithBindingSet(stmts1, configuration))); + Assert.assertEquals(2, size(engine.queryWithBindingSet(stmts1, conf))); final MapBindingSet bs2 = new MapBindingSet(); @@ -145,6 +138,6 @@ public class MongoDBQueryEngineTest extends MongoRyaTestBase { final Map.Entry<RyaStatement, BindingSet> e2 = new RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s, bs2); final Collection<Entry<RyaStatement, BindingSet>> stmts2 = Lists.newArrayList(e1, e2); - Assert.assertEquals(4, size(engine.queryWithBindingSet(stmts2, configuration))); + Assert.assertEquals(4, size(engine.queryWithBindingSet(stmts2, conf))); } } http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java index dc3e026..5f3605e 100644 --- a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java +++ b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java @@ -27,8 +27,6 @@ import static org.junit.Assert.assertTrue; import java.io.IOException; import org.apache.accumulo.core.security.Authorizations; -import org.apache.hadoop.conf.Configuration; -import org.apache.rya.api.RdfCloudTripleStoreConfiguration; import org.apache.rya.api.domain.RyaStatement; import org.apache.rya.api.domain.RyaStatement.RyaStatementBuilder; import org.apache.rya.api.domain.RyaURI; @@ -41,26 +39,20 @@ import org.calrissian.mango.collect.CloseableIterable; import org.junit.Before; import org.junit.Test; +import com.mongodb.MongoClient; import com.mongodb.MongoException; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; -public class MongoDBRyaDAOIT extends MongoRyaTestBase { - +public class MongoDBRyaDAOIT extends MongoTestBase { + private MongoClient client; private MongoDBRyaDAO dao; - private MongoDBRdfConfiguration configuration; @Before public void setUp() throws IOException, RyaDAOException{ - final Configuration conf = new Configuration(); - conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, getDbName()); - conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya_"); - conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, "rya_"); - configuration = new MongoDBRdfConfiguration(conf); - configuration.setAuths("A", "B", "C"); - final int port = mongoClient.getServerAddressList().get(0).getPort(); - configuration.set(MongoDBRdfConfiguration.MONGO_INSTANCE_PORT, Integer.toString(port)); - dao = new MongoDBRyaDAO(configuration, mongoClient); + conf.setAuths("A", "B", "C"); + client = super.getMongoClient(); + dao = new MongoDBRyaDAO(conf, client); } @Test @@ -68,7 +60,7 @@ public class MongoDBRyaDAOIT extends MongoRyaTestBase { final RyaStatementBuilder builder = new RyaStatementBuilder(); builder.setPredicate(new RyaURI("http://temp.com")); builder.setColumnVisibility(new DocumentVisibility("A").flatten()); - dao.delete(builder.build(), configuration); + dao.delete(builder.build(), conf); } @Test @@ -79,8 +71,8 @@ public class MongoDBRyaDAOIT extends MongoRyaTestBase { builder.setObject(new RyaURI("http://object.com")); builder.setColumnVisibility(new DocumentVisibility("B").flatten()); - final MongoDatabase db = mongoClient.getDatabase(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); - final MongoCollection<Document> coll = db.getCollection(configuration.getTriplesCollectionName()); + final MongoDatabase db = client.getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); + final MongoCollection<Document> coll = db.getCollection(conf.getTriplesCollectionName()); dao.add(builder.build()); @@ -99,16 +91,16 @@ public class MongoDBRyaDAOIT extends MongoRyaTestBase { builder.setObject(new RyaURI("http://object.com")); builder.setColumnVisibility(new DocumentVisibility("C").flatten()); final RyaStatement statement = builder.build(); - final MongoDatabase db = mongoClient.getDatabase(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); - final MongoCollection<Document> coll = db.getCollection(configuration.getTriplesCollectionName()); + final MongoDatabase db = client.getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); + final MongoCollection<Document> coll = db.getCollection(conf.getTriplesCollectionName()); dao.add(statement); - assertEquals(coll.count(),1); + assertEquals(1, coll.count()); - dao.delete(statement, configuration); + dao.delete(statement, conf); - assertEquals(coll.count(),0); + assertEquals(0, coll.count()); } @@ -122,12 +114,12 @@ public class MongoDBRyaDAOIT extends MongoRyaTestBase { builder.setColumnVisibility(new DocumentVisibility("A&B&C").flatten()); final RyaStatement statement = builder.build(); - final MongoDatabase db = mongoClient.getDatabase(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); - final MongoCollection<Document> coll = db.getCollection(configuration.getTriplesCollectionName()); + final MongoDatabase db = client.getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); + final MongoCollection<Document> coll = db.getCollection(conf.getTriplesCollectionName()); dao.add(statement); - assertEquals(coll.count(),1); + assertEquals(1, coll.count()); final RyaStatementBuilder builder2 = new RyaStatementBuilder(); builder2.setPredicate(new RyaURI("http://temp.com")); @@ -135,9 +127,9 @@ public class MongoDBRyaDAOIT extends MongoRyaTestBase { builder2.setContext(new RyaURI("http://context3.com")); final RyaStatement query = builder2.build(); - dao.delete(query, configuration); + dao.delete(query, conf); - assertEquals(coll.count(),1); + assertEquals(1, coll.count()); } @Test @@ -286,7 +278,8 @@ public class MongoDBRyaDAOIT extends MongoRyaTestBase { // Doc requires ("A" and "B") or ("C" and "D") and user has "A" and "B" and "E" = User can view assertTrue(testVisibilityStatement("(A&B)|(C&D)", new Authorizations("A", "B", "E"))); - // Doc requires ("A" and "B") or ("C" and "D") and user has "C" and "D" and "E" = User can view + // Doc requires ("A" and "B")mongoClient or ("C" and "D") and user has + // "C" and "D" and "E" = User can view assertTrue(testVisibilityStatement("(A&B)|(C&D)", new Authorizations("C", "D", "E"))); // Doc requires ("A" and "B") or ("C" and "D") and user has "A" and "C" = User CANNOT view @@ -505,8 +498,8 @@ public class MongoDBRyaDAOIT extends MongoRyaTestBase { * @throws RyaDAOException */ private boolean testVisibilityStatement(final String documentVisibility, final Authorizations userAuthorizations) throws RyaDAOException { - final MongoDatabase db = mongoClient.getDatabase(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); - final MongoCollection<Document> coll = db.getCollection(configuration.getTriplesCollectionName()); + final MongoDatabase db = client.getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); + final MongoCollection<Document> coll = db.getCollection(conf.getTriplesCollectionName()); final RyaStatement statement = buildVisibilityTestRyaStatement(documentVisibility); @@ -514,18 +507,18 @@ public class MongoDBRyaDAOIT extends MongoRyaTestBase { dao.add(statement); dao.getConf().setAuths(AuthorizationsUtil.getAuthorizationsStringArray(userAuthorizations != null ? userAuthorizations : Authorizations.EMPTY)); - assertEquals(coll.count(), 1); + assertEquals(1, coll.count()); final MongoDBQueryEngine queryEngine = (MongoDBQueryEngine) dao.getQueryEngine(); - queryEngine.setConf(configuration); + queryEngine.setConf(conf); final CloseableIterable<RyaStatement> iter = queryEngine.query(new RyaQuery(statement)); // Check if user has authorization to view document based on its visibility final boolean hasNext = iter.iterator().hasNext(); // Reset - dao.delete(statement, configuration); - assertEquals(coll.count(), 0); + dao.delete(statement, conf); + assertEquals(0, coll.count()); dao.getConf().setAuths(AuthorizationsUtil.getAuthorizationsStringArray(Authorizations.EMPTY)); return hasNext; http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOTest.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOTest.java b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOTest.java index c7efbf1..8cf75f1 100644 --- a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOTest.java +++ b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOTest.java @@ -21,10 +21,7 @@ package org.apache.rya.mongodb; import static org.junit.Assert.assertEquals; import java.io.IOException; -import java.util.concurrent.atomic.AtomicInteger; -import org.apache.hadoop.conf.Configuration; -import org.apache.rya.api.RdfCloudTripleStoreConfiguration; import org.apache.rya.api.domain.RyaStatement; import org.apache.rya.api.domain.RyaStatement.RyaStatementBuilder; import org.apache.rya.api.domain.RyaURI; @@ -33,33 +30,26 @@ import org.bson.Document; import org.junit.Before; import org.junit.Test; +import com.mongodb.MongoClient; import com.mongodb.MongoException; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoDatabase; -public class MongoDBRyaDAOTest extends MongoRyaTestBase { - +public class MongoDBRyaDAOTest extends MongoTestBase { + private MongoClient client; private MongoDBRyaDAO dao; - private MongoDBRdfConfiguration configuration; @Before public void setUp() throws IOException, RyaDAOException{ - final Configuration conf = new Configuration(); - conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, getDbName()); - conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya_"); - conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, "rya_"); - configuration = new MongoDBRdfConfiguration(conf); - final int port = mongoClient.getServerAddressList().get(0).getPort(); - configuration.set(MongoDBRdfConfiguration.MONGO_INSTANCE_PORT, ""+port); - dao = new MongoDBRyaDAO(configuration, mongoClient); + client = super.getMongoClient(); + dao = new MongoDBRyaDAO(conf, client); } - @Test public void testDeleteWildcard() throws RyaDAOException { final RyaStatementBuilder builder = new RyaStatementBuilder(); builder.setPredicate(new RyaURI("http://temp.com")); - dao.delete(builder.build(), configuration); + dao.delete(builder.build(), conf); } @@ -70,8 +60,8 @@ public class MongoDBRyaDAOTest extends MongoRyaTestBase { builder.setSubject(new RyaURI("http://subject.com")); builder.setObject(new RyaURI("http://object.com")); - final MongoDatabase db = mongoClient.getDatabase(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); - final MongoCollection<Document> coll = db.getCollection(configuration.getTriplesCollectionName()); + final MongoDatabase db = client.getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); + final MongoCollection<Document> coll = db.getCollection(conf.getTriplesCollectionName()); dao.add(builder.build()); @@ -87,14 +77,14 @@ public class MongoDBRyaDAOTest extends MongoRyaTestBase { builder.setObject(new RyaURI("http://object.com")); final RyaStatement statement = builder.build(); - final MongoDatabase db = mongoClient.getDatabase(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); - final MongoCollection<Document> coll = db.getCollection(configuration.getTriplesCollectionName()); + final MongoDatabase db = client.getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); + final MongoCollection<Document> coll = db.getCollection(conf.getTriplesCollectionName()); dao.add(statement); assertEquals(coll.count(),1); - dao.delete(statement, configuration); + dao.delete(statement, conf); assertEquals(coll.count(),0); @@ -109,8 +99,8 @@ public class MongoDBRyaDAOTest extends MongoRyaTestBase { builder.setContext(new RyaURI("http://context.com")); final RyaStatement statement = builder.build(); - final MongoDatabase db = mongoClient.getDatabase(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); - final MongoCollection<Document> coll = db.getCollection(configuration.getTriplesCollectionName()); + final MongoDatabase db = client.getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); + final MongoCollection<Document> coll = db.getCollection(conf.getTriplesCollectionName()); dao.add(statement); @@ -122,7 +112,7 @@ public class MongoDBRyaDAOTest extends MongoRyaTestBase { builder2.setContext(new RyaURI("http://context3.com")); final RyaStatement query = builder2.build(); - dao.delete(query, configuration); + dao.delete(query, conf); assertEquals(coll.count(),1); } http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoTestBase.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoTestBase.java b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoTestBase.java new file mode 100644 index 0000000..e4578f2 --- /dev/null +++ b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoTestBase.java @@ -0,0 +1,60 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.rya.mongodb; + +import org.apache.hadoop.conf.Configuration; +import org.junit.After; +import org.junit.Before; + +import com.mongodb.MongoClient; + +/** + * A base class that may be used when implementing Mongo DB tests that use the + * JUnit framework. + */ +public class MongoTestBase { + + private static MongoClient mongoClient = null; + protected static MongoDBRdfConfiguration conf; + + @Before + public void setupTest() throws Exception { + conf = new MongoDBRdfConfiguration( new Configuration() ); + conf.setBoolean("sc.useMongo", true); + conf.setTablePrefix("test_"); + conf.setMongoDBName("testDB"); + mongoClient = MockMongoSingleton.getInstance(); + conf.setMongoClient(mongoClient); + } + + @After + public void cleanupTest() { + // Remove any DBs that were created by the test. + for(final String dbName : mongoClient.listDatabaseNames()) { + mongoClient.dropDatabase(dbName); + } + } + + /** + * @return A {@link MongoClient} that is connected to the embedded instance of Mongo DB. + */ + public MongoClient getMongoClient() { + return mongoClient; + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java index 8d1694b..cb276cb 100644 --- a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java +++ b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java @@ -23,7 +23,6 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import java.io.IOException; import java.util.Date; import org.apache.rya.api.instance.RyaDetails; @@ -41,38 +40,22 @@ import org.apache.rya.api.instance.RyaDetailsRepository.AlreadyInitializedExcept import org.apache.rya.api.instance.RyaDetailsRepository.ConcurrentUpdateException; import org.apache.rya.api.instance.RyaDetailsRepository.NotInitializedException; import org.apache.rya.api.instance.RyaDetailsRepository.RyaDetailsRepositoryException; -import org.junit.AfterClass; +import org.apache.rya.mongodb.MongoTestBase; import org.junit.Before; -import org.junit.BeforeClass; import org.junit.Test; import com.google.common.base.Optional; import com.mongodb.MongoClient; -import com.mongodb.MongoException; - -import de.flapdoodle.embed.mongo.tests.MongodForTestsFactory; /** * Tests the methods of {@link AccumuloRyaDetailsRepository} by using a {@link MiniAccumuloCluster}. */ -public class MongoRyaDetailsRepositoryIT { - - private static MongoClient client = null; - - @BeforeClass - public static void startMiniAccumulo() throws MongoException, IOException { - final MongodForTestsFactory mongoFactory = new MongodForTestsFactory(); - client = mongoFactory.newMongo(); - } +public class MongoRyaDetailsRepositoryIT extends MongoTestBase { + private MongoClient client; @Before - public void clearLastTest() { - client.dropDatabase("testInstance"); - } - - @AfterClass - public static void stopMiniAccumulo() throws IOException, InterruptedException { - client.close(); + public void startMongo() { + client = super.getMongoClient(); } @Test http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/main/java/org/apache/rya/indexing/mongodb/AbstractMongoIndexer.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/org/apache/rya/indexing/mongodb/AbstractMongoIndexer.java b/extras/indexing/src/main/java/org/apache/rya/indexing/mongodb/AbstractMongoIndexer.java index 69ca274..f8ab40f 100644 --- a/extras/indexing/src/main/java/org/apache/rya/indexing/mongodb/AbstractMongoIndexer.java +++ b/extras/indexing/src/main/java/org/apache/rya/indexing/mongodb/AbstractMongoIndexer.java @@ -121,7 +121,6 @@ public abstract class AbstractMongoIndexer<T extends IndexingMongoDBStorageStrat @Override public void close() throws IOException { - mongoClient.close(); } @Override http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/main/java/org/apache/rya/indexing/mongodb/MongoDbSmartUri.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/org/apache/rya/indexing/mongodb/MongoDbSmartUri.java b/extras/indexing/src/main/java/org/apache/rya/indexing/mongodb/MongoDbSmartUri.java index b40c9b6..5d353b4 100644 --- a/extras/indexing/src/main/java/org/apache/rya/indexing/mongodb/MongoDbSmartUri.java +++ b/extras/indexing/src/main/java/org/apache/rya/indexing/mongodb/MongoDbSmartUri.java @@ -25,7 +25,6 @@ import java.util.Map; import java.util.Optional; import java.util.Set; -import org.apache.commons.io.IOUtils; import org.apache.hadoop.conf.Configuration; import org.apache.rya.api.domain.RyaURI; import org.apache.rya.indexing.entity.model.Entity; @@ -159,13 +158,6 @@ public class MongoDbSmartUri implements SmartUriStorage { } /** - * Shutdown the MongoDB client. - */ - public void shutdown() { - IOUtils.closeQuietly(mongoClient); - } - - /** * @return the {@link EntityStorage}. */ public EntityStorage getEntityStorage() { http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/test/java/org/apache/rya/indexing/entity/query/EntityQueryNodeTest.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/indexing/entity/query/EntityQueryNodeTest.java b/extras/indexing/src/test/java/org/apache/rya/indexing/entity/query/EntityQueryNodeTest.java index d2d9a54..874a40e 100644 --- a/extras/indexing/src/test/java/org/apache/rya/indexing/entity/query/EntityQueryNodeTest.java +++ b/extras/indexing/src/test/java/org/apache/rya/indexing/entity/query/EntityQueryNodeTest.java @@ -32,7 +32,7 @@ import org.apache.rya.indexing.entity.model.Property; import org.apache.rya.indexing.entity.model.Type; import org.apache.rya.indexing.entity.storage.EntityStorage; import org.apache.rya.indexing.entity.storage.mongo.MongoEntityStorage; -import org.apache.rya.mongodb.MockMongoFactory; +import org.apache.rya.mongodb.MongoTestBase; import org.junit.Test; import org.openrdf.model.ValueFactory; import org.openrdf.model.impl.ValueFactoryImpl; @@ -46,14 +46,13 @@ import org.openrdf.query.impl.MapBindingSet; import org.openrdf.query.parser.sparql.SPARQLParser; import com.google.common.collect.ImmutableSet; -import com.mongodb.MongoClient; import info.aduna.iteration.CloseableIteration; /** * Unit tests the methods of {@link EntityQueryNode}. */ -public class EntityQueryNodeTest { +public class EntityQueryNodeTest extends MongoTestBase { private static final Type PERSON_TYPE = new Type(new RyaURI("urn:person"), @@ -152,8 +151,7 @@ public class EntityQueryNodeTest { @Test public void evaluate_constantSubject() throws Exception { - final MongoClient client = MockMongoFactory.newFactory().newMongoClient(); - final EntityStorage storage = new MongoEntityStorage(client, "testDB"); + final EntityStorage storage = new MongoEntityStorage(super.getMongoClient(), "testDB"); final ValueFactory vf = ValueFactoryImpl.getInstance(); final RyaURI subject = new RyaURI("urn:SSN:111-11-1111"); final Entity entity = Entity.builder() @@ -188,8 +186,7 @@ public class EntityQueryNodeTest { @Test public void evaluate_variableSubject() throws Exception { - final MongoClient client = MockMongoFactory.newFactory().newMongoClient(); - final EntityStorage storage = new MongoEntityStorage(client, "testDB"); + final EntityStorage storage = new MongoEntityStorage(super.getMongoClient(), "testDB"); final ValueFactory vf = ValueFactoryImpl.getInstance(); RyaURI subject = new RyaURI("urn:SSN:111-11-1111"); final Entity bob = Entity.builder() @@ -242,8 +239,7 @@ public class EntityQueryNodeTest { @Test public void evaluate_constantObject() throws Exception { - final MongoClient client = MockMongoFactory.newFactory().newMongoClient(); - final EntityStorage storage = new MongoEntityStorage(client, "testDB"); + final EntityStorage storage = new MongoEntityStorage(super.getMongoClient(), "testDB"); final ValueFactory vf = ValueFactoryImpl.getInstance(); final RyaURI subject = new RyaURI("urn:SSN:111-11-1111"); final Entity entity = Entity.builder() http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoEntityStorageIT.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoEntityStorageIT.java b/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoEntityStorageIT.java index 5d26bc0..d8856fe 100644 --- a/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoEntityStorageIT.java +++ b/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoEntityStorageIT.java @@ -36,6 +36,7 @@ import org.apache.rya.indexing.entity.storage.EntityStorage; import org.apache.rya.indexing.entity.storage.EntityStorage.EntityAlreadyExistsException; import org.apache.rya.indexing.entity.storage.EntityStorage.EntityStorageException; import org.apache.rya.indexing.entity.storage.EntityStorage.StaleUpdateException; +import org.apache.rya.mongodb.MongoTestBase; import org.junit.Test; import org.openrdf.model.vocabulary.XMLSchema; @@ -45,7 +46,7 @@ import com.google.common.collect.Sets; /** * Integration tests the methods of {@link MongoEntityStorage}. */ -public class MongoEntityStorageIT extends MongoITBase { +public class MongoEntityStorageIT extends MongoTestBase { private static final String RYA_INSTANCE_NAME = "testInstance"; http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoITBase.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoITBase.java b/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoITBase.java deleted file mode 100644 index 692d1aa..0000000 --- a/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoITBase.java +++ /dev/null @@ -1,80 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.rya.indexing.entity.storage.mongo; - -import java.util.HashSet; -import java.util.Set; - -import org.apache.hadoop.conf.Configuration; -import org.apache.rya.mongodb.MockMongoFactory; -import org.apache.rya.mongodb.MongoConnectorFactory; -import org.apache.rya.mongodb.MongoDBRdfConfiguration; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; - -import com.mongodb.MongoClient; - -/** - * A base class that may be used when implementing Mongo DB integration tests that - * use the JUnit framework. - */ -public class MongoITBase { - - private MongoClient mongoClient = null; - private Set<String> originalDbNames = null; - protected MongoDBRdfConfiguration conf; - - @Before - public void setupTest() throws Exception { - conf = new MongoDBRdfConfiguration( new Configuration() ); - conf.setMongoDBName("testDB"); - mongoClient = MockMongoFactory.newFactory().newMongoClient(); - conf.setMongoClient(mongoClient); - - - // Store the names of the DBs that are present before running the test. - originalDbNames = new HashSet<>(); - for(final String name : mongoClient.listDatabaseNames()) { - originalDbNames.add(name); - } - } - - @After - public void cleanupTest() { - // Remove any DBs that were created by the test. - for(final String dbName : mongoClient.listDatabaseNames()) { - if(!originalDbNames.contains(dbName)) { - mongoClient.dropDatabase(dbName); - } - } - } - - @AfterClass - public static void shutdown() { - MongoConnectorFactory.closeMongoClient(); - } - - /** - * @return A {@link MongoClient} that is connected to the embedded instance of Mongo DB. - */ - public MongoClient getMongoClient() { - return mongoClient; - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoTypeStorageIT.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoTypeStorageIT.java b/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoTypeStorageIT.java index 56c10c0..cff4f26 100644 --- a/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoTypeStorageIT.java +++ b/extras/indexing/src/test/java/org/apache/rya/indexing/entity/storage/mongo/MongoTypeStorageIT.java @@ -30,6 +30,7 @@ import org.apache.rya.api.domain.RyaURI; import org.apache.rya.indexing.entity.model.Type; import org.apache.rya.indexing.entity.storage.TypeStorage; import org.apache.rya.indexing.entity.storage.TypeStorage.TypeStorageException; +import org.apache.rya.mongodb.MongoTestBase; import org.junit.Test; import com.google.common.collect.ImmutableSet; @@ -38,7 +39,7 @@ import com.google.common.collect.Sets; /** * Integration tests the methods of {@link MongoTypeStorage}. */ -public class MongoTypeStorageIT extends MongoITBase { +public class MongoTypeStorageIT extends MongoTestBase { private static final String RYA_INSTANCE_NAME = "testInstance"; http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/test/java/org/apache/rya/indexing/entity/update/mongo/MongoEntityIndexerIT.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/indexing/entity/update/mongo/MongoEntityIndexerIT.java b/extras/indexing/src/test/java/org/apache/rya/indexing/entity/update/mongo/MongoEntityIndexerIT.java index a33ddd4..875d54e 100644 --- a/extras/indexing/src/test/java/org/apache/rya/indexing/entity/update/mongo/MongoEntityIndexerIT.java +++ b/extras/indexing/src/test/java/org/apache/rya/indexing/entity/update/mongo/MongoEntityIndexerIT.java @@ -31,8 +31,8 @@ import org.apache.rya.indexing.entity.model.Type; import org.apache.rya.indexing.entity.storage.EntityStorage; import org.apache.rya.indexing.entity.storage.TypeStorage; import org.apache.rya.indexing.entity.storage.mongo.MongoEntityStorage; -import org.apache.rya.indexing.entity.storage.mongo.MongoITBase; import org.apache.rya.indexing.entity.storage.mongo.MongoTypeStorage; +import org.apache.rya.mongodb.MongoTestBase; import org.junit.Before; import org.junit.Test; import org.openrdf.model.vocabulary.RDF; @@ -44,7 +44,7 @@ import com.google.common.collect.Sets; /** * Integration tests the methods of {@link MongoEntityIndexer}. */ -public class MongoEntityIndexerIT extends MongoITBase { +public class MongoEntityIndexerIT extends MongoTestBase { private static final String RYA_INSTANCE_NAME = "testDB"; http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/test/java/org/apache/rya/indexing/external/PrecompJoinOptimizerTest2.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/indexing/external/PrecompJoinOptimizerTest2.java b/extras/indexing/src/test/java/org/apache/rya/indexing/external/PrecompJoinOptimizerTest2.java index ba26a4b..35e4ca3 100644 --- a/extras/indexing/src/test/java/org/apache/rya/indexing/external/PrecompJoinOptimizerTest2.java +++ b/extras/indexing/src/test/java/org/apache/rya/indexing/external/PrecompJoinOptimizerTest2.java @@ -686,7 +686,8 @@ public class PrecompJoinOptimizerTest2 { .getTupleExpr())); } - Assert.assertTrue(qSet.containsAll(set) && eTupSet.size() == 1); + Assert.assertTrue(qSet.containsAll(set)); + Assert.assertEquals(3, eTupSet.size()); } @Test http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoDbSmartUriIT.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoDbSmartUriIT.java b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoDbSmartUriIT.java new file mode 100644 index 0000000..4dc0e8e --- /dev/null +++ b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoDbSmartUriIT.java @@ -0,0 +1,309 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.rya.indexing.mongo; + +import static org.apache.rya.api.domain.RyaTypeUtils.booleanRyaType; +import static org.apache.rya.api.domain.RyaTypeUtils.byteRyaType; +import static org.apache.rya.api.domain.RyaTypeUtils.dateRyaType; +import static org.apache.rya.api.domain.RyaTypeUtils.doubleRyaType; +import static org.apache.rya.api.domain.RyaTypeUtils.floatRyaType; +import static org.apache.rya.api.domain.RyaTypeUtils.intRyaType; +import static org.apache.rya.api.domain.RyaTypeUtils.longRyaType; +import static org.apache.rya.api.domain.RyaTypeUtils.shortRyaType; +import static org.apache.rya.api.domain.RyaTypeUtils.stringRyaType; +import static org.apache.rya.api.domain.RyaTypeUtils.uriRyaType; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.net.URISyntaxException; +import java.util.Date; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.rya.api.domain.RyaSchema; +import org.apache.rya.api.domain.RyaURI; +import org.apache.rya.api.resolver.RdfToRyaConversions; +import org.apache.rya.api.resolver.RyaToRdfConversions; +import org.apache.rya.indexing.entity.model.Entity; +import org.apache.rya.indexing.entity.model.Property; +import org.apache.rya.indexing.entity.model.Type; +import org.apache.rya.indexing.entity.model.TypedEntity; +import org.apache.rya.indexing.entity.query.EntityQueryNode; +import org.apache.rya.indexing.entity.storage.mongo.ConvertingCursor; +import org.apache.rya.indexing.mongodb.MongoDbSmartUri; +import org.apache.rya.indexing.smarturi.SmartUriAdapter; +import org.apache.rya.indexing.smarturi.SmartUriException; +import org.apache.rya.mongodb.MongoTestBase; +import org.joda.time.DateTime; +import org.junit.Before; +import org.junit.Test; +import org.openrdf.model.URI; +import org.openrdf.model.Value; +import org.openrdf.model.ValueFactory; +import org.openrdf.model.impl.URIImpl; +import org.openrdf.model.impl.ValueFactoryImpl; +import org.openrdf.model.vocabulary.RDF; +import org.openrdf.query.BindingSet; +import org.openrdf.query.MalformedQueryException; +import org.openrdf.query.QueryEvaluationException; +import org.openrdf.query.algebra.StatementPattern; +import org.openrdf.query.algebra.evaluation.QueryBindingSet; +import org.openrdf.query.algebra.helpers.StatementPatternCollector; +import org.openrdf.query.parser.sparql.SPARQLParser; + +import com.beust.jcommander.internal.Lists; +import com.google.common.collect.ImmutableSet; + +import info.aduna.iteration.CloseableIteration; + +/** + * Tests for MongoDB based Smart URI. + */ +public class MongoDbSmartUriIT extends MongoTestBase { + private static final String NAMESPACE = RyaSchema.NAMESPACE; + private static final ValueFactory VALUE_FACTORY = ValueFactoryImpl.getInstance(); + + // People + private static final RyaURI BOB = createRyaUri("Bob"); + + // Attributes + private static final RyaURI HAS_WEIGHT = createRyaUri("hasWeight"); + private static final RyaURI HAS_HEIGHT = createRyaUri("hasHeight"); + private static final RyaURI HAS_SSN = createRyaUri("hasSSN"); + private static final RyaURI HAS_AGE = createRyaUri("hasAge"); + private static final RyaURI HAS_INCOME = createRyaUri("hasIncome"); + private static final RyaURI HAS_NUMBER_OF_CHILDREN = createRyaUri("hasNumberOfChildren"); + private static final RyaURI HAS_LICENSE_NUMBER = createRyaUri("hasLicenseNumber"); + private static final RyaURI HAS_EYE_COLOR = createRyaUri("hasEyeColor"); + private static final RyaURI HAS_HAIR_COLOR = createRyaUri("hasHairColor"); + private static final RyaURI HAS_DATE_OF_BIRTH = createRyaUri("hasDateOfBirth"); + private static final RyaURI HAS_EXPIRATION_DATE = createRyaUri("hasExpirationDate"); + private static final RyaURI HAS_GLASSES = createRyaUri("hasGlasses"); + private static final RyaURI HAS_EMAIL_ADDRESS = createRyaUri("hasEmailAddress"); + private static final RyaURI HAS_ATTRIBUTE_SPACE = createRyaUri("has Attribute Space"); + private static final RyaURI HAS_MOTTO = createRyaUri("hasMotto"); + private static final RyaURI HAS_BLOOD_TYPE = createRyaUri("hasBloodType"); + private static final RyaURI HAS_SEX = createRyaUri("hasSex"); + private static final RyaURI HAS_ADDRESS = createRyaUri("hasAddress"); + private static final RyaURI HAS_POSITION_TITLE = createRyaUri("hasPositionTitle"); + private static final RyaURI HAS_WORK_ADDRESS = createRyaUri("hasWorkAddress"); + private static final RyaURI HAS_EXTENSION = createRyaUri("hasExtension"); + private static final RyaURI HAS_OFFICE_ROOM_NUMBER = createRyaUri("hasOfficeRoomNumber"); + + // Type URIs + private static final RyaURI PERSON_TYPE_URI = new RyaURI("urn:example/person"); + private static final RyaURI EMPLOYEE_TYPE_URI = new RyaURI("urn:example/employee"); + + // Entities + private static final Entity BOB_ENTITY = createBobEntity(); + + // Types + private static final Type PERSON_TYPE = createPersonType(); + private static final Type EMPLOYEE_TYPE = createEmployeeType(); + + private static MongoDbSmartUri smartUriConverter; + + @Before + public void setup() throws Exception { + smartUriConverter = new MongoDbSmartUri(conf); + } + + /** + * Creates a {@link RyaURI} for the specified local name. + * @param localName the URI's local name. + * @return the {@link RyraURI}. + */ + private static RyaURI createRyaUri(final String localName) { + return createRyaUri(NAMESPACE, localName); + } + + /** + * Creates a {@link RyaURI} for the specified local name. + * @param namespace the namespace. + * @param localName the URI's local name. + * @return the {@link RyraURI}. + */ + private static RyaURI createRyaUri(final String namespace, final String localName) { + return RdfToRyaConversions.convertURI(VALUE_FACTORY.createURI(namespace, localName)); + } + + private static Entity createBobEntity() { + final Entity bobEntity = Entity.builder() + .setSubject(BOB) + .setExplicitType(PERSON_TYPE_URI) + .setExplicitType(EMPLOYEE_TYPE_URI) + .setProperty(PERSON_TYPE_URI, new Property(HAS_WEIGHT, floatRyaType(250.75f))) + .setProperty(PERSON_TYPE_URI, new Property(HAS_HEIGHT, doubleRyaType(72.5))) + .setProperty(PERSON_TYPE_URI, new Property(HAS_SSN, stringRyaType("123-45-6789"))) + .setProperty(PERSON_TYPE_URI, new Property(HAS_AGE, shortRyaType((short) 40))) + .setProperty(PERSON_TYPE_URI, new Property(HAS_INCOME, intRyaType(50000))) + .setProperty(PERSON_TYPE_URI, new Property(HAS_NUMBER_OF_CHILDREN, byteRyaType((byte) 2))) + .setProperty(PERSON_TYPE_URI, new Property(HAS_LICENSE_NUMBER, longRyaType(123456789012L))) + .setProperty(PERSON_TYPE_URI, new Property(HAS_EYE_COLOR, stringRyaType("blue"))) + .setProperty(PERSON_TYPE_URI, new Property(HAS_HAIR_COLOR, stringRyaType("brown"))) + .setProperty(PERSON_TYPE_URI, new Property(HAS_DATE_OF_BIRTH, dateRyaType(new DateTime().minusYears(40)))) + .setProperty(PERSON_TYPE_URI, new Property(HAS_EXPIRATION_DATE, dateRyaType(new Date()))) + .setProperty(PERSON_TYPE_URI, new Property(HAS_GLASSES, booleanRyaType(true))) + .setProperty(PERSON_TYPE_URI, new Property(HAS_EMAIL_ADDRESS, uriRyaType(new URIImpl("mailto:bob.smitc...@gmail.com")))) + .setProperty(PERSON_TYPE_URI, new Property(HAS_ATTRIBUTE_SPACE, stringRyaType("attribute space"))) + .setProperty(PERSON_TYPE_URI, new Property(HAS_MOTTO, stringRyaType("!@#*\\&%20^ smörgåsbord"))) + .setProperty(PERSON_TYPE_URI, new Property(HAS_BLOOD_TYPE, stringRyaType("A+ blood type"))) + .setProperty(PERSON_TYPE_URI, new Property(HAS_SEX, stringRyaType("M"))) + .setProperty(PERSON_TYPE_URI, new Property(HAS_ADDRESS, stringRyaType("123 Fake St. Washington, DC 20024"))) + .setProperty(EMPLOYEE_TYPE_URI, new Property(HAS_POSITION_TITLE, stringRyaType("Assistant to the Regional Manager"))) + .setProperty(EMPLOYEE_TYPE_URI, new Property(HAS_WORK_ADDRESS, stringRyaType("987 Fake Office Rd. Washington, DC 20024"))) + .setProperty(EMPLOYEE_TYPE_URI, new Property(HAS_EXTENSION, shortRyaType((short) 555))) + .setProperty(EMPLOYEE_TYPE_URI, new Property(HAS_OFFICE_ROOM_NUMBER, shortRyaType((short) 9999))) + .build(); + + return bobEntity; + } + + private static Type createPersonType() { + final Type personType = new Type(PERSON_TYPE_URI, + ImmutableSet.<RyaURI>builder() + .add(HAS_WEIGHT) + .add(HAS_HEIGHT) + .add(HAS_SSN) + .add(HAS_AGE) + .add(HAS_INCOME) + .add(HAS_NUMBER_OF_CHILDREN) + .add(HAS_LICENSE_NUMBER) + .add(HAS_EYE_COLOR) + .add(HAS_HAIR_COLOR) + .add(HAS_DATE_OF_BIRTH) + .add(HAS_EXPIRATION_DATE) + .add(HAS_GLASSES) + .add(HAS_EMAIL_ADDRESS) + .add(HAS_ATTRIBUTE_SPACE) + .add(HAS_MOTTO) + .add(HAS_BLOOD_TYPE) + .add(HAS_SEX) + .add(HAS_ADDRESS) + .build()); + return personType; + } + + private static Type createEmployeeType() { + final Type employeeType = new Type(EMPLOYEE_TYPE_URI, + ImmutableSet.<RyaURI>builder() + .add(HAS_POSITION_TITLE) + .add(HAS_WORK_ADDRESS) + .add(HAS_EXTENSION) + .add(HAS_OFFICE_ROOM_NUMBER) + .build()); + return employeeType; + } + + private static String getRyaUriLocalName(final RyaURI ryaUri) { + return new URIImpl(ryaUri.getData()).getLocalName(); + } + + @Test + public void testSerializeDeserialize() throws SmartUriException, URISyntaxException { + final URI smartUri = SmartUriAdapter.serializeUriEntity(BOB_ENTITY); + final Entity resultEntity = SmartUriAdapter.deserializeUriEntity(smartUri); + assertEquals(BOB_ENTITY.getSubject(), resultEntity.getSubject()); + } + + @Test + public void testStorage() throws SmartUriException, MalformedQueryException, RuntimeException, QueryEvaluationException { + smartUriConverter.storeEntity(BOB_ENTITY); + + final String sparql = "SELECT * WHERE { " + + "<" + BOB.getData() + "> <" + RDF.TYPE + "> <" + PERSON_TYPE.getId().getData() + "> . " + + "<" + BOB.getData() + "> <" + HAS_SSN.getData() + "> ?ssn . " + + "<" + BOB.getData() + "> <" + HAS_AGE.getData() + "> ?age . " + + "<" + BOB.getData() + "> <" + HAS_WEIGHT.getData() + "> ?weight . " + + "<" + BOB.getData() + "> <" + HAS_ADDRESS.getData() + "> ?address . " + + "}"; + + final StatementPatternCollector spCollector = new StatementPatternCollector(); + new SPARQLParser().parseQuery(sparql, null).getTupleExpr().visit(spCollector); + final List<StatementPattern> patterns = spCollector.getStatementPatterns(); + final EntityQueryNode entityQueryNode = new EntityQueryNode(PERSON_TYPE, patterns, smartUriConverter.getEntityStorage()); + final QueryBindingSet queryBindingSet = new QueryBindingSet(); + final Property ssnProperty = BOB_ENTITY.lookupTypeProperty(PERSON_TYPE, HAS_SSN).get(); + queryBindingSet.addBinding(HAS_SSN.getData(), RyaToRdfConversions.convertValue(ssnProperty.getValue())); + + final CloseableIteration<BindingSet, QueryEvaluationException> iter = entityQueryNode.evaluate(queryBindingSet); + int count = 0; + // These should match what was used in the SPARQL query. + final List<String> queryParamNames = Lists.newArrayList("ssn", "age", "weight", "address"); + while (iter.hasNext()) { + final BindingSet bs = iter.next(); + assertTrue(bs.getBindingNames().containsAll(queryParamNames)); + count++; + } + assertEquals(count, 1); + } + + @Test + public void testUpdate() throws SmartUriException { + smartUriConverter.storeEntity(BOB_ENTITY); + + // New properties to add + final RyaURI hasNickName = createRyaUri("hasNickName"); + final RyaURI hasWindowOffice = createRyaUri("hasWindowOffice"); + + final Entity.Builder builder = Entity.builder(BOB_ENTITY); + builder.setProperty(PERSON_TYPE_URI, new Property(HAS_AGE, shortRyaType((short) 41))); + builder.setProperty(PERSON_TYPE_URI, new Property(hasNickName, stringRyaType("Bobby"))); + builder.setProperty(EMPLOYEE_TYPE_URI, new Property(HAS_POSITION_TITLE, stringRyaType("Assistant Regional Manager"))); + builder.setProperty(EMPLOYEE_TYPE_URI, new Property(hasWindowOffice, booleanRyaType(true))); + builder.setVersion(BOB_ENTITY.getVersion() + 1); + builder.rebuildSmartUri(); + + final Entity newBobEntity = builder.build(); + + smartUriConverter.updateEntity(BOB_ENTITY, newBobEntity); + + final Entity resultEntity = smartUriConverter.queryEntity(BOB_ENTITY.getSubject()); + assertEquals(newBobEntity.getVersion(), resultEntity.getVersion()); + assertEquals(newBobEntity.lookupTypeProperty(PERSON_TYPE, HAS_AGE), resultEntity.lookupTypeProperty(PERSON_TYPE, HAS_AGE)); + assertEquals(newBobEntity.lookupTypeProperty(PERSON_TYPE, hasNickName), resultEntity.lookupTypeProperty(PERSON_TYPE, hasNickName)); + assertEquals(newBobEntity.lookupTypeProperty(EMPLOYEE_TYPE, HAS_POSITION_TITLE), resultEntity.lookupTypeProperty(EMPLOYEE_TYPE, HAS_POSITION_TITLE)); + assertEquals(newBobEntity.lookupTypeProperty(EMPLOYEE_TYPE, hasWindowOffice), resultEntity.lookupTypeProperty(EMPLOYEE_TYPE, hasWindowOffice)); + assertEquals(newBobEntity.getSmartUri(), resultEntity.getSmartUri()); + final String resultUriString = resultEntity.getSmartUri().stringValue(); + assertTrue(resultUriString.contains(getRyaUriLocalName(hasWindowOffice))); + assertTrue(resultUriString.contains(getRyaUriLocalName(hasNickName))); + } + + @Test + public void testQuery() throws SmartUriException { + smartUriConverter.storeEntity(BOB_ENTITY); + + // Look up Person Type Entities that match Bob's SSN property + final Set<Property> properties = new LinkedHashSet<>(); + properties.add(BOB_ENTITY.lookupTypeProperty(PERSON_TYPE, HAS_SSN).get()); + final Map<URI, Value> map = SmartUriAdapter.propertiesToMap(properties); + + final ConvertingCursor<TypedEntity> cursor = smartUriConverter.queryEntity(PERSON_TYPE, map); + int count = 0; + while (cursor.hasNext()) { + final TypedEntity typedEntity = cursor.next(); + System.out.println(typedEntity); + count++; + } + assertEquals(count, 1); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoDbSmartUriTest.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoDbSmartUriTest.java b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoDbSmartUriTest.java deleted file mode 100644 index dff271f..0000000 --- a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoDbSmartUriTest.java +++ /dev/null @@ -1,332 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.rya.indexing.mongo; - -import static org.apache.rya.api.domain.RyaTypeUtils.booleanRyaType; -import static org.apache.rya.api.domain.RyaTypeUtils.byteRyaType; -import static org.apache.rya.api.domain.RyaTypeUtils.dateRyaType; -import static org.apache.rya.api.domain.RyaTypeUtils.doubleRyaType; -import static org.apache.rya.api.domain.RyaTypeUtils.floatRyaType; -import static org.apache.rya.api.domain.RyaTypeUtils.intRyaType; -import static org.apache.rya.api.domain.RyaTypeUtils.longRyaType; -import static org.apache.rya.api.domain.RyaTypeUtils.shortRyaType; -import static org.apache.rya.api.domain.RyaTypeUtils.stringRyaType; -import static org.apache.rya.api.domain.RyaTypeUtils.uriRyaType; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.net.URISyntaxException; -import java.util.Date; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.apache.rya.api.domain.RyaSchema; -import org.apache.rya.api.domain.RyaURI; -import org.apache.rya.api.resolver.RdfToRyaConversions; -import org.apache.rya.api.resolver.RyaToRdfConversions; -import org.apache.rya.indexing.accumulo.ConfigUtils; -import org.apache.rya.indexing.entity.model.Entity; -import org.apache.rya.indexing.entity.model.Property; -import org.apache.rya.indexing.entity.model.Type; -import org.apache.rya.indexing.entity.model.TypedEntity; -import org.apache.rya.indexing.entity.query.EntityQueryNode; -import org.apache.rya.indexing.entity.storage.mongo.ConvertingCursor; -import org.apache.rya.indexing.mongodb.MongoDbSmartUri; -import org.apache.rya.indexing.smarturi.SmartUriAdapter; -import org.apache.rya.indexing.smarturi.SmartUriException; -import org.apache.rya.mongodb.MockMongoFactory; -import org.apache.rya.mongodb.MongoDBRdfConfiguration; -import org.joda.time.DateTime; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; -import org.openrdf.model.URI; -import org.openrdf.model.Value; -import org.openrdf.model.ValueFactory; -import org.openrdf.model.impl.URIImpl; -import org.openrdf.model.impl.ValueFactoryImpl; -import org.openrdf.model.vocabulary.RDF; -import org.openrdf.query.BindingSet; -import org.openrdf.query.MalformedQueryException; -import org.openrdf.query.QueryEvaluationException; -import org.openrdf.query.algebra.StatementPattern; -import org.openrdf.query.algebra.evaluation.QueryBindingSet; -import org.openrdf.query.algebra.helpers.StatementPatternCollector; -import org.openrdf.query.parser.sparql.SPARQLParser; - -import com.beust.jcommander.internal.Lists; -import com.google.common.collect.ImmutableSet; -import com.mongodb.MongoClient; - -import info.aduna.iteration.CloseableIteration; - -/** - * Tests for MongoDB based Smart URI. - */ -public class MongoDbSmartUriTest { - private static final String NAMESPACE = RyaSchema.NAMESPACE; - private static final ValueFactory VALUE_FACTORY = ValueFactoryImpl.getInstance(); - - // People - private static final RyaURI BOB = createRyaUri("Bob"); - - // Attributes - private static final RyaURI HAS_WEIGHT = createRyaUri("hasWeight"); - private static final RyaURI HAS_HEIGHT = createRyaUri("hasHeight"); - private static final RyaURI HAS_SSN = createRyaUri("hasSSN"); - private static final RyaURI HAS_AGE = createRyaUri("hasAge"); - private static final RyaURI HAS_INCOME = createRyaUri("hasIncome"); - private static final RyaURI HAS_NUMBER_OF_CHILDREN = createRyaUri("hasNumberOfChildren"); - private static final RyaURI HAS_LICENSE_NUMBER = createRyaUri("hasLicenseNumber"); - private static final RyaURI HAS_EYE_COLOR = createRyaUri("hasEyeColor"); - private static final RyaURI HAS_HAIR_COLOR = createRyaUri("hasHairColor"); - private static final RyaURI HAS_DATE_OF_BIRTH = createRyaUri("hasDateOfBirth"); - private static final RyaURI HAS_EXPIRATION_DATE = createRyaUri("hasExpirationDate"); - private static final RyaURI HAS_GLASSES = createRyaUri("hasGlasses"); - private static final RyaURI HAS_EMAIL_ADDRESS = createRyaUri("hasEmailAddress"); - private static final RyaURI HAS_ATTRIBUTE_SPACE = createRyaUri("has Attribute Space"); - private static final RyaURI HAS_MOTTO = createRyaUri("hasMotto"); - private static final RyaURI HAS_BLOOD_TYPE = createRyaUri("hasBloodType"); - private static final RyaURI HAS_SEX = createRyaUri("hasSex"); - private static final RyaURI HAS_ADDRESS = createRyaUri("hasAddress"); - private static final RyaURI HAS_POSITION_TITLE = createRyaUri("hasPositionTitle"); - private static final RyaURI HAS_WORK_ADDRESS = createRyaUri("hasWorkAddress"); - private static final RyaURI HAS_EXTENSION = createRyaUri("hasExtension"); - private static final RyaURI HAS_OFFICE_ROOM_NUMBER = createRyaUri("hasOfficeRoomNumber"); - - // Type URIs - private static final RyaURI PERSON_TYPE_URI = new RyaURI("urn:example/person"); - private static final RyaURI EMPLOYEE_TYPE_URI = new RyaURI("urn:example/employee"); - - // Entities - private static final Entity BOB_ENTITY = createBobEntity(); - - // Types - private static final Type PERSON_TYPE = createPersonType(); - private static final Type EMPLOYEE_TYPE = createEmployeeType(); - - private static MongoDBRdfConfiguration conf; - private static MongoDbSmartUri smartUriConverter; - - @BeforeClass - public static void setupClass() throws Exception { - conf = new MongoDBRdfConfiguration(); - conf.set(ConfigUtils.USE_MONGO, "true"); - conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, "test"); - conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya_"); - conf.setTablePrefix("another_"); - } - - @Before - public void setupTest() throws Exception { - final MongoClient client = MockMongoFactory.newFactory().newMongoClient(); - conf.setMongoClient(client); - - if (smartUriConverter != null) { - smartUriConverter.shutdown(); - } - smartUriConverter = new MongoDbSmartUri(conf); - } - - /** - * Creates a {@link RyaURI} for the specified local name. - * @param localName the URI's local name. - * @return the {@link RyraURI}. - */ - private static RyaURI createRyaUri(final String localName) { - return createRyaUri(NAMESPACE, localName); - //return new RyaURI("http://" + localName); - } - - /** - * Creates a {@link RyaURI} for the specified local name. - * @param namespace the namespace. - * @param localName the URI's local name. - * @return the {@link RyraURI}. - */ - private static RyaURI createRyaUri(final String namespace, final String localName) { - return RdfToRyaConversions.convertURI(VALUE_FACTORY.createURI(namespace, localName)); - } - - private static Entity createBobEntity() { - final Entity bobEntity = Entity.builder() - .setSubject(BOB) - .setExplicitType(PERSON_TYPE_URI) - .setExplicitType(EMPLOYEE_TYPE_URI) - .setProperty(PERSON_TYPE_URI, new Property(HAS_WEIGHT, floatRyaType(250.75f))) - .setProperty(PERSON_TYPE_URI, new Property(HAS_HEIGHT, doubleRyaType(72.5))) - .setProperty(PERSON_TYPE_URI, new Property(HAS_SSN, stringRyaType("123-45-6789"))) - .setProperty(PERSON_TYPE_URI, new Property(HAS_AGE, shortRyaType((short) 40))) - .setProperty(PERSON_TYPE_URI, new Property(HAS_INCOME, intRyaType(50000))) - .setProperty(PERSON_TYPE_URI, new Property(HAS_NUMBER_OF_CHILDREN, byteRyaType((byte) 2))) - .setProperty(PERSON_TYPE_URI, new Property(HAS_LICENSE_NUMBER, longRyaType(123456789012L))) - .setProperty(PERSON_TYPE_URI, new Property(HAS_EYE_COLOR, stringRyaType("blue"))) - .setProperty(PERSON_TYPE_URI, new Property(HAS_HAIR_COLOR, stringRyaType("brown"))) - .setProperty(PERSON_TYPE_URI, new Property(HAS_DATE_OF_BIRTH, dateRyaType(new DateTime().minusYears(40)))) - .setProperty(PERSON_TYPE_URI, new Property(HAS_EXPIRATION_DATE, dateRyaType(new Date()))) - .setProperty(PERSON_TYPE_URI, new Property(HAS_GLASSES, booleanRyaType(true))) - .setProperty(PERSON_TYPE_URI, new Property(HAS_EMAIL_ADDRESS, uriRyaType(new URIImpl("mailto:bob.smitc...@gmail.com")))) - .setProperty(PERSON_TYPE_URI, new Property(HAS_ATTRIBUTE_SPACE, stringRyaType("attribute space"))) - .setProperty(PERSON_TYPE_URI, new Property(HAS_MOTTO, stringRyaType("!@#*\\&%20^ smörgåsbord"))) - .setProperty(PERSON_TYPE_URI, new Property(HAS_BLOOD_TYPE, stringRyaType("A+ blood type"))) - .setProperty(PERSON_TYPE_URI, new Property(HAS_SEX, stringRyaType("M"))) - .setProperty(PERSON_TYPE_URI, new Property(HAS_ADDRESS, stringRyaType("123 Fake St. Washington, DC 20024"))) - .setProperty(EMPLOYEE_TYPE_URI, new Property(HAS_POSITION_TITLE, stringRyaType("Assistant to the Regional Manager"))) - .setProperty(EMPLOYEE_TYPE_URI, new Property(HAS_WORK_ADDRESS, stringRyaType("987 Fake Office Rd. Washington, DC 20024"))) - .setProperty(EMPLOYEE_TYPE_URI, new Property(HAS_EXTENSION, shortRyaType((short) 555))) - .setProperty(EMPLOYEE_TYPE_URI, new Property(HAS_OFFICE_ROOM_NUMBER, shortRyaType((short) 9999))) - .build(); - - return bobEntity; - } - - private static Type createPersonType() { - final Type personType = new Type(PERSON_TYPE_URI, - ImmutableSet.<RyaURI>builder() - .add(HAS_WEIGHT) - .add(HAS_HEIGHT) - .add(HAS_SSN) - .add(HAS_AGE) - .add(HAS_INCOME) - .add(HAS_NUMBER_OF_CHILDREN) - .add(HAS_LICENSE_NUMBER) - .add(HAS_EYE_COLOR) - .add(HAS_HAIR_COLOR) - .add(HAS_DATE_OF_BIRTH) - .add(HAS_EXPIRATION_DATE) - .add(HAS_GLASSES) - .add(HAS_EMAIL_ADDRESS) - .add(HAS_ATTRIBUTE_SPACE) - .add(HAS_MOTTO) - .add(HAS_BLOOD_TYPE) - .add(HAS_SEX) - .add(HAS_ADDRESS) - .build()); - return personType; - } - - private static Type createEmployeeType() { - final Type employeeType = new Type(EMPLOYEE_TYPE_URI, - ImmutableSet.<RyaURI>builder() - .add(HAS_POSITION_TITLE) - .add(HAS_WORK_ADDRESS) - .add(HAS_EXTENSION) - .add(HAS_OFFICE_ROOM_NUMBER) - .build()); - return employeeType; - } - - private static String getRyaUriLocalName(final RyaURI ryaUri) { - return new URIImpl(ryaUri.getData()).getLocalName(); - } - - @Test - public void testSerializeDeserialize() throws SmartUriException, URISyntaxException { - final URI smartUri = SmartUriAdapter.serializeUriEntity(BOB_ENTITY); - System.out.println(smartUri); - final Entity resultEntity = SmartUriAdapter.deserializeUriEntity(smartUri); - System.out.println(resultEntity); - assertEquals(BOB_ENTITY.getSubject(), resultEntity.getSubject()); - } - - @Test - public void testStorage() throws SmartUriException, MalformedQueryException, RuntimeException, QueryEvaluationException { - smartUriConverter.storeEntity(BOB_ENTITY); - - final String sparql = "SELECT * WHERE { " + - "<" + BOB.getData() + "> <" + RDF.TYPE + "> <" + PERSON_TYPE.getId().getData() + "> . " + - "<" + BOB.getData() + "> <" + HAS_SSN.getData() + "> ?ssn . " + - "<" + BOB.getData() + "> <" + HAS_AGE.getData() + "> ?age . " + - "<" + BOB.getData() + "> <" + HAS_WEIGHT.getData() + "> ?weight . " + - "<" + BOB.getData() + "> <" + HAS_ADDRESS.getData() + "> ?address . " + - "}"; - - final StatementPatternCollector spCollector = new StatementPatternCollector(); - new SPARQLParser().parseQuery(sparql, null).getTupleExpr().visit(spCollector); - final List<StatementPattern> patterns = spCollector.getStatementPatterns(); - final EntityQueryNode entityQueryNode = new EntityQueryNode(PERSON_TYPE, patterns, smartUriConverter.getEntityStorage()); - final QueryBindingSet queryBindingSet = new QueryBindingSet(); - final Property ssnProperty = BOB_ENTITY.lookupTypeProperty(PERSON_TYPE, HAS_SSN).get(); - queryBindingSet.addBinding(HAS_SSN.getData(), RyaToRdfConversions.convertValue(ssnProperty.getValue())); - - final CloseableIteration<BindingSet, QueryEvaluationException> iter = entityQueryNode.evaluate(queryBindingSet); - int count = 0; - // These should match what was used in the SPARQL query. - final List<String> queryParamNames = Lists.newArrayList("ssn", "age", "weight", "address"); - while (iter.hasNext()) { - final BindingSet bs = iter.next(); - assertTrue(bs.getBindingNames().containsAll(queryParamNames)); - count++; - } - assertEquals(count, 1); - } - - @Test - public void testUpdate() throws SmartUriException { - smartUriConverter.storeEntity(BOB_ENTITY); - - // New properties to add - final RyaURI hasNickName = createRyaUri("hasNickName"); - final RyaURI hasWindowOffice = createRyaUri("hasWindowOffice"); - - final Entity.Builder builder = Entity.builder(BOB_ENTITY); - builder.setProperty(PERSON_TYPE_URI, new Property(HAS_AGE, shortRyaType((short) 41))); - builder.setProperty(PERSON_TYPE_URI, new Property(hasNickName, stringRyaType("Bobby"))); - builder.setProperty(EMPLOYEE_TYPE_URI, new Property(HAS_POSITION_TITLE, stringRyaType("Assistant Regional Manager"))); - builder.setProperty(EMPLOYEE_TYPE_URI, new Property(hasWindowOffice, booleanRyaType(true))); - builder.setVersion(BOB_ENTITY.getVersion() + 1); - builder.rebuildSmartUri(); - - final Entity newBobEntity = builder.build(); - - smartUriConverter.updateEntity(BOB_ENTITY, newBobEntity); - - final Entity resultEntity = smartUriConverter.queryEntity(BOB_ENTITY.getSubject()); - assertEquals(newBobEntity.getVersion(), resultEntity.getVersion()); - assertEquals(newBobEntity.lookupTypeProperty(PERSON_TYPE, HAS_AGE), resultEntity.lookupTypeProperty(PERSON_TYPE, HAS_AGE)); - assertEquals(newBobEntity.lookupTypeProperty(PERSON_TYPE, hasNickName), resultEntity.lookupTypeProperty(PERSON_TYPE, hasNickName)); - assertEquals(newBobEntity.lookupTypeProperty(EMPLOYEE_TYPE, HAS_POSITION_TITLE), resultEntity.lookupTypeProperty(EMPLOYEE_TYPE, HAS_POSITION_TITLE)); - assertEquals(newBobEntity.lookupTypeProperty(EMPLOYEE_TYPE, hasWindowOffice), resultEntity.lookupTypeProperty(EMPLOYEE_TYPE, hasWindowOffice)); - assertEquals(newBobEntity.getSmartUri(), resultEntity.getSmartUri()); - final String resultUriString = resultEntity.getSmartUri().stringValue(); - assertTrue(resultUriString.contains(getRyaUriLocalName(hasWindowOffice))); - assertTrue(resultUriString.contains(getRyaUriLocalName(hasNickName))); - } - - @Test - public void testQuery() throws SmartUriException { - smartUriConverter.storeEntity(BOB_ENTITY); - - // Look up Person Type Entities that match Bob's SSN property - final Set<Property> properties = new LinkedHashSet<>(); - properties.add(BOB_ENTITY.lookupTypeProperty(PERSON_TYPE, HAS_SSN).get()); - final Map<URI, Value> map = SmartUriAdapter.propertiesToMap(properties); - - final ConvertingCursor<TypedEntity> cursor = smartUriConverter.queryEntity(PERSON_TYPE, map); - int count = 0; - while (cursor.hasNext()) { - final TypedEntity typedEntity = cursor.next(); - System.out.println(typedEntity); - count++; - } - assertEquals(count, 1); - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexIT.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexIT.java b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexIT.java index 6fac386..019760d 100644 --- a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexIT.java +++ b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexIT.java @@ -25,7 +25,6 @@ import java.util.HashSet; import java.util.Optional; import java.util.Set; -import org.apache.rya.api.RdfCloudTripleStoreConfiguration; import org.apache.rya.api.domain.RyaURI; import org.apache.rya.indexing.accumulo.ConfigUtils; import org.apache.rya.indexing.entity.model.Entity; @@ -33,11 +32,8 @@ import org.apache.rya.indexing.entity.model.Type; import org.apache.rya.indexing.entity.storage.EntityStorage; import org.apache.rya.indexing.entity.storage.TypeStorage; import org.apache.rya.indexing.entity.update.mongo.MongoEntityIndexer; -import org.apache.rya.mongodb.MockMongoFactory; -import org.apache.rya.mongodb.MongoConnectorFactory; -import org.apache.rya.mongodb.MongoDBRdfConfiguration; +import org.apache.rya.mongodb.MongoTestBase; import org.apache.rya.sail.config.RyaSailFactory; -import org.bson.Document; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -55,31 +51,16 @@ import org.openrdf.repository.sail.SailRepositoryConnection; import org.openrdf.sail.Sail; import com.google.common.collect.ImmutableSet; -import com.mongodb.Block; -import com.mongodb.MongoClient; -import com.mongodb.client.MongoDatabase; -import de.flapdoodle.embed.mongo.distribution.Version; - -public class MongoEntityIndexIT { +public class MongoEntityIndexIT extends MongoTestBase { private static final ValueFactory VF = ValueFactoryImpl.getInstance(); - private MongoDBRdfConfiguration conf; private SailRepositoryConnection conn; private MongoEntityIndexer indexer; - private MongoClient mongoClient; @Before public void setUp() throws Exception { - mongoClient = MockMongoFactory.with(Version.Main.PRODUCTION).newMongoClient(); - conf = new MongoDBRdfConfiguration(); - conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, "test"); - conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya"); - conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, "rya"); conf.setBoolean(ConfigUtils.USE_MONGO, true); - conf.setMongoClient(mongoClient); conf.setBoolean(ConfigUtils.USE_ENTITY, true); - final int port = mongoClient.getServerAddressList().get(0).getPort(); - conf.set(MongoDBRdfConfiguration.MONGO_INSTANCE_PORT, Integer.toString(port)); final Sail sail = RyaSailFactory.getInstance(conf); conn = new SailRepository(sail).getConnection(); @@ -92,9 +73,6 @@ public class MongoEntityIndexIT { @After public void tearDown() throws Exception { - if (mongoClient != null) { - MongoConnectorFactory.closeMongoClient(); - } if (conn != null) { conn.clear(); } @@ -108,12 +86,6 @@ public class MongoEntityIndexIT { setupTypes(); addStatements(); - final MongoDatabase db = mongoClient.getDatabase("test"); - db.listCollections().forEach((Block<Document>)doc -> { - System.out.println(doc); - }); - - final EntityStorage entities = indexer.getEntityStorage(conf); final RyaURI subject = new RyaURI("urn:alice"); final Optional<Entity> alice = entities.get(subject); @@ -136,7 +108,6 @@ public class MongoEntityIndexIT { final Set<BindingSet> results = new HashSet<>(); while(rez.hasNext()) { final BindingSet bs = rez.next(); - System.out.println(bs); results.add(bs); } final MapBindingSet expected = new MapBindingSet(); http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/e5738966/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexTest.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexTest.java b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexTest.java index f4aeaa1..850640f 100644 --- a/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexTest.java +++ b/extras/indexing/src/test/java/org/apache/rya/indexing/mongo/MongoEntityIndexTest.java @@ -22,7 +22,6 @@ import java.util.List; import org.apache.rya.api.domain.RyaType; import org.apache.rya.api.domain.RyaURI; -import org.apache.rya.indexing.accumulo.ConfigUtils; import org.apache.rya.indexing.entity.EntityIndexOptimizer; import org.apache.rya.indexing.entity.model.Entity; import org.apache.rya.indexing.entity.model.Property; @@ -30,8 +29,7 @@ import org.apache.rya.indexing.entity.model.Type; import org.apache.rya.indexing.entity.query.EntityQueryNode; import org.apache.rya.indexing.entity.storage.EntityStorage; import org.apache.rya.indexing.entity.storage.TypeStorage; -import org.apache.rya.mongodb.MockMongoFactory; -import org.apache.rya.mongodb.MongoDBRdfConfiguration; +import org.apache.rya.mongodb.MongoTestBase; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; @@ -45,9 +43,8 @@ import org.openrdf.query.algebra.helpers.StatementPatternCollector; import org.openrdf.query.parser.sparql.SPARQLParser; import com.google.common.collect.ImmutableSet; -import com.mongodb.MongoClient; -public class MongoEntityIndexTest { +public class MongoEntityIndexTest extends MongoTestBase { private static final Type PERSON_TYPE = new Type(new RyaURI("urn:person"), ImmutableSet.<RyaURI>builder() @@ -57,21 +54,11 @@ public class MongoEntityIndexTest { .build()); private static final RyaURI RYA_PERSON_TYPE = new RyaURI("urn:person"); - static MongoDBRdfConfiguration conf; private static EntityIndexOptimizer optimizer; private static EntityStorage entityStorage; @BeforeClass public static void beforeClass() throws Exception { - conf = new MongoDBRdfConfiguration(); - conf.set(ConfigUtils.USE_MONGO, "true"); - conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, "test"); - conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya_"); - conf.setTablePrefix("another_"); - - final MongoClient client = MockMongoFactory.newFactory().newMongoClient(); - conf.setMongoClient(client); - optimizer = new EntityIndexOptimizer(); optimizer.setConf(conf);