RYA-104
Project: http://git-wip-us.apache.org/repos/asf/incubator-rya/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-rya/commit/5bc98c44 Tree: http://git-wip-us.apache.org/repos/asf/incubator-rya/tree/5bc98c44 Diff: http://git-wip-us.apache.org/repos/asf/incubator-rya/diff/5bc98c44 Branch: refs/heads/master Commit: 5bc98c4445953124dd78c5cb5c8579d133c8b39c Parents: 9e8f4a6 Author: David W. Lotts <david.lo...@parsons.com> Authored: Tue Dec 19 15:39:31 2017 -0500 Committer: kchilton2 <kevin.e.chil...@gmail.com> Committed: Fri Jan 5 16:48:40 2018 -0500 ---------------------------------------------------------------------- .../MongoRyaInstanceDetailsRepository.java | 1 + .../client/mongo/MongoConnectionDetails.java | 49 ++++---- .../client/mongo/MongoExecuteSparqlQuery.java | 122 ++++++++++++++++++- .../rya/api/client/mongo/MongoInstall.java | 6 + .../api/client/mongo/MongoLoadStatements.java | 55 ++++++++- .../client/mongo/MongoLoadStatementsFile.java | 6 +- .../client/mongo/MongoExecuteSparqlQueryIT.java | 41 +++++-- .../client/mongo/MongoGetInstanceDetailsIT.java | 9 +- .../rya/api/client/mongo/MongoInstallIT.java | 32 ++--- .../api/client/mongo/MongoInstanceExistsIT.java | 10 +- .../api/client/mongo/MongoListInstancesIT.java | 10 +- .../client/mongo/MongoLoadStatementsFileIT.java | 60 +++------ .../api/client/mongo/MongoLoadStatementsIT.java | 98 ++++++++++++++- .../rya/api/client/mongo/MongoUninstallIT.java | 10 +- .../apache/rya/shell/RyaConnectionCommands.java | 4 +- .../org/apache/rya/shell/RyaPromptProvider.java | 19 ++- .../org/apache/rya/shell/SharedShellState.java | 2 + .../rya/shell/RyaConnectionCommandsIT.java | 47 +++++++ .../apache/rya/shell/RyaPromptProviderTest.java | 22 +++- 19 files changed, 475 insertions(+), 128 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5bc98c44/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 index 9bb558e..1eadea8 100644 --- 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 @@ -56,6 +56,7 @@ public class MongoRyaInstanceDetailsRepository implements RyaDetailsRepository { public MongoRyaInstanceDetailsRepository(final MongoClient client, final String instanceName) { checkNotNull(client); this.instanceName = requireNonNull( instanceName ); + // the rya instance is the Mongo db name. This ignores any collection-prefix. db = client.getDB(this.instanceName); } http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5bc98c44/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoConnectionDetails.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoConnectionDetails.java b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoConnectionDetails.java index d792289..b348d34 100644 --- a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoConnectionDetails.java +++ b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoConnectionDetails.java @@ -30,7 +30,7 @@ import edu.umd.cs.findbugs.annotations.DefaultAnnotation; import edu.umd.cs.findbugs.annotations.NonNull; /** - * The information the shell used to connect to Mongo DB. + * The information the shell used to connect to Mongo server, not the DB or collections. */ @DefaultAnnotation(NonNull.class) public class MongoConnectionDetails { @@ -48,30 +48,30 @@ public class MongoConnectionDetails { * @param hostname - The hostname of the Mongo DB that was connected to. (not null) * @param port - The port of the Mongo DB that was connected to. */ - public MongoConnectionDetails( - final String username, - final char[] userPass, - final String hostname, - final int port) { + public MongoConnectionDetails( // + final String username, // + final char[] userPass, // + final String hostname, // + final int port) { this.username = requireNonNull(username); this.userPass = requireNonNull(userPass); this.hostname = requireNonNull(hostname); this.port = port; } - /** - * @return The username that was used to establish the connection. - */ - public String getUsername() { - return this.username; - } - - /** - * @return The password that was used to establish the connection. - */ - public char[] getPassword() { - return this.userPass; - } + // /** + // * @return The username that was used to establish the connection. + // */ + // public String getUsername() { + // return this.username; + // } + // + // /** + // * @return The password that was used to establish the connection. + // */ + // public char[] getPassword() { + // return this.userPass; + // } /** * @return The hostname of the Mongo DB that was connected to. @@ -90,7 +90,8 @@ public class MongoConnectionDetails { /** * Create a {@link MongoDBRdfConfiguration} that is using this object's values. * - * @param ryaInstanceName - The Rya instance to connect to. + * @param ryaInstanceName + * - The Rya instance to connect to. * @return Constructs a new {@link MongoDBRdfConfiguration} object with values from this object. */ public MongoDBRdfConfiguration build(final String ryaInstanceName) { @@ -105,13 +106,13 @@ public class MongoConnectionDetails { conf.setBoolean(ConfigUtils.USE_MONGO, true); conf.setMongoInstance(hostname); conf.setMongoPort("" + port); - conf.setMongoUser(username); - conf.setMongoPassword(new String(userPass)); + // conf.setMongoUser(username); + // conf.setMongoPassword(new String(userPass)); conf.setMongoDBName(ryaInstanceName); // Both of these are ways to configure the collection prefixes. - conf.setCollectionName(ryaInstanceName); - conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, ryaInstanceName); + conf.setCollectionName("rya"); + conf.set(RdfCloudTripleStoreConfiguration.CONF_TBL_PREFIX, "rya"); if (mongoClient != null) { conf.setMongoClient(mongoClient); } http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5bc98c44/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQuery.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQuery.java b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQuery.java index f51d42d..681e344 100644 --- a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQuery.java +++ b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQuery.java @@ -20,9 +20,34 @@ package org.apache.rya.api.client.mongo; import static java.util.Objects.requireNonNull; +import java.io.ByteArrayOutputStream; +import java.io.OutputStream; +import java.nio.charset.StandardCharsets; +import java.text.DecimalFormat; + +import org.apache.accumulo.core.client.AccumuloException; +import org.apache.accumulo.core.client.AccumuloSecurityException; +import org.apache.log4j.Logger; import org.apache.rya.api.client.ExecuteSparqlQuery; import org.apache.rya.api.client.InstanceDoesNotExistException; +import org.apache.rya.api.client.InstanceExists; import org.apache.rya.api.client.RyaClientException; +import org.apache.rya.api.persist.RyaDAOException; +import org.apache.rya.mongodb.MongoDBRdfConfiguration; +import org.apache.rya.rdftriplestore.inference.InferenceEngineException; +import org.apache.rya.sail.config.RyaSailFactory; +import org.openrdf.query.BindingSet; +import org.openrdf.query.MalformedQueryException; +import org.openrdf.query.QueryEvaluationException; +import org.openrdf.query.QueryLanguage; +import org.openrdf.query.TupleQuery; +import org.openrdf.query.TupleQueryResultHandlerException; +import org.openrdf.query.resultio.text.csv.SPARQLResultsCSVWriter; +import org.openrdf.repository.RepositoryException; +import org.openrdf.repository.sail.SailRepository; +import org.openrdf.repository.sail.SailRepositoryConnection; +import org.openrdf.sail.Sail; +import org.openrdf.sail.SailException; import com.mongodb.MongoClient; @@ -30,27 +55,114 @@ import edu.umd.cs.findbugs.annotations.DefaultAnnotation; import edu.umd.cs.findbugs.annotations.NonNull; /** - * TODO impl, test, doc + * Execute a sparql query on mongo Rya. */ @DefaultAnnotation(NonNull.class) public class MongoExecuteSparqlQuery extends MongoCommand implements ExecuteSparqlQuery { + private static final Logger log = Logger.getLogger(MongoExecuteSparqlQuery.class); + private final InstanceExists instanceExists; + /** - * Constructs an instance of {@link }. + * Constructs an instance. * * @param connectionDetails - Details about the values that were used to create the client. (not null) * @param connector - Provides programmatic access to the instance of Mongo that hosts Rya instances. (not null) */ public MongoExecuteSparqlQuery(final MongoConnectionDetails connectionDetails, final MongoClient client) { super(connectionDetails, client); + instanceExists = new MongoInstanceExists(connectionDetails, client); } - @Override public String executeSparqlQuery(final String ryaInstanceName, final String sparqlQuery) throws InstanceDoesNotExistException, RyaClientException { requireNonNull(ryaInstanceName); requireNonNull(sparqlQuery); + requireNonNull(ryaInstanceName); + requireNonNull(sparqlQuery); + + // Ensure the Rya Instance exists. + if (!instanceExists.exists(ryaInstanceName)) { + throw new InstanceDoesNotExistException(String.format("There is no Rya instance named '%s'.", + ryaInstanceName)); + } + Sail sail = null; + SailRepository sailRepo = null; + SailRepositoryConnection sailRepoConn = null; + // Get a Sail object that is connected to the Rya instance. + final MongoDBRdfConfiguration ryaConf = getMongoConnectionDetails().build(ryaInstanceName, getClient()); + // ryaConf.setFlush(false); //Accumulo version said: RYA-327 should address this hardcoded value. + try { + sail = RyaSailFactory.getInstance(ryaConf); + } catch (SailException | RyaDAOException | InferenceEngineException | AccumuloException + | AccumuloSecurityException e) { + throw new RyaClientException("While getting a sail instance.", e); + } + + // Load the file. + sailRepo = new SailRepository(sail); + try { + sailRepoConn = sailRepo.getConnection(); + + // Execute the query. + final long start = System.currentTimeMillis(); + final TupleQuery tupleQuery = sailRepoConn.prepareTupleQuery(QueryLanguage.SPARQL, sparqlQuery); + final ByteArrayOutputStream baos = new ByteArrayOutputStream(); + final CountingSPARQLResultsCSVWriter handler = new CountingSPARQLResultsCSVWriter(baos); + tupleQuery.evaluate(handler); + final StringBuilder sb = new StringBuilder(); + + final String newline = "\n"; + sb.append("Query Result:").append(newline); + sb.append(new String(baos.toByteArray(), StandardCharsets.UTF_8)); + + final String seconds = new DecimalFormat("0.0##").format((System.currentTimeMillis() - start) / 1000.0); + sb.append("Retrieved ").append(handler.getCount()).append(" results in ").append(seconds).append( + " seconds."); + + return sb.toString(); + + // } catch (final SailException | AccumuloException | AccumuloSecurityException | RyaDAOException + // | InferenceEngineException e) { + // throw new RyaClientException("A problem connecting to the Rya instance named '" + ryaInstanceName + // + "' has caused the query to fail.", e); + } catch (final MalformedQueryException e) { + throw new RyaClientException("There was a problem parsing the supplied query.", e); + } catch (final QueryEvaluationException | TupleQueryResultHandlerException e) { + throw new RyaClientException("There was a problem evaluating the supplied query.", e); + } catch (final RepositoryException e) { + throw new RyaClientException("There was a problem executing the query against the Rya instance named " + + ryaInstanceName + ".", e); + } finally { + // close anything? + } + } + + /** + * Subclasses {@link SPARQLResultsCSVWriter} to keep track of the total count of handled {@link BindingSet} objects. + */ + private static class CountingSPARQLResultsCSVWriter extends SPARQLResultsCSVWriter { + + private int count = 0; + + /** + * @param out - The OutputStream for results to be written to. + */ + public CountingSPARQLResultsCSVWriter(final OutputStream out) { + super(out); + } + + @Override + public void handleSolution(final BindingSet bindingSet) throws TupleQueryResultHandlerException { + super.handleSolution(bindingSet); + count++; + } - // TODO Auto-generated method stub - return null; + /** + * + * @return The number of BindingSets that were handled by {@link #handleSolution(BindingSet)}. + */ + public int getCount() { + return count; + } } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5bc98c44/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstall.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstall.java b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstall.java index bcd79f6..9718cf1 100644 --- a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstall.java +++ b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoInstall.java @@ -52,6 +52,12 @@ import edu.umd.cs.findbugs.annotations.NonNull; /** * An Mongo implementation of the {@link Install} command. + * Note about the scheme: + * the Rya instance is used as the mongoDBName. + * the Rya triples, instance details, and Rya indexes each get their own collection. + * the triples collection name is always constant: "rya_triples" (or? ryaInstance+"_triples") + * This means that each Mongo DB can have only one Rya instance. + * A Collection corresponds to an Accumulo table. */ @DefaultAnnotation(NonNull.class) public class MongoInstall extends MongoCommand implements Install { http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5bc98c44/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatements.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatements.java b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatements.java index 846adfe..9a32355 100644 --- a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatements.java +++ b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatements.java @@ -18,10 +18,25 @@ */ package org.apache.rya.api.client.mongo; +import static java.util.Objects.requireNonNull; + +import org.apache.accumulo.core.client.AccumuloException; +import org.apache.accumulo.core.client.AccumuloSecurityException; +import org.apache.log4j.Logger; import org.apache.rya.api.client.InstanceDoesNotExistException; +import org.apache.rya.api.client.InstanceExists; import org.apache.rya.api.client.LoadStatements; import org.apache.rya.api.client.RyaClientException; +import org.apache.rya.api.persist.RyaDAOException; +import org.apache.rya.mongodb.MongoDBRdfConfiguration; +import org.apache.rya.rdftriplestore.inference.InferenceEngineException; +import org.apache.rya.sail.config.RyaSailFactory; import org.openrdf.model.Statement; +import org.openrdf.repository.RepositoryException; +import org.openrdf.repository.sail.SailRepository; +import org.openrdf.repository.sail.SailRepositoryConnection; +import org.openrdf.sail.Sail; +import org.openrdf.sail.SailException; import com.mongodb.MongoClient; @@ -33,15 +48,53 @@ import edu.umd.cs.findbugs.annotations.NonNull; */ @DefaultAnnotation(NonNull.class) public class MongoLoadStatements extends MongoCommand implements LoadStatements { + private static final Logger log = Logger.getLogger(MongoLoadStatements.class); + private final InstanceExists instanceExists; + /** + * Constructs an instance. + * + * @param connectionDetails - Details to connect to the server. (not null) + * @param client - Provides programmatic access to the instance of Mongo + * that hosts Rya instance. (not null) + */ public MongoLoadStatements(MongoConnectionDetails connectionDetails, MongoClient client) { super(connectionDetails, client); + instanceExists = new MongoInstanceExists(connectionDetails, client); } @Override public void loadStatements(String ryaInstanceName, Iterable<? extends Statement> statements) throws InstanceDoesNotExistException, RyaClientException { - // TODO Auto-generated method stub + requireNonNull(ryaInstanceName); + requireNonNull(statements); + + // Ensure the Rya Instance exists. + if (!instanceExists.exists(ryaInstanceName)) { + throw new InstanceDoesNotExistException(String.format("There is no Rya instance named '%s'.", + ryaInstanceName)); + } + + Sail sail = null; + SailRepository sailRepo = null; + SailRepositoryConnection sailRepoConn = null; + // Get a Sail object that is connected to the Rya instance. + final MongoDBRdfConfiguration ryaConf = getMongoConnectionDetails().build(ryaInstanceName, getClient()); + // ryaConf.setFlush(false); //Accumulo version said: RYA-327 should address this hardcoded value. + try { + sail = RyaSailFactory.getInstance(ryaConf); + } catch (SailException | RyaDAOException | InferenceEngineException | AccumuloException + | AccumuloSecurityException e) { + throw new RyaClientException("While getting a sail instance.", e); + } + // Load the file. + sailRepo = new SailRepository(sail); + try { + sailRepoConn = sailRepo.getConnection(); + sailRepoConn.add(statements); + } catch (RepositoryException e) { + throw new RyaClientException("While getting a connection and adding statements.", e); + } } } http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5bc98c44/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFile.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFile.java b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFile.java index 9f68944..e57b6cb 100644 --- a/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFile.java +++ b/extras/indexing/src/main/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFile.java @@ -59,10 +59,8 @@ public class MongoLoadStatementsFile extends MongoCommand implements LoadStateme /** * Constructs an instance of {@link MongoListInstances}. * - * @param connectionDetails - * - Details to connect to the server. (not null) - * @param client - * - Provides programmatic access to the instance of Mongo + * @param connectionDetails - Details to connect to the server. (not null) + * @param client - Provides programmatic access to the instance of Mongo * that hosts Rya instance. (not null) */ public MongoLoadStatementsFile(MongoConnectionDetails connectionDetails, MongoClient client) { http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5bc98c44/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQueryIT.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQueryIT.java b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQueryIT.java index 153992c..ce866dd 100644 --- a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQueryIT.java +++ b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoExecuteSparqlQueryIT.java @@ -18,12 +18,17 @@ */ package org.apache.rya.api.client.mongo; -import org.apache.rya.api.client.Install; +import static org.junit.Assert.assertTrue; + +import java.util.List; + +import org.apache.rya.api.client.ExecuteSparqlQuery; import org.apache.rya.api.client.Install.DuplicateInstanceNameException; -import org.apache.rya.api.client.Install.InstallConfiguration; +import org.apache.rya.api.client.RyaClient; import org.apache.rya.api.client.RyaClientException; import org.apache.rya.mongodb.MongoTestBase; import org.junit.Test; +import org.openrdf.model.Statement; import com.mongodb.MongoException; @@ -33,18 +38,38 @@ import com.mongodb.MongoException; public class MongoExecuteSparqlQueryIT extends MongoTestBase { @Test public void ExecuteSparqlQuery_exec() throws MongoException, DuplicateInstanceNameException, RyaClientException { + // Install an instance of Rya. MongoConnectionDetails connectionDetails = getConnectionDetails(); - // Install a few instances of Rya using the install command. - final Install install = new MongoInstall(connectionDetails, getMongoClient()); - install.install("instanceExec", InstallConfiguration.builder().build()); - MongoExecuteSparqlQuery executeSparql = new MongoExecuteSparqlQuery(connectionDetails, getMongoClient()); - // TODO executeSparql. + final RyaClient ryaClient = MongoRyaClientFactory.build(connectionDetails, conf.getMongoClient()); + // install rya and load some data + final List<Statement> loadMe = MongoLoadStatementsIT.installAndLoad(); + // Here comes the method to test + ExecuteSparqlQuery executeSparql = ryaClient.getExecuteSparqlQuery(); + final String sparql = "SELECT * where { ?a ?b ?c }"; + String results = executeSparql.executeSparqlQuery(conf.getMongoDBName(), sparql); + System.out.println(results); + assertTrue("result has header.", results.startsWith("Query Result:")); + assertTrue("result has column headings.", results.contains("a,b,c")); + assertTrue("result has footer.", results.contains("Retrieved 3 results in")); + for (Statement expect : loadMe) { + assertTrue("All results should contain expected subjects:", + results.contains(expect.getSubject().stringValue())); + assertTrue("All results should contain expected predicates:", + results.contains(expect.getPredicate().stringValue())); + assertTrue("All results should contain expected objects:", + results.contains(expect.getObject().stringValue())); + } } /** * @return copy from conf to MongoConnectionDetails */ private MongoConnectionDetails getConnectionDetails() { - return new MongoConnectionDetails(conf.getMongoUser(), conf.getMongoPassword().toCharArray(), conf.getMongoInstance(), Integer.parseInt(conf.getMongoPort())); + return new MongoConnectionDetails( + conf.getMongoUser(), + conf.getMongoPassword().toCharArray(), + conf.getMongoInstance(), + Integer.parseInt(conf.getMongoPort())); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5bc98c44/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetailsIT.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetailsIT.java b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetailsIT.java index 4c70eda..9c8e698 100644 --- a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetailsIT.java +++ b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoGetInstanceDetailsIT.java @@ -114,10 +114,9 @@ public class MongoGetInstanceDetailsIT extends MongoTestBase { * @return copy from conf to MongoConnectionDetails */ private MongoConnectionDetails getConnectionDetails() { - return new MongoConnectionDetails( - conf.getMongoUser(), - conf.getMongoPassword().toCharArray(), - conf.getMongoInstance(), - Integer.parseInt( conf.getMongoPort() )); + return new MongoConnectionDetails(conf.getMongoUser(), + conf.getMongoPassword().toCharArray(), + conf.getMongoInstance(), + Integer.parseInt(conf.getMongoPort())); } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5bc98c44/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstallIT.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstallIT.java b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstallIT.java index 1ec7e9e..08c472d 100644 --- a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstallIT.java +++ b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstallIT.java @@ -18,6 +18,7 @@ */ package org.apache.rya.api.client.mongo; +import static org.apache.rya.mongodb.instance.MongoRyaInstanceDetailsRepository.INSTANCE_DETAILS_COLLECTION_NAME; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -29,6 +30,7 @@ import org.apache.rya.api.client.Install; import org.apache.rya.api.client.Install.DuplicateInstanceNameException; import org.apache.rya.api.client.Install.InstallConfiguration; import org.apache.rya.api.client.InstanceExists; +import org.apache.rya.api.client.RyaClient; import org.apache.rya.api.client.RyaClientException; import org.apache.rya.mongodb.MongoTestBase; import org.junit.Test; @@ -41,14 +43,10 @@ public class MongoInstallIT extends MongoTestBase { @Test public void install() throws DuplicateInstanceNameException, RyaClientException { // Install an instance of Rya. - final String ryaInstance = conf.getCollectionName(); + final String ryaInstance = conf.getMongoDBName(); // Setup the connection details that were used for the embedded Mongo DB instance we are testing with. - final MongoConnectionDetails connectionDetails = new MongoConnectionDetails( - conf.getMongoUser(), - conf.getMongoPassword().toCharArray(), - conf.getMongoInstance(), - Integer.parseInt( conf.getMongoPort() )); + final MongoConnectionDetails connectionDetails = getConnectionDetails(); // Check that the instance does not exist. final InstanceExists instanceExists = new MongoInstanceExists(connectionDetails, this.getMongoClient()); @@ -61,17 +59,19 @@ public class MongoInstallIT extends MongoTestBase { .setEnableTemporalIndex(true) .build(); - final Install install = new MongoInstall(connectionDetails, this.getMongoClient()); + final RyaClient ryaClient = MongoRyaClientFactory.build(connectionDetails, conf.getMongoClient()); + final Install install = ryaClient.getInstall(); + assertTrue("ryaClient should give mongoInstall", install instanceof MongoInstall); install.install(ryaInstance, installConfig); // Check that the instance exists. assertTrue(instanceExists.exists(ryaInstance)); // Show that the expected collections were created within the database. - final List<String> expected = Arrays.asList("instance_details", ryaInstance + "_triples"); + final List<String> expected = Arrays.asList(INSTANCE_DETAILS_COLLECTION_NAME, "rya_triples"); int count = 0; final List<String> found = new ArrayList<>(); - for (final String collection : this.getMongoClient().getDatabase(ryaInstance).listCollectionNames()) { + for (final String collection : this.getMongoClient().getDatabase(conf.getMongoDBName()).listCollectionNames()) { count += expected.contains(collection) ? 1 : 0; found.add( collection ); } @@ -85,11 +85,7 @@ public class MongoInstallIT extends MongoTestBase { final String instanceName = conf.getCollectionName(); final InstallConfiguration installConfig = InstallConfiguration.builder().build(); - final MongoConnectionDetails connectionDetails = new MongoConnectionDetails( - conf.getMongoUser(), - conf.getMongoPassword().toCharArray(), - conf.getMongoInstance(), - Integer.parseInt( conf.getMongoPort() )); + final MongoConnectionDetails connectionDetails = getConnectionDetails(); final Install install = new MongoInstall(connectionDetails, this.getMongoClient()); install.install(instanceName, installConfig); @@ -97,4 +93,12 @@ public class MongoInstallIT extends MongoTestBase { // Install it again throws expected error. install.install(instanceName, installConfig); } + + private MongoConnectionDetails getConnectionDetails() { + return new MongoConnectionDetails( + conf.getMongoUser(), + conf.getMongoPassword().toCharArray(), + conf.getMongoInstance(), + Integer.parseInt(conf.getMongoPort())); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5bc98c44/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstanceExistsIT.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstanceExistsIT.java b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstanceExistsIT.java index 6611f7f..1b2f499 100644 --- a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstanceExistsIT.java +++ b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoInstanceExistsIT.java @@ -70,11 +70,11 @@ public class MongoInstanceExistsIT extends MongoTestBase { /** * @return copy from conf to MongoConnectionDetails */ - private MongoConnectionDetails getConnectionDetails() { + private MongoConnectionDetails getConnectionDetails() {// return new MongoConnectionDetails( - conf.getMongoUser(), - conf.getMongoPassword().toCharArray(), - conf.getMongoInstance(), - Integer.parseInt( conf.getMongoPort() )); + conf.getMongoUser(), + conf.getMongoPassword().toCharArray(), + conf.getMongoInstance(), + Integer.parseInt(conf.getMongoPort())); } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5bc98c44/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoListInstancesIT.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoListInstancesIT.java b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoListInstancesIT.java index 561434d..3307fa7 100644 --- a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoListInstancesIT.java +++ b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoListInstancesIT.java @@ -59,11 +59,11 @@ public class MongoListInstancesIT extends MongoTestBase { /** * @return copy from conf to MongoConnectionDetails */ - private MongoConnectionDetails getConnectionDetails() { + private MongoConnectionDetails getConnectionDetails() {// return new MongoConnectionDetails( - conf.getMongoUser(), - conf.getMongoPassword().toCharArray(), - conf.getMongoInstance(), - Integer.parseInt( conf.getMongoPort() )); + conf.getMongoUser(), + conf.getMongoPassword().toCharArray(), + conf.getMongoInstance(), + Integer.parseInt(conf.getMongoPort())); } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5bc98c44/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFileIT.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFileIT.java b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFileIT.java index c3b7cd0..c144aba 100644 --- a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFileIT.java +++ b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsFileIT.java @@ -44,7 +44,7 @@ public class MongoLoadStatementsFileIT extends MongoTestBase { @Test(expected = InstanceDoesNotExistException.class) public void instanceDoesNotExist() throws Exception { - + org.apache.log4j.BasicConfigurator.configure(); final RyaClient ryaClient = MongoRyaClientFactory.build(getConnectionDetails(), conf.getMongoClient()); ryaClient.getLoadStatementsFile().loadStatements(getConnectionDetails().getHostname(), Paths.get("src/test/resources/example.ttl"), RDFFormat.TURTLE); } @@ -52,26 +52,23 @@ public class MongoLoadStatementsFileIT extends MongoTestBase { @Test public void loadTurtleFile() throws Exception { // Install an instance of Rya. - final InstallConfiguration installConfig = InstallConfiguration.builder()// - .setEnableTableHashPrefix(false)// - .setEnableEntityCentricIndex(false)// - .setEnableFreeTextIndex(false)// - .setEnableTemporalIndex(false)// - .setEnablePcjIndex(false)// - .setEnableGeoIndex(false)// + final InstallConfiguration installConfig = InstallConfiguration.builder() + .setEnableTableHashPrefix(false) + .setEnableEntityCentricIndex(false) + .setEnableFreeTextIndex(false) + .setEnableTemporalIndex(false) + .setEnablePcjIndex(false) + .setEnableGeoIndex(false) .build(); MongoConnectionDetails connectionDetails = getConnectionDetails(); final RyaClient ryaClient = MongoRyaClientFactory.build(connectionDetails, conf.getMongoClient()); final Install install = ryaClient.getInstall(); - install.install(conf.getCollectionName(), installConfig); + install.install(conf.getMongoDBName(), installConfig); // Load the test statement file. - ryaClient.getLoadStatementsFile() - // LoadStatementsFile loadStatementsFile = new MongoLoadStatementsFile(connectionDetails, getMongoClient()); - // loadStatementsFile - .loadStatements( // - conf.getCollectionName(), // - Paths.get("src/test/resources/example.ttl"), // + ryaClient.getLoadStatementsFile().loadStatements( + conf.getMongoDBName(), + Paths.get("src/test/resources/example.ttl"), RDFFormat.TURTLE); // Verify that the statements were loaded. @@ -87,31 +84,10 @@ public class MongoLoadStatementsFileIT extends MongoTestBase { System.out.println("getRyaCollection().count()=" + getRyaCollection().count()); while (x.hasNext()) { Document y = x.next(); - System.out.println("getRyaCollection()=" + y); + statements.add(vf.createStatement(vf.createURI(y.getString("subject")), vf.createURI(y.getString("predicate")), vf.createURI(y.getString("object")))); } assertEquals("Expect all rows to be read.", 3, getRyaCollection().count()); - // final WholeRowTripleResolver tripleResolver = new WholeRowTripleResolver(); - // final Scanner scanner = getConnector().createScanner(getRyaInstanceName() + "spo", new Authorizations()); - // final Iterator<Entry<Key, Value>> it = scanner.iterator(); - // while(it.hasNext()) { - // final Entry<Key, Value> next = it.next(); - // - // final Key key = next.getKey(); - // final byte[] row = key.getRow().getBytes(); - // final byte[] columnFamily = key.getColumnFamily().getBytes(); - // final byte[] columnQualifier = key.getColumnQualifier().getBytes(); - // final TripleRow tripleRow = new TripleRow(row, columnFamily, columnQualifier); - // - // final RyaStatement ryaStatement = tripleResolver.deserialize(TABLE_LAYOUT.SPO, tripleRow); - // final Statement statement = RyaToRdfConversions.convertStatement(ryaStatement); - // - // // Filter out the rya version statement if it is present. - // if(!isRyaMetadataStatement(vf, statement)) { - // statements.add( statement ); - // } - // } - // - // assertEquals(expected, statements); + assertEquals("All rows in DB should match expected rows:", expected, statements); } private boolean isRyaMetadataStatement(final ValueFactory vf, final Statement statement) { @@ -122,10 +98,10 @@ public class MongoLoadStatementsFileIT extends MongoTestBase { * @return copy from conf to MongoConnectionDetails */ private MongoConnectionDetails getConnectionDetails() { - return new MongoConnectionDetails(// - conf.getMongoUser(), // - conf.getMongoPassword().toCharArray(), // - conf.getMongoInstance(), // + return new MongoConnectionDetails( + conf.getMongoUser(), + conf.getMongoPassword().toCharArray(), + conf.getMongoInstance(), Integer.parseInt(conf.getMongoPort())); } } http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5bc98c44/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsIT.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsIT.java b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsIT.java index fb616bc..43d9017 100644 --- a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsIT.java +++ b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoLoadStatementsIT.java @@ -18,9 +18,105 @@ */ package org.apache.rya.api.client.mongo; +import static org.junit.Assert.assertEquals; + +import java.util.ArrayList; +import java.util.List; + +import org.apache.rya.api.client.Install; +import org.apache.rya.api.client.Install.DuplicateInstanceNameException; +import org.apache.rya.api.client.Install.InstallConfiguration; +import org.apache.rya.api.client.InstanceDoesNotExistException; +import org.apache.rya.api.client.RyaClient; +import org.apache.rya.api.client.RyaClientException; +import org.apache.rya.mongodb.MongoTestBase; +import org.bson.Document; +import org.junit.Test; +import org.openrdf.model.Statement; +import org.openrdf.model.ValueFactory; +import org.openrdf.model.impl.ValueFactoryImpl; + +import com.mongodb.client.MongoCursor; + /** * Integration tests the methods of {@link MongoLoadStatements}. */ -public class MongoLoadStatementsIT { +public class MongoLoadStatementsIT extends MongoTestBase { + @Test(expected = InstanceDoesNotExistException.class) + public void instanceDoesNotExist() throws Exception { + org.apache.log4j.BasicConfigurator.configure(); + final RyaClient ryaClient = MongoRyaClientFactory.build(getConnectionDetails(), conf.getMongoClient()); + // Skip the install step to create error causing situation. + ryaClient.getLoadStatements().loadStatements(getConnectionDetails().getHostname(), makeTestStatements()); + } + + /** + * Pass a list of statements to our loadStatement class. + * + * @throws Exception + */ + @Test + public void loadTurtleFile() throws Exception { + // Install an instance of Rya. + final List<Statement> loadMe = installAndLoad(); + final List<Statement> stmtResults = new ArrayList<>(); + final MongoCursor<Document> triplesIterator = getRyaCollection().find().iterator(); + final ValueFactory vf = new ValueFactoryImpl(); + while (triplesIterator.hasNext()) { + Document triple = triplesIterator.next(); + stmtResults.add(vf.createStatement(vf.createURI(triple.getString("subject")), vf.createURI(triple.getString( + "predicate")), vf.createURI(triple.getString("object")))); + } + stmtResults.sort(((stmt1, stmt2) -> stmt1.getSubject().toString().compareTo(stmt2.getSubject().toString()))); + assertEquals("Expect all rows to be read.", 3, getRyaCollection().count()); + assertEquals("All rows in DB should match expected rows:", loadMe, stmtResults); + } + + /** + * @return some data to load + */ + private static List<Statement> makeTestStatements() { + final List<Statement> loadMe = new ArrayList<>(); + final ValueFactory vf = new ValueFactoryImpl(); + + loadMe.add(vf.createStatement(vf.createURI("http://example#alice"), vf.createURI("http://example#talksTo"), vf + .createURI("http://example#bob"))); + loadMe.add(vf.createStatement(vf.createURI("http://example#bob"), vf.createURI("http://example#talksTo"), vf + .createURI("http://example#charlie"))); + loadMe.add(vf.createStatement(vf.createURI("http://example#charlie"), vf.createURI("http://example#likes"), vf + .createURI("http://example#icecream"))); + return loadMe; + } + public static List<Statement> installAndLoad() throws DuplicateInstanceNameException, RyaClientException { + // first install rya + final InstallConfiguration installConfig = InstallConfiguration.builder() + .setEnableTableHashPrefix(false) + .setEnableEntityCentricIndex(false) + .setEnableFreeTextIndex(false) + .setEnableTemporalIndex(false) + .setEnablePcjIndex(false) + .setEnableGeoIndex(false) + .build(); + MongoConnectionDetails connectionDetails = getConnectionDetails(); + final RyaClient ryaClient = MongoRyaClientFactory.build(connectionDetails, conf.getMongoClient()); + final Install install = ryaClient.getInstall(); + install.install(conf.getMongoDBName(), installConfig); + // next, load data + final List<Statement> loadMe = makeTestStatements(); + ryaClient.getLoadStatements().loadStatements( + conf.getMongoDBName(), + loadMe); + return loadMe; + } + /** + * @return copy from conf to MongoConnectionDetails + */ + private static MongoConnectionDetails getConnectionDetails() { + return new MongoConnectionDetails( + conf.getMongoUser(), + conf.getMongoPassword().toCharArray(), + conf.getMongoInstance(), + Integer.parseInt(conf.getMongoPort())); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5bc98c44/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoUninstallIT.java ---------------------------------------------------------------------- diff --git a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoUninstallIT.java b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoUninstallIT.java index dffb0f2..9b623a5 100644 --- a/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoUninstallIT.java +++ b/extras/indexing/src/test/java/org/apache/rya/api/client/mongo/MongoUninstallIT.java @@ -71,11 +71,11 @@ public class MongoUninstallIT extends MongoTestBase { /** * @return copy from conf to MongoConnectionDetails */ - private MongoConnectionDetails getConnectionDetails() { + private MongoConnectionDetails getConnectionDetails() {// return new MongoConnectionDetails( - conf.getMongoUser(), - conf.getMongoPassword().toCharArray(), - conf.getMongoInstance(), - Integer.parseInt( conf.getMongoPort() )); + conf.getMongoUser(), + conf.getMongoPassword().toCharArray(), + conf.getMongoInstance(), + Integer.parseInt(conf.getMongoPort())); } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5bc98c44/extras/shell/src/main/java/org/apache/rya/shell/RyaConnectionCommands.java ---------------------------------------------------------------------- diff --git a/extras/shell/src/main/java/org/apache/rya/shell/RyaConnectionCommands.java b/extras/shell/src/main/java/org/apache/rya/shell/RyaConnectionCommands.java index e518968..7e5e6df 100644 --- a/extras/shell/src/main/java/org/apache/rya/shell/RyaConnectionCommands.java +++ b/extras/shell/src/main/java/org/apache/rya/shell/RyaConnectionCommands.java @@ -124,8 +124,8 @@ public class RyaConnectionCommands implements CommandMarker { final MongoConnectionDetails mongoDetails = sharedState.getShellState().getMongoDetails().get(); return "The shell is connected to an instance of MongoDB using the following parameters:\n" + " Hostname: " + mongoDetails.getHostname() + "\n" + - " Port: " + mongoDetails.getPort() + "\n" + - " Username:" + mongoDetails.getUsername(); + " Port: " + mongoDetails.getPort() + "\n"; + //+" Username:" + mongoDetails.getUsername(); default: throw new RuntimeException("Unrecognized StorageType: " + storageType.get()); http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5bc98c44/extras/shell/src/main/java/org/apache/rya/shell/RyaPromptProvider.java ---------------------------------------------------------------------- diff --git a/extras/shell/src/main/java/org/apache/rya/shell/RyaPromptProvider.java b/extras/shell/src/main/java/org/apache/rya/shell/RyaPromptProvider.java index a7fd802..096d5cc 100644 --- a/extras/shell/src/main/java/org/apache/rya/shell/RyaPromptProvider.java +++ b/extras/shell/src/main/java/org/apache/rya/shell/RyaPromptProvider.java @@ -21,6 +21,7 @@ package org.apache.rya.shell; import static java.util.Objects.requireNonNull; import org.apache.rya.shell.SharedShellState.ShellState; +import org.apache.rya.shell.SharedShellState.StorageType; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; @@ -44,16 +45,26 @@ public class RyaPromptProvider extends DefaultPromptProvider { @Override public String getPrompt() { final ShellState state = sharedState.getShellState(); - + // figure out the storage name: disconnected, mongo host, or Accumulo instance. + String storageName = "unknown"; + if (state.getStorageType().isPresent()) { + if (state.getStorageType().get() == StorageType.ACCUMULO) { + storageName = state.getAccumuloDetails().get().getInstanceName(); + } else if (state.getStorageType().get() == StorageType.MONGO) { + storageName = state.getMongoDetails().get().getHostname(); + } else { + throw new java.lang.IllegalStateException("Missing or unknown storage type."); + } + } switch(state.getConnectionState()) { case DISCONNECTED: return "rya> "; case CONNECTED_TO_STORAGE: - return String.format("rya/%s> ", state.getAccumuloDetails().get().getInstanceName()); + return String.format("rya/%s> ", storageName); case CONNECTED_TO_INSTANCE: return String.format("rya/%s:%s> ", - state.getAccumuloDetails().get().getInstanceName(), - state.getRyaInstanceName().get()); + storageName, + state.getRyaInstanceName().or("unknown")); default: return "rya> "; } http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5bc98c44/extras/shell/src/main/java/org/apache/rya/shell/SharedShellState.java ---------------------------------------------------------------------- diff --git a/extras/shell/src/main/java/org/apache/rya/shell/SharedShellState.java b/extras/shell/src/main/java/org/apache/rya/shell/SharedShellState.java index 6c8a57c..89cbd5d 100644 --- a/extras/shell/src/main/java/org/apache/rya/shell/SharedShellState.java +++ b/extras/shell/src/main/java/org/apache/rya/shell/SharedShellState.java @@ -358,7 +358,9 @@ public class SharedShellState { */ public Builder(final ShellState shellState) { this.connectionState = shellState.getConnectionState(); + this.storageType = shellState.getStorageType().orNull(); this.accumuloDetails = shellState.getAccumuloDetails().orNull(); + this.mongoDetails = shellState.getMongoDetails().orNull(); this.connectedCommands = shellState.getConnectedCommands().orNull(); this.instanceName = shellState.getRyaInstanceName().orNull(); } http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5bc98c44/extras/shell/src/test/java/org/apache/rya/shell/RyaConnectionCommandsIT.java ---------------------------------------------------------------------- diff --git a/extras/shell/src/test/java/org/apache/rya/shell/RyaConnectionCommandsIT.java b/extras/shell/src/test/java/org/apache/rya/shell/RyaConnectionCommandsIT.java index f424c49..45bfced 100644 --- a/extras/shell/src/test/java/org/apache/rya/shell/RyaConnectionCommandsIT.java +++ b/extras/shell/src/test/java/org/apache/rya/shell/RyaConnectionCommandsIT.java @@ -67,6 +67,30 @@ public class RyaConnectionCommandsIT extends RyaShellITBase { } @Test + public void connectMongo() throws IOException { + // FIXME create mongo client/server here + final Bootstrap bootstrap = getTestBootstrap(); + final JLineShellComponent shell = getTestShell(); + + // Mock the user entering the correct password. + final ApplicationContext context = bootstrap.getApplicationContext(); + final PasswordPrompt mockPrompt = context.getBean(PasswordPrompt.class); + when(mockPrompt.getPassword()).thenReturn("password".toCharArray()); + + // Execute the connect command. + final String cmd = + RyaConnectionCommands.CONNECT_MONGO_CMD + " " + + "--username root " + + "--hostname " + "localhost" + " " + + "--port " + "999"; + + final CommandResult connectResult = shell.executeCommand(cmd); + + // Ensure the connection was successful. + assertTrue(connectResult.isSuccess()); + } + + @Test public void connectAccumulo_noAuths() throws IOException { final MiniAccumuloCluster cluster = getCluster(); final Bootstrap bootstrap = getTestBootstrap(); @@ -247,4 +271,27 @@ public class RyaConnectionCommandsIT extends RyaShellITBase { final CommandResult disconnectResult = shell.executeCommand( RyaConnectionCommands.DISCONNECT_COMMAND_NAME_CMD ); assertTrue( disconnectResult.isSuccess() ); } + + @Test + public void connectMongo_noAuths() throws IOException { + // FIXME make Mongo connection here + final Bootstrap bootstrap = getTestBootstrap(); + final JLineShellComponent shell = getTestShell(); + + // Mock the user entering the correct password. + final ApplicationContext context = bootstrap.getApplicationContext(); + final PasswordPrompt mockPrompt = context.getBean( PasswordPrompt.class ); + when(mockPrompt.getPassword()).thenReturn("password".toCharArray()); + + // Execute the command + final String cmd = RyaConnectionCommands.CONNECT_MONGO_CMD + " " + + "--username root " + + "--hostname " + "localhost" + " " + + "--port " + "999"; // FIXME + + final CommandResult connectResult = shell.executeCommand(cmd); + + // Ensure the connection was successful. + assertTrue( connectResult.isSuccess() ); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/5bc98c44/extras/shell/src/test/java/org/apache/rya/shell/RyaPromptProviderTest.java ---------------------------------------------------------------------- diff --git a/extras/shell/src/test/java/org/apache/rya/shell/RyaPromptProviderTest.java b/extras/shell/src/test/java/org/apache/rya/shell/RyaPromptProviderTest.java index d3eaa4e..01502d2 100644 --- a/extras/shell/src/test/java/org/apache/rya/shell/RyaPromptProviderTest.java +++ b/extras/shell/src/test/java/org/apache/rya/shell/RyaPromptProviderTest.java @@ -21,10 +21,10 @@ package org.apache.rya.shell; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.mock; -import org.junit.Test; - import org.apache.rya.api.client.RyaClient; import org.apache.rya.api.client.accumulo.AccumuloConnectionDetails; +import org.apache.rya.api.client.mongo.MongoConnectionDetails; +import org.junit.Test; /** * Tests the methods of {@link RyaPromptProvider}. @@ -46,7 +46,7 @@ public class RyaPromptProviderTest { } @Test - public void isConnected_noInstanceName() { + public void isConnected_noInstanceName_Accumulo() { // Create a shared state that is connected to a storage, but not a rya instance. final SharedShellState sharedState = new SharedShellState(); @@ -62,6 +62,22 @@ public class RyaPromptProviderTest { } @Test + public void isConnected_noInstanceName_Mongo() { + // Create a shared state that is connected to a storage, but not a rya instance. + final SharedShellState sharedState = new SharedShellState(); + + final MongoConnectionDetails connectionDetails = new MongoConnectionDetails("username", new char[] {}, "testMongoHost", 999); + sharedState.connectedToMongo(connectionDetails, mock(RyaClient.class)); + + // Create a prompt. + final String prompt = new RyaPromptProvider(sharedState).getPrompt(); + + // Verify the prompt is formatted correctly. + final String expected = "rya/testMongoHost> "; + assertEquals(expected, prompt); + } + + @Test public void isConnected_hasInstanceName() { // Create a shared state that is connected to a specific instance. final SharedShellState sharedState = new SharedShellState();