You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rya.apache.org by pu...@apache.org on 2018/05/16 15:51:43 UTC
incubator-rya git commit: RYA-494 Closes #295,
Fixed a bug where the shell was not loading or displaying all
Statements.
Repository: incubator-rya
Updated Branches:
refs/heads/master 2396ebb87 -> ea91e26a5
RYA-494 Closes #295, Fixed a bug where the shell was not loading or displaying all Statements.
Project: http://git-wip-us.apache.org/repos/asf/incubator-rya/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-rya/commit/ea91e26a
Tree: http://git-wip-us.apache.org/repos/asf/incubator-rya/tree/ea91e26a
Diff: http://git-wip-us.apache.org/repos/asf/incubator-rya/diff/ea91e26a
Branch: refs/heads/master
Commit: ea91e26a51bc8bff601d49117f99c8608059181b
Parents: 2396ebb
Author: kchilton2 <ke...@gmail.com>
Authored: Tue May 8 18:33:24 2018 -0400
Committer: Valiyil <Pu...@parsons.com>
Committed: Wed May 16 11:51:11 2018 -0400
----------------------------------------------------------------------
.../accumulo/AccumuloExecuteSparqlQuery.java | 2 +-
.../accumulo/AccumuloExecuteSparqlQueryIT.java | 144 +++++++++++++++++++
.../src/test/resources/test-statements.nt | 22 +++
.../java/org/apache/rya/shell/RyaCommands.java | 2 +-
.../apache/rya/shell/AccumuloRyaCommandsIT.java | 91 ++++++++++++
.../shell/src/test/resources/test-statements.nt | 22 +++
6 files changed, 281 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/ea91e26a/extras/indexing/src/main/java/org/apache/rya/api/client/accumulo/AccumuloExecuteSparqlQuery.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/main/java/org/apache/rya/api/client/accumulo/AccumuloExecuteSparqlQuery.java b/extras/indexing/src/main/java/org/apache/rya/api/client/accumulo/AccumuloExecuteSparqlQuery.java
index b97ae8a..e226260 100644
--- a/extras/indexing/src/main/java/org/apache/rya/api/client/accumulo/AccumuloExecuteSparqlQuery.java
+++ b/extras/indexing/src/main/java/org/apache/rya/api/client/accumulo/AccumuloExecuteSparqlQuery.java
@@ -93,7 +93,7 @@ public class AccumuloExecuteSparqlQuery extends AccumuloCommand implements Execu
sailRepo = new SailRepository(sail);
sailRepoConn = sailRepo.getConnection();
- // Execute the query.
+ // Execute the query.
final TupleQuery tupleQuery = sailRepoConn.prepareTupleQuery(QueryLanguage.SPARQL, sparqlQuery);
return tupleQuery.evaluate();
} catch (final SailException | AccumuloException | AccumuloSecurityException | RyaDAOException | InferenceEngineException e) {
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/ea91e26a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloExecuteSparqlQueryIT.java
----------------------------------------------------------------------
diff --git a/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloExecuteSparqlQueryIT.java b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloExecuteSparqlQueryIT.java
new file mode 100644
index 0000000..8c9d67a
--- /dev/null
+++ b/extras/indexing/src/test/java/org/apache/rya/api/client/accumulo/AccumuloExecuteSparqlQueryIT.java
@@ -0,0 +1,144 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.rya.api.client.accumulo;
+
+import static org.junit.Assert.assertEquals;
+
+import java.nio.file.Paths;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.UUID;
+
+import org.apache.rya.api.RdfCloudTripleStoreConstants;
+import org.apache.rya.api.client.Install.InstallConfiguration;
+import org.apache.rya.api.client.RyaClient;
+import org.apache.rya.test.accumulo.AccumuloITBase;
+import org.eclipse.rdf4j.model.IRI;
+import org.eclipse.rdf4j.model.Resource;
+import org.eclipse.rdf4j.model.Statement;
+import org.eclipse.rdf4j.model.ValueFactory;
+import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
+import org.eclipse.rdf4j.query.BindingSet;
+import org.eclipse.rdf4j.query.TupleQueryResult;
+import org.eclipse.rdf4j.rio.RDFFormat;
+import org.junit.Test;
+
+import com.google.common.collect.Sets;
+
+/**
+ * Integration tests for the methods of {@link AccumuloExecuteSparqlQueryIT}.
+ */
+public class AccumuloExecuteSparqlQueryIT extends AccumuloITBase {
+
+ @Test
+ public void queryFindsAllLoadedStatements_fromSet() throws Exception {
+ // Using the Rya Client, install an instance of Rya for the test.
+ final AccumuloConnectionDetails connectionDetails = new AccumuloConnectionDetails(
+ getUsername(),
+ getPassword().toCharArray(),
+ getInstanceName(),
+ getZookeepers());
+
+ final RyaClient client = AccumuloRyaClientFactory.build(connectionDetails, super.getConnector());
+
+ final String ryaInstance = UUID.randomUUID().toString().replace('-', '_');
+ client.getInstall().install(ryaInstance, InstallConfiguration.builder().build());
+
+ // Load some data into the instance.
+ final ValueFactory vf = SimpleValueFactory.getInstance();
+ final Set<Statement> statements = Sets.newHashSet(
+ vf.createStatement(vf.createIRI("urn:Alice"), vf.createIRI("urn:talksTo"), vf.createIRI("urn:Bob")),
+ vf.createStatement(vf.createIRI("urn:Bob"), vf.createIRI("urn:talksTo"), vf.createIRI("urn:Alice")),
+ vf.createStatement(vf.createIRI("urn:Bob"), vf.createIRI("urn:talksTo"), vf.createIRI("urn:Charlie")),
+ vf.createStatement(vf.createIRI("urn:Charlie"), vf.createIRI("urn:talksTo"), vf.createIRI("urn:Alice")),
+ vf.createStatement(vf.createIRI("urn:David"), vf.createIRI("urn:talksTo"), vf.createIRI("urn:Eve")),
+ vf.createStatement(vf.createIRI("urn:Eve"), vf.createIRI("urn:listensTo"), vf.createIRI("urn:Bob")));
+ client.getLoadStatements().loadStatements(ryaInstance, statements);
+
+ // Execute a query.
+ final Set<Statement> fetched = new HashSet<>();
+ try(final TupleQueryResult result = client.getExecuteSparqlQuery().executeSparqlQuery(ryaInstance, "SELECT * WHERE { ?s ?p ?o }")) {
+ while(result.hasNext()) {
+ final BindingSet bs = result.next();
+
+ // If this is the statement that indicates the Rya version.
+ if(RdfCloudTripleStoreConstants.RTS_VERSION_PREDICATE.equals(bs.getBinding("p").getValue())) {
+ continue;
+ }
+
+ // Otherwise add it to the list of fetched statements.
+ fetched.add( vf.createStatement(
+ (Resource)bs.getBinding("s").getValue(),
+ (IRI)bs.getBinding("p").getValue(),
+ bs.getBinding("o").getValue()) );
+ }
+ }
+
+ // Show it resulted in the expected results.
+ assertEquals(statements, fetched);
+ }
+
+ @Test
+ public void queryFindsAllLoadedStatements_fromFile() throws Exception {
+ // Using the Rya Client, install an instance of Rya for the test.
+ final AccumuloConnectionDetails connectionDetails = new AccumuloConnectionDetails(
+ getUsername(),
+ getPassword().toCharArray(),
+ getInstanceName(),
+ getZookeepers());
+
+ final RyaClient client = AccumuloRyaClientFactory.build(connectionDetails, super.getConnector());
+
+ final String ryaInstance = UUID.randomUUID().toString().replace('-', '_');
+ client.getInstall().install(ryaInstance, InstallConfiguration.builder().build());
+
+ // Load some data into the instance from a file.
+ client.getLoadStatementsFile().loadStatements(ryaInstance, Paths.get("src/test/resources/test-statements.nt"), RDFFormat.NTRIPLES);
+
+ // Execute a query.
+ final ValueFactory vf = SimpleValueFactory.getInstance();
+ final Set<Statement> fetched = new HashSet<>();
+ try(final TupleQueryResult result = client.getExecuteSparqlQuery().executeSparqlQuery(ryaInstance, "SELECT * WHERE { ?s ?p ?o }")) {
+ while(result.hasNext()) {
+ final BindingSet bs = result.next();
+
+ // If this is the statement that indicates the Rya version
+ if(RdfCloudTripleStoreConstants.RTS_VERSION_PREDICATE.equals(bs.getBinding("p").getValue())) {
+ continue;
+ }
+
+ // Otherwise add it to the list of fetched statements.
+ fetched.add( vf.createStatement(
+ (Resource)bs.getBinding("s").getValue(),
+ (IRI)bs.getBinding("p").getValue(),
+ bs.getBinding("o").getValue()) );
+ }
+ }
+
+ // Show it resulted in the expected results.
+ final Set<Statement> expected = Sets.newHashSet(
+ vf.createStatement(vf.createIRI("urn:Alice"), vf.createIRI("urn:talksTo"), vf.createIRI("urn:Bob")),
+ vf.createStatement(vf.createIRI("urn:Bob"), vf.createIRI("urn:talksTo"), vf.createIRI("urn:Alice")),
+ vf.createStatement(vf.createIRI("urn:Bob"), vf.createIRI("urn:talksTo"), vf.createIRI("urn:Charlie")),
+ vf.createStatement(vf.createIRI("urn:Charlie"), vf.createIRI("urn:talksTo"), vf.createIRI("urn:Alice")),
+ vf.createStatement(vf.createIRI("urn:David"), vf.createIRI("urn:talksTo"), vf.createIRI("urn:Eve")),
+ vf.createStatement(vf.createIRI("urn:Eve"), vf.createIRI("urn:listensTo"), vf.createIRI("urn:Bob")));
+ assertEquals(expected, fetched);
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/ea91e26a/extras/indexing/src/test/resources/test-statements.nt
----------------------------------------------------------------------
diff --git a/extras/indexing/src/test/resources/test-statements.nt b/extras/indexing/src/test/resources/test-statements.nt
new file mode 100644
index 0000000..db0d51f
--- /dev/null
+++ b/extras/indexing/src/test/resources/test-statements.nt
@@ -0,0 +1,22 @@
+# 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.
+<urn:Alice> <urn:talksTo> <urn:Bob>.
+<urn:Bob> <urn:talksTo> <urn:Alice>.
+<urn:Bob> <urn:talksTo> <urn:Charlie>.
+<urn:Charlie> <urn:talksTo> <urn:Alice>.
+<urn:David> <urn:talksTo> <urn:Eve>.
+<urn:Eve> <urn:listensTo> <urn:Bob>.
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/ea91e26a/extras/shell/src/main/java/org/apache/rya/shell/RyaCommands.java
----------------------------------------------------------------------
diff --git a/extras/shell/src/main/java/org/apache/rya/shell/RyaCommands.java b/extras/shell/src/main/java/org/apache/rya/shell/RyaCommands.java
index c257860..5004be3 100644
--- a/extras/shell/src/main/java/org/apache/rya/shell/RyaCommands.java
+++ b/extras/shell/src/main/java/org/apache/rya/shell/RyaCommands.java
@@ -185,7 +185,7 @@ public class RyaCommands implements CommandMarker {
if(rezIter.hasNext()) {
consolePrinter.println("Query Results:");
final BindingSet bs = rezIter.next();
- for(final String name : rezIter.next().getBindingNames()) {
+ for(final String name : bs.getBindingNames()) {
bindings.add(name);
}
consolePrinter.println(Strings.join(bindings, ","));
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/ea91e26a/extras/shell/src/test/java/org/apache/rya/shell/AccumuloRyaCommandsIT.java
----------------------------------------------------------------------
diff --git a/extras/shell/src/test/java/org/apache/rya/shell/AccumuloRyaCommandsIT.java b/extras/shell/src/test/java/org/apache/rya/shell/AccumuloRyaCommandsIT.java
new file mode 100644
index 0000000..8036125
--- /dev/null
+++ b/extras/shell/src/test/java/org/apache/rya/shell/AccumuloRyaCommandsIT.java
@@ -0,0 +1,91 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.rya.shell;
+
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.when;
+
+import org.apache.accumulo.minicluster.MiniAccumuloCluster;
+import org.apache.rya.api.client.Install.InstallConfiguration;
+import org.apache.rya.shell.util.InstallPrompt;
+import org.apache.rya.shell.util.PasswordPrompt;
+import org.apache.rya.shell.util.SparqlPrompt;
+import org.junit.Test;
+import org.springframework.context.ApplicationContext;
+import org.springframework.shell.Bootstrap;
+import org.springframework.shell.core.CommandResult;
+import org.springframework.shell.core.JLineShellComponent;
+
+import com.google.common.base.Optional;
+
+/**
+ * Integration tests for the methods of {@link RyaCommands}.
+ */
+public class AccumuloRyaCommandsIT extends RyaShellAccumuloITBase {
+
+ @Test
+ public void loadsAndQueryData() throws Exception {
+ final MiniAccumuloCluster cluster = getCluster();
+ 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());
+
+ // Connect to the mini accumulo instance.
+ String cmd =
+ RyaConnectionCommands.CONNECT_ACCUMULO_CMD + " " +
+ "--username root " +
+ "--instanceName " + cluster.getInstanceName() + " "+
+ "--zookeepers " + cluster.getZooKeepers();
+ CommandResult result = shell.executeCommand(cmd);
+
+ // Install an instance of rya.
+ final String instanceName = "testInstance";
+ final InstallConfiguration installConf = InstallConfiguration.builder().build();
+
+ final InstallPrompt installPrompt = context.getBean( InstallPrompt.class );
+ when(installPrompt.promptInstanceName()).thenReturn("testInstance");
+ when(installPrompt.promptInstallConfiguration("testInstance")).thenReturn( installConf );
+ when(installPrompt.promptVerified(instanceName, installConf)).thenReturn(true);
+
+ result = shell.executeCommand( RyaAdminCommands.INSTALL_CMD );
+ assertTrue( result.isSuccess() );
+
+ // Connect to the instance that was just installed.
+ cmd = RyaConnectionCommands.CONNECT_INSTANCE_CMD + " --instance " + instanceName;
+ result = shell.executeCommand(cmd);
+ assertTrue( result.isSuccess() );
+
+ // Load a statements file into the instance.
+ cmd = RyaCommands.LOAD_DATA_CMD + " --file src/test/resources/test-statements.nt";
+ result = shell.executeCommand(cmd);
+ assertTrue( result.isSuccess() );
+
+ // Query for all of the statements that were loaded.
+ final SparqlPrompt sparqlPrompt = context.getBean(SparqlPrompt.class);
+ when(sparqlPrompt.getSparql()).thenReturn(Optional.of("select * where { ?s ?p ?o .}"));
+
+ cmd = RyaCommands.SPARQL_QUERY_CMD;
+ result = shell.executeCommand(cmd);
+ assertTrue( result.isSuccess() );
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-rya/blob/ea91e26a/extras/shell/src/test/resources/test-statements.nt
----------------------------------------------------------------------
diff --git a/extras/shell/src/test/resources/test-statements.nt b/extras/shell/src/test/resources/test-statements.nt
new file mode 100644
index 0000000..db0d51f
--- /dev/null
+++ b/extras/shell/src/test/resources/test-statements.nt
@@ -0,0 +1,22 @@
+# 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.
+<urn:Alice> <urn:talksTo> <urn:Bob>.
+<urn:Bob> <urn:talksTo> <urn:Alice>.
+<urn:Bob> <urn:talksTo> <urn:Charlie>.
+<urn:Charlie> <urn:talksTo> <urn:Alice>.
+<urn:David> <urn:talksTo> <urn:Eve>.
+<urn:Eve> <urn:listensTo> <urn:Bob>.
\ No newline at end of file