package net.jsunit.configuration;
import junit.framework.TestCase;
import net.jsunit.model.Browser;
import net.jsunit.model.BrowserSpecification;
import net.jsunit.model.BrowserType;
import net.jsunit.model.PlatformType;
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 {
ServerConfiguration configuration = new ServerConfiguration(new FullValidConfigurationSource());
List<Browser> expectedBrowsers = new ArrayList<Browser>();
expectedBrowsers.add(new Browser("iexplore.exe", 0));
expectedBrowsers.add(new Browser("opera.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://127.0.0.1:8082/jsunit"));
expectedRemoteMachineURLs.add(new URL("http://localhost:8081/jsunit"));
assertEquals(expectedRemoteMachineURLs, configuration.getRemoteMachineURLs());
assertTrue(configuration.shouldIgnoreUnresponsiveRemoteMachines());
}
public void testMinimal() throws Exception {
ServerConfiguration configuration = new ServerConfiguration(new MinimalValidConfigurationSource());
assertEquals(new File("."), configuration.getResourceBase());
assertEquals(new File("logs"), configuration.getLogsDirectory());
assertTrue(configuration.shouldCloseBrowsersAfterTestRuns());
assertEquals(60, configuration.getTimeoutSeconds());
assertFalse(configuration.shouldIgnoreUnresponsiveRemoteMachines());
}
public void testBadRemoteMachineURLs() throws Exception {
try {
new ServerConfiguration(new StubConfigurationSource() {
public String remoteMachineURLs() {
return "invalid url";
}
});
fail();
} catch (ConfigurationException e) {
}
}
public void testBadURL() throws Exception {
try {
new ServerConfiguration(new StubConfigurationSource() {
public String url() {
return "invalid url";
}
});
fail();
} catch (ConfigurationException e) {
}
}
public void testBadPort() throws Exception {
try {
new ServerConfiguration(new StubConfigurationSource() {
public String port() {
return "invalid number";
}
});
fail();
} catch (ConfigurationException e) {
}
}
public void testBadTimeoutSeconds() throws Exception {
try {
new ServerConfiguration(new StubConfigurationSource() {
public String timeoutSeconds() {
return "invalid number";
}
});
fail();
} catch (ConfigurationException e) {
}
}
public void testAsXmlForConfiguration() throws Exception {
FullValidConfigurationSource source = new FullValidConfigurationSource();
ServerConfiguration configuration = new ServerConfiguration(source);
File logsDirectory = new File(source.logsDirectory());
File resourceBase = new File(source.resourceBase());
String expectedXML = "<configuration type=\"" + ServerType.SERVER.name() + "\">" +
"<os>386 - Windows XP</os>" +
"<ipAddress>" + FullValidConfigurationSource.IP_ADDRESS + "</ipAddress>" +
"<hostname>" + FullValidConfigurationSource.HOSTNAME + "</hostname>" +
"<browserFileNames>" +
"<browserFileName id=\"0\">iexplore.exe</browserFileName>" +
"<browserFileName id=\"1\">opera.exe</browserFileName>" +
"</browserFileNames>" +
"<closeBrowsersAfterTestRuns>true</closeBrowsersAfterTestRuns>" +
"<description>This is the best server ever</description>" +
"<ignoreUnresponsiveRemoteMachines>true</ignoreUnresponsiveRemoteMachines>" +
"<logsDirectory>" + logsDirectory.getAbsolutePath() + "</logsDirectory>" +
"<port>1234</port>" +
"<remoteMachineURLs>" +
"<remoteMachineURL id=\"0\">http://127.0.0.1:8082/jsunit</remoteMachineURL>" +
"<remoteMachineURL id=\"1\">http://localhost:8081/jsunit</remoteMachineURL>" +
"</remoteMachineURLs>" +
"<resourceBase>" + resourceBase.getAbsolutePath() + "</resourceBase>" +
"<timeoutSeconds>76</timeoutSeconds>" +
"<url>http://www.example.com:1234/</url>" +
"</configuration>";
assertEquals(expectedXML, XmlUtility.asString(configuration.asXml()));
}
public void testGetBrowserById() throws Exception {
ServerConfiguration configuration = new ServerConfiguration(new FullValidConfigurationSource());
assertEquals(new Browser("iexplore.exe", 0), configuration.getBrowserById(0));
assertEquals(new Browser("opera.exe", 1), configuration.getBrowserById(1));
assertNull(configuration.getBrowserById(900));
}
public void testAsArgumentsArray() throws Exception {
ServerConfiguration configuration = new ServerConfiguration(new FullValidConfigurationSource());
String[] arguments = configuration.asArgumentsArray();
int index = 0;
assertEquals("-browserFileNames", arguments[index++]);
assertEquals("iexplore.exe,opera.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://127.0.0.1:8082/jsunit,http://localhost:8081/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]);
assertEquals(index + 1, arguments.length);
}
public void testDuplicateBrowserFileNamesAndRemoteMachineURLs() throws Exception {
ServerConfiguration configuration = new ServerConfiguration(new DuplicatesConfigurationSource());
List<Browser> browsers = configuration.getBrowsers();
assertEquals(3, browsers.size());
assertEquals(new Browser("xbrowser.exe", 2), browsers.get(2));
assertEquals(new Browser("iexplore.exe", 0), browsers.get(0));
assertEquals(new Browser("opera.exe", 1), browsers.get(1));
List<URL> remoteMachineURLs = configuration.getRemoteMachineURLs();
assertEquals(4, remoteMachineURLs.size());
assertEquals("http://machine1:8080/jsunit", remoteMachineURLs.get(0).toString());
assertEquals("http://machine1:8081/jsunit", remoteMachineURLs.get(1).toString());
assertEquals("http://machine2:9090/jsunit", remoteMachineURLs.get(2).toString());
assertEquals("http://machine3:9090/jsunit", remoteMachineURLs.get(3).toString());
}
public void testEquals() throws Exception {
ServerConfiguration configuration1 = new ServerConfiguration(new FullValidConfigurationSource());
ServerConfiguration configuration2 = new ServerConfiguration(new FullValidConfigurationSource());
ServerConfiguration configuration3 = new ServerConfiguration(new MinimalValidConfigurationSource());
assertTrue(configuration1.equals(configuration1));
assertTrue(configuration1.equals(configuration2));
assertFalse(configuration1.equals(configuration3));
}
public void testBrowserOrdering() throws Exception {
ServerConfiguration configuration = new ServerConfiguration(new DummyConfigurationSource() {
public String browserFileNames() {
return "browserC.exe,browserA.exe,browserB.exe";
}
});
List<Browser> browsers = configuration.getBrowsers();
assertEquals(new Browser("browserA.exe", 0), browsers.get(0));
assertEquals(new Browser("browserB.exe", 1), browsers.get(1));
assertEquals(new Browser("browserC.exe", 2), browsers.get(2));
}
public void testRemoteServerOrdering() throws Exception {
ServerConfiguration configuration = new ServerConfiguration(new DummyConfigurationSource() {
public String remoteMachineURLs() {
return "http://www.exampleC.com,http://www.exampleA.com,http://www.exampleB.com";
}
});
List<URL> remoteMachineURLs = configuration.getRemoteMachineURLs();
assertEquals("http://www.exampleA.com/jsunit", remoteMachineURLs.get(0).toString());
assertEquals("http://www.exampleB.com/jsunit", remoteMachineURLs.get(1).toString());
assertEquals("http://www.exampleC.com/jsunit", remoteMachineURLs.get(2).toString());
}
public void testHasPlatformType() throws Exception {
ServerConfiguration configuration = new ServerConfiguration(new FullValidConfigurationSource());
assertTrue(configuration.hasPlatformType(PlatformType.WINDOWS));
assertFalse(configuration.hasPlatformType(PlatformType.LINUX));
}
public void testGetBrowserOfTypeAndVersion() throws Exception {
ServerConfiguration configuration = new ServerConfiguration(new FullValidConfigurationSource());
assertEquals(new Browser("iexplore.exe", 0), configuration.getBrowserMatching(new BrowserSpecification(PlatformType.WINDOWS, BrowserType.INTERNET_EXPLORER)));
assertEquals(new Browser("opera.exe", 1), configuration.getBrowserMatching(new BrowserSpecification(PlatformType.WINDOWS, BrowserType.OPERA)));
assertNull(configuration.getBrowserMatching(new BrowserSpecification(PlatformType.WINDOWS, BrowserType.FIREFOX)));
}
static class FullValidConfigurationSource implements ConfigurationSource {
public static final String IP_ADDRESS = "123.45.67.890";
public static final String HOSTNAME = "services.jsunit.net";
public static final String DUMMY_SECRET_KEY = "1234567890123456";
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 "iexplore.exe,opera.exe";
}
public String url() {
return "http://www.example.com:1234/";
}
public String ignoreUnresponsiveRemoteMachines() {
return "true";
}
public String osString() {
return "386 - Windows XP";
}
public String ipAddress() {
return IP_ADDRESS;
}
public String hostname() {
return HOSTNAME;
}
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 MinimalValidConfigurationSource extends StubConfigurationSource {
public String remoteMachineURLs() {
return "http://localhost:8081,http://127.0.0.1:8082";
}
}
static class DuplicatesConfigurationSource extends StubConfigurationSource {
public String browserFileNames() {
return "iexplore.exe,opera.exe,iexplore.exe,iexplore.exe,xbrowser.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";
}
}
}