001: /*
002: * JBoss, Home of Professional Open Source.
003: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
004: * as indicated by the @author tags. See the copyright.txt file in the
005: * distribution for a full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package test.compliance.openmbean;
023:
024: import junit.framework.TestCase;
025:
026: import java.io.ByteArrayInputStream;
027: import java.io.ByteArrayOutputStream;
028: import java.io.ObjectInputStream;
029: import java.io.ObjectOutputStream;
030: import java.util.Arrays;
031: import java.util.Set;
032:
033: import javax.management.openmbean.OpenMBeanParameterInfo;
034: import javax.management.openmbean.OpenMBeanParameterInfoSupport;
035: import javax.management.openmbean.OpenMBeanOperationInfoSupport;
036: import javax.management.openmbean.OpenType;
037: import javax.management.openmbean.SimpleType;
038:
039: /**
040: * Open MBean Operation Info tests.<p>
041: *
042: * @author <a href="mailto:Adrian.Brock@HappeningTimes.com">Adrian Brock</a>.
043: */
044: public class OpenMBeanOperationInfoSupportTestCase extends TestCase {
045: // Static --------------------------------------------------------------------
046:
047: // Attributes ----------------------------------------------------------------
048:
049: // Operation ---------------------------------------------------------------
050:
051: /**
052: * Construct the test
053: */
054: public OpenMBeanOperationInfoSupportTestCase(String s) {
055: super (s);
056: }
057:
058: // Tests ---------------------------------------------------------------------
059:
060: public void testOpenMBeanOperationInfoSupport() throws Exception {
061: OpenMBeanOperationInfoSupport info = new OpenMBeanOperationInfoSupport(
062: "name", "description", null, SimpleType.STRING,
063: OpenMBeanOperationInfoSupport.ACTION_INFO);
064: assertEquals("name", info.getName());
065: assertEquals("description", info.getDescription());
066: assertEquals(0, info.getSignature().length);
067: assertEquals("java.lang.String", info.getReturnType());
068: assertEquals(SimpleType.STRING, info.getReturnOpenType());
069: assertEquals(OpenMBeanOperationInfoSupport.ACTION_INFO, info
070: .getImpact());
071:
072: info = new OpenMBeanOperationInfoSupport("name", "description",
073: new OpenMBeanParameterInfoSupport[0],
074: SimpleType.STRING,
075: OpenMBeanOperationInfoSupport.ACTION_INFO);
076: assertEquals("name", info.getName());
077: assertEquals("description", info.getDescription());
078: assertEquals(0, info.getSignature().length);
079: assertEquals("java.lang.String", info.getReturnType());
080: assertEquals(SimpleType.STRING, info.getReturnOpenType());
081: assertEquals(OpenMBeanOperationInfoSupport.ACTION_INFO, info
082: .getImpact());
083:
084: OpenMBeanParameterInfoSupport[] parms = new OpenMBeanParameterInfoSupport[] { new OpenMBeanParameterInfoSupport(
085: "name", "description", SimpleType.STRING) };
086: info = new OpenMBeanOperationInfoSupport("name", "description",
087: parms, SimpleType.STRING,
088: OpenMBeanOperationInfoSupport.ACTION_INFO);
089: assertEquals("name", info.getName());
090: assertEquals("description", info.getDescription());
091: assertEquals(1, info.getSignature().length);
092: assertEquals("java.lang.String", info.getReturnType());
093: assertEquals(SimpleType.STRING, info.getReturnOpenType());
094: assertEquals(OpenMBeanOperationInfoSupport.ACTION_INFO, info
095: .getImpact());
096: }
097:
098: public void testReturnOpenType() throws Exception {
099: OpenMBeanParameterInfoSupport[] parms = new OpenMBeanParameterInfoSupport[] { new OpenMBeanParameterInfoSupport(
100: "name", "description", SimpleType.STRING) };
101: OpenMBeanOperationInfoSupport info = new OpenMBeanOperationInfoSupport(
102: "name", "description", parms, SimpleType.BOOLEAN,
103: OpenMBeanOperationInfoSupport.ACTION_INFO);
104:
105: assertEquals(SimpleType.BOOLEAN, info.getReturnOpenType());
106: }
107:
108: public void testEquals() throws Exception {
109: OpenMBeanOperationInfoSupport info = new OpenMBeanOperationInfoSupport(
110: "name", "description", null, SimpleType.STRING,
111: OpenMBeanOperationInfoSupport.ACTION_INFO);
112:
113: assertTrue("Null should not be equal",
114: info.equals(null) == false);
115: assertTrue("Only OpenMBeanOperationInfo should be equal", info
116: .equals(new Object()) == false);
117:
118: OpenMBeanOperationInfoSupport info2 = new OpenMBeanOperationInfoSupport(
119: "name", "description", null, SimpleType.STRING,
120: OpenMBeanOperationInfoSupport.ACTION_INFO);
121:
122: assertTrue("Different instances of the same data are equal",
123: info.equals(info2));
124: assertTrue("Different instances of the same data are equal",
125: info2.equals(info));
126:
127: info2 = new OpenMBeanOperationInfoSupport("name",
128: "description2", null, SimpleType.STRING,
129: OpenMBeanOperationInfoSupport.ACTION_INFO);
130:
131: assertTrue(
132: "Different instances with different descriptions are equal",
133: info.equals(info2));
134: assertTrue(
135: "Different instances with different descritpions are equal",
136: info2.equals(info));
137:
138: info2 = new OpenMBeanOperationInfoSupport("name2",
139: "description", null, SimpleType.STRING,
140: OpenMBeanOperationInfoSupport.ACTION_INFO);
141:
142: assertTrue("Instances with different names are not equal", info
143: .equals(info2) == false);
144: assertTrue("Instances with different names are not equal",
145: info2.equals(info) == false);
146:
147: OpenMBeanParameterInfoSupport param1 = new OpenMBeanParameterInfoSupport(
148: "name", "description", SimpleType.STRING);
149: OpenMBeanParameterInfoSupport param2 = new OpenMBeanParameterInfoSupport(
150: "name2", "description", SimpleType.STRING);
151:
152: info = new OpenMBeanOperationInfoSupport("name", "description",
153: new OpenMBeanParameterInfoSupport[] { param1, param2 },
154: SimpleType.STRING,
155: OpenMBeanOperationInfoSupport.ACTION_INFO);
156: info2 = new OpenMBeanOperationInfoSupport("name",
157: "description", new OpenMBeanParameterInfoSupport[] {
158: param1, param2 }, SimpleType.STRING,
159: OpenMBeanOperationInfoSupport.ACTION_INFO);
160:
161: assertTrue(
162: "Different instances with the same parameters are equal",
163: info.equals(info2));
164: assertTrue(
165: "Different instances with the same parameters are equal",
166: info2.equals(info));
167:
168: info = new OpenMBeanOperationInfoSupport("name", "description",
169: new OpenMBeanParameterInfoSupport[] { param1, param2 },
170: SimpleType.STRING,
171: OpenMBeanOperationInfoSupport.ACTION_INFO);
172: info2 = new OpenMBeanOperationInfoSupport("name",
173: "description", new OpenMBeanParameterInfoSupport[] {
174: param2, param1 }, SimpleType.STRING,
175: OpenMBeanOperationInfoSupport.ACTION_INFO);
176:
177: assertTrue(
178: "Different instances with the same signature but different parameters are not equal",
179: info.equals(info2) == false);
180: assertTrue(
181: "Different instances with the same signature but different parameters are not equal",
182: info2.equals(info) == false);
183:
184: param2 = new OpenMBeanParameterInfoSupport("name2",
185: "description", SimpleType.INTEGER);
186: info2 = new OpenMBeanOperationInfoSupport("name",
187: "description", new OpenMBeanParameterInfoSupport[] {
188: param1, param2 }, SimpleType.STRING,
189: OpenMBeanOperationInfoSupport.ACTION_INFO);
190:
191: assertTrue(
192: "Different instances with different signatures are not equal",
193: info.equals(info2) == false);
194: assertTrue(
195: "Different instances with different signatures are not equal",
196: info2.equals(info) == false);
197:
198: info2 = new OpenMBeanOperationInfoSupport("name",
199: "description",
200: new OpenMBeanParameterInfoSupport[] { param1 },
201: SimpleType.STRING,
202: OpenMBeanOperationInfoSupport.ACTION_INFO);
203:
204: assertTrue(
205: "Different instances with different numbers of paramters are not equal",
206: info.equals(info2) == false);
207: assertTrue(
208: "Different instances with different numbers of parameters are not equal",
209: info2.equals(info) == false);
210:
211: info2 = new OpenMBeanOperationInfoSupport("name",
212: "description", new OpenMBeanParameterInfoSupport[] {
213: param1, param2 }, SimpleType.INTEGER,
214: OpenMBeanOperationInfoSupport.ACTION_INFO);
215:
216: assertTrue(
217: "Different instances with different return types are not equal",
218: info.equals(info2) == false);
219: assertTrue(
220: "Different instances with different return types are not equal",
221: info2.equals(info) == false);
222:
223: info2 = new OpenMBeanOperationInfoSupport("name",
224: "description", new OpenMBeanParameterInfoSupport[] {
225: param1, param2 }, SimpleType.STRING,
226: OpenMBeanOperationInfoSupport.ACTION);
227:
228: assertTrue(
229: "Different instances with different impacts are not equal",
230: info.equals(info2) == false);
231: assertTrue(
232: "Different instances with different impacts are not equal",
233: info2.equals(info) == false);
234: }
235:
236: public void testHashCode() throws Exception {
237: OpenMBeanParameterInfoSupport[] parms = new OpenMBeanParameterInfoSupport[] { new OpenMBeanParameterInfoSupport(
238: "name", "description", SimpleType.STRING) };
239: OpenMBeanOperationInfoSupport info = new OpenMBeanOperationInfoSupport(
240: "name", "description", parms, SimpleType.STRING,
241: OpenMBeanOperationInfoSupport.ACTION_INFO);
242:
243: int myHash = "name".hashCode()
244: + Arrays.asList(parms).hashCode()
245: + SimpleType.STRING.hashCode()
246: + OpenMBeanOperationInfoSupport.ACTION_INFO;
247: assertEquals(myHash, info.hashCode());
248: }
249:
250: public void testToString() throws Exception {
251: OpenMBeanParameterInfoSupport[] parms = new OpenMBeanParameterInfoSupport[] { new OpenMBeanParameterInfoSupport(
252: "name", "description", SimpleType.STRING) };
253: OpenMBeanOperationInfoSupport info = new OpenMBeanOperationInfoSupport(
254: "NAME", "DESCRIPTION", parms, SimpleType.INTEGER,
255: OpenMBeanOperationInfoSupport.ACTION_INFO);
256:
257: String toString = info.toString();
258:
259: assertTrue("info.toString() should contain NAME", toString
260: .indexOf("NAME") != -1);
261: assertTrue("info.toString() should contain the parameters",
262: toString.indexOf(Arrays.asList(parms).toString()) != -1);
263: assertTrue("info.toString() should contain the simple type",
264: toString.indexOf(SimpleType.INTEGER.toString()) != -1);
265: }
266:
267: public void testSerialization() throws Exception {
268: OpenMBeanParameterInfoSupport[] parms = new OpenMBeanParameterInfoSupport[] { new OpenMBeanParameterInfoSupport(
269: "name", "description", SimpleType.STRING) };
270: OpenMBeanOperationInfoSupport info = new OpenMBeanOperationInfoSupport(
271: "name", "description", parms, SimpleType.STRING,
272: OpenMBeanOperationInfoSupport.ACTION_INFO);
273:
274: // Serialize it
275: ByteArrayOutputStream baos = new ByteArrayOutputStream();
276: ObjectOutputStream oos = new ObjectOutputStream(baos);
277: oos.writeObject(info);
278:
279: // Deserialize it
280: ByteArrayInputStream bais = new ByteArrayInputStream(baos
281: .toByteArray());
282: ObjectInputStream ois = new ObjectInputStream(bais);
283: Object result = ois.readObject();
284:
285: assertEquals(info, result);
286: }
287:
288: public void testErrors() throws Exception {
289: boolean caught = false;
290: try {
291: OpenMBeanParameterInfoSupport[] parms = new OpenMBeanParameterInfoSupport[] { new OpenMBeanParameterInfoSupport(
292: "name", "description", SimpleType.STRING) };
293: OpenMBeanOperationInfoSupport info = new OpenMBeanOperationInfoSupport(
294: null, "description", parms, SimpleType.STRING,
295: OpenMBeanOperationInfoSupport.ACTION_INFO);
296: } catch (IllegalArgumentException e) {
297: caught = true;
298: }
299: if (caught == false)
300: fail("Expected IllegalArgumentException for null name");
301:
302: caught = false;
303: try {
304: OpenMBeanParameterInfoSupport[] parms = new OpenMBeanParameterInfoSupport[] { new OpenMBeanParameterInfoSupport(
305: "name", "description", SimpleType.STRING) };
306: OpenMBeanOperationInfoSupport info = new OpenMBeanOperationInfoSupport(
307: "", "description", parms, SimpleType.STRING,
308: OpenMBeanOperationInfoSupport.ACTION_INFO);
309: } catch (IllegalArgumentException e) {
310: caught = true;
311: }
312: if (caught == false)
313: fail("Expected IllegalArgumentException for empty name");
314:
315: caught = false;
316: try {
317: OpenMBeanParameterInfoSupport[] parms = new OpenMBeanParameterInfoSupport[] { new OpenMBeanParameterInfoSupport(
318: "name", "description", SimpleType.STRING) };
319: OpenMBeanOperationInfoSupport info = new OpenMBeanOperationInfoSupport(
320: "name", null, parms, SimpleType.STRING,
321: OpenMBeanOperationInfoSupport.ACTION_INFO);
322: } catch (IllegalArgumentException e) {
323: caught = true;
324: }
325: if (caught == false)
326: fail("Expected IllegalArgumentException for null description");
327:
328: caught = false;
329: try {
330: OpenMBeanParameterInfoSupport[] parms = new OpenMBeanParameterInfoSupport[] { new OpenMBeanParameterInfoSupport(
331: "name", "description", SimpleType.STRING) };
332: OpenMBeanOperationInfoSupport info = new OpenMBeanOperationInfoSupport(
333: "name", "", parms, SimpleType.STRING,
334: OpenMBeanOperationInfoSupport.ACTION_INFO);
335: } catch (IllegalArgumentException e) {
336: caught = true;
337: }
338: if (caught == false)
339: fail("Expected IllegalArgumentException for empty description");
340:
341: caught = false;
342: try {
343: OpenMBeanOperationInfoSupport info = new OpenMBeanOperationInfoSupport(
344: "name",
345: "description",
346: new MyOpenMBeanParameterInfo[] { new MyOpenMBeanParameterInfo() },
347: SimpleType.STRING,
348: OpenMBeanOperationInfoSupport.ACTION_INFO);
349: } catch (ArrayStoreException e) {
350: caught = true;
351: }
352: if (caught == false)
353: fail("Expected ArrayStoreException for non MBeanParameterInfo array");
354:
355: caught = false;
356: try {
357: OpenMBeanParameterInfoSupport[] parms = new OpenMBeanParameterInfoSupport[] { new OpenMBeanParameterInfoSupport(
358: "name", "description", SimpleType.STRING) };
359: OpenMBeanOperationInfoSupport info = new OpenMBeanOperationInfoSupport(
360: "name", "description", parms, null,
361: OpenMBeanOperationInfoSupport.ACTION_INFO);
362: } catch (IllegalArgumentException e) {
363: caught = true;
364: }
365: if (caught == false)
366: fail("Expected IllegalArgumentException for null return type");
367:
368: caught = false;
369: try {
370: OpenMBeanParameterInfoSupport[] parms = new OpenMBeanParameterInfoSupport[] { new OpenMBeanParameterInfoSupport(
371: "name", "description", SimpleType.STRING) };
372: OpenMBeanOperationInfoSupport info = new OpenMBeanOperationInfoSupport(
373: "name", "description", parms, SimpleType.VOID,
374: OpenMBeanOperationInfoSupport.ACTION_INFO);
375: } catch (IllegalArgumentException e) {
376: caught = true;
377: }
378: if (caught == true)
379: fail("Didn't expect IllegalArgumentException for VOID return type");
380:
381: caught = false;
382: try {
383: OpenMBeanParameterInfoSupport[] parms = new OpenMBeanParameterInfoSupport[] { new OpenMBeanParameterInfoSupport(
384: "name", "description", SimpleType.STRING) };
385: OpenMBeanOperationInfoSupport info = new OpenMBeanOperationInfoSupport(
386: "name", "description", parms, SimpleType.STRING,
387: 1234567);
388: } catch (IllegalArgumentException e) {
389: caught = true;
390: }
391: if (caught == false)
392: fail("Expected IllegalArgumentExecption for invalid action");
393:
394: caught = false;
395: try {
396: OpenMBeanParameterInfoSupport[] parms = new OpenMBeanParameterInfoSupport[] { new OpenMBeanParameterInfoSupport(
397: "name", "description", SimpleType.STRING) };
398: OpenMBeanOperationInfoSupport info = new OpenMBeanOperationInfoSupport(
399: "name", "description", parms, SimpleType.STRING,
400: OpenMBeanOperationInfoSupport.UNKNOWN);
401: } catch (IllegalArgumentException e) {
402: caught = true;
403: }
404: if (caught == false)
405: fail("Expected IllegalArgumentExecption for UNKNOWN action");
406: }
407:
408: public static class MyOpenMBeanParameterInfo implements
409: OpenMBeanParameterInfo {
410: public boolean equals(Object o) {
411: return false;
412: }
413:
414: public Object getDefaultValue() {
415: return null;
416: }
417:
418: public String getDescription() {
419: return null;
420: }
421:
422: public Set getLegalValues() {
423: return null;
424: }
425:
426: public Comparable getMaxValue() {
427: return null;
428: }
429:
430: public Comparable getMinValue() {
431: return null;
432: }
433:
434: public String getName() {
435: return null;
436: }
437:
438: public OpenType getOpenType() {
439: return null;
440: }
441:
442: public boolean hasDefaultValue() {
443: return false;
444: }
445:
446: public boolean hasLegalValues() {
447: return false;
448: }
449:
450: public int hashCode() {
451: return 0;
452: }
453:
454: public boolean hasMaxValue() {
455: return false;
456: }
457:
458: public boolean hasMinValue() {
459: return false;
460: }
461:
462: public boolean isValue(Object o) {
463: return false;
464: }
465:
466: public String toString() {
467: return null;
468: }
469: }
470: }
|