package br.com.dextra.teste.container; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.TimeZone; import org.apache.commons.io.FileUtils; import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig; import com.google.appengine.tools.development.testing.LocalSearchServiceTestConfig; import com.google.appengine.tools.development.testing.LocalServiceTestConfig; import com.google.appengine.tools.development.testing.LocalServiceTestHelper; import com.google.appengine.tools.development.testing.LocalUserServiceTestConfig; import com.googlecode.mycontainer.gae.web.LocalServiceTestHelperFilter; import com.googlecode.mycontainer.kernel.boot.ContainerBuilder; import com.googlecode.mycontainer.web.ContextWebServer; import com.googlecode.mycontainer.web.FilterDesc; import com.googlecode.mycontainer.web.WebServerDeployer; import com.googlecode.mycontainer.web.jetty.JettyServerDeployer; public class GAETestServer { private LocalServiceTestHelper gaeTestHelper; private List<LocalServiceTestConfig> gaeConfigurations = new ArrayList<LocalServiceTestConfig>(); private WebServerDeployer server; private boolean authenticationEnabled = true; private boolean userLoggedIn = true; private boolean userIsAdmin = false; private boolean jettyIsEnabled = false; private int jettyPort = 8080; public void start() { gaeTestHelper = new LocalServiceTestHelper( gaeConfigurations.toArray(new LocalServiceTestConfig[gaeConfigurations.size()])); if (authenticationEnabled) { gaeTestHelper.setEnvIsLoggedIn(this.userLoggedIn); gaeTestHelper.setEnvIsAdmin(this.userIsAdmin); } gaeTestHelper.setEnvEmail("login.google@example.com"); gaeTestHelper.setEnvAuthDomain("example.com"); gaeTestHelper.setTimeZone(TimeZone.getTimeZone("America/Sao_Paulo")); gaeTestHelper.setUp(); if (jettyIsEnabled) { this.startJetty(); } } public void stop() throws IOException { gaeTestHelper.tearDown(); FileUtils.deleteDirectory(new File("WEB-INF")); } public void enableDatastore(boolean noStorage) { LocalDatastoreServiceTestConfig localDatastoreServiceTestConfig = new LocalDatastoreServiceTestConfig(); localDatastoreServiceTestConfig.setNoStorage(noStorage); localDatastoreServiceTestConfig.setNoIndexAutoGen(noStorage); gaeConfigurations.add(localDatastoreServiceTestConfig); } public void enableAuthentication(boolean userLoggedIn, boolean userIsAdmin) { gaeConfigurations.add(new LocalUserServiceTestConfig()); authenticationEnabled = true; this.userIsAdmin = userIsAdmin; this.userLoggedIn = userLoggedIn; } public void enableSearch() { LocalSearchServiceTestConfig localSearchServiceTestConfig = new LocalSearchServiceTestConfig(); gaeConfigurations.add(localSearchServiceTestConfig); } public void enableJetty(int port) { this.jettyIsEnabled = true; this.jettyPort = port; } private void startJetty() { if(server != null) { return; } ContainerBuilder builder; try { builder = new ContainerBuilder(); builder.deployVMShutdownHook(); server = builder.createDeployer(JettyServerDeployer.class); server.setName("WebServer"); server.bindPort(this.jettyPort); ContextWebServer web = server.createContextWebServer(); web.setContext("/"); web.setResources("src/main/webapp"); LocalServiceTestHelperFilter gae = new LocalServiceTestHelperFilter(gaeTestHelper); web.getFilters().add(new FilterDesc(gae, "/*")); server.deploy(); } catch (Exception e) { e.printStackTrace(); } } }