Package org.xmlBlaster.test.classtest

Source Code of org.xmlBlaster.test.classtest.ConnectQosTest

package org.xmlBlaster.test.classtest;

import java.util.logging.Logger;
import java.util.logging.Level;
import org.xmlBlaster.util.Global;
import org.xmlBlaster.util.XmlBlasterException;
import org.xmlBlaster.util.SessionName;
import org.xmlBlaster.util.qos.SessionQos;
import org.xmlBlaster.util.qos.ConnectQosData;
import org.xmlBlaster.client.qos.ConnectQos;
import org.xmlBlaster.util.qos.I_ConnectQosFactory;
import org.xmlBlaster.util.def.Constants;

import org.xmlBlaster.util.qos.address.AddressBase;
import org.xmlBlaster.util.qos.storage.ClientQueueProperty;
import org.xmlBlaster.util.qos.storage.CbQueueProperty;
import org.xmlBlaster.util.qos.address.ServerRef;

import junit.framework.*;

/**
* Test ConnectQos.
* <p />
* All methods starting with 'test' and without arguments are invoked automatically
* <p />
* TODO: http://xmlunit.sourceforge.net/
* <p />
* Invoke: java -Djava.compiler= junit.textui.TestRunner -noloading org.xmlBlaster.test.classtest.ConnectQosTest
* @see org.xmlBlaster.util.qos.ConnectQosData
* @see <a href="http://www.xmlBlaster.org/xmlBlaster/doc/requirements/interface.connect.html" target="others">the interface.connect requirement</a>
*/
public class ConnectQosTest extends TestCase {
   protected Global glob;
   private static Logger log = Logger.getLogger(ConnectQosTest.class.getName());
   int counter = 0;

   public ConnectQosTest(String name) {
      super(name);
   }

   protected void setUp() {
      this.glob = Global.instance();

   }

   public void testParse() {
      System.out.println("***ConnectQosTest: testParse ...");
     
      try {
         long sessionTimeout = 3600001L;
         String xml =
         "<qos>\n" +
         "   <securityService type='htpasswd' version='1.0'>\n" +
         "      <![CDATA[\n" +
         "         <user>joe</user>\n" +
         "         <passwd>theUsersPwd</passwd>\n" +
         "      ]]>\n" +
         "   </securityService>\n" +
         "   <ptp>false</ptp>\n" +
         "   <clusterNode>true</clusterNode>\n" +
         "   <instanceId>/node/heron/instanceId/123445</instanceId>\n" +
         "   <reconnected>true</reconnected>\n" +
         "   <duplicateUpdates>false</duplicateUpdates>\n" +
         "   <session name='/node/avalon/client/joe/2' timeout='" + sessionTimeout + "' maxSessions='27' clearSessions='true' sessionId='xyz'/>\n" +
         "   <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" +
         /*
         "      <callback type='IOR' sessionId='4e56890ghdFzj0' pingInterval='60000' retries='1' delay='60000' useForSubjectQueue='true'>\n" +
         "         <ptp>true</ptp>\n" +
         "         IOR:00011200070009990000....\n" +
         "         <compress type='gzip' minSize='1000' />\n" +
         "         <burstMode collectTime='400' maxEntries='12' maxBytes='24' />\n" +
         "      </callback>\n" +
         */
         "   </queue>\n" +
         /*
         "   <callback type='IOR'>\n" +
         "      IOR:00000461203\n" +
         "   </callback>\n" +
         "   <callback type='EMAIL'>\n" +
         "      et@mars.universe\n" +
         "      <ptp>false</ptp>\n" +
         "   </callback>\n" +
         */
         "   <queue relating='connection' type='RAM' version='4.0' maxEntries='22' maxBytes='44'>\n" +
         "      <address type='XMLRPC'>\n" +
         "         http:/www.mars.universe:8080/RPC2\n" +
         "         <attribute name='intKey2' type='int'>34</attribute>\n" +
         "      </address>\n" +
         "   </queue>\n" +
         "   <queue relating='callback' maxEntries='1600' maxBytes='2000'>\n" +
         "      <callback type='XMLRPC'>\n" +
         "         <ptp>true</ptp>\n" +
         "         http:/www.mars.universe:8080/RPC2\n" +
         "         <compress type='gzip' minSize='1000' />\n" +
         "         <burstMode collectTime='400' maxEntries='12' maxBytes='24' />\n" +
         "         <attribute name='intKey1' type='int'>1234</attribute>\n" +
         "      </callback>\n" +
         "   </queue>\n" +
         "   <serverRef type='IOR'>\n" +
         "      IOR:00011200070009990000....\n" +
         "   </serverRef>\n" +
         "   <serverRef type='EMAIL'>\n" +
         "      et@mars.universe\n" +
         "   </serverRef>\n" +
         "   <serverRef type='XMLRPC'>\n" +
         "      http:/www.mars.universe:8080/RPC2\n" +
         "   </serverRef>\n" +
         "   <clientProperty name='intKey' type='int'>123</clientProperty>\n" +
         "   <clientProperty name='StringKey' type='String' encoding='" + Constants.ENCODING_BASE64 + "'>QmxhQmxhQmxh</clientProperty>\n" +
         "   <persistent>true</persistent>\n" +
         "</qos>\n";

         I_ConnectQosFactory factory = this.glob.getConnectQosFactory();
         ConnectQosData qos = factory.readObject(xml); // parse
         assertEquals("", true, qos.getPersistentProp().getValue());
         String newXml = qos.toXml();                  // dump
         qos = factory.readObject(newXml);             // parse again

         if (log.isLoggable(Level.FINE)) log.fine("ORIG=\n" + xml + "\n NEW=\n" + newXml);

         SessionQos sessionQos = qos.getSessionQos();
         assertEquals("sessionTimeout failed", sessionTimeout, sessionQos.getSessionTimeout());
         if (SessionName.useSessionMarker())
            assertEquals("", "/node/avalon/client/joe/session/2", sessionQos.getSessionName().getAbsoluteName());
         else
            assertEquals("", "/node/avalon/client/joe/2", sessionQos.getSessionName().getAbsoluteName());
         assertEquals("", true, sessionQos.hasPublicSessionId());
         assertEquals("", 2L, sessionQos.getPublicSessionId());
         assertEquals("", sessionTimeout, sessionQos.getSessionTimeout());
         assertEquals("", 27, sessionQos.getMaxSessions());
         assertEquals("", true, sessionQos.clearSessions());
         assertEquals("", "xyz", sessionQos.getSecretSessionId());

         assertEquals("", false, qos.isPtpAllowed());
         assertEquals("", true, qos.isClusterNode());
         assertEquals("", true, qos.isReconnected());
         assertEquals("", "/node/heron/instanceId/123445", qos.getInstanceId());
         assertEquals("", false, qos.duplicateUpdates());
         assertEquals("", true, qos.getPersistentProp().getValue());

         {
            ClientQueueProperty prop = qos.getClientQueueProperty();
            assertEquals("", 22L, prop.getMaxEntries());
            assertEquals("", "RAM", prop.getType());
            assertEquals("", "4.0", prop.getVersion());
            assertEquals("", 44L, prop.getMaxBytes());
            AddressBase[] addrArr = prop.getAddresses();
            assertEquals("Address array", 1, addrArr.length);
            AddressBase addr = addrArr[0];
            assertEquals("", "34", addr.getEnv("intKey2", "").getValue());
         }

         {
            CbQueueProperty prop = qos.getSubjectQueueProperty();
            assertEquals("", 1009L, prop.getMaxEntries());
            assertEquals("", "XY", prop.getType());
            assertEquals("", "7.0", prop.getVersion());
            assertEquals("", 4009L, prop.getMaxBytes());
            assertEquals("", 509L, prop.getMaxEntriesCache());
            assertEquals("", 777L, prop.getMaxBytesCache());
            /* Currently deactivated in code
            assertEquals("", 20009L, prop.getStoreSwapLevel());
            assertEquals("", 10000L, prop.getStoreSwapBytes());
            assertEquals("", 20000L, prop.getReloadSwapLevel());
            assertEquals("", 30000L, prop.getReloadSwapBytes());
            */
            assertEquals("", "deadMessage", prop.getOnOverflow());
            assertEquals("", true, qos.hasSubjectQueueProperty());
         }


         {
            CbQueueProperty prop = qos.getSessionCbQueueProperty();
            assertEquals("", 1600L, prop.getMaxEntries());
            AddressBase[] addrArr = prop.getAddresses();
            assertEquals("Address array", 1, addrArr.length);
            AddressBase addr = addrArr[0];
            assertEquals("", 400, addr.getCollectTime());
            assertEquals("", 12, addr.getBurstModeMaxEntries());
            assertEquals("", 24, addr.getBurstModeMaxBytes());
            assertEquals("", "1234", addr.getEnv("intKey1", "").getValue());
            System.out.println("GOT: "+addr.getRawAddress());
            assertEquals("", "http:/www.mars.universe:8080/RPC2", addr.getRawAddress());
         }

         assertEquals("Wrong number of clientProperties", 2, qos.getClientProperties().size());
         {
            String prop = qos.getClientProperty("StringKey", (String)null);
            assertTrue("Missing client property", prop != null);
            assertEquals("Wrong base64 decoding", "BlaBlaBla", prop); // Base64: QmxhQmxhQmxh -> BlaBlaBla
         }

         {
            int prop = qos.getClientProperty("intKey", -1);
            assertEquals("Wrong value", 123, prop);
         }

         //System.out.println(qos.toXml());
        
         // TODO: check all methods !!!

         /*
         protected I_ClientPlugin getPlugin(String mechanism, String version) throws XmlBlasterException
         public String getSecurityData() {
         */
         ServerRef[] refArr = qos.getServerRefs();
         assertEquals("", 3, refArr.length);
         ServerRef ref = qos.getServerRef();
         assertTrue("", ref != null);
         /*
         public ClientQueueProperty getClientQueueProperty() {
         public final I_SecurityQos getSecurityQos() throws XmlBlasterException
         public final String getSecurityPluginType() throws XmlBlasterException
         public final String getSecurityPluginVersion() throws XmlBlasterException
         */
         AddressBase[] addrArr = qos.getAddresses(true);
         assertEquals("Address array", 1, addrArr.length);
         //Address addr = qos.getAddress();
         //assertEquals("", "http:...", addr.getAddress().trim()); // from client queue property
         assertEquals("", false, qos.isPtpAllowed());
         assertEquals("", "joe", qos.getUserId());
      }
      catch (XmlBlasterException e) {
         fail("testParse failed: " + e.toString());
      }

      System.out.println("***ConnectQosTest: testParse [SUCCESS]");
   }

   public void testParse2() {
      System.out.println("***ConnectQosTest: testParse2 ...");
     
      try {
         String xml =
         "<qos>\n" +
         "  <securityService type='htpasswd' version='1.0'><![CDATA[\n" +
         "   <user>A-native-client-plugin</user>\n" +
         "   <passwd>secret</passwd>\n" +
         "  ]]></securityService>\n" +
         "  <session name='client/A-native-client-plugin' timeout='86400000' maxSessions='10' clearSessions='false' reconnectSameClientOnly='false'/>\n" +
         "  <queue relating='connection' type='RAM' version='1.0' maxEntries='10000000' maxEntriesCache='1000'>\n" +
         "   <address type='LOCAL' pingInterval='0' dispatchPlugin='undef'>\n" +
         "    <burstMode collectTime='0'/>\n" +
         "   </address>\n" +
         "  </queue>\n" +
         " </qos>\n";

         I_ConnectQosFactory factory = this.glob.getConnectQosFactory();
         ConnectQosData qos = factory.readObject(xml); // parse
         String newXml = qos.toXml();                  // dump
         qos = factory.readObject(newXml);             // parse again

         if (log.isLoggable(Level.FINE)) log.fine("ORIG=\n" + xml + "\n NEW=\n" + newXml);
        
         ClientQueueProperty prop = qos.getClientQueueProperty();
         assertEquals("", "RAM", prop.getType());
         assertEquals("", "1.0", prop.getVersion());
         System.out.println(qos.toXml());
      }
      catch (XmlBlasterException e) {
         fail("testParse2 failed: " + e.toString());
      }

      System.out.println("***ConnectQosTest: testParse2 [SUCCESS]");
   }

   public void testParse3() {
      System.out.println("***ConnectQosTest: testParse3 ...");
     
      try {
         String xml =
           "<qos>\n" +
         "   <queue relating='callback' maxEntries='1600' maxBytes='2000'>\n" +
         "      <callback type='email' bootstrapPort='56' sessionId='99i8Z' pingInterval='30000' retries='12' delay='20005' dispatchPlugin='undef'>\n" +
         "      golan@localhost\n" +
         "      \n" +
         "      <attribute name='__ContextNode' type='String'>/xmlBlaster/node/heron/client/golan/session/1</attribute>\n" +
         "      </callback>\n" +
         "   </queue>\n" +
         "</qos>\n";

         I_ConnectQosFactory factory = this.glob.getConnectQosFactory();
         ConnectQosData qos = factory.readObject(xml); // parse
         String newXml = qos.toXml();                  // dump
         qos = factory.readObject(newXml);             // parse again

         if (log.isLoggable(Level.FINE)) log.fine("ORIG=\n" + xml + "\n NEW=\n" + newXml);

         {
            CbQueueProperty prop = qos.getSessionCbQueueProperty();
            assertEquals("", 1600L, prop.getMaxEntries());
            assertEquals("", 2000L, prop.getMaxBytes());
            AddressBase[] addrArr = prop.getAddresses();
            assertEquals("Address array", 1, addrArr.length);
            AddressBase addr = addrArr[0];
            assertEquals("", "golan@localhost", addr.getRawAddress());
            assertEquals("", "/xmlBlaster/node/heron/client/golan/session/1", addr.getEnv("__ContextNode", "").getValue());
            assertEquals("", "email", addr.getType());
            assertEquals("", 56, addr.getBootstrapPort());
            assertEquals("", "99i8Z", addr.getSecretSessionId());
            assertEquals("", 30000, addr.getPingInterval());
            assertEquals("", 12, addr.getRetries());
            assertEquals("", 20005, addr.getDelay());
         }

      }
      catch (XmlBlasterException e) {
         fail("testParse failed: " + e.toString());
      }

      System.out.println("***ConnectQosTest: testParse3 [SUCCESS]");
   }

   public void testClientConnectQos() {
      System.out.println("***ConnectQosTest: testClientConnectQos ...");
      /*
      try {
         ConnectQos qos = new ConnectQos(glob);

         // test missing !!!
      }
      catch (XmlBlasterException e) {
         fail("testClientConnectQos failed: " + e.toString());
      }
      */
      System.out.println("***ConnectQosTest: testClientConnectQos [SUCCESS]");
   }

   public void testCredential() {
      System.out.println("***ConnectQosTest: testCredential ...");
      String loginName = "avalon";
      String passwd = "avalonSecret";
      String[] args = {
         "-cluster.node.id",
         loginName,
         "-passwd[avalon]",
         passwd
         };
     
      try {
         Global g = glob.getClone(args);
         ConnectQos qos = new ConnectQos(g);
         qos.setUserId(g.getId());
         assertEquals("Wrong user id", loginName, qos.getSecurityQos().getUserId());
         assertTrue("Wrong password, expected '" + passwd + "': " + qos.toXml(), qos.toXml().indexOf(passwd) > 0);
         //System.out.println("ConnectQos=" + qos.toXml(""));
      }
      catch (XmlBlasterException e) {
         fail("testCredential failed: " + e.toString());
      }

      System.out.println("***ConnectQosTest: testCredential [SUCCESS]");
   }
   /**
    * <pre>
    *  java org.xmlBlaster.test.classtest.ConnectQosTest
    * </pre>
    */
   public static void main(String args[])
   {
      ConnectQosTest testSub = new ConnectQosTest("ConnectQosTest");
      testSub.setUp();
      testSub.testParse3();
      testSub.testCredential();
      testSub.testParse();
      testSub.testClientConnectQos();
      testSub.testParse2();
      //testSub.tearDown();
   }
}
TOP

Related Classes of org.xmlBlaster.test.classtest.ConnectQosTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.