package net.jsunit.configuration; import junit.framework.TestCase; import net.jsunit.StubConfigurationSource; import net.jsunit.model.Browser; import net.jsunit.utility.SystemUtility; import net.jsunit.utility.XmlUtility; import java.io.File; import java.net.URL; import java.util.ArrayList; import java.util.List; public class ConfigurationTest extends TestCase { public void testFull() throws Exception { Configuration configuration = new Configuration(new FullValidForBothConfigurationSource()); List<Browser> expectedBrowsers = new ArrayList<Browser>(); expectedBrowsers.add(new Browser("browser1.exe", 0)); expectedBrowsers.add(new Browser("browser2.exe", 1)); assertEquals(expectedBrowsers, configuration.getBrowsers()); assertEquals(new File("logs" + File.separator + "directory"), configuration.getLogsDirectory()); assertEquals(1234, configuration.getPort()); assertEquals(new File("resource" + File.separator + "base"), configuration.getResourceBase()); assertEquals("http://www.example.com:1234/", configuration.getTestURL().toString()); assertTrue(configuration.shouldCloseBrowsersAfterTestRuns()); assertEquals(76, configuration.getTimeoutSeconds()); List<URL> expectedRemoteMachineURLs = new ArrayList<URL>(); expectedRemoteMachineURLs.add(new URL("http://localhost:8081/jsunit")); expectedRemoteMachineURLs.add(new URL("http://127.0.0.1:8082/jsunit")); assertEquals(expectedRemoteMachineURLs, configuration.getRemoteMachineURLs()); assertTrue(configuration.shouldIgnoreUnresponsiveRemoteMachines()); assertTrue(configuration.isValidFor(ServerType.STANDARD)); assertTrue(configuration.isValidFor(ServerType.FARM)); } public void testMinimal() throws Exception { Configuration configuration = new Configuration(new MinimalValidForBothConfigurationSource()); assertEquals(new File("."), configuration.getResourceBase()); assertEquals(new File("logs"), configuration.getLogsDirectory()); assertTrue(configuration.shouldCloseBrowsersAfterTestRuns()); assertEquals(60, configuration.getTimeoutSeconds()); assertFalse(configuration.shouldIgnoreUnresponsiveRemoteMachines()); assertTrue(configuration.isValidFor(ServerType.STANDARD)); assertTrue(configuration.isValidFor(ServerType.FARM)); } public void testBadRemoteMachineURLs() throws Exception { try { new Configuration(new StubConfigurationSource() { public String remoteMachineURLs() { return "invalid url"; } }); fail(); } catch (ConfigurationException e) { } } public void testBadURL() throws Exception { try { new Configuration(new StubConfigurationSource() { public String url() { return "invalid url"; } }); fail(); } catch (ConfigurationException e) { } } public void testBadPort() throws Exception { try { new Configuration(new StubConfigurationSource() { public String port() { return "invalid number"; } }); fail(); } catch (ConfigurationException e) { } } public void testBadTimeoutSeconds() throws Exception { try { new Configuration(new StubConfigurationSource() { public String timeoutSeconds() { return "invalid number"; } }); fail(); } catch (ConfigurationException e) { } } public void testValidForStandardInvalidForFarm() throws Exception { Configuration configuration = new Configuration(new ValidForStandardInvalidForFarmConfigurationSource()); assertTrue(configuration.isValidFor(ServerType.STANDARD)); assertFalse(configuration.isValidFor(ServerType.FARM)); List<ConfigurationProperty> invalidProperties = ServerType.FARM.getPropertiesInvalidFor(configuration); assertEquals(1, invalidProperties.size()); assertEquals(ConfigurationProperty.REMOTE_MACHINE_URLS, invalidProperties.get(0)); } public void testAsXmlForStandardConfiguration() throws Exception { FullValidForBothConfigurationSource source = new FullValidForBothConfigurationSource(); Configuration configuration = new Configuration(source); File logsDirectory = new File(source.logsDirectory()); File resourceBase = new File(source.resourceBase()); String expectedXML = "<configuration type=\"" + ServerType.STANDARD.name() + "\">" + "<os>" + SystemUtility.osString() + "</os>" + "<ipAddress>" + SystemUtility.ipAddress() + "</ipAddress>" + "<hostname>" + SystemUtility.hostname() + "</hostname>" + "<browserFileNames>" + "<browserFileName id=\"0\">browser1.exe</browserFileName>" + "<browserFileName id=\"1\">browser2.exe</browserFileName>" + "</browserFileNames>" + "<closeBrowsersAfterTestRuns>true</closeBrowsersAfterTestRuns>" + "<description>This is the best server ever</description>" + "<logsDirectory>" + logsDirectory.getAbsolutePath() + "</logsDirectory>" + "<port>1234</port>" + "<resourceBase>" + resourceBase.getAbsolutePath() + "</resourceBase>" + "<timeoutSeconds>76</timeoutSeconds>" + "<url>http://www.example.com:1234/</url>" + "</configuration>"; assertEquals(expectedXML, XmlUtility.asString(configuration.asXml(ServerType.STANDARD))); } public void testAsXmlForStandardTemporaryConfiguration() throws Exception { FullValidForBothConfigurationSource source = new FullValidForBothConfigurationSource(); Configuration configuration = new Configuration(source); File logsDirectory = new File(source.logsDirectory()); File resourceBase = new File(source.resourceBase()); String expectedXML = "<configuration type=\"" + ServerType.STANDARD_TEMPORARY.name() + "\">" + "<os>" + SystemUtility.osString() + "</os>" + "<ipAddress>" + SystemUtility.ipAddress() + "</ipAddress>" + "<hostname>" + SystemUtility.hostname() + "</hostname>" + "<browserFileNames>" + "<browserFileName id=\"0\">browser1.exe</browserFileName>" + "<browserFileName id=\"1\">browser2.exe</browserFileName>" + "</browserFileNames>" + "<closeBrowsersAfterTestRuns>true</closeBrowsersAfterTestRuns>" + "<description>This is the best server ever</description>" + "<logsDirectory>" + logsDirectory.getAbsolutePath() + "</logsDirectory>" + "<port>1234</port>" + "<resourceBase>" + resourceBase.getAbsolutePath() + "</resourceBase>" + "<timeoutSeconds>76</timeoutSeconds>" + "<url>http://www.example.com:1234/</url>" + "</configuration>"; assertEquals(expectedXML, XmlUtility.asString(configuration.asXml(ServerType.STANDARD_TEMPORARY))); } public void testAsXmlForFarmConfiguration() throws Exception { FullValidForBothConfigurationSource source = new FullValidForBothConfigurationSource(); Configuration configuration = new Configuration(source); File logsDirectory = new File(source.logsDirectory()); File resourceBase = new File(source.resourceBase()); assertEquals( "<configuration type=\"" + ServerType.FARM.name() + "\">" + "<os>" + SystemUtility.osString() + "</os>" + "<ipAddress>" + SystemUtility.ipAddress() + "</ipAddress>" + "<hostname>" + SystemUtility.hostname() + "</hostname>" + "<description>This is the best server ever</description>" + "<ignoreUnresponsiveRemoteMachines>true</ignoreUnresponsiveRemoteMachines>" + "<logsDirectory>" + logsDirectory.getAbsolutePath() + "</logsDirectory>" + "<port>1234</port>" + "<remoteMachineURLs>" + "<remoteMachineURL id=\"0\">http://localhost:8081/jsunit</remoteMachineURL>" + "<remoteMachineURL id=\"1\">http://127.0.0.1:8082/jsunit</remoteMachineURL>" + "</remoteMachineURLs>" + "<resourceBase>" + resourceBase.getAbsolutePath() + "</resourceBase>" + "<url>http://www.example.com:1234/</url>" + "</configuration>", XmlUtility.asString(configuration.asXml(ServerType.FARM)) ); } public void testGetBrowserById() throws Exception { Configuration configuration = new Configuration(new FullValidForBothConfigurationSource()); assertEquals(new Browser("browser1.exe", 0), configuration.getBrowserById(0)); assertEquals(new Browser("browser2.exe", 1), configuration.getBrowserById(1)); assertNull(configuration.getBrowserById(900)); } public void testGetRemoteMachineURLById() throws Exception { Configuration configuration = new Configuration(new FullValidForBothConfigurationSource()); assertEquals( "http://localhost:8081/jsunit", configuration.getRemoteMachineURLById(0).toString() ); assertEquals( "http://127.0.0.1:8082/jsunit", configuration.getRemoteMachineURLById(1).toString() ); } public void testAsArgumentsArray() throws Exception { Configuration configuration = new Configuration(new FullValidForBothConfigurationSource()); String[] arguments = configuration.asArgumentsArray(); assertEquals(20, arguments.length); int index = 0; assertEquals("-browserFileNames", arguments[index++]); assertEquals("browser1.exe,browser2.exe", arguments[index++]); assertEquals("-closeBrowsersAfterTestRuns", arguments[index++]); assertEquals("true", arguments[index++]); assertEquals("-description", arguments[index++]); assertEquals("This is the best server ever", arguments[index++]); assertEquals("-ignoreUnresponsiveRemoteMachines", arguments[index++]); assertEquals("true", arguments[index++]); assertEquals("-logsDirectory", arguments[index++]); assertEquals(new File("logs" + File.separator + "directory").getAbsolutePath(), arguments[index++]); assertEquals("-port", arguments[index++]); assertEquals("1234", arguments[index++]); assertEquals("-remoteMachineURLs", arguments[index++]); assertEquals("http://localhost:8081/jsunit,http://127.0.0.1:8082/jsunit", arguments[index++]); assertEquals("-resourceBase", arguments[index++]); assertEquals(new File("resource/base").getAbsolutePath(), arguments[index++]); assertEquals("-timeoutSeconds", arguments[index++]); assertEquals("76", arguments[index++]); assertEquals("-url", arguments[index++]); assertEquals("http://www.example.com:1234/", arguments[index]); } public void testDuplicateBrowserFileNamesAndRemoteMachineURLs() throws Exception { Configuration configuration = new Configuration(new DuplicatesConfigurationSource()); List<Browser> browsers = configuration.getBrowsers(); assertEquals(3, browsers.size()); assertEquals(new Browser("browser1.exe", 0), browsers.get(0)); assertEquals(new Browser("browser2.exe", 1), browsers.get(1)); assertEquals(new Browser("browser3.exe", 2), browsers.get(2)); List<URL> remoteMachineURLs = configuration.getRemoteMachineURLs(); assertEquals(4, remoteMachineURLs.size()); assertEquals("http://machine1:8080/jsunit", remoteMachineURLs.get(0).toString()); assertEquals("http://machine2:9090/jsunit", remoteMachineURLs.get(1).toString()); assertEquals("http://machine1:8081/jsunit", remoteMachineURLs.get(2).toString()); assertEquals("http://machine3:9090/jsunit", remoteMachineURLs.get(3).toString()); } static class FullValidForBothConfigurationSource implements ConfigurationSource { public String resourceBase() { return "resource" + File.separator + "base"; } public String port() { return "1234"; } public String logsDirectory() { return "logs" + File.separator + "directory"; } public String browserFileNames() { return "browser1.exe,browser2.exe"; } public String url() { return "http://www.example.com:1234/"; } public String ignoreUnresponsiveRemoteMachines() { return "true"; } public String closeBrowsersAfterTestRuns() { return "true"; } public String description() { return "This is the best server ever"; } public String timeoutSeconds() { return "76"; } public String remoteMachineURLs() { return "http://localhost:8081,http://127.0.0.1:8082"; } } static class MinimalValidForBothConfigurationSource extends StubConfigurationSource { public String remoteMachineURLs() { return "http://localhost:8081,http://127.0.0.1:8082"; } } static class ValidForStandardInvalidForFarmConfigurationSource extends StubConfigurationSource { } static class DuplicatesConfigurationSource extends StubConfigurationSource { public String browserFileNames() { return "browser1.exe,browser2.exe,browser1.exe,browser1.exe,browser3.exe"; } public String remoteMachineURLs() { return "http://machine1:8080,http://machine2:9090/jsunit,http://machine1:8081,http://machine1:8080,http://machine1:8080/jsunit,http://machine3:9090"; } } }