From 5978b36fbad103e41f4c3526d317b570b7d2e7ae Mon Sep 17 00:00:00 2001 From: Jeffrey Phillips Freeman <jeffrey.freeman@syncleus.com> Date: Fri, 14 Nov 2014 07:56:36 -0500 Subject: [PATCH] Added unit tests to check that the AbdstractPrioritySerialTrigger properly orders the edges when executing. Change-Id: Ifa0cd1579875a1a81a8d975374d4d2d7ecf87043 --- .../AbstractPrioritySerialTriggerTest.java | 66 +++++++++++++++++++ .../action/AbstractSimpleActionNode.java | 24 +++++++ .../grail/graph/action/SimpleActionNode.java | 16 +++++ 3 files changed, 106 insertions(+) diff --git a/src/test/java/com/syncleus/grail/graph/action/AbstractPrioritySerialTriggerTest.java b/src/test/java/com/syncleus/grail/graph/action/AbstractPrioritySerialTriggerTest.java index 0f01848..f6901f4 100644 --- a/src/test/java/com/syncleus/grail/graph/action/AbstractPrioritySerialTriggerTest.java +++ b/src/test/java/com/syncleus/grail/graph/action/AbstractPrioritySerialTriggerTest.java @@ -52,6 +52,72 @@ public class AbstractPrioritySerialTriggerTest { Assert.assertTrue(actionNode.isDone()); } + @Test + public void testDoesTriggerInOrder() { + final FramedTransactionalGraph<?> graph = FACTORY.create(new MockTransactionalTinkerGraph()); + + final List<String> triggerOrder = new ArrayList<String>(2); + + // construct graph + final SimpleActionNode firstActionNode = (SimpleActionNode) graph.addVertex(null, SimpleActionNode.class); + firstActionNode.setTriggerOrder(triggerOrder); + final SimpleActionNode secondActionNode = (SimpleActionNode) graph.addVertex(null, SimpleActionNode.class); + secondActionNode.setTriggerOrder(triggerOrder); + final PrioritySerialTrigger trigger = (PrioritySerialTrigger) graph.addVertex(null, PrioritySerialTrigger.class); + final PrioritySerialTriggerEdge firstTriggerEdge = (PrioritySerialTriggerEdge) graph.addEdge(null, trigger.asVertex(), firstActionNode.asVertex(), "triggers", PrioritySerialTriggerEdge.class); + firstTriggerEdge.setTriggerAction("first"); + firstTriggerEdge.setTriggerPriority(1000); + final PrioritySerialTriggerEdge secondTriggerEdge = (PrioritySerialTriggerEdge) graph.addEdge(null, trigger.asVertex(), secondActionNode.asVertex(), "triggers", PrioritySerialTriggerEdge.class); + secondTriggerEdge.setTriggerAction("second"); + secondTriggerEdge.setTriggerPriority(0); + + Assert.assertTrue(triggerOrder.isEmpty()); + + //process the weight + trigger.trigger(); + + //make sure we clear out the action node since the attribute is static. + firstActionNode.setTriggerOrder(null); + secondActionNode.setTriggerOrder(null); + + Assert.assertTrue(triggerOrder.size() == 2); + Assert.assertTrue(triggerOrder.get(0).equals("first")); + Assert.assertTrue(triggerOrder.get(1).equals("second")); + } + + @Test + public void testDoesTriggerInOrderReversed() { + final FramedTransactionalGraph<?> graph = FACTORY.create(new MockTransactionalTinkerGraph()); + + final List<String> triggerOrder = new ArrayList<String>(2); + + // construct graph + final SimpleActionNode firstActionNode = (SimpleActionNode) graph.addVertex(null, SimpleActionNode.class); + firstActionNode.setTriggerOrder(triggerOrder); + final SimpleActionNode secondActionNode = (SimpleActionNode) graph.addVertex(null, SimpleActionNode.class); + secondActionNode.setTriggerOrder(triggerOrder); + final PrioritySerialTrigger trigger = (PrioritySerialTrigger) graph.addVertex(null, PrioritySerialTrigger.class); + final PrioritySerialTriggerEdge secondTriggerEdge = (PrioritySerialTriggerEdge) graph.addEdge(null, trigger.asVertex(), secondActionNode.asVertex(), "triggers", PrioritySerialTriggerEdge.class); + secondTriggerEdge.setTriggerAction("second"); + secondTriggerEdge.setTriggerPriority(0); + final PrioritySerialTriggerEdge firstTriggerEdge = (PrioritySerialTriggerEdge) graph.addEdge(null, trigger.asVertex(), firstActionNode.asVertex(), "triggers", PrioritySerialTriggerEdge.class); + firstTriggerEdge.setTriggerAction("first"); + firstTriggerEdge.setTriggerPriority(1000); + + Assert.assertTrue(triggerOrder.isEmpty()); + + //process the weight + trigger.trigger(); + + //make sure we clear out the action node since the attribute is static. + firstActionNode.setTriggerOrder(null); + secondActionNode.setTriggerOrder(null); + + Assert.assertTrue(triggerOrder.size() == 2); + Assert.assertTrue(triggerOrder.get(0).equals("first")); + Assert.assertTrue(triggerOrder.get(1).equals("second")); + } + @Test(expected = UndeclaredThrowableException.class ) public void testBadArguments() { final FramedTransactionalGraph<?> graph = FACTORY.create(new MockTransactionalTinkerGraph()); diff --git a/src/test/java/com/syncleus/grail/graph/action/AbstractSimpleActionNode.java b/src/test/java/com/syncleus/grail/graph/action/AbstractSimpleActionNode.java index 33a666f..7677ade 100644 --- a/src/test/java/com/syncleus/grail/graph/action/AbstractSimpleActionNode.java +++ b/src/test/java/com/syncleus/grail/graph/action/AbstractSimpleActionNode.java @@ -20,9 +20,33 @@ package com.syncleus.grail.graph.action; import com.tinkerpop.frames.modules.javahandler.JavaHandlerContext; +import java.util.List; + public abstract class AbstractSimpleActionNode implements SimpleActionNode, JavaHandlerContext { + private static List<String> triggerOrder; + + @Override + public void setTriggerOrder(final List<String> triggerOrder) { + this.triggerOrder = triggerOrder; + } + + @Override + public List<String> getTriggerOrder() { + return this.triggerOrder; + } + @Override public void doSomething() { this.setDone(true); } + + @Override + public void doSomethingFirst() { + this.triggerOrder.add("first"); + } + + @Override + public void doSomethingSecond() { + this.triggerOrder.add("second"); + } } diff --git a/src/test/java/com/syncleus/grail/graph/action/SimpleActionNode.java b/src/test/java/com/syncleus/grail/graph/action/SimpleActionNode.java index 4c0e96a..766eba9 100644 --- a/src/test/java/com/syncleus/grail/graph/action/SimpleActionNode.java +++ b/src/test/java/com/syncleus/grail/graph/action/SimpleActionNode.java @@ -23,6 +23,8 @@ import com.tinkerpop.frames.*; import com.tinkerpop.frames.modules.javahandler.*; import com.tinkerpop.frames.modules.typedgraph.*; +import java.util.List; + @TypeValue("SimpleActionNode") @JavaHandlerClass(AbstractSimpleActionNode.class) public interface SimpleActionNode extends Node { @@ -32,7 +34,21 @@ public interface SimpleActionNode extends Node { @Property("isDone") void setDone(boolean isDone); + @JavaHandler + void setTriggerOrder(List<String> triggerOrder); + + @JavaHandler + List<String> getTriggerOrder(); + @JavaHandler @Action("action") void doSomething(); + + @JavaHandler + @Action("first") + void doSomethingFirst(); + + @JavaHandler + @Action("second") + void doSomethingSecond(); } -- GitLab