1 /*------------------------------------------------------------------------------
  2 Name:      TestGetRegexFilter.java
  3 Project:   xmlBlaster.org
  4 Copyright: xmlBlaster.org, see xmlBlaster-LICENSE file
  5 Comment:   Login/logout test for xmlBlaster
  6 Version:   $Id: TestGetRegexFilter.java 14833 2006-03-06 21:38:58Z laghi $
  7 ------------------------------------------------------------------------------*/
  8 package org.xmlBlaster.test.mime;
  9 
 10 import java.util.logging.Logger;
 11 import java.util.logging.Level;
 12 import org.xmlBlaster.util.Global;
 13 import org.xmlBlaster.util.XmlBlasterException;
 14 import org.xmlBlaster.client.qos.ConnectQos;
 15 import org.xmlBlaster.client.qos.DisconnectQos;
 16 import org.xmlBlaster.client.I_XmlBlasterAccess;
 17 import org.xmlBlaster.client.qos.GetQos;
 18 import org.xmlBlaster.client.qos.EraseReturnQos;
 19 import org.xmlBlaster.util.MsgUnit;
 20 import org.xmlBlaster.util.qos.AccessFilterQos;
 21 import org.xmlBlaster.util.EmbeddedXmlBlaster;
 22 
 23 import org.xmlBlaster.test.Util;
 24 import junit.framework.*;
 25 
 26 
 27 /**
 28  * This client tests the <a href="http://www.xmlblaster.org/xmlBlaster/doc/requirements/mime.plugin.accessfilter.html">
 29  * access filter plugin framework</a> on get() invocations. 
 30  * <p />
 31  * Here we test the regular expression plugin which allows us to select messages
 32  * when the message content matches a given regular expression.
 33  * <p />
 34  * We start our own xmlBlaster server in a thread.
 35  * This client may be invoked multiple time on the same xmlBlaster server,
 36  * as it cleans up everything after his tests are done.
 37  * <p>
 38  * Invoke examples:<br />
 39  * <pre>
 40  *    java junit.textui.TestRunner org.xmlBlaster.test.mime.TestGetRegexFilter
 41  *    java junit.swingui.TestRunner org.xmlBlaster.test.mime.TestGetRegexFilter
 42  * </pre>
 43  */
 44 public class TestGetRegexFilter extends TestCase
 45 {
 46    private static String ME = "Tim";
 47    private final Global glob;
 48    private static Logger log = Logger.getLogger(TestGetRegexFilter.class.getName());
 49 
 50    private I_XmlBlasterAccess con = null;
 51    private String name;
 52    private String passwd = "secret";
 53    private EmbeddedXmlBlaster serverThread;
 54    private int serverPort = 7604;
 55 
 56    /**
 57     * Constructs the TestGetRegexFilter object.
 58     * <p />
 59     * @param testName   The name used in the test suite
 60     * @param name       The name to login to the xmlBlaster
 61     */
 62    public TestGetRegexFilter(Global glob, String testName, String name)
 63    {
 64       super(testName);
 65       this.glob = glob;
 66 
 67       this.name = name;
 68    }
 69 
 70    /**
 71     * Sets up the fixture.
 72     * <p />
 73     * We start an own xmlBlaster server in a separate thread,
 74     * it is configured to load our simple demo MIME filter plugin.
 75     * <p />
 76     * Then we connect as a client
 77     */
 78    protected void setUp()
 79    {
 80       // We register here the demo plugin with xmlBlaster server, supplying an argument to the plugin
 81       String[] args = new String[10];
 82       args[0] = "-bootstrapPort";        // For all protocol we may use set an alternate server port
 83       args[1] = "" + serverPort;
 84       args[2] = "-plugin/socket/port";
 85       args[3] = "" + (serverPort-1);
 86       args[4] = "-plugin/rmi/registryPort";
 87       args[5] = "" + (serverPort-2);
 88       args[6] = "-plugin/xmlrpc/port";
 89       args[7] = "" + (serverPort-3);
 90       args[8] = "-MimeAccessPlugin[GnuRegexFilter][1.0]";
 91       args[9] = "org.xmlBlaster.engine.mime.regex.GnuRegexFilter";
 92       glob.init(args);
 93 
 94       serverThread = EmbeddedXmlBlaster.startXmlBlaster(args);
 95       log.info("XmlBlaster is ready for testing subscribe MIME filter");
 96 
 97       try {
 98          log.info("Connecting ...");
 99          con = glob.getXmlBlasterAccess();
100          ConnectQos qos = new ConnectQos(glob, name, passwd);
101          con.connect(qos, null); // Login to xmlBlaster
102       }
103       catch (Exception e) {
104          Thread.currentThread().dumpStack();
105          log.severe("Can't connect to xmlBlaster: " + e.toString());
106       }
107    }
108 
109    /**
110     * Tears down the fixture.
111     * <p />
112     * cleaning up .... erase() the previous message OID and logout
113     */
114    protected void tearDown()
115    {
116       try { Thread.sleep(200L); } catch( InterruptedException i) {}   // Wait 200 milli seconds, until all updates are processed ...
117 
118       try {
119          EraseReturnQos[] arr = con.erase("<key oid='MSG'/>", null);
120          assertEquals("Erased", 1, arr.length);
121       } catch(XmlBlasterException e) { fail("XmlBlasterException: " + e.getMessage()); }
122 
123       con.disconnect(null);
124       con = null;
125 
126       try { Thread.sleep(500L); } catch( InterruptedException i) {}    // Wait some time
127       EmbeddedXmlBlaster.stopXmlBlaster(this.serverThread);
128       this.serverThread = null;
129 
130       // reset to default server port (necessary if other tests follow in the same JVM).
131       Util.resetPorts();
132    }
133 
134    /**
135     * First we send a message which matches our regular expression and should be returned to us,
136     * then we send a message with a different content which should be filtered
137     */
138    public void testFilter()
139    {
140       String regPattern = "a*b"; // String with any numbers of 'a' and ending with one 'b'
141 
142       log.info("TEST 1: The message content matches the pattern");
143       String content = "aaaab"; // check this string
144       try {
145          con.publish(new MsgUnit("<key oid='MSG'/>", content.getBytes(), null));
146       } catch(XmlBlasterException e) {
147          log.warning("XmlBlasterException: " + e.getMessage());
148          assertTrue("publish - XmlBlasterException: " + e.getMessage(), false);
149       }
150 
151       try {
152          GetQos qos = new GetQos(glob);
153          qos.addAccessFilter(new AccessFilterQos(glob, "GnuRegexFilter", "1.0", regPattern));
154 
155          MsgUnit[] msgUnits = con.get("<key oid='MSG'/>", qos.toXml());
156          assertTrue("Expected one returned message", msgUnits!=null);
157          assertTrue("Expected exactly one returned message", msgUnits.length==1);
158          assertTrue("Message content in corrupted '" + new String(msgUnits[0].getContent()) + "' versus '" + content + "'",
159                 msgUnits[0].getContent().length == content.length());
160          log.info("Success: Got one message.");
161       } catch(XmlBlasterException e) {
162          log.warning("XmlBlasterException: " + e.getMessage());
163          assertTrue("get - XmlBlasterException: " + e.getMessage(), false);
164       }
165 
166 
167       log.info("TEST 2: The message content does NOT match the pattern");
168       try {
169          con.publish(new MsgUnit("<key oid='MSG'/>", new String("aaaaaac").getBytes(), null));
170       } catch(XmlBlasterException e) {
171          log.warning("XmlBlasterException: " + e.getMessage());
172          assertTrue("publish - XmlBlasterException: " + e.getMessage(), false);
173       }
174 
175       try {
176          GetQos qos = new GetQos(glob);
177          qos.addAccessFilter(new AccessFilterQos(glob, "GnuRegexFilter", "1.0", regPattern));
178 
179          MsgUnit[] msgUnits = con.get("<key oid='MSG'/>", qos.toXml());
180          if (msgUnits.length > 0) log.info(msgUnits[0].toXml());
181          assertTrue("Expected zero returned message", msgUnits!=null);
182          assertEquals("Expected zero returned message", 0, msgUnits.length);
183          log.info("Success: Got no message.");
184       } catch(XmlBlasterException e) {
185          log.warning("XmlBlasterException: " + e.getMessage());
186          assertTrue("get - XmlBlasterException: " + e.getMessage(), false);
187       }
188 
189       log.info("Success in testFilter()");
190    }
191 
192    /**
193     * Method is used by TestRunner to load these tests
194     */
195    public static Test suite()
196    {
197        TestSuite suite= new TestSuite();
198        String loginName = "Tim";
199        suite.addTest(new TestGetRegexFilter(new Global(), "testFilter", "Tim"));
200        return suite;
201    }
202 
203    /**
204     * Invoke: 
205     * <pre>
206     *   java org.xmlBlaster.test.mime.TestGetRegexFilter
207     *   java -Djava.compiler= junit.textui.TestRunner org.xmlBlaster.test.mime.TestGetRegexFilter
208     * <pre>
209     */
210    public static void main(String args[])
211    {
212       Global glob = new Global();
213       if (glob.init(args) != 0) {
214          System.err.println(ME + ": Init failed");
215          System.exit(1);
216       }
217       TestGetRegexFilter testSub = new TestGetRegexFilter(glob, "TestGetRegexFilter", "Tim");
218       testSub.setUp();
219       testSub.testFilter();
220    }
221 }


syntax highlighted by Code2HTML, v. 0.9.1