package net.jsunit; import junit.framework.TestCase; import net.jsunit.configuration.Configuration; import net.jsunit.model.*; import net.jsunit.utility.XmlUtility; import org.jdom.Document; import java.io.UnsupportedEncodingException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import java.util.List; public class DistributedTestRunManagerTest extends TestCase { private Configuration configuration; public void setUp() throws Exception { super.setUp(); configuration = new Configuration(new DummyConfigurationSource()); } public void testSimple() throws MalformedURLException, UnsupportedEncodingException { String encodedURL = URLEncoder.encode(DummyConfigurationSource.DUMMY_URL, "UTF-8"); String url1 = DummyConfigurationSource.REMOTE_URL_1 + "/runner?url=" + encodedURL; String url2 = DummyConfigurationSource.REMOTE_URL_2 + "/runner?url=" + encodedURL; MockRemoteServerHitter hitter = createMockHitter(url1, url2); DistributedTestRunManager manager = new DistributedTestRunManager(hitter, configuration, null); manager.runTests(); assertEquals(2, hitter.urlsPassed.size()); assertTrue(hitter.urlsPassed.contains(url1)); assertTrue(hitter.urlsPassed.contains(url2)); DistributedTestRunResult result = manager.getDistributedTestRunResult(); DistributedTestRunResult expectedResult = new DistributedTestRunResult(); expectedResult.addTestRunResult(createResult1()); expectedResult.addTestRunResult(createResult2()); assertEquals(XmlUtility.asString(expectedResult.asXml()), XmlUtility.asString(result.asXml())); } public void testRemoteURLBlowsUp() { DistributedTestRunManager manager = new DistributedTestRunManager(new BlowingUpRemoteServerHitter(), configuration, null); assertFalse(configuration.shouldIgnoreUnresponsiveRemoteMachines()); manager.runTests(); DistributedTestRunResult result = manager.getDistributedTestRunResult(); assertFalse(result.wasSuccessful()); List<TestRunResult> testRunResults = result.getTestRunResults(); assertEquals(2, testRunResults.size()); assertEquals(ResultType.UNRESPONSIVE, testRunResults.get(0).getResultType()); assertEquals(DummyConfigurationSource.REMOTE_URL_1, testRunResults.get(0).getUrl().toString()); assertEquals(DummyConfigurationSource.REMOTE_URL_2, testRunResults.get(1).getUrl().toString()); assertEquals(ResultType.UNRESPONSIVE, testRunResults.get(1).getResultType()); } public void testRemoteURLBlowsUpButIgnored() { configuration = new Configuration(new DummyConfigurationSource() { public String ignoreUnresponsiveRemoteMachines() { return "true"; } }); assertTrue(configuration.shouldIgnoreUnresponsiveRemoteMachines()); DistributedTestRunManager manager = new DistributedTestRunManager(new BlowingUpRemoteServerHitter(), configuration, null); manager.runTests(); DistributedTestRunResult result = manager.getDistributedTestRunResult(); assertTrue(result.wasSuccessful()); assertEquals(0, result.getTestRunResults().size()); } public void testOverrideURL() throws Exception { String overrideURL = "http://my.override.com:1234?foo=bar&bar=foo"; String encodedOverrideURL = URLEncoder.encode(overrideURL, "UTF-8"); String url1 = DummyConfigurationSource.REMOTE_URL_1 + "/runner?url=" + encodedOverrideURL; String url2 = DummyConfigurationSource.REMOTE_URL_2 + "/runner?url=" + encodedOverrideURL; MockRemoteServerHitter hitter = createMockHitter(url1, url2); DistributedTestRunManager manager = new DistributedTestRunManager(hitter, configuration, overrideURL); manager.runTests(); assertEquals(2, hitter.urlsPassed.size()); assertTrue(hitter.urlsPassed.contains(url1)); assertTrue(hitter.urlsPassed.contains(url2)); } public void testNoURL() throws Exception { configuration = new Configuration(new DummyConfigurationSource() { public String url() { return null; } }); String url1 = DummyConfigurationSource.REMOTE_URL_1 + "/runner"; String url2 = DummyConfigurationSource.REMOTE_URL_2 + "/runner"; MockRemoteServerHitter hitter = createMockHitter(url1, url2); DistributedTestRunManager manager = new DistributedTestRunManager(hitter, configuration, null); manager.runTests(); assertEquals(2, hitter.urlsPassed.size()); assertTrue(hitter.urlsPassed.contains(url1)); assertTrue(hitter.urlsPassed.contains(url2)); DistributedTestRunResult result = manager.getDistributedTestRunResult(); DistributedTestRunResult expectedResult = new DistributedTestRunResult(); expectedResult.addTestRunResult(createResult1()); expectedResult.addTestRunResult(createResult2()); assertEquals(XmlUtility.asString(expectedResult.asXml()), XmlUtility.asString(result.asXml())); } public void testDistributedResultReturned() throws Exception { String encodedURL = URLEncoder.encode(DummyConfigurationSource.DUMMY_URL, "UTF-8"); String url1 = DummyConfigurationSource.REMOTE_URL_1 + "/runner?url=" + encodedURL; String url2 = DummyConfigurationSource.REMOTE_URL_2 + "/runner?url=" + encodedURL; MockRemoteServerHitter hitter = createMockHitterWithDistributedResults(url1, url2); DistributedTestRunManager manager = new DistributedTestRunManager(hitter, configuration, null); manager.runTests(); DistributedTestRunResult result = manager.getDistributedTestRunResult(); assertEquals(4, result.getTestRunResults().size()); } private MockRemoteServerHitter createMockHitter(String url1, String url2) throws MalformedURLException { MockRemoteServerHitter hitter = new MockRemoteServerHitter(); hitter.urlToDocument.put(url1, new Document(createResult1().asXml())); hitter.urlToDocument.put(url2, new Document(createResult2().asXml())); return hitter; } private MockRemoteServerHitter createMockHitterWithDistributedResults(String url1, String url2) throws MalformedURLException { MockRemoteServerHitter hitter = new MockRemoteServerHitter(); DistributedTestRunResult distributedResult = new DistributedTestRunResult(); distributedResult.addTestRunResult(createResult1()); distributedResult.addTestRunResult(createResult2()); hitter.urlToDocument.put(url1, new Document(distributedResult.asXml())); hitter.urlToDocument.put(url2, new Document(distributedResult.asXml())); return hitter; } private TestRunResult createResult1() throws MalformedURLException { TestRunResult result = new TestRunResult(new URL(DummyConfigurationSource.REMOTE_URL_1)); result.setOsString("my os"); BrowserResult browserResult1 = new BrowserResult(); browserResult1.setId("1"); browserResult1.setBrowser(new Browser("mybrowser.exe", 0)); browserResult1.setTime(123.45); result.addBrowserResult(browserResult1); BrowserResult browserResult2 = new BrowserResult(); browserResult2.setId("2"); browserResult2.setBrowser(new Browser("mybrowser.exe", 0)); browserResult2.setFailedToLaunch(); result.addBrowserResult(browserResult2); return result; } private TestRunResult createResult2() throws MalformedURLException { TestRunResult result = new TestRunResult(new URL(DummyConfigurationSource.REMOTE_URL_2)); result.setOsString("my other os"); BrowserResult browserResult1 = new BrowserResult(); browserResult1.setBrowser(new Browser("mybrowser.exe", 0)); browserResult1.setId("a"); browserResult1.setTime(123.45); browserResult1.setBaseURL("http://www.example.com"); browserResult1.setId("12345"); browserResult1.setUserAgent("foo bar"); result.addBrowserResult(browserResult1); BrowserResult browserResult2 = new BrowserResult(); browserResult1.setId("b"); browserResult2.setBrowser(new Browser("mybrowser.exe", 0)); browserResult2.setTimedOut(); result.addBrowserResult(browserResult2); return result; } }