/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.servicemanager.servlet;
import static org.junit.Assert.*;
import java.io.IOException;
import org.dspace.kernel.DSpaceKernelManager;
import org.dspace.utils.servlet.DSpaceWebappServletFilter;
import org.junit.Test;
import org.mortbay.jetty.Handler;
import org.mortbay.jetty.testing.HttpTester;
import org.mortbay.jetty.testing.ServletTester;
/**
* This starts up a jetty server and tests the ability for the servlet filter to start a kernel
* and correctly shut it down
*
* @author Aaron Zeckoski (azeckoski @ gmail.com)
*/
public class DSpaceKernelServletContextListenerTest {
@Test
public void testSampleRequest() {
// make sure no kernel yet
try {
new DSpaceKernelManager().getKernel();
fail("Should have thrown exception");
} catch (IllegalStateException e) {
assertNotNull(e.getMessage());
}
ServletTester tester = new ServletTester();
tester.setContextPath("/");
tester.getContext().addEventListener(new DSpaceKernelServletContextListener());
tester.addFilter(DSpaceWebappServletFilter.class, "/*", Handler.REQUEST);
tester.addServlet(SampleServlet.class, "/dspace");
try {
tester.start();
} catch (Exception e) {
fail("Could not start the jetty server: " + e.getMessage());
}
// now there should be a kernel
assertNotNull( new DSpaceKernelManager().getKernel() );
// now fire the request
String jettyRequest =
"GET /dspace HTTP/1.1\r\n"+
"Host: tester\r\n"+
"\r\n";
try {
String content = tester.getResponses(jettyRequest);
assertNotNull(content);
assertTrue(content.contains("DSpaceTest"));
// assertFalse(content.contains("session=null"));
// assertFalse(content.contains("request=null"));
} catch (Exception e) {
fail("Could not fire request: " + e.getMessage());
}
// now there should be a kernel
assertNotNull( new DSpaceKernelManager().getKernel() );
// try a request a different way
HttpTester request = new HttpTester();
HttpTester response = new HttpTester();
request.setMethod("GET");
request.setHeader("Host","tester");
request.setVersion("HTTP/1.0");
request.setURI("/dspace");
try {
response.parse( tester.getResponses(request.generate()) );
} catch (IOException e1) {
fail("Could not parse response: " + e1.getMessage());
} catch (Exception e1) {
fail("Could not parse response: " + e1.getMessage());
}
assertTrue(response.getMethod() == null);
assertEquals(200, response.getStatus());
String content = response.getContent();
assertNotNull(content);
assertTrue(content.contains("DSpaceTest"));
// assertFalse(content.contains("session=null"));
// assertFalse(content.contains("request=null"));
// now there should be a kernel
assertNotNull( new DSpaceKernelManager().getKernel() );
try {
tester.stop();
} catch (Exception e) {
fail("Could not stop the jetty server: " + e.getMessage());
}
// back to no kernel again
try {
new DSpaceKernelManager().getKernel();
fail("Should have thrown exception");
} catch (IllegalStateException e) {
assertNotNull(e.getMessage());
}
tester = null;
request = null;
response = null;
}
@Test
public void testSampleRequestDouble() {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
testSampleRequest();
}
}