Revision: 7153
Author: j
...@google.com
Date: Tue Nov 24 01:02:15 2009
Log: Fix JUnitShell/etc so it doesn't rely on the user agent to identify
different
sessions, but instead sets a session cookie. This fixes two instances/tabs
of the same browser as well as connections via proxies.
Patch by: scottb
Review by: jat
http://code.google.com/p/google-web-toolkit/source/detail?r=7153
Modified:
/trunk/user/src/com/google/gwt/junit/JUnitMessageQueue.java
/trunk/user/src/com/google/gwt/junit/JUnitShell.java
/trunk/user/src/com/google/gwt/junit/server/JUnitHostImpl.java
/trunk/user/super/com/google/gwt/junit/translatable/com/google/gwt/junit/cl ient/impl/GWTRunner.java
/trunk/user/test/com/google/gwt/junit/JUnitMessageQueueTest.java
=======================================
--- /trunk/user/src/com/google/gwt/junit/JUnitMessageQueue.java Mon Nov 16
18:58:40 2009
+++ /trunk/user/src/com/google/gwt/junit/JUnitMessageQueue.java Tue Nov 24
01:02:15 2009
@@ -16,6 +16,7 @@
package com.google.gwt.junit;
import com.google.gwt.dev.util.collect.HashSet;
+import com.google.gwt.dev.util.collect.IdentityHashMap;
import com.google.gwt.junit.client.TimeoutException;
import com.google.gwt.junit.client.impl.JUnitResult;
import com.google.gwt.junit.client.impl.JUnitHost.TestBlock;
@@ -50,10 +51,12 @@
public static class ClientStatus {
public int blockIndex = 0;
public final String clientId;
+ public String clientDesc;
public boolean isNew = true;
- public ClientStatus(String clientId) {
+ public ClientStatus(String clientId, String clientDesc) {
this.clientId = clientId;
+ this.clientDesc = clientDesc;
}
}
@@ -97,7 +100,7 @@
* null, it means that the client requested the test but did not report
the
* results yet.
*/
- private final Map<TestInfo, Map<String, JUnitResult>> testResults = new
HashMap<TestInfo, Map<String, JUnitResult>>();
+ private final Map<TestInfo, Map<ClientStatus, JUnitResult>> testResults
= new HashMap<TestInfo, Map<ClientStatus, JUnitResult>>();
/**
* A set of the GWT user agents (eg. ie6, gecko) that have connected.
@@ -122,11 +125,11 @@
* <code>timeout</code> is exceeded or the next test does not
match
* <code>testClassName</code>
*/
- public TestBlock getTestBlock(String clientId, String userAgent,
- int blockIndex, long timeout) throws TimeoutException {
+ public TestBlock getTestBlock(String clientId, String clientDesc,
+ String userAgent, int blockIndex, long timeout) throws
TimeoutException {
synchronized (clientStatusesLock) {
userAgents.add(userAgent);
- ClientStatus clientStatus = ensureClientStatus(clientId);
+ ClientStatus clientStatus = ensureClientStatus(clientId, clientDesc);
clientStatus.blockIndex = blockIndex;
// The client has finished all of the tests.
@@ -161,21 +164,21 @@
// Record that this client has retrieved the current tests.
TestInfo[] tests = testBlocks.get(blockIndex);
for (TestInfo testInfo : tests) {
- ensureResults(testInfo).put(clientId, null);
+ ensureResults(testInfo).put(clientStatus, null);
}
return new TestBlock(tests, blockIndex);
}
}
- public void reportFatalLaunch(String clientId, String userAgent,
+ public void reportFatalLaunch(String clientId, String clientDesc, String
userAgent,
JUnitResult result) {
// Fatal launch error, cause this client to fail the whole block.
- ClientStatus clientStatus = ensureClientStatus(clientId);
+ ClientStatus clientStatus = ensureClientStatus(clientId, clientDesc);
Map<TestInfo, JUnitResult> results = new HashMap<TestInfo,
JUnitResult>();
for (TestInfo testInfo : testBlocks.get(clientStatus.blockIndex)) {
results.put(testInfo, result);
}
- reportResults(clientId, userAgent, results);
+ reportResults(clientId, clientDesc, userAgent, results);
}
/**
@@ -185,19 +188,19 @@
* @param userAgent the user agent property of the client
* @param results the result of running the test block
*/
- public void reportResults(String clientId, String userAgent,
+ public void reportResults(String clientId, String clientDesc, String
userAgent,
Map<TestInfo, JUnitResult> results) {
synchronized (clientStatusesLock) {
if (results == null) {
throw new IllegalArgumentException("results cannot be null");
}
userAgents.add(userAgent);
- ensureClientStatus(clientId);
+ ClientStatus clientStatus = ensureClientStatus(clientId, clientDesc);
// Cache the test results.
for (Map.Entry<TestInfo, JUnitResult> entry : results.entrySet()) {
TestInfo testInfo = entry.getKey();
- ensureResults(testInfo).put(clientId, entry.getValue());
+ ensureResults(testInfo).put(clientStatus, entry.getValue());
}
clientStatusesLock.notifyAll();
@@ -237,7 +240,7 @@
List<String> results = new ArrayList<String>();
for (ClientStatus clientStatus : clientStatuses.values()) {
if (clientStatus.isNew) {
- results.add(clientStatus.clientId);
+ results.add(clientStatus.clientDesc);
// Record that this client is no longer new.
clientStatus.isNew = false;
}
@@ -259,7 +262,7 @@
int getNumClientsRetrievedTest(TestInfo testInfo) {
synchronized (clientStatusesLock) {
int count = 0;
- Map<String, JUnitResult> results = testResults.get(testInfo);
+ Map<ClientStatus, JUnitResult> results = testResults.get(testInfo);
if (results != null) {
count = results.size();
}
@@ -282,7 +285,7 @@
* @param testInfo the {@link TestInfo} to check for results
* @return A map of results from all clients.
*/
- Map<String, JUnitResult> getResults(TestInfo testInfo) {
+ Map<ClientStatus, JUnitResult> getResults(TestInfo testInfo) {
synchronized (clientStatusesLock) {
return testResults.get(testInfo);
}
@@ -307,7 +310,7 @@
*/
String getUnretrievedClients(TestInfo testInfo) {
synchronized (clientStatusesLock) {
- Map<String, JUnitResult> results = testResults.get(testInfo);
+ Map<ClientStatus, JUnitResult> results = testResults.get(testInfo);
StringBuilder buf = new StringBuilder();
int lineCount = 0;
for (ClientStatus clientStatus : clientStatuses.values()) {
@@ -315,12 +318,12 @@
buf.append('\n');
}
- if (results == null |
| !results.containsKey(clientStatus.clientId)) {
+ if (results == null || !results.containsKey(clientStatus)) {
buf.append(" - NO RESPONSE: ");
} else {
buf.append(" - (ok): ");
}
- buf.append(clientStatus.clientId);
+ buf.append(clientStatus.clientDesc);
++lineCount;
}
int difference = numClients - getNumClientsRetrievedTest(testInfo);
@@ -358,11 +361,11 @@
// Print a list of clients that have connected but not returned
results.
int itemCount = 0;
StringBuilder buf = new StringBuilder();
- Map<String, JUnitResult> results = testResults.get(testInfo);
+ Map<ClientStatus, JUnitResult> results = testResults.get(testInfo);
if (results != null) {
- for (Map.Entry<String, JUnitResult> entry : results.entrySet()) {
+ for (Map.Entry<ClientStatus, JUnitResult> entry :
results.entrySet()) {
if (entry.getValue() == null) {
- buf.append(entry.getKey());
+ buf.append(entry.getKey().clientDesc);
buf.append("\n");
itemCount++;
}
@@ -391,7 +394,7 @@
*/
boolean hasResults(TestInfo testInfo) {
synchronized (clientStatusesLock) {
- Map<String, JUnitResult> results = testResults.get(testInfo);
+ Map<ClientStatus, JUnitResult> results = testResults.get(testInfo);
if (results == null || results.size() < numClients) {
return false;
}
@@ -410,14 +413,14 @@
* THROWABLES_NOT_RETRIED}.
*/
boolean needsRerunning(TestInfo testInfo) {
- Map<String, JUnitResult> results = getResults(testInfo);
+ Map<ClientStatus, JUnitResult> results = getResults(testInfo);
if (results == null) {
return true;
}
if (results.size() != numClients) {
return true;
}
- for (Entry<String, JUnitResult> entry : results.entrySet()) {
+ for (Entry<ClientStatus, JUnitResult> entry : results.entrySet()) {
JUnitResult result = entry.getValue();
if (result == null) {
return true;
@@ -451,11 +454,14 @@
* @param clientId the id of the client
* @return the {@link ClientStatus} for the client
*/
- private ClientStatus ensureClientStatus(String clientId) {
+ private ClientStatus ensureClientStatus(String clientId, String
clientDesc) {
ClientStatus clientStatus = clientStatuses.get(clientId);
if (clientStatus == null) {
- clientStatus = new ClientStatus(clientId);
+ clientStatus = new ClientStatus(clientId, clientDesc);
clientStatuses.put(clientId, clientStatus);
+ } else {
+ // Maybe update the description (ip might change if through a proxy).
+ clientStatus.clientDesc = clientDesc;
}
return clientStatus;
}
@@ -467,10 +473,10 @@
* @param testInfo the {@link TestInfo}
* @return the map of all results
*/
- private Map<String, JUnitResult> ensureResults(TestInfo testInfo) {
- Map<String, JUnitResult> results = testResults.get(testInfo);
+ private Map<ClientStatus, JUnitResult> ensureResults(TestInfo testInfo) {
+ Map<ClientStatus, JUnitResult> results = testResults.get(testInfo);
if (results == null) {
- results = new HashMap<String, JUnitResult>();
+ results = new IdentityHashMap<ClientStatus, JUnitResult>();
testResults.put(testInfo, results);
}
return results;
=======================================
--- /trunk/user/src/com/google/gwt/junit/JUnitShell.java Mon Nov 23
12:05:34 2009
+++ /trunk/user/src/com/google/gwt/junit/JUnitShell.java Tue Nov 24
01:02:15 2009
@@ -40,6 +40,7 @@
import com.google.gwt.dev.util.arg.ArgHandlerLocalWorkers;
import com.google.gwt.dev.util.arg.ArgHandlerLogLevel;
import com.google.gwt.dev.util.arg.ArgHandlerScriptStyle;
+import com.google.gwt.junit.JUnitMessageQueue.ClientStatus;
import com.google.gwt.junit.client.GWTTestCase;
import com.google.gwt.junit.client.TimeoutException;
import com.google.gwt.junit.client.impl.JUnitResult;
@@ -1054,20 +1055,20 @@
private void processTestResult(TestCase testCase, TestResult testResult,
Strategy strategy) {
- Map<String, JUnitResult> results =
messageQueue.getResults(currentTestInfo);
+ Map<ClientStatus, JUnitResult> results =
messageQueue.getResults(currentTestInfo);
assert results != null;
assert results.size() == messageQueue.getNumClients() : results.size()
+ " != " + messageQueue.getNumClients();
- for (Entry<String, JUnitResult> entry : results.entrySet()) {
- String clientId = entry.getKey();
+ for (Entry<ClientStatus, JUnitResult> entry : results.entrySet()) {
+ ClientStatus client = entry.getKey();
JUnitResult result = entry.getValue();
assert (result != null);
Throwable exception = result.getException();
// Let the user know the browser in which the failure happened.
if (exception != null) {
- String msg = "Remote test failed at " + clientId;
+ String msg = "Remote test failed at " + client.clientDesc;
if (exception instanceof AssertionFailedError) {
String oldMessage = exception.getMessage();
if (oldMessage != null) {
=======================================
--- /trunk/user/src/com/google/gwt/junit/server/JUnitHostImpl.java Tue Sep
15 11:52:45 2009
+++ /trunk/user/src/com/google/gwt/junit/server/JUnitHostImpl.java Tue Nov
24 01:02:15 2009
@@ -31,8 +31,10 @@
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.util.HashMap;
+import java.util.concurrent.atomic.AtomicLong;
import javax.servlet.ServletException;
+import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -55,6 +57,8 @@
*/
private static final int TIME_TO_WAIT_FOR_TESTNAME = 300000;
+ private static final AtomicLong uniqueSessionId = new AtomicLong();
+
/**
* Tries to grab the GWTUnitTestShell sHost environment to communicate
with
* the real test process.
@@ -83,8 +87,10 @@
public TestBlock getTestBlock(int blockIndex, String userAgent)
throws TimeoutException {
- return getHost().getTestBlock(getClientId(getThreadLocalRequest()),
- userAgent, blockIndex, TIME_TO_WAIT_FOR_TESTNAME);
+ return getHost().getTestBlock(
+ getClientId(getThreadLocalRequest(), getThreadLocalResponse()),
+ getClientDesc(getThreadLocalRequest()), userAgent, blockIndex,
+ TIME_TO_WAIT_FOR_TESTNAME);
}
public TestBlock reportResultsAndGetTestBlock(
@@ -96,9 +102,11 @@
result.setException(deserialize(ew));
}
JUnitMessageQueue host = getHost();
- String clientId = getClientId(getThreadLocalRequest());
- host.reportResults(clientId, userAgent, results);
- return host.getTestBlock(clientId, userAgent, testBlock,
+ String clientId = getClientId(getThreadLocalRequest(),
+ getThreadLocalResponse());
+ String clientDesc = getClientDesc(getThreadLocalRequest());
+ host.reportResults(clientId, clientDesc, userAgent, results);
+ return host.getTestBlock(clientId, clientDesc, userAgent, testBlock,
TIME_TO_WAIT_FOR_TESTNAME);
}
@@ -111,7 +119,8 @@
JUnitResult result = new JUnitResult();
initResult(request, result);
result.setException(new JUnitFatalLaunchException(requestPayload));
- getHost().reportFatalLaunch(getClientId(request), null, result);
+ getHost().reportFatalLaunch(getClientId(request, response),
+ getClientDesc(request), null, result);
} else {
super.service(request, response);
}
@@ -223,14 +232,29 @@
return result;
}
- /**
- * Returns a "client id" for the current request.
- */
- private String getClientId(HttpServletRequest request) {
+ private String getClientDesc(HttpServletRequest request) {
String machine = request.getRemoteHost();
String agent = request.getHeader("User-Agent");
return machine + " / " + agent;
}
+
+ /**
+ * Returns a "client id" for the current request.
+ */
+ private String getClientId(HttpServletRequest request,
+ HttpServletResponse response) {
+ Cookie[] cookies = request.getCookies();
+ if (cookies != null) {
+ for (Cookie cookie : cookies) {
+ if ("gwt.junit.sessionCookie".equals(cookie.getName())) {
+ return cookie.getValue();
+ }
+ }
+ }
+ String cookie = String.valueOf(uniqueSessionId.getAndIncrement());
+ response.addCookie(new Cookie("gwt.junit.sessionCookie", cookie));
+ return cookie;
+ }
private void initResult(HttpServletRequest request, JUnitResult result) {
String agent = request.getHeader("User-Agent");
=======================================
---
/trunk/user/super/com/google/gwt/junit/translatable/com/google/gwt/junit/cl ient/impl/GWTRunner.java
Mon Nov 2 08:50:07 2009
+++
/trunk/user/super/com/google/gwt/junit/translatable/com/google/gwt/junit/cl ient/impl/GWTRunner.java
Tue Nov 24 01:02:15 2009
@@ -22,6 +22,7 @@
import com.google.gwt.junit.client.impl.JUnitHost.TestBlock;
import com.google.gwt.junit.client.impl.JUnitHost.TestInfo;
import com.google.gwt.user.client.Command;
+import com.google.gwt.user.client.Cookies;
import com.google.gwt.user.client.DeferredCommand;
import com.google.gwt.user.client.Timer;
import com.google.gwt.user.client.Window;
@@ -100,6 +101,11 @@
*/
private static GWTRunner sInstance;
+ /**
+ * A query param specifying my unique session cookie.
+ */
+ private static final String SESSIONCOOKIE_QUERY_PARAM
= "gwt.junit.sessionCookie";
+
/**
* A query param specifying the test class to run, for serverless mode.
*/
@@ -181,6 +187,12 @@
}
public void onModuleLoad() {
+ // Try to import a session cookie from the previous module.
+ String value = Window.Location.getParameter(SESSIONCOOKIE_QUERY_PARAM);
+ if (value != null) {
+ Cookies.setCookie(SESSIONCOOKIE_QUERY_PARAM, value);
+ }
+
maxRetryCount = parseQueryParamInteger(RETRYCOUNT_QUERY_PARAM, -1);
currentBlock = checkForQueryParamTestToRun();
if (currentBlock != null) {
@@ -266,6 +278,11 @@
builder.setParameter(BLOCKINDEX_QUERY_PARAM,
Integer.toString(currentBlock.getIndex())).setPath(
newModule + pathSuffix);
+ // Hand off the session cookie to the next module.
+ String sessionCookie = Cookies.getCookie(SESSIONCOOKIE_QUERY_PARAM);
+ if (sessionCookie != null) {
+ builder.setParameter(SESSIONCOOKIE_QUERY_PARAM, sessionCookie);
+ }
Window.Location.replace(builder.buildString());
currentBlock = null;
currentTestIndex = 0;
=======================================
--- /trunk/user/test/com/google/gwt/junit/JUnitMessageQueueTest.java Mon
Nov 16 18:58:40 2009
+++ /trunk/user/test/com/google/gwt/junit/JUnitMessageQueueTest.java Tue
Nov 24 01:02:15 2009
@@ -16,6 +16,7 @@
package com.google.gwt.junit;
import com.google.gwt.core.ext.UnableToCompleteException;
+import com.google.gwt.junit.JUnitMessageQueue.ClientStatus;
import com.google.gwt.junit.client.impl.JUnitResult;
import com.google.gwt.junit.client.impl.JUnitHost.TestBlock;
import com.google.gwt.junit.client.impl.JUnitHost.TestInfo;
@@ -26,15 +27,16 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
/**
* Tests of {@link JUnitMessageQueue}.
*/
public class JUnitMessageQueueTest extends TestCase {
- private final static int TWO_CLIENTS = 2;
private final static int ONE_BLOCK = 1;
private final static int ONE_TEST_PER_BLOCK = 1;
+ private final static int TWO_CLIENTS = 2;
public void testAddTestBlocks() {
JUnitMessageQueue queue = new JUnitMessageQueue(10);
@@ -89,25 +91,25 @@
// Add some clients in a few ways.
{
- queue.getTestBlock("client0", "ie6", 0, timeout);
- queue.reportFatalLaunch("client1", "gecko", null);
- queue.reportResults("client2", "safari", createTestResults(0));
+ queue.getTestBlock("client0", "desc0", "ie6", 0, timeout);
+ queue.reportFatalLaunch("client1", "desc1", "gecko", null);
+ queue.reportResults("client2", "desc2", "safari",
createTestResults(0));
assertEquals(3, queue.getNumConnectedClients());
}
// Add duplicate clients.
{
- queue.getTestBlock("client3", "ie6", 0, timeout);
- queue.reportFatalLaunch("client3", "ie6", null);
- queue.reportResults("client4", "safari", createTestResults(0));
+ queue.getTestBlock("client3", "desc3", "ie6", 0, timeout);
+ queue.reportFatalLaunch("client3", "desc3", "ie6", null);
+ queue.reportResults("client4", "desc3", "safari",
createTestResults(0));
assertEquals(5, queue.getNumConnectedClients());
}
// Add existing clients.
{
- queue.getTestBlock("client0", "ie6", 0, timeout);
- queue.reportFatalLaunch("client1", "gecko", null);
- queue.reportResults("client2", "safari", createTestResults(0));
+ queue.getTestBlock("client0", "desc0", "ie6", 0, timeout);
+ queue.reportFatalLaunch("client1", "desc1", "gecko", null);
+ queue.reportResults("client2", "desc2", "safari",
createTestResults(0));
assertEquals(5, queue.getNumConnectedClients());
}
}
@@ -132,7 +134,7 @@
// First client retrieves the first test block.
{
- queue.getTestBlock("client0", "ie6", 0, timeout);
+ queue.getTestBlock("client0", "desc0", "ie6", 0, timeout);
assertEquals(1, queue.getNumClientsRetrievedTest(test0_0));
assertEquals(1, queue.getNumClientsRetrievedTest(test0_1));
assertEquals(1, queue.getNumClientsRetrievedTest(test0_2));
@@ -143,7 +145,7 @@
// Second client retrieves the first test block.
{
- queue.getTestBlock("client1", "ie6", 0, timeout);
+ queue.getTestBlock("client1", "desc1", "ie6", 0, timeout);
assertEquals(2, queue.getNumClientsRetrievedTest(test0_0));
assertEquals(2, queue.getNumClientsRetrievedTest(test0_1));
assertEquals(2, queue.getNumClientsRetrievedTest(test0_2));
@@ -154,7 +156,7 @@
// First client retrieves the second test block.
{
- queue.getTestBlock("client0", "ie6", 1, timeout);
+ queue.getTestBlock("client0", "desc0", "ie6", 1, timeout);
assertEquals(2, queue.getNumClientsRetrievedTest(test0_0));
assertEquals(2, queue.getNumClientsRetrievedTest(test0_1));
assertEquals(2, queue.getNumClientsRetrievedTest(test0_2));
@@ -165,7 +167,7 @@
// First client retrieves the second test block again.
{
- queue.getTestBlock("client0", "ie6", 1, timeout);
+ queue.getTestBlock("client0", "desc0", "ie6", 1, timeout);
assertEquals(2, queue.getNumClientsRetrievedTest(test0_0));
assertEquals(2, queue.getNumClientsRetrievedTest(test0_1));
assertEquals(2, queue.getNumClientsRetrievedTest(test0_2));
@@ -192,28 +194,39 @@
{
Map<TestInfo, JUnitResult> results = new HashMap<TestInfo,
JUnitResult>();
results.put(test0_0, result0);
- queue.reportResults("client0", "ie6", results);
+ queue.reportResults("client0", "desc0", "ie6", results);
}
// Client 1 reports results for first test case.
{
Map<TestInfo, JUnitResult> results = new HashMap<TestInfo,
JUnitResult>();
results.put(test0_0, result1);
- queue.reportResults("client1", "ie6", results);
+ queue.reportResults("client1", "desc1", "ie6", results);
}
// Client 2 reports results for first test case.
{
Map<TestInfo, JUnitResult> results = new HashMap<TestInfo,
JUnitResult>();
results.put(test0_0, result2);
- queue.reportResults("client2", "ie6", results);
+ queue.reportResults("client2", "desc2", "ie6", results);
}
// Get the results
- Map<String, JUnitResult> results = queue.getResults(test0_0);
- assertEquals(result0, results.get("client0"));
- assertEquals(result1, results.get("client1"));
- assertEquals(result2, results.get("client2"));
+ Map<ClientStatus, JUnitResult> results = queue.getResults(test0_0);
+ assertEquals(3, results.size());
+ for (Entry<ClientStatus, JUnitResult> entry : results.entrySet()) {
+ ClientStatus client = entry.getKey();
+ JUnitResult result = entry.getValue();
+ if ("client0".equals(client.clientId)) {
+ assertEquals(result0, result);
+ } else if ("client1".equals(client.clientId)) {
+ assertEquals(result1, result);
+ } else if ("client2".equals(client.clientId)) {
+ assertEquals(result2, result);
+ } else {
+ fail("Unexpected client");
+ }
+ }
}
public void testGetTestBlock() {
@@ -224,21 +237,23 @@
// Get the first test block.
{
- TestBlock block = queue.getTestBlock("client0", "ie6", 0, timeout);
+ TestBlock block = queue.getTestBlock("client0", "desc0", "ie6", 0,
+ timeout);
assertEquals(testBlock0, block.getTests());
assertEquals(0, block.getIndex());
}
// Get the second test block.
{
- TestBlock block = queue.getTestBlock("client0", "ie6", 1, timeout);
+ TestBlock block = queue.getTestBlock("client0", "desc0", "ie6", 1,
+ timeout);
assertEquals(testBlock1, block.getTests());
assertEquals(1, block.getIndex());
}
// Get the third test block.
{
- assertNull(queue.getTestBlock("client0", "ie6", 2, timeout));
+ assertNull(queue.getTestBlock("client0", "desc0", "ie6", 2,
timeout));
}
}
@@ -249,28 +264,28 @@
// Add some clients in a few ways.
{
- queue.getTestBlock("client0", "ie6", 0, timeout);
- queue.reportFatalLaunch("client1", "gecko", null);
- queue.reportResults("client2", "safari", createTestResults(0));
+ queue.getTestBlock("client0", "desc0", "ie6", 0, timeout);
+ queue.reportFatalLaunch("client1", "desc1", "gecko", null);
+ queue.reportResults("client2", "desc2", "safari",
createTestResults(0));
assertSimilar(new String[] {"ie6", "gecko", "safari"},
queue.getUserAgents());
}
// Add duplicate clients.
{
- queue.getTestBlock("client3", "ie7", 0, timeout);
- queue.reportFatalLaunch("client3", "ie7", null);
- queue.reportResults("client4", "gecko1_8", createTestResults(0));
- queue.getTestBlock("client3", "ie7", 0, timeout);
+ queue.getTestBlock("client3", "desc3", "ie7", 0, timeout);
+ queue.reportFatalLaunch("client3", "desc3", "ie7", null);
+ queue.reportResults("client4", "desc4", "gecko1_8",
createTestResults(0));
+ queue.getTestBlock("client3", "desc3", "ie7", 0, timeout);
assertSimilar(new String[]
{"ie6", "ie7", "gecko", "gecko1_8", "safari"},
queue.getUserAgents());
}
// Add existing clients.
{
- queue.getTestBlock("client0", "ie6", 0, timeout);
- queue.reportFatalLaunch("client1", "gecko", null);
- queue.reportResults("client2", "safari", createTestResults(0));
+ queue.getTestBlock("client0", "desc0", "ie6", 0, timeout);
+ queue.reportFatalLaunch("client1", "desc1", "gecko", null);
+ queue.reportResults("client2", "desc2", "safari",
createTestResults(0));
assertSimilar(new String[]
{"ie6", "ie7", "gecko", "gecko1_8", "safari"},
queue.getUserAgents());
}
@@ -297,7 +312,7 @@
{
Map<TestInfo, JUnitResult> results = new HashMap<TestInfo,
JUnitResult>();
results.put(test0_0, new JUnitResult());
- queue.reportResults("client0", "ie6", results);
+ queue.reportResults("client0", "desc0", "ie6", results);
assertFalse(queue.hasResults(test0_0));
assertFalse(queue.hasResults(test0_1));
assertFalse(queue.hasResults(test0_2));
@@ -310,7 +325,7 @@
{
Map<TestInfo, JUnitResult> results = new HashMap<TestInfo,
JUnitResult>();
results.put(test0_0, new JUnitResult());
- queue.reportResults("client1", "ie6", results);
+ queue.reportResults("client1", "desc1", "ie6", results);
assertFalse(queue.hasResults(test0_0));
assertFalse(queue.hasResults(test0_1));
assertFalse(queue.hasResults(test0_2));
@@ -323,7 +338,7 @@
{
Map<TestInfo, JUnitResult> results = new HashMap<TestInfo,
JUnitResult>();
results.put(test0_1, new JUnitResult());
- queue.reportResults("client0", "ie6", results);
+ queue.reportResults("client0", "desc0", "ie6", results);
assertFalse(queue.hasResults(test0_0));
assertFalse(queue.hasResults(test0_1));
assertFalse(queue.hasResults(test0_2));
@@ -336,7 +351,7 @@
{
Map<TestInfo, JUnitResult> results = new HashMap<TestInfo,
JUnitResult>();
results.put(test0_0, new JUnitResult());
- queue.reportResults("client2", "ie6", results);
+ queue.reportResults("client2", "desc2", "ie6", results);
assertTrue(queue.hasResults(test0_0));
assertFalse(queue.hasResults(test0_1));
assertFalse(queue.hasResults(test0_2));
@@ -355,12 +370,13 @@
JUnitResult junitResult = new JUnitResult();
junitResult.setException(new UnableToCompleteException());
results.put(testInfo, junitResult);
- queue.reportResults("client0", "ie6", results);
+ queue.reportResults("client0", "desc0", "ie6", results);
results = new HashMap<TestInfo, JUnitResult>();
junitResult = new JUnitResult();
junitResult.setException(new JUnitFatalLaunchException());
results.put(testInfo, junitResult);
- queue.reportResults("client1", "ff3",
createTestResults(ONE_TEST_PER_BLOCK));
+ queue.reportResults("client1", "desc1", "ff3",
+ createTestResults(ONE_TEST_PER_BLOCK));
assertTrue(queue.needsRerunning(testInfo));
// an exception but exception in launch module
@@ -369,8 +385,9 @@
junitResult = new JUnitResult();
junitResult.setException(new JUnitFatalLaunchException());
results.put(testInfo, junitResult);
- queue.reportResults("client0", "ie6", results);
- queue.reportResults("client1", "ff3",
createTestResults(ONE_TEST_PER_BLOCK));
+ queue.reportResults("client0", "desc0", "ie6", results);
+ queue.reportResults("client1", "desc1", "ff3",
+ createTestResults(ONE_TEST_PER_BLOCK));
assertFalse(queue.needsRerunning(testInfo));
}
@@ -381,11 +398,11 @@
// incomplete results
assertTrue(queue.needsRerunning(testInfo));
- queue.reportResults("client0", "ff3", createTestResults(1));
+ queue.reportResults("client0", "desc0", "ff3", createTestResults(1));
assertTrue(queue.needsRerunning(testInfo));
-
+
// complete results
- queue.reportResults("client1", "ie7", createTestResults(1));
+ queue.reportResults("client1", "desc1", "ie7", createTestResults(1));
assertFalse(queue.needsRerunning(testInfo));
}
@@ -396,29 +413,29 @@
// Add some clients in a few ways.
{
- queue.getTestBlock("client0", "ie6", 0, timeout);
- queue.reportFatalLaunch("client1", "gecko", null);
- queue.reportResults("client2", "safari", createTestResults(0));
- assertSimilar(new String[] {"client0", "client1", "client2"},
+ queue.getTestBlock("client0", "desc0", "ie6", 0, timeout);
+ queue.reportFatalLaunch("client1", "desc1", "gecko", null);
+ queue.reportResults("client2", "desc2", "safari",
createTestResults(0));
+ assertSimilar(new String[] {"desc0", "desc1", "desc2"},
queue.getNewClients());
assertEquals(0, queue.getNewClients().length);
}
// Add duplicate clients.
{
- queue.getTestBlock("client3", "ie6", 0, timeout);
- queue.reportFatalLaunch("client3", "ie6", null);
- queue.reportResults("client4", "safari", createTestResults(0));
- queue.getTestBlock("client3", "ie6", 0, timeout);
- assertSimilar(new String[] {"client3", "client4"},
queue.getNewClients());
+ queue.getTestBlock("client3", "desc3", "ie6", 0, timeout);
+ queue.reportFatalLaunch("client3", "desc3", "ie6", null);
+ queue.reportResults("client4", "desc4", "safari",
createTestResults(0));
+ queue.getTestBlock("client3", "desc3", "ie6", 0, timeout);
+ assertSimilar(new String[] {"desc3", "desc4"},
queue.getNewClients());
assertEquals(0, queue.getNewClients().length);
}
// Add existing clients.
{
- queue.getTestBlock("client0", "ie6", 0, timeout);
- queue.reportFatalLaunch("client1", "gecko", null);
- queue.reportResults("client2", "safari", createTestResults(0));
+ queue.getTestBlock("client0", "desc0", "ie6", 0, timeout);
+ queue.reportFatalLaunch("client1", "desc1", "gecko", null);
+ queue.reportResults("client2", "desc2", "safari",
createTestResults(0));
assertEquals(0, queue.getNewClients().length);
}
}
@@ -429,9 +446,11 @@
TestInfo testInfo = queue.getTestBlocks().get(0)[0];
assertFalse(queue.hasResults(testInfo));
- queue.reportResults("client0", "ie6",
createTestResults(ONE_TEST_PER_BLOCK));
+ queue.reportResults("client0", "desc0", "ie6",
+ createTestResults(ONE_TEST_PER_BLOCK));
assertFalse(queue.hasResults(testInfo));
- queue.reportResults("client1", "ff3",
createTestResults(ONE_TEST_PER_BLOCK));
+ queue.reportResults("client1", "desc1", "ff3",
+ createTestResults(ONE_TEST_PER_BLOCK));
assertTrue(queue.hasResults(testInfo));
queue.removeResults(testInfo);
@@ -446,17 +465,27 @@
JUnitResult junitResult = new JUnitResult();
junitResult.setException(new AssertionError());
results.put(testInfo, junitResult);
- queue.reportResults("client0", "ff3", results);
+ queue.reportResults("client0", "desc0", "ff3", results);
assertTrue(queue.needsRerunning(testInfo));
- assertTrue(queue.getResults(testInfo).get("client0").getException() !=
null);
+ Map<ClientStatus, JUnitResult> queueResults =
queue.getResults(testInfo);
+ assertEquals(1, queueResults.size());
+ for (JUnitResult result : queueResults.values()) {
+ assertNotNull(result.getException());
+ }
queue.removeResults(testInfo);
- queue.reportResults("client0", "ff3",
createTestResults(ONE_TEST_PER_BLOCK));
- queue.reportResults("client1", "ie6",
createTestResults(ONE_TEST_PER_BLOCK));
+ queue.reportResults("client0", "desc0", "ff3",
+ createTestResults(ONE_TEST_PER_BLOCK));
+ queue.reportResults("client1", "desc1", "ie6",
+ createTestResults(ONE_TEST_PER_BLOCK));
assertFalse(queue.needsRerunning(testInfo));
// check that the updated result appears now.
- assertTrue(queue.getResults(testInfo).get("client0").getException() ==
null);
+ queueResults = queue.getResults(testInfo);
+ assertEquals(2, queueResults.size());
+ for (JUnitResult result : queueResults.values()) {
+ assertNull(result.getException());
+ }
}
/**