http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/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 a014e8f..7043870 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 @@ -1,5 +1,4 @@ -package org.apache.rya.mongodb; -/* +/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information @@ -17,6 +16,7 @@ package org.apache.rya.mongodb; * specific language governing permissions and limitations * under the License. */ +package org.apache.rya.mongodb; import static org.apache.rya.mongodb.dao.SimpleMongoDBStorageStrategy.DOCUMENT_VISIBILITY; import static org.apache.rya.mongodb.dao.SimpleMongoDBStorageStrategy.TIMESTAMP; @@ -36,461 +36,484 @@ import org.apache.rya.mongodb.document.util.AuthorizationsUtil; import org.apache.rya.mongodb.document.visibility.DocumentVisibility; import org.bson.Document; import org.calrissian.mango.collect.CloseableIterable; -import org.junit.AfterClass; -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 MongoTestBase { - private MongoClient client; - private static MongoDBRyaDAO dao; - @Before - public void setUp() throws IOException, RyaDAOException{ + @Override + protected void updateConfiguration(final MongoDBRdfConfiguration conf) { conf.setAuths("A", "B", "C"); - client = super.getMongoClient(); - dao = new MongoDBRyaDAO(conf, client); - } - - @AfterClass - public static void tearDown() throws RyaDAOException { - dao.destroy(); } @Test public void testDeleteWildcard() throws RyaDAOException { - final RyaStatementBuilder builder = new RyaStatementBuilder(); - builder.setPredicate(new RyaURI("http://temp.com")); - builder.setColumnVisibility(new DocumentVisibility("A").flatten()); - dao.delete(builder.build(), conf); + MongoDBRyaDAO dao = new MongoDBRyaDAO(); + try { + dao.setConf(conf); + dao.init(); + + final RyaStatementBuilder builder = new RyaStatementBuilder(); + builder.setPredicate(new RyaURI("http://temp.com")); + builder.setColumnVisibility(new DocumentVisibility("A").flatten()); + dao.delete(builder.build(), conf); + } finally { + dao.destroy(); + } } @Test public void testAdd() throws RyaDAOException, MongoException, IOException { - final RyaStatementBuilder builder = new RyaStatementBuilder(); - builder.setPredicate(new RyaURI("http://temp.com")); - builder.setSubject(new RyaURI("http://subject.com")); - builder.setObject(new RyaURI("http://object.com")); - builder.setColumnVisibility(new DocumentVisibility("B").flatten()); - - final MongoDatabase db = client.getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); - final MongoCollection<Document> coll = db.getCollection(conf.getTriplesCollectionName()); - - dao.add(builder.build()); - - assertEquals(coll.count(),1); - - final Document dbo = coll.find().first(); - assertTrue(dbo.containsKey(DOCUMENT_VISIBILITY)); - assertTrue(dbo.containsKey(TIMESTAMP)); + MongoDBRyaDAO dao = new MongoDBRyaDAO(); + try { + dao.setConf(conf); + dao.init(); + + final RyaStatementBuilder builder = new RyaStatementBuilder(); + builder.setPredicate(new RyaURI("http://temp.com")); + builder.setSubject(new RyaURI("http://subject.com")); + builder.setObject(new RyaURI("http://object.com")); + builder.setColumnVisibility(new DocumentVisibility("B").flatten()); + + final MongoDatabase db = conf.getMongoClient().getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); + final MongoCollection<Document> coll = db.getCollection(conf.getTriplesCollectionName()); + + dao.add(builder.build()); + + assertEquals(coll.count(),1); + + final Document dbo = coll.find().first(); + assertTrue(dbo.containsKey(DOCUMENT_VISIBILITY)); + assertTrue(dbo.containsKey(TIMESTAMP)); + } finally { + dao.destroy(); + } } @Test public void testDelete() throws RyaDAOException, MongoException, IOException { - final RyaStatementBuilder builder = new RyaStatementBuilder(); - builder.setPredicate(new RyaURI("http://temp.com")); - builder.setSubject(new RyaURI("http://subject.com")); - builder.setObject(new RyaURI("http://object.com")); - builder.setColumnVisibility(new DocumentVisibility("C").flatten()); - final RyaStatement statement = builder.build(); - final MongoDatabase db = client.getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); - final MongoCollection<Document> coll = db.getCollection(conf.getTriplesCollectionName()); - - dao.add(statement); - - assertEquals(1, coll.count()); - - dao.delete(statement, conf); - - assertEquals(0, coll.count()); - + MongoDBRyaDAO dao = new MongoDBRyaDAO(); + try { + dao.setConf(conf); + dao.init(); + + final RyaStatementBuilder builder = new RyaStatementBuilder(); + builder.setPredicate(new RyaURI("http://temp.com")); + builder.setSubject(new RyaURI("http://subject.com")); + builder.setObject(new RyaURI("http://object.com")); + builder.setColumnVisibility(new DocumentVisibility("C").flatten()); + final RyaStatement statement = builder.build(); + final MongoDatabase db = conf.getMongoClient().getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); + final MongoCollection<Document> coll = db.getCollection(conf.getTriplesCollectionName()); + + dao.add(statement); + assertEquals(1, coll.count()); + + dao.delete(statement, conf); + assertEquals(0, coll.count()); + } finally { + dao.destroy(); + } } @Test public void testDeleteWildcardSubjectWithContext() throws RyaDAOException, MongoException, IOException { - final RyaStatementBuilder builder = new RyaStatementBuilder(); - builder.setPredicate(new RyaURI("http://temp.com")); - builder.setSubject(new RyaURI("http://subject.com")); - builder.setObject(new RyaURI("http://object.com")); - builder.setContext(new RyaURI("http://context.com")); - builder.setColumnVisibility(new DocumentVisibility("A&B&C").flatten()); - final RyaStatement statement = builder.build(); - - final MongoDatabase db = client.getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); - final MongoCollection<Document> coll = db.getCollection(conf.getTriplesCollectionName()); - - dao.add(statement); - - assertEquals(1, coll.count()); - - final RyaStatementBuilder builder2 = new RyaStatementBuilder(); - builder2.setPredicate(new RyaURI("http://temp.com")); - builder2.setObject(new RyaURI("http://object.com")); - builder2.setContext(new RyaURI("http://context3.com")); - final RyaStatement query = builder2.build(); - - dao.delete(query, conf); - - assertEquals(1, coll.count()); + MongoDBRyaDAO dao = new MongoDBRyaDAO(); + try { + dao.setConf(conf); + dao.init(); + + final RyaStatementBuilder builder = new RyaStatementBuilder(); + builder.setPredicate(new RyaURI("http://temp.com")); + builder.setSubject(new RyaURI("http://subject.com")); + builder.setObject(new RyaURI("http://object.com")); + builder.setContext(new RyaURI("http://context.com")); + builder.setColumnVisibility(new DocumentVisibility("A&B&C").flatten()); + final RyaStatement statement = builder.build(); + + final MongoDatabase db = conf.getMongoClient().getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); + final MongoCollection<Document> coll = db.getCollection(conf.getTriplesCollectionName()); + + dao.add(statement); + assertEquals(1, coll.count()); + + final RyaStatementBuilder builder2 = new RyaStatementBuilder(); + builder2.setPredicate(new RyaURI("http://temp.com")); + builder2.setObject(new RyaURI("http://object.com")); + builder2.setContext(new RyaURI("http://context3.com")); + final RyaStatement query = builder2.build(); + + dao.delete(query, conf); + assertEquals(1, coll.count()); + } finally { + dao.destroy(); + } } @Test public void testVisibility() throws RyaDAOException, MongoException, IOException { - // Doc requires "A" and user has "B" = User CANNOT view - assertFalse(testVisibilityStatement("A", new Authorizations("B"))); + MongoDBRyaDAO dao = new MongoDBRyaDAO(); + try { + dao.setConf(conf); + dao.init(); + + // Doc requires "A" and user has "B" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "A", new Authorizations("B"))); - // Doc requires "A" and user has "A" = User can view - assertTrue(testVisibilityStatement("A", new Authorizations("A"))); + // Doc requires "A" and user has "A" = User can view + assertTrue(testVisibilityStatement(dao, "A", new Authorizations("A"))); - // Doc requires "A" and "B" and user has "A" and "B" = User can view - assertTrue(testVisibilityStatement("A&B", new Authorizations("A", "B"))); + // Doc requires "A" and "B" and user has "A" and "B" = User can view + assertTrue(testVisibilityStatement(dao, "A&B", new Authorizations("A", "B"))); - // Doc requires "A" or "B" and user has "A" and "B" = User can view - assertTrue(testVisibilityStatement("A|B", new Authorizations("A", "B"))); + // Doc requires "A" or "B" and user has "A" and "B" = User can view + assertTrue(testVisibilityStatement(dao, "A|B", new Authorizations("A", "B"))); - // Doc requires "A" and user has "A" and "B" = User can view - assertTrue(testVisibilityStatement("A", new Authorizations("A", "B"))); + // Doc requires "A" and user has "A" and "B" = User can view + assertTrue(testVisibilityStatement(dao, "A", new Authorizations("A", "B"))); - // Doc requires "A" and user has "A" and "B" and "C" = User can view - assertTrue(testVisibilityStatement("A", new Authorizations("A", "B", "C"))); + // Doc requires "A" and user has "A" and "B" and "C" = User can view + assertTrue(testVisibilityStatement(dao, "A", new Authorizations("A", "B", "C"))); - // Doc requires "A" and "B" and user has "A" = User CANNOT view - assertFalse(testVisibilityStatement("A&B", new Authorizations("A"))); + // Doc requires "A" and "B" and user has "A" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "A&B", new Authorizations("A"))); - // Doc requires "A" and "B" and user has "B" = User CANNOT view - assertFalse(testVisibilityStatement("A&B", new Authorizations("B"))); + // Doc requires "A" and "B" and user has "B" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "A&B", new Authorizations("B"))); - // Doc requires "A" and "B" and user has "C" = User CANNOT view - assertFalse(testVisibilityStatement("A&B", new Authorizations("C"))); + // Doc requires "A" and "B" and user has "C" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "A&B", new Authorizations("C"))); - // Doc requires "A" and "B" and "C" and user has "A" and "B" and "C" = User can view - assertTrue(testVisibilityStatement("A&B&C", new Authorizations("A", "B", "C"))); + // Doc requires "A" and "B" and "C" and user has "A" and "B" and "C" = User can view + assertTrue(testVisibilityStatement(dao, "A&B&C", new Authorizations("A", "B", "C"))); - // Doc requires "A" and "B" and "C" and user has "A" and "B" = User CANNOT view - assertFalse(testVisibilityStatement("A&B&C", new Authorizations("A", "B"))); + // Doc requires "A" and "B" and "C" and user has "A" and "B" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "A&B&C", new Authorizations("A", "B"))); - // Doc requires "A" and "B" and "C" and user has "A" = User CANNOT view - assertFalse(testVisibilityStatement("A&B&C", new Authorizations("A"))); + // Doc requires "A" and "B" and "C" and user has "A" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "A&B&C", new Authorizations("A"))); - // Doc requires "A" and "B" and "C" and user has "B" = User CANNOT view - assertFalse(testVisibilityStatement("A&B&C", new Authorizations("B"))); + // Doc requires "A" and "B" and "C" and user has "B" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "A&B&C", new Authorizations("B"))); - // Doc requires "A" and "B" and "C" and user has "C" = User CANNOT view - assertFalse(testVisibilityStatement("A&B&C", new Authorizations("C"))); + // Doc requires "A" and "B" and "C" and user has "C" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "A&B&C", new Authorizations("C"))); - // Doc requires "A" and "B" and user has "A" and "B" and "C" = User can view - assertTrue(testVisibilityStatement("A&B", new Authorizations("A", "B", "C"))); + // Doc requires "A" and "B" and user has "A" and "B" and "C" = User can view + assertTrue(testVisibilityStatement(dao, "A&B", new Authorizations("A", "B", "C"))); - // Doc requires "A" or "B" and user has "A" = User can view - assertTrue(testVisibilityStatement("A|B", new Authorizations("A"))); + // Doc requires "A" or "B" and user has "A" = User can view + assertTrue(testVisibilityStatement(dao, "A|B", new Authorizations("A"))); - // Doc requires "A" or "B" and user has "B" = User can view - assertTrue(testVisibilityStatement("A|B", new Authorizations("B"))); + // Doc requires "A" or "B" and user has "B" = User can view + assertTrue(testVisibilityStatement(dao, "A|B", new Authorizations("B"))); - // Doc requires "A" or "B" and user has "C" = User CANNOT view - assertFalse(testVisibilityStatement("A|B", new Authorizations("C"))); + // Doc requires "A" or "B" and user has "C" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "A|B", new Authorizations("C"))); - // Doc requires "A" or "B" or "C" and user has "A" and "B" and "C" = User can view - assertTrue(testVisibilityStatement("A|B|C", new Authorizations("A", "B", "C"))); + // Doc requires "A" or "B" or "C" and user has "A" and "B" and "C" = User can view + assertTrue(testVisibilityStatement(dao, "A|B|C", new Authorizations("A", "B", "C"))); - // Doc requires "A" or "B" or "C" and user has "A" and "B" = User can view - assertTrue(testVisibilityStatement("A|B|C", new Authorizations("A", "B"))); + // Doc requires "A" or "B" or "C" and user has "A" and "B" = User can view + assertTrue(testVisibilityStatement(dao, "A|B|C", new Authorizations("A", "B"))); - // Doc requires "A" or "B" or "C" and user has "A" = User can view - assertTrue(testVisibilityStatement("A|B|C", new Authorizations("A"))); + // Doc requires "A" or "B" or "C" and user has "A" = User can view + assertTrue(testVisibilityStatement(dao, "A|B|C", new Authorizations("A"))); - // Doc requires "A" or "B" or "C" and user has "B" = User can view - assertTrue(testVisibilityStatement("A|B|C", new Authorizations("B"))); + // Doc requires "A" or "B" or "C" and user has "B" = User can view + assertTrue(testVisibilityStatement(dao, "A|B|C", new Authorizations("B"))); - // Doc requires "A" or "B" or "C" and user has "C" = User can view - assertTrue(testVisibilityStatement("A|B|C", new Authorizations("C"))); + // Doc requires "A" or "B" or "C" and user has "C" = User can view + assertTrue(testVisibilityStatement(dao, "A|B|C", new Authorizations("C"))); - // Doc requires "A" or "B" and user has "A" and "B" and "C" = User can view - assertTrue(testVisibilityStatement("A|B", new Authorizations("A", "B", "C"))); + // Doc requires "A" or "B" and user has "A" and "B" and "C" = User can view + assertTrue(testVisibilityStatement(dao, "A|B", new Authorizations("A", "B", "C"))); - // Doc requires "A" and user has ALL_AUTHORIZATIONS = User can view - assertTrue(testVisibilityStatement("A", MongoDbRdfConstants.ALL_AUTHORIZATIONS)); + // Doc requires "A" and user has ALL_AUTHORIZATIONS = User can view + assertTrue(testVisibilityStatement(dao, "A", MongoDbRdfConstants.ALL_AUTHORIZATIONS)); - // Doc requires "A" and "B" and user has ALL_AUTHORIZATIONS = User can view - assertTrue(testVisibilityStatement("A&B", MongoDbRdfConstants.ALL_AUTHORIZATIONS)); + // Doc requires "A" and "B" and user has ALL_AUTHORIZATIONS = User can view + assertTrue(testVisibilityStatement(dao, "A&B", MongoDbRdfConstants.ALL_AUTHORIZATIONS)); - // Doc requires "A" or "B" and user has ALL_AUTHORIZATIONS = User can view - assertTrue(testVisibilityStatement("A|B", MongoDbRdfConstants.ALL_AUTHORIZATIONS)); + // Doc requires "A" or "B" and user has ALL_AUTHORIZATIONS = User can view + assertTrue(testVisibilityStatement(dao, "A|B", MongoDbRdfConstants.ALL_AUTHORIZATIONS)); - // Doc has no requirement and user has ALL_AUTHORIZATIONS = User can view - assertTrue(testVisibilityStatement("", MongoDbRdfConstants.ALL_AUTHORIZATIONS)); + // Doc has no requirement and user has ALL_AUTHORIZATIONS = User can view + assertTrue(testVisibilityStatement(dao, "", MongoDbRdfConstants.ALL_AUTHORIZATIONS)); - // Doc has no requirement and user has "A" = User can view - assertTrue(testVisibilityStatement("", new Authorizations("A"))); + // Doc has no requirement and user has "A" = User can view + assertTrue(testVisibilityStatement(dao, "", new Authorizations("A"))); - // Doc has no requirement and user has "A" and "B" = User can view - assertTrue(testVisibilityStatement("", new Authorizations("A", "B"))); + // Doc has no requirement and user has "A" and "B" = User can view + assertTrue(testVisibilityStatement(dao, "", new Authorizations("A", "B"))); - // Doc requires "A" or ("B" and "C") and user has "A" = User can view - assertTrue(testVisibilityStatement("A|(B&C)", new Authorizations("A"))); + // Doc requires "A" or ("B" and "C") and user has "A" = User can view + assertTrue(testVisibilityStatement(dao, "A|(B&C)", new Authorizations("A"))); - // Doc requires "A" or ("B" and "C") and user has "B" and "C" = User can view - assertTrue(testVisibilityStatement("A|(B&C)", new Authorizations("B", "C"))); + // Doc requires "A" or ("B" and "C") and user has "B" and "C" = User can view + assertTrue(testVisibilityStatement(dao, "A|(B&C)", new Authorizations("B", "C"))); - // Doc requires "A" or ("B" and "C") and user has "B" = User CANNOT view - assertFalse(testVisibilityStatement("A|(B&C)", new Authorizations("B"))); + // Doc requires "A" or ("B" and "C") and user has "B" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "A|(B&C)", new Authorizations("B"))); - // Doc requires "A" or ("B" and "C") and user has "C" = User CANNOT view - assertFalse(testVisibilityStatement("A|(B&C)", new Authorizations("C"))); + // Doc requires "A" or ("B" and "C") and user has "C" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "A|(B&C)", new Authorizations("C"))); - // Doc requires "A" and ("B" or "C") and user has "A" and "B" = User can view - assertTrue(testVisibilityStatement("A&(B|C)", new Authorizations("A", "B"))); + // Doc requires "A" and ("B" or "C") and user has "A" and "B" = User can view + assertTrue(testVisibilityStatement(dao, "A&(B|C)", new Authorizations("A", "B"))); - // Doc requires "A" and ("B" or "C") and user has "A" and "B" = User can view - assertTrue(testVisibilityStatement("A&(B|C)", new Authorizations("A", "C"))); + // Doc requires "A" and ("B" or "C") and user has "A" and "B" = User can view + assertTrue(testVisibilityStatement(dao, "A&(B|C)", new Authorizations("A", "C"))); - // Doc requires "A" and ("B" or "C") and user has "B" and "C" = User CANNOT view - assertFalse(testVisibilityStatement("A&(B|C)", new Authorizations("B", "C"))); + // Doc requires "A" and ("B" or "C") and user has "B" and "C" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "A&(B|C)", new Authorizations("B", "C"))); - // Doc requires "A" and ("B" or "C") and user has "A" = User CANNOT view - assertFalse(testVisibilityStatement("A&(B|C)", new Authorizations("A"))); + // Doc requires "A" and ("B" or "C") and user has "A" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "A&(B|C)", new Authorizations("A"))); - // Doc requires "A" and ("B" or "C") and user has "B" = User CANNOT view - assertFalse(testVisibilityStatement("A&(B|C)", new Authorizations("B"))); + // Doc requires "A" and ("B" or "C") and user has "B" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "A&(B|C)", new Authorizations("B"))); - // Doc requires "A" and ("B" or "C") and user has "C" = User can view - assertFalse(testVisibilityStatement("A&(B|C)", new Authorizations("C"))); + // Doc requires "A" and ("B" or "C") and user has "C" = User can view + assertFalse(testVisibilityStatement(dao, "A&(B|C)", new Authorizations("C"))); - // Doc requires ("A" and "B") or ("C" and "D") and user has "A" = User CANNOT view - assertFalse(testVisibilityStatement("(A&B)|(C&D)", new Authorizations("A"))); + // Doc requires ("A" and "B") or ("C" and "D") and user has "A" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A&B)|(C&D)", new Authorizations("A"))); - // Doc requires ("A" and "B") or ("C" and "D") and user has "B" = User CANNOT view - assertFalse(testVisibilityStatement("(A&B)|(C&D)", new Authorizations("B"))); + // Doc requires ("A" and "B") or ("C" and "D") and user has "B" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A&B)|(C&D)", new Authorizations("B"))); - // Doc requires ("A" and "B") or ("C" and "D") and user has "C" = User CANNOT view - assertFalse(testVisibilityStatement("(A&B)|(C&D)", new Authorizations("C"))); + // Doc requires ("A" and "B") or ("C" and "D") and user has "C" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A&B)|(C&D)", new Authorizations("C"))); - // Doc requires ("A" and "B") or ("C" and "D") and user has "D" = User CANNOT view - assertFalse(testVisibilityStatement("(A&B)|(C&D)", new Authorizations("D"))); + // Doc requires ("A" and "B") or ("C" and "D") and user has "D" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A&B)|(C&D)", new Authorizations("D"))); - // Doc requires ("A" and "B") or ("C" and "D") and user has "E" = User CANNOT view - assertFalse(testVisibilityStatement("(A&B)|(C&D)", new Authorizations("E"))); + // Doc requires ("A" and "B") or ("C" and "D") and user has "E" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A&B)|(C&D)", new Authorizations("E"))); - // Doc requires ("A" and "B") or ("C" and "D") and user has "A" and "B" = User can view - assertTrue(testVisibilityStatement("(A&B)|(C&D)", new Authorizations("A", "B"))); + // Doc requires ("A" and "B") or ("C" and "D") and user has "A" and "B" = User can view + assertTrue(testVisibilityStatement(dao, "(A&B)|(C&D)", new Authorizations("A", "B"))); - // Doc requires ("A" and "B") or ("C" and "D") and user has "C" and "D" = User can view - assertTrue(testVisibilityStatement("(A&B)|(C&D)", new Authorizations("C", "D"))); + // Doc requires ("A" and "B") or ("C" and "D") and user has "C" and "D" = User can view + assertTrue(testVisibilityStatement(dao, "(A&B)|(C&D)", new Authorizations("C", "D"))); - // 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 "A" and "B" and "E" = User can view + assertTrue(testVisibilityStatement(dao, "(A&B)|(C&D)", new Authorizations("A", "B", "E"))); - // 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")mongoClient or ("C" and "D") and user has + // "C" and "D" and "E" = User can view + assertTrue(testVisibilityStatement(dao, "(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 - assertFalse(testVisibilityStatement("(A&B)|(C&D)", new Authorizations("A", "C"))); + // Doc requires ("A" and "B") or ("C" and "D") and user has "A" and "C" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A&B)|(C&D)", new Authorizations("A", "C"))); - // Doc requires ("A" and "B") or ("C" and "D") and user has "A" and "D" = User CANNOT view - assertFalse(testVisibilityStatement("(A&B)|(C&D)", new Authorizations("A", "D"))); + // Doc requires ("A" and "B") or ("C" and "D") and user has "A" and "D" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A&B)|(C&D)", new Authorizations("A", "D"))); - // Doc requires ("A" and "B") or ("C" and "D") and user has "B" and "C" = User CANNOT view - assertFalse(testVisibilityStatement("(A&B)|(C&D)", new Authorizations("B", "C"))); + // Doc requires ("A" and "B") or ("C" and "D") and user has "B" and "C" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A&B)|(C&D)", new Authorizations("B", "C"))); - // Doc requires ("A" and "B") or ("C" and "D") and user has "B" and "D" = User CANNOT view - assertFalse(testVisibilityStatement("(A&B)|(C&D)", new Authorizations("B", "D"))); + // Doc requires ("A" and "B") or ("C" and "D") and user has "B" and "D" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A&B)|(C&D)", new Authorizations("B", "D"))); - // Doc requires ("A" and "B") or ("C" and "D") and user has "A" and "B" and "C" = User can view - assertTrue(testVisibilityStatement("(A&B)|(C&D)", new Authorizations("A", "B", "C"))); + // Doc requires ("A" and "B") or ("C" and "D") and user has "A" and "B" and "C" = User can view + assertTrue(testVisibilityStatement(dao, "(A&B)|(C&D)", new Authorizations("A", "B", "C"))); - // Doc requires ("A" and "B") or ("C" and "D") and user has "A" and "B" and "C" = User can view - assertTrue(testVisibilityStatement("(A&B)|(C&D)", new Authorizations("A", "B", "D"))); + // Doc requires ("A" and "B") or ("C" and "D") and user has "A" and "B" and "C" = User can view + assertTrue(testVisibilityStatement(dao, "(A&B)|(C&D)", new Authorizations("A", "B", "D"))); - // Doc requires ("A" and "B") or ("C" and "D") and user has "A" and "C" and "D" = User can view - assertTrue(testVisibilityStatement("(A&B)|(C&D)", new Authorizations("A", "C", "D"))); + // Doc requires ("A" and "B") or ("C" and "D") and user has "A" and "C" and "D" = User can view + assertTrue(testVisibilityStatement(dao, "(A&B)|(C&D)", new Authorizations("A", "C", "D"))); - // Doc requires ("A" and "B") or ("C" and "D") and user has "B" and "C" and "D" = User can view - assertTrue(testVisibilityStatement("(A&B)|(C&D)", new Authorizations("B", "C", "D"))); + // Doc requires ("A" and "B") or ("C" and "D") and user has "B" and "C" and "D" = User can view + assertTrue(testVisibilityStatement(dao, "(A&B)|(C&D)", new Authorizations("B", "C", "D"))); - // Doc requires ("A" and "B") or ("C" and "D") and user has "B" and "C" and "D" and "E"= User can view - assertTrue(testVisibilityStatement("(A&B)|(C&D)", new Authorizations("B", "C", "D", "E"))); + // Doc requires ("A" and "B") or ("C" and "D") and user has "B" and "C" and "D" and "E"= User can view + assertTrue(testVisibilityStatement(dao, "(A&B)|(C&D)", new Authorizations("B", "C", "D", "E"))); - // Doc requires ("A" and "B") or ("C" and "D") and user has "A" and "B" and "C" and "D" = User can view - assertTrue(testVisibilityStatement("(A&B)|(C&D)", new Authorizations("A", "B", "C", "D"))); + // Doc requires ("A" and "B") or ("C" and "D") and user has "A" and "B" and "C" and "D" = User can view + assertTrue(testVisibilityStatement(dao, "(A&B)|(C&D)", new Authorizations("A", "B", "C", "D"))); - // Doc requires ("A" and "B") or ("C" and "D") and user has "A" and "B" and "C" and "D" and "E" = User can view - assertTrue(testVisibilityStatement("(A&B)|(C&D)", new Authorizations("A", "B", "C", "D", "E"))); + // Doc requires ("A" and "B") or ("C" and "D") and user has "A" and "B" and "C" and "D" and "E" = User can view + assertTrue(testVisibilityStatement(dao, "(A&B)|(C&D)", new Authorizations("A", "B", "C", "D", "E"))); - // Doc requires ("A" or "B") and ("C" or "D") and user has "A" = User CANNOT view - assertFalse(testVisibilityStatement("(A|B)&(C|D)", new Authorizations("A"))); + // Doc requires ("A" or "B") and ("C" or "D") and user has "A" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A|B)&(C|D)", new Authorizations("A"))); - // Doc requires ("A" or "B") and ("C" or "D") and user has "B" = User CANNOT view - assertFalse(testVisibilityStatement("(A|B)&(C|D)", new Authorizations("B"))); + // Doc requires ("A" or "B") and ("C" or "D") and user has "B" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A|B)&(C|D)", new Authorizations("B"))); - // Doc requires ("A" or "B") and ("C" or "D") and user has "C" = User CANNOT view - assertFalse(testVisibilityStatement("(A|B)&(C|D)", new Authorizations("C"))); + // Doc requires ("A" or "B") and ("C" or "D") and user has "C" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A|B)&(C|D)", new Authorizations("C"))); - // Doc requires ("A" or "B") and ("C" or "D") and user has "D" = User CANNOT view - assertFalse(testVisibilityStatement("(A|B)&(C|D)", new Authorizations("D"))); + // Doc requires ("A" or "B") and ("C" or "D") and user has "D" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A|B)&(C|D)", new Authorizations("D"))); - // Doc requires ("A" or "B") and ("C" or "D") and user has "E" = User CANNOT view - assertFalse(testVisibilityStatement("(A|B)&(C|D)", new Authorizations("E"))); + // Doc requires ("A" or "B") and ("C" or "D") and user has "E" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A|B)&(C|D)", new Authorizations("E"))); - // Doc requires ("A" or "B") and ("C" or "D") and user has "A" and "B" = User CANNOT view - assertFalse(testVisibilityStatement("(A|B)&(C|D)", new Authorizations("A", "B"))); + // Doc requires ("A" or "B") and ("C" or "D") and user has "A" and "B" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A|B)&(C|D)", new Authorizations("A", "B"))); - // Doc requires ("A" or "B") and ("C" or "D") and user has "C" and "D" = User CANNOT view - assertFalse(testVisibilityStatement("(A|B)&(C|D)", new Authorizations("C", "D"))); + // Doc requires ("A" or "B") and ("C" or "D") and user has "C" and "D" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A|B)&(C|D)", new Authorizations("C", "D"))); - // Doc requires ("A" or "B") and ("C" or "D") and user has "A" and "B" and "E" = User CANNOT view - assertFalse(testVisibilityStatement("(A|B)&(C|D)", new Authorizations("A", "B", "E"))); + // Doc requires ("A" or "B") and ("C" or "D") and user has "A" and "B" and "E" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A|B)&(C|D)", new Authorizations("A", "B", "E"))); - // Doc requires ("A" or "B") and ("C" or "D") and user has "C" and "D" and "E" = User CANNOT view - assertFalse(testVisibilityStatement("(A|B)&(C|D)", new Authorizations("C", "D", "E"))); + // Doc requires ("A" or "B") and ("C" or "D") and user has "C" and "D" and "E" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A|B)&(C|D)", new Authorizations("C", "D", "E"))); - // Doc requires ("A" or "B") and ("C" or "D") and user has "A" and "C" = User can view - assertTrue(testVisibilityStatement("(A|B)&(C|D)", new Authorizations("A", "C"))); + // Doc requires ("A" or "B") and ("C" or "D") and user has "A" and "C" = User can view + assertTrue(testVisibilityStatement(dao, "(A|B)&(C|D)", new Authorizations("A", "C"))); - // Doc requires ("A" or "B") and ("C" or "D") and user has "A" and "D" = User can view - assertTrue(testVisibilityStatement("(A|B)&(C|D)", new Authorizations("A", "D"))); + // Doc requires ("A" or "B") and ("C" or "D") and user has "A" and "D" = User can view + assertTrue(testVisibilityStatement(dao, "(A|B)&(C|D)", new Authorizations("A", "D"))); - // Doc requires ("A" or "B") and ("C" or "D") and user has "B" and "C" = User can view - assertTrue(testVisibilityStatement("(A|B)&(C|D)", new Authorizations("B", "C"))); + // Doc requires ("A" or "B") and ("C" or "D") and user has "B" and "C" = User can view + assertTrue(testVisibilityStatement(dao, "(A|B)&(C|D)", new Authorizations("B", "C"))); - // Doc requires ("A" or "B") and ("C" or "D") and user has "B" and "D" = User can view - assertTrue(testVisibilityStatement("(A|B)&(C|D)", new Authorizations("B", "D"))); + // Doc requires ("A" or "B") and ("C" or "D") and user has "B" and "D" = User can view + assertTrue(testVisibilityStatement(dao, "(A|B)&(C|D)", new Authorizations("B", "D"))); - // Doc requires ("A" or "B") and ("C" or "D") and user has "B" and "D" and "E" = User can view - assertTrue(testVisibilityStatement("(A|B)&(C|D)", new Authorizations("B", "D", "E"))); + // Doc requires ("A" or "B") and ("C" or "D") and user has "B" and "D" and "E" = User can view + assertTrue(testVisibilityStatement(dao, "(A|B)&(C|D)", new Authorizations("B", "D", "E"))); - // Doc requires ("A" or "B") and ("C" or "D") and user has "A" and "B" and "C" = User can view - assertTrue(testVisibilityStatement("(A|B)&(C|D)", new Authorizations("A", "B", "C"))); + // Doc requires ("A" or "B") and ("C" or "D") and user has "A" and "B" and "C" = User can view + assertTrue(testVisibilityStatement(dao, "(A|B)&(C|D)", new Authorizations("A", "B", "C"))); - // Doc requires ("A" or "B") and ("C" or "D") and user has "A" and "B" and "C" = User can view - assertTrue(testVisibilityStatement("(A|B)&(C|D)", new Authorizations("A", "B", "D"))); + // Doc requires ("A" or "B") and ("C" or "D") and user has "A" and "B" and "C" = User can view + assertTrue(testVisibilityStatement(dao, "(A|B)&(C|D)", new Authorizations("A", "B", "D"))); - // Doc requires ("A" or "B") and ("C" or "D") and user has "A" and "C" and "D" = User can view - assertTrue(testVisibilityStatement("(A|B)&(C|D)", new Authorizations("A", "C", "D"))); + // Doc requires ("A" or "B") and ("C" or "D") and user has "A" and "C" and "D" = User can view + assertTrue(testVisibilityStatement(dao, "(A|B)&(C|D)", new Authorizations("A", "C", "D"))); - // Doc requires ("A" or "B") and ("C" or "D") and user has "B" and "C" and "D" = User can view - assertTrue(testVisibilityStatement("(A|B)&(C|D)", new Authorizations("B", "C", "D"))); + // Doc requires ("A" or "B") and ("C" or "D") and user has "B" and "C" and "D" = User can view + assertTrue(testVisibilityStatement(dao, "(A|B)&(C|D)", new Authorizations("B", "C", "D"))); - // Doc requires ("A" or "B") and ("C" or "D") and user has "B" and "C" and "D" and "E"= User can view - assertTrue(testVisibilityStatement("(A|B)&(C|D)", new Authorizations("B", "C", "D", "E"))); + // Doc requires ("A" or "B") and ("C" or "D") and user has "B" and "C" and "D" and "E"= User can view + assertTrue(testVisibilityStatement(dao, "(A|B)&(C|D)", new Authorizations("B", "C", "D", "E"))); - // Doc requires ("A" or "B") and ("C" or "D") and user has "A" and "B" and "C" and "D" = User can view - assertTrue(testVisibilityStatement("(A|B)&(C|D)", new Authorizations("A", "B", "C", "D"))); + // Doc requires ("A" or "B") and ("C" or "D") and user has "A" and "B" and "C" and "D" = User can view + assertTrue(testVisibilityStatement(dao, "(A|B)&(C|D)", new Authorizations("A", "B", "C", "D"))); - // Doc requires ("A" or "B") and ("C" or "D") and user has "A" and "B" and "C" and "D" and "E" = User can view - assertTrue(testVisibilityStatement("(A|B)&(C|D)", new Authorizations("A", "B", "C", "D", "E"))); + // Doc requires ("A" or "B") and ("C" or "D") and user has "A" and "B" and "C" and "D" and "E" = User can view + assertTrue(testVisibilityStatement(dao, "(A|B)&(C|D)", new Authorizations("A", "B", "C", "D", "E"))); - // Doc requires "(A|B)&(C|(D&E))" and user has "A" and "C" = User can view - assertTrue(testVisibilityStatement("(A|B)&(C|(D&E))", new Authorizations("A", "C"))); + // Doc requires "(A|B)&(C|(D&E))" and user has "A" and "C" = User can view + assertTrue(testVisibilityStatement(dao, "(A|B)&(C|(D&E))", new Authorizations("A", "C"))); - // Doc requires "(A|B)&(C|(D&E))" and user has "B" and "C" = User can view - assertTrue(testVisibilityStatement("(A|B)&(C|(D&E))", new Authorizations("B", "C"))); + // Doc requires "(A|B)&(C|(D&E))" and user has "B" and "C" = User can view + assertTrue(testVisibilityStatement(dao, "(A|B)&(C|(D&E))", new Authorizations("B", "C"))); - // Doc requires "(A|B)&(C|(D&E))" and user has "A" and "D" and "E" = User can view - assertTrue(testVisibilityStatement("(A|B)&(C|(D&E))", new Authorizations("A", "D", "E"))); + // Doc requires "(A|B)&(C|(D&E))" and user has "A" and "D" and "E" = User can view + assertTrue(testVisibilityStatement(dao, "(A|B)&(C|(D&E))", new Authorizations("A", "D", "E"))); - // Doc requires "(A|B)&(C|(D&E))" and user has "B" and "D" and "E" = User can view - assertTrue(testVisibilityStatement("(A|B)&(C|(D&E))", new Authorizations("B", "D", "E"))); + // Doc requires "(A|B)&(C|(D&E))" and user has "B" and "D" and "E" = User can view + assertTrue(testVisibilityStatement(dao, "(A|B)&(C|(D&E))", new Authorizations("B", "D", "E"))); - // Doc requires "(A|B)&(C|(D&E))" and user has "A" = User CANNOT view - assertFalse(testVisibilityStatement("(A|B)&(C|(D&E))", new Authorizations("A"))); + // Doc requires "(A|B)&(C|(D&E))" and user has "A" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A|B)&(C|(D&E))", new Authorizations("A"))); - // Doc requires "(A|B)&(C|(D&E))" and user has "B" = User CANNOT view - assertFalse(testVisibilityStatement("(A|B)&(C|(D&E))", new Authorizations("B"))); + // Doc requires "(A|B)&(C|(D&E))" and user has "B" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A|B)&(C|(D&E))", new Authorizations("B"))); - // Doc requires "(A|B)&(C|(D&E))" and user has "C" = User CANNOT view - assertFalse(testVisibilityStatement("(A|B)&(C|(D&E))", new Authorizations("C"))); + // Doc requires "(A|B)&(C|(D&E))" and user has "C" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A|B)&(C|(D&E))", new Authorizations("C"))); - // Doc requires "(A|B)&(C|(D&E))" and user has "D" = User CANNOT view - assertFalse(testVisibilityStatement("(A|B)&(C|(D&E))", new Authorizations("D"))); + // Doc requires "(A|B)&(C|(D&E))" and user has "D" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A|B)&(C|(D&E))", new Authorizations("D"))); - // Doc requires "(A|B)&(C|(D&E))" and user has "E" = User CANNOT view - assertFalse(testVisibilityStatement("(A|B)&(C|(D&E))", new Authorizations("E"))); + // Doc requires "(A|B)&(C|(D&E))" and user has "E" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A|B)&(C|(D&E))", new Authorizations("E"))); - // Doc requires "(A|B)&(C|(D&E))" and user has "D" and "E" = User CANNOT view - assertFalse(testVisibilityStatement("(A|B)&(C|(D&E))", new Authorizations("D", "E"))); + // Doc requires "(A|B)&(C|(D&E))" and user has "D" and "E" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A|B)&(C|(D&E))", new Authorizations("D", "E"))); - // Doc requires "(A|B)&(C|(D&E))" and user has "A" and "D" = User CANNOT view - assertFalse(testVisibilityStatement("(A|B)&(C|(D&E))", new Authorizations("A", "D"))); + // Doc requires "(A|B)&(C|(D&E))" and user has "A" and "D" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A|B)&(C|(D&E))", new Authorizations("A", "D"))); - // Doc requires "(A|B)&(C|(D&E))" and user has "B" and "E" = User CANNOT view - assertFalse(testVisibilityStatement("(A|B)&(C|(D&E))", new Authorizations("B", "E"))); + // Doc requires "(A|B)&(C|(D&E))" and user has "B" and "E" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "(A|B)&(C|(D&E))", new Authorizations("B", "E"))); - // Doc requires "A|(B&C&(D|E))" and user has "A" = User can view - assertTrue(testVisibilityStatement("A|(B&C&(D|E))", new Authorizations("A"))); + // Doc requires "A|(B&C&(D|E))" and user has "A" = User can view + assertTrue(testVisibilityStatement(dao, "A|(B&C&(D|E))", new Authorizations("A"))); - // Doc requires "A|(B&C&(D|E))" and user has "B" and "C" and "D" = User can view - assertTrue(testVisibilityStatement("A|(B&C&(D|E))", new Authorizations("B", "C", "D"))); + // Doc requires "A|(B&C&(D|E))" and user has "B" and "C" and "D" = User can view + assertTrue(testVisibilityStatement(dao, "A|(B&C&(D|E))", new Authorizations("B", "C", "D"))); - // Doc requires "A|(B&C&(D|E))" and user has "B" and "C" and "E" = User can view - assertTrue(testVisibilityStatement("A|(B&C&(D|E))", new Authorizations("B", "C", "E"))); + // Doc requires "A|(B&C&(D|E))" and user has "B" and "C" and "E" = User can view + assertTrue(testVisibilityStatement(dao, "A|(B&C&(D|E))", new Authorizations("B", "C", "E"))); - // Doc requires "A|(B&C&(D|E))" and user has "B" = User CANNOT view - assertFalse(testVisibilityStatement("A|(B&C&(D|E))", new Authorizations("B"))); + // Doc requires "A|(B&C&(D|E))" and user has "B" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "A|(B&C&(D|E))", new Authorizations("B"))); - // Doc requires "A|(B&C&(D|E))" and user has "C" = User CANNOT view - assertFalse(testVisibilityStatement("A|(B&C&(D|E))", new Authorizations("C"))); + // Doc requires "A|(B&C&(D|E))" and user has "C" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "A|(B&C&(D|E))", new Authorizations("C"))); - // Doc requires "A|(B&C&(D|E))" and user has "D" = User CANNOT view - assertFalse(testVisibilityStatement("A|(B&C&(D|E))", new Authorizations("D"))); + // Doc requires "A|(B&C&(D|E))" and user has "D" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "A|(B&C&(D|E))", new Authorizations("D"))); - // Doc requires "A|(B&C&(D|E))" and user has "E" = User CANNOT view - assertFalse(testVisibilityStatement("A|(B&C&(D|E))", new Authorizations("E"))); + // Doc requires "A|(B&C&(D|E))" and user has "E" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "A|(B&C&(D|E))", new Authorizations("E"))); - // Doc requires "A|(B&C&(D|E))" and user has "B" and "C" = User CANNOT view - assertFalse(testVisibilityStatement("A|(B&C&(D|E))", new Authorizations("B", "C"))); + // Doc requires "A|(B&C&(D|E))" and user has "B" and "C" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "A|(B&C&(D|E))", new Authorizations("B", "C"))); - // Doc requires "A|(B&C&(D|E))" and user has "D" and "E" = User CANNOT view - assertFalse(testVisibilityStatement("A|(B&C&(D|E))", new Authorizations("D", "E"))); + // Doc requires "A|(B&C&(D|E))" and user has "D" and "E" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "A|(B&C&(D|E))", new Authorizations("D", "E"))); - // Doc requires "A|B|C|D|(E&F&G&H)" and user has "A" = User can view - assertTrue(testVisibilityStatement("A|B|C|D|(E&F&G&H)", new Authorizations("A"))); + // Doc requires "A|B|C|D|(E&F&G&H)" and user has "A" = User can view + assertTrue(testVisibilityStatement(dao, "A|B|C|D|(E&F&G&H)", new Authorizations("A"))); - // Doc requires "A|B|C|D|(E&F&G&H)" and user has "E" = User CANNOT view - assertFalse(testVisibilityStatement("A|B|C|D|(E&F&G&H)", new Authorizations("E"))); + // Doc requires "A|B|C|D|(E&F&G&H)" and user has "E" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "A|B|C|D|(E&F&G&H)", new Authorizations("E"))); - // Doc requires "A|B|C|D|(E&F&G&H)" and user has "E" and "F" = User CANNOT view - assertFalse(testVisibilityStatement("A|B|C|D|(E&F&G&H)", new Authorizations("E", "F"))); + // Doc requires "A|B|C|D|(E&F&G&H)" and user has "E" and "F" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "A|B|C|D|(E&F&G&H)", new Authorizations("E", "F"))); - // Doc requires "A|B|C|D|(E&F&G&H)" and user has "I" = User CANNOT view - assertFalse(testVisibilityStatement("A|B|C|D|(E&F&G&H)", new Authorizations("I"))); + // Doc requires "A|B|C|D|(E&F&G&H)" and user has "I" = User CANNOT view + assertFalse(testVisibilityStatement(dao, "A|B|C|D|(E&F&G&H)", new Authorizations("I"))); - // Doc requires "A|B|C|D|(E&F&G&H)" and user has "A" and "I" = User can view - assertTrue(testVisibilityStatement("A|B|C|D|(E&F&G&H)", new Authorizations("A", "I"))); + // Doc requires "A|B|C|D|(E&F&G&H)" and user has "A" and "I" = User can view + assertTrue(testVisibilityStatement(dao, "A|B|C|D|(E&F&G&H)", new Authorizations("A", "I"))); - // Doc requires "A|B|C|D|(E&F&G&H)" and user has "E" and "F" and "G" and "H" = User can view - assertTrue(testVisibilityStatement("A|B|C|D|(E&F&G&H)", new Authorizations("E", "F", "G", "H"))); + // Doc requires "A|B|C|D|(E&F&G&H)" and user has "E" and "F" and "G" and "H" = User can view + assertTrue(testVisibilityStatement(dao, "A|B|C|D|(E&F&G&H)", new Authorizations("E", "F", "G", "H"))); - // Doc requires "A|B|C|D|(E&F&G&H)" and user has "E" and "F" and "G" and "H" and "I" = User can view - assertTrue(testVisibilityStatement("A|B|C|D|(E&F&G&H)", new Authorizations("E", "F", "G", "H", "I"))); + // Doc requires "A|B|C|D|(E&F&G&H)" and user has "E" and "F" and "G" and "H" and "I" = User can view + assertTrue(testVisibilityStatement(dao, "A|B|C|D|(E&F&G&H)", new Authorizations("E", "F", "G", "H", "I"))); - // Doc has no requirement and user has ALL_AUTHORIZATIONS = User can view - assertTrue(testVisibilityStatement(null, MongoDbRdfConstants.ALL_AUTHORIZATIONS)); + // Doc has no requirement and user has ALL_AUTHORIZATIONS = User can view + assertTrue(testVisibilityStatement(dao, null, MongoDbRdfConstants.ALL_AUTHORIZATIONS)); - // Doc has no requirement and user has "A" = User can view - assertTrue(testVisibilityStatement(null, new Authorizations("A"))); + // Doc has no requirement and user has "A" = User can view + assertTrue(testVisibilityStatement(dao, null, new Authorizations("A"))); - // Doc has no requirement and user has "A" and "B" = User can view - assertTrue(testVisibilityStatement(null, new Authorizations("A", "B"))); + // Doc has no requirement and user has "A" and "B" = User can view + assertTrue(testVisibilityStatement(dao, null, new Authorizations("A", "B"))); - // Doc has no requirement and user has no authorizations = User can view - assertTrue(testVisibilityStatement(null, null)); + // Doc has no requirement and user has no authorizations = User can view + assertTrue(testVisibilityStatement(dao, null, null)); - // Doc has no requirement and user has no authorizations = User can view - assertTrue(testVisibilityStatement("", null)); + // Doc has no requirement and user has no authorizations = User can view + assertTrue(testVisibilityStatement(dao, "", null)); - // Doc requires "A" and user has no authorizations = User can view - assertTrue(testVisibilityStatement("A", null)); + // Doc requires "A" and user has no authorizations = User can view + assertTrue(testVisibilityStatement(dao, "A", null)); - // Doc requires "A" and "B" and user has no authorizations = User can view - assertTrue(testVisibilityStatement("A&B", null)); + // Doc requires "A" and "B" and user has no authorizations = User can view + assertTrue(testVisibilityStatement(dao, "A&B", null)); - // Doc requires "A" or "B" and user has no authorizations = User can view - assertTrue(testVisibilityStatement("A|B", null)); + // Doc requires "A" or "B" and user has no authorizations = User can view + assertTrue(testVisibilityStatement(dao, "A|B", null)); + } finally { + dao.destroy(); + } } /** @@ -503,8 +526,11 @@ public class MongoDBRyaDAOIT extends MongoTestBase { * in the collection. {@code false} otherwise. * @throws RyaDAOException */ - private boolean testVisibilityStatement(final String documentVisibility, final Authorizations userAuthorizations) throws RyaDAOException { - final MongoDatabase db = client.getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); + private boolean testVisibilityStatement( + final MongoDBRyaDAO dao, + final String documentVisibility, + final Authorizations userAuthorizations) throws RyaDAOException { + final MongoDatabase db = conf.getMongoClient().getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); final MongoCollection<Document> coll = db.getCollection(conf.getTriplesCollectionName()); final RyaStatement statement = buildVisibilityTestRyaStatement(documentVisibility);
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/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 8cf75f1..200be9a 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 @@ -1,5 +1,4 @@ -package org.apache.rya.mongodb; -/* +/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information @@ -17,6 +16,7 @@ package org.apache.rya.mongodb; * specific language governing permissions and limitations * under the License. */ +package org.apache.rya.mongodb; import static org.junit.Assert.assertEquals; @@ -27,93 +27,112 @@ import org.apache.rya.api.domain.RyaStatement.RyaStatementBuilder; import org.apache.rya.api.domain.RyaURI; import org.apache.rya.api.persist.RyaDAOException; 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; +/** + * Integration tests the methods of {@link MongoDBRyaDAO}. + */ public class MongoDBRyaDAOTest extends MongoTestBase { - private MongoClient client; - private MongoDBRyaDAO dao; - - @Before - public void setUp() throws IOException, RyaDAOException{ - 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(), conf); + MongoDBRyaDAO dao = new MongoDBRyaDAO(); + try { + dao.setConf(conf); + dao.init(); + + final RyaStatementBuilder builder = new RyaStatementBuilder(); + builder.setPredicate(new RyaURI("http://temp.com")); + dao.delete(builder.build(), conf); + } finally { + dao.destroy(); + } } @Test public void testAdd() throws RyaDAOException, MongoException, IOException { - final RyaStatementBuilder builder = new RyaStatementBuilder(); - builder.setPredicate(new RyaURI("http://temp.com")); - builder.setSubject(new RyaURI("http://subject.com")); - builder.setObject(new RyaURI("http://object.com")); + MongoDBRyaDAO dao = new MongoDBRyaDAO(); + try { + dao.setConf(conf); + dao.init(); - final MongoDatabase db = client.getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); - final MongoCollection<Document> coll = db.getCollection(conf.getTriplesCollectionName()); + final RyaStatementBuilder builder = new RyaStatementBuilder(); + builder.setPredicate(new RyaURI("http://temp.com")); + builder.setSubject(new RyaURI("http://subject.com")); + builder.setObject(new RyaURI("http://object.com")); - dao.add(builder.build()); + final MongoDatabase db = conf.getMongoClient().getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); + final MongoCollection<Document> coll = db.getCollection(conf.getTriplesCollectionName()); - assertEquals(coll.count(),1); + dao.add(builder.build()); + assertEquals(coll.count(),1); + } finally { + dao.destroy(); + } } @Test public void testDelete() throws RyaDAOException, MongoException, IOException { - final RyaStatementBuilder builder = new RyaStatementBuilder(); - builder.setPredicate(new RyaURI("http://temp.com")); - builder.setSubject(new RyaURI("http://subject.com")); - builder.setObject(new RyaURI("http://object.com")); - final RyaStatement statement = builder.build(); - - final 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, conf); - - assertEquals(coll.count(),0); - + MongoDBRyaDAO dao = new MongoDBRyaDAO(); + try { + dao.setConf(conf); + dao.init(); + + final RyaStatementBuilder builder = new RyaStatementBuilder(); + builder.setPredicate(new RyaURI("http://temp.com")); + builder.setSubject(new RyaURI("http://subject.com")); + builder.setObject(new RyaURI("http://object.com")); + final RyaStatement statement = builder.build(); + + final MongoDatabase db = conf.getMongoClient().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, conf); + assertEquals(coll.count(),0); + } finally { + dao.destroy(); + } } @Test public void testDeleteWildcardSubjectWithContext() throws RyaDAOException, MongoException, IOException { - final RyaStatementBuilder builder = new RyaStatementBuilder(); - builder.setPredicate(new RyaURI("http://temp.com")); - builder.setSubject(new RyaURI("http://subject.com")); - builder.setObject(new RyaURI("http://object.com")); - builder.setContext(new RyaURI("http://context.com")); - final RyaStatement statement = builder.build(); - - final 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); - - final RyaStatementBuilder builder2 = new RyaStatementBuilder(); - builder2.setPredicate(new RyaURI("http://temp.com")); - builder2.setObject(new RyaURI("http://object.com")); - builder2.setContext(new RyaURI("http://context3.com")); - final RyaStatement query = builder2.build(); - - dao.delete(query, conf); - - assertEquals(coll.count(),1); + MongoDBRyaDAO dao = new MongoDBRyaDAO(); + try { + dao.setConf(conf); + dao.init(); + + final RyaStatementBuilder builder = new RyaStatementBuilder(); + builder.setPredicate(new RyaURI("http://temp.com")); + builder.setSubject(new RyaURI("http://subject.com")); + builder.setObject(new RyaURI("http://object.com")); + builder.setContext(new RyaURI("http://context.com")); + final RyaStatement statement = builder.build(); + + final MongoDatabase db = conf.getMongoClient().getDatabase(conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); + final MongoCollection<Document> coll = db.getCollection(conf.getTriplesCollectionName()); + + dao.add(statement); + assertEquals(coll.count(),1); + + final RyaStatementBuilder builder2 = new RyaStatementBuilder(); + builder2.setPredicate(new RyaURI("http://temp.com")); + builder2.setObject(new RyaURI("http://object.com")); + builder2.setContext(new RyaURI("http://context3.com")); + final RyaStatement query = builder2.build(); + + dao.delete(query, conf); + assertEquals(coll.count(),1); + } finally { + dao.destroy(); + } } -} +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoRyaTestBase.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoRyaTestBase.java b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoRyaTestBase.java deleted file mode 100644 index 3d95818..0000000 --- a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoRyaTestBase.java +++ /dev/null @@ -1,73 +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.mongodb; - -import java.io.IOException; -import java.util.concurrent.atomic.AtomicInteger; - -import org.apache.rya.api.persist.RyaDAOException; -import org.junit.After; -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; - -import com.mongodb.MongoClient; - -import de.flapdoodle.embed.mongo.distribution.Version; - -public class MongoRyaTestBase { - - private static final AtomicInteger db = new AtomicInteger(1); - - protected static EmbeddedMongoFactory testsFactory; - protected MongoClient mongoClient; - private int currentTestDb = -1; - - @BeforeClass() - public static void beforeClass() throws Exception { - testsFactory = EmbeddedMongoFactory.with(Version.Main.PRODUCTION); - } - - @Before - public void MongoRyaTestBaseSetUp() throws IOException, RyaDAOException { - mongoClient = testsFactory.newMongoClient(); - currentTestDb = db.getAndIncrement(); - } - - @After - public void MongoRyaTestBaseAfter() throws Exception { - if (mongoClient != null) { - mongoClient.close(); - } - currentTestDb = -1; - MongoConnectorFactory.closeMongoClient(); - } - - @AfterClass() - public static void afterClass() throws Exception { - if (testsFactory != null) { - testsFactory.shutdown(); - } - } - - public String getDbName() { - return "rya_" + currentTestDb; - } - -} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/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 index e325e82..a3db535 100644 --- 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 @@ -18,9 +18,10 @@ */ package org.apache.rya.mongodb; +import java.util.List; + import org.apache.hadoop.conf.Configuration; import org.bson.Document; -import org.junit.After; import org.junit.Before; import com.mongodb.DBCollection; @@ -33,28 +34,43 @@ import com.mongodb.client.MongoCollection; */ public class MongoTestBase { - private static MongoClient mongoClient = null; - protected static MongoDBRdfConfiguration conf; + private MongoClient mongoClient = null; + protected StatefulMongoDBRdfConfiguration conf; @Before public void setupTest() throws Exception { - conf = new MongoDBRdfConfiguration( new Configuration() ); + // Setup the configuration that will be used within the test. + final MongoDBRdfConfiguration conf = new MongoDBRdfConfiguration( new Configuration() ); conf.setBoolean("sc.useMongo", true); conf.setTablePrefix("test_"); conf.setMongoDBName("testDB"); - mongoClient = EmbeddedMongoSingleton.getInstance(); - conf.setMongoClient(mongoClient); - } + conf.setMongoHostname(EmbeddedMongoSingleton.getMongodConfig().net().getServerAddress().getHostAddress()); + conf.setMongoPort(Integer.toString(EmbeddedMongoSingleton.getMongodConfig().net().getPort())); + + // Let tests update the configuration. + updateConfiguration(conf); + + // Create the stateful configuration object. + mongoClient = EmbeddedMongoSingleton.getNewMongoClient(); + final List<MongoSecondaryIndex> indexers = conf.getInstances("ac.additional.indexers", MongoSecondaryIndex.class); + this.conf = new StatefulMongoDBRdfConfiguration(conf, mongoClient, indexers); - @After - public void cleanupTest() { - // Remove any DBs that were created by the test. + // Remove any DBs that were created by previous tests. for(final String dbName : mongoClient.listDatabaseNames()) { mongoClient.dropDatabase(dbName); } } /** + * TODO doc + * + * @param conf + */ + protected void updateConfiguration(final MongoDBRdfConfiguration conf) { + // By default, do nothing. + } + + /** * @return A {@link MongoClient} that is connected to the embedded instance of Mongo DB. */ public MongoClient getMongoClient() { http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/dao/mongodb.rya/src/test/resources/log4j.properties ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/test/resources/log4j.properties b/dao/mongodb.rya/src/test/resources/log4j.properties new file mode 100644 index 0000000..73b9512 --- /dev/null +++ b/dao/mongodb.rya/src/test/resources/log4j.properties @@ -0,0 +1,27 @@ +# +# 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. +# + +# Root logger option +log4j.rootLogger=INFO, stdout + +# Direct log messages to stdout +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.Target=System.out +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/extras/indexing/src/main/java/org/apache/rya/indexing/entity/EntityIndexOptimizer.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/org/apache/rya/indexing/entity/EntityIndexOptimizer.java b/extras/indexing/src/main/java/org/apache/rya/indexing/entity/EntityIndexOptimizer.java index cd5278e..507fde2 100644 --- a/extras/indexing/src/main/java/org/apache/rya/indexing/entity/EntityIndexOptimizer.java +++ b/extras/indexing/src/main/java/org/apache/rya/indexing/entity/EntityIndexOptimizer.java @@ -19,6 +19,7 @@ package org.apache.rya.indexing.entity; import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Preconditions.checkState; import org.apache.hadoop.conf.Configurable; import org.apache.hadoop.conf.Configuration; @@ -35,6 +36,7 @@ import org.apache.rya.indexing.external.matching.ExternalSetProvider; import org.apache.rya.indexing.external.matching.QueryNodeListRater; import org.apache.rya.indexing.external.matching.QuerySegment; import org.apache.rya.indexing.external.matching.TopOfQueryFilterRelocator; +import org.apache.rya.mongodb.StatefulMongoDBRdfConfiguration; import org.openrdf.query.BindingSet; import org.openrdf.query.Dataset; import org.openrdf.query.algebra.TupleExpr; @@ -68,6 +70,9 @@ public class EntityIndexOptimizer extends AbstractExternalSetOptimizer<EntityQue @Override public void setConf(final Configuration conf) { + checkState(conf instanceof StatefulMongoDBRdfConfiguration, + "The provided Configuration must be of type StatefulMongoDBRdfConfiguration, but was " + conf.getClass().getName()); + this.conf = conf; indexer.setConf(conf); http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/extras/indexing/src/main/java/org/apache/rya/indexing/entity/update/mongo/MongoEntityIndexer.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/org/apache/rya/indexing/entity/update/mongo/MongoEntityIndexer.java b/extras/indexing/src/main/java/org/apache/rya/indexing/entity/update/mongo/MongoEntityIndexer.java index 1ab48b6..d1d00fb 100644 --- a/extras/indexing/src/main/java/org/apache/rya/indexing/entity/update/mongo/MongoEntityIndexer.java +++ b/extras/indexing/src/main/java/org/apache/rya/indexing/entity/update/mongo/MongoEntityIndexer.java @@ -18,6 +18,8 @@ */ package org.apache.rya.indexing.entity.update.mongo; +import static com.google.common.base.Preconditions.checkState; + import org.apache.hadoop.conf.Configuration; import org.apache.rya.indexing.entity.storage.EntityStorage; import org.apache.rya.indexing.entity.storage.EntityStorage.EntityStorageException; @@ -26,8 +28,7 @@ import org.apache.rya.indexing.entity.storage.mongo.MongoEntityStorage; import org.apache.rya.indexing.entity.storage.mongo.MongoTypeStorage; import org.apache.rya.indexing.entity.update.BaseEntityIndexer; import org.apache.rya.indexing.entity.update.EntityIndexer; -import org.apache.rya.mongodb.MongoConnectorFactory; -import org.apache.rya.mongodb.MongoDBRdfConfiguration; +import org.apache.rya.mongodb.StatefulMongoDBRdfConfiguration; import com.mongodb.MongoClient; @@ -43,29 +44,27 @@ public class MongoEntityIndexer extends BaseEntityIndexer { @Override public EntityStorage getEntityStorage(final Configuration conf) throws EntityStorageException { - final MongoDBRdfConfiguration mongoConf = (MongoDBRdfConfiguration) conf; + checkState(conf instanceof StatefulMongoDBRdfConfiguration, + "The provided Configuration must be of type StatefulMongoDBRdfConfiguration, but was " + conf.getClass().getName()); + + final StatefulMongoDBRdfConfiguration mongoConf = (StatefulMongoDBRdfConfiguration) conf; if (client == null) { - if(mongoConf.getMongoClient() != null) { - client = mongoConf.getMongoClient(); - } else { - client = MongoConnectorFactory.getMongoClient(conf); - } + client = mongoConf.getMongoClient(); } - final String ryaInstanceName = new MongoDBRdfConfiguration(conf).getMongoDBName(); + final String ryaInstanceName = mongoConf.getMongoDBName(); return new MongoEntityStorage(client, ryaInstanceName); } @Override public TypeStorage getTypeStorage(final Configuration conf) { - final MongoDBRdfConfiguration mongoConf = (MongoDBRdfConfiguration) conf; + checkState(conf instanceof StatefulMongoDBRdfConfiguration, + "The provided Configuration must be of type StatefulMongoDBRdfConfiguration, but was " + conf.getClass().getName()); + + final StatefulMongoDBRdfConfiguration mongoConf = (StatefulMongoDBRdfConfiguration) conf; if (client == null) { - if(mongoConf.getMongoClient() != null) { - client = mongoConf.getMongoClient(); - } else { - client = MongoConnectorFactory.getMongoClient(conf); - } + client = mongoConf.getMongoClient(); } - final String ryaInstanceName = new MongoDBRdfConfiguration(conf).getMongoDBName(); + final String ryaInstanceName = mongoConf.getMongoDBName(); return new MongoTypeStorage(client, ryaInstanceName); } http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/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 9ce6e22..a815040 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 @@ -1,6 +1,4 @@ -package org.apache.rya.indexing.mongodb; - -/* +/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information @@ -18,6 +16,9 @@ package org.apache.rya.indexing.mongodb; * specific language governing permissions and limitations * under the License. */ +package org.apache.rya.indexing.mongodb; + +import static com.google.common.base.Preconditions.checkState; import java.io.IOException; import java.util.Collection; @@ -29,10 +30,10 @@ import org.apache.rya.api.domain.RyaStatement; import org.apache.rya.api.domain.RyaURI; import org.apache.rya.api.resolver.RyaToRdfConversions; import org.apache.rya.indexing.StatementConstraints; -import org.apache.rya.mongodb.MongoConnectorFactory; import org.apache.rya.mongodb.MongoDBRdfConfiguration; import org.apache.rya.mongodb.MongoDBRyaDAO; import org.apache.rya.mongodb.MongoSecondaryIndex; +import org.apache.rya.mongodb.StatefulMongoDBRdfConfiguration; import org.apache.rya.mongodb.batch.MongoDbBatchWriter; import org.apache.rya.mongodb.batch.MongoDbBatchWriterConfig; import org.apache.rya.mongodb.batch.MongoDbBatchWriterException; @@ -43,14 +44,12 @@ import org.openrdf.model.Statement; import org.openrdf.model.URI; import org.openrdf.query.QueryEvaluationException; -import com.google.common.annotations.VisibleForTesting; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.DBObject; import com.mongodb.MongoClient; import com.mongodb.QueryBuilder; -import com.mongodb.ServerAddress; import info.aduna.iteration.CloseableIteration; @@ -63,7 +62,7 @@ public abstract class AbstractMongoIndexer<T extends IndexingMongoDBStorageStrat private boolean isInit = false; private boolean flushEachUpdate = true; - protected Configuration conf; + protected StatefulMongoDBRdfConfiguration conf; protected MongoDBRyaDAO dao; protected MongoClient mongoClient; protected String dbName; @@ -76,7 +75,7 @@ public abstract class AbstractMongoIndexer<T extends IndexingMongoDBStorageStrat private MongoDbBatchWriter<DBObject> mongoDbBatchWriter; protected void initCore() { - dbName = conf.get(MongoDBRdfConfiguration.MONGO_DB_NAME); + dbName = conf.getMongoDBName(); db = this.mongoClient.getDB(dbName); final String collectionName = conf.get(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya") + getCollectionName(); collection = db.getCollection(collectionName); @@ -84,7 +83,7 @@ public abstract class AbstractMongoIndexer<T extends IndexingMongoDBStorageStrat flushEachUpdate = ((MongoDBRdfConfiguration)conf).flushEachUpdate(); final MongoDbBatchWriterConfig mongoDbBatchWriterConfig = MongoDbBatchWriterUtils.getMongoDbBatchWriterConfig(conf); - mongoDbBatchWriter = new MongoDbBatchWriter<DBObject>(new DbCollectionType(collection), mongoDbBatchWriterConfig); + mongoDbBatchWriter = new MongoDbBatchWriter<>(new DbCollectionType(collection), mongoDbBatchWriterConfig); try { mongoDbBatchWriter.start(); } catch (final MongoDbBatchWriterException e) { @@ -97,24 +96,13 @@ public abstract class AbstractMongoIndexer<T extends IndexingMongoDBStorageStrat this.mongoClient = client; } - @VisibleForTesting - public void initIndexer(final Configuration conf, final MongoClient client) { - setClient(client); - final ServerAddress address = client.getAddress(); - conf.set(MongoDBRdfConfiguration.MONGO_INSTANCE, address.getHost()); - conf.set(MongoDBRdfConfiguration.MONGO_INSTANCE_PORT, Integer.toString(address.getPort())); - setConf(conf); - if (!isInit) { - init(); - isInit = true; - } - } - @Override public void setConf(final Configuration conf) { - this.conf = conf; + checkState(conf instanceof StatefulMongoDBRdfConfiguration, + "The provided Configuration must be a StatefulMongoDBRdfConfiguration, but it was " + conf.getClass().getName()); + this.conf = (StatefulMongoDBRdfConfiguration) conf; if (!isInit){ - setClient(MongoConnectorFactory.getMongoClient(conf)); + setClient(this.conf.getMongoClient()); init(); } } http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/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 5d353b4..249bde5 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 @@ -39,8 +39,7 @@ import org.apache.rya.indexing.mongodb.update.RyaObjectStorage.ObjectStorageExce import org.apache.rya.indexing.smarturi.SmartUriAdapter; import org.apache.rya.indexing.smarturi.SmartUriException; import org.apache.rya.indexing.smarturi.SmartUriStorage; -import org.apache.rya.mongodb.MongoConnectorFactory; -import org.apache.rya.mongodb.MongoDBRdfConfiguration; +import org.apache.rya.mongodb.StatefulMongoDBRdfConfiguration; import org.openrdf.model.URI; import org.openrdf.model.Value; @@ -52,15 +51,15 @@ import com.mongodb.MongoException; */ public class MongoDbSmartUri implements SmartUriStorage { private boolean isInit = false; - private final MongoDBRdfConfiguration conf; + private final StatefulMongoDBRdfConfiguration conf; private MongoClient mongoClient = null; private EntityStorage entityStorage; /** * Creates a new instance of {@link MongoDbSmartUri}. - * @param conf the {@link MongoDBRdfConfiguration}. (not {@code null}) + * @param conf the {@link StatefulMongoDBRdfConfiguration}. (not {@code null}) */ - public MongoDbSmartUri(final MongoDBRdfConfiguration conf) { + public MongoDbSmartUri(final StatefulMongoDBRdfConfiguration conf) { this.conf = checkNotNull(conf); } @@ -147,13 +146,9 @@ public class MongoDbSmartUri implements SmartUriStorage { * @throws MongoException * @throws EntityStorageException */ - private void setupClient(final Configuration conf) throws UnknownHostException, MongoException, EntityStorageException { - final MongoDBRdfConfiguration mongoConf = (MongoDBRdfConfiguration) conf; - mongoClient = mongoConf.getMongoClient(); - if (mongoClient == null) { - mongoClient = MongoConnectorFactory.getMongoClient(conf); - } - entityStorage = new MongoEntityStorage(mongoClient, mongoConf.getMongoInstance()); + private void setupClient(final StatefulMongoDBRdfConfiguration conf) throws UnknownHostException, MongoException, EntityStorageException { + mongoClient = conf.getMongoClient(); + entityStorage = new MongoEntityStorage(mongoClient, conf.getRyaInstance()); isInit = true; } http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/767349da/extras/indexing/src/main/java/org/apache/rya/indexing/statement/metadata/matching/RyaQueryEngineFactory.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/org/apache/rya/indexing/statement/metadata/matching/RyaQueryEngineFactory.java b/extras/indexing/src/main/java/org/apache/rya/indexing/statement/metadata/matching/RyaQueryEngineFactory.java index 91f281c..1025537 100644 --- a/extras/indexing/src/main/java/org/apache/rya/indexing/statement/metadata/matching/RyaQueryEngineFactory.java +++ b/extras/indexing/src/main/java/org/apache/rya/indexing/statement/metadata/matching/RyaQueryEngineFactory.java @@ -1,5 +1,4 @@ -package org.apache.rya.indexing.statement.metadata.matching; -/* +/** * 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 @@ -7,9 +6,9 @@ package org.apache.rya.indexing.statement.metadata.matching; * 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 @@ -17,6 +16,8 @@ package org.apache.rya.indexing.statement.metadata.matching; * specific language governing permissions and limitations * under the License. */ +package org.apache.rya.indexing.statement.metadata.matching; + import org.apache.accumulo.core.client.AccumuloException; import org.apache.accumulo.core.client.AccumuloSecurityException; import org.apache.accumulo.core.client.Connector; @@ -28,23 +29,18 @@ import org.apache.rya.accumulo.AccumuloRdfConfiguration; import org.apache.rya.accumulo.query.AccumuloRyaQueryEngine; import org.apache.rya.api.RdfCloudTripleStoreConfiguration; import org.apache.rya.api.persist.query.RyaQueryEngine; -import org.apache.rya.mongodb.MongoConnectorFactory; import org.apache.rya.mongodb.MongoDBQueryEngine; -import org.apache.rya.mongodb.MongoDBRdfConfiguration; - -import com.mongodb.MongoClient; +import org.apache.rya.mongodb.StatefulMongoDBRdfConfiguration; /** * THis class creates the appropriate {@link RyaQueryEngine} based on the type of * {@link RdfCloudTripleStoreConfiguration} object that is passed in and whether or not * Rya is configured to use Mongo. - * */ public class RyaQueryEngineFactory { - @SuppressWarnings("unchecked") - public static <C extends RdfCloudTripleStoreConfiguration> RyaQueryEngine<C> getQueryEngine(RdfCloudTripleStoreConfiguration conf) { + public static <C extends RdfCloudTripleStoreConfiguration> RyaQueryEngine<C> getQueryEngine(RdfCloudTripleStoreConfiguration conf) { if(conf instanceof AccumuloRdfConfiguration) { AccumuloRdfConfiguration aConf = (AccumuloRdfConfiguration) conf; Instance instance; @@ -64,12 +60,13 @@ public class RyaQueryEngineFactory { throw new RuntimeException(e); } return (RyaQueryEngine<C>) new AccumuloRyaQueryEngine(conn, aConf); - } else if(conf instanceof MongoDBRdfConfiguration && conf.getBoolean("sc.useMongo", false)) { - MongoClient client = MongoConnectorFactory.getMongoClient(conf); - return (RyaQueryEngine<C>) new MongoDBQueryEngine((MongoDBRdfConfiguration) conf, client); + } else if(conf instanceof StatefulMongoDBRdfConfiguration && conf.getBoolean("sc.useMongo", false)) { + StatefulMongoDBRdfConfiguration mongoConf = (StatefulMongoDBRdfConfiguration)conf; + MongoDBQueryEngine mongoQueryEngine = new MongoDBQueryEngine(); + mongoQueryEngine.setConf(mongoConf); + return (RyaQueryEngine<C>) mongoQueryEngine; } else { throw new IllegalArgumentException("Invalid configuration type."); } } - -} +} \ No newline at end of file