1
2
3
4
5
6
7
8
9
10 package net.kwfgrid.gworkflowdl;
11
12 import junit.framework.Assert;
13 import junit.framework.Test;
14 import junit.framework.TestSuite;
15 import net.kwfgrid.gworkflowdl.structure.*;
16 import org.jdom.Element;
17 import org.jdom.JDOMException;
18 import org.apache.log4j.Logger;
19
20 import java.io.IOException;
21
22
23 public final class WorkflowTest extends AbstractTestCase {
24
25 /***
26 * log4j logger
27 */
28 static Logger logger = Logger.getLogger(WorkflowTest.class);
29
30
31 /***
32 * Create the test case.
33 *
34 * @param testName name of the test case
35 */
36 public WorkflowTest(String testName) {
37 super(testName);
38 System.setProperty("gworkflowdl.xml.validation","true");
39 }
40
41 /***
42 * @return the suite of tests being tested
43 */
44 public static Test suite() {
45 return new TestSuite(WorkflowTest.class);
46 }
47
48
49 public void testWorkflow() throws WorkflowFormatException {
50 Place p0 = PlaceTest.exampleWithDataTokens("p0", 0);
51 Place p1 = PlaceTest.exampleWithDataTokens("p1", 1);
52 p1.getTokens()[0].getProperties().put("propertyName1","propertyValue1");
53 Place p2 = PlaceTest.exampleWithDataTokens("p2", 2);
54 Place p3 = PlaceTest.exampleWithDataTokens("p3", 3);
55 Place p4 = PlaceTest.exampleWithDataTokens("p4", 4);
56 Place p5 = PlaceTest.exampleWithDataTokens("p5", 1);
57
58 Place[] read0 = {p4};
59 Place[] in0 = {p0};
60 Place[] write0 = {p5};
61 Place[] out0 = {p1, p2};
62 Transition t0 = TransitionTest.example("T0", "t0", read0, in0, write0, out0);
63
64 Place[] read1 = {p4};
65 Place[] in1 = out0;
66 Place[] write1 = {p5};
67 Place[] out1 = {p3};
68 Transition t1 = TransitionTest.example("T1", "t1", read1, in1, write1, out1);
69
70 Workflow wf = Factory.newWorkflow();
71
72 Assert.assertEquals(Workflow.DEFAULT_DESCRIPTION, wf.getDescription());
73 wf.setDescription("anton");
74 Assert.assertEquals("anton", wf.getDescription());
75 Assert.assertEquals(0, wf.getPlaces().length);
76 Assert.assertEquals(0, wf.getTransitions().length);
77
78 wf.addPlace(p0);
79 wf.addPlace(p1);
80 wf.addPlace(p2);
81 wf.addPlace(p3);
82 wf.addPlace(p4);
83 wf.addPlace(p5);
84
85 wf.addTransition(t0);
86 wf.addTransition(t1);
87
88 Assert.assertEquals(6, wf.getPlaces().length);
89 Assert.assertEquals(2, wf.getTransitions().length);
90
91 Assert.assertEquals(6, wf.getPlaceIDs().length);
92 Assert.assertEquals(2, wf.getTransitionIDs().length);
93
94 Assert.assertEquals(wf.getPlace("p0").getID(), "p0");
95 Assert.assertEquals(wf.getPlace("xyz"), null);
96 Assert.assertEquals("number of tokens on p1", 1, wf.getPlace("p1").getTokens().length);
97 Assert.assertEquals("value of token property", wf.getPlace("p1").getTokens()[0].getProperties().get("propertyName1"),"propertyValue1");
98
99 Assert.assertEquals(wf.getPlace("p5").getID(), "p5");
100 Assert.assertEquals(wf.getPlace("xyz"), null);
101 Assert.assertEquals("number of tokens on p5", 1, wf.getPlace("p5").getTokens().length);
102
103 Assert.assertEquals(wf.getTransition("t1").getID(), "t1");
104 Assert.assertEquals(wf.getPlace("xyz"), null);
105
106
107
108
109
110
111
112
113
114 Element wfe1 = WorkflowJdom.java2element(wf);
115 boolean test = true;
116 String wfs1 = null;
117 Element wfe2 = null;
118 try {
119 wfs1 = JdomString.element2string(wfe1);
120 System.out.println(wfs1);
121 wfe2 = JdomString.string2element(wfs1);
122 } catch (IOException e) {
123 test = false;
124 e.printStackTrace();
125 } catch (WorkflowFormatException e) {
126 test = false;
127 e.printStackTrace();
128 }
129 Assert.assertTrue(test);
130
131 Workflow wf2 = null;
132 try {
133 wf2 = WorkflowJdom.element2java(wfe2);
134 } catch (CapacityException e) {
135 test = false;
136 e.printStackTrace();
137 }
138 Assert.assertTrue(test);
139
140 Assert.assertEquals("anton", wf2.getDescription());
141
142 Element wfe3 = WorkflowJdom.java2element(wf2);
143
144 String wfs2 = null;
145 try {
146 wfs2 = JdomString.element2string(wfe3);
147 } catch (IOException e) {
148 test = false;
149 e.printStackTrace();
150 }
151 Assert.assertTrue(test);
152 Assert.assertTrue(wfs1.equals(wfs2));
153
154
155
156
157
158
159
160
161 }
162
163 public void testParsingGWorkflowDL21() throws IOException, JDOMException, CapacityException, WorkflowFormatException {
164 String fn = "src/test/net/kwfgrid/gworkflowdl/gworkflowdl_test_2-1.gwdl";
165
166
167 String xml = readfile(fn);
168
169
170 Element wfe = JdomString.string2element(xml);
171
172
173 Workflow wf = WorkflowJdom.element2java(wfe);
174
175
176 Element wfe2 = WorkflowJdom.java2element(wf);
177
178
179 String xml2 = JdomString.element2string(wfe2);
180
181 logger.info("resulting xml:\n"+xml2);
182
183 Assert.assertEquals("XML",xml,xml2);
184 }
185
186 public void testParsingWorkflowWithMissingPlace() throws IOException, JDOMException, CapacityException {
187 boolean test = false;
188 String fn = "src/test/net/kwfgrid/gworkflowdl/gworkflowdl_missingPlace.xml";
189 Element wfe = null;
190 try {
191 wfe = JdomString.workflowFile2element(getTestFile(fn));
192 WorkflowJdom.element2java(wfe);
193 } catch (WorkflowFormatException e) {
194 logger.info("========= DON'T WORRY: This exception was produced intentionally: ============\n"+e);
195 test = true;
196 }
197
198 Assert.assertTrue("Got WorkflowFormatException", test);
199 }
200
201 }