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