Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 2FC5C200BA3 for ; Thu, 6 Oct 2016 00:00:48 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 2E62D160ADE; Wed, 5 Oct 2016 22:00:48 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 460E3160AEA for ; Thu, 6 Oct 2016 00:00:47 +0200 (CEST) Received: (qmail 55492 invoked by uid 500); 5 Oct 2016 22:00:46 -0000 Mailing-List: contact commits-help@tinkerpop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@tinkerpop.apache.org Delivered-To: mailing list commits@tinkerpop.apache.org Received: (qmail 55457 invoked by uid 99); 5 Oct 2016 22:00:46 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 05 Oct 2016 22:00:46 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id AF1E8E0209; Wed, 5 Oct 2016 22:00:45 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: davebshow@apache.org To: commits@tinkerpop.apache.org Date: Wed, 05 Oct 2016 22:00:45 -0000 Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: [1/3] tinkerpop git commit: added integration tests for DriverRemoteTraversalSideEffects methods archived-at: Wed, 05 Oct 2016 22:00:48 -0000 Repository: tinkerpop Updated Branches: refs/heads/TINKERPOP-1458 d60def3d4 -> f3baae8ba added integration tests for DriverRemoteTraversalSideEffects methods Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/790aa060 Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/790aa060 Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/790aa060 Branch: refs/heads/TINKERPOP-1458 Commit: 790aa060ce828b8d76f90b06f59e770431e7b732 Parents: d60def3 Author: davebshow Authored: Wed Oct 5 15:01:59 2016 -0400 Committer: davebshow Committed: Wed Oct 5 15:01:59 2016 -0400 ---------------------------------------------------------------------- .../server/GremlinServerIntegrateTest.java | 79 ++++++++++++++++++-- 1 file changed, 73 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/790aa060/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java ---------------------------------------------------------------------- diff --git a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java index e6e0021..61bf994 100644 --- a/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java +++ b/gremlin-server/src/test/java/org/apache/tinkerpop/gremlin/server/GremlinServerIntegrateTest.java @@ -38,6 +38,7 @@ import org.apache.tinkerpop.gremlin.driver.message.RequestMessage; import org.apache.tinkerpop.gremlin.driver.message.ResponseMessage; import org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode; import org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection; +import org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteTraversalSideEffects; import org.apache.tinkerpop.gremlin.driver.ser.Serializers; import org.apache.tinkerpop.gremlin.driver.simple.NioClient; import org.apache.tinkerpop.gremlin.driver.simple.SimpleClient; @@ -55,6 +56,7 @@ import org.apache.tinkerpop.gremlin.structure.Graph; import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.server.channel.NioChannelizer; import org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor; +import org.apache.tinkerpop.gremlin.structure.util.Host; import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex; import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph; import org.apache.tinkerpop.gremlin.util.Log4jRecordingAppender; @@ -64,6 +66,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; +import java.lang.reflect.Field; import java.nio.channels.ClosedChannelException; import java.util.ArrayList; import java.util.Collections; @@ -71,6 +74,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; @@ -104,7 +108,6 @@ import static org.junit.Assert.assertEquals; public class GremlinServerIntegrateTest extends AbstractGremlinServerIntegrationTest { private Log4jRecordingAppender recordingAppender = null; - private final Supplier graphGetter = () -> server.getServerGremlinExecutor().getGraphManager().getGraphs().get("graph"); private final Configuration conf = new BaseConfiguration() {{ setProperty(Graph.GRAPH, RemoteGraph.class.getName()); @@ -833,16 +836,80 @@ public class GremlinServerIntegrateTest extends AbstractGremlinServerIntegration } @Test - public void shouldCloseLocalSideEffects() throws Exception { + public void shouldGetSideEffectKeysUsingWithRemote() throws Exception { final Graph graph = EmptyGraph.instance(); final GraphTraversalSource g = graph.traversal().withRemote(conf); g.addV("person").property("age", 20).iterate(); g.addV("person").property("age", 10).iterate(); final GraphTraversal traversal = g.V().aggregate("a").aggregate("b"); traversal.iterate(); - final List sideEffects = traversal.asAdmin().getSideEffects().get("a"); - assertFalse(sideEffects.isEmpty()); - traversal.asAdmin().getSideEffects().close(); - assertNull(traversal.asAdmin().getSideEffects().get("b")); + final DriverRemoteTraversalSideEffects se = (DriverRemoteTraversalSideEffects) traversal.asAdmin().getSideEffects(); + + // Get keys + final Set sideEffectKeys = se.keys(); + assertEquals(2, sideEffectKeys.size()); + + // Get side effects + final List aSideEffects = se.get("a"); + assertThat(aSideEffects.isEmpty(), is(false)); + final List bSideEffects = se.get("b"); + assertThat(bSideEffects.isEmpty(), is(false)); + + // Should get local keys/side effects after close + se.close(); + + final Set localSideEffectKeys = se.keys(); + assertEquals(2, localSideEffectKeys.size()); + + final List localASideEffects = se.get("a"); + assertThat(localASideEffects.isEmpty(), is(false)); + + final List localBSideEffects = se.get("b"); + assertThat(localBSideEffects.isEmpty(), is(false)); + } + + @Test + public void shouldCloseSideEffectsUsingWithRemote() throws Exception { + final Graph graph = EmptyGraph.instance(); + final GraphTraversalSource g = graph.traversal().withRemote(conf); + g.addV("person").property("age", 20).iterate(); + g.addV("person").property("age", 10).iterate(); + final GraphTraversal traversal = g.V().aggregate("a").aggregate("b"); + traversal.iterate(); + final DriverRemoteTraversalSideEffects se = (DriverRemoteTraversalSideEffects) traversal.asAdmin().getSideEffects(); + final List sideEffects = se.get("a"); + assertThat(sideEffects.isEmpty(), is(false)); + se.close(); + + // Can't get new side effects after close + assertNull(se.get("b")); + + // Earlier keys should be cached locally + final Set localSideEffectKeys = se.keys(); + assertEquals(1, localSideEffectKeys.size()); + final List localSideEffects = se.get("a"); + assertThat(localSideEffects.isEmpty(), is(false)); + + // Try to get side effect from server + final Cluster cluster = Cluster.build("localhost").create(); + final Client client = cluster.connect(); + Field field = DriverRemoteTraversalSideEffects.class.getDeclaredField("serverSideEffect"); + field.setAccessible(true); + UUID serverSideEffectId = (UUID) field.get(se); + final RequestMessage msg = RequestMessage.build(Tokens.OPS_GATHER) + .addArg(Tokens.ARGS_SIDE_EFFECT, serverSideEffectId) + .addArg(Tokens.ARGS_SIDE_EFFECT_KEY, "b") + .processor("traversal").create(); + boolean error; + try { + client.submitAsync(msg).get(); + error = false; + } catch (Exception ex) { + error = true; + } + assertThat(error, is(true)); } } + + +