package org.jboss.as.test.integration.naming.remote.multiple;
import java.net.SocketPermission;
import java.net.URL;
import java.util.PropertyPermission;
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.wildfly.naming.java.permission.JndiPermission;
import org.jboss.as.test.integration.common.HttpRequest;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import static java.util.concurrent.TimeUnit.SECONDS;
import org.jboss.as.test.integration.security.common.Utils;
import org.jboss.as.test.shared.util.AssumeTestGroupUtil;
import static org.jboss.as.test.shared.integration.ejb.security.PermissionUtils.createPermissionsXmlAsset;
import org.jboss.remoting3.security.RemotingPermission;
import static org.junit.Assert.assertEquals;
/**
* Regression test for AS7-5718
* @author jlivings@redhat.com
*/
@RunWith(Arquillian.class)
@RunAsClient
public class MultipleClientRemoteJndiTestCase {
@ArquillianResource(RunRmiServlet.class)
@OperateOnDeployment("one")
private URL urlOne;
@ArquillianResource(RunRmiServlet.class)
@OperateOnDeployment("two")
private URL urlTwo;
private static final Package thisPackage = MultipleClientRemoteJndiTestCase.class.getPackage();
@BeforeClass
public static void beforeClass() {
AssumeTestGroupUtil.assumeElytronProfileTestsEnabled();
}
@Deployment(name="one")
public static WebArchive deploymentOne() {
return ShrinkWrap.create(WebArchive.class, "one.war")
.addClasses(RunRmiServlet.class, MyObject.class)
.setWebXML(thisPackage, "web.xml")
.addAsManifestResource(thisPackage, "war-jboss-deployment-structure.xml", "jboss-deployment-structure.xml")
.addAsManifestResource(createPermissionsXmlAsset(
// RunRmiServlet reads node0 system property
new PropertyPermission("node0", "read"),
// RunRmiServlet looks up for MyObject using connection through http-remoting Endpoint
new RemotingPermission("connect"),
new SocketPermission(Utils.getDefaultHost(true), "accept,connect,listen,resolve"),
new RuntimePermission("getClassLoader")),
"permissions.xml");
}
@Deployment(name="two")
public static WebArchive deploymentTwo() {
return ShrinkWrap.create(WebArchive.class, "two.war")
.addClasses(RunRmiServlet.class, MyObject.class)
.setWebXML(thisPackage, "web.xml")
.addAsManifestResource(thisPackage, "war-jboss-deployment-structure.xml", "jboss-deployment-structure.xml")
.addAsManifestResource(createPermissionsXmlAsset(
// RunRmiServlet reads node0 system property
new PropertyPermission("node0", "read"),
// RunRmiServlet looks up for MyObject using connection through http-remoting Endpoint
new RemotingPermission("connect"),
new SocketPermission(Utils.getDefaultHost(true), "accept,connect,listen,resolve"),
new RuntimePermission("getClassLoader")),
"permissions.xml");
}
@Deployment(name="binder")
public static WebArchive deploymentThree() {
return ShrinkWrap.create(WebArchive.class, "binder.war")
.addClasses(BindRmiServlet.class, MyObject.class)
.setWebXML(MultipleClientRemoteJndiTestCase.class.getPackage(), "web.xml")
// BindRmiServlet binds java:jboss/exported/loc/stub
.addAsManifestResource(createPermissionsXmlAsset(new JndiPermission("java:jboss/exported/loc/stub", "bind")),
"permissions.xml");
}
@Test
public void testLifeCycle() throws Exception {
String result1 = HttpRequest.get(urlOne.toExternalForm() + "RunRmiServlet", 1000, SECONDS);
assertEquals("Test", result1);
String result2 = HttpRequest.get(urlTwo.toExternalForm() + "RunRmiServlet", 1000, SECONDS);
assertEquals("Test", result2);
}
}