1   /*
2    * Copyright (c) 2005, The K-Wf Grid Consortium
3    * Fraunhofer Institute for Computer Architecture and Software Technology
4    * See http://www.kwfgrid.eu and http://www.first.fraunhofer.de for more details.
5    */
6   package net.kwfgrid.gworkflowdl.protocol.xupdate;
7   
8   import net.kwfgrid.gworkflowdl.protocol.structure.*;
9   import net.kwfgrid.gworkflowdl.protocol.calls.*;
10  import net.kwfgrid.gworkflowdl.structure.*;
11  
12  import org.apache.log4j.Logger;
13  import org.apache.log4j.Level;
14  
15  /***
16     Test for the XUpdate subsystem.
17   */
18  public class TestXUpdate extends TestCalls {
19      protected static final Logger logger = Logger.getLogger(TestXUpdate.class);    
20      protected XUModificationHandler _handler;
21      protected XUMethodCallEncoder _encoder;
22  
23      public TestXUpdate() {
24  	super();
25          logger.setLevel(Level.DEBUG);
26  	creator = new MyCreator(new DefaultCreator());
27  	_handler = new XUModificationHandler();
28  	_encoder = new XUMethodCallEncoder();
29      }
30  
31      protected Object executeCall(IMethodCall call) throws Exception {
32  	String mod = _encoder.encode(call);
33  	logger.info("\n -------------------- Next modification: "+call.getClass().getName()+" --------------------\n"+mod);
34  	_handler.handleModification(call.getTarget(), mod);
35  	return null;
36      }
37  
38      protected void executeCall(IMethodCall call, Object ret) throws Exception {
39  	executeCall(call);
40  	// Retun value check disabled.
41      }
42  
43      protected void checkNumberOfEvents(EventChecker thechecker, int num) {
44  	// event check disabled
45      }
46  
47      protected void checkObjectsAddedEvent(Event event, IStructureObject parent, String namespace, String name, Object[] obs) {
48  	// event check disabled
49      }
50  
51      protected void checkObjectsRemovedEvent(Event event, IStructureObject parent, String namespace, String name, Object[] obs) {
52  	// event check disabled
53      }
54  
55      protected void checkPropertyChangeEvent(Event event, IStructureObject parent, String namespace, String name, Object newvalue) {
56  	// event check disabled
57      }
58  
59      public void testEdgeSetPlace() throws Exception {
60  	logger.info("testEdgeSetPlace() skipped.");
61      }
62  
63      public void testEdgeSetExpression() throws Exception {
64  	logger.info("testEdgeSetExpression() skipped.");
65      }
66  
67      public void testTokenSet() throws Exception {
68  	logger.info("testTokenSet() skipped.");
69      }
70  
71      public void testTokenFromXML() throws Exception {
72  	logger.info("testTokenFromXML() skipped.");
73      }
74  
75      public void testOperationObjectSetObject() throws Exception {
76  	logger.info("testOperationObjectSetObject() skipped.");
77      }
78  
79      public void testOperationObjectFromXML() throws Exception {
80  	logger.info("testOperationObjectFromXML() skipped.");
81      }
82  
83      public void testOperationObjectRemoveObject() throws Exception {
84  	logger.info("testOperationObjectRemoveObject() skipped.");
85      }
86  
87      public void testOperationSetOperationObject() throws Exception {
88  	logger.info("testOperationSetOperationObject() skipped.");
89      }
90  
91      public void testWorkflowSetProperties() throws Exception {
92  	ProtocolWorkflow p = (ProtocolWorkflow)creator.newWorkflow();
93  	p.getRoot().addStructureListener(checker);
94  
95  	ProtocolProperties props = (ProtocolProperties)creator.newProperties();
96  	Property np1 = creator.newProperty("key1", "value1");
97  	Property np2 = creator.newProperty("key2", "value1");
98  	props.setProperties(new Property[] { np1, np2 });
99  	p.getProperties().put("kk", "vv");
100 	Property op = p.getProperties().getProperty(0);
101 	ProtocolProperties oprops = (ProtocolProperties)p.getProperties();
102 
103 	checker.reset();
104 	executeCall(new WorkflowSetProperties(p, props));
105 	assertEquals("Wrong number of properties.", 2, p.getProperties().size());
106 	assertEquals("Wrong value for key1.", "value1", p.getProperties().get("key1"));
107 	assertEquals("Wrong value for key2.", "value1", p.getProperties().get("key2"));
108     }
109 
110     public void testTransitionSetProperties() throws Exception {
111 	ProtocolTransition p = (ProtocolTransition)creator.newTransition();
112 	p.getRoot().addStructureListener(checker);
113 
114 	ProtocolProperties props = (ProtocolProperties)creator.newProperties();
115 	Property np1 = creator.newProperty("key1", "value1");
116 	Property np2 = creator.newProperty("key2", "value1");
117 	props.setProperties(new Property[] { np1, np2 });
118 	p.getProperties().put("kk", "vv");
119 	Property op = p.getProperties().getProperty(0);
120 	ProtocolProperties oprops = (ProtocolProperties)p.getProperties();
121 
122 	checker.reset();
123 	executeCall(new TransitionSetProperties(p, props));
124 	assertEquals("Wrong number of properties.", 2, p.getProperties().size());
125 	assertEquals("Wrong value for key1.", "value1", p.getProperties().get("key1"));
126 	assertEquals("Wrong value for key2.", "value1", p.getProperties().get("key2"));
127     }    
128 
129     public void testPlaceSetProperties() throws Exception {
130 	ProtocolPlace p = (ProtocolPlace)creator.newPlace();
131 	p.getRoot().addStructureListener(checker);
132 
133 	ProtocolProperties props = (ProtocolProperties)creator.newProperties();
134 	Property np1 = creator.newProperty("key1", "value1");
135 	Property np2 = creator.newProperty("key2", "value1");
136 	props.setProperties(new Property[] { np1, np2 });
137 	p.getProperties().put("kk", "vv");
138 	Property op = p.getProperties().getProperty(0);
139 	ProtocolProperties oprops = (ProtocolProperties)p.getProperties();
140 
141 	checker.reset();
142 	executeCall(new PlaceSetProperties(p, props));
143 	assertEquals("Wrong number of properties.", 2, p.getProperties().size());
144 	assertEquals("Wrong value for key1.", "value1", p.getProperties().get("key1"));
145 	assertEquals("Wrong value for key2.", "value1", p.getProperties().get("key2"));
146     }
147 
148     public void testOperationSetClassOperation() throws Exception {
149 	ProtocolOperation o = (ProtocolOperation)creator.newOperation();
150 	o.getRoot().addStructureListener(checker);
151 	
152 	ProtocolOperationClass co = (ProtocolOperationClass)creator.newOperationClass();
153 	
154 	checker.reset();
155 	executeCall(new OperationSetOperationClass(o, co));
156 	assertTrue("Wrong type of class operation ("+o.get().getClass().getName()+").", o.get() instanceof OperationClass);
157 
158 	executeCall(new OperationSetOperationClass(o, null));
159     }
160 
161     public void testTokenClass() throws Exception {
162 	ProtocolPlace p = (ProtocolPlace)creator.newPlace();
163 	
164 	executeCall(new OwlsAddOwl(p, "tokenClass"));
165 	assertEquals("Wrong number of owls.", 1, p.owlsCount());
166 	assertEquals("Wrong owl at index 0.", "tokenClass", p.getOwls()[0]);
167 
168 	executeCall(new OwlsAddOwl(p, "gruetzi"));
169 	assertEquals("Wrong number of owls.", 2, p.owlsCount());
170 	assertEquals("Wrong owl at index 1.", "gruetzi", p.getOwls()[1]);
171 
172 	executeCall(new PlaceSetTokenType(p, "data"));
173 	assertEquals("Wrong token type.", "data", p.getTokenType());
174 
175 	executeCall(new OwlsRemoveOwl(p, 0));
176 	assertEquals("Wrong number of owls.", 1, p.owlsCount());
177 	assertEquals("Wrong owl at index 0.", "gruetzi", p.getOwls()[0]);
178 
179 	executeCall(new OwlsRemoveOwl(p, 0));
180 	assertEquals("Wrong number of owls.", 0, p.owlsCount());
181 
182 	assertEquals("Wrong token type.", "data", p.getTokenType());
183 
184 	executeCall(new PlaceSetTokenType(p, null));
185 	assertNull("Wrong token type.", p.getTokenType());
186     }
187 }