http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/instance/MongoRyaInstanceDetailsRepository.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/instance/MongoRyaInstanceDetailsRepository.java b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/instance/MongoRyaInstanceDetailsRepository.java new file mode 100644 index 0000000..dfefa8f --- /dev/null +++ b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/instance/MongoRyaInstanceDetailsRepository.java @@ -0,0 +1,144 @@ +package mvm.rya.mongodb.instance; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import static com.google.common.base.Preconditions.checkNotNull; +import static java.util.Objects.requireNonNull; + +import javax.annotation.ParametersAreNonnullByDefault; + +import com.mongodb.BasicDBObject; +import com.mongodb.DB; +import com.mongodb.DBCollection; +import com.mongodb.DBObject; +import com.mongodb.MongoClient; +import com.mongodb.WriteResult; + +import mvm.rya.api.instance.RyaDetails; +import mvm.rya.api.instance.RyaDetailsRepository; +import mvm.rya.mongodb.instance.MongoDetailsAdapter.MalformedRyaDetailsException; + +/** + * An implementation of {@link RyaDetailsRepository} that stores a Rya + * instance's {@link RyaDetails} in a Mongo document. + */ +@ParametersAreNonnullByDefault +public class MongoRyaInstanceDetailsRepository implements RyaDetailsRepository { + private static final String INSTANCE_DETAILS_COLLECTION_NAME = "instance_details"; + + private final DB db; + private final String instanceName; + + /** + * Constructs an instance of {@link MongoRyaInstanceDetailsRepository}. + * + * @param client - Connects to the instance of Mongo that hosts the Rya instance. (not null) + * @param instanceName - The name of the Rya instance this repository represents. (not null) + */ + public MongoRyaInstanceDetailsRepository(final MongoClient client, final String instanceName) { + checkNotNull(client); + this.instanceName = requireNonNull( instanceName ); + db = client.getDB(this.instanceName); + } + + @Override + public boolean isInitialized() throws RyaDetailsRepositoryException { + final DBCollection col = db.getCollection(INSTANCE_DETAILS_COLLECTION_NAME); + return col.count() == 1; + } + + @Override + public void initialize(final RyaDetails details) throws AlreadyInitializedException, RyaDetailsRepositoryException { + // Preconditions. + requireNonNull( details ); + + if(!details.getRyaInstanceName().equals( instanceName )) { + throw new RyaDetailsRepositoryException("The instance name that was in the provided 'details' does not match " + + "the instance name that this repository is connected to. Make sure you're connected to the" + + "correct Rya instance."); + } + + if(isInitialized()) { + throw new AlreadyInitializedException("The repository has already been initialized for the Rya instance named '" + + instanceName + "'."); + } + + // Create the document that hosts the details if it has not been created yet. + final DBCollection col = db.createCollection(INSTANCE_DETAILS_COLLECTION_NAME, new BasicDBObject()); + + // Write the details to the collection. + col.insert(MongoDetailsAdapter.toDBObject(details)); + } + + @Override + public RyaDetails getRyaInstanceDetails() throws NotInitializedException, RyaDetailsRepositoryException { + // Preconditions. + if(!isInitialized()) { + throw new NotInitializedException("Could not fetch the details for the Rya instanced named '" + + instanceName + "' because it has not been initialized yet."); + } + + // Fetch the value from the collection. + final DBCollection col = db.getCollection(INSTANCE_DETAILS_COLLECTION_NAME); + //There should only be one document in the collection. + final DBObject mongoObj = col.findOne(); + + try{ + // Deserialize it. + return MongoDetailsAdapter.toRyaDetails( mongoObj ); + } catch (final MalformedRyaDetailsException e) { + throw new RyaDetailsRepositoryException("The existing details details are malformed.", e); + } + } + + @Override + public void update(final RyaDetails oldDetails, final RyaDetails newDetails) + throws NotInitializedException, ConcurrentUpdateException, RyaDetailsRepositoryException { + // Preconditions. + requireNonNull(oldDetails); + requireNonNull(newDetails); + + if(!newDetails.getRyaInstanceName().equals( instanceName )) { + throw new RyaDetailsRepositoryException("The instance name that was in the provided 'newDetails' does not match " + + "the instance name that this repository is connected to. Make sure you're connected to the" + + "correct Rya instance."); + } + + if(!isInitialized()) { + throw new NotInitializedException("Could not update the details for the Rya instanced named '" + + instanceName + "' because it has not been initialized yet."); + } + + if(oldDetails.equals(newDetails)) { + return; + } + + final DBCollection col = db.getCollection(INSTANCE_DETAILS_COLLECTION_NAME); + final DBObject oldObj = MongoDetailsAdapter.toDBObject(oldDetails); + final DBObject newObj = MongoDetailsAdapter.toDBObject(newDetails); + final WriteResult result = col.update(oldObj, newObj); + + //since there is only 1 document, there should only be 1 update. + if(result.getN() != 1) { + throw new ConcurrentUpdateException("Could not update the details for the Rya instance named '" + + instanceName + "' because the old value is out of date."); + } + } +}
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/NonCloseableRyaStatementCursorIterator.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/NonCloseableRyaStatementCursorIterator.java b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/NonCloseableRyaStatementCursorIterator.java new file mode 100644 index 0000000..ba37ca1 --- /dev/null +++ b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/NonCloseableRyaStatementCursorIterator.java @@ -0,0 +1,57 @@ +package mvm.rya.mongodb.iter; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + +import java.util.Iterator; + +import mvm.rya.api.domain.RyaStatement; +import mvm.rya.api.persist.RyaDAOException; + +public class NonCloseableRyaStatementCursorIterator implements Iterator<RyaStatement> { + + RyaStatementCursorIterator iterator; + + @Override + public boolean hasNext() { + return iterator.hasNext(); + } + + @Override + public RyaStatement next() { + return iterator.next(); + } + + public NonCloseableRyaStatementCursorIterator( + RyaStatementCursorIterator iterator) { + this.iterator = iterator; + } + + @Override + public void remove() { + try { + iterator.remove(); + } catch (RyaDAOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementBindingSetCursorIterator.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementBindingSetCursorIterator.java b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementBindingSetCursorIterator.java new file mode 100644 index 0000000..d24cbdc --- /dev/null +++ b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementBindingSetCursorIterator.java @@ -0,0 +1,125 @@ +package mvm.rya.mongodb.iter; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + +import info.aduna.iteration.CloseableIteration; + +import java.util.Collection; +import java.util.Iterator; +import java.util.Map.Entry; + +import mvm.rya.api.RdfCloudTripleStoreUtils; +import mvm.rya.api.domain.RyaStatement; +import mvm.rya.api.persist.RyaDAOException; +import mvm.rya.mongodb.dao.MongoDBStorageStrategy; + +import org.openrdf.query.BindingSet; + +import com.google.common.collect.Multimap; +import com.mongodb.DBCollection; +import com.mongodb.DBCursor; +import com.mongodb.DBObject; + +public class RyaStatementBindingSetCursorIterator implements CloseableIteration<Entry<RyaStatement, BindingSet>, RyaDAOException> { + + private DBCollection coll; + private Multimap<DBObject, BindingSet> rangeMap; + private Iterator<DBObject> queryIterator; + private Long maxResults; + private DBCursor resultCursor; + private RyaStatement currentStatement; + private Collection<BindingSet> currentBindingSetCollection; + private Iterator<BindingSet> currentBindingSetIterator; + private MongoDBStorageStrategy strategy; + + public RyaStatementBindingSetCursorIterator(DBCollection coll, + Multimap<DBObject, BindingSet> rangeMap, MongoDBStorageStrategy strategy) { + this.coll = coll; + this.rangeMap = rangeMap; + this.queryIterator = rangeMap.keySet().iterator(); + this.strategy = strategy; + } + + @Override + public boolean hasNext() { + if (!currentBindingSetIteratorIsValid()) { + findNextResult(); + } + return currentBindingSetIteratorIsValid(); + } + + @Override + public Entry<RyaStatement, BindingSet> next() { + if (!currentBindingSetIteratorIsValid()) { + findNextResult(); + } + if (currentBindingSetIteratorIsValid()) { + BindingSet currentBindingSet = currentBindingSetIterator.next(); + return new RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(currentStatement, currentBindingSet); + } + return null; + } + + private boolean currentBindingSetIteratorIsValid() { + return (currentBindingSetIterator != null) && currentBindingSetIterator.hasNext(); + } + + private void findNextResult() { + if (!currentResultCursorIsValid()) { + findNextValidResultCursor(); + } + if (currentResultCursorIsValid()) { + // convert to Rya Statement + DBObject queryResult = resultCursor.next(); + currentStatement = strategy.deserializeDBObject(queryResult); + currentBindingSetIterator = currentBindingSetCollection.iterator(); + } + } + + private void findNextValidResultCursor() { + while (queryIterator.hasNext()){ + DBObject currentQuery = queryIterator.next(); + resultCursor = coll.find(currentQuery); + currentBindingSetCollection = rangeMap.get(currentQuery); + if (resultCursor.hasNext()) return; + } + } + + private boolean currentResultCursorIsValid() { + return (resultCursor != null) && resultCursor.hasNext(); + } + + + public void setMaxResults(Long maxResults) { + this.maxResults = maxResults; + } + + @Override + public void close() throws RyaDAOException { + // TODO don't know what to do here + } + + @Override + public void remove() throws RyaDAOException { + next(); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementCursorIterable.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementCursorIterable.java b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementCursorIterable.java new file mode 100644 index 0000000..83bd2d4 --- /dev/null +++ b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementCursorIterable.java @@ -0,0 +1,67 @@ +package mvm.rya.mongodb.iter; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + +import info.aduna.iteration.CloseableIteration; + +import java.io.IOException; +import java.util.Iterator; +import java.util.Map.Entry; +import java.util.Set; + +import mvm.rya.api.RdfCloudTripleStoreUtils; +import mvm.rya.api.domain.RyaStatement; +import mvm.rya.api.persist.RyaDAOException; + +import org.calrissian.mango.collect.CloseableIterable; +import org.calrissian.mango.collect.CloseableIterator; +import org.openrdf.query.BindingSet; + +import com.mongodb.DBCollection; +import com.mongodb.DBCursor; +import com.mongodb.DBObject; + +public class RyaStatementCursorIterable implements CloseableIterable<RyaStatement> { + + + private NonCloseableRyaStatementCursorIterator iterator; + + public RyaStatementCursorIterable(NonCloseableRyaStatementCursorIterator iterator) { + this.iterator = iterator; + } + + @Override + public Iterator<RyaStatement> iterator() { + // TODO Auto-generated method stub + return iterator; + } + + @Override + public void closeQuietly() { + //TODO don't know what to do here + } + + @Override + public void close() throws IOException { + // TODO Auto-generated method stub + } + +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementCursorIterator.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementCursorIterator.java b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementCursorIterator.java new file mode 100644 index 0000000..8df2c60 --- /dev/null +++ b/dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementCursorIterator.java @@ -0,0 +1,104 @@ +package mvm.rya.mongodb.iter; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + +import info.aduna.iteration.CloseableIteration; + +import java.util.Iterator; +import java.util.Map.Entry; +import java.util.Set; + +import mvm.rya.api.RdfCloudTripleStoreUtils; +import mvm.rya.api.domain.RyaStatement; +import mvm.rya.api.persist.RyaDAOException; +import mvm.rya.mongodb.dao.MongoDBStorageStrategy; + +import org.calrissian.mango.collect.CloseableIterable; +import org.openrdf.query.BindingSet; + +import com.mongodb.DBCollection; +import com.mongodb.DBCursor; +import com.mongodb.DBObject; + +public class RyaStatementCursorIterator implements CloseableIteration<RyaStatement, RyaDAOException> { + + private DBCollection coll; + private Iterator<DBObject> queryIterator; + private DBCursor currentCursor; + private MongoDBStorageStrategy strategy; + private Long maxResults; + + public RyaStatementCursorIterator(DBCollection coll, Set<DBObject> queries, MongoDBStorageStrategy strategy) { + this.coll = coll; + this.queryIterator = queries.iterator(); + this.strategy = strategy; + } + + @Override + public boolean hasNext() { + if (!currentCursorIsValid()) { + findNextValidCursor(); + } + return currentCursorIsValid(); + } + + @Override + public RyaStatement next() { + if (!currentCursorIsValid()) { + findNextValidCursor(); + } + if (currentCursorIsValid()) { + // convert to Rya Statement + DBObject queryResult = currentCursor.next(); + RyaStatement statement = strategy.deserializeDBObject(queryResult); + return statement; + } + return null; + } + + private void findNextValidCursor() { + while (queryIterator.hasNext()){ + DBObject currentQuery = queryIterator.next(); + currentCursor = coll.find(currentQuery); + if (currentCursor.hasNext()) break; + } + } + + private boolean currentCursorIsValid() { + return (currentCursor != null) && currentCursor.hasNext(); + } + + + public void setMaxResults(Long maxResults) { + this.maxResults = maxResults; + } + + @Override + public void close() throws RyaDAOException { + // TODO don't know what to do here + } + + @Override + public void remove() throws RyaDAOException { + next(); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBQueryEngineTest.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBQueryEngineTest.java b/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBQueryEngineTest.java deleted file mode 100644 index 870115c..0000000 --- a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBQueryEngineTest.java +++ /dev/null @@ -1,124 +0,0 @@ -package mvm.rya.mongodb; - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import java.util.Collection; -import java.util.Map; -import java.util.Map.Entry; - -import info.aduna.iteration.CloseableIteration; -import mvm.rya.api.RdfCloudTripleStoreConfiguration; -import mvm.rya.api.RdfCloudTripleStoreUtils; -import mvm.rya.api.domain.RyaStatement; -import mvm.rya.api.domain.RyaStatement.RyaStatementBuilder; -import mvm.rya.api.domain.RyaURI; - -import org.apache.hadoop.conf.Configuration; -import org.junit.Assert; -import org.junit.Before; -import org.junit.Test; -import org.openrdf.model.impl.URIImpl; -import org.openrdf.query.BindingSet; -import org.openrdf.query.impl.MapBindingSet; - -import com.google.common.collect.Lists; -import com.mongodb.MongoClient; - -import de.flapdoodle.embed.mongo.distribution.Version; -import de.flapdoodle.embed.mongo.tests.MongodForTestsFactory; - -public class MongoDBQueryEngineTest { - - // private dao; - // private configuration; - - private MongoDBQueryEngine engine; - private MongoDBRdfConfiguration configuration; - - @Before - public void setUp() throws Exception { - // Set up Mongo/Rya - MongodForTestsFactory testsFactory = MongodForTestsFactory.with(Version.Main.PRODUCTION); - Configuration conf = new Configuration(); - conf.set(MongoDBRdfConfiguration.USE_TEST_MONGO, "true"); - conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, "test"); - conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya_"); - conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, "rya_"); - configuration = new MongoDBRdfConfiguration(conf); - MongoClient mongoClient = testsFactory.newMongo(); - int port = mongoClient.getServerAddressList().get(0).getPort(); - configuration.set(MongoDBRdfConfiguration.MONGO_INSTANCE_PORT, Integer.toString(port)); - - engine = new MongoDBQueryEngine(configuration, mongoClient); - - // Add Data - MongoDBRyaDAO dao = new MongoDBRyaDAO(configuration, mongoClient); - dao.add(getStatement("u:a", "u:tt", "u:b")); - dao.add(getStatement("u:a", "u:tt", "u:c")); - } - - private RyaStatement getStatement(String s, String p, String o) { - RyaStatementBuilder builder = new RyaStatementBuilder(); - if (s != null) - builder.setSubject(new RyaURI(s)); - if (p != null) - builder.setPredicate(new RyaURI(p)); - if (o != null) - builder.setObject(new RyaURI(o)); - return builder.build(); - } - - public int size(CloseableIteration<?, ?> iter) throws Exception { - int i = 0; - while (iter.hasNext()) { - i++; - iter.next(); - } - return i; - } - - @Test - public void statementQuery() throws Exception { - RyaStatement s = getStatement("u:a", null, null); - Assert.assertEquals(2, size(engine.query(s, configuration))); - } - - @SuppressWarnings("unchecked") - @Test - public void bindingSetsQuery() throws Exception { - RyaStatement s = getStatement("u:a", null, null); - - MapBindingSet bs1 = new MapBindingSet(); - bs1.addBinding("foo", new URIImpl("u:x")); - - Map.Entry<RyaStatement, BindingSet> e1 = new RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s, bs1); - Collection<Entry<RyaStatement, BindingSet>> stmts1 = Lists.newArrayList(e1); - Assert.assertEquals(2, size(engine.queryWithBindingSet(stmts1, configuration))); - - - MapBindingSet bs2 = new MapBindingSet(); - bs2.addBinding("foo", new URIImpl("u:y")); - - Map.Entry<RyaStatement, BindingSet> e2 = new RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s, bs2); - - Collection<Entry<RyaStatement, BindingSet>> stmts2 = Lists.newArrayList(e1, e2); - Assert.assertEquals(4, size(engine.queryWithBindingSet(stmts2, configuration))); -} -} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBRyaDAOIT.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBRyaDAOIT.java b/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBRyaDAOIT.java deleted file mode 100644 index 33531b5..0000000 --- a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBRyaDAOIT.java +++ /dev/null @@ -1,139 +0,0 @@ -package mvm.rya.mongodb; -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import static mvm.rya.mongodb.dao.SimpleMongoDBStorageStrategy.TIMESTAMP; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.io.IOException; - -import org.apache.hadoop.conf.Configuration; -import org.junit.Before; -import org.junit.Test; - -import com.mongodb.DB; -import com.mongodb.DBCollection; -import com.mongodb.DBObject; -import com.mongodb.MongoClient; -import com.mongodb.MongoException; - -import de.flapdoodle.embed.mongo.distribution.Version; -import de.flapdoodle.embed.mongo.tests.MongodForTestsFactory; -import mvm.rya.api.RdfCloudTripleStoreConfiguration; -import mvm.rya.api.domain.RyaStatement; -import mvm.rya.api.domain.RyaStatement.RyaStatementBuilder; -import mvm.rya.api.domain.RyaURI; -import mvm.rya.api.persist.RyaDAOException; - -public class MongoDBRyaDAOIT { - - private MongodForTestsFactory testsFactory; - private MongoDBRyaDAO dao; - private MongoDBRdfConfiguration configuration; - private MongoClient mongoClient; - - @Before - public void setUp() throws IOException, RyaDAOException{ - testsFactory = MongodForTestsFactory.with(Version.Main.PRODUCTION); - final Configuration conf = new Configuration(); - conf.set(MongoDBRdfConfiguration.USE_TEST_MONGO, "true"); - conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, "test"); - conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya_"); - conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, "rya_"); - configuration = new MongoDBRdfConfiguration(conf); - mongoClient = testsFactory.newMongo(); - final int port = mongoClient.getServerAddressList().get(0).getPort(); - configuration.set(MongoDBRdfConfiguration.MONGO_INSTANCE_PORT, Integer.toString(port)); - dao = new MongoDBRyaDAO(configuration, mongoClient); - } - - @Test - public void testDeleteWildcard() throws RyaDAOException { - final RyaStatementBuilder builder = new RyaStatementBuilder(); - builder.setPredicate(new RyaURI("http://temp.com")); - dao.delete(builder.build(), configuration); - } - - - @Test - public void testAdd() throws RyaDAOException, MongoException, IOException { - final RyaStatementBuilder builder = new RyaStatementBuilder(); - builder.setPredicate(new RyaURI("http://temp.com")); - builder.setSubject(new RyaURI("http://subject.com")); - builder.setObject(new RyaURI("http://object.com")); - - final DB db = mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); - final DBCollection coll = db.getCollection(configuration.getTriplesCollectionName()); - - dao.add(builder.build()); - - assertEquals(coll.count(),1); - - final DBObject dbo = coll.findOne(); - assertTrue(dbo.containsField(TIMESTAMP)); - } - - @Test - public void testDelete() throws RyaDAOException, MongoException, IOException { - final RyaStatementBuilder builder = new RyaStatementBuilder(); - builder.setPredicate(new RyaURI("http://temp.com")); - builder.setSubject(new RyaURI("http://subject.com")); - builder.setObject(new RyaURI("http://object.com")); - final RyaStatement statement = builder.build(); - final DB db = mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); - final DBCollection coll = db.getCollection(configuration.getTriplesCollectionName()); - - dao.add(statement); - - assertEquals(coll.count(),1); - - dao.delete(statement, configuration); - - assertEquals(coll.count(),0); - - } - - @Test - public void testDeleteWildcardSubjectWithContext() throws RyaDAOException, MongoException, IOException { - final RyaStatementBuilder builder = new RyaStatementBuilder(); - builder.setPredicate(new RyaURI("http://temp.com")); - builder.setSubject(new RyaURI("http://subject.com")); - builder.setObject(new RyaURI("http://object.com")); - builder.setContext(new RyaURI("http://context.com")); - final RyaStatement statement = builder.build(); - - final DB db = mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); - final DBCollection coll = db.getCollection(configuration.getTriplesCollectionName()); - - dao.add(statement); - - assertEquals(coll.count(),1); - - final RyaStatementBuilder builder2 = new RyaStatementBuilder(); - builder2.setPredicate(new RyaURI("http://temp.com")); - builder2.setObject(new RyaURI("http://object.com")); - builder2.setContext(new RyaURI("http://context3.com")); - final RyaStatement query = builder2.build(); - - dao.delete(query, configuration); - - assertEquals(coll.count(),1); - } -} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBRyaDAOTest.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBRyaDAOTest.java b/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBRyaDAOTest.java deleted file mode 100644 index dde0eda..0000000 --- a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/MongoDBRyaDAOTest.java +++ /dev/null @@ -1,137 +0,0 @@ -package mvm.rya.mongodb; -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import static org.junit.Assert.assertEquals; - -import java.io.IOException; - -import org.apache.hadoop.conf.Configuration; -import org.junit.Before; -import org.junit.Test; - -import com.mongodb.DB; -import com.mongodb.DBCollection; -import com.mongodb.MongoClient; -import com.mongodb.MongoException; - -import de.flapdoodle.embed.mongo.distribution.Version; -import de.flapdoodle.embed.mongo.tests.MongodForTestsFactory; -import mvm.rya.api.RdfCloudTripleStoreConfiguration; -import mvm.rya.api.domain.RyaStatement; -import mvm.rya.api.domain.RyaStatement.RyaStatementBuilder; -import mvm.rya.api.domain.RyaURI; -import mvm.rya.api.persist.RyaDAOException; - -public class MongoDBRyaDAOTest { - - private MongodForTestsFactory testsFactory; - private MongoDBRyaDAO dao; - private MongoDBRdfConfiguration configuration; - private MongoClient mongoClient; - - @Before - public void setUp() throws IOException, RyaDAOException{ - testsFactory = MongodForTestsFactory.with(Version.Main.PRODUCTION); - final Configuration conf = new Configuration(); - conf.set(MongoDBRdfConfiguration.USE_TEST_MONGO, "true"); - conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, "test"); - conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya_"); - conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, "rya_"); - configuration = new MongoDBRdfConfiguration(conf); - mongoClient = testsFactory.newMongo(); - final int port = mongoClient.getServerAddressList().get(0).getPort(); - configuration.set(MongoDBRdfConfiguration.MONGO_INSTANCE_PORT, ""+port); - dao = new MongoDBRyaDAO(configuration, mongoClient); - } - - @Test - public void testDeleteWildcard() throws RyaDAOException { - final RyaStatementBuilder builder = new RyaStatementBuilder(); - builder.setPredicate(new RyaURI("http://temp.com")); - dao.delete(builder.build(), configuration); - } - - - @Test - public void testAdd() throws RyaDAOException, MongoException, IOException { - final RyaStatementBuilder builder = new RyaStatementBuilder(); - builder.setPredicate(new RyaURI("http://temp.com")); - builder.setSubject(new RyaURI("http://subject.com")); - builder.setObject(new RyaURI("http://object.com")); - - final DB db = mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); - final DBCollection coll = db.getCollection(configuration.getTriplesCollectionName()); - - dao.add(builder.build()); - - assertEquals(coll.count(),1); - - } - - @Test - public void testDelete() throws RyaDAOException, MongoException, IOException { - final RyaStatementBuilder builder = new RyaStatementBuilder(); - builder.setPredicate(new RyaURI("http://temp.com")); - builder.setSubject(new RyaURI("http://subject.com")); - builder.setObject(new RyaURI("http://object.com")); - final RyaStatement statement = builder.build(); - - final DB db = mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); - final DBCollection coll = db.getCollection(configuration.getTriplesCollectionName()); - - dao.add(statement); - - assertEquals(coll.count(),1); - - dao.delete(statement, configuration); - - assertEquals(coll.count(),0); - - } - - @Test - public void testDeleteWildcardSubjectWithContext() throws RyaDAOException, MongoException, IOException { - final RyaStatementBuilder builder = new RyaStatementBuilder(); - builder.setPredicate(new RyaURI("http://temp.com")); - builder.setSubject(new RyaURI("http://subject.com")); - builder.setObject(new RyaURI("http://object.com")); - builder.setContext(new RyaURI("http://context.com")); - final RyaStatement statement = builder.build(); - - final DB db = mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); - final DBCollection coll = db.getCollection(configuration.getTriplesCollectionName()); - - dao.add(statement); - - assertEquals(coll.count(),1); - - final RyaStatementBuilder builder2 = new RyaStatementBuilder(); - builder2.setPredicate(new RyaURI("http://temp.com")); - builder2.setObject(new RyaURI("http://object.com")); - builder2.setContext(new RyaURI("http://context3.com")); - final RyaStatement query = builder2.build(); - - dao.delete(query, configuration); - - assertEquals(coll.count(),1); - - } - -} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/SimpleMongoDBStorageStrategyTest.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/SimpleMongoDBStorageStrategyTest.java b/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/SimpleMongoDBStorageStrategyTest.java deleted file mode 100644 index be5fdb7..0000000 --- a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/SimpleMongoDBStorageStrategyTest.java +++ /dev/null @@ -1,85 +0,0 @@ -package mvm.rya.mongodb; -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import static org.junit.Assert.assertEquals; -import static org.openrdf.model.vocabulary.XMLSchema.ANYURI; - -import java.io.IOException; - -import org.junit.Test; - -import com.mongodb.BasicDBObject; -import com.mongodb.DBObject; -import com.mongodb.MongoException; - -import mvm.rya.api.domain.RyaStatement; -import mvm.rya.api.domain.RyaStatement.RyaStatementBuilder; -import mvm.rya.api.domain.RyaURI; -import mvm.rya.api.persist.RyaDAOException; -import mvm.rya.mongodb.dao.SimpleMongoDBStorageStrategy; - -public class SimpleMongoDBStorageStrategyTest { - private static final String SUBJECT = "http://subject.com"; - private static final String PREDICATE = "http://temp.com"; - private static final String OBJECT = "http://object.com"; - private static final String CONTEXT = "http://context.com"; - - private static final RyaStatement testStatement; - private static final DBObject testDBO; - private final SimpleMongoDBStorageStrategy storageStrategy = new SimpleMongoDBStorageStrategy(); - - static { - final RyaStatementBuilder builder = new RyaStatementBuilder(); - builder.setPredicate(new RyaURI(PREDICATE)); - builder.setSubject(new RyaURI(SUBJECT)); - builder.setObject(new RyaURI(OBJECT)); - builder.setContext(new RyaURI(CONTEXT)); - builder.setTimestamp(null); - testStatement = builder.build(); - - testDBO = new BasicDBObject(); - testDBO.put("_id", "d5f8fea0e85300478da2c9b4e132c69502e21221"); - testDBO.put("subject", SUBJECT); - testDBO.put("predicate", PREDICATE); - testDBO.put("object", OBJECT); - testDBO.put("objectType", ANYURI.stringValue()); - testDBO.put("context", CONTEXT); - testDBO.put("insertTimestamp", null); - } - - @Test - public void testSerializeStatementToDBO() throws RyaDAOException, MongoException, IOException { - - final DBObject dbo = storageStrategy.serialize(testStatement); - assertEquals(testDBO, dbo); - } - - @Test - public void testDeSerializeStatementToDBO() throws RyaDAOException, MongoException, IOException { - final RyaStatement statement = storageStrategy.deserializeDBObject(testDBO); - /** - * Since RyaStatement creates a timestamp using JVM time if the timestamp is null, we want to re-null it - * for this test. Timestamp is created at insert time by the Server, this test - * can be found in the RyaDAO. - */ - statement.setTimestamp(null); - assertEquals(testStatement, statement); - } -} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoDetailsAdapterTest.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoDetailsAdapterTest.java b/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoDetailsAdapterTest.java deleted file mode 100644 index 9faa595..0000000 --- a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoDetailsAdapterTest.java +++ /dev/null @@ -1,296 +0,0 @@ -package mvm.rya.mongodb.instance; - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import static org.junit.Assert.assertEquals; - -import java.util.Date; - -import org.junit.Test; - -import com.google.common.base.Optional; -import com.mongodb.BasicDBObject; -import com.mongodb.DBObject; -import com.mongodb.util.JSON; - -import mvm.rya.api.instance.RyaDetails; -import mvm.rya.api.instance.RyaDetails.EntityCentricIndexDetails; -import mvm.rya.api.instance.RyaDetails.FreeTextIndexDetails; -import mvm.rya.api.instance.RyaDetails.GeoIndexDetails; -import mvm.rya.api.instance.RyaDetails.JoinSelectivityDetails; -import mvm.rya.api.instance.RyaDetails.PCJIndexDetails; -import mvm.rya.api.instance.RyaDetails.PCJIndexDetails.FluoDetails; -import mvm.rya.api.instance.RyaDetails.PCJIndexDetails.PCJDetails; -import mvm.rya.api.instance.RyaDetails.PCJIndexDetails.PCJDetails.PCJUpdateStrategy; -import mvm.rya.api.instance.RyaDetails.ProspectorDetails; -import mvm.rya.api.instance.RyaDetails.TemporalIndexDetails; -import mvm.rya.mongodb.instance.MongoDetailsAdapter.MalformedRyaDetailsException; - -/** - * Tests the methods of {@link MongoDetailsAdapter}. - */ -public class MongoDetailsAdapterTest { - - @Test - public void ryaDetailsToMongoTest() { - // Convert the Details into a Mongo DB OBject. - final RyaDetails details = RyaDetails.builder() - .setRyaInstanceName("test") - .setRyaVersion("1") - .setEntityCentricIndexDetails(new EntityCentricIndexDetails(true)) - .setGeoIndexDetails(new GeoIndexDetails(true)) - .setPCJIndexDetails( - PCJIndexDetails.builder() - .setEnabled(true) - .setFluoDetails(new FluoDetails("fluo")) - .addPCJDetails( - PCJDetails.builder() - .setId("pcj_0") - .setUpdateStrategy(PCJUpdateStrategy.BATCH) - .setLastUpdateTime(new Date(0L))) - .addPCJDetails( - PCJDetails.builder() - .setId("pcj_1") - .setUpdateStrategy(PCJUpdateStrategy.BATCH) - .setLastUpdateTime(new Date(1L)))) - .setTemporalIndexDetails(new TemporalIndexDetails(true)) - .setFreeTextDetails(new FreeTextIndexDetails(true)) - .setProspectorDetails(new ProspectorDetails(Optional.fromNullable(new Date(0L)))) - .setJoinSelectivityDetails(new JoinSelectivityDetails(Optional.fromNullable(new Date(1L)))) - .build(); - - final BasicDBObject actual = MongoDetailsAdapter.toDBObject(details); - - // Ensure it matches the expected object. - final DBObject expected = (DBObject) JSON.parse( - "{ " - + "instanceName : \"test\"," - + "version : \"1\"," - + "entityCentricDetails : true," - + "geoDetails : true," - + "pcjDetails : {" - + "enabled : true ," - + "fluoName : \"fluo\"," - + "pcjs : [ " - + "{" - + "id : \"pcj_0\"," - + "updateStrategy : \"BATCH\"," - + "lastUpdate : { $date : \"1970-01-01T00:00:00.000Z\"}" - + "}," - + "{" - + "id : \"pcj_1\"," - + "updateStrategy : \"BATCH\"," - + "lastUpdate : { $date : \"1970-01-01T00:00:00.001Z\"}" - + "}]" - + "}," - + "temporalDetails : true," - + "freeTextDetails : true," - + "prospectorDetails : { $date : \"1970-01-01T00:00:00.000Z\"}," - + "joinSelectivitiyDetails : { $date : \"1970-01-01T00:00:00.001Z\"}" - + "}" - ); - - assertEquals(expected.toString(), actual.toString()); - } - - @Test - public void mongoToRyaDetailsTest() throws MalformedRyaDetailsException { - // Convert the Mongo object into a RyaDetails. - final BasicDBObject mongo = (BasicDBObject) JSON.parse( - "{ " - + "instanceName : \"test\"," - + "version : \"1\"," - + "entityCentricDetails : true," - + "geoDetails : true," - + "pcjDetails : {" - + "enabled : true ," - + "fluoName : \"fluo\"," - + "pcjs : [ " - + "{" - + "id : \"pcj_0\"," - + "updateStrategy : \"BATCH\"," - + "lastUpdate : { $date : \"1970-01-01T00:00:00.000Z\"}" - + "}," - + "{" - + "id : \"pcj_1\"," - + "updateStrategy : \"BATCH\"," - + "lastUpdate : { $date : \"1970-01-01T00:00:00.001Z\"}" - + "}]" - + "}," - + "temporalDetails : true," - + "freeTextDetails : true," - + "prospectorDetails : { $date : \"1970-01-01T00:00:00.000Z\"}," - + "joinSelectivitiyDetails : { $date : \"1970-01-01T00:00:00.001Z\"}" - + "}" - ); - - final RyaDetails actual = MongoDetailsAdapter.toRyaDetails(mongo); - - // Ensure it matches the expected object. - final RyaDetails expected = RyaDetails.builder() - .setRyaInstanceName("test") - .setRyaVersion("1") - .setEntityCentricIndexDetails(new EntityCentricIndexDetails(true)) - .setGeoIndexDetails(new GeoIndexDetails(true)) - .setPCJIndexDetails( - PCJIndexDetails.builder() - .setEnabled(true) - .setFluoDetails(new FluoDetails("fluo")) - .addPCJDetails( - PCJDetails.builder() - .setId("pcj_0") - .setUpdateStrategy(PCJUpdateStrategy.BATCH) - .setLastUpdateTime(new Date(0L))) - .addPCJDetails( - PCJDetails.builder() - .setId("pcj_1") - .setUpdateStrategy(PCJUpdateStrategy.BATCH) - .setLastUpdateTime(new Date(1L)))) - .setTemporalIndexDetails(new TemporalIndexDetails(true)) - .setFreeTextDetails(new FreeTextIndexDetails(true)) - .setProspectorDetails(new ProspectorDetails(Optional.<Date>fromNullable(new Date(0L)))) - .setJoinSelectivityDetails(new JoinSelectivityDetails(Optional.<Date>fromNullable(new Date(1L)))) - .build(); - - assertEquals(expected, actual); - } - - @Test - public void absentOptionalToRyaDetailsTest() throws MalformedRyaDetailsException { - // Convert the Mongo object into a RyaDetails. - final BasicDBObject mongo = (BasicDBObject) JSON.parse( - "{ " - + "instanceName : \"test\"," - + "version : \"1\"," - + "entityCentricDetails : true," - + "geoDetails : false," - + "pcjDetails : {" - + "enabled : false," - + "fluoName : \"fluo\"," - + "pcjs : [ " - + "{" - + "id : \"pcj_1\"," - + "}" - + "]" - + "}," - + "temporalDetails : false," - + "freeTextDetails : true," - + "prospectorDetails : null," - + "joinSelectivitiyDetails : null" - + "}" - ); - final RyaDetails actual = MongoDetailsAdapter.toRyaDetails(mongo); - - // Ensure it matches the expected object. - final RyaDetails expected = RyaDetails.builder() - .setRyaInstanceName("test") - .setRyaVersion("1") - .setEntityCentricIndexDetails(new EntityCentricIndexDetails(true)) - .setGeoIndexDetails(new GeoIndexDetails(false)) - .setPCJIndexDetails( - PCJIndexDetails.builder() - .setEnabled(false) - .setFluoDetails(new FluoDetails("fluo")) - .addPCJDetails( - PCJDetails.builder() - .setId("pcj_1") - .setLastUpdateTime(null))) - .setTemporalIndexDetails(new TemporalIndexDetails(false)) - .setFreeTextDetails(new FreeTextIndexDetails(true)) - .setProspectorDetails(new ProspectorDetails(Optional.<Date>absent())) - .setJoinSelectivityDetails(new JoinSelectivityDetails(Optional.<Date>absent())) - .build(); - - assertEquals(expected, actual); - } - - @Test - public void absentOptionalToMongoTest() { - // Convert the Details into a Mongo DB OBject. - final RyaDetails details = RyaDetails.builder() - .setRyaInstanceName("test") - .setRyaVersion("1") - .setEntityCentricIndexDetails(new EntityCentricIndexDetails(true)) - .setGeoIndexDetails(new GeoIndexDetails(false)) - .setPCJIndexDetails( - PCJIndexDetails.builder() - .setEnabled(true) - .setFluoDetails(new FluoDetails("fluo"))) - .setTemporalIndexDetails(new TemporalIndexDetails(false)) - .setFreeTextDetails(new FreeTextIndexDetails(true)) - .setProspectorDetails(new ProspectorDetails(Optional.<Date>absent())) - .setJoinSelectivityDetails(new JoinSelectivityDetails(Optional.<Date>absent())) - .build(); - - final DBObject actual = MongoDetailsAdapter.toDBObject(details); - - // Ensure it matches the expected object. - final BasicDBObject expected = (BasicDBObject) JSON.parse( - "{ " - + "instanceName : \"test\"," - + "version : \"1\"," - + "entityCentricDetails : true," - + "geoDetails : false," - + "pcjDetails : {" - + "enabled : true," - + "fluoName : \"fluo\"," - + "pcjs : [ ]" - + "}," - + "temporalDetails : false," - + "freeTextDetails : true" - + "}" - ); - assertEquals(expected, actual); - } - - @Test - public void toDBObject_pcjDetails() { - final PCJDetails details = PCJDetails.builder() - .setId("pcjId") - .setLastUpdateTime( new Date() ) - .setUpdateStrategy( PCJUpdateStrategy.INCREMENTAL ) - .build(); - - // Convert it into a Mongo DB Object. - final BasicDBObject dbo = (BasicDBObject) MongoDetailsAdapter.toDBObject(details); - - // Convert the dbo back into the original object. - final PCJDetails restored = MongoDetailsAdapter.toPCJDetails(dbo).build(); - - // Ensure the restored value matches the original. - assertEquals(details, restored); - } - - @Test - public void toDBObject_pcjDetails_missing_optionals() { - final PCJDetails details = PCJDetails.builder() - .setId("pcjId") - .build(); - - // Convert it into a Mongo DB Object. - final BasicDBObject dbo = (BasicDBObject) MongoDetailsAdapter.toDBObject(details); - - // Convert the dbo back into the original object. - final PCJDetails restored = MongoDetailsAdapter.toPCJDetails(dbo).build(); - - // Ensure the restored value matches the original. - assertEquals(details, restored); - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java b/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java deleted file mode 100644 index 2ce2e93..0000000 --- a/dao/mongodb.rya/src/test/java/mvm/rya/mongodb/instance/MongoRyaDetailsRepositoryIT.java +++ /dev/null @@ -1,307 +0,0 @@ -package mvm.rya.mongodb.instance; - -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -import java.io.IOException; -import java.util.Date; - -import org.junit.AfterClass; -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Test; - -import com.google.common.base.Optional; -import com.mongodb.MongoClient; -import com.mongodb.MongoException; - -import de.flapdoodle.embed.mongo.tests.MongodForTestsFactory; -import mvm.rya.api.instance.RyaDetails; -import mvm.rya.api.instance.RyaDetails.EntityCentricIndexDetails; -import mvm.rya.api.instance.RyaDetails.FreeTextIndexDetails; -import mvm.rya.api.instance.RyaDetails.GeoIndexDetails; -import mvm.rya.api.instance.RyaDetails.JoinSelectivityDetails; -import mvm.rya.api.instance.RyaDetails.PCJIndexDetails; -import mvm.rya.api.instance.RyaDetails.PCJIndexDetails.FluoDetails; -import mvm.rya.api.instance.RyaDetails.PCJIndexDetails.PCJDetails; -import mvm.rya.api.instance.RyaDetails.PCJIndexDetails.PCJDetails.PCJUpdateStrategy; -import mvm.rya.api.instance.RyaDetails.ProspectorDetails; -import mvm.rya.api.instance.RyaDetails.TemporalIndexDetails; -import mvm.rya.api.instance.RyaDetailsRepository; -import mvm.rya.api.instance.RyaDetailsRepository.AlreadyInitializedException; -import mvm.rya.api.instance.RyaDetailsRepository.ConcurrentUpdateException; -import mvm.rya.api.instance.RyaDetailsRepository.NotInitializedException; -import mvm.rya.api.instance.RyaDetailsRepository.RyaDetailsRepositoryException; - -/** - * Tests the methods of {@link AccumuloRyaDetailsRepository} by using a {@link MiniAccumuloCluster}. - */ -public class MongoRyaDetailsRepositoryIT { - - private static MongoClient client = null; - - @BeforeClass - public static void startMiniAccumulo() throws MongoException, IOException { - final MongodForTestsFactory mongoFactory = new MongodForTestsFactory(); - client = mongoFactory.newMongo(); - } - - @Before - public void clearLastTest() { - client.dropDatabase("testInstance"); - } - - @AfterClass - public static void stopMiniAccumulo() throws IOException, InterruptedException { - client.close(); - } - - @Test - public void initializeAndGet() throws AlreadyInitializedException, RyaDetailsRepositoryException { - final String instanceName = "testInstance"; - - // Create the metadata object the repository will be initialized with. - final RyaDetails details = RyaDetails.builder() - .setRyaInstanceName(instanceName) - .setRyaVersion("1.2.3.4") - .setEntityCentricIndexDetails( new EntityCentricIndexDetails(true) ) - .setGeoIndexDetails( new GeoIndexDetails(true) ) - .setTemporalIndexDetails( new TemporalIndexDetails(true) ) - .setFreeTextDetails( new FreeTextIndexDetails(true) ) - .setPCJIndexDetails( - PCJIndexDetails.builder() - .setEnabled(true) - .setFluoDetails( new FluoDetails("test_instance_rya_pcj_updater") ) - .addPCJDetails( - PCJDetails.builder() - .setId("pcj 1") - .setUpdateStrategy(PCJUpdateStrategy.BATCH) - .setLastUpdateTime( new Date() )) - .addPCJDetails( - PCJDetails.builder() - .setId("pcj 2"))) - .setProspectorDetails( new ProspectorDetails(Optional.of(new Date())) ) - .setJoinSelectivityDetails( new JoinSelectivityDetails(Optional.of(new Date())) ) - .build(); - - // Setup the repository that will be tested using a mock instance of MongoDB. - final RyaDetailsRepository repo = new MongoRyaInstanceDetailsRepository(client, instanceName); - - // Initialize the repository - repo.initialize(details); - - // Fetch the stored details. - final RyaDetails stored = repo.getRyaInstanceDetails(); - - // Ensure the fetched object is equivalent to what was stored. - assertEquals(details, stored); - } - - @Test(expected = AlreadyInitializedException.class) - public void initialize_alreadyInitialized() throws AlreadyInitializedException, RyaDetailsRepositoryException { - final String instanceName = "testInstance"; - - // Create the metadata object the repository will be initialized with. - final RyaDetails details = RyaDetails.builder() - .setRyaInstanceName(instanceName) - .setRyaVersion("1.2.3.4") - .setEntityCentricIndexDetails( new EntityCentricIndexDetails(true) ) - .setGeoIndexDetails( new GeoIndexDetails(true) ) - .setTemporalIndexDetails( new TemporalIndexDetails(true) ) - .setFreeTextDetails( new FreeTextIndexDetails(true) ) - .setPCJIndexDetails( - PCJIndexDetails.builder() - .setEnabled(true) - .setFluoDetails( new FluoDetails("test_instance_rya_pcj_updater") ) - .addPCJDetails( - PCJDetails.builder() - .setId("pcj 1") - .setUpdateStrategy(PCJUpdateStrategy.BATCH) - .setLastUpdateTime( new Date() )) - .addPCJDetails( - PCJDetails.builder() - .setId("pcj 2"))) - .setProspectorDetails( new ProspectorDetails(Optional.of(new Date())) ) - .setJoinSelectivityDetails( new JoinSelectivityDetails(Optional.of(new Date())) ) - .build(); - - // Setup the repository that will be tested using a mock instance of MongoDB. - final RyaDetailsRepository repo = new MongoRyaInstanceDetailsRepository(client, instanceName); - - // Initialize the repository - repo.initialize(details); - - // Initialize it again. - repo.initialize(details); - } - - @Test(expected = NotInitializedException.class) - public void getRyaInstance_notInitialized() throws NotInitializedException, RyaDetailsRepositoryException { - // Setup the repository that will be tested using a mock instance of Accumulo. - final RyaDetailsRepository repo = new MongoRyaInstanceDetailsRepository(client, "testInstance"); - - // Try to fetch the details from the uninitialized repository. - repo.getRyaInstanceDetails(); - } - - @Test - public void isInitialized_true() throws AlreadyInitializedException, RyaDetailsRepositoryException { - final String instanceName = "testInstance"; - - // Create the metadata object the repository will be initialized with. - final RyaDetails details = RyaDetails.builder() - .setRyaInstanceName(instanceName) - .setRyaVersion("1.2.3.4") - .setEntityCentricIndexDetails( new EntityCentricIndexDetails(true) ) - .setGeoIndexDetails( new GeoIndexDetails(true) ) - .setTemporalIndexDetails( new TemporalIndexDetails(true) ) - .setFreeTextDetails( new FreeTextIndexDetails(true) ) - .setPCJIndexDetails( - PCJIndexDetails.builder() - .setEnabled(true) - .setFluoDetails( new FluoDetails("test_instance_rya_pcj_updater") ) - .addPCJDetails( - PCJDetails.builder() - .setId("pcj 1") - .setUpdateStrategy(PCJUpdateStrategy.BATCH) - .setLastUpdateTime( new Date() )) - .addPCJDetails( - PCJDetails.builder() - .setId("pcj 2"))) - .setProspectorDetails( new ProspectorDetails(Optional.of(new Date())) ) - .setJoinSelectivityDetails( new JoinSelectivityDetails(Optional.of(new Date())) ) - .build(); - - // Setup the repository that will be tested using a mock instance of MongoDB. - final RyaDetailsRepository repo = new MongoRyaInstanceDetailsRepository(client, "testInstance"); - - // Initialize the repository - repo.initialize(details); - - // Ensure the repository reports that it has been initialized. - assertTrue( repo.isInitialized() ); - } - - @Test - public void isInitialized_false() throws RyaDetailsRepositoryException { - // Setup the repository that will be tested using a mock instance of MongoDB. - final RyaDetailsRepository repo = new MongoRyaInstanceDetailsRepository(client, "testInstance"); - - // Ensure the repository reports that is has not been initialized. - assertFalse( repo.isInitialized() ); - } - - @Test - public void update() throws AlreadyInitializedException, RyaDetailsRepositoryException { - final String instanceName = "testInstance"; - - // Create the metadata object the repository will be initialized with. - final RyaDetails details = RyaDetails.builder() - .setRyaInstanceName(instanceName) - .setRyaVersion("1.2.3.4") - .setEntityCentricIndexDetails( new EntityCentricIndexDetails(true) ) - .setGeoIndexDetails( new GeoIndexDetails(true) ) - .setTemporalIndexDetails( new TemporalIndexDetails(true) ) - .setFreeTextDetails( new FreeTextIndexDetails(true) ) - .setPCJIndexDetails( - PCJIndexDetails.builder() - .setEnabled(true) - .setFluoDetails( new FluoDetails("test_instance_rya_pcj_updater") ) - .addPCJDetails( - PCJDetails.builder() - .setId("pcj 1") - .setUpdateStrategy(PCJUpdateStrategy.BATCH) - .setLastUpdateTime( new Date() )) - .addPCJDetails( - PCJDetails.builder() - .setId("pcj 2"))) - .setProspectorDetails( new ProspectorDetails(Optional.of(new Date())) ) - .setJoinSelectivityDetails( new JoinSelectivityDetails(Optional.of(new Date())) ) - .build(); - - // Setup the repository that will be tested using a mock instance of MongoDB. - final RyaDetailsRepository repo = new MongoRyaInstanceDetailsRepository(client, "testInstance"); - - // Initialize the repository - repo.initialize(details); - - // Create a new state for the details. - final RyaDetails updated = new RyaDetails.Builder( details ) - .setGeoIndexDetails( new GeoIndexDetails(false) ) - .build(); - - // Execute the update. - repo.update(details, updated); - - // Show the new state that is stored matches the updated state. - final RyaDetails fetched = repo.getRyaInstanceDetails(); - assertEquals(updated, fetched); - } - - @Test(expected = ConcurrentUpdateException.class) - public void update_outOfDate() throws AlreadyInitializedException, RyaDetailsRepositoryException { - final String instanceName = "testInstance"; - - // Create the metadata object the repository will be initialized with. - final RyaDetails details = RyaDetails.builder() - .setRyaInstanceName(instanceName) - .setRyaVersion("1.2.3.4") - .setEntityCentricIndexDetails( new EntityCentricIndexDetails(true) ) - .setGeoIndexDetails( new GeoIndexDetails(true) ) - .setTemporalIndexDetails( new TemporalIndexDetails(true) ) - .setFreeTextDetails( new FreeTextIndexDetails(true) ) - .setPCJIndexDetails( - PCJIndexDetails.builder() - .setEnabled(true) - .setFluoDetails( new FluoDetails("test_instance_rya_pcj_updater") ) - .addPCJDetails( - PCJDetails.builder() - .setId("pcj 1") - .setUpdateStrategy(PCJUpdateStrategy.BATCH) - .setLastUpdateTime( new Date() )) - .addPCJDetails( - PCJDetails.builder() - .setId("pcj 2"))) - .setProspectorDetails( new ProspectorDetails(Optional.of(new Date())) ) - .setJoinSelectivityDetails( new JoinSelectivityDetails(Optional.of(new Date())) ) - .build(); - - // Setup the repository that will be tested using a mock instance of MongoDB. - final RyaDetailsRepository repo = new MongoRyaInstanceDetailsRepository(client, "testInstance"); - - // Initialize the repository - repo.initialize(details); - - // Create a new state for the details. - final RyaDetails wrongOriginal = new RyaDetails.Builder( details ) - .setTemporalIndexDetails( new TemporalIndexDetails(false) ) - .build(); - - final RyaDetails updated = new RyaDetails.Builder( details ) - .setGeoIndexDetails( new GeoIndexDetails(false) ) - .build(); - - // Try to execute the update where the old state is not the currently stored state. - repo.update(wrongOriginal, updated); - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBQueryEngineTest.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBQueryEngineTest.java b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBQueryEngineTest.java new file mode 100644 index 0000000..870115c --- /dev/null +++ b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBQueryEngineTest.java @@ -0,0 +1,124 @@ +package mvm.rya.mongodb; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.util.Collection; +import java.util.Map; +import java.util.Map.Entry; + +import info.aduna.iteration.CloseableIteration; +import mvm.rya.api.RdfCloudTripleStoreConfiguration; +import mvm.rya.api.RdfCloudTripleStoreUtils; +import mvm.rya.api.domain.RyaStatement; +import mvm.rya.api.domain.RyaStatement.RyaStatementBuilder; +import mvm.rya.api.domain.RyaURI; + +import org.apache.hadoop.conf.Configuration; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.openrdf.model.impl.URIImpl; +import org.openrdf.query.BindingSet; +import org.openrdf.query.impl.MapBindingSet; + +import com.google.common.collect.Lists; +import com.mongodb.MongoClient; + +import de.flapdoodle.embed.mongo.distribution.Version; +import de.flapdoodle.embed.mongo.tests.MongodForTestsFactory; + +public class MongoDBQueryEngineTest { + + // private dao; + // private configuration; + + private MongoDBQueryEngine engine; + private MongoDBRdfConfiguration configuration; + + @Before + public void setUp() throws Exception { + // Set up Mongo/Rya + MongodForTestsFactory testsFactory = MongodForTestsFactory.with(Version.Main.PRODUCTION); + Configuration conf = new Configuration(); + conf.set(MongoDBRdfConfiguration.USE_TEST_MONGO, "true"); + conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, "test"); + conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya_"); + conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, "rya_"); + configuration = new MongoDBRdfConfiguration(conf); + MongoClient mongoClient = testsFactory.newMongo(); + int port = mongoClient.getServerAddressList().get(0).getPort(); + configuration.set(MongoDBRdfConfiguration.MONGO_INSTANCE_PORT, Integer.toString(port)); + + engine = new MongoDBQueryEngine(configuration, mongoClient); + + // Add Data + MongoDBRyaDAO dao = new MongoDBRyaDAO(configuration, mongoClient); + dao.add(getStatement("u:a", "u:tt", "u:b")); + dao.add(getStatement("u:a", "u:tt", "u:c")); + } + + private RyaStatement getStatement(String s, String p, String o) { + RyaStatementBuilder builder = new RyaStatementBuilder(); + if (s != null) + builder.setSubject(new RyaURI(s)); + if (p != null) + builder.setPredicate(new RyaURI(p)); + if (o != null) + builder.setObject(new RyaURI(o)); + return builder.build(); + } + + public int size(CloseableIteration<?, ?> iter) throws Exception { + int i = 0; + while (iter.hasNext()) { + i++; + iter.next(); + } + return i; + } + + @Test + public void statementQuery() throws Exception { + RyaStatement s = getStatement("u:a", null, null); + Assert.assertEquals(2, size(engine.query(s, configuration))); + } + + @SuppressWarnings("unchecked") + @Test + public void bindingSetsQuery() throws Exception { + RyaStatement s = getStatement("u:a", null, null); + + MapBindingSet bs1 = new MapBindingSet(); + bs1.addBinding("foo", new URIImpl("u:x")); + + Map.Entry<RyaStatement, BindingSet> e1 = new RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s, bs1); + Collection<Entry<RyaStatement, BindingSet>> stmts1 = Lists.newArrayList(e1); + Assert.assertEquals(2, size(engine.queryWithBindingSet(stmts1, configuration))); + + + MapBindingSet bs2 = new MapBindingSet(); + bs2.addBinding("foo", new URIImpl("u:y")); + + Map.Entry<RyaStatement, BindingSet> e2 = new RdfCloudTripleStoreUtils.CustomEntry<RyaStatement, BindingSet>(s, bs2); + + Collection<Entry<RyaStatement, BindingSet>> stmts2 = Lists.newArrayList(e1, e2); + Assert.assertEquals(4, size(engine.queryWithBindingSet(stmts2, configuration))); +} +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java new file mode 100644 index 0000000..33531b5 --- /dev/null +++ b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOIT.java @@ -0,0 +1,139 @@ +package mvm.rya.mongodb; +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import static mvm.rya.mongodb.dao.SimpleMongoDBStorageStrategy.TIMESTAMP; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; + +import org.apache.hadoop.conf.Configuration; +import org.junit.Before; +import org.junit.Test; + +import com.mongodb.DB; +import com.mongodb.DBCollection; +import com.mongodb.DBObject; +import com.mongodb.MongoClient; +import com.mongodb.MongoException; + +import de.flapdoodle.embed.mongo.distribution.Version; +import de.flapdoodle.embed.mongo.tests.MongodForTestsFactory; +import mvm.rya.api.RdfCloudTripleStoreConfiguration; +import mvm.rya.api.domain.RyaStatement; +import mvm.rya.api.domain.RyaStatement.RyaStatementBuilder; +import mvm.rya.api.domain.RyaURI; +import mvm.rya.api.persist.RyaDAOException; + +public class MongoDBRyaDAOIT { + + private MongodForTestsFactory testsFactory; + private MongoDBRyaDAO dao; + private MongoDBRdfConfiguration configuration; + private MongoClient mongoClient; + + @Before + public void setUp() throws IOException, RyaDAOException{ + testsFactory = MongodForTestsFactory.with(Version.Main.PRODUCTION); + final Configuration conf = new Configuration(); + conf.set(MongoDBRdfConfiguration.USE_TEST_MONGO, "true"); + conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, "test"); + conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya_"); + conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, "rya_"); + configuration = new MongoDBRdfConfiguration(conf); + mongoClient = testsFactory.newMongo(); + final int port = mongoClient.getServerAddressList().get(0).getPort(); + configuration.set(MongoDBRdfConfiguration.MONGO_INSTANCE_PORT, Integer.toString(port)); + dao = new MongoDBRyaDAO(configuration, mongoClient); + } + + @Test + public void testDeleteWildcard() throws RyaDAOException { + final RyaStatementBuilder builder = new RyaStatementBuilder(); + builder.setPredicate(new RyaURI("http://temp.com")); + dao.delete(builder.build(), configuration); + } + + + @Test + public void testAdd() throws RyaDAOException, MongoException, IOException { + final RyaStatementBuilder builder = new RyaStatementBuilder(); + builder.setPredicate(new RyaURI("http://temp.com")); + builder.setSubject(new RyaURI("http://subject.com")); + builder.setObject(new RyaURI("http://object.com")); + + final DB db = mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); + final DBCollection coll = db.getCollection(configuration.getTriplesCollectionName()); + + dao.add(builder.build()); + + assertEquals(coll.count(),1); + + final DBObject dbo = coll.findOne(); + assertTrue(dbo.containsField(TIMESTAMP)); + } + + @Test + public void testDelete() throws RyaDAOException, MongoException, IOException { + final RyaStatementBuilder builder = new RyaStatementBuilder(); + builder.setPredicate(new RyaURI("http://temp.com")); + builder.setSubject(new RyaURI("http://subject.com")); + builder.setObject(new RyaURI("http://object.com")); + final RyaStatement statement = builder.build(); + final DB db = mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); + final DBCollection coll = db.getCollection(configuration.getTriplesCollectionName()); + + dao.add(statement); + + assertEquals(coll.count(),1); + + dao.delete(statement, configuration); + + assertEquals(coll.count(),0); + + } + + @Test + public void testDeleteWildcardSubjectWithContext() throws RyaDAOException, MongoException, IOException { + final RyaStatementBuilder builder = new RyaStatementBuilder(); + builder.setPredicate(new RyaURI("http://temp.com")); + builder.setSubject(new RyaURI("http://subject.com")); + builder.setObject(new RyaURI("http://object.com")); + builder.setContext(new RyaURI("http://context.com")); + final RyaStatement statement = builder.build(); + + final DB db = mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); + final DBCollection coll = db.getCollection(configuration.getTriplesCollectionName()); + + dao.add(statement); + + assertEquals(coll.count(),1); + + final RyaStatementBuilder builder2 = new RyaStatementBuilder(); + builder2.setPredicate(new RyaURI("http://temp.com")); + builder2.setObject(new RyaURI("http://object.com")); + builder2.setContext(new RyaURI("http://context3.com")); + final RyaStatement query = builder2.build(); + + dao.delete(query, configuration); + + assertEquals(coll.count(),1); + } +} http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/44a2dcf0/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOTest.java ---------------------------------------------------------------------- diff --git a/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOTest.java b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOTest.java new file mode 100644 index 0000000..dde0eda --- /dev/null +++ b/dao/mongodb.rya/src/test/java/org/apache/rya/mongodb/MongoDBRyaDAOTest.java @@ -0,0 +1,137 @@ +package mvm.rya.mongodb; +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import static org.junit.Assert.assertEquals; + +import java.io.IOException; + +import org.apache.hadoop.conf.Configuration; +import org.junit.Before; +import org.junit.Test; + +import com.mongodb.DB; +import com.mongodb.DBCollection; +import com.mongodb.MongoClient; +import com.mongodb.MongoException; + +import de.flapdoodle.embed.mongo.distribution.Version; +import de.flapdoodle.embed.mongo.tests.MongodForTestsFactory; +import mvm.rya.api.RdfCloudTripleStoreConfiguration; +import mvm.rya.api.domain.RyaStatement; +import mvm.rya.api.domain.RyaStatement.RyaStatementBuilder; +import mvm.rya.api.domain.RyaURI; +import mvm.rya.api.persist.RyaDAOException; + +public class MongoDBRyaDAOTest { + + private MongodForTestsFactory testsFactory; + private MongoDBRyaDAO dao; + private MongoDBRdfConfiguration configuration; + private MongoClient mongoClient; + + @Before + public void setUp() throws IOException, RyaDAOException{ + testsFactory = MongodForTestsFactory.with(Version.Main.PRODUCTION); + final Configuration conf = new Configuration(); + conf.set(MongoDBRdfConfiguration.USE_TEST_MONGO, "true"); + conf.set(MongoDBRdfConfiguration.MONGO_DB_NAME, "test"); + conf.set(MongoDBRdfConfiguration.MONGO_COLLECTION_PREFIX, "rya_"); + conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, "rya_"); + configuration = new MongoDBRdfConfiguration(conf); + mongoClient = testsFactory.newMongo(); + final int port = mongoClient.getServerAddressList().get(0).getPort(); + configuration.set(MongoDBRdfConfiguration.MONGO_INSTANCE_PORT, ""+port); + dao = new MongoDBRyaDAO(configuration, mongoClient); + } + + @Test + public void testDeleteWildcard() throws RyaDAOException { + final RyaStatementBuilder builder = new RyaStatementBuilder(); + builder.setPredicate(new RyaURI("http://temp.com")); + dao.delete(builder.build(), configuration); + } + + + @Test + public void testAdd() throws RyaDAOException, MongoException, IOException { + final RyaStatementBuilder builder = new RyaStatementBuilder(); + builder.setPredicate(new RyaURI("http://temp.com")); + builder.setSubject(new RyaURI("http://subject.com")); + builder.setObject(new RyaURI("http://object.com")); + + final DB db = mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); + final DBCollection coll = db.getCollection(configuration.getTriplesCollectionName()); + + dao.add(builder.build()); + + assertEquals(coll.count(),1); + + } + + @Test + public void testDelete() throws RyaDAOException, MongoException, IOException { + final RyaStatementBuilder builder = new RyaStatementBuilder(); + builder.setPredicate(new RyaURI("http://temp.com")); + builder.setSubject(new RyaURI("http://subject.com")); + builder.setObject(new RyaURI("http://object.com")); + final RyaStatement statement = builder.build(); + + final DB db = mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); + final DBCollection coll = db.getCollection(configuration.getTriplesCollectionName()); + + dao.add(statement); + + assertEquals(coll.count(),1); + + dao.delete(statement, configuration); + + assertEquals(coll.count(),0); + + } + + @Test + public void testDeleteWildcardSubjectWithContext() throws RyaDAOException, MongoException, IOException { + final RyaStatementBuilder builder = new RyaStatementBuilder(); + builder.setPredicate(new RyaURI("http://temp.com")); + builder.setSubject(new RyaURI("http://subject.com")); + builder.setObject(new RyaURI("http://object.com")); + builder.setContext(new RyaURI("http://context.com")); + final RyaStatement statement = builder.build(); + + final DB db = mongoClient.getDB(configuration.get(MongoDBRdfConfiguration.MONGO_DB_NAME)); + final DBCollection coll = db.getCollection(configuration.getTriplesCollectionName()); + + dao.add(statement); + + assertEquals(coll.count(),1); + + final RyaStatementBuilder builder2 = new RyaStatementBuilder(); + builder2.setPredicate(new RyaURI("http://temp.com")); + builder2.setObject(new RyaURI("http://object.com")); + builder2.setContext(new RyaURI("http://context3.com")); + final RyaStatement query = builder2.build(); + + dao.delete(query, configuration); + + assertEquals(coll.count(),1); + + } + +}
