summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pom.xml2
-rw-r--r--server/src/main/java/com/vaadin/server/Constants.java2
-rw-r--r--uitest/pom.xml5
-rw-r--r--uitest/src/test/java/com/vaadin/tests/application/ReconnectDialogUITest.java6
-rw-r--r--uitest/src/test/java/com/vaadin/tests/push/BasicPushTest.java9
-rw-r--r--uitest/src/test/java/com/vaadin/tests/push/ReconnectTest.java27
-rwxr-xr-xuitest/src/test/java/com/vaadin/tests/tb3/MultiBrowserTestWithProxy.java39
-rw-r--r--uitest/src/test/java/com/vaadin/tests/tb3/SimpleProxy.java101
8 files changed, 138 insertions, 53 deletions
diff --git a/pom.xml b/pom.xml
index 5e54a459d2..95de050a4f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -41,7 +41,7 @@
<!-- Atmosphere versions -->
<!-- Note that this should be kept in sync with the class Constants -->
- <atmosphere.runtime.version>2.2.9.vaadin2</atmosphere.runtime.version>
+ <atmosphere.runtime.version>2.2.13.vaadin1</atmosphere.runtime.version>
<atmosphere.js.version>2.2.13.vaadin5</atmosphere.js.version>
<!-- Dependency unpack directory -->
diff --git a/server/src/main/java/com/vaadin/server/Constants.java b/server/src/main/java/com/vaadin/server/Constants.java
index 45dbb29480..0fdb5dca07 100644
--- a/server/src/main/java/com/vaadin/server/Constants.java
+++ b/server/src/main/java/com/vaadin/server/Constants.java
@@ -66,7 +66,7 @@ public interface Constants {
+ "=================================================================";
// Keep the version number in sync with pom.xml
- static final String REQUIRED_ATMOSPHERE_RUNTIME_VERSION = "2.2.9.vaadin2";
+ static final String REQUIRED_ATMOSPHERE_RUNTIME_VERSION = "2.2.13.vaadin1";
static final String INVALID_ATMOSPHERE_VERSION_WARNING = "\n"
+ "=================================================================\n"
diff --git a/uitest/pom.xml b/uitest/pom.xml
index ca27cf17a6..0cba2e0e2d 100644
--- a/uitest/pom.xml
+++ b/uitest/pom.xml
@@ -182,11 +182,6 @@
<scope>test</scope>
</dependency>
<dependency>
- <groupId>com.jcraft</groupId>
- <artifactId>jsch</artifactId>
- <version>0.1.52</version>
- </dependency>
- <dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.5</version>
diff --git a/uitest/src/test/java/com/vaadin/tests/application/ReconnectDialogUITest.java b/uitest/src/test/java/com/vaadin/tests/application/ReconnectDialogUITest.java
index 1fde1d0844..4f457cc4aa 100644
--- a/uitest/src/test/java/com/vaadin/tests/application/ReconnectDialogUITest.java
+++ b/uitest/src/test/java/com/vaadin/tests/application/ReconnectDialogUITest.java
@@ -7,7 +7,7 @@ import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedCondition;
-import com.jcraft.jsch.JSchException;
+import java.io.IOException;
import com.vaadin.testbench.elements.ButtonElement;
import com.vaadin.testbench.parallel.TestCategory;
import com.vaadin.tests.tb3.MultiBrowserTestWithProxy;
@@ -16,7 +16,7 @@ import com.vaadin.tests.tb3.MultiBrowserTestWithProxy;
public class ReconnectDialogUITest extends MultiBrowserTestWithProxy {
@Test
- public void reconnectTogglesBodyStyle() throws JSchException {
+ public void reconnectTogglesBodyStyle() throws IOException {
openTestURL();
getButton().click();
disconnectProxy();
@@ -33,7 +33,7 @@ public class ReconnectDialogUITest extends MultiBrowserTestWithProxy {
}
@Test
- public void reconnectDialogShownAndDisappears() throws JSchException {
+ public void reconnectDialogShownAndDisappears() throws IOException {
openTestURL();
getButton().click();
Assert.assertEquals("1. Hello from the server", getLogRow(0));
diff --git a/uitest/src/test/java/com/vaadin/tests/push/BasicPushTest.java b/uitest/src/test/java/com/vaadin/tests/push/BasicPushTest.java
index 9c1955c7b8..bd7b82f366 100644
--- a/uitest/src/test/java/com/vaadin/tests/push/BasicPushTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/push/BasicPushTest.java
@@ -2,6 +2,7 @@ package com.vaadin.tests.push;
import org.junit.Test;
import org.openqa.selenium.By;
+import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedCondition;
@@ -74,8 +75,12 @@ public abstract class BasicPushTest extends MultiBrowserTest {
@Override
public Boolean apply(WebDriver input) {
- return BasicPushTest
- .getClientCounter(BasicPushTest.this) == expectedValue;
+ try {
+ return BasicPushTest
+ .getClientCounter(BasicPushTest.this) == expectedValue;
+ } catch (NoSuchElementException e) {
+ return false;
+ }
}
}, 10);
}
diff --git a/uitest/src/test/java/com/vaadin/tests/push/ReconnectTest.java b/uitest/src/test/java/com/vaadin/tests/push/ReconnectTest.java
index c9ddc223d7..1b7b2349bd 100644
--- a/uitest/src/test/java/com/vaadin/tests/push/ReconnectTest.java
+++ b/uitest/src/test/java/com/vaadin/tests/push/ReconnectTest.java
@@ -1,14 +1,15 @@
package com.vaadin.tests.push;
import org.junit.Test;
-import org.openqa.selenium.By;
+import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedCondition;
-import com.jcraft.jsch.JSchException;
import com.vaadin.tests.tb3.MultiBrowserTestWithProxy;
+import java.io.IOException;
+
public abstract class ReconnectTest extends MultiBrowserTestWithProxy {
@Override
@@ -26,7 +27,7 @@ public abstract class ReconnectTest extends MultiBrowserTestWithProxy {
}
@Test
- public void messageIsQueuedOnDisconnect() throws JSchException {
+ public void messageIsQueuedOnDisconnect() throws IOException {
disconnectProxy();
clickButtonAndWaitForTwoReconnectAttempts();
@@ -37,7 +38,7 @@ public abstract class ReconnectTest extends MultiBrowserTestWithProxy {
@Test
public void messageIsNotSentBeforeConnectionIsEstablished()
- throws JSchException, InterruptedException {
+ throws IOException {
disconnectProxy();
waitForNextReconnectionAttempt();
@@ -68,7 +69,7 @@ public abstract class ReconnectTest extends MultiBrowserTestWithProxy {
waitForDebugMessage("Reopening push connection");
}
- private void connectAndVerifyConnectionEstablished() throws JSchException {
+ private void connectAndVerifyConnectionEstablished() throws IOException {
connectProxy();
waitUntilServerCounterChanges();
}
@@ -83,8 +84,12 @@ public abstract class ReconnectTest extends MultiBrowserTestWithProxy {
@Override
public Boolean apply(WebDriver input) {
- return BasicPushTest
- .getServerCounter(ReconnectTest.this) > counter;
+ try {
+ return BasicPushTest
+ .getServerCounter(ReconnectTest.this) > counter;
+ } catch (NoSuchElementException e) {
+ return false;
+ }
}
}, 30);
}
@@ -94,8 +99,12 @@ public abstract class ReconnectTest extends MultiBrowserTestWithProxy {
@Override
public Boolean apply(WebDriver input) {
- return BasicPushTest
- .getClientCounter(ReconnectTest.this) == expectedValue;
+ try {
+ return BasicPushTest
+ .getClientCounter(ReconnectTest.this) == expectedValue;
+ } catch (NoSuchElementException e) {
+ return false;
+ }
}
}, 5);
}
diff --git a/uitest/src/test/java/com/vaadin/tests/tb3/MultiBrowserTestWithProxy.java b/uitest/src/test/java/com/vaadin/tests/tb3/MultiBrowserTestWithProxy.java
index 28530b3042..b5b3d84d02 100755
--- a/uitest/src/test/java/com/vaadin/tests/tb3/MultiBrowserTestWithProxy.java
+++ b/uitest/src/test/java/com/vaadin/tests/tb3/MultiBrowserTestWithProxy.java
@@ -1,26 +1,18 @@
package com.vaadin.tests.tb3;
-import java.io.File;
import java.util.concurrent.atomic.AtomicInteger;
import org.junit.After;
-import com.jcraft.jsch.JSch;
-import com.jcraft.jsch.JSchException;
-import com.jcraft.jsch.Session;
+import java.io.IOException;
import com.vaadin.testbench.parallel.TestCategory;
@TestCategory("push")
public abstract class MultiBrowserTestWithProxy extends MultiBrowserTest {
private static AtomicInteger availablePort = new AtomicInteger(2000);
- private Session proxySession;
+ private SimpleProxy proxySession;
private Integer proxyPort = null;
- private JSch jsch;
- private static String sshDir = System.getProperty("user.home") + "/.ssh/";
- private String[] publicKeys = new String[] {
- System.getProperty("sshkey.file"), sshDir + "id_rsa",
- sshDir + "id_dsa", sshDir + "id_rsa2" };
@Override
public void setup() throws Exception {
@@ -61,7 +53,7 @@ public abstract class MultiBrowserTestWithProxy extends MultiBrowserTest {
/**
* Ensure the proxy is active. Does nothing if the proxy is already active.
*/
- protected void connectProxy() throws JSchException {
+ protected void connectProxy() throws IOException {
if (proxySession != null) {
return;
}
@@ -71,7 +63,7 @@ public abstract class MultiBrowserTestWithProxy extends MultiBrowserTest {
try {
createProxy(getProxyPort());
break;
- } catch (JSchException e) {
+ } catch (IOException e) {
try {
sleep(500);
} catch (InterruptedException e1) {
@@ -84,26 +76,9 @@ public abstract class MultiBrowserTestWithProxy extends MultiBrowserTest {
}
}
- private void createProxy(int proxyPort) throws JSchException {
- if (jsch == null) {
- jsch = new JSch();
-
- String keyFile = null;
- for (String publicKey : publicKeys) {
- if (publicKey != null) {
- if (new File(publicKey).exists()) {
- keyFile = publicKey;
- break;
- }
- }
- }
- jsch.addIdentity(keyFile);
- }
- proxySession = jsch.getSession("localhost");
- proxySession.setConfig("StrictHostKeyChecking", "no");
- proxySession.setPortForwardingL("0.0.0.0", proxyPort,
- super.getDeploymentHostname(), super.getDeploymentPort());
- proxySession.connect();
+ private void createProxy(int proxyPort) throws IOException {
+ proxySession = new SimpleProxy(proxyPort, getDeploymentHostname(), getDeploymentPort());
+ proxySession.start();
}
@Override
diff --git a/uitest/src/test/java/com/vaadin/tests/tb3/SimpleProxy.java b/uitest/src/test/java/com/vaadin/tests/tb3/SimpleProxy.java
new file mode 100644
index 0000000000..9fb4a82022
--- /dev/null
+++ b/uitest/src/test/java/com/vaadin/tests/tb3/SimpleProxy.java
@@ -0,0 +1,101 @@
+package com.vaadin.tests.tb3;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.InetAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.SocketException;
+import java.util.Queue;
+import java.util.concurrent.ConcurrentLinkedQueue;
+
+public class SimpleProxy extends Thread {
+ private final ThreadGroup proxyThreads;
+ private final Queue<Socket> sockets = new ConcurrentLinkedQueue<Socket>();
+ private final ServerSocket serverSocket;
+ private final String remoteHost;
+ private final int remotePort;
+
+ public SimpleProxy(int localPort, String remoteHost, int remotePort) throws IOException {
+ super(new ThreadGroup("proxy " + localPort), "server");
+ this.remoteHost = remoteHost;
+ this.remotePort = remotePort;
+ proxyThreads = getThreadGroup();
+ serverSocket = new ServerSocket(localPort, 100,
+ InetAddress.getByName("0.0.0.0"));
+
+ setDaemon(true);
+ }
+
+ @Override
+ public void run() {
+ try {
+ while (!isInterrupted()) {
+ try {
+ Socket proxySocket = serverSocket.accept();
+ sockets.add(proxySocket);
+ Socket remoteSocket = new Socket(remoteHost, remotePort);
+ sockets.add(remoteSocket);
+ new CopySocket(proxyThreads, proxySocket, remoteSocket).start();
+ new CopySocket(proxyThreads, remoteSocket, proxySocket).start();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ } finally {
+ disconnect();
+ }
+ }
+
+ public void disconnect() {
+ proxyThreads.interrupt();
+ for (Socket socket : sockets) {
+ try {
+ socket.close();
+ } catch (IOException ignored) {
+ }
+ }
+ try {
+ serverSocket.close();
+ } catch (IOException ignored) {
+ }
+ }
+
+ private class CopySocket extends Thread {
+
+ private final InputStream inputStream;
+ private final OutputStream outputStream;
+
+ private CopySocket(ThreadGroup proxyThreads, Socket srcSocket, Socket dstSocket) throws IOException {
+ super(proxyThreads, "proxy worker");
+ setDaemon(true);
+ inputStream = srcSocket.getInputStream();
+ outputStream = dstSocket.getOutputStream();
+ }
+
+ @Override
+ public void run() {
+ try {
+ for (int b; (b = inputStream.read()) >= 0; ) {
+ outputStream.write(b);
+ }
+ } catch (SocketException ignored) {
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ inputStream.close();
+ } catch (IOException ignored) {
+
+ }
+ try {
+ outputStream.close();
+ } catch (IOException ignored) {
+
+ }
+ }
+ }
+ }
+
+}