1   /*
2    * $Id: WorkflowTest.java 1353 2010-03-04 16:21:48Z andreas.hoheisel@first.fraunhofer.de $
3    *
4    * Copyright (c) 2005, The K-Wf Grid Consortium
5    * Fraunhofer Institute for Computer Architecture and Software Technology
6    * See http://www.kwfgrid.eu and http://www.first.fraunhofer.de for more details.
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         t1.setStatus(AnalysisTransition.);
108         AnalysisTransition[] ts = wf.getEnabledTransitions();
109         Assert.assertEquals(1, ts.length);
110         Assert.assertEquals("t1", ts[0].getID());
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         String wfs1 = JdomString.workflow2string(wf);
157         Workflow wf2 = JdomString.string2workflow(wfs1);
158         String wfs2 = JdomString.workflow2string(wf2);
159         Assert.assertTrue(wfs1.equals(wfs2));
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         // file -> string
167         String xml = readfile(fn);
168 
169         // file -> jdom element
170         Element wfe = JdomString.string2element(xml);
171 
172         // jdom element -> workflow java object
173         Workflow wf = WorkflowJdom.element2java(wfe);
174 
175         // workflow java object -> jdom element
176         Element wfe2 = WorkflowJdom.java2element(wf);
177 
178         // jdom element -> string
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 }