package org.oddjob.webapp.servlets; import javax.servlet.ServletContext; import javax.servlet.ServletException; import junit.framework.TestCase; import org.oddjob.Oddjob; import org.oddjob.OddjobLookup; import org.oddjob.OurDirs; import org.oddjob.jobs.WaitJob; import org.oddjob.state.ParentState; import org.oddjob.state.StateConditions; import org.oddjob.webapp.WebappConstants; public class OddjobServletTest extends TestCase { class OurServletContext extends MockServletContext { Oddjob oddjob; @Override public String getInitParameter(String name) { if (WebappConstants.FILE_PARAM.equals(name)) { return "test/config/servlet-test.xml"; } if (WebappConstants.NAME_PARAM.equals(name)) { return "Servlet Test"; } throw new RuntimeException("Unexpected: " + name); } @Override public String getRealPath(String arg0) { return new OurDirs().base().toString(); } @Override public void setAttribute(String name, Object value) { assertEquals(WebappConstants.ODDJOB_INSTANCE, name); oddjob = (Oddjob) value; } } class OurServletConfig extends MockServletConfig { OurServletContext context = new OurServletContext(); @Override public ServletContext getServletContext() { return context; } } public void testInitDestroy() throws ServletException, InterruptedException { OddjobServlet test = new OddjobServlet(); OurServletConfig config = new OurServletConfig(); test.init(config); Oddjob oddjob = config.context.oddjob; WaitJob wait = null; while (true) { wait = (WaitJob) new OddjobLookup(oddjob).lookup("wait"); if (wait == null) { synchronized (this) { wait(1000); } } else { break; } } WaitJob waitForWait = new WaitJob(); waitForWait.setFor(wait); waitForWait.setState(StateConditions.EXECUTING); waitForWait.run(); test.destroy(); assertEquals(ParentState.DESTROYED, oddjob.lastStateEvent().getState()); } }