001 package org.hd.d.pg2k.test.dev;
002
003 import java.io.IOException;
004 import java.net.MalformedURLException;
005
006 import javax.servlet.http.HttpServlet;
007
008 import junit.framework.TestCase;
009
010 import org.hd.d.pg2k.svrCore.CoreConsts;
011 import org.hd.d.pg2k.webSvr.exhibit.DataSourceBean;
012
013 import com.meterware.httpunit.GetMethodWebRequest;
014 import com.meterware.httpunit.WebRequest;
015 import com.meterware.servletunit.InvocationContext;
016 import com.meterware.servletunit.ServletRunner;
017 import com.meterware.servletunit.ServletUnitClient;
018
019 /**Base class to support servlet-dependent tests. */
020 public abstract class ServletTestsBase extends TestCase
021 {
022 /**Servlet runner; not null after setUp(). */
023 private ServletRunner _sr;
024
025 /**Dummy servlet used by getDataSourceBean() and other utility methods. */
026 public static final class DummyServlet extends HttpServlet
027 { private static final long serialVersionUID = -3108217776198161903L; }
028
029 /**Set up the servlet runner and associated state. */
030 @Override protected void setUp()
031 {
032 _sr = new ServletRunner();
033 // Use DummyServlet for getting at application context, etc.
034 _sr.registerServlet("DummyServlet", DummyServlet.class.getName());
035 }
036
037 /**Tear down the servlet environment. */
038 @Override protected void tearDown()
039 {
040 // cleanup code
041 _sr.shutDown();
042 }
043
044 /**URL used to invoke DummyServlet (by that name), nominally under gallery.hd.org; not null. */
045 protected static final String DUMMY_SERVLET_URL_STRING = "http://"+CoreConsts.MAIN_DATA_HOST+"/DummyServlet";
046
047 /**Get ServletRunner; never null after setUp(). */
048 protected ServletRunner getServletRunner()
049 { return(_sr); }
050
051 /**Gets a new InvocationContext based on a request to the DummyServlet on the main host; never null. */
052 protected InvocationContext getNewInvocationContext() throws IOException,
053 MalformedURLException
054 {
055 final ServletUnitClient sc = getServletRunner().newClient();
056 final WebRequest wRequest = new GetMethodWebRequest(DUMMY_SERVLET_URL_STRING);
057 final InvocationContext ic = sc.newInvocation(wRequest);
058 return(ic);
059 }
060
061 /**Get (application-wide/shared) Data Source Bean instance linked to servlet runner; never null.
062 * This instance is created on demand for one servlet run.
063 * <p>
064 * Should be correctly destroyed by tearDown().
065 */
066 protected DataSourceBean getDataSourceBean()
067 {
068 try
069 {
070 final InvocationContext ic = getNewInvocationContext();
071 final DummyServlet ds = (DummyServlet) ic.getServlet();
072 assertNotNull(ds);
073 final DataSourceBean dsb = DataSourceBean.getApplicationInstance(ds.getServletContext());
074 assertNotNull(dsb);
075 return(dsb);
076 }
077 catch(final Exception e)
078 {
079 throw new AssertionError("unexpected exception");
080 }
081 }
082 }