package org.jboss.as.test.integration.ejb.descriptor.ejbnamewildcard;
import javax.ejb.EJBAccessException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* Tests for wildcard (*) in ejb-name element of jboss-ejb3.xml
* @author Jan Martiska
*/
@RunWith(Arquillian.class)
public class EJBNameWildcardTestCase {
@Deployment
public static Archive<?> deployment() {
return ShrinkWrap.create(JavaArchive.class, "ejb-name-wildcard-test.jar")
.addPackage(BeanOne.class.getPackage())
.addPackage(BeanTwo.class.getPackage())
.addAsManifestResource(BeanOne.class.getPackage(), "jboss-ejb3.xml", "jboss-ejb3.xml");
}
/*
* Try to invoke a method which requires special privileges,
* as defined in jboss-ejb3.xml using ejb-name=*,method-name=restrictedMethod.
* It shouldn't be allowed.
*/
@Test(expected = EJBAccessException.class)
public void testWildcardRestrictedMethodOnBeanOne() throws Exception {
getRestrictedBean(BeanOne.class).wildcardRestrictedMethod();
}
@Test(expected = EJBAccessException.class)
public void testWildcardRestrictedMethodOnBeanTwo() throws Exception {
getRestrictedBean(BeanTwo.class).wildcardRestrictedMethod();
}
/*
* Try to invoke a method which is excluded
* by jboss-ejb3.xml using ejb-name=*,method-name=excludedMethod
* and shouldn't be callable at all.
*/
@Test(expected = EJBAccessException.class)
public void testWildcardExcludedMethodOnBeanOne() throws Exception {
getRestrictedBean(BeanOne.class).wildcardExcludedMethod();
}
@Test(expected = EJBAccessException.class)
public void testWildcardExcludedMethodOnBeanTwo() throws Exception {
getRestrictedBean(BeanTwo.class).wildcardExcludedMethod();
}
/*
* Try to invoke a method which is excluded
* by jboss-ejb3.xml using ejb-name=*,method-name=excludedMethod
* and shouldn't be callable at all.
*/
@Test(expected = EJBAccessException.class)
public void testLocalRestrictedMethodOnBeanTwo() throws Exception {
getRestrictedBean(BeanTwo.class).localRestrictedMethod();
}
@Test(expected = EJBAccessException.class)
public void testLocalExcludedMethodOnBeanTwo() throws Exception {
getRestrictedBean(BeanTwo.class).localExcludedMethod();
}
/*
* Try to invoke not excluded / restricted methods
*/
@Test
public void testUnRestrictedMethodOnBeanTwo() throws Exception {
getRestrictedBean(BeanTwo.class).unRestrictedMethod();
}
@Test
public void testNotExcludedMethodOnBeanTwo() throws Exception {
getRestrictedBean(BeanTwo.class).notExcludedMethod();
}
private <T> T getRestrictedBean(Class<T> clazz) throws NamingException {
return (T) new InitialContext().lookup("java:global/ejb-name-wildcard-test/" + clazz.getSimpleName());
}
}