diff options
Diffstat (limited to 'uitest/src/com/vaadin/tests/push/ReconnectTest.java')
-rw-r--r-- | uitest/src/com/vaadin/tests/push/ReconnectTest.java | 156 |
1 files changed, 77 insertions, 79 deletions
diff --git a/uitest/src/com/vaadin/tests/push/ReconnectTest.java b/uitest/src/com/vaadin/tests/push/ReconnectTest.java index 5938ab1ff5..5ad2e7a127 100644 --- a/uitest/src/com/vaadin/tests/push/ReconnectTest.java +++ b/uitest/src/com/vaadin/tests/push/ReconnectTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 Vaadin Ltd. + * Copyright 2000-2014 Vaadin Ltd. * * Licensed 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 @@ -15,115 +15,103 @@ */ 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(); + openDebugLogTab(); + 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 +129,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(); } |