package org.jboss.as.test.integration.deployment.structure.ear; import static org.jboss.as.test.shared.integration.ejb.security.PermissionUtils.createPermissionsXmlAsset; import static org.junit.Assert.assertEquals; import javax.ejb.EJB; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.logging.Logger; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.asset.StringAsset; import org.jboss.shrinkwrap.api.spec.EnterpriseArchive; import org.jboss.shrinkwrap.api.spec.JavaArchive; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; /** * Tests parsing of jboss-deployment-structure.xml file in a deployment * <p/> * User: Jaikiran Pai */ @RunWith(Arquillian.class) public class EarJBossDeploymentStructureTestCase { private static final Logger logger = Logger.getLogger(EarJBossDeploymentStructureTestCase.class); @EJB(mappedName = "java:module/ClassLoadingEJB") private ClassLoadingEJB ejb; public static final String TO_BE_FOUND_CLASS_NAME = "org.jboss.as.test.integration.deployment.structure.ear.Available"; public static final String TO_BE_MISSSING_CLASS_NAME = "org.jboss.as.test.integration.deployment.structure.ear.ToBeIgnored"; public static final String METAINF_RESOURCE_TXT = "aa/metainf-resource.txt"; /** * .ear * | * |--- META-INF * | | * | |--- jboss-deployment-structure.xml * | * |--- ejb.jar * | * |--- available.jar * | * |--- ignored.jar * * @return */ @Deployment public static Archive<?> createDeployment() { final EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class, "deployment-structure.ear"); ear.addAsManifestResource(EarJBossDeploymentStructureTestCase.class.getPackage(), "jboss-deployment-structure.xml", "jboss-deployment-structure.xml"); final JavaArchive jarOne = ShrinkWrap.create(JavaArchive.class, "available.jar"); jarOne.addClass(Available.class); jarOne.addAsManifestResource(new StringAsset("test resource"), METAINF_RESOURCE_TXT); final JavaArchive ignoredJar = ShrinkWrap.create(JavaArchive.class, "ignored.jar"); ignoredJar.addClass(ToBeIgnored.class); final JavaArchive ejbJar = ShrinkWrap.create(JavaArchive.class, "ejb.jar"); ejbJar.addClasses(ClassLoadingEJB.class, EarJBossDeploymentStructureTestCase.class); // grant necessary permissions ejbJar.addAsResource(createPermissionsXmlAsset(new RuntimePermission("getProtectionDomain")), "META-INF/jboss-permissions.xml"); ear.addAsModule(jarOne); ear.addAsModule(ignoredJar); ear.addAsModule(ejbJar); return ear; } /** * Make sure the <filter> element in jboss-deployment-structure.xml is processed correctly and the * exclude/include is honoured * * @throws Exception */ @Test public void testDeploymentStructureFilters() throws Exception { this.ejb.loadClass(TO_BE_FOUND_CLASS_NAME); try { this.ejb.loadClass(TO_BE_MISSSING_CLASS_NAME); Assert.fail("Unexpectedly found class " + TO_BE_MISSSING_CLASS_NAME); } catch (ClassNotFoundException cnfe) { // expected } } @Test public void testUsePhysicalCodeSource() throws ClassNotFoundException { Class<?> clazz = this.ejb.loadClass(TO_BE_FOUND_CLASS_NAME); Assert.assertTrue(clazz.getProtectionDomain().getCodeSource().getLocation().getProtocol().equals("jar")); Assert.assertTrue(ClassLoadingEJB.class.getProtectionDomain().getCodeSource().getLocation().getProtocol().equals("jar")); } @Test public void testMetaInfResourceImported() { Assert.assertTrue(this.ejb.hasResource("/META-INF/" + METAINF_RESOURCE_TXT)); } /** * EE.5.15, part of testsuite migration AS6->AS7 (jbas7556) */ @Test public void testModuleName() throws Exception { String result = ejb.query("java:module/ModuleName"); assertEquals("ejb", result); result = ejb.getResourceModuleName(); assertEquals("ejb", result); } @Test public void testAppName() throws Exception { String result = ejb.query("java:app/AppName"); assertEquals("deployment-structure", result); result = ejb.getResourceAppName(); assertEquals("deployment-structure", result); } }