package com.googlecode.mycontainer.gae.web; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.naming.InitialContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.appengine.api.blobstore.dev.UploadBlobServlet; import com.google.appengine.api.images.dev.LocalBlobImageServlet; import com.google.appengine.tools.development.testing.LocalBlobstoreServiceTestConfig; import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig; import com.google.appengine.tools.development.testing.LocalServiceTestConfig; import com.google.appengine.tools.development.testing.LocalServiceTestHelper; import com.google.appengine.tools.development.testing.LocalTaskQueueTestConfig; import com.googlecode.mycontainer.kernel.ShutdownCommand; import com.googlecode.mycontainer.kernel.boot.ContainerBuilder; import com.googlecode.mycontainer.web.ContextWebServer; import com.googlecode.mycontainer.web.FilterDesc; import com.googlecode.mycontainer.web.LogFilter; import com.googlecode.mycontainer.web.ServletDesc; import com.googlecode.mycontainer.web.WebServerDeployer; import com.googlecode.mycontainer.web.jetty.JettyServerDeployer; public class GAETestHelper { private static final Logger LOG = LoggerFactory .getLogger(GAETestHelper.class); protected LocalServiceTestHelper helper; private LocalTaskQueueTestConfig task; private LocalDatastoreServiceTestConfig ds; private int port = 8580; public void setPort(int port) { this.port = port; } public void prepareLocalServiceTestHelper() throws Exception { ds = new LocalDatastoreServiceTestConfig(); List<LocalServiceTestConfig> list = new ArrayList<LocalServiceTestConfig>(); list.add(ds); if (task != null) { list.add(task); } LocalBlobstoreServiceTestConfig bs = new LocalBlobstoreServiceTestConfig(); bs.setNoStorage(true); list.add(bs); helper = new LocalServiceTestHelper( list.toArray(new LocalServiceTestConfig[0])); Map<String, Object> envs = new HashMap<String, Object>(); envs.put("com.google.appengine.api.users.UserService.user_id_key", "10"); helper.setEnvAttributes(envs); helper.setEnvIsLoggedIn(true); helper.setEnvIsAdmin(false); helper.setEnvEmail("test@example.com"); helper.setEnvAuthDomain("example.com"); } public void prepareLocalTaskQueue() { task = new LocalTaskQueueTestConfig(); task.setDisableAutoTaskExecution(false); task.setCallbackClass(TaskCallback.class); task.setQueueXmlPath("src/main/webapp/WEB-INF/queue.xml"); } public LocalServiceTestHelper getHelper() { return helper; } public LocalTaskQueueTestConfig getTask() { return task; } public LocalDatastoreServiceTestConfig getDs() { return ds; } public void bootLocalServiceTestHelper() throws Exception { helper.setUp(); } public void shutdownLocalServiceTestHelper() { try { if (helper != null) { helper.tearDown(); } } catch (Exception e) { LOG.info("error", e); } } public ContainerBuilder bootMycontainer() throws Exception { System.setProperty("mycontainer", "true"); ContainerBuilder builder = new ContainerBuilder(); builder.deployVMShutdownHook(); WebServerDeployer server = builder .createDeployer(JettyServerDeployer.class); server.setName("WebServer"); server.bindPort(port); ContextWebServer web = server.createContextWebServer(); web.setContext("/"); web.setResources("src/main/webapp"); LocalServiceTestHelperFilter gae = new LocalServiceTestHelperFilter( helper); web.getFilters().add(new FilterDesc(LogFilter.class, "/*")); web.getFilters().add(new FilterDesc(gae, "/*")); web.getServlets().add( new ServletDesc(UploadBlobServlet.class, "/_ah/upload/*")); web.getServlets().add( new ServletDesc(LocalBlobImageServlet.class, "/_ah/img/*")); server.deploy(); return builder; } public void shutdownMycontainer() { try { ShutdownCommand shutdown = new ShutdownCommand(); shutdown.setContext(new InitialContext()); shutdown.shutdown(); } catch (Exception e) { LOG.error("error", e); } } public void tearDown() { if (helper != null) { helper.tearDown(); } } public void setUp() { if (helper != null) { helper.setUp(); } } }