KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > test > javax > management > modelmbean > DescriptorSupportTest


1 /*
2  * Copyright (C) The MX4J Contributors.
3  * All rights reserved.
4  *
5  * This software is distributed under the terms of the MX4J License version 1.0.
6  * See the terms of the MX4J License in the documentation provided with this software.
7  */

8
9 package test.javax.management.modelmbean;
10
11 import java.io.ByteArrayInputStream JavaDoc;
12 import java.io.ByteArrayOutputStream JavaDoc;
13 import java.io.ObjectInputStream JavaDoc;
14 import java.io.ObjectOutputStream JavaDoc;
15 import java.util.ArrayList JavaDoc;
16 import java.util.Arrays JavaDoc;
17 import java.util.HashSet JavaDoc;
18 import java.util.Iterator JavaDoc;
19 import java.util.List JavaDoc;
20 import java.util.Set JavaDoc;
21 import javax.management.Descriptor JavaDoc;
22 import javax.management.RuntimeOperationsException JavaDoc;
23 import javax.management.modelmbean.DescriptorSupport JavaDoc;
24 import javax.management.modelmbean.XMLParseException JavaDoc;
25
26 import test.MX4JTestCase;
27
28 /**
29  * @version $Revision: 1.19 $
30  */

31
32 public class DescriptorSupportTest extends MX4JTestCase
33 {
34    public DescriptorSupportTest(String JavaDoc s)
35    {
36       super(s);
37    }
38
39    public void testValid() throws Exception JavaDoc
40    {
41       // Create a valid Descriptor object
42
String JavaDoc[] attributes = {"name=mytest", "descriptorType=MBean", "role=constructor"};
43       new DescriptorSupport JavaDoc(attributes);
44
45       // Try a different constructor
46
String JavaDoc[] names = {"name", "descriptorType", "role", "persistPolicy", "persistPeriod"};
47       String JavaDoc[] values = {"mytest", "MBean", "constructor", "Never", "1"};
48       new DescriptorSupport JavaDoc(names, values);
49
50       // Create a valid Descriptor object. Check that persistPolicy's value is not case sensitive
51
names = new String JavaDoc[]{"name", "descriptorType", "persistPolicy"};
52       values = new String JavaDoc[]{"mytest", "MBean", "never"};
53
54       new DescriptorSupport JavaDoc(names, values);
55    }
56
57    public void testInvalid() throws Exception JavaDoc
58    {
59       // Create an invalid Descriptor object. Check persist policy
60
String JavaDoc[] names = {"name", "descriptorType", "role", "persistPolicy"};
61       String JavaDoc[] values = {"mytest", "MBean", "constructor", "Something"};
62
63       try
64       {
65          new DescriptorSupport JavaDoc(names, values);
66          fail("Descriptor support object created with invalid attributes");
67       }
68       catch (RuntimeOperationsException JavaDoc ex)
69       {
70       }
71
72       // Create an invalid Descriptor object. Check persistPeriod
73
// Persist period should be bigger or equal than -1
74
names = new String JavaDoc[]{"name", "descriptorType", "persistPolicy", "persistPeriod"};
75       values = new String JavaDoc[]{"mytest", "MBean", "Never", "-2"};
76
77       try
78       {
79          new DescriptorSupport JavaDoc(names, values);
80          fail("Descriptor support object created with invalid persistPeriod");
81       }
82       catch (RuntimeOperationsException JavaDoc ex)
83       {
84       }
85
86       // Create an invalid Descriptor object. Check visiblity
87
// visibility should be between 1 and 4
88
names = new String JavaDoc[]{"name", "descriptorType", "visibility"};
89       values = new String JavaDoc[]{"mytest", "MBean", "0"};
90
91       try
92       {
93          new DescriptorSupport JavaDoc(names, values);
94          fail("Descriptor support object created with invalid visiblity");
95       }
96       catch (RuntimeOperationsException JavaDoc ex)
97       {
98       }
99
100       // Create an invalid Descriptor object. Check visiblity
101
// visibility should be between 1 and 4
102
names = new String JavaDoc[]{"name", "descriptorType", "visibility"};
103       values = new String JavaDoc[]{"mytest", "MBean", "5"};
104
105       try
106       {
107          new DescriptorSupport JavaDoc(names, values);
108          fail("Descriptor support object created with invalid visiblity");
109       }
110       catch (RuntimeOperationsException JavaDoc ex)
111       {
112       }
113    }
114
115    public void testIsValid() throws Exception JavaDoc
116    {
117       // Test for bug #686306
118
String JavaDoc[] names = {"name", "descriptorType", "persistPolicy", "persistPeriod"};
119       String JavaDoc[] values = {"test", "mbean", "AlwaYs", "-1"};
120
121       DescriptorSupport JavaDoc ds = new DescriptorSupport JavaDoc(names, values);
122
123       assertTrue(ds.isValid());
124    }
125
126    public void testSeverityField() throws Exception JavaDoc
127    {
128       // Test for bug #744423 and #775742
129
String JavaDoc[] names = {"name", "descriptorType", "severity"};
130       String JavaDoc[] values = {"test", "mbean", "0"};
131
132       DescriptorSupport JavaDoc ds = new DescriptorSupport JavaDoc(names, values);
133       assertTrue(ds.isValid());
134
135       names = new String JavaDoc[]{"name", "descriptorType", "severity"};
136       values = new String JavaDoc[]{"test", "mbean", "6"};
137
138       ds = new DescriptorSupport JavaDoc(names, values);
139       assertTrue(ds.isValid());
140    }
141
142    public void testCaseInsensitiveFieldNames() throws Exception JavaDoc
143    {
144       String JavaDoc[] fields = {"descriptorType", "myField"};
145       Object JavaDoc[] values = {"MBean", "top secret"};
146       DescriptorSupport JavaDoc ds = new DescriptorSupport JavaDoc(fields, values);
147       assertEquals("Expecting 'descriptorType' value to be 'mbean'", (String JavaDoc)ds.getFieldValue("DESCRIPTORTYPE"), "MBean");
148       assertEquals("Expecting 'myField' value to be 'top secret'", (String JavaDoc)ds.getFieldValue("MYfIELD"), "top secret");
149
150       fields = new String JavaDoc[]{"name", "descriptorType", "deleteMe"};
151       values = new String JavaDoc[]{"testCaseInsensitiveFieldNames", "MBean", "nothing of consequence"};
152       ds = new DescriptorSupport JavaDoc(fields, values);
153       ds.removeField("DELETEmE");
154       String JavaDoc[] fieldnames = ds.getFields();
155       List JavaDoc fieldlist = new ArrayList JavaDoc();
156       for (int i = 0; i < fieldnames.length; i++) fieldlist.add(fieldnames[i]);
157       int fieldcount = fieldnames.length;
158       assertEquals("Expecting 'deleteMe' to be gone", fieldcount, 2);
159       assertFalse(fieldlist.contains("deleteme"));
160    }
161
162    public void testCaseInsensitiveFieldValues() throws Exception JavaDoc
163    {
164       String JavaDoc[] fields = {"descriptorType", "persistPolicy", "log"};
165       String JavaDoc[] values = {"mBEAN", "oNuPDATE", "TRUE"};
166       new DescriptorSupport JavaDoc(fields, values);
167    }
168
169    public void testCaseSensitivityPreserved() throws Exception JavaDoc
170    {
171       String JavaDoc[] names = {"Name", "DescriptorType"};
172       String JavaDoc[] values = {"test", "mbean"};
173       DescriptorSupport JavaDoc descriptor = new DescriptorSupport JavaDoc(names, values);
174
175       // Check case insensitivity on get
176
String JavaDoc value = (String JavaDoc)descriptor.getFieldValue("name");
177       assertNotNull(value);
178       assertEquals(value, values[0]);
179       value = (String JavaDoc)descriptor.getFieldValue("descriptorType");
180       assertNotNull(value);
181       assertEquals(value, values[1]);
182
183       // Be sure case is preserved
184
String JavaDoc[] fieldNames = descriptor.getFieldNames();
185       assertNotNull(fieldNames);
186       assertEquals(fieldNames.length, 2);
187       if (!fieldNames[0].equals(names[0]) && !fieldNames[0].equals(names[1])) fail();
188       if (!fieldNames[1].equals(names[0]) && !fieldNames[1].equals(names[1])) fail();
189
190       // Check serialization works
191
ByteArrayOutputStream JavaDoc baos = new ByteArrayOutputStream JavaDoc();
192       ObjectOutputStream JavaDoc oos = new ObjectOutputStream JavaDoc(baos);
193       oos.writeObject(descriptor);
194       oos.close();
195       ByteArrayInputStream JavaDoc bais = new ByteArrayInputStream JavaDoc(baos.toByteArray());
196       ObjectInputStream JavaDoc ois = new ObjectInputStream JavaDoc(bais);
197       DescriptorSupport JavaDoc newDescriptor = (DescriptorSupport JavaDoc)ois.readObject();
198       value = (String JavaDoc)newDescriptor.getFieldValue("name");
199       assertNotNull(value);
200       assertEquals(value, values[0]);
201       // Be sure case is preserved
202
fieldNames = newDescriptor.getFieldNames();
203       assertNotNull(fieldNames);
204       assertEquals(fieldNames.length, 2);
205       if (!fieldNames[0].equals(names[0]) && !fieldNames[0].equals(names[1])) fail();
206       if (!fieldNames[1].equals(names[0]) && !fieldNames[1].equals(names[1])) fail();
207
208       // Check that removeField() really removes the field, no matter case sensitivity
209
descriptor.removeField("name");
210       value = (String JavaDoc)descriptor.getFieldValue("name");
211       assertNull(value);
212       fieldNames = descriptor.getFieldNames();
213       assertNotNull(fieldNames);
214       assertEquals(fieldNames.length, 1);
215       assertEquals(fieldNames[0], names[1]);
216    }
217
218    public void testDefaultFieldValuesSize() throws Exception JavaDoc
219    {
220       DescriptorSupport JavaDoc ds = new DescriptorSupport JavaDoc();
221       Object JavaDoc[] fields = ds.getFieldValues(null);
222       assertTrue("Expecting 0 length array", fields.length == 0);
223    }
224
225    public void testNullDescriptorConstructorParam() throws Exception JavaDoc
226    {
227       DescriptorSupport JavaDoc ds = new DescriptorSupport JavaDoc((DescriptorSupport JavaDoc)null);
228       assertNotNull(ds.getFields());
229       assertEquals("Expecting the descriptor to be empty", ds.getFields().length, 0);
230       assertFalse("Expecting the descriptor to be invalid", ds.isValid());
231    }
232
233    public void testNullStringConstructorParam() throws Exception JavaDoc
234    {
235       try
236       {
237          new DescriptorSupport JavaDoc((String JavaDoc)null);
238          fail("Expecting RuntimeOperationsException");
239       }
240       catch (RuntimeOperationsException JavaDoc x)
241       {
242          if (!(x.getTargetException() instanceof IllegalArgumentException JavaDoc))
243             fail("Target exception should be IllegalArgumentException");
244       }
245    }
246
247    public void testNullStringArrayCtorParm() throws Exception JavaDoc
248    {
249       String JavaDoc[] nullfields = null;
250       DescriptorSupport JavaDoc ds = new DescriptorSupport JavaDoc(nullfields);
251       Object JavaDoc[] fields = ds.getFieldValues(null);
252       assertEquals("Expecting 0 length array", fields.length, 0);
253    }
254
255    public void testToXMLString() throws Exception JavaDoc
256    {
257       String JavaDoc[] fields = {"wine", "vineyard", "year", "price"};
258       Object JavaDoc[] values = {"Amarone", "Allegrini", "1996", new Integer JavaDoc(90)};
259       DescriptorSupport JavaDoc ds = new DescriptorSupport JavaDoc(fields, values);
260       String JavaDoc xml = ds.toXMLString();
261       assertTrue("Descriptor from XML != Descriptor", descriptorsEqual(ds, (new DescriptorSupport JavaDoc(xml))));
262
263       fields = new String JavaDoc[]{"wine=Amarone", "vineyard=Allegrini", "year=1996"};
264       ds = new DescriptorSupport JavaDoc(fields);
265       xml = ds.toXMLString();
266       assertTrue("Descriptor from XML != Descriptor", descriptorsEqual(ds, (new DescriptorSupport JavaDoc(xml))));
267    }
268
269    public void testEmptyDescriptorToXMLString() throws Exception JavaDoc
270    {
271       DescriptorSupport JavaDoc ds = new DescriptorSupport JavaDoc();
272       String JavaDoc xml = ds.toXMLString();
273       assertEquals("Unexpected xml: " + xml, xml, "<Descriptor></Descriptor>");
274    }
275
276    public void testGetFieldsUnknownName()
277    {
278       String JavaDoc[] fields = {"wine", "vineyard", "year"};
279       String JavaDoc[] values = {"Amarone", "Allegrini", "1996"};
280       DescriptorSupport JavaDoc ds = new DescriptorSupport JavaDoc(fields, values);
281       Object JavaDoc fv = ds.getFieldValue("price");
282       assertNull(fv);
283       fields = new String JavaDoc[]{"wine", "vineyard", "year", "price"};
284       Object JavaDoc[] fvs = ds.getFieldValues(fields);
285       assertEquals("wrong number of values", fvs.length, fields.length);
286       assertNull(fvs[3]);
287    }
288
289    public void testGetFieldsEmptyArray()
290    {
291       String JavaDoc[] fields = {"wine", "vineyard", "year"};
292       String JavaDoc[] values = {"Amarone", "Allegrini", "1996"};
293       DescriptorSupport JavaDoc ds = new DescriptorSupport JavaDoc(fields, values);
294       Object JavaDoc[] fvs = ds.getFieldValues(new String JavaDoc[0]);
295       assertEquals("Expecting empty array", fvs.length, 0);
296    }
297
298    public void testRemoveField()
299    {
300       String JavaDoc[] fields = {"wine", "vineyard", "year", "price"};
301       Object JavaDoc[] values = {"Amarone", "Allegrini", "1996", new Integer JavaDoc(90)};
302       DescriptorSupport JavaDoc ds = new DescriptorSupport JavaDoc(fields, values);
303       assertEquals("Expecting " + fields.length + " names", ds.getFieldNames().length, fields.length);
304       ds.removeField("price");
305       assertEquals("Expecting " + (fields.length - 1) + " names", ds.getFieldNames().length, fields.length - 1);
306    }
307
308    public void testRemoveNonexistentFieldDoesntThrow()
309    {
310       String JavaDoc[] fields = {"wine", "vineyard", "year"};
311       String JavaDoc[] values = {"Amarone", "Allegrini", "1996"};
312       DescriptorSupport JavaDoc ds = new DescriptorSupport JavaDoc(fields, values);
313       ds.removeField("price");
314    }
315
316    public void testRemoveNullField()
317    {
318       String JavaDoc[] fields = {"wine", "vineyard", "year"};
319       String JavaDoc[] values = {"Amarone", "Allegrini", "1996"};
320       DescriptorSupport JavaDoc ds = new DescriptorSupport JavaDoc(fields, values);
321       ds.removeField(null);
322    }
323
324    public void testXMLStringConstructor() throws Exception JavaDoc
325    {
326       StringBuffer JavaDoc xmldescriptor = new StringBuffer JavaDoc();
327       xmldescriptor.append("<Descriptor>");
328       xmldescriptor.append("<field ");
329       xmldescriptor.append("name=\"bogus\" ");
330       xmldescriptor.append("value=\"xyzzy\"");
331       xmldescriptor.append(">");
332       xmldescriptor.append("</field>");
333       xmldescriptor.append("</Descriptor>");
334       DescriptorSupport JavaDoc ds = new DescriptorSupport JavaDoc(xmldescriptor.toString());
335       String JavaDoc xml = ds.toXMLString();
336       assertTrue("Descriptor from XML != Descriptor", descriptorsEqual(ds, (new DescriptorSupport JavaDoc(xml))));
337    }
338
339    public void testXMLSpecialStringConstructor() throws Exception JavaDoc
340    {
341       String JavaDoc[] fields = {"name=Lawrence", "nickname=(Larry)"};
342       DescriptorSupport JavaDoc ds = new DescriptorSupport JavaDoc(fields);
343       String JavaDoc xml = ds.toXMLString();
344       DescriptorSupport JavaDoc xmlds = new DescriptorSupport JavaDoc(xml);
345       assertTrue("Descriptors not equal", descriptorsEqual(ds, xmlds));
346    }
347
348    public void testXMLPrimitiveConstructor() throws Exception JavaDoc
349    {
350       StringBuffer JavaDoc xmldescriptor = new StringBuffer JavaDoc();
351       xmldescriptor.append("<Descriptor>");
352       xmldescriptor.append("<field ");
353       xmldescriptor.append("name=\"boolean\" ");
354       xmldescriptor.append("value=\"(java.lang.Boolean/true)\"");
355       xmldescriptor.append(">");
356       xmldescriptor.append("</field>");
357       xmldescriptor.append("<field ");
358       xmldescriptor.append("name=\"byte\" ");
359       xmldescriptor.append("value=\"(java.lang.Byte/127)\"");
360       xmldescriptor.append(">");
361       xmldescriptor.append("</field>");
362       xmldescriptor.append("<field ");
363       xmldescriptor.append("name=\"char\" ");
364       xmldescriptor.append("value=\"(java.lang.Character/k)\"");
365       xmldescriptor.append(">");
366       xmldescriptor.append("</field>");
367       xmldescriptor.append("<field ");
368       xmldescriptor.append("name=\"short\" ");
369       xmldescriptor.append("value=\"(java.lang.Short/4096)\"");
370       xmldescriptor.append(">");
371       xmldescriptor.append("</field>");
372       xmldescriptor.append("<field ");
373       xmldescriptor.append("name=\"int\" ");
374       xmldescriptor.append("value=\"(java.lang.Integer/16384)\"");
375       xmldescriptor.append(">");
376       xmldescriptor.append("</field>");
377       xmldescriptor.append("<field ");
378       xmldescriptor.append("name=\"long\" ");
379       xmldescriptor.append("value=\"(java.lang.Long/123456789)\"");
380       xmldescriptor.append(">");
381       xmldescriptor.append("</field>");
382       xmldescriptor.append("<field ");
383       xmldescriptor.append("name=\"float\" ");
384       xmldescriptor.append("value=\"(java.lang.Float/3.14)\"");
385       xmldescriptor.append(">");
386       xmldescriptor.append("</field>");
387       xmldescriptor.append("<field ");
388       xmldescriptor.append("name=\"double\" ");
389       xmldescriptor.append("value=\"(java.lang.Double/3.14e-10)\"");
390       xmldescriptor.append(">");
391       xmldescriptor.append("</field>");
392       xmldescriptor.append("<field ");
393       xmldescriptor.append("name=\"null\" ");
394       xmldescriptor.append("value=\"(null)\"");
395       xmldescriptor.append(">");
396       xmldescriptor.append("</field>");
397       xmldescriptor.append("</Descriptor>");
398       DescriptorSupport JavaDoc ds = new DescriptorSupport JavaDoc(xmldescriptor.toString());
399       String JavaDoc xml = ds.toXMLString();
400       assertTrue("Descriptor from XML != Descriptor", descriptorsEqual(ds, (new DescriptorSupport JavaDoc(xml))));
401    }
402
403    public void testXMLClassConstructor() throws Exception JavaDoc
404    {
405       StringBuffer JavaDoc xmldescriptor = new StringBuffer JavaDoc();
406       xmldescriptor.append("<Descriptor>");
407       xmldescriptor.append("<field ");
408       xmldescriptor.append("name=\"date\" ");
409       xmldescriptor.append("value=\"(java.net.URL/http://mx4j.sourceforge.net)\"");
410       xmldescriptor.append(">");
411       xmldescriptor.append("</field>");
412       xmldescriptor.append("</Descriptor>");
413       DescriptorSupport JavaDoc ds = new DescriptorSupport JavaDoc(xmldescriptor.toString());
414       String JavaDoc xml = ds.toXMLString();
415       assertTrue("Descriptor from XML != Descriptor", descriptorsEqual(ds, (new DescriptorSupport JavaDoc(xml))));
416    }
417
418    public void testBogusXMLConstructor() throws Exception JavaDoc
419    {
420       try
421       {
422          new DescriptorSupport JavaDoc("<Descriptor><field name=</Descriptor>");
423          fail("Expecting XMLParseException");
424       }
425       catch (XMLParseException JavaDoc x)
426       {
427       }
428    }
429
430    public void testBogusXMLValueCtor() throws Exception JavaDoc
431    {
432       try
433       {
434          StringBuffer JavaDoc xmldescriptor = new StringBuffer JavaDoc();
435          xmldescriptor.append("<Descriptor>");
436          xmldescriptor.append("<field ");
437          xmldescriptor.append("name=\"bogus\" ");
438          xmldescriptor.append("value=\"(java.lang.Byte/256)\"");
439          xmldescriptor.append(">");
440          xmldescriptor.append("</field>");
441          xmldescriptor.append("</Descriptor>");
442          new DescriptorSupport JavaDoc(xmldescriptor.toString());
443          fail("Expecting XMLParseException");
444       }
445       catch (XMLParseException JavaDoc x)
446       {
447       }
448    }
449
450    private boolean descriptorsEqual(Descriptor JavaDoc done, Descriptor JavaDoc dtwo)
451    {
452       Set JavaDoc namesone = new HashSet JavaDoc(Arrays.asList(done.getFieldNames()));
453       Set JavaDoc namestwo = new HashSet JavaDoc(Arrays.asList(dtwo.getFieldNames()));
454       if (!namesone.equals(namestwo)) return false;
455       Iterator JavaDoc i = namesone.iterator();
456       while (i.hasNext())
457       {
458          String JavaDoc field = (String JavaDoc)i.next();
459          Object JavaDoc vone = done.getFieldValue(field);
460          Object JavaDoc vtwo = dtwo.getFieldValue(field);
461          if ((vone == null && vtwo != null) || (vone != null && !vone.equals(vtwo)))
462          {
463             return false;
464          }
465       }
466       return true;
467    }
468 }
469
Popular Tags