Browse Source

Redo Push reconnect tests.

Change-Id: I75330f67f6a57658e95b9510502bf6a1e38924ad
tags/7.2.0.beta1
Sauli Tähkäpää 10 years ago
parent
commit
487963914e

+ 34
- 37
uitest/src/com/vaadin/tests/push/BasicPushTest.java View File

@@ -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);
}

}

+ 1
- 0
uitest/src/com/vaadin/tests/push/ReconnectLongPollingTest.java View File

@@ -15,6 +15,7 @@
*/
package com.vaadin.tests.push;


public class ReconnectLongPollingTest extends ReconnectTest {

@Override

+ 1
- 0
uitest/src/com/vaadin/tests/push/ReconnectStreamingTest.java View File

@@ -15,6 +15,7 @@
*/
package com.vaadin.tests.push;


public class ReconnectStreamingTest extends ReconnectTest {

@Override

+ 74
- 78
uitest/src/com/vaadin/tests/push/ReconnectTest.java View File

@@ -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();
}

+ 3
- 3
uitest/src/com/vaadin/tests/tb3/MultiBrowserTestWithProxy.java View File

@@ -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();
}


Loading…
Cancel
Save