From 9af08db5cea9503dc121a681cbdb55bce1b0e0f0 Mon Sep 17 00:00:00 2001 From: Sultan Zhantemirov Date: Wed, 10 Jun 2020 17:47:58 +0200 Subject: [PATCH] [WFLY-12190] EJB over HTTP discovery: EjbOverHttpWrongCredentialsTestCase --- .../ejb/http/EjbOverHttpTestCase.java | 67 ++++++++++------ .../EjbOverHttpWrongCredentialsTestCase.java | 79 +++++++++++++++++++ .../multinode/ejb/http/StatelessBean.java | 7 +- .../ejb-http-wildfly-config-wrong.xml | 23 ++++++ 4 files changed, 153 insertions(+), 23 deletions(-) create mode 100644 testsuite/integration/multinode/src/test/java/org/jboss/as/test/multinode/ejb/http/EjbOverHttpWrongCredentialsTestCase.java create mode 100644 testsuite/integration/multinode/src/test/resources/ejb-http-wildfly-config-wrong.xml diff --git a/testsuite/integration/multinode/src/test/java/org/jboss/as/test/multinode/ejb/http/EjbOverHttpTestCase.java b/testsuite/integration/multinode/src/test/java/org/jboss/as/test/multinode/ejb/http/EjbOverHttpTestCase.java index 7ab8e0b9f08e..196e84a5c502 100644 --- a/testsuite/integration/multinode/src/test/java/org/jboss/as/test/multinode/ejb/http/EjbOverHttpTestCase.java +++ b/testsuite/integration/multinode/src/test/java/org/jboss/as/test/multinode/ejb/http/EjbOverHttpTestCase.java @@ -22,6 +22,18 @@ package org.jboss.as.test.multinode.ejb.http; +import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD; +import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ALLOW_RESOURCE_SERVICE_RESTART; +import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP; +import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OPERATION_HEADERS; +import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR; +import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.REMOVE; +import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.SUBSYSTEM; +import static org.jboss.as.test.shared.integration.ejb.security.PermissionUtils.createFilePermission; +import static org.jboss.as.test.shared.integration.ejb.security.PermissionUtils.createPermissionsXmlAsset; +import java.util.Arrays; +import javax.naming.InitialContext; +import org.jboss.arquillian.container.test.api.Deployer; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.container.test.api.OperateOnDeployment; import org.jboss.arquillian.container.test.api.TargetsContainer; @@ -41,19 +53,6 @@ import org.junit.Test; import org.junit.runner.RunWith; -import javax.naming.InitialContext; -import java.util.Arrays; - -import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ADD; -import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.ALLOW_RESOURCE_SERVICE_RESTART; -import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP; -import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OPERATION_HEADERS; -import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.OP_ADDR; -import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.REMOVE; -import static org.jboss.as.controller.descriptions.ModelDescriptionConstants.SUBSYSTEM; -import static org.jboss.as.test.shared.integration.ejb.security.PermissionUtils.createFilePermission; -import static org.jboss.as.test.shared.integration.ejb.security.PermissionUtils.createPermissionsXmlAsset; - /** * This test che * @@ -63,8 +62,12 @@ @ServerSetup(EjbOverHttpTestCase.EjbOverHttpTestCaseServerSetup.class) public class EjbOverHttpTestCase { private static final Logger log = Logger.getLogger(EjbOverHttpTestCase.class); - public static final String ARCHIVE_NAME_CLIENT = "ejboverhttp-test-client"; public static final String ARCHIVE_NAME_SERVER = "ejboverhttp-test-server"; + public static final String ARCHIVE_NAME_CLIENT = "ejboverhttp-test-client"; + public static final int NO_EJB_RETURN_CODE = -1; + + @ArquillianResource + private Deployer deployer; static class EjbOverHttpTestCaseServerSetup implements ServerSetupTask { @@ -113,7 +116,7 @@ public static void printSysProps() { log.trace("System properties:\n" + System.getProperties()); } - @Deployment(name = "server") + @Deployment(name = "server", managed = false) @TargetsContainer("multinode-server") public static Archive deployment0() { JavaArchive jar = createJar(ARCHIVE_NAME_SERVER); @@ -123,7 +126,18 @@ public static Archive deployment0() { @Deployment(name = "client") @TargetsContainer("multinode-client") public static Archive deployment1() { - JavaArchive jar = createJar(ARCHIVE_NAME_CLIENT); + JavaArchive clientJar = createClientJar(); + return clientJar; + } + + private static JavaArchive createJar(String archiveName) { + JavaArchive jar = ShrinkWrap.create(JavaArchive.class, archiveName + ".jar"); + jar.addClasses(StatelessBean.class, StatelessLocal.class, StatelessRemote.class); + return jar; + } + + private static JavaArchive createClientJar() { + JavaArchive jar = createJar(EjbOverHttpTestCase.ARCHIVE_NAME_CLIENT); jar.addClasses(EjbOverHttpTestCase.class); jar.addAsManifestResource("META-INF/jboss-ejb-client-profile.xml", "jboss-ejb-client.xml") .addAsManifestResource("ejb-http-wildfly-config.xml", "wildfly-config.xml") @@ -135,20 +149,29 @@ public static Archive deployment1() { return jar; } - private static JavaArchive createJar(String archiveName) { - JavaArchive jar = ShrinkWrap.create(JavaArchive.class, archiveName + ".jar"); - jar.addClasses(StatelessBean.class, StatelessLocal.class, StatelessRemote.class); - return jar; - } - @Test @OperateOnDeployment("client") public void testBasicInvocation(@ArquillianResource InitialContext ctx) throws Exception { + deployer.deploy("server"); + StatelessRemote bean = (StatelessRemote) ctx.lookup("java:module/" + StatelessBean.class.getSimpleName() + "!" + StatelessRemote.class.getName()); Assert.assertNotNull(bean); + // initial discovery int methodCount = bean.remoteCall(); Assert.assertEquals(1, methodCount); + + deployer.undeploy("server"); + + // failed discovery after undeploying server deployment + int returnValue = bean.remoteCall(); + Assert.assertEquals(NO_EJB_RETURN_CODE, returnValue); + + deployer.deploy("server"); + + // rediscovery after redeployment + methodCount = bean.remoteCall(); + Assert.assertEquals(1, methodCount); } } \ No newline at end of file diff --git a/testsuite/integration/multinode/src/test/java/org/jboss/as/test/multinode/ejb/http/EjbOverHttpWrongCredentialsTestCase.java b/testsuite/integration/multinode/src/test/java/org/jboss/as/test/multinode/ejb/http/EjbOverHttpWrongCredentialsTestCase.java new file mode 100644 index 000000000000..e2550c3f9661 --- /dev/null +++ b/testsuite/integration/multinode/src/test/java/org/jboss/as/test/multinode/ejb/http/EjbOverHttpWrongCredentialsTestCase.java @@ -0,0 +1,79 @@ +package org.jboss.as.test.multinode.ejb.http; + +import static org.jboss.as.test.shared.integration.ejb.security.PermissionUtils.createFilePermission; +import static org.jboss.as.test.shared.integration.ejb.security.PermissionUtils.createPermissionsXmlAsset; +import java.util.Arrays; +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.TargetsContainer; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.arquillian.test.api.ArquillianResource; +import org.jboss.as.arquillian.api.ServerSetup; +import org.jboss.shrinkwrap.api.Archive; +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; + +/** + * EJB over HTTP remote call should fail with incorrect wildfly-config.xml credentials + * + * @author Sultan Zhantemirov + */ +@RunWith(Arquillian.class) +@ServerSetup(EjbOverHttpTestCase.EjbOverHttpTestCaseServerSetup.class) +public class EjbOverHttpWrongCredentialsTestCase { + + public static final String ARCHIVE_NAME_SERVER = "ejboverhttp-test-server"; + public static final String ARCHIVE_NAME_CLIENT_WRONG_CREDENTIALS = "ejboverhttp-test-client-wrong-credentials"; + + @Deployment(name = "server") + @TargetsContainer("multinode-server") + public static Archive deployment0() { + JavaArchive jar = createJar(ARCHIVE_NAME_SERVER); + return jar; + } + + @Deployment(name = "client-wrong-credentials") + @TargetsContainer("multinode-client") + public static Archive deployment1() { + JavaArchive jar = createClientJar(); + return jar; + } + + private static JavaArchive createJar(String archiveName) { + JavaArchive jar = ShrinkWrap.create(JavaArchive.class, archiveName + ".jar"); + jar.addClasses(StatelessBean.class, StatelessLocal.class, StatelessRemote.class); + return jar; + } + + private static JavaArchive createClientJar() { + JavaArchive jar = createJar(EjbOverHttpWrongCredentialsTestCase.ARCHIVE_NAME_CLIENT_WRONG_CREDENTIALS); + jar.addClasses(EjbOverHttpTestCase.class); + jar.addAsManifestResource("META-INF/jboss-ejb-client-profile.xml", "jboss-ejb-client.xml") + .addAsManifestResource("ejb-http-wildfly-config-wrong.xml", "wildfly-config.xml") + .addAsManifestResource(createPermissionsXmlAsset(createFilePermission("read,write", + "jbossas.multinode.client", Arrays.asList("standalone", "data", "ejb-xa-recovery")), + createFilePermission("read,write", + "jbossas.multinode.client", Arrays.asList("standalone", "data", "ejb-xa-recovery", "-"))), + "permissions.xml"); + return jar; + } + + @Test + @OperateOnDeployment("client-wrong-credentials") + public void testBasicInvocationWithWrongCredentials(@ArquillianResource InitialContext ctx) throws Exception { + StatelessRemote bean = (StatelessRemote) ctx.lookup("java:module/" + StatelessBean.class.getSimpleName() + "!" + + StatelessRemote.class.getName()); + Assert.assertNotNull(bean); + + try { + int methodCount = bean.remoteCall(); + Assert.assertEquals(EjbOverHttpTestCase.NO_EJB_RETURN_CODE, methodCount); + } catch (javax.naming.AuthenticationException e) { + // expected + } + } +} diff --git a/testsuite/integration/multinode/src/test/java/org/jboss/as/test/multinode/ejb/http/StatelessBean.java b/testsuite/integration/multinode/src/test/java/org/jboss/as/test/multinode/ejb/http/StatelessBean.java index 771b4be33714..d40f8a887f8c 100644 --- a/testsuite/integration/multinode/src/test/java/org/jboss/as/test/multinode/ejb/http/StatelessBean.java +++ b/testsuite/integration/multinode/src/test/java/org/jboss/as/test/multinode/ejb/http/StatelessBean.java @@ -25,6 +25,7 @@ import org.jboss.logging.Logger; import javax.ejb.Local; +import javax.ejb.NoSuchEJBException; import javax.ejb.Remote; import javax.ejb.Stateless; import javax.naming.Context; @@ -53,7 +54,11 @@ public int remoteCall() throws Exception { log.trace("Calling Remote... " + jndiContext.getEnvironment()); StatelessRemote stateless = (StatelessRemote) jndiContext.lookup("ejb:/" +EjbOverHttpTestCase.ARCHIVE_NAME_SERVER + "//" + StatelessBean.class.getSimpleName() + "!" + StatelessRemote.class.getName()); - return stateless.method(); + try { + return stateless.method(); + } catch (NoSuchEJBException e) { + return EjbOverHttpTestCase.NO_EJB_RETURN_CODE; + } } public int method() throws Exception { diff --git a/testsuite/integration/multinode/src/test/resources/ejb-http-wildfly-config-wrong.xml b/testsuite/integration/multinode/src/test/resources/ejb-http-wildfly-config-wrong.xml new file mode 100644 index 000000000000..cbbba6017b3d --- /dev/null +++ b/testsuite/integration/multinode/src/test/resources/ejb-http-wildfly-config-wrong.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file