Reviewers: jat,

Description:
Description:
============
JUnitShell fails tests after 60s, but BrowserManagerServer may have a
queue much longer than that if multiple JUnitShell instances are using
it.  For example, our own build runs in parallel, and some tests take
2-5 minutes to complete, so other tests will timeout while waiting in
the queue.

Fix:
====
RunStyleRemoteWeb now takes a similar path as RunStyleManual, giving
clients unlimited time to start the test. RunStyleRemoteWeb already
handles communication errors with JUnitShell, so we just check for
wasInterrupted.

Testing:
========
Verified manually that both manual and remote web tests run as expected.
  Also verified that killing BrowserManagerServer or never starting it is
handled by JUnitShell.

Please review this at http://gwt-code-reviews.appspot.com/87805

Affected files:
   user/src/com/google/gwt/junit/JUnitShell.java
   user/src/com/google/gwt/junit/RunStyle.java
   user/src/com/google/gwt/junit/RunStyleManual.java
   user/src/com/google/gwt/junit/RunStyleRemoteWeb.java


Index: user/src/com/google/gwt/junit/RunStyleRemoteWeb.java
===================================================================
--- user/src/com/google/gwt/junit/RunStyleRemoteWeb.java        (revision 6454)
+++ user/src/com/google/gwt/junit/RunStyleRemoteWeb.java        (working copy)
@@ -201,7 +201,15 @@
      return true;
    }

+  /**
+   * Remote web tests can be queued for extended periods.
+   */
    @Override
+  public boolean isStartDelayed() {
+    return true;
+  }
+
+  @Override
    public synchronized void launchModule(String moduleName)
        throws UnableToCompleteException {
      String url = shell.getModuleUrl(moduleName);
Index: user/src/com/google/gwt/junit/JUnitShell.java
===================================================================
--- user/src/com/google/gwt/junit/JUnitShell.java       (revision 6454)
+++ user/src/com/google/gwt/junit/JUnitShell.java       (working copy)
@@ -688,15 +688,22 @@
     */
    protected boolean notDone() {
      int activeClients =  
messageQueue.getNumClientsRetrievedTest(currentTestInfo);
-    if (firstLaunch && runStyle instanceof RunStyleManual) {
-      String[] newClients = messageQueue.getNewClients();
-      int printIndex = activeClients - newClients.length + 1;
-      for (String newClient : newClients) {
-        System.out.println(printIndex + " - " + newClient);
-        ++printIndex;
+    if (firstLaunch && runStyle.isStartDelayed()) {
+      // Pretty print the list of clients for manual tests.
+      if (runStyle instanceof RunStyleManual) {
+        String[] newClients = messageQueue.getNewClients();
+        int printIndex = activeClients - newClients.length + 1;
+        for (String newClient : newClients) {
+          System.out.println(printIndex + " - " + newClient);
+          ++printIndex;
+        }
        }
-      if (activeClients != this.numClients) {
-        // Wait forever for first contact; user-driven.
+
+      if (runStyle.wasInterrupted()) {
+        // Exit early if the test is interrupted.
+        throw new TimeoutException("A remote browser died a mysterious  
death.");
+      } else if (activeClients != this.numClients) {
+        // Wait forever for first contact.
          return true;
        }
      }
Index: user/src/com/google/gwt/junit/RunStyleManual.java
===================================================================
--- user/src/com/google/gwt/junit/RunStyleManual.java   (revision 6454)
+++ user/src/com/google/gwt/junit/RunStyleManual.java   (working copy)
@@ -46,7 +46,15 @@
      return true;
    }

+  /**
+   * Manual tests are started by users in user time.
+   */
    @Override
+  public boolean isStartDelayed() {
+    return true;
+  }
+
+  @Override
    public void launchModule(String moduleName) throws  
UnableToCompleteException {
      if (numClients == 1) {
        System.out.println("Please navigate your browser to this URL:");
Index: user/src/com/google/gwt/junit/RunStyle.java
===================================================================
--- user/src/com/google/gwt/junit/RunStyle.java (revision 6454)
+++ user/src/com/google/gwt/junit/RunStyle.java (working copy)
@@ -51,6 +51,15 @@
    }

    /**
+   * Check whether or not tests start immediately or if they can be  
delayed.
+   *
+   * @return <code>true</code> if the test can be delayed
+   */
+  public boolean isStartDelayed() {
+    return false;
+  }
+
+  /**
     * Requests initial launch of the browser. This should only be called  
once per
     * instance of RunStyle.
     *



--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to