package org.exigencecorp.selenify;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Saves the results from TestRunner to txt/xml files.
*
* System properties:
*
* - selenium.results.webapp = mywebapp - selenium.results.directory =
* ./build/selenium-results
*/
public class ResultsServlet implements Servlet {
public void init(ServletConfig config) {
}
public ServletConfig getServletConfig() {
return null;
}
public String getServletInfo() {
return null;
}
public void destroy() {
}
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
response.setContentType("text/html");
response.setHeader("Expires", "Sat, 6 May 1995 12:00:00 GMT");
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
response.setHeader("Pragma", "no-cache");
this.serviceNotCached(request, response);
}
public void serviceNotCached(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.saveToXml(request, response);
this.saveToTxt(request, response);
this.shutdownTheJvmThatWillBringDownJettyAsWell();
}
private void saveToTxt(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
FileWriter fw = new FileWriter(this.getResultsFile("txt"));
try {
fw.append("result=" + request.getParameter("result"));
} finally {
fw.close();
}
}
@SuppressWarnings("unchecked")
private void saveToXml(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
FileWriter fw = new FileWriter(this.getResultsFile("xml"));
try {
fw.append(new ResultsParser().toXml(this.getWebapp(), request.getParameterMap()));
} finally {
fw.close();
}
}
private File getResultsFile(String extension) {
return new File(this.getDirectory() + "/SELENIUM-" + this.getWebapp() + "-results." + extension);
}
private String getWebapp() {
return System.getProperty("selenium.results.webapp");
}
private String getDirectory() {
return System.getProperty("selenium.results.directory");
}
private void shutdownTheJvmThatWillBringDownJettyAsWell() {
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(1000);
} catch (Exception e) {
// Ignore
}
System.exit(0);
}
}).start();
}
}