1 package org.xmlBlaster.test.classtest;
2
3 import java.util.logging.Logger;
4 import java.util.logging.Level;
5 import org.xmlBlaster.util.Global;
6 import org.xmlBlaster.util.XmlBlasterException;
7 import org.xmlBlaster.util.SessionName;
8 import org.xmlBlaster.util.qos.SessionQos;
9 import org.xmlBlaster.util.qos.ConnectQosData;
10 import org.xmlBlaster.client.qos.ConnectQos;
11 import org.xmlBlaster.util.qos.I_ConnectQosFactory;
12 import org.xmlBlaster.util.def.Constants;
13
14 import org.xmlBlaster.util.qos.address.AddressBase;
15 import org.xmlBlaster.util.qos.storage.ClientQueueProperty;
16 import org.xmlBlaster.util.qos.storage.CbQueueProperty;
17 import org.xmlBlaster.util.qos.address.ServerRef;
18
19 import junit.framework.*;
20
21 /**
22 * Test ConnectQos.
23 * <p />
24 * All methods starting with 'test' and without arguments are invoked automatically
25 * <p />
26 * TODO: http://xmlunit.sourceforge.net/
27 * <p />
28 * Invoke: java -Djava.compiler= junit.textui.TestRunner -noloading org.xmlBlaster.test.classtest.ConnectQosTest
29 * @see org.xmlBlaster.util.qos.ConnectQosData
30 * @see <a href="http://www.xmlBlaster.org/xmlBlaster/doc/requirements/interface.connect.html" target="others">the interface.connect requirement</a>
31 */
32 public class ConnectQosTest extends TestCase {
33 protected Global glob;
34 private static Logger log = Logger.getLogger(ConnectQosTest.class.getName());
35 int counter = 0;
36
37 public ConnectQosTest(String name) {
38 super(name);
39 }
40
41 protected void setUp() {
42 this.glob = Global.instance();
43
44 }
45
46 public void testParse() {
47 System.out.println("***ConnectQosTest: testParse ...");
48
49 try {
50 long sessionTimeout = 3600001L;
51 String xml =
52 "<qos>\n" +
53 " <securityService type='htpasswd' version='1.0'>\n" +
54 " <![CDATA[\n" +
55 " <user>joe</user>\n" +
56 " <passwd>theUsersPwd</passwd>\n" +
57 " ]]>\n" +
58 " </securityService>\n" +
59 " <ptp>false</ptp>\n" +
60 " <clusterNode>true</clusterNode>\n" +
61 " <instanceId>/node/heron/instanceId/123445</instanceId>\n" +
62 " <reconnected>true</reconnected>\n" +
63 " <duplicateUpdates>false</duplicateUpdates>\n" +
64 " <session name='/node/avalon/client/joe/2' timeout='" + sessionTimeout + "' maxSessions='27' clearSessions='true' sessionId='xyz'/>\n" +
65 " <queue relating='subject' type='XY' version='7.0' maxEntries='1009' maxBytes='4009' maxEntriesCache='509' maxBytesCache='777' storeSwapLevel='20009' storeSwapBytes='10000' reloadSwapLevel='20000' reloadSwapBytes='30000' onOverflow='deadMessage'>\n" +
66 /*
67 " <callback type='IOR' sessionId='4e56890ghdFzj0' pingInterval='60000' retries='1' delay='60000' useForSubjectQueue='true'>\n" +
68 " <ptp>true</ptp>\n" +
69 " IOR:00011200070009990000....\n" +
70 " <compress type='gzip' minSize='1000' />\n" +
71 " <burstMode collectTime='400' maxEntries='12' maxBytes='24' />\n" +
72 " </callback>\n" +
73 */
74 " </queue>\n" +
75 /*
76 " <callback type='IOR'>\n" +
77 " IOR:00000461203\n" +
78 " </callback>\n" +
79 " <callback type='EMAIL'>\n" +
80 " et@mars.universe\n" +
81 " <ptp>false</ptp>\n" +
82 " </callback>\n" +
83 */
84 " <queue relating='connection' type='RAM' version='4.0' maxEntries='22' maxBytes='44'>\n" +
85 " <address type='XMLRPC'>\n" +
86 " http:/www.mars.universe:8080/RPC2\n" +
87 " <attribute name='intKey2' type='int'>34</attribute>\n" +
88 " </address>\n" +
89 " </queue>\n" +
90 " <queue relating='callback' maxEntries='1600' maxBytes='2000'>\n" +
91 " <callback type='XMLRPC'>\n" +
92 " <ptp>true</ptp>\n" +
93 " http:/www.mars.universe:8080/RPC2\n" +
94 " <compress type='gzip' minSize='1000' />\n" +
95 " <burstMode collectTime='400' maxEntries='12' maxBytes='24' />\n" +
96 " <attribute name='intKey1' type='int'>1234</attribute>\n" +
97 " </callback>\n" +
98 " </queue>\n" +
99 " <serverRef type='IOR'>\n" +
100 " IOR:00011200070009990000....\n" +
101 " </serverRef>\n" +
102 " <serverRef type='EMAIL'>\n" +
103 " et@mars.universe\n" +
104 " </serverRef>\n" +
105 " <serverRef type='XMLRPC'>\n" +
106 " http:/www.mars.universe:8080/RPC2\n" +
107 " </serverRef>\n" +
108 " <clientProperty name='intKey' type='int'>123</clientProperty>\n" +
109 " <clientProperty name='StringKey' type='String' encoding='" + Constants.ENCODING_BASE64 + "'>QmxhQmxhQmxh</clientProperty>\n" +
110 " <persistent>true</persistent>\n" +
111 "</qos>\n";
112
113 I_ConnectQosFactory factory = this.glob.getConnectQosFactory();
114 ConnectQosData qos = factory.readObject(xml); // parse
115 assertEquals("", true, qos.getPersistentProp().getValue());
116 String newXml = qos.toXml(); // dump
117 qos = factory.readObject(newXml); // parse again
118
119 if (log.isLoggable(Level.FINE)) log.fine("ORIG=\n" + xml + "\n NEW=\n" + newXml);
120
121 SessionQos sessionQos = qos.getSessionQos();
122 assertEquals("sessionTimeout failed", sessionTimeout, sessionQos.getSessionTimeout());
123 if (SessionName.useSessionMarker())
124 assertEquals("", "/node/avalon/client/joe/session/2", sessionQos.getSessionName().getAbsoluteName());
125 else
126 assertEquals("", "/node/avalon/client/joe/2", sessionQos.getSessionName().getAbsoluteName());
127 assertEquals("", true, sessionQos.hasPublicSessionId());
128 assertEquals("", 2L, sessionQos.getPublicSessionId());
129 assertEquals("", sessionTimeout, sessionQos.getSessionTimeout());
130 assertEquals("", 27, sessionQos.getMaxSessions());
131 assertEquals("", true, sessionQos.clearSessions());
132 assertEquals("", "xyz", sessionQos.getSecretSessionId());
133
134 assertEquals("", false, qos.isPtpAllowed());
135 assertEquals("", true, qos.isClusterNode());
136 assertEquals("", true, qos.isReconnected());
137 assertEquals("", "/node/heron/instanceId/123445", qos.getInstanceId());
138 assertEquals("", false, qos.duplicateUpdates());
139 assertEquals("", true, qos.getPersistentProp().getValue());
140
141 {
142 ClientQueueProperty prop = qos.getClientQueueProperty();
143 assertEquals("", 22L, prop.getMaxEntries());
144 assertEquals("", "RAM", prop.getType());
145 assertEquals("", "4.0", prop.getVersion());
146 assertEquals("", 44L, prop.getMaxBytes());
147 AddressBase[] addrArr = prop.getAddresses();
148 assertEquals("Address array", 1, addrArr.length);
149 AddressBase addr = addrArr[0];
150 assertEquals("", "34", addr.getEnv("intKey2", "").getValue());
151 }
152
153 {
154 CbQueueProperty prop = qos.getSubjectQueueProperty();
155 assertEquals("", 1009L, prop.getMaxEntries());
156 assertEquals("", "XY", prop.getType());
157 assertEquals("", "7.0", prop.getVersion());
158 assertEquals("", 4009L, prop.getMaxBytes());
159 assertEquals("", 509L, prop.getMaxEntriesCache());
160 assertEquals("", 777L, prop.getMaxBytesCache());
161 /* Currently deactivated in code
162 assertEquals("", 20009L, prop.getStoreSwapLevel());
163 assertEquals("", 10000L, prop.getStoreSwapBytes());
164 assertEquals("", 20000L, prop.getReloadSwapLevel());
165 assertEquals("", 30000L, prop.getReloadSwapBytes());
166 */
167 assertEquals("", "deadMessage", prop.getOnOverflow());
168 assertEquals("", true, qos.hasSubjectQueueProperty());
169 }
170
171
172 {
173 CbQueueProperty prop = qos.getSessionCbQueueProperty();
174 assertEquals("", 1600L, prop.getMaxEntries());
175 AddressBase[] addrArr = prop.getAddresses();
176 assertEquals("Address array", 1, addrArr.length);
177 AddressBase addr = addrArr[0];
178 assertEquals("", 400, addr.getCollectTime());
179 assertEquals("", 12, addr.getBurstModeMaxEntries());
180 assertEquals("", 24, addr.getBurstModeMaxBytes());
181 assertEquals("", "1234", addr.getEnv("intKey1", "").getValue());
182 System.out.println("GOT: "+addr.getRawAddress());
183 assertEquals("", "http:/www.mars.universe:8080/RPC2", addr.getRawAddress());
184 }
185
186 assertEquals("Wrong number of clientProperties", 2, qos.getClientProperties().size());
187 {
188 String prop = qos.getClientProperty("StringKey", (String)null);
189 assertTrue("Missing client property", prop != null);
190 assertEquals("Wrong base64 decoding", "BlaBlaBla", prop); // Base64: QmxhQmxhQmxh -> BlaBlaBla
191 }
192
193 {
194 int prop = qos.getClientProperty("intKey", -1);
195 assertEquals("Wrong value", 123, prop);
196 }
197
198 //System.out.println(qos.toXml());
199
200 // TODO: check all methods !!!
201
202 /*
203 protected I_ClientPlugin getPlugin(String mechanism, String version) throws XmlBlasterException
204 public String getSecurityData() {
205 */
206 ServerRef[] refArr = qos.getServerRefs();
207 assertEquals("", 3, refArr.length);
208 ServerRef ref = qos.getServerRef();
209 assertTrue("", ref != null);
210 /*
211 public ClientQueueProperty getClientQueueProperty() {
212 public final I_SecurityQos getSecurityQos() throws XmlBlasterException
213 public final String getSecurityPluginType() throws XmlBlasterException
214 public final String getSecurityPluginVersion() throws XmlBlasterException
215 */
216 AddressBase[] addrArr = qos.getAddresses(true);
217 assertEquals("Address array", 1, addrArr.length);
218 //Address addr = qos.getAddress();
219 //assertEquals("", "http:...", addr.getAddress().trim()); // from client queue property
220 assertEquals("", false, qos.isPtpAllowed());
221 assertEquals("", "joe", qos.getUserId());
222 }
223 catch (XmlBlasterException e) {
224 fail("testParse failed: " + e.toString());
225 }
226
227 System.out.println("***ConnectQosTest: testParse [SUCCESS]");
228 }
229
230 public void testParse2() {
231 System.out.println("***ConnectQosTest: testParse2 ...");
232
233 try {
234 String xml =
235 "<qos>\n" +
236 " <securityService type='htpasswd' version='1.0'><![CDATA[\n" +
237 " <user>A-native-client-plugin</user>\n" +
238 " <passwd>secret</passwd>\n" +
239 " ]]></securityService>\n" +
240 " <session name='client/A-native-client-plugin' timeout='86400000' maxSessions='10' clearSessions='false' reconnectSameClientOnly='false'/>\n" +
241 " <queue relating='connection' type='RAM' version='1.0' maxEntries='10000000' maxEntriesCache='1000'>\n" +
242 " <address type='LOCAL' pingInterval='0' dispatchPlugin='undef'>\n" +
243 " <burstMode collectTime='0'/>\n" +
244 " </address>\n" +
245 " </queue>\n" +
246 " </qos>\n";
247
248 I_ConnectQosFactory factory = this.glob.getConnectQosFactory();
249 ConnectQosData qos = factory.readObject(xml); // parse
250 String newXml = qos.toXml(); // dump
251 qos = factory.readObject(newXml); // parse again
252
253 if (log.isLoggable(Level.FINE)) log.fine("ORIG=\n" + xml + "\n NEW=\n" + newXml);
254
255 ClientQueueProperty prop = qos.getClientQueueProperty();
256 assertEquals("", "RAM", prop.getType());
257 assertEquals("", "1.0", prop.getVersion());
258 System.out.println(qos.toXml());
259 }
260 catch (XmlBlasterException e) {
261 fail("testParse2 failed: " + e.toString());
262 }
263
264 System.out.println("***ConnectQosTest: testParse2 [SUCCESS]");
265 }
266
267 public void testParse3() {
268 System.out.println("***ConnectQosTest: testParse3 ...");
269
270 try {
271 String xml =
272 "<qos>\n" +
273 " <queue relating='callback' maxEntries='1600' maxBytes='2000'>\n" +
274 " <callback type='email' bootstrapPort='56' sessionId='99i8Z' pingInterval='30000' retries='12' delay='20005' dispatchPlugin='undef'>\n" +
275 " golan@localhost\n" +
276 " \n" +
277 " <attribute name='__ContextNode' type='String'>/xmlBlaster/node/heron/client/golan/session/1</attribute>\n" +
278 " </callback>\n" +
279 " </queue>\n" +
280 "</qos>\n";
281
282 I_ConnectQosFactory factory = this.glob.getConnectQosFactory();
283 ConnectQosData qos = factory.readObject(xml); // parse
284 String newXml = qos.toXml(); // dump
285 qos = factory.readObject(newXml); // parse again
286
287 if (log.isLoggable(Level.FINE)) log.fine("ORIG=\n" + xml + "\n NEW=\n" + newXml);
288
289 {
290 CbQueueProperty prop = qos.getSessionCbQueueProperty();
291 assertEquals("", 1600L, prop.getMaxEntries());
292 assertEquals("", 2000L, prop.getMaxBytes());
293 AddressBase[] addrArr = prop.getAddresses();
294 assertEquals("Address array", 1, addrArr.length);
295 AddressBase addr = addrArr[0];
296 assertEquals("", "golan@localhost", addr.getRawAddress());
297 assertEquals("", "/xmlBlaster/node/heron/client/golan/session/1", addr.getEnv("__ContextNode", "").getValue());
298 assertEquals("", "email", addr.getType());
299 assertEquals("", 56, addr.getBootstrapPort());
300 assertEquals("", "99i8Z", addr.getSecretSessionId());
301 assertEquals("", 30000, addr.getPingInterval());
302 assertEquals("", 12, addr.getRetries());
303 assertEquals("", 20005, addr.getDelay());
304 }
305
306 }
307 catch (XmlBlasterException e) {
308 fail("testParse failed: " + e.toString());
309 }
310
311 System.out.println("***ConnectQosTest: testParse3 [SUCCESS]");
312 }
313
314 public void testClientConnectQos() {
315 System.out.println("***ConnectQosTest: testClientConnectQos ...");
316 /*
317 try {
318 ConnectQos qos = new ConnectQos(glob);
319
320 // test missing !!!
321 }
322 catch (XmlBlasterException e) {
323 fail("testClientConnectQos failed: " + e.toString());
324 }
325 */
326 System.out.println("***ConnectQosTest: testClientConnectQos [SUCCESS]");
327 }
328
329 public void testCredential() {
330 System.out.println("***ConnectQosTest: testCredential ...");
331 String loginName = "avalon";
332 String passwd = "avalonSecret";
333 String[] args = {
334 "-cluster.node.id",
335 loginName,
336 "-passwd[avalon]",
337 passwd
338 };
339
340 try {
341 Global g = glob.getClone(args);
342 ConnectQos qos = new ConnectQos(g);
343 qos.setUserId(g.getId());
344 assertEquals("Wrong user id", loginName, qos.getSecurityQos().getUserId());
345 assertTrue("Wrong password, expected '" + passwd + "': " + qos.toXml(), qos.toXml().indexOf(passwd) > 0);
346 //System.out.println("ConnectQos=" + qos.toXml(""));
347 }
348 catch (XmlBlasterException e) {
349 fail("testCredential failed: " + e.toString());
350 }
351
352 System.out.println("***ConnectQosTest: testCredential [SUCCESS]");
353 }
354 /**
355 * <pre>
356 * java org.xmlBlaster.test.classtest.ConnectQosTest
357 * </pre>
358 */
359 public static void main(String args[])
360 {
361 ConnectQosTest testSub = new ConnectQosTest("ConnectQosTest");
362 testSub.setUp();
363 testSub.testParse3();
364 testSub.testCredential();
365 testSub.testParse();
366 testSub.testClientConnectQos();
367 testSub.testParse2();
368 //testSub.tearDown();
369 }
370 }
syntax highlighted by Code2HTML, v. 0.9.1