Repository: tinkerpop Updated Branches: refs/heads/TINKERPOP-1278 fde51ac58 -> 9a16f766d
added a gremlin process test to ensure that parallel translators don't interfere with one another. Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/9a16f766 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/9a16f766 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/9a16f766 Branch: refs/heads/TINKERPOP-1278 Commit: 9a16f766d0a45bffe7104101519dfd330fe97dca Parents: fde51ac Author: Marko A. Rodriguez <[email protected]> Authored: Tue Jun 14 13:27:54 2016 -0600 Committer: Marko A. Rodriguez <[email protected]> Committed: Tue Jun 14 13:27:54 2016 -0600 ---------------------------------------------------------------------- .../process/traversal/TraversalStrategies.java | 5 ++ .../gremlin/process/ProcessComputerSuite.java | 4 ++ .../gremlin/process/ProcessStandardSuite.java | 8 ++- .../TranslationStrategyProcessTest.java | 67 ++++++++++++++++++++ 4 files changed, 82 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a16f766/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java index 8eccc04..92e0f96 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java @@ -45,6 +45,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @@ -75,6 +76,10 @@ public interface TraversalStrategies extends Serializable, Cloneable { return (List<T>) toList().stream().filter(s -> traversalStrategyClass.isAssignableFrom(s.getClass())).collect(Collectors.toList()); } + public default <T extends TraversalStrategy> Optional<T> getStrategy(final Class<T> traversalStrategyClass) { + return (Optional) toList().stream().filter(s -> traversalStrategyClass.isAssignableFrom(s.getClass())).findAny(); + } + /** * Apply all the {@link TraversalStrategy} optimizers to the {@link Traversal} for the stated {@link TraversalEngine}. * This method must ensure that the strategies are sorted prior to application. http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a16f766/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java ---------------------------------------------------------------------- diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java index d8021eb..2c404b3 100644 --- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java +++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java @@ -86,6 +86,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SideEffect import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.StoreTest; import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SubgraphTest; import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.TreeTest; +import org.apache.tinkerpop.gremlin.process.traversal.strategy.creation.TranslationStrategyProcessTest; import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategyProcessTest; import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategyProcessTest; import org.apache.tinkerpop.gremlin.structure.Graph; @@ -192,6 +193,9 @@ public class ProcessComputerSuite extends AbstractGremlinSuite { BulkLoaderVertexProgramTest.class, BulkDumperVertexProgramTest.class, + // creations + TranslationStrategyProcessTest.class, + // decorations ReadOnlyStrategyProcessTest.class, SubgraphStrategyProcessTest.class http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a16f766/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java ---------------------------------------------------------------------- diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java index ccfb1ef..e21a1ca 100644 --- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java +++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessStandardSuite.java @@ -80,6 +80,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SideEffect import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.StoreTest; import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SubgraphTest; import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.TreeTest; +import org.apache.tinkerpop.gremlin.process.traversal.strategy.creation.TranslationStrategyProcessTest; import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.ElementIdStrategyProcessTest; import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.EventStrategyProcessTest; import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.PartitionStrategyProcessTest; @@ -106,7 +107,7 @@ public class ProcessStandardSuite extends AbstractGremlinSuite { */ private static final Class<?>[] allTests = new Class<?>[]{ // branch - BranchTest.Traversals.class, + /*BranchTest.Traversals.class, ChooseTest.Traversals.class, OptionalTest.Traversals.class, LocalTest.Traversals.class, @@ -174,7 +175,10 @@ public class ProcessStandardSuite extends AbstractGremlinSuite { // compliance CoreTraversalTest.class, - TraversalInterruptionTest.class, + TraversalInterruptionTest.class,*/ + + // creations + TranslationStrategyProcessTest.class, // decorations ElementIdStrategyProcessTest.class, http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/9a16f766/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategyProcessTest.java ---------------------------------------------------------------------- diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategyProcessTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategyProcessTest.java new file mode 100644 index 0000000..3234833 --- /dev/null +++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/creation/TranslationStrategyProcessTest.java @@ -0,0 +1,67 @@ +/* + * 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.tinkerpop.gremlin.process.traversal.strategy.creation; + +import org.apache.tinkerpop.gremlin.LoadGraphWith; +import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN; +import static org.junit.Assert.assertEquals; + +/** + * @author Marko A. Rodriguez (http://markorodriguez.com) + */ +public class TranslationStrategyProcessTest extends AbstractGremlinProcessTest { + private static final Logger logger = LoggerFactory.getLogger(TranslationStrategyProcessTest.class); + + @Test + @LoadGraphWith(MODERN) + public void shouldNotHaveAnonymousTraversalMixups() throws Exception { + if (!g.getStrategies().getStrategy(TranslationStrategy.class).isPresent()) { + logger.debug("No " + TranslationStrategy.class.getSimpleName() + " is registered and thus, skipping test."); + return; + } + + final GraphTraversalSource a = g; + final GraphTraversalSource b = g.withoutStrategies(TranslationStrategy.class); + + assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); + assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); + + assertEquals(6l, a.V().out().count().next().longValue()); + assertEquals(6l, b.V().out().count().next().longValue()); + + assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); + assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); + + assertEquals(2l, a.V().repeat(__.out()).times(2).count().next().longValue()); + assertEquals(2l, b.V().repeat(__.out()).times(2).count().next().longValue()); + + assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); + assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); + + } + +}
