aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSauli Tähkäpää <sauli@vaadin.com>2014-04-09 10:58:53 +0300
committerVaadin Code Review <review@vaadin.com>2014-04-14 11:09:44 +0000
commit487963914e6ff7ab8def7af809ef2db4b79faa55 (patch)
treec26e634ed2dee151cb781231b5f04d1e27aca720
parente697d8b318c88d0acecd1fbb23231667fda5b4b8 (diff)
downloadvaadin-framework-487963914e6ff7ab8def7af809ef2db4b79faa55.tar.gz
vaadin-framework-487963914e6ff7ab8def7af809ef2db4b79faa55.zip
Redo Push reconnect tests.
Change-Id: I75330f67f6a57658e95b9510502bf6a1e38924ad
-rw-r--r--uitest/src/com/vaadin/tests/push/BasicPushTest.java71
-rw-r--r--uitest/src/com/vaadin/tests/push/ReconnectLongPollingTest.java1
-rwxr-xr-xuitest/src/com/vaadin/tests/push/ReconnectStreamingTest.java1
-rw-r--r--uitest/src/com/vaadin/tests/push/ReconnectTest.java152
-rwxr-xr-xuitest/src/com/vaadin/tests/tb3/MultiBrowserTestWithProxy.java6
5 files changed, 113 insertions, 118 deletions
diff --git a/uitest/src/com/vaadin/tests/push/BasicPushTest.java b/uitest/src/com/vaadin/tests/push/BasicPushTest.java
index 670876e0f4..7f4492aeba 100644
--- a/uitest/src/com/vaadin/tests/push/BasicPushTest.java
+++ b/uitest/src/com/vaadin/tests/push/BasicPushTest.java
@@ -15,9 +15,10 @@
*/
package com.vaadin.tests.push;
-import org.junit.Assert;
import org.junit.Test;
+import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
+import org.openqa.selenium.support.ui.ExpectedCondition;
import com.vaadin.tests.annotations.TestCategory;
import com.vaadin.tests.tb3.AbstractTB3Test;
@@ -26,49 +27,28 @@ import com.vaadin.tests.tb3.MultiBrowserTest;
@TestCategory("push")
public abstract class BasicPushTest extends MultiBrowserTest {
+ @Override
+ public void setup() throws Exception {
+ super.setup();
+ }
+
@Test
public void testPush() throws InterruptedException {
openTestURL();
- // Test client initiated push
- Assert.assertEquals(0, getClientCounter());
getIncrementButton().click();
- Assert.assertEquals("Client counter not incremented by button click",
- 1, getClientCounter());
+ testBench().disableWaitForVaadin();
+
+ waitUntilClientCounterChanges(1);
+
getIncrementButton().click();
getIncrementButton().click();
getIncrementButton().click();
- Assert.assertEquals("Four clicks should have incremented counter to 4",
- 4, getClientCounter());
+ waitUntilClientCounterChanges(4);
// Test server initiated push
getServerCounterStartButton().click();
- try {
- Assert.assertEquals(0, getServerCounter());
- sleep(3000);
- int serverCounter = getServerCounter();
- if (serverCounter < 1) {
- // No push has happened
- Assert.fail("No push has occured within 3s");
- }
- sleep(3000);
- if (getServerCounter() <= serverCounter) {
- // No push has happened
- Assert.fail("Only one push took place within 6s");
-
- }
- } finally {
- // Avoid triggering push assertions
- getServerCounterStopButton().click();
- }
- }
-
- private int getServerCounter() {
- return getServerCounter(this);
- }
-
- private int getClientCounter() {
- return getClientCounter(this);
+ waitUntilServerCounterChanges();
}
public static int getClientCounter(AbstractTB3Test t) {
@@ -81,10 +61,6 @@ public abstract class BasicPushTest extends MultiBrowserTest {
return getIncrementButton(this);
}
- private WebElement getServerCounterStopButton() {
- return getServerCounterStopButton(this);
- }
-
private WebElement getServerCounterStartButton() {
return getServerCounterStartButton(this);
}
@@ -107,4 +83,25 @@ public abstract class BasicPushTest extends MultiBrowserTest {
return t.vaadinElementById(BasicPush.INCREMENT_BUTTON_ID);
}
+ private void waitUntilClientCounterChanges(final int expectedValue) {
+ waitUntil(new ExpectedCondition<Boolean>() {
+
+ @Override
+ public Boolean apply(WebDriver input) {
+ return BasicPushTest.getClientCounter(BasicPushTest.this) == expectedValue;
+ }
+ }, 10);
+ }
+
+ private void waitUntilServerCounterChanges() {
+ final int counter = BasicPushTest.getServerCounter(this);
+ waitUntil(new ExpectedCondition<Boolean>() {
+
+ @Override
+ public Boolean apply(WebDriver input) {
+ return BasicPushTest.getServerCounter(BasicPushTest.this) > counter;
+ }
+ }, 10);
+ }
+
} \ No newline at end of file
diff --git a/uitest/src/com/vaadin/tests/push/ReconnectLongPollingTest.java b/uitest/src/com/vaadin/tests/push/ReconnectLongPollingTest.java
index 6d0c0c53b0..4ea0c7daf4 100644
--- a/uitest/src/com/vaadin/tests/push/ReconnectLongPollingTest.java
+++ b/uitest/src/com/vaadin/tests/push/ReconnectLongPollingTest.java
@@ -15,6 +15,7 @@
*/
package com.vaadin.tests.push;
+
public class ReconnectLongPollingTest extends ReconnectTest {
@Override
diff --git a/uitest/src/com/vaadin/tests/push/ReconnectStreamingTest.java b/uitest/src/com/vaadin/tests/push/ReconnectStreamingTest.java
index ebacf5be37..4e2143f9e0 100755
--- a/uitest/src/com/vaadin/tests/push/ReconnectStreamingTest.java
+++ b/uitest/src/com/vaadin/tests/push/ReconnectStreamingTest.java
@@ -15,6 +15,7 @@
*/
package com.vaadin.tests.push;
+
public class ReconnectStreamingTest extends ReconnectTest {
@Override
diff --git a/uitest/src/com/vaadin/tests/push/ReconnectTest.java b/uitest/src/com/vaadin/tests/push/ReconnectTest.java
index 5938ab1ff5..b4159ff4c2 100644
--- a/uitest/src/com/vaadin/tests/push/ReconnectTest.java
+++ b/uitest/src/com/vaadin/tests/push/ReconnectTest.java
@@ -15,115 +15,101 @@
*/
package com.vaadin.tests.push;
-import org.junit.Assert;
import org.junit.Test;
+import org.openqa.selenium.By;
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;
public abstract class ReconnectTest extends MultiBrowserTestWithProxy {
- @Test
- public void testShortDisconnect() throws Exception {
+ @Override
+ public void setup() throws Exception {
+ super.setup();
+
setDebug(true);
openTestURL();
startTimer();
waitUntilServerCounterChanges();
- disconnectProxy();
- Thread.sleep(1000);
- connectProxy();
- waitUntilServerCounterChanges();
+
+ testBench().disableWaitForVaadin();
}
@Test
- public void testUserActionWhileDisconnectedWithDelay() throws Exception {
- setDebug(true);
- openTestURL();
- startTimer();
- waitUntilServerCounterChanges();
+ public void messageIsQueuedOnDisconnect() throws JSchException {
disconnectProxy();
- Assert.assertEquals(0, getClientCounter());
- getIncrementClientCounterButton().click();
- // No change while disconnected
- Assert.assertEquals(0, getClientCounter());
- // Firefox sends extra onopen calls after a while, which breaks
- // everything
- Thread.sleep(10000);
- connectProxy();
- waitUntilServerCounterChanges();
- // The change should have appeared when reconnected
- Assert.assertEquals(1, getClientCounter());
+
+ clickButtonAndWaitForTwoReconnectAttempts();
+
+ connectAndVerifyConnectionEstablished();
+ waitUntilClientCounterChanges(1);
}
@Test
- public void testUserActionWhileDisconnected() throws Exception {
- setDebug(true);
- openTestURL();
- startTimer();
- waitUntilServerCounterChanges();
+ public void messageIsNotSentBeforeConnectionIsEstablished()
+ throws JSchException, InterruptedException {
disconnectProxy();
- Assert.assertEquals(0, getClientCounter());
- getIncrementClientCounterButton().click();
- // No change while disconnected
- Assert.assertEquals(0, getClientCounter());
- Thread.sleep(1000);
- connectProxy();
- waitUntilServerCounterChanges();
- // The change should have appeared when reconnected
- Assert.assertEquals(1, getClientCounter());
- // IE has problems with another reconnect
- disconnectProxy();
+ waitForNextReconnectionAttempt();
+ clickButtonAndWaitForTwoReconnectAttempts();
+
+ connectAndVerifyConnectionEstablished();
+ waitUntilClientCounterChanges(1);
+ }
+
+ private void clickButtonAndWaitForTwoReconnectAttempts() {
+ clickClientButton();
+
+ // Reconnection attempt is where pending messages can
+ // falsely be sent to server.
+ waitForNextReconnectionAttempt();
+
+ // Waiting for the second reconnection attempt makes sure that the
+ // first attempt has been completed or aborted.
+ waitForNextReconnectionAttempt();
+ }
+
+ private void clickClientButton() {
getIncrementClientCounterButton().click();
- Assert.assertEquals(1, getClientCounter());
- Thread.sleep(1000);
- connectProxy();
- waitUntilServerCounterChanges();
- Assert.assertEquals(2, getClientCounter());
}
- @Test
- public void testLongDisconnect() throws Exception {
- setDebug(true);
- openTestURL();
- startTimer();
- waitUntilServerCounterChanges();
- disconnectProxy();
- Thread.sleep(12000);
- connectProxy();
- waitUntilServerCounterChanges();
+ private void waitForNextReconnectionAttempt() {
+ clearDebugMessages();
+ waitForDebugMessage("Reopening push connection");
}
- @Test
- public void testReallyLongDisconnect() throws Exception {
- setDebug(true);
- openTestURL();
- startTimer();
- waitUntilServerCounterChanges();
- disconnectProxy();
- Thread.sleep(120000);
- connectProxy();
- waitUntilServerCounterChanges();
+ private void clearDebugMessages() {
+ driver.findElement(
+ By.xpath("//button[@class='v-debugwindow-button' and @title='Clear log']"))
+ .click();
}
- @Test
- public void testMultipleDisconnects() throws Exception {
- setDebug(true);
- openTestURL();
- startTimer();
- waitUntilServerCounterChanges();
- for (int i = 0; i < 5; i++) {
- disconnectProxy();
- Thread.sleep(1000);
- connectProxy();
- waitUntilServerCounterChanges();
- }
+ private boolean hasDebugMessage(String message) {
+ return getDebugMessage(message) != null;
+ }
+
+ private WebElement getDebugMessage(String message) {
+ return driver.findElement(By.xpath(String.format(
+ "//span[@class='v-debugwindow-message' and text()='%s']",
+ message)));
+ }
+
+ private void waitForDebugMessage(final String expectedMessage) {
+ waitUntil(new ExpectedCondition<Boolean>() {
+
+ @Override
+ public Boolean apply(WebDriver input) {
+ return hasDebugMessage(expectedMessage);
+ }
+ }, 30);
}
- private int getClientCounter() {
- return BasicPushTest.getClientCounter(this);
+ private void connectAndVerifyConnectionEstablished() throws JSchException {
+ connectProxy();
+ waitUntilServerCounterChanges();
}
private WebElement getIncrementClientCounterButton() {
@@ -141,6 +127,16 @@ public abstract class ReconnectTest extends MultiBrowserTestWithProxy {
}, 30);
}
+ private void waitUntilClientCounterChanges(final int expectedValue) {
+ waitUntil(new ExpectedCondition<Boolean>() {
+
+ @Override
+ public Boolean apply(WebDriver input) {
+ return BasicPushTest.getClientCounter(ReconnectTest.this) == expectedValue;
+ }
+ }, 5);
+ }
+
private void startTimer() {
BasicPushTest.getServerCounterStartButton(this).click();
}
diff --git a/uitest/src/com/vaadin/tests/tb3/MultiBrowserTestWithProxy.java b/uitest/src/com/vaadin/tests/tb3/MultiBrowserTestWithProxy.java
index d600b5fef2..d3e9ed6ef8 100755
--- a/uitest/src/com/vaadin/tests/tb3/MultiBrowserTestWithProxy.java
+++ b/uitest/src/com/vaadin/tests/tb3/MultiBrowserTestWithProxy.java
@@ -19,7 +19,6 @@ import java.io.File;
import java.util.concurrent.atomic.AtomicInteger;
import org.junit.After;
-import org.junit.Before;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
@@ -38,8 +37,9 @@ public abstract class MultiBrowserTestWithProxy extends MultiBrowserTest {
System.getProperty("sshkey.file"), sshDir + "id_rsa",
sshDir + "id_dsa", sshDir + "id_rsa2" };
- @Before
- public void setupInitialProxy() throws JSchException {
+ @Override
+ public void setup() throws Exception {
+ super.setup();
connectProxy();
}