KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > test > javax > management > MBeanComplianceTest


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;
10
11 import java.lang.reflect.Constructor JavaDoc;
12 import java.lang.reflect.Method JavaDoc;
13 import java.util.ArrayList JavaDoc;
14 import java.util.Arrays JavaDoc;
15 import java.util.List JavaDoc;
16
17 import mx4j.MX4JSystemKeys;
18 import mx4j.server.MBeanIntrospector;
19 import mx4j.server.MBeanMetaData;
20 import test.MX4JTestCase;
21 import test.javax.management.support.ComplianceSupport;
22
23 import javax.management.MBeanConstructorInfo JavaDoc;
24
25 /**
26  * @version $Revision: 1.10 $
27  */

28 public class MBeanComplianceTest extends MX4JTestCase
29 {
30    private MBeanIntrospector introspector;
31
32    public MBeanComplianceTest(String JavaDoc s)
33    {
34       super(s);
35    }
36
37    protected void setUp() throws Exception JavaDoc
38    {
39       String JavaDoc property = MX4JSystemKeys.MX4J_STRICT_MBEAN_INTERFACE;
40       System.setProperty(property, "no");
41       introspector = new MBeanIntrospector();
42    }
43
44    protected void tearDown() throws Exception JavaDoc
45    {
46       introspector = null;
47    }
48
49    private MBeanMetaData createMBeanMetaData(Object JavaDoc mbean) throws Exception JavaDoc
50    {
51       MBeanMetaData metadata = MBeanMetaData.Factory.create();
52       metadata.setMBean(mbean);
53       metadata.setClassLoader(mbean.getClass().getClassLoader());
54       return metadata;
55    }
56
57    private boolean isCompliant(Object JavaDoc mbean) throws Exception JavaDoc
58    {
59       Object JavaDoc metadata = createMBeanMetaData(mbean);
60       Method JavaDoc method = introspector.getClass().getDeclaredMethod("testCompliance", new Class JavaDoc[]{MBeanMetaData.class});
61       method.setAccessible(true);
62       Boolean JavaDoc value = (Boolean JavaDoc)method.invoke(introspector, new Object JavaDoc[]{metadata});
63       return value.booleanValue();
64    }
65
66    private boolean isStandardCompliant(Object JavaDoc mbean) throws Exception JavaDoc
67    {
68       MBeanMetaData metadata = createMBeanMetaData(mbean);
69       Method JavaDoc method = introspector.getClass().getDeclaredMethod("testCompliance", new Class JavaDoc[]{MBeanMetaData.class});
70       method.setAccessible(true);
71       Boolean JavaDoc value = (Boolean JavaDoc)method.invoke(introspector, new Object JavaDoc[]{metadata});
72       return value.booleanValue() && metadata.isMBeanStandard() && !metadata.isMBeanDynamic() && metadata.getMBeanInterface() != null;
73    }
74
75    private boolean isDynamicCompliant(Object JavaDoc mbean) throws Exception JavaDoc
76    {
77       MBeanMetaData metadata = createMBeanMetaData(mbean);
78       Method JavaDoc method = introspector.getClass().getDeclaredMethod("testCompliance", new Class JavaDoc[]{MBeanMetaData.class});
79       method.setAccessible(true);
80       Boolean JavaDoc value = (Boolean JavaDoc)method.invoke(introspector, new Object JavaDoc[]{metadata});
81       return value.booleanValue() && !metadata.isMBeanStandard() && metadata.isMBeanDynamic();
82    }
83
84    private Class JavaDoc getStandardManagementInterface(Object JavaDoc mbean) throws Exception JavaDoc
85    {
86       MBeanMetaData metadata = createMBeanMetaData(mbean);
87       introspector.introspect(metadata);
88       return metadata.getMBeanInterface();
89    }
90
91    private Method JavaDoc[] getStandardManagementMethods(Object JavaDoc mbean) throws Exception JavaDoc
92    {
93       Class JavaDoc intf = getStandardManagementInterface(mbean);
94       return intf.getMethods();
95    }
96
97    public void testNotCompliantNoManagement() throws Exception JavaDoc
98    {
99       Object JavaDoc bad = new ComplianceSupport.NoManagement();
100       if (isCompliant(bad)) fail("MBean is not compliant");
101    }
102
103    public void testNotCompliantLexicalPatternNotRespected() throws Exception JavaDoc
104    {
105       Object JavaDoc bad = new ComplianceSupport.DoesntRespectLexicalPattern();
106       if (isCompliant(bad)) fail("MBean is not compliant");
107    }
108
109    public void testNotCompliantOverloadedAttributeSetSet() throws Exception JavaDoc
110    {
111       Object JavaDoc bad = new ComplianceSupport.OverloadedAttributeSetSet();
112       if (isCompliant(bad)) fail("MBean is not compliant");
113    }
114
115    public void testNotCompliantOverloadedAttributeGetGet() throws Exception JavaDoc
116    {
117       // This is guaranteed by the Java compiler: a class with 2 getters that return different types
118
// does not compile
119
}
120
121    public void testNotCompliantOverloadedAttribute3() throws Exception JavaDoc
122    {
123       Object JavaDoc bad = new ComplianceSupport.OverloadedAttributeGetSet();
124       if (isCompliant(bad)) fail("MBean is not compliant");
125    }
126
127    public void testNotCompliantOverloadedAttribute4() throws Exception JavaDoc
128    {
129       Object JavaDoc bad = new ComplianceSupport.OverloadedAttributeIsGet();
130       if (isCompliant(bad)) fail("MBean is not compliant");
131    }
132
133    public void testCompliantBasicStandard() throws Exception JavaDoc
134    {
135       Object JavaDoc good = new ComplianceSupport.BasicStandard();
136       if (!isStandardCompliant(good)) fail("MBean is compliant");
137
138       Method JavaDoc[] methods = ComplianceSupport.BasicStandardMBean.class.getMethods();
139       List JavaDoc list = Arrays.asList(methods);
140       Method JavaDoc[] management = getStandardManagementMethods(good);
141       List JavaDoc list2 = Arrays.asList(management);
142       assertTrue("Different management interface", list.containsAll(list2) && list2.containsAll(list));
143    }
144
145    public void testCompliantDerived() throws Exception JavaDoc
146    {
147       Object JavaDoc good = new ComplianceSupport.Derived();
148       if (!isStandardCompliant(good)) fail("MBean is compliant");
149
150       Method JavaDoc[] methods = ComplianceSupport.BasicStandardMBean.class.getMethods();
151       List JavaDoc list = Arrays.asList(methods);
152       Method JavaDoc[] management = getStandardManagementMethods(good);
153       List JavaDoc list2 = Arrays.asList(management);
154       assertTrue("Different management interface", list.containsAll(list2) && list2.containsAll(list));
155    }
156
157    public void testCompliantInherited() throws Exception JavaDoc
158    {
159       Object JavaDoc good = new ComplianceSupport.Inherited();
160       if (!isStandardCompliant(good)) fail("MBean is compliant");
161
162       Method JavaDoc[] methods = ComplianceSupport.InheritedMBean.class.getMethods();
163       List JavaDoc list = Arrays.asList(methods);
164       Method JavaDoc[] management = getStandardManagementMethods(good);
165       List JavaDoc list2 = Arrays.asList(management);
166       assertTrue("Different management interface", list.containsAll(list2) && list2.containsAll(list));
167    }
168
169    public void testCompliantNotInherited() throws Exception JavaDoc
170    {
171       Object JavaDoc good = new ComplianceSupport.NotInherited();
172       if (!isStandardCompliant(good)) fail("MBean is compliant");
173
174       Method JavaDoc[] methods = ComplianceSupport.BasicStandardMBean.class.getMethods();
175       List JavaDoc list = Arrays.asList(methods);
176       Method JavaDoc[] management = getStandardManagementMethods(good);
177       List JavaDoc list2 = Arrays.asList(management);
178       assertTrue("Different management interface", list.containsAll(list2) && list2.containsAll(list));
179    }
180
181    public void testCompliantMulti() throws Exception JavaDoc
182    {
183       Object JavaDoc good = new ComplianceSupport.Multi();
184       if (!isStandardCompliant(good)) fail("MBean is compliant");
185
186       Method JavaDoc[] methods = ComplianceSupport.BasicStandardMBean.class.getMethods();
187       List JavaDoc list = new ArrayList JavaDoc();
188       list.addAll(Arrays.asList(methods));
189       methods = ComplianceSupport.InheritedMBean.class.getMethods();
190       list.addAll(Arrays.asList(methods));
191       Method JavaDoc[] management = getStandardManagementMethods(good);
192       List JavaDoc list2 = Arrays.asList(management);
193       assertTrue("Different management interface", list.containsAll(list2) && list2.containsAll(list));
194    }
195
196    public void testCompliantPackagePrivate() throws Exception JavaDoc
197    {
198       String JavaDoc clsName = "test.javax.management.support.ComplianceSupport$PackagePrivate";
199       Class JavaDoc cls = getClass().getClassLoader().loadClass(clsName);
200       Constructor JavaDoc ctor = cls.getDeclaredConstructor(new Class JavaDoc[0]);
201       ctor.setAccessible(true);
202       Object JavaDoc good = ctor.newInstance(new Object JavaDoc[0]);
203       if (!isStandardCompliant(good)) fail("MBean is compliant");
204    }
205
206    public void testNotCompliantDynamicNoClassName() throws Exception JavaDoc
207    {
208       // In JMX 1.2 it is not possible to create an MBeanInfo with null class name
209
Object JavaDoc mbean = new ComplianceSupport.NoClassNameDynamicMBean();
210       if (isCompliant(mbean)) fail();
211    }
212
213    public void testCompliantBasicDynamic() throws Exception JavaDoc
214    {
215       Object JavaDoc mbean = new ComplianceSupport.BasicDynamic();
216       if (!isDynamicCompliant(mbean)) fail("MBean is compliant");
217    }
218
219    public void testCompliantStandardAndDynamic() throws Exception JavaDoc
220    {
221       // JMX 1.0, this is invalid. For JMX 1.1 this is a dynamic MBean
222
Object JavaDoc mbean = new ComplianceSupport.StandardAndDynamic();
223       if (!isDynamicCompliant(mbean)) fail("MBean is compliant");
224
225       Class JavaDoc intf = getStandardManagementInterface(mbean);
226       if (intf != null) fail("MBean is dynamic");
227    }
228
229    public void testCompliantStandardDynamic() throws Exception JavaDoc
230    {
231       // In JMX 1.0 this is an invalid MBean; in JMX 1.1 is a dynamic MBean
232
Object JavaDoc mbean = new ComplianceSupport.StandardDynamic();
233       if (!isDynamicCompliant(mbean)) fail("MBean is compliant");
234
235       Class JavaDoc intf = getStandardManagementInterface(mbean);
236       if (intf != null) fail("MBean is dynamic");
237    }
238
239    public void testDynamicFromStandard() throws Exception JavaDoc
240    {
241       // A standard mbean subclassed to be dynamic
242
Object JavaDoc mbean = new ComplianceSupport.DynamicFromStandard();
243       if (!isDynamicCompliant(mbean)) fail("MBean is compliant");
244
245       Class JavaDoc intf = getStandardManagementInterface(mbean);
246       if (intf != null) fail("MBean is dynamic");
247    }
248
249    public void testStandardFromDynamic() throws Exception JavaDoc
250    {
251       // A dynamic mbean subclassed to be standard, it remains a dynamic (as of JMX 1.1)
252
Object JavaDoc mbean = new ComplianceSupport.StandardFromDynamic();
253       if (!isDynamicCompliant(mbean)) fail("MBean is compliant");
254
255       Class JavaDoc intf = getStandardManagementInterface(mbean);
256       if (intf != null) fail("MBean is dynamic");
257    }
258
259    public void testStandardConstructorInfo() throws Exception JavaDoc
260    {
261       Object JavaDoc mbean = new ComplianceSupport.BasicStandard();
262       MBeanMetaData md = createMBeanMetaData(mbean);
263       introspector.introspect(md);
264       MBeanConstructorInfo JavaDoc[] constructors = md.getMBeanInfo().getConstructors();
265       assertEquals(1, constructors.length);
266       MBeanConstructorInfo JavaDoc info = constructors[0];
267       assertEquals(mbean.getClass().getName(), info.getName());
268    }
269 }
270
Popular Tags