mirror of https://github.com/apache/activemq.git
Add tests for Websockets using selenium
git-svn-id: https://svn.apache.org/repos/asf/activemq/trunk@1342813 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
a1b235d275
commit
afcbc4e5a3
|
@ -202,6 +202,24 @@
|
|||
<artifactId>gentlyweb-utils</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.seleniumhq.selenium</groupId>
|
||||
<artifactId>selenium-java</artifactId>
|
||||
<version>2.21.0</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.seleniumhq.selenium</groupId>
|
||||
<artifactId>selenium-chrome-driver</artifactId>
|
||||
<version>2.21.0</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.seleniumhq.selenium</groupId>
|
||||
<artifactId>selenium-firefox-driver</artifactId>
|
||||
<version>2.21.0</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
|
|
|
@ -17,29 +17,190 @@
|
|||
|
||||
package org.apache.activemq.transport.ws;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.Socket;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.net.URL;
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
import org.apache.activemq.broker.BrokerFactory;
|
||||
import org.apache.activemq.broker.BrokerService;
|
||||
import org.apache.activemq.transport.stomp.StompConnection;
|
||||
import org.apache.activemq.util.Wait;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import org.openqa.selenium.By;
|
||||
import org.openqa.selenium.WebDriver;
|
||||
import org.openqa.selenium.WebElement;
|
||||
import org.openqa.selenium.chrome.ChromeDriver;
|
||||
import org.openqa.selenium.chrome.ChromeOptions;
|
||||
import org.openqa.selenium.firefox.FirefoxDriver;
|
||||
import org.openqa.selenium.firefox.FirefoxProfile;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
public class WSTransportTest {
|
||||
|
||||
protected String getBindLocation() {
|
||||
return "ws://localhost:61614";
|
||||
|
||||
private static final Logger LOG = LoggerFactory.getLogger(WSTransportTest.class);
|
||||
private static final int MESSAGE_COUNT = 1000;
|
||||
|
||||
private BrokerService broker;
|
||||
private WebDriver driver;
|
||||
private File profileDir;
|
||||
|
||||
private String stompUri;
|
||||
private String wsUri;
|
||||
|
||||
private StompConnection stompConnection = new StompConnection();
|
||||
|
||||
protected BrokerService createBroker(boolean deleteMessages) throws Exception {
|
||||
BrokerService broker = BrokerFactory.createBroker(
|
||||
new URI("broker:()/localhost?persistent=false&useJmx=false"));
|
||||
|
||||
stompUri = broker.addConnector("stomp://localhost:0").getPublishableConnectString();
|
||||
wsUri = broker.addConnector("ws://127.0.0.1:61623").getPublishableConnectString();
|
||||
broker.setDeleteAllMessagesOnStartup(deleteMessages);
|
||||
broker.start();
|
||||
broker.waitUntilStarted();
|
||||
|
||||
return broker;
|
||||
}
|
||||
|
||||
protected void stopBroker() throws Exception {
|
||||
if (broker != null) {
|
||||
broker.stop();
|
||||
broker.waitUntilStopped();
|
||||
broker = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
profileDir = new File("activemq-data/profiles");
|
||||
broker = createBroker(true);
|
||||
stompConnect();
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
try {
|
||||
stompDisconnect();
|
||||
} catch(Exception e) {
|
||||
// Some tests explicitly disconnect from stomp so can ignore
|
||||
} finally {
|
||||
stopBroker();
|
||||
if (driver != null) {
|
||||
driver.quit();
|
||||
driver = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBrokerStart() throws Exception {
|
||||
BrokerService broker = BrokerFactory.createBroker(new URI("broker:()/localhost?persistent=false&useJmx=false"));
|
||||
broker.addConnector(getBindLocation());
|
||||
broker.start();
|
||||
broker.waitUntilStarted();
|
||||
Thread.sleep(2000);
|
||||
//System.in.read();
|
||||
broker.stop();
|
||||
broker.waitUntilStopped();
|
||||
assertTrue(broker.isStarted());
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testFireFoxWebSockets() throws Exception {
|
||||
driver = createFireFoxWebDriver();
|
||||
doTestWebSockets(driver);
|
||||
}
|
||||
|
||||
@Ignore
|
||||
@Test
|
||||
public void testChromeWebSockets() throws Exception {
|
||||
driver = createChromeWebDriver();
|
||||
doTestWebSockets(driver);
|
||||
}
|
||||
|
||||
protected WebDriver createChromeWebDriver() throws Exception {
|
||||
File profile = new File(profileDir, "chrome");
|
||||
profile.mkdirs();
|
||||
ChromeOptions options = new ChromeOptions();
|
||||
options.addArguments("--enable-udd-profiles",
|
||||
"--user-data-dir=" + profile,
|
||||
"--allow-file-access-from-files");
|
||||
return new ChromeDriver(options);
|
||||
}
|
||||
|
||||
protected WebDriver createFireFoxWebDriver() throws Exception {
|
||||
File profile = new File(profileDir, "firefox");
|
||||
profile.mkdirs();
|
||||
return new FirefoxDriver(new FirefoxProfile(profile));
|
||||
}
|
||||
|
||||
private void stompConnect() throws IOException, URISyntaxException, UnknownHostException {
|
||||
URI connectUri = new URI(stompUri);
|
||||
stompConnection.open(createSocket(connectUri));
|
||||
}
|
||||
|
||||
private Socket createSocket(URI connectUri) throws IOException {
|
||||
return new Socket("127.0.0.1", connectUri.getPort());
|
||||
}
|
||||
|
||||
private void stompDisconnect() throws IOException {
|
||||
if (stompConnection != null) {
|
||||
stompConnection.close();
|
||||
stompConnection = null;
|
||||
}
|
||||
}
|
||||
|
||||
public void doTestWebSockets(WebDriver driver) throws Exception {
|
||||
|
||||
URL url = getClass().getResource("websocket.html");
|
||||
|
||||
LOG.info("working dir = ");
|
||||
|
||||
LOG.info("page url: " + url);
|
||||
|
||||
driver.get(url + "#" + wsUri);
|
||||
|
||||
final WebElement webStatus = driver.findElement(By.id("status"));
|
||||
final WebElement webReceived = driver.findElement(By.id("received"));
|
||||
|
||||
while ("Loading" == webStatus.getText()) {
|
||||
Thread.sleep(100);
|
||||
}
|
||||
|
||||
// Skip test if browser does not support websockets..
|
||||
if (webStatus.getText() != "No WebSockets") {
|
||||
|
||||
assertTrue("Should have connected", Wait.waitFor(new Wait.Condition() {
|
||||
|
||||
@Override
|
||||
public boolean isSatisified() throws Exception {
|
||||
return webStatus.getText().equals("Connected");
|
||||
}
|
||||
}));
|
||||
|
||||
stompConnection.connect("system", "manager");
|
||||
|
||||
stompConnection.send("/queue/websocket", "Hello");
|
||||
assertTrue("Should have received message by now.", Wait.waitFor(new Wait.Condition() {
|
||||
@Override
|
||||
public boolean isSatisified() throws Exception {
|
||||
return webReceived.getText().equals("Hello");
|
||||
}
|
||||
}));
|
||||
|
||||
for (int i = 1; i <= MESSAGE_COUNT; ++i) {
|
||||
stompConnection.send("/queue/websocket", "messages #" + i);
|
||||
}
|
||||
|
||||
assertTrue("Should have received messages by now.", Wait.waitFor(new Wait.Condition() {
|
||||
@Override
|
||||
public boolean isSatisified() throws Exception {
|
||||
return webReceived.getText().equals("messages #" + MESSAGE_COUNT);
|
||||
}
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,58 @@
|
|||
<!DOCTYPE html>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Chat Example Using STOMP Over WebSockets</title>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
|
||||
<![endif]-->
|
||||
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js'></script>
|
||||
<script src="../../../../../../../../activemq-web-demo/src/main/webapp/websocket/stomp.js"></script>
|
||||
<script>//<![CDATA[
|
||||
$(document).ready(function() {
|
||||
if(window.WebSocket) {
|
||||
var url = "ws://localhost:61623";
|
||||
if(window.location.hash) {
|
||||
url = window.location.hash.substring(1);
|
||||
}
|
||||
var login = "admin";
|
||||
var passcode = "password";
|
||||
destination = "/queue/websocket";
|
||||
|
||||
$("#status").html("Connecting");
|
||||
client = Stomp.client(url);
|
||||
|
||||
// the client is notified when it is connected to the server.
|
||||
client.connect(login, passcode, function(frame) {
|
||||
$("#status").html("Connected");
|
||||
client.subscribe(destination, function(message) {
|
||||
$("#received").html(message.body);
|
||||
});
|
||||
});
|
||||
} else {
|
||||
$("#status").html("No WebSockets");
|
||||
}
|
||||
});
|
||||
//]]></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="status">Loading</div>
|
||||
<div id="received"></div>
|
||||
</body>
|
||||
</html>
|
Loading…
Reference in New Issue