TINKERPOP-1784 Add support for the various toy graphs
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/12c178e3 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/12c178e3 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/12c178e3 Branch: refs/heads/TINKERPOP-1784 Commit: 12c178e3d9e7a703cff0aeb5a5ebd4c8f450bd98 Parents: cb73ec0 Author: Stephen Mallette <sp...@genoprime.com> Authored: Fri Sep 29 10:29:38 2017 -0400 Committer: Stephen Mallette <sp...@genoprime.com> Committed: Thu Nov 2 13:37:22 2017 -0400 ---------------------------------------------------------------------- gremlin-python/pom.xml | 6 ++- .../src/main/jython/radish/feature_steps.py | 2 +- .../src/main/jython/radish/terrain.py | 39 +++++++++++++------ .../remote/gremlin-server-integration.yaml | 7 +--- .../server/gremlin-server-integration.yaml | 7 +--- .../server/gremlin-server-performance.yaml | 7 +--- .../src/test/scripts/generate-all.groovy | 40 ++++++++++++++++++++ .../src/test/scripts/test-server-start.groovy | 24 ++++++++++-- .../test/scripts/tinkergraph-empty.properties | 20 ++++++++++ 9 files changed, 117 insertions(+), 35 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12c178e3/gremlin-python/pom.xml ---------------------------------------------------------------------- diff --git a/gremlin-python/pom.xml b/gremlin-python/pom.xml index eb91dbf..c6df1f0 100644 --- a/gremlin-python/pom.xml +++ b/gremlin-python/pom.xml @@ -523,12 +523,16 @@ limitations under the License. <value>${skipTests}</value> </property> <property> + <name>python</name> + <value>true</value> + </property> + <property> <name>gremlinServerDir</name> <value>${gremlin.server.dir}</value> </property> <property> <name>settingsFile</name> - <value>${gremlin.server.dir}/conf/gremlin-server-modern-py.yaml</value> + <value>${gremlin.server.dir}/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml</value> </property> <property> <name>executionName</name> http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12c178e3/gremlin-python/src/main/jython/radish/feature_steps.py ---------------------------------------------------------------------- diff --git a/gremlin-python/src/main/jython/radish/feature_steps.py b/gremlin-python/src/main/jython/radish/feature_steps.py index e3b82c3..a298d6c 100644 --- a/gremlin-python/src/main/jython/radish/feature_steps.py +++ b/gremlin-python/src/main/jython/radish/feature_steps.py @@ -40,7 +40,7 @@ def add_parameter(step, param_name, param): if not hasattr(step.context, "traversal_params"): step.context.traversal_params = {} - step.context.traversal_params[param_name.encode('utf-8')] = __convert(param, step.context) + step.context.traversal_params[param_name] = __convert(param, step.context) @given("the traversal of") http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12c178e3/gremlin-python/src/main/jython/radish/terrain.py ---------------------------------------------------------------------- diff --git a/gremlin-python/src/main/jython/radish/terrain.py b/gremlin-python/src/main/jython/radish/terrain.py index 303f64d..e88272b 100644 --- a/gremlin-python/src/main/jython/radish/terrain.py +++ b/gremlin-python/src/main/jython/radish/terrain.py @@ -32,20 +32,42 @@ tail = __.tail @before.each_scenario def prepare_traversal_source(scenario): - remote = DriverRemoteConnection('ws://localhost:45940/gremlin', 'g') - scenario.context.remote_conn = {"modern": remote} + scenario.context.remote_conn = {} + scenario.context.lookup_v = {} + scenario.context.lookup_e = {} + + __prepare(scenario, "modern", "gmodern") + __prepare(scenario, "classic", "gclassic") + __prepare(scenario, "crew", "gcrew") + + remote = DriverRemoteConnection('ws://localhost:45940/gremlin', "ggraph") + scenario.context.remote_conn["empty"] = remote + g = Graph().traversal().withRemote(remote) + g.V().drop().iterate() + + +@after.each_scenario +def close_traversal_source(scenario): + scenario.context.remote_conn["modern"].close() + scenario.context.remote_conn["classic"].close() + scenario.context.remote_conn["crew"].close() + + +def __prepare(scenario, graph_name, server_graph_name): + remote = DriverRemoteConnection('ws://localhost:45940/gremlin', server_graph_name) + scenario.context.remote_conn[graph_name] = remote g = Graph().traversal().withRemote(remote) # hold a map of name/vertex for use in asserting results - scenario.context.lookup_v = {"modern": g.V().group().by('name').by(tail()).next()} + scenario.context.lookup_v[graph_name] = g.V().group().by('name').by(tail()).next() # hold a map of the "name"/edge for use in asserting results - "name" in this context is in the form of # outgoingV-label->incomingV - projection_of_edges = g.E().group().\ + projection_of_edges = g.E().group(). \ by(project("o", "l", "i"). by(outV().values("name")). by(label()). - by(inV().values("name"))).\ + by(inV().values("name"))). \ by(tail()).next() edges = {} @@ -57,9 +79,4 @@ def prepare_traversal_source(scenario): i = re.search("i=(.+?)[,\}]", key).group(1) edges[o + "-" + l + "->" + i] = value - scenario.context.lookup_e = {"modern": edges} - - -@after.each_scenario -def close_traversal_source(scenario): - scenario.context.remote_conn["modern"].close() + scenario.context.lookup_e[graph_name] = edges http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12c178e3/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml ---------------------------------------------------------------------- diff --git a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml index 96db32f..d1e7ba6 100644 --- a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml +++ b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/driver/remote/gremlin-server-integration.yaml @@ -41,12 +41,7 @@ serializers: processors: - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }} metrics: { - consoleReporter: {enabled: true, interval: 180000}, - csvReporter: {enabled: true, interval: 180000, fileName: /tmp/gremlin-server-metrics.csv}, - jmxReporter: {enabled: true}, - slf4jReporter: {enabled: true, interval: 180000}, - gangliaReporter: {enabled: false, interval: 180000, addressingMode: MULTICAST}, - graphiteReporter: {enabled: false, interval: 180000}} + slf4jReporter: {enabled: true, interval: 180000}} strictTransactionManagement: false maxInitialLineLength: 4096 maxHeaderSize: 8192 http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12c178e3/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml ---------------------------------------------------------------------- diff --git a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml index 18ac22e..f80c38a 100644 --- a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml +++ b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-integration.yaml @@ -37,12 +37,7 @@ serializers: processors: - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }} metrics: { - consoleReporter: {enabled: true, interval: 180000}, - csvReporter: {enabled: true, interval: 180000, fileName: /tmp/gremlin-server-metrics.csv}, - jmxReporter: {enabled: true}, - slf4jReporter: {enabled: true, interval: 180000}, - gangliaReporter: {enabled: false, interval: 180000, addressingMode: MULTICAST}, - graphiteReporter: {enabled: false, interval: 180000}} + slf4jReporter: {enabled: true, interval: 180000}} strictTransactionManagement: false maxInitialLineLength: 4096 maxHeaderSize: 8192 http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12c178e3/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-performance.yaml ---------------------------------------------------------------------- diff --git a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-performance.yaml b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-performance.yaml index 330a643..d30635d 100644 --- a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-performance.yaml +++ b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/gremlin-server-performance.yaml @@ -34,12 +34,7 @@ serializers: processors: - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }} metrics: { - consoleReporter: {enabled: true, interval: 180000}, - csvReporter: {enabled: true, interval: 180000, fileName: /tmp/gremlin-server-metrics.csv}, - jmxReporter: {enabled: true}, - slf4jReporter: {enabled: true, interval: 180000}, - gangliaReporter: {enabled: false, interval: 180000, addressingMode: MULTICAST}, - graphiteReporter: {enabled: false, interval: 180000}} + slf4jReporter: {enabled: true, interval: 180000}} strictTransactionManagement: false maxInitialLineLength: 4096 maxHeaderSize: 8192 http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12c178e3/gremlin-server/src/test/scripts/generate-all.groovy ---------------------------------------------------------------------- diff --git a/gremlin-server/src/test/scripts/generate-all.groovy b/gremlin-server/src/test/scripts/generate-all.groovy new file mode 100644 index 0000000..b6be405 --- /dev/null +++ b/gremlin-server/src/test/scripts/generate-all.groovy @@ -0,0 +1,40 @@ +/* + * 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. + */ + +// an init script that returns a Map allows explicit setting of global bindings. +def globals = [:] + +// Generates the modern graph into an "empty" TinkerGraph via LifeCycleHook. +// Note that the name of the key in the "global" map is unimportant. +globals << [hook : [ + onStartUp: { ctx -> + TinkerFactory.generateClassic(classic) + TinkerFactory.generateModern(modern) + TinkerFactory.generateTheCrew(crew) + grateful.io(gryo()).readGraph('data/grateful-dead.kryo') + } +] as LifeCycleHook] + +// add default TraversalSource instances for each graph instance +globals << [gclassic : classic.traversal()] +globals << [gmodern : modern.traversal()] +globals << [gcrew : crew.traversal()] +globals << [ggraph : graph.traversal()] +globals << [g : modern.traversal()] +globals << [ggrateful : grateful.traversal()] \ No newline at end of file http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12c178e3/gremlin-server/src/test/scripts/test-server-start.groovy ---------------------------------------------------------------------- diff --git a/gremlin-server/src/test/scripts/test-server-start.groovy b/gremlin-server/src/test/scripts/test-server-start.groovy index 8ea08a9..d793d26 100644 --- a/gremlin-server/src/test/scripts/test-server-start.groovy +++ b/gremlin-server/src/test/scripts/test-server-start.groovy @@ -25,8 +25,16 @@ if (Boolean.parseBoolean(skipTests)) return log.info("Starting Gremlin Server instances for native testing of ${executionName}") def settings = Settings.read("${settingsFile}") -settings.graphs.graph = gremlinServerDir + "/conf/tinkergraph-empty.properties" -settings.scriptEngines["gremlin-groovy"].scripts = [gremlinServerDir + "/scripts/generate-modern.groovy"] +settings.graphs.graph = gremlinServerDir + "/src/test/scripts/tinkergraph-empty.properties" +settings.graphs.classic = gremlinServerDir + "/src/test/scripts/tinkergraph-empty.properties" +settings.graphs.modern = gremlinServerDir + "/src/test/scripts/tinkergraph-empty.properties" +settings.graphs.crew = gremlinServerDir + "/src/test/scripts/tinkergraph-empty.properties" +settings.graphs.grateful = gremlinServerDir + "/src/test/scripts/tinkergraph-empty.properties" +settings.scriptEngines["gremlin-groovy"].scripts = [gremlinServerDir + "/src/test/scripts/generate-all.groovy"] +if (Boolean.parseBoolean(python)) { + settings.scriptEngines["gremlin-python"] = new Settings.ScriptEngineSettings() + settings.scriptEngines["gremlin-jython"] = new Settings.ScriptEngineSettings() +} settings.port = 45940 def server = new GremlinServer(settings) @@ -36,8 +44,16 @@ project.setContextValue("gremlin.server", server) log.info("Gremlin Server with no authentication started on port 45940") def settingsSecure = Settings.read("${settingsFile}") -settingsSecure.graphs.graph = gremlinServerDir + "/conf/tinkergraph-empty.properties" -settingsSecure.scriptEngines["gremlin-groovy"].scripts = [gremlinServerDir + "/scripts/generate-modern.groovy"] +settings.graphs.graph = gremlinServerDir + "/src/test/scripts/tinkergraph-empty.properties" +settings.graphs.classic = gremlinServerDir + "/src/test/scripts/tinkergraph-empty.properties" +settings.graphs.modern = gremlinServerDir + "/src/test/scripts/tinkergraph-empty.properties" +settings.graphs.crew = gremlinServerDir + "/src/test/scripts/tinkergraph-empty.properties" +settings.graphs.grateful = gremlinServerDir + "/src/test/scripts/tinkergraph-empty.properties" +settingsSecure.scriptEngines["gremlin-groovy"].scripts = [gremlinServerDir + "/src/test/scripts/generate-all.groovy"] +if (Boolean.parseBoolean(python)) { + settingsSecure.scriptEngines["gremlin-python"] = new Settings.ScriptEngineSettings() + settingsSecure.scriptEngines["gremlin-jython"] = new Settings.ScriptEngineSettings() +} settingsSecure.port = 45941 settingsSecure.authentication.className = SimpleAuthenticator.class.name settingsSecure.authentication.config = [credentialsDb: gremlinServerDir + "/conf/tinkergraph-credentials.properties", credentialsDbLocation: gremlinServerDir + "/data/credentials.kryo"] http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/12c178e3/gremlin-server/src/test/scripts/tinkergraph-empty.properties ---------------------------------------------------------------------- diff --git a/gremlin-server/src/test/scripts/tinkergraph-empty.properties b/gremlin-server/src/test/scripts/tinkergraph-empty.properties new file mode 100644 index 0000000..211b9e4 --- /dev/null +++ b/gremlin-server/src/test/scripts/tinkergraph-empty.properties @@ -0,0 +1,20 @@ +# 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. +gremlin.graph=org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph +gremlin.tinkergraph.vertexIdManager=INTEGER +gremlin.tinkergraph.edgeIdManager=INTEGER +gremlin.tinkergraph.vertexPropertyIdManager=INTEGER \ No newline at end of file