From 02ae00764976615240c5133684b8f5d44554d09b Mon Sep 17 00:00:00 2001 From: ochaloup Date: Fri, 7 Apr 2017 14:28:29 +0200 Subject: [PATCH] [WFLY-8561] fixing test for @RunAs functionality which was ported from eap5 testsuite (JBPAPP-7897) --- .../ejb/security/runas/ejb2mdb/GoodBye.java | 2 +- .../security/runas/ejb2mdb/GoodByeBean.java | 17 +- .../security/runas/ejb2mdb/GoodByeLocal.java | 2 +- .../ejb/security/runas/ejb2mdb/HelloBean.java | 87 ++++----- .../ejb/security/runas/ejb2mdb/HelloMDB.java | 18 +- .../ejb/security/runas/ejb2mdb/HolaBean.java | 17 +- .../ejb/security/runas/ejb2mdb/HowdyBean.java | 15 +- .../runas/ejb2mdb/RunAsEjbMdbTestCase.java | 140 ++++++++++++++ .../runas/ejb2mdb/RunAsTestCaseEJBMDB.java | 174 ------------------ .../security/runas/ejb2mdb/ejb-jar-ejb3.xml | 29 --- 10 files changed, 194 insertions(+), 307 deletions(-) create mode 100644 testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/RunAsEjbMdbTestCase.java delete mode 100644 testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/RunAsTestCaseEJBMDB.java delete mode 100644 testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/ejb-jar-ejb3.xml diff --git a/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/GoodBye.java b/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/GoodBye.java index 81c9e92ce04e..abf65656feee 100644 --- a/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/GoodBye.java +++ b/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/GoodBye.java @@ -29,5 +29,5 @@ * @author Ondrej Chaloupka */ public interface GoodBye extends EJBObject { - String sayGoodBye(String userID) throws RemoteException; + String sayGoodBye() throws RemoteException; } diff --git a/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/GoodByeBean.java b/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/GoodByeBean.java index b2c06ac881a4..f829ec5e03f2 100644 --- a/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/GoodByeBean.java +++ b/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/GoodByeBean.java @@ -25,29 +25,22 @@ import javax.ejb.SessionBean; import javax.ejb.SessionContext; -import org.jboss.logging.Logger; - /** - * Simple bean which returns goodbye greeting. + * Bean returning goodbye greeting. * * @author Ondrej Chaloupka */ public class GoodByeBean implements SessionBean { private static final long serialVersionUID = 1L; - private SessionContext sessionContext; - private static final Logger log = Logger.getLogger(GoodByeBean.class); + public static final String SAYING = "GoodBye"; - public void setSessionContext(SessionContext sessionContext) { - this.sessionContext = sessionContext; + public String sayGoodBye() { + return SAYING; } - public String sayGoodBye(String userID) { - String greeting = "GoodBye " + userID; - log.trace("Inside GoodByeBean.sayGoodBye(). Greeting: " + greeting); - return greeting; + public void setSessionContext(SessionContext sessionContext) { } - // Methods typically ignored. public void ejbCreate() { } diff --git a/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/GoodByeLocal.java b/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/GoodByeLocal.java index 19806dfd9d0f..d8d2fb7154a7 100644 --- a/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/GoodByeLocal.java +++ b/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/GoodByeLocal.java @@ -29,5 +29,5 @@ * @author Ondrej Chaloupka */ public interface GoodByeLocal extends EJBLocalObject { - String sayGoodBye(String userID) throws EJBException; + String sayGoodBye() throws EJBException; } diff --git a/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/HelloBean.java b/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/HelloBean.java index 379e9e92cf25..c19d3a5ebe57 100644 --- a/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/HelloBean.java +++ b/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/HelloBean.java @@ -23,7 +23,6 @@ package org.jboss.as.test.integration.ejb.security.runas.ejb2mdb; import javax.annotation.Resource; -import javax.annotation.security.RolesAllowed; import javax.ejb.Remote; import javax.ejb.SessionContext; import javax.ejb.Stateless; @@ -38,97 +37,81 @@ import javax.jms.Session; import javax.jms.TemporaryQueue; import javax.jms.TextMessage; -import javax.naming.Context; import javax.naming.InitialContext; -import javax.naming.NamingException; +import org.jboss.as.test.shared.TimeoutUtil; import org.jboss.logging.Logger; -// Security related imports - /** - * Bean passes message to HelloMDB bean and checks the reply queue. The HellpMDB bean calls this one for getting hello greeting - * for JBossAdmin role. + * Bean passes message to HelloMDB bean and checks the reply queue. * * @author Ondrej Chaloupka */ @Stateless(name = "Hello") -@RolesAllowed({}) @Remote(Hello.class) @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public class HelloBean implements Hello { private static final Logger log = Logger.getLogger(HelloBean.class); + public static final String SAYING = "Hello"; + public static final String QUEUE_NAME = "queue/TestQueue"; + public static final String QUEUE_NAME_JNDI = "java:jboss/exported/" + QUEUE_NAME; + @Resource private SessionContext context; - @RolesAllowed("JBossAdmin") public String sayHello() throws Exception { - log.debug("session context: " + context); - log.debug("caller name: " + context.getCallerPrincipal().getName()); + InitialContext initialContext = new InitialContext(); - if (context.isCallerInRole("JBossAdmin")) { - throw new IllegalArgumentException("User is in role!!"); + try { + ConnectionFactory cf = (ConnectionFactory) initialContext.lookup("java:/ConnectionFactory"); + String replyMessage = HelloBean.sendMessage(cf); + return String.format("%s %s, %s", SAYING, getName(), replyMessage); + } finally { + initialContext.close(); } - - log.trace("HelloBean - sending message"); - String msg = this.sendMessage(); - - String name = getName(); - return "Hello " + name + "! " + msg; } - private String getName() { - return "Fred"; - } - - public String sendMessage() throws Exception { - String destinationName = "java:jboss/exported/queue/TestQueue"; - Context ic = null; - ConnectionFactory cf = null; + /** + * Helper method to send message to {@link #QUEUE_NAME}. + */ + public static String sendMessage(ConnectionFactory cf) throws Exception { Connection connection = null; try { - ic = getInitialContext(); - cf = (ConnectionFactory) ic.lookup("java:/ConnectionFactory"); - Queue queue = (Queue) ic.lookup(destinationName); + Queue queue = cf.createContext("guest", "guest").createQueue(QUEUE_NAME); connection = cf.createConnection("guest", "guest"); connection.start(); // we need to start connection for consumer + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer sender = session.createProducer(queue); TextMessage message = session.createTextMessage("hello goodbye"); TemporaryQueue replyQueue = session.createTemporaryQueue(); message.setJMSReplyTo(replyQueue); sender.send(message); + log.tracef("Message '%s' sent", message); + // consume message processed by MDB MessageConsumer consumer = session.createConsumer(replyQueue); - TextMessage replyMsg = (TextMessage) consumer.receive(5000); - log.trace("Message received:" + replyMsg); - return replyMsg.getText(); + TextMessage replyMessage = (TextMessage) consumer.receive(TimeoutUtil.adjust(5000)); + log.tracef("Message '%s' received", replyMessage); + + if(replyMessage == null) { + return "ReplyMessage is 'null'. No response received from HelloMDB." + + " Consult server log for details."; + } + return replyMessage.getText(); } finally { - if (ic != null) { - try { - ic.close(); - } catch (Exception ignore) { - } + try { + if (connection != null) connection.close(); + } catch (JMSException jmse) { + log.trace("connection close failed", jmse); } - closeConnection(connection); } } - public static InitialContext getInitialContext() throws NamingException { - return new InitialContext(); - } - - private void closeConnection(Connection conn) { - try { - if (conn != null) { - conn.close(); - } - } catch (JMSException jmse) { - log.trace("connection close failed: " + jmse); - } + private String getName() { + return context.getCallerPrincipal().getName(); } - } diff --git a/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/HelloMDB.java b/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/HelloMDB.java index c3265e4c02fe..72866ac27c7c 100644 --- a/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/HelloMDB.java +++ b/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/HelloMDB.java @@ -24,6 +24,7 @@ import javax.annotation.Resource; import javax.annotation.security.RunAs; +import javax.annotation.security.PermitAll; import javax.ejb.ActivationConfigProperty; import javax.ejb.EJB; import javax.ejb.MessageDriven; @@ -51,6 +52,7 @@ @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"), @ActivationConfigProperty(propertyName = "maxSession", propertyValue = "1")}) @RunAs("INTERNAL_ROLE") +@PermitAll // needed for access not being denied, see WFLY-8560 public class HelloMDB implements MessageListener { private static final Logger log = Logger.getLogger(HowdyBean.class); @@ -62,26 +64,18 @@ public class HelloMDB implements MessageListener { @Resource(lookup = "java:global/runasmdbejb-ejb2/GoodBye!org.jboss.as.test.integration.ejb.security.runas.ejb2mdb.GoodByeLocalHome") GoodByeLocalHome goodByeHome; - GoodByeLocal goodBye; public void onMessage(Message message) { try { - log.debug("[HelloMDB] calling goodByeHome.create()"); - goodBye = goodByeHome.create(); - log.debug("[HelloMDB] returned from goodByeHome.create()"); - String replyMsg = this.callEJB() + goodBye.sayGoodBye("user1"); - log.trace("[HelloMDB] calling sayHowdy: " + replyMsg); + GoodByeLocal goodBye = goodByeHome.create(); + String messageToReply = String.format("%s! %s.", howdy.sayHowdy(), goodBye.sayGoodBye()); - sendReply(replyMsg, (Queue) message.getJMSReplyTo(), message.getJMSMessageID()); + sendReply(messageToReply, (Queue) message.getJMSReplyTo(), message.getJMSMessageID()); } catch (Exception e) { - log.error("EXCEPTION: ", e); + log.errorf(e, "Can't process message '%s'", message); } } - private String callEJB() { - return howdy.sayHowdy(); - } - private void sendReply(String msg, Queue destination, String messageID) throws JMSException { QueueConnection conn = qFactory.createQueueConnection("guest", "guest"); try { diff --git a/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/HolaBean.java b/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/HolaBean.java index 4385f973a9f4..622f3cf0b411 100644 --- a/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/HolaBean.java +++ b/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/HolaBean.java @@ -30,10 +30,6 @@ import javax.ejb.TransactionAttribute; import javax.ejb.TransactionAttributeType; -import org.jboss.logging.Logger; - -// Security related imports - /** * Returns hola greeting for INTERNAL_ROLE. * @@ -44,25 +40,18 @@ @Remote(Hola.class) @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public class HolaBean implements Hola { - private static final Logger log = Logger.getLogger(HowdyBean.class); + public static final String SAYING = "Hola"; @Resource private SessionContext context; @RolesAllowed("INTERNAL_ROLE") public String sayHola() { - log.trace("HolaBean.sayHola(). Caller name: " + context.getCallerPrincipal().getName()); - - if (context.isCallerInRole("JBossAdmin")) { - log.trace("User is in role!!"); - } - - String name = getName(); - return "Hola " + name + "!"; + return String.format("%s %s", SAYING, getName()); } private String getName() { - return "Fred"; + return context.getCallerPrincipal().getName(); } } diff --git a/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/HowdyBean.java b/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/HowdyBean.java index 57fc099690ae..a73257c12a37 100644 --- a/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/HowdyBean.java +++ b/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/HowdyBean.java @@ -31,10 +31,6 @@ import javax.ejb.TransactionAttribute; import javax.ejb.TransactionAttributeType; -import org.jboss.logging.Logger; - -// Security related imports - /** * Returns howdy greeting for INTERNAL_ROLE. * @@ -45,7 +41,7 @@ @Local(Howdy.class) @TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED) public class HowdyBean implements Howdy { - private static final Logger log = Logger.getLogger(HowdyBean.class); + public static final String SAYING = "Howdy"; @Resource private SessionContext context; @@ -54,15 +50,10 @@ public class HowdyBean implements Howdy { Hola hola; public String sayHowdy() { - log.trace("HowdyBean.sayHowdy(). Caller name: " + context.getCallerPrincipal().getName()); - log.trace("[Howdy] calling sayHola: " + hola.sayHola()); - - String name = getName(); - - return "Howdy " + name + "! "; + return String.format("%s %s, %s", SAYING, getName(), hola.sayHola()); } private String getName() { - return "Fred"; + return context.getCallerPrincipal().getName(); } } diff --git a/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/RunAsEjbMdbTestCase.java b/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/RunAsEjbMdbTestCase.java new file mode 100644 index 000000000000..2dacd0d1ba21 --- /dev/null +++ b/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/RunAsEjbMdbTestCase.java @@ -0,0 +1,140 @@ +/* + * JBoss, Home of Professional Open Source. + * Copyright (c) 2012, Red Hat, Inc., and individual contributors + * as indicated by the @author tags. See the copyright.txt file in the + * distribution for a full listing of individual contributors. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + */ + +package org.jboss.as.test.integration.ejb.security.runas.ejb2mdb; + +import static org.jboss.as.test.shared.integration.ejb.security.PermissionUtils.createPermissionsXmlAsset; + +import java.util.PropertyPermission; + +import javax.jms.ConnectionFactory; +import javax.naming.InitialContext; + +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.api.ServerSetup; +import org.jboss.as.arquillian.api.ServerSetupTask; +import org.jboss.as.arquillian.container.ManagementClient; +import org.jboss.as.test.integration.common.jms.JMSOperations; +import org.jboss.as.test.integration.common.jms.JMSOperationsProvider; +import org.jboss.as.test.shared.TimeoutUtil; +import org.jboss.as.test.shared.util.AssumeTestGroupUtil; +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.JavaArchive; +import org.junit.Assert; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; + +/** + * Test case based on reproducer for JBPAPP-7897 + * + * Test case checks propagation of role from {@code RunAs} when ejb2, ejb3, mdb beans are part of the chain. + * + * @author Derek Horton, Ondrej Chaloupka + */ +@RunWith(Arquillian.class) +@RunAsClient +@ServerSetup(RunAsEjbMdbTestCase.RunAsTestCaseEJBMDBSetup.class) +public class RunAsEjbMdbTestCase { + + private static final String PRINCIPAL = "anonymous"; + + @ContainerResource + private InitialContext initialContext; + + @BeforeClass + public static void beforeClass() { + AssumeTestGroupUtil.assumeElytronProfileTestsEnabled(); + } + + static class RunAsTestCaseEJBMDBSetup implements ServerSetupTask { + + @Override + public void setup(final ManagementClient managementClient, final String containerId) throws Exception { + final JMSOperations ops = JMSOperationsProvider.getInstance(managementClient.getControllerClient()); + ops.createJmsQueue(HelloBean.QUEUE_NAME, HelloBean.QUEUE_NAME_JNDI); + } + + @Override + public void tearDown(final ManagementClient managementClient, final String containerId) throws Exception { + final JMSOperations ops = JMSOperationsProvider.getInstance(managementClient.getControllerClient()); + ops.removeJmsQueue(HelloBean.QUEUE_NAME); + } + } + + @Deployment(testable = false, managed = true, name = "ejb2", order = 1) + public static Archive runAsEJB2() { + + final JavaArchive jar = ShrinkWrap.create(JavaArchive.class, "runasmdbejb-ejb2.jar") + .addClasses(GoodBye.class, GoodByeBean.class, GoodByeHome.class, GoodByeLocal.class, GoodByeLocalHome.class); + jar.addAsManifestResource(RunAsEjbMdbTestCase.class.getPackage(), "ejb-jar-ejb2.xml", "ejb-jar.xml"); + return jar; + } + + @Deployment(testable = false, managed = true, name = "ejb3", order = 2) + public static Archive runAsEJB3() { + final JavaArchive jar = ShrinkWrap.create(JavaArchive.class, "runasmdbejb-ejb3.jar") + .addClasses(HelloBean.class, Hello.class, HolaBean.class, Hola.class, + Howdy.class, HowdyBean.class, HelloMDB.class, TimeoutUtil.class); + jar.addAsResource(createPermissionsXmlAsset(new PropertyPermission("ts.timeout.factor", "read")), "META-INF/jboss-permissions.xml"); + jar.addAsManifestResource(new StringAsset("Dependencies: deployment.runasmdbejb-ejb2.jar \n"), "MANIFEST.MF"); + return jar; + } + + /** + * The setup of testcase is: + * + *
+     * ejb client
+     * +-> ejb3 slsb -> ejb3 mdb (@RunAs) -> ( ejb3 slsb -> ejb2 slsb && ejb2 slsb )
+     * 
+ */ + @Test + public void clientCall() throws Exception { + Hello helloBean = (Hello) initialContext.lookup("runasmdbejb-ejb3/Hello!org.jboss.as.test.integration.ejb.security.runas.ejb2mdb.Hello"); + String hellomsg = helloBean.sayHello(); + Assert.assertEquals(String.format("%s %s, %s %s, %s %s! %s.", + HelloBean.SAYING, PRINCIPAL, HowdyBean.SAYING, PRINCIPAL, HolaBean.SAYING, PRINCIPAL, GoodByeBean.SAYING), hellomsg); + } + + /** + * The setup of testcase is: + * + *
+     * send message
+     * +-> ejb3 mdb (@RunAs) -> ( ejb3 slsb -> ejb2 slsb && ejb2 slsb )
+     * 
+ */ + @Test + public void sendMessage() throws Exception { + ConnectionFactory cf = (ConnectionFactory) initialContext.lookup("jms/RemoteConnectionFactory"); + String replyMessage = HelloBean.sendMessage(cf); + + Assert.assertEquals(String.format("%s %s, %s %s! %s.", + HowdyBean.SAYING, PRINCIPAL, HolaBean.SAYING, PRINCIPAL, GoodByeBean.SAYING), replyMessage); + } +} diff --git a/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/RunAsTestCaseEJBMDB.java b/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/RunAsTestCaseEJBMDB.java deleted file mode 100644 index b5927806defc..000000000000 --- a/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/RunAsTestCaseEJBMDB.java +++ /dev/null @@ -1,174 +0,0 @@ -/* - * JBoss, Home of Professional Open Source. - * Copyright (c) 2012, Red Hat, Inc., and individual contributors - * as indicated by the @author tags. See the copyright.txt file in the - * distribution for a full listing of individual contributors. - * - * This is free software; you can redistribute it and/or modify it - * under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation; either version 2.1 of - * the License, or (at your option) any later version. - * - * This software is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this software; if not, write to the Free - * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA - * 02110-1301 USA, or see the FSF site: http://www.fsf.org. - */ - -package org.jboss.as.test.integration.ejb.security.runas.ejb2mdb; - -import java.net.URL; -import javax.jms.Connection; -import javax.jms.ConnectionFactory; -import javax.jms.JMSException; -import javax.jms.Message; -import javax.jms.MessageConsumer; -import javax.jms.MessageProducer; -import javax.jms.Queue; -import javax.jms.Session; -import javax.jms.TemporaryQueue; -import javax.jms.TextMessage; -import javax.naming.InitialContext; - -import org.jboss.arquillian.container.test.api.Deployment; -import org.jboss.arquillian.container.test.api.OperateOnDeployment; -import org.jboss.arquillian.container.test.api.RunAsClient; -import org.jboss.arquillian.junit.Arquillian; -import org.jboss.arquillian.test.api.ArquillianResource; -import org.jboss.as.arquillian.api.ContainerResource; -import org.jboss.as.arquillian.api.ServerSetup; -import org.jboss.as.arquillian.api.ServerSetupTask; -import org.jboss.as.arquillian.container.ManagementClient; -import org.jboss.as.test.integration.common.jms.JMSOperations; -import org.jboss.as.test.integration.common.jms.JMSOperationsProvider; -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.JavaArchive; -import org.junit.Assert; -import org.junit.Test; -import org.junit.runner.RunWith; - -/** - * Test case based on reproducer for JBPAPP-7897 - RunAs role not propogated past first ejb3 method. - * - * @author Derek Horton, Ondrej Chaloupka - */ -@RunWith(Arquillian.class) -@RunAsClient -@ServerSetup(RunAsTestCaseEJBMDB.RunAsTestCaseEJBMDBSetup.class) -public class RunAsTestCaseEJBMDB { - private static final Logger log = Logger.getLogger(RunAsTestCaseEJBMDB.class.getName()); - - private static final String QUEUE_NAME = "queue/TestQueue"; - - @ArquillianResource - @OperateOnDeployment("ejb2") - URL baseUrl; - - @ContainerResource - private InitialContext initialContext; - - static class RunAsTestCaseEJBMDBSetup implements ServerSetupTask { - - @Override - public void setup(final ManagementClient managementClient, final String containerId) throws Exception { - final JMSOperations ops = JMSOperationsProvider.getInstance(managementClient); - ops.createJmsQueue(QUEUE_NAME, "java:jboss/exported/" + QUEUE_NAME); - } - - @Override - public void tearDown(final ManagementClient managementClient, final String containerId) throws Exception { - final JMSOperations ops = JMSOperationsProvider.getInstance(managementClient); - ops.removeJmsQueue(QUEUE_NAME); - } - } - - @Deployment(testable = false, managed = true, name = "ejb2", order = 1) - public static Archive runAsEJB2() { - - final JavaArchive jar = ShrinkWrap.create(JavaArchive.class, "runasmdbejb-ejb2.jar") - .addClasses( - GoodBye.class, - GoodByeBean.class, - GoodByeHome.class, - GoodByeLocal.class, - GoodByeLocalHome.class); - jar.addAsManifestResource(RunAsTestCaseEJBMDB.class.getPackage(), "ejb-jar-ejb2.xml", "ejb-jar.xml"); - return jar; - } - - @Deployment(testable = false, managed = true, name = "ejb3", order = 1) - public static Archive runAsEJB3() { - final JavaArchive jar = ShrinkWrap.create(JavaArchive.class, "runasmdbejb-ejb3.jar") - .addClasses( - HelloBean.class, - Hello.class, - HolaBean.class, - Hola.class, - Howdy.class, - HowdyBean.class, - HelloMDB.class); - jar.addAsManifestResource(new StringAsset("Dependencies: deployment.runasmdbejb-ejb2.jar \n"), "MANIFEST.MF"); - jar.addAsManifestResource(RunAsTestCaseEJBMDB.class.getPackage(), "ejb-jar-ejb3.xml", "ejb-jar.xml"); - return jar; - } - - @Test - public void testEjb() throws Exception { - Hello helloBean = (Hello) initialContext.lookup("runasmdbejb-ejb3/Hello!org.jboss.as.test.integration.ejb.security.runas.ejb2mdb.Hello"); - String hellomsg = helloBean.sayHello(); - log.trace(hellomsg); - Assert.assertEquals("Hello Fred! Howdy Fred! GoodBye user1", hellomsg); - } - - @Test - public void testSendMessage() throws Exception { - ConnectionFactory cf = null; - Connection connection = null; - Session session = null; - - try { - cf = (ConnectionFactory) initialContext.lookup("jms/RemoteConnectionFactory"); - Queue queue = (Queue) initialContext.lookup(QUEUE_NAME); - connection = cf.createConnection("guest", "guest"); - connection.start(); //for consumer we need to start connection - session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - MessageProducer sender = session.createProducer(queue); - TemporaryQueue replyQueue = session.createTemporaryQueue(); - TextMessage message = session.createTextMessage("hello goodbye"); - message.setJMSReplyTo(replyQueue); - sender.send(message); - log.trace("testSendMessage(): Message sent!"); - - MessageConsumer consumer = session.createConsumer(replyQueue); - Message replyMsg = consumer.receive(5000); - Assert.assertNotNull(replyMsg); - Assert.assertTrue(replyMsg instanceof TextMessage); - String actual = ((TextMessage) replyMsg).getText(); - Assert.assertEquals("Howdy Fred! GoodBye user1", actual); - } finally { - if (session != null) { - session.close(); - } - closeConnection(connection); - } - } - - private void closeConnection(Connection conn) { - try { - if (conn != null) { - conn.close(); - } - } catch (JMSException jmse) { - log.trace("connection close failed: " + jmse); - } - } - -} diff --git a/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/ejb-jar-ejb3.xml b/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/ejb-jar-ejb3.xml deleted file mode 100644 index 1312a9be57b7..000000000000 --- a/testsuite/integration/basic/src/test/java/org/jboss/as/test/integration/ejb/security/runas/ejb2mdb/ejb-jar-ejb3.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - -