package net.jsunit.action;
import junit.framework.TestCase;
import net.jsunit.BlowingUpRemoteServerHitter;
import net.jsunit.DummyConfigurationSource;
import net.jsunit.JsUnitFarmServer;
import net.jsunit.MockRemoteServerHitter;
import net.jsunit.configuration.Configuration;
import net.jsunit.configuration.ServerType;
import net.jsunit.utility.XmlUtility;
import org.jdom.CDATA;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.filter.Filter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class FarmServerConfigurationActionTest extends TestCase {
private FarmServerConfigurationAction action;
public void setUp() throws Exception {
super.setUp();
action = new FarmServerConfigurationAction();
Configuration configuration = new Configuration(new DummyConfigurationSource());
JsUnitFarmServer server = new JsUnitFarmServer(configuration);
action.setFarmServer(server);
}
public void testSimple() throws Exception {
MockRemoteServerHitter mockHitter = new MockRemoteServerHitter();
Configuration configuration1 = configuration1();
Configuration configuration2 = configuration2();
mockHitter.urlToDocument.put(DummyConfigurationSource.REMOTE_URL_1 + "/config", new Document(configuration1.asXml(ServerType.FARM)));
mockHitter.urlToDocument.put(DummyConfigurationSource.REMOTE_URL_2 + "/config", new Document(configuration2.asXml(ServerType.FARM)));
action.setRemoteRunnerHitter(mockHitter);
action.execute();
assertEquals(2, mockHitter.urlsPassed.size());
String xml = XmlUtility.asString(action.getXmlRenderable().asXml());
assertEquals(
"<remoteConfigurations>" +
"<remoteConfiguration remoteMachineURL=\"" + DummyConfigurationSource.REMOTE_URL_1 + "\">" +
XmlUtility.asString(configuration1.asXml(ServerType.FARM)) +
"</remoteConfiguration>" +
"<remoteConfiguration remoteMachineURL=\"" + DummyConfigurationSource.REMOTE_URL_2 + "\">" +
XmlUtility.asString(configuration2.asXml(ServerType.FARM)) +
"</remoteConfiguration>" +
"</remoteConfigurations>",
xml
);
}
public void testCrashingRemoteURLs() throws Exception {
action.setRemoteRunnerHitter(new BlowingUpRemoteServerHitter());
action.execute();
Element rootElement = action.getXmlRenderable().asXml();
List<CDATA> stackTraceElements = getCDATAExceptionStackTracesUnder(rootElement);
assertEquals(2, stackTraceElements.size());
for (CDATA stackTraceElement : stackTraceElements)
stackTraceElement.detach();
String xml = XmlUtility.asString(rootElement);
assertEquals(
"<remoteConfigurations>" +
"<remoteConfiguration remoteMachineURL=\"" + DummyConfigurationSource.REMOTE_URL_1 + "\">" +
"<configuration failedToConnect=\"true\" />" +
"</remoteConfiguration>" +
"<remoteConfiguration remoteMachineURL=\"" + DummyConfigurationSource.REMOTE_URL_2 + "\">" +
"<configuration failedToConnect=\"true\" />" +
"</remoteConfiguration>" +
"</remoteConfigurations>",
xml
);
}
private List<CDATA> getCDATAExceptionStackTracesUnder(Element rootElement) {
Iterator it = rootElement.getDescendants(new Filter() {
public boolean matches(Object arg0) {
return arg0 instanceof CDATA;
}
});
List<CDATA> stackTraceElements = new ArrayList<CDATA>();
while (it.hasNext()) {
CDATA next = (CDATA) it.next();
stackTraceElements.add(next);
}
return stackTraceElements;
}
private Configuration configuration2() {
return new Configuration(new DummyConfigurationSource() {
public String url() {
return "http://www.2.example.com";
}
});
}
private Configuration configuration1() {
return new Configuration(new DummyConfigurationSource() {
public String url() {
return "http://www.1.example.com";
}
});
}
}