package ee.telekom.workflow.graph.node.activity; import org.junit.Assert; import org.junit.Test; import ee.telekom.workflow.graph.AbstractGraphTest; import ee.telekom.workflow.graph.Environment; import ee.telekom.workflow.graph.Graph; import ee.telekom.workflow.graph.GraphEngine; import ee.telekom.workflow.graph.GraphFactory; import ee.telekom.workflow.graph.GraphInstance; import ee.telekom.workflow.graph.GraphWorkItem; import ee.telekom.workflow.graph.RecordEventsListener; import ee.telekom.workflow.graph.RecordPathScript; import ee.telekom.workflow.graph.SimpleCounter; import ee.telekom.workflow.graph.Token; import ee.telekom.workflow.graph.WorkItemStatus; import ee.telekom.workflow.graph.core.EnvironmentImpl; import ee.telekom.workflow.graph.node.expression.SimpleMethodCallExpression; import ee.telekom.workflow.graph.node.input.ConstantMapping; import ee.telekom.workflow.graph.node.input.InputMapping; import ee.telekom.workflow.graph.node.output.OutputMapping; import ee.telekom.workflow.graph.node.output.ValueMapping; public class BeanAsyncCallActivityTest extends AbstractGraphTest{ @Test public void test_inc(){ SimpleCounter dummyBean = new SimpleCounter(); String bean = "dummy"; String method = "inc"; Graph graph = GraphFactory.INSTANCE.beanasynccall_one_pre_post_special( bean, method, null, null ); EnvironmentImpl expectedEnv = createSingletonEnvironment( RecordPathScript.ATTRIBUTE, "1,3" ); assertTaskExecution( graph, null, expectedEnv, dummyBean, bean, method, null ); Assert.assertEquals( 1, dummyBean.get() ); } @Test public void test_incByDelta(){ SimpleCounter dummyBean = new SimpleCounter(); String bean = "dummy"; String method = "incByDelta"; InputMapping<Integer> delta = ConstantMapping.of( 5 ); Graph graph = GraphFactory.INSTANCE.beanasynccall_one_pre_post_special( bean, method, new InputMapping<?>[]{delta}, null ); EnvironmentImpl expectedEnv = createSingletonEnvironment( RecordPathScript.ATTRIBUTE, "1,3" ); assertTaskExecution( graph, null, expectedEnv, dummyBean, bean, method, new Object[]{5} ); Assert.assertEquals( 5, dummyBean.get() ); } @Test public void test_get(){ SimpleCounter dummyBean = new SimpleCounter(); String bean = "dummy"; String method = "get"; OutputMapping resultMapping = new ValueMapping( "result" ); Graph graph = GraphFactory.INSTANCE.beanasynccall_one_pre_post_special( bean, method, null, resultMapping ); EnvironmentImpl expectedEnv = createSingletonEnvironment( RecordPathScript.ATTRIBUTE, "1,3" ); expectedEnv.setAttribute( "result", 0 ); assertTaskExecution( graph, null, expectedEnv, dummyBean, bean, method, null ); Assert.assertEquals( 0, dummyBean.get() ); } @Test public void test_incAndGet(){ SimpleCounter dummyBean = new SimpleCounter(); String bean = "dummy"; String method = "incAndGet"; OutputMapping resultMapping = new ValueMapping( "result" ); Graph graph = GraphFactory.INSTANCE.beanasynccall_one_pre_post_special( bean, method, null, resultMapping ); EnvironmentImpl expectedEnv = createSingletonEnvironment( RecordPathScript.ATTRIBUTE, "1,3" ); expectedEnv.setAttribute( "result", 1 ); assertTaskExecution( graph, null, expectedEnv, dummyBean, bean, method, null ); Assert.assertEquals( 1, dummyBean.get() ); } @Test public void test_incByDeltaAndGet(){ SimpleCounter dummyBean = new SimpleCounter(); String bean = "dummy"; String method = "incByDeltaAndGet"; OutputMapping resultMapping = new ValueMapping( "result" ); InputMapping<Integer> delta = ConstantMapping.of( 5 ); Graph graph = GraphFactory.INSTANCE.beanasynccall_one_pre_post_special( bean, method, new InputMapping<?>[]{delta}, resultMapping ); EnvironmentImpl expectedEnv = createSingletonEnvironment( RecordPathScript.ATTRIBUTE, "1,3" ); expectedEnv.setAttribute( "result", 5 ); assertTaskExecution( graph, null, expectedEnv, dummyBean, bean, method, new Object[]{5} ); Assert.assertEquals( 5, dummyBean.get() ); } private void assertTaskExecution( Graph graph, Environment initialEnv, Environment expectedEnv, Object dummyBean, String bean, String method, Object[] arguments ){ RecordEventsListener listener = new RecordEventsListener(); GraphEngine engine = createEngine( listener ); GraphInstance instance = engine.start( graph, initialEnv ); assertActiveTokens( instance, 1 ); assertActiveWorkItems( instance, 1 ); Token token = getTokenById( instance.getTokens(), 1 ); assertAwaitingTask( token, bean, method, arguments ); GraphWorkItem wi = token.getInstance().getActiveWorkItem( token ); executeTask( wi, dummyBean ); engine.complete( wi ); assertActiveTokens( instance, 0 ); assertActiveWorkItems( instance, 0 ); assertEnvironmnent( instance, expectedEnv ); Assert.assertEquals( EVENTS_1WI, listener.getEvents() ); } private void assertAwaitingTask( Token token, String bean, String method, Object[] arguments ){ Assert.assertTrue( token.isActive() ); Assert.assertTrue( token.getNode() instanceof BeanAsyncCallActivity ); GraphWorkItem wi = token.getInstance().getActiveWorkItem( token ); Assert.assertEquals( bean, wi.getBean() ); Assert.assertEquals( method, wi.getMethod() ); Assert.assertArrayEquals( arguments, wi.getTaskArguments() ); Assert.assertEquals( WorkItemStatus.NEW, wi.getStatus() ); } private void executeTask( GraphWorkItem wi, Object dummyBean ){ SimpleMethodCallExpression<Object> expression = new SimpleMethodCallExpression<Object>( dummyBean, wi.getMethod() ); Object result = expression.execute( wi.getTaskArguments() ); wi.setResult( result ); } }