1 package org.xmlBlaster.test.classtest;
  2 
  3 import org.custommonkey.xmlunit.XMLTestCase;
  4 import org.xmlBlaster.util.Global;
  5 import org.xmlBlaster.util.qos.ClientProperty;
  6 import org.xmlBlaster.util.qos.MsgQosData;
  7 import org.xmlBlaster.util.qos.MsgQosSaxFactory;
  8 import org.xmlBlaster.util.def.Constants;
  9 import org.xmlBlaster.util.def.MethodName;
 10 
 11 /**
 12  * Test ClientProperty. 
 13  * <p />
 14  * All methods starting with 'test' and without arguments are invoked automatically
 15  * <p />
 16  * TODO: http://xmlunit.sourceforge.net/
 17  * <p />
 18  * Invoke: java -Djava.compiler= junit.textui.TestRunner -noloading org.xmlBlaster.test.classtest.ClientPropertyTest
 19  * @see org.xmlBlaster.util.qos.ClientProperty
 20  * @see <a href="http://www.xmlblaster.org/xmlBlaster/doc/requirements/engine.qos.clientProperty.html">The client.qos.clientProperty requirement</a>
 21  */
 22 public class ClientPropertyTest extends XMLTestCase {
 23    protected Global glob;
 24    int counter = 0;
 25 
 26    public ClientPropertyTest(String name) {
 27       super(name);
 28    }
 29 
 30    protected void setUp() {
 31       this.glob = Global.instance();
 32 
 33    }
 34 
 35    public void testClientProperty() throws Exception {
 36       ClientProperty clientProperty = new ClientProperty("StringKey", null, null);
 37       assertEquals("", "StringKey", clientProperty.getName());
 38       assertEquals("", null, clientProperty.getType());
 39       assertEquals("", null, clientProperty.getEncoding());
 40       assertEquals("", false, clientProperty.isBase64());
 41       assertEquals("", null, clientProperty.getValueRaw());
 42       assertEquals("", null, clientProperty.getStringValue());
 43       assertEquals("", null, clientProperty.getValueRaw());
 44 
 45       String xml = clientProperty.toXml();
 46       assertXpathExists("/clientProperty[@name='StringKey']", xml);
 47       System.out.println(xml);
 48    }
 49 
 50    public void testClientPropertyEncoding() throws Exception {
 51       {
 52          ClientProperty clientProperty = new ClientProperty("StringKey", "String", Constants.ENCODING_BASE64);
 53          assertEquals("", "StringKey", clientProperty.getName());
 54          assertEquals("", "String", clientProperty.getType());
 55          assertEquals("", Constants.ENCODING_BASE64, clientProperty.getEncoding());
 56          assertEquals("", true, clientProperty.isBase64());
 57          assertEquals("", null, clientProperty.getStringValue());
 58          assertEquals("", null, clientProperty.getValueRaw());
 59 
 60          String xml = clientProperty.toXml();
 61          assertXpathExists("/clientProperty[@name='StringKey']", xml);
 62          assertXpathExists("/clientProperty[@type='String']", xml);
 63          assertXpathExists("/clientProperty[@encoding='"+Constants.ENCODING_BASE64+"']", xml);
 64          System.out.println(xml);
 65          assertXMLEqual("comparing test xml to control xml",
 66                         "<clientProperty name='StringKey' type='String' encoding='base64'/>",
 67                         xml);
 68 
 69          clientProperty.setValue("BlaBlaBla");
 70          xml = clientProperty.toXml();
 71          assertEquals("Base64?", "QmxhQmxhQmxh", clientProperty.getValueRaw());
 72          assertEquals("", "BlaBlaBla", clientProperty.getStringValue());
 73          System.out.println(xml);
 74          assertXMLEqual("comparing test xml to control xml",
 75                         "<clientProperty name='StringKey' type='String' encoding='base64'>QmxhQmxhQmxh</clientProperty>",
 76                         xml);
 77          try {
 78             assertEquals("", 99, clientProperty.getIntValue());
 79             fail("String to int not possible");
 80          }
 81          catch(java.lang.NumberFormatException e) {
 82             System.out.println("OK Expected exception NumberFormatException");
 83          }
 84          System.out.println(xml);
 85       }
 86    }
 87 
 88    public void testClientPropertyCtorEncoding() throws Exception {
 89       {
 90          String value = "Bla<<";
 91          ClientProperty clientProperty = new ClientProperty("StringKey",
 92                                           ClientProperty.getPropertyType(value), null, value);
 93          assertEquals("", "StringKey", clientProperty.getName());
 94          assertEquals("", null, clientProperty.getType()); // defaults to String
 95          assertEquals("", Constants.ENCODING_BASE64, clientProperty.getEncoding());
 96          assertEquals("", true, clientProperty.isBase64());
 97          assertEquals("", value, clientProperty.getStringValue());
 98          //assertEquals("", null, clientProperty.getValueRaw());
 99 
100          String xml = clientProperty.toXml();
101          assertXpathExists("/clientProperty[@name='StringKey']", xml);
102          assertXpathExists("/clientProperty[@encoding='"+Constants.ENCODING_BASE64+"']", xml);
103          assertXMLEqual("comparing test xml to control xml",
104                         "<clientProperty name='StringKey' encoding='base64'>QmxhPDw=</clientProperty>",
105                         xml);
106          System.out.println(xml);
107       }
108    }
109 
110    public void testClientPropertyAutoEncoding() throws Exception {
111       ClientProperty clientProperty = new ClientProperty("StringKey", "", "");
112       assertEquals("", "StringKey", clientProperty.getName());
113       assertEquals("", "", clientProperty.getType());
114       assertEquals("", "", clientProperty.getEncoding());
115       assertEquals("", null, clientProperty.getStringValue());
116       assertEquals("", null, clientProperty.getValueRaw());
117 
118       clientProperty.setValue("Bla<BlaBla");
119       assertEquals("", Constants.ENCODING_BASE64, clientProperty.getEncoding());
120       String xml = clientProperty.toXml();
121       System.out.println(xml);
122       assertEquals("Base64?", "QmxhPEJsYUJsYQ==", clientProperty.getValueRaw());
123       assertEquals("", "Bla<BlaBla", clientProperty.getStringValue());
124       System.out.println(xml);
125 
126       clientProperty.setValue("Bla]]>BlaBla");
127       assertEquals("", Constants.ENCODING_BASE64, clientProperty.getEncoding());
128       xml = clientProperty.toXml();
129       //assertEquals("Base64?", "QmxhPD5CbGFCbGE=", clientProperty.getValueRaw());
130       assertEquals("", "Bla]]>BlaBla", clientProperty.getStringValue());
131       System.out.println(xml);
132    }
133 
134    public void testClientPropertyTypes() throws Exception {
135       {
136          ClientProperty clientProperty = new ClientProperty("key", "int", null);
137          assertEquals("", "key", clientProperty.getName());
138          assertEquals("", "int", clientProperty.getType());
139          assertEquals("", null, clientProperty.getEncoding());
140          assertEquals("", null, clientProperty.getValueRaw());
141          assertEquals("", null, clientProperty.getStringValue());
142          assertEquals("", null, clientProperty.getObjectValue());
143 
144          clientProperty.setValue("9988");
145          String xml = clientProperty.toXml();
146          assertEquals("", "9988", clientProperty.getValueRaw());
147          assertXMLEqual("comparing test xml to control xml",
148                         "<clientProperty name='key' type='int'>9988</clientProperty>",
149                         xml);
150          assertEquals("", 9988, clientProperty.getIntValue());
151          assertTrue("Expecting Integer", clientProperty.getObjectValue() instanceof Integer);
152          System.out.println(xml);
153       }
154       {
155          ClientProperty clientProperty = new ClientProperty("key", Constants.TYPE_BOOLEAN, null);
156          assertEquals("", "key", clientProperty.getName());
157          assertEquals("", "boolean", clientProperty.getType());
158          assertEquals("", null, clientProperty.getEncoding());
159          assertEquals("", null, clientProperty.getValueRaw());
160          assertEquals("", null, clientProperty.getStringValue());
161          assertEquals("", null, clientProperty.getObjectValue());
162 
163          clientProperty.setValue("true");
164          String xml = clientProperty.toXml();
165          assertEquals("", "true", clientProperty.getValueRaw());
166          assertXMLEqual("comparing test xml to control xml",
167                         "<clientProperty name='key' type='boolean'>true</clientProperty>",
168                         xml);
169          assertEquals("", true, clientProperty.getBooleanValue());
170          assertTrue("", clientProperty.getObjectValue() instanceof Boolean);
171          System.out.println(xml);
172       }
173       {
174          ClientProperty clientProperty = new ClientProperty("key", Constants.TYPE_DOUBLE, null);
175          assertEquals("", "key", clientProperty.getName());
176          assertEquals("", "double", clientProperty.getType());
177          assertEquals("", null, clientProperty.getEncoding());
178          assertEquals("", null, clientProperty.getValueRaw());
179          assertEquals("", null, clientProperty.getStringValue());
180          assertEquals("", null, clientProperty.getObjectValue());
181 
182          clientProperty.setValue("12.78");
183          String xml = clientProperty.toXml();
184          assertEquals("", "12.78", clientProperty.getValueRaw());
185          assertXMLEqual("comparing test xml to control xml",
186                         "<clientProperty name='key' type='double'>12.78</clientProperty>",
187                         xml);
188          assertTrue("", 12.78 == clientProperty.getDoubleValue());
189          assertTrue("", clientProperty.getObjectValue() instanceof Double);
190          System.out.println(xml);
191       }
192       {
193          ClientProperty clientProperty = new ClientProperty("key", Constants.TYPE_FLOAT, null);
194          assertEquals("", "key", clientProperty.getName());
195          assertEquals("", "float", clientProperty.getType());
196          assertEquals("", null, clientProperty.getEncoding());
197          assertEquals("", false, clientProperty.isBase64());
198          assertEquals("", null, clientProperty.getValueRaw());
199          assertEquals("", null, clientProperty.getStringValue());
200          assertEquals("", null, clientProperty.getObjectValue());
201 
202          clientProperty.setValue("12.54");
203          String xml = clientProperty.toXml();
204          assertEquals("", "12.54", clientProperty.getValueRaw());
205          assertXMLEqual("comparing test xml to control xml",
206                         "<clientProperty name='key' type='float'>12.54</clientProperty>",
207                         xml);
208          assertTrue("", (float)12.54 == clientProperty.getFloatValue());
209          assertTrue("", clientProperty.getObjectValue() instanceof Float);
210          System.out.println(xml);
211       }
212       {
213          ClientProperty clientProperty = new ClientProperty("key", Constants.TYPE_BYTE, null);
214          assertEquals("", "key", clientProperty.getName());
215          assertEquals("", "byte", clientProperty.getType());
216          assertEquals("", null, clientProperty.getEncoding());
217          assertEquals("", null, clientProperty.getValueRaw());
218          assertEquals("", null, clientProperty.getStringValue());
219          assertEquals("", null, clientProperty.getObjectValue());
220 
221          clientProperty.setValue("6");
222          String xml = clientProperty.toXml();
223          assertEquals("", "6", clientProperty.getValueRaw());
224          assertXMLEqual("comparing test xml to control xml",
225                         "<clientProperty name='key' type='byte'>6</clientProperty>",
226                         xml);
227          assertTrue("", (byte)6 == clientProperty.getByteValue());
228          assertTrue("", clientProperty.getObjectValue() instanceof Byte);
229          System.out.println(xml);
230       }
231       {
232          ClientProperty clientProperty = new ClientProperty("key", Constants.TYPE_LONG, null);
233          assertEquals("", "key", clientProperty.getName());
234          assertEquals("", "long", clientProperty.getType());
235          assertEquals("", null, clientProperty.getEncoding());
236          assertEquals("", null, clientProperty.getValueRaw());
237          assertEquals("", null, clientProperty.getStringValue());
238          assertEquals("", null, clientProperty.getObjectValue());
239 
240          clientProperty.setValue("888888");
241          String xml = clientProperty.toXml();
242          assertEquals("", "888888", clientProperty.getValueRaw());
243          assertXMLEqual("comparing test xml to control xml",
244                         "<clientProperty name='key' type='long'>888888</clientProperty>",
245                         xml);
246          assertTrue("", 888888 == clientProperty.getLongValue());
247          assertTrue("", clientProperty.getObjectValue() instanceof Long);
248          System.out.println(xml);
249       }
250       {
251          ClientProperty clientProperty = new ClientProperty("key", Constants.TYPE_SHORT, null);
252          assertEquals("", "key", clientProperty.getName());
253          assertEquals("", "short", clientProperty.getType());
254          assertEquals("", null, clientProperty.getEncoding());
255          assertEquals("", null, clientProperty.getValueRaw());
256          assertEquals("", null, clientProperty.getStringValue());
257          assertEquals("", null, clientProperty.getObjectValue());
258 
259          clientProperty.setValue("12");
260          String xml = clientProperty.toXml();
261          assertEquals("", "12", clientProperty.getValueRaw());
262          assertXMLEqual("comparing test xml to control xml",
263                         "<clientProperty name='key' type='short'>12</clientProperty>",
264                         xml);
265          assertTrue("", 12 == clientProperty.getShortValue());
266          assertTrue("", clientProperty.getObjectValue() instanceof Short);
267          System.out.println(xml);
268       }
269       {
270          ClientProperty clientProperty = new ClientProperty("key", null, null);
271          assertEquals("", "key", clientProperty.getName());
272          assertEquals("", null, clientProperty.getType());
273          assertEquals("", null, clientProperty.getEncoding());
274          assertEquals("", null, clientProperty.getValueRaw());
275          assertEquals("", null, clientProperty.getStringValue());
276          assertEquals("", null, clientProperty.getObjectValue());
277 
278          byte[] bb = new byte[6];
279          bb[0] = 0;
280          bb[1] = 'A';
281          bb[2] = 0;
282          bb[3] = 99;
283          bb[4] = 0;
284          bb[5] = 0;
285          clientProperty.setValue(bb);
286          assertEquals("", "byte[]", clientProperty.getType());
287          assertEquals("", Constants.ENCODING_BASE64, clientProperty.getEncoding());
288          assertEquals("", true, clientProperty.isBase64());
289          String xml = clientProperty.toXml();
290          byte[] newVal = clientProperty.getBlobValue();
291          for (int i=0; i<bb.length; i++) 
292             assertTrue("Index #"+i, bb[i] == newVal[i]);
293          assertXpathExists("/clientProperty[@name='key']", xml);
294          assertXpathExists("/clientProperty[@type='"+Constants.TYPE_BLOB+"']", xml);
295          assertXpathExists("/clientProperty[@encoding='"+Constants.ENCODING_BASE64+"']", xml);
296          assertEquals("", "AEEAYwAA", clientProperty.getValueRaw());
297          assertXMLEqual("comparing test xml to control xml",
298                         "<clientProperty name='key' type='byte[]' encoding='base64'>AEEAYwAA</clientProperty>",
299                         xml);
300          assertTrue("", clientProperty.getObjectValue() instanceof byte[]);
301          newVal = (byte[])clientProperty.getObjectValue();
302          for (int i=0; i<bb.length; i++) 
303             assertTrue("Index #"+i, bb[i] == newVal[i]);
304          System.out.println(xml);
305       }
306    }
307 
308    public void testClientPropertyParsing() throws Exception {
309       
310       String xml =  "<qos>\n" +
311          "  <isPublish/>\n" + 
312          "  <clientProperty name='StringKey' type=''><![CDATA[Bla<BlaBla]]></clientProperty>\n" + 
313          "</qos>";      
314       
315       MsgQosSaxFactory parser = new MsgQosSaxFactory(this.glob);
316       MsgQosData data = parser.readObject(xml);
317       ClientProperty prop = data.getClientProperty("StringKey");
318       System.out.println(prop.toXml());
319       assertEquals("", true, prop.isBase64());
320       
321    }
322 
323    public void testClientPropertyParsingWithUntrimmedSpaces() throws Exception {
324       MsgQosData data = new MsgQosData(this.glob, MethodName.PUBLISH);
325       String name1 = "leadingSpaces";
326       String val1 = "  val1";
327       String name2 = "endingSpaces";
328       String val2 = "val2  ";
329       String name3 = "bothSpaces";
330       String val3 = "  val3  ";
331       String name4 = "singleSpace";
332       String val4 = " val4 ";
333       ClientProperty prop1 = new ClientProperty(name1, null, null, val1);
334       ClientProperty prop2 = new ClientProperty(name2, null, null, val2);
335       ClientProperty prop3 = new ClientProperty(name3, null, null, val3);
336       ClientProperty prop4 = new ClientProperty(name4, null, null, val4);
337       data.addClientProperty(prop1);
338       data.addClientProperty(prop2);
339       data.addClientProperty(prop3);
340       data.addClientProperty(prop4);
341       String xml = data.toXml();
342       System.out.println("The content of the qos is '" + xml + "'");
343       MsgQosSaxFactory parser = new MsgQosSaxFactory(this.glob);
344       MsgQosData data1 = parser.readObject(xml);
345       assertEquals(name1, val1, data1.getClientProperty(name1).getStringValue());
346       assertEquals(name2, val2, data1.getClientProperty(name2).getStringValue());
347       assertEquals(name3, val3, data1.getClientProperty(name3).getStringValue());
348       assertEquals(name4, val4, data1.getClientProperty(name4).getStringValue());
349       
350    }
351 
352    public void testClientPropertyEnclosedXmlTree() throws Exception {
353       
354       String xml =  "<qos>\n" +
355          "  <isPublish/>\n" + 
356          "  <clientProperty name='StringKey' type=''><BlaBla attr1='val1' attr2=' val2 '> Something </BlaBla></clientProperty>\n" + 
357          "</qos>";      
358       
359       MsgQosSaxFactory parser = new MsgQosSaxFactory(this.glob);
360       MsgQosData data = parser.readObject(xml);
361       ClientProperty prop = data.getClientProperty("StringKey");
362       System.out.println(prop.toXml());
363       // assertEquals("", true, prop.isBase64());
364       
365       
366       String val = "<BlaBla attr1='val1' attr2=' val2 '> Something </BlaBla>";
367       prop = new ClientProperty("StringKey", null, Constants.ENCODING_FORCE_PLAIN, val);
368       System.out.println(prop.toXml());
369 
370       xml =  "<qos>\n" +
371       "  <isPublish/>\n" + 
372       "  <clientProperty name='StringKey' type='' encoding='forcePlain'><qos attr1='val1' attr2=' val2 '> Something </qos></clientProperty>\n" + 
373       "</qos>";      
374       
375       parser = new MsgQosSaxFactory(this.glob);
376       data = parser.readObject(xml);
377       prop = data.getClientProperty("StringKey");
378       System.out.println(prop.toXml());
379       
380       xml =  "<qos>\n" +
381       "  <isPublish/>\n" + 
382       "  <clientProperty name='StringKey' type='' encoding='forcePlain'><clientProperty name='aaa' type='' encoding=''>Something</clientProperty></clientProperty>\n" + 
383       "</qos>";      
384       
385       parser = new MsgQosSaxFactory(this.glob);
386       data = parser.readObject(xml);
387       prop = data.getClientProperty("StringKey");
388       System.out.println(prop.toXml());
389       
390       System.out.println("END");
391    }
392 
393    /**
394     * <pre>
395     *  java org.xmlBlaster.test.classtest.ClientPropertyTest
396     * </pre>
397     */
398    public static void main(String args[])
399    {
400       try {
401          ClientPropertyTest testSub = new ClientPropertyTest("ClientPropertyTest");
402          testSub.setUp();
403          testSub.testClientPropertyEnclosedXmlTree();
404          testSub.testClientProperty();
405          testSub.testClientPropertyEncoding();
406          testSub.testClientPropertyCtorEncoding();
407          testSub.testClientPropertyTypes();
408          testSub.testClientPropertyAutoEncoding();
409          testSub.testClientPropertyParsing();
410          testSub.testClientPropertyParsingWithUntrimmedSpaces();
411          testSub.tearDown();
412       }
413       catch(Throwable e) {
414          e.printStackTrace();
415          fail(e.toString());
416       }
417    }
418 }


syntax highlighted by Code2HTML, v. 0.9.1