package org.jboss.as.test.integration.sar; import static org.jboss.as.test.shared.integration.ejb.security.PermissionUtils.createPermissionsXmlAsset; import javax.management.MBeanServerConnection; import javax.management.ObjectName; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.container.test.api.RunAsClient; import org.jboss.arquillian.junit.Arquillian; import org.jboss.as.arquillian.api.ContainerResource; import org.jboss.as.arquillian.container.ManagementClient; import org.jboss.as.test.integration.common.DefaultConfiguration; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.spec.JavaArchive; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.wildfly.naming.java.permission.JndiPermission; /** * Tests that MBean(s) binding to JNDI in their <code>start</code> lifecycle method do not hang up the deployment. * * @see https://developer.jboss.org/thread/251092 * @author Jaikiran Pai */ @RunWith(Arquillian.class) @RunAsClient public class JNDIBindingMBeanTestCase { @ContainerResource private ManagementClient managementClient; @Deployment public static JavaArchive createDeployment() { final JavaArchive sar = ShrinkWrap.create(JavaArchive.class, "multiple-jndi-binding-mbeans.sar"); sar.addClasses(JNDIBindingService.class, JNDIBindingMBeanTestCase.class, JNDIBindingServiceMBean.class); sar.addAsManifestResource(JNDIBindingMBeanTestCase.class.getPackage(), "multiple-jndi-binding-mbeans-jboss-service.xml", "jboss-service.xml"); sar.addAsManifestResource(createPermissionsXmlAsset(new JndiPermission("global/env/foo/-", "bind,unbind")), "permissions.xml"); return sar; } /** * Makes sure that the MBeans that are expected to be up and running are accessible. * * @throws Exception * @see https://developer.jboss.org/thread/251092 */ @Test public void testMBeanStartup() throws Exception { // get mbean server final JMXConnector connector = JMXConnectorFactory.connect(managementClient.getRemoteJMXURL(), DefaultConfiguration.credentials()); try { final MBeanServerConnection mBeanServerConnection = connector.getMBeanServerConnection(); // check the deployed MBeans for (int i = 1; i <= 9; i++) { final String mbeanName = "jboss:name=mbean-startup-jndi-bind-" + i; final Object instance = mBeanServerConnection.getObjectInstance(new ObjectName(mbeanName)); Assert.assertNotNull("No instance returned for MBean: " + mbeanName, instance); } } finally { connector.close(); } } }