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