Skip to content

Commit

Permalink
WFLY-7538 reenable WebSocketTestCase with Security manager and extend…
Browse files Browse the repository at this point in the history
… it (cover also standalone client usecase)
  • Loading branch information
kwart committed Dec 21, 2016
1 parent e4a383f commit e9755bd
Showing 1 changed file with 59 additions and 18 deletions.
Expand Up @@ -2,59 +2,100 @@


import static org.jboss.as.test.shared.integration.ejb.security.PermissionUtils.createPermissionsXmlAsset; import static org.jboss.as.test.shared.integration.ejb.security.PermissionUtils.createPermissionsXmlAsset;


import java.io.IOException;
import java.net.SocketPermission; import java.net.SocketPermission;
import java.net.URI; import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.PropertyPermission; import java.util.PropertyPermission;


import javax.websocket.ContainerProvider; import javax.websocket.ContainerProvider;
import javax.websocket.DeploymentException;
import javax.websocket.Session; import javax.websocket.Session;
import javax.websocket.WebSocketContainer; import javax.websocket.WebSocketContainer;


import org.jboss.arquillian.container.test.api.Deployment; 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.junit.Arquillian;
import org.jboss.arquillian.test.api.ArquillianResource;
import org.jboss.as.test.shared.TestSuiteEnvironment; import org.jboss.as.test.shared.TestSuiteEnvironment;
import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.StringAsset; import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.spec.WebArchive; import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Assume;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;


/** /**
* Simple smoke test for WebSockets. It tests both basic use-cases - WebSocket client either as a standalone application
* or as a part of a WAR-deployment.
*
* @author Stuart Douglas * @author Stuart Douglas
*/ */
@RunWith(Arquillian.class) @RunWith(Arquillian.class)
public class WebSocketTestCase { public class WebSocketTestCase {


@Deployment private static final String CLIENT_STANDALONE = "standalone";
public static WebArchive deploy() { private static final String CLIENT_IN_DEPLOYMENT = "indeployment";
final String jbossHome = System.getenv("JBOSS_HOME");
return ShrinkWrap.create(WebArchive.class, "websocket.war") @Deployment(testable = false, name = CLIENT_STANDALONE)
.addPackage(WebSocketTestCase.class.getPackage()) public static WebArchive createThinDeployment() {
.addClass(TestSuiteEnvironment.class) return createBasicDeployment(CLIENT_STANDALONE);
}

@Deployment(name = CLIENT_IN_DEPLOYMENT)
public static WebArchive createRichDeployment() {
return createBasicDeployment(CLIENT_IN_DEPLOYMENT)
.addClasses(WebSocketTestCase.class, AnnotatedClient.class, TestSuiteEnvironment.class)
.addAsManifestResource( .addAsManifestResource(
createPermissionsXmlAsset( createPermissionsXmlAsset(
// Needed for the TestSuiteEnvironment.getServerAddress() // Needed for the TestSuiteEnvironment.getServerAddress()
new PropertyPermission("management.address", "read"), new PropertyPermission("management.address", "read"), new PropertyPermission("node0", "read"),
new PropertyPermission("node0", "read"),
new PropertyPermission("jboss.http.port", "read"), new PropertyPermission("jboss.http.port", "read"),
// Needed for the serverContainer.connectToServer() // Needed for the serverContainer.connectToServer()
new SocketPermission("*:" + TestSuiteEnvironment.getHttpPort(), "connect,resolve") new SocketPermission(
), "permissions.xml") TestSuiteEnvironment.getServerAddress() + ":" + TestSuiteEnvironment.getHttpPort(),
.addAsManifestResource(new StringAsset("io.undertow.websockets.jsr.UndertowContainerProvider"), "connect,resolve"),
"services/javax.websocket.ContainerProvider"); // Needed for xnio's WorkerThread which binds to Xnio.ANY_INET_ADDRESS, see WFLY-7538
new SocketPermission(TestSuiteEnvironment.getServerAddress() + ":0", "listen,resolve")),
"permissions.xml");
} }


@Test @Test
public void testWebSocket() throws Exception { @OperateOnDeployment(CLIENT_STANDALONE)
//TODO WFLY-7538 - This needs to be reenabled @RunAsClient
Assume.assumeTrue(System.getSecurityManager() == null); public void testClientStandalone(@ArquillianResource URL webapp) throws Exception {
assertWebSocket(webapp);
}


@Test
@OperateOnDeployment(CLIENT_IN_DEPLOYMENT)
public void testClientInDeployment(@ArquillianResource URL webapp) throws Exception {
assertWebSocket(webapp);
}

private void assertWebSocket(URL webapp) throws InterruptedException, IOException, DeploymentException, URISyntaxException {
AnnotatedClient endpoint = new AnnotatedClient(); AnnotatedClient endpoint = new AnnotatedClient();
WebSocketContainer serverContainer = ContainerProvider.getWebSocketContainer(); WebSocketContainer serverContainer = ContainerProvider.getWebSocketContainer();
Session session = serverContainer.connectToServer(endpoint, new URI("ws", "", TestSuiteEnvironment.getServerAddress(), TestSuiteEnvironment.getHttpPort(), "/websocket/websocket/Stuart", "", "")); try (Session session = serverContainer.connectToServer(endpoint,
Assert.assertEquals("Hello Stuart", endpoint.getMessage()); new URI("ws", "", TestSuiteEnvironment.getServerAddress(), TestSuiteEnvironment.getHttpPort(),
webapp.getPath() + "websocket/Stuart", "", ""))) {
Assert.assertEquals("Hello Stuart", endpoint.getMessage());
}
}


/**
* Creates basic deployment with given name for WebSocket endpoint.
*
* @param name deployment name
* @return Shrinkwrap WebArchive instance
*/
private static WebArchive createBasicDeployment(String name) {
return ShrinkWrap.create(WebArchive.class, name + ".war")
.addClasses(AnnotatedEndpoint.class)
.addAsManifestResource(new StringAsset("io.undertow.websockets.jsr.UndertowContainerProvider"),
"services/javax.websocket.ContainerProvider");
} }

} }

0 comments on commit e9755bd

Please sign in to comment.