Package org.xmlBlaster.test.persistence

Source Code of org.xmlBlaster.test.persistence.TestPersistence2

/*------------------------------------------------------------------------------
Name:      TestPersistence2.java
Project:   xmlBlaster.org
Copyright: xmlBlaster.org, see xmlBlaster-LICENSE file
Comment:   Testing persistent messages
------------------------------------------------------------------------------*/
package org.xmlBlaster.test.persistence;

// 24/09/1 19:27 mAd@ktaland.com
//
// to test this code Alown :
//  java \
//      -cp lib/javarb.jar:lib/xmlBlaster.jar:lib/junit.jar:lib/testsuite.jar \
//      junit.textui.TestRunner \
//      org.xmlBlaster.test.persistence.TestPersistence2
//

import java.util.logging.Logger;
import java.util.logging.Level;

import org.xmlBlaster.util.FileLocator;
import org.xmlBlaster.util.Global;
import org.xmlBlaster.util.def.Constants;
import org.xmlBlaster.client.qos.ConnectQos;
import org.xmlBlaster.util.XmlBlasterException;
import org.xmlBlaster.client.qos.EraseReturnQos;
import org.xmlBlaster.client.I_XmlBlasterAccess;
import org.xmlBlaster.util.MsgUnit;

import org.xmlBlaster.util.EmbeddedXmlBlaster;

import org.xmlBlaster.test.Util;
import org.xmlBlaster.test.Msg;
import org.xmlBlaster.test.MsgInterceptor;
import junit.framework.*;


/**
* This client tests the persistence driver, the $lt;persistent> flag.
* <p>
* Invoke examples:<br />
* <pre>
*    java junit.textui.TestRunner org.xmlBlaster.test.persistence.TestPersistence2
*
*    java junit.swingui.TestRunner -noloading org.xmlBlaster.test.persistence.TestPersistence2
* </pre>
* @author mAd@ktaland.com
*/
public class TestPersistence2 extends TestCase
{
   private final static String ME = "TestPersistence2";
   private final Global glob;
   private static Logger log = Logger.getLogger(TestPersistence2.class.getName());

   private final String senderName = "Gesa";
   private final String senderPasswd = "secret";

   private String publishOid = "HelloPersistent";
   private I_XmlBlasterAccess senderConnection = null;
   private String senderContent = "Some persistent content";

   private EmbeddedXmlBlaster serverThread;
   private int serverPort = 7604;

   private MsgInterceptor updateInterceptor;

   /**
    * Constructs the TestPersistence2 object.
    * <p />
    * @param testName  The name used in the test suite
    * @param loginName The name to login to the xmlBlaster
    */
   public TestPersistence2(Global glob, String testName)
   {
      super(testName);
      this.glob = glob;

   }


   /**
    * Sets up the fixture.
    * <p />
    * Creates a CORBA connection and does a login.<br />
    * - One connection for the sender client<br />
    */
   protected void setUp()
   {
      serverThread = EmbeddedXmlBlaster.startXmlBlaster(Util.getOtherServerPorts(serverPort));
      log.info("XmlBlaster is ready for testing on bootstrapPort " + serverPort);

      doLogin();
   }

   private void doLogin() {
      try {
         Global senderGlobal = Util.getOtherServerPorts(glob, serverPort);
         this.senderConnection = senderGlobal.getXmlBlasterAccess();
         ConnectQos qos = new ConnectQos(senderGlobal, senderName, senderPasswd);

         this.updateInterceptor = new MsgInterceptor(senderGlobal, log, null);
         this.senderConnection.connect(qos, this.updateInterceptor);
      }
      catch (XmlBlasterException e) {
          log.warning("setUp() - login failed");
      }
      catch (Exception e) {
          log.severe(e.toString());
          e.printStackTrace();
      }
   }


   /**
    * Tears down the fixture.
    * <p />
    * cleaning up .... logout
    */
   protected void tearDown()
   {
      try { Thread.sleep(200L); } catch( InterruptedException i) {}   // Wait 200 milli seconds, until all updates are processed ...

      String xmlKey = "<key oid='" + publishOid + "' queryType='EXACT'>\n</key>";
      String qos = "<qos></qos>";
      try {
         EraseReturnQos[] arr = this.senderConnection.erase(xmlKey, qos);
         if (arr.length != 1) log.severe("Erased " + arr.length + " messages:");
      } catch(XmlBlasterException e) { log.severe("XmlBlasterException: " + e.getMessage()); }
      //checkContent(false);

      this.senderConnection.disconnect(null);
      this.senderConnection = null;

      try { Thread.sleep(500L); } catch( InterruptedException i) {}    // Wait some time
      EmbeddedXmlBlaster.stopXmlBlaster(this.serverThread);
      this.serverThread = null;
      // reset to default server bootstrapPort (necessary if other tests follow in the same JVM).
      Util.resetPorts();
   }


   /**
    * Publish a persistent message.
    * <p />
    */
   public void sendPersistent()
   {
      if (log.isLoggable(Level.FINE)) log.fine("Testing a persistent message ...");

      String xmlKey = "<key oid='" + publishOid + "' contentMime='text/plain' contentMimeExtended='2.0' domain='RUGBY'/>";

      String qos = "<qos>" +
                   "   <persistent />" +
                   "</qos>";

      try {
         MsgUnit msgUnit = new MsgUnit(xmlKey, senderContent.getBytes(), qos);
         String returnedOid = this.senderConnection.publish(msgUnit).getKeyOid();
         assertEquals("Retunred oid is invalid", publishOid, returnedOid);
         log.info("Sending of '" + senderContent + "' done, returned oid=" + publishOid);
      } catch(XmlBlasterException e) {
         log.severe("publish() XmlBlasterException: " + e.getMessage());
         assertTrue("publish - XmlBlasterException: " + e.getMessage(), false);
      }

      assertEquals("numReceived after sending", 0, this.updateInterceptor.waitOnUpdate(1000L, publishOid, Constants.STATE_OK));
      assertEquals("", 0, this.updateInterceptor.count());
   }


   /**
    * TEST: Publish a persistent message.
    * <p />
    */
   public void testPersistent()
   {
      sendPersistent();
      checkContent(true);
     
      senderContent = senderContent + " again";
      sendPersistent();
      RestartTestServer();

      doLogin();

      try {
         this.senderConnection.subscribe("<key oid='" + publishOid + "'/>", "<qos/>");
         log.info("Subscribe done");
      } catch(XmlBlasterException e) {
         log.severe("subscribe() XmlBlasterException: " + e.getMessage());
         fail("subscribe - XmlBlasterException: " + e.getMessage());
      }

      assertEquals("", 1, this.updateInterceptor.waitOnUpdate(2000L, publishOid, Constants.STATE_OK));
      //this.updateInterceptor.compareToReceived(sentArr, null);
      //this.updateInterceptor.compareToReceived(sentQos);

      Msg msg = this.updateInterceptor.getMsgs()[0];

      assertEquals("Wrong sender", senderName, msg.getUpdateQos().getSender().getLoginName());
      assertEquals("Wrong oid of message returned", publishOid, msg.getUpdateKey().getOid());
      assertEquals("Wrong mime of message returned", "text/plain", msg.getUpdateKey().getContentMime());
      assertEquals("Wrong extended mime of message returned", "2.0", msg.getUpdateKey().getContentMimeExtended());
      assertEquals("Wrong domain of message returned", "RUGBY", msg.getUpdateKey().getDomain());
      assertEquals("Message content is corrupted", new String(senderContent), msg.getContentStr());

      this.updateInterceptor.clear();
      //checkContent(true);
   }

   /**
    * a dirty hack to restart the Test Server between send and checkcontent.
    * - disconnect(null)
    * - stopXmlBlaster()
    * - delay()
    * - startXmlBlaster()
    * - delay()
    * - login()
    * <p />
    */
   public void RestartTestServer() {
      long    delay4Server = 4000L ;
      log.info("Restarting Test Server" );

      try {
         this.senderConnection.disconnect(null);
         EmbeddedXmlBlaster.stopXmlBlaster(serverThread);
         serverThread = null ;
         Util.delay( delay4Server );    // Wait some time

         serverThread = EmbeddedXmlBlaster.startXmlBlaster(Util.getOtherServerPorts(serverPort));
         Util.delay( delay4Server );    // Wait some time

         Global globSender = Util.getOtherServerPorts(glob, serverPort);
         this.senderConnection = globSender.getXmlBlasterAccess(); // Find orb
         ConnectQos qos = new ConnectQos(globSender, senderName, senderPasswd);
         this.updateInterceptor = new MsgInterceptor(globSender, log, null);
         this.senderConnection.connect(qos, this.updateInterceptor);
      }
      catch (XmlBlasterException e) {
         log.warning("setUp() - login failed");
      }
      catch (Exception e) {
         log.severe(e.toString());
         e.printStackTrace();
      }
   }

   /**
    * If the FileDriver is used, check if the correct content is written.
    * @deprecated FileDriver is deprecated
    */
   void checkContent(boolean checkContent)
   {
      String driverType = glob.getProperty().get("Persistence.Driver.Type", (String)null);
      if (driverType == null || !driverType.equals("filestore")) {
         log.info("Sorry, can't check persistence store, only checks for FileDriver is implemented");
         return;
      }

      String path = glob.getProperty().get("Persistence.Path", (String)null);
      if (path == null) {
         log.info("Sorry, xmlBlaster is running memory based only, no checks possible");
         return;
      }

      if (checkContent) {

         log.info("Checking content of message " + publishOid);

         try {
            String persistenceContent = FileLocator.readAsciiFile(path, publishOid);
            assertEquals("Written content is corrupted", senderContent, persistenceContent);
         }
         catch (Exception e) {
            assertTrue("Couldn't read file " + FileLocator.concatPath(path, publishOid), false);
         }
      }
      else { // Check if erased
         java.io.File f = new java.io.File(path, publishOid);
         if (f.exists())
            assertTrue("File " + FileLocator.concatPath(path, publishOid) + " is not erased properly", false);
      }
   }

   /**
    * Method is used by TestRunner to load these tests
    */
   public static Test suite()
   {
      TestSuite suite= new TestSuite();
      suite.addTest(new TestPersistence2(new Global(), "testPersistent"));
      return suite;
   }

   /**
    * Invoke: java org.xmlBlaster.test.persistence.TestPersistence2
    * @deprecated Use the TestRunner from the testsuite to run it:<p />
    * <pre>   java -Djava.compiler= junit.textui.TestRunner org.xmlBlaster.test.persistence.TestPersistence2</pre>
    */
   public static void main(String args[])
   {
      Global glob = new Global();
      if (glob.init(args) != 0) {
         System.err.println(ME + ": Init failed");
         System.exit(1);
      }
      TestPersistence2 testSub = new TestPersistence2(glob, "TestPersistence2");
      testSub.setUp();
      testSub.testPersistent();
      testSub.tearDown();
   }
}
TOP

Related Classes of org.xmlBlaster.test.persistence.TestPersistence2

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.