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