Return-Path: X-Original-To: apmail-tomcat-dev-archive@www.apache.org Delivered-To: apmail-tomcat-dev-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id D73B2189F1 for ; Sat, 16 Jan 2016 03:16:09 +0000 (UTC) Received: (qmail 11942 invoked by uid 500); 16 Jan 2016 03:16:09 -0000 Delivered-To: apmail-tomcat-dev-archive@tomcat.apache.org Received: (qmail 11862 invoked by uid 500); 16 Jan 2016 03:16:09 -0000 Mailing-List: contact dev-help@tomcat.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Tomcat Developers List" Delivered-To: mailing list dev@tomcat.apache.org Received: (qmail 11851 invoked by uid 99); 16 Jan 2016 03:16:09 -0000 Received: from Unknown (HELO spamd4-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 16 Jan 2016 03:16:09 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd4-us-west.apache.org (ASF Mail Server at spamd4-us-west.apache.org) with ESMTP id B5BC0C0DB5 for ; Sat, 16 Jan 2016 03:16:08 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd4-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 1.246 X-Spam-Level: * X-Spam-Status: No, score=1.246 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, KAM_LAZY_DOMAIN_SECURITY=1, RP_MATCHES_RCVD=-0.554] autolearn=disabled Received: from mx1-us-west.apache.org ([10.40.0.8]) by localhost (spamd4-us-west.apache.org [10.40.0.11]) (amavisd-new, port 10024) with ESMTP id IsWqbUR_owdr for ; Sat, 16 Jan 2016 03:16:04 +0000 (UTC) Received: from mailrelay1-us-west.apache.org (mailrelay1-us-west.apache.org [209.188.14.139]) by mx1-us-west.apache.org (ASF Mail Server at mx1-us-west.apache.org) with ESMTP id C63932051D for ; Sat, 16 Jan 2016 03:16:03 +0000 (UTC) Received: from svn01-us-west.apache.org (svn.apache.org [10.41.0.6]) by mailrelay1-us-west.apache.org (ASF Mail Server at mailrelay1-us-west.apache.org) with ESMTP id 32C0AE01AD for ; Sat, 16 Jan 2016 03:16:03 +0000 (UTC) Received: from svn01-us-west.apache.org (localhost [127.0.0.1]) by svn01-us-west.apache.org (ASF Mail Server at svn01-us-west.apache.org) with ESMTP id E3B473A0142 for ; Sat, 16 Jan 2016 03:16:02 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1724909 - in /tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina: connector/TestConnector.java core/TestApplicationHttpRequest.java startup/TestTomcat.java startup/Tomcat.java startup/TomcatBaseTest.java Date: Sat, 16 Jan 2016 03:16:02 -0000 To: dev@tomcat.apache.org From: kkolinko@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20160116031602.E3B473A0142@svn01-us-west.apache.org> Author: kkolinko Date: Sat Jan 16 03:16:02 2016 New Revision: 1724909 URL: http://svn.apache.org/viewvc?rev=1724909&view=rev Log: Implement Tomcat class. Switch tests from using Embedded class to Tomcat class. By the way, with this change I no longer see failures or crashes when testing with the APR connector. So this issue is fixed as well. Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/connector/TestConnector.java tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/core/TestApplicationHttpRequest.java tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/startup/TestTomcat.java tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/startup/Tomcat.java tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/startup/TomcatBaseTest.java Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/connector/TestConnector.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/connector/TestConnector.java?rev=1724909&r1=1724908&r2=1724909&view=diff ============================================================================== --- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/connector/TestConnector.java (original) +++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/connector/TestConnector.java Sat Jan 16 03:16:02 2016 @@ -20,7 +20,7 @@ import org.junit.Test; import static org.junit.Assert.assertTrue; -import org.apache.catalina.startup.Embedded; +import org.apache.catalina.startup.Tomcat; import org.apache.catalina.startup.TomcatBaseTest; /** @@ -30,10 +30,9 @@ public class TestConnector extends Tomca @Test public void testPort() throws Exception { - Embedded tomcat = getTomcatInstance(); + Tomcat tomcat = getTomcatInstance(); - // Connector connector1 = tomcat.getConnector(); - Connector connector1 = tomcat.findConnectors()[0]; + Connector connector1 = tomcat.getConnector(); connector1.setPort(0); tomcat.start(); Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/core/TestApplicationHttpRequest.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/core/TestApplicationHttpRequest.java?rev=1724909&r1=1724908&r2=1724909&view=diff ============================================================================== --- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/core/TestApplicationHttpRequest.java (original) +++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/core/TestApplicationHttpRequest.java Sat Jan 16 03:16:02 2016 @@ -31,8 +31,6 @@ import org.junit.Assert; import org.junit.Test; import org.apache.catalina.Context; -import org.apache.catalina.Host; -import org.apache.catalina.startup.Embedded; import org.apache.catalina.startup.Tomcat; import org.apache.catalina.startup.TomcatBaseTest; import org.apache.tomcat.util.buf.ByteChunk; @@ -180,17 +178,14 @@ public class TestApplicationHttpRequest private void doQueryStringTest(String originalQueryString, String forwardQueryString, Map expected) throws Exception { - Embedded tomcat = getTomcatInstance(); + Tomcat tomcat = getTomcatInstance(); // // No file system docBase required // Context ctx = tomcat.addContext("", null); // Must have a real docBase - just use temp - // FIXME: Implement getHost() method. // FIXME: Implement support for null docBase (r1681953) - Host host = (Host) tomcat.getContainer().findChildren()[0]; - Tomcat helper = new Tomcat(); - Context ctx = helper.addContext(host, "", + Context ctx = tomcat.addContext("", System.getProperty("java.io.tmpdir")); if (forwardQueryString == null) { Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/startup/TestTomcat.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/startup/TestTomcat.java?rev=1724909&r1=1724908&r2=1724909&view=diff ============================================================================== --- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/startup/TestTomcat.java (original) +++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/startup/TestTomcat.java Sat Jan 16 03:16:02 2016 @@ -248,18 +248,15 @@ public class TestTomcat extends TomcatBa */ @Test public void testProgrammatic() throws Exception { - Embedded tomcat = getTomcatInstance(); + Tomcat tomcat = getTomcatInstance(); // // No file system docBase required // org.apache.catalina.Context ctx = tomcat.addContext("", null); // Must have a real docBase - just use temp - // FIXME: Implement getHost() method. // FIXME: Implement support for null docBase (r1681953) - Host host = (Host) tomcat.getContainer().findChildren()[0]; - Tomcat helper = new Tomcat(); - org.apache.catalina.Context ctx = - helper.addContext(host, "", System.getProperty("java.io.tmpdir")); + org.apache.catalina.Context ctx = tomcat.addContext("", + System.getProperty("java.io.tmpdir")); // You can customize the context by calling // its API @@ -275,21 +272,16 @@ public class TestTomcat extends TomcatBa @Test public void testSingleWebapp() throws Exception { - Embedded tomcat = getTomcatInstance(); + Tomcat tomcat = getTomcatInstance(); File appDir = new File(getBuildDirectory(), "webapps/examples"); - // tomcat.addWebapp(null, "/examples", appDir.getAbsolutePath()); - - // FIXME: Implement getHost() method. - Host host = (Host) tomcat.getContainer().findChildren()[0]; - Tomcat helper = new Tomcat(); - helper.addWebapp(host, "/examples", appDir.getAbsolutePath()); + tomcat.addWebapp(null, "/examples", appDir.getAbsolutePath()); tomcat.start(); - ByteChunk res = getUrl("http://localhost:" + getPort() - + "/examples/servlets/servlet/HelloWorldExample"); + ByteChunk res = getUrl("http://localhost:" + getPort() + + "/examples/servlets/servlet/HelloWorldExample"); String text = res.toString(); assertTrue(text, text.indexOf("

Hello World!

") > 0); } Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/startup/Tomcat.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/startup/Tomcat.java?rev=1724909&r1=1724908&r2=1724909&view=diff ============================================================================== --- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/startup/Tomcat.java (original) +++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/startup/Tomcat.java Sat Jan 16 03:16:02 2016 @@ -125,34 +125,37 @@ import org.apache.catalina.realm.RealmBa * @author Costin Manolache */ public class Tomcat { -//FIXME + // // Some logging implementations use weak references for loggers so there is // // the possibility that logging configuration could be lost if GC runs just // // after Loggers are configured but before they are used. The purpose of // // this Map is to retain strong references to explicitly configured loggers // // so that configuration is not lost. // private final Map pinnedLoggers = new HashMap(); -// -// // Single engine, service, server, connector - few cases need more, -// // they can use server.xml -// protected StandardServer server; -// protected StandardService service; -// protected StandardEngine engine; -// protected Connector connector; // for more - customize the classes -// -// // To make it a bit easier to config for the common case -// // ( one host, one context ). -// protected Host host; -// -// // TODO: it's easy to add support for more hosts - but is it -// // really needed ? -// -// // TODO: allow use of in-memory connector -// -// protected int port = 8080; -// protected String hostname = "localhost"; -// protected String basedir; -// + + // Single engine, service, server, connector - few cases need more, + // they can use server.xml + protected StandardServer server; + protected StandardService service; + protected StandardEngine engine; + protected Connector connector; // for more - customize the classes + + // To make it a bit easier to config for the common case + // ( one host, one context ). + protected Host host; + + // TODO: it's easy to add support for more hosts - but is it + // really needed ? + + // TODO: allow use of in-memory connector + + protected int port = 8080; + protected String hostname = "localhost"; + protected String basedir; + + private volatile boolean initialized; + private volatile boolean started; + // // Default in-memory realm, will be set by default on the Engine. Can be // // replaced at engine level or over-ridden at Host or Context level // @Deprecated // Will be removed in Tomcat 8.0.x. @@ -162,44 +165,44 @@ public class Tomcat { // new HashMap>(); // private final Map userPrincipals = // new HashMap(); -// -// public Tomcat() { -// // NOOP -// } -// -// /** -// * Tomcat needs a directory for temp files. This should be the -// * first method called. -// * -// * By default, if this method is not called, we use: -// * - system properties - catalina.base, catalina.home -// * - $HOME/tomcat.$PORT -// * ( /tmp doesn't seem a good choice for security ). -// * -// * -// * TODO: better default ? Maybe current dir ? -// * TODO: disable work dir if not needed ( no jsp, etc ). -// */ -// public void setBaseDir(String basedir) { -// this.basedir = basedir; -// } -// -// /** -// * Set the port for the default connector. Must -// * be called before start(). -// */ -// public void setPort(int port) { -// this.port = port; -// } -// -// /** -// * The the hostname of the default host, default is -// * 'localhost'. -// */ -// public void setHostname(String s) { -// hostname = s; -// } -// + + public Tomcat() { + // NOOP + } + + /** + * Tomcat needs a directory for temp files. This should be the + * first method called. + * + * By default, if this method is not called, we use: + * - system properties - catalina.base, catalina.home + * - $HOME/tomcat.$PORT + * ( /tmp doesn't seem a good choice for security ). + * + * + * TODO: better default ? Maybe current dir ? + * TODO: disable work dir if not needed ( no jsp, etc ). + */ + public void setBaseDir(String basedir) { + this.basedir = basedir; + } + + /** + * Set the port for the default connector. Must + * be called before start(). + */ + public void setPort(int port) { + this.port = port; + } + + /** + * The the hostname of the default host, default is + * 'localhost'. + */ + public void setHostname(String s) { + hostname = s; + } + // /** // * This is equivalent to adding a web application to Tomcat's webapps // * directory. The equivalent of the default web.xml will be applied to the @@ -213,39 +216,39 @@ public class Tomcat { // public Context addWebapp(String contextPath, String docBase) throws ServletException { // return addWebapp(getHost(), contextPath, docBase); // } -// -// -// /** -// * Add a context - programmatic mode, no web.xml used. -// * -// * API calls equivalent with web.xml: -// * -// * context-param -// * ctx.addParameter("name", "value"); -// * -// * -// * error-page -// * ErrorPage ep = new ErrorPage(); -// * ep.setErrorCode(500); -// * ep.setLocation("/error.html"); -// * ctx.addErrorPage(ep); -// * -// * ctx.addMimeMapping("ext", "type"); -// * -// * Note: If you reload the Context, all your configuration will be lost. If -// * you need reload support, consider using a LifecycleListener to provide -// * your configuration. -// * -// * TODO: add the rest -// * -// * @param contextPath "" for root context. -// * @param docBase base dir for the context, for static files. Must exist, -// * relative to the server home -// */ -// public Context addContext(String contextPath, String docBase) { -// return addContext(getHost(), contextPath, docBase); -// } -// + + + /** + * Add a context - programmatic mode, no web.xml used. + * + * API calls equivalent with web.xml: + * + * context-param + * ctx.addParameter("name", "value"); + * + * + * error-page + * ErrorPage ep = new ErrorPage(); + * ep.setErrorCode(500); + * ep.setLocation("/error.html"); + * ctx.addErrorPage(ep); + * + * ctx.addMimeMapping("ext", "type"); + * + * Note: If you reload the Context, all your configuration will be lost. If + * you need reload support, consider using a LifecycleListener to provide + * your configuration. + * + * TODO: add the rest + * + * @param contextPath "" for root context. + * @param docBase base dir for the context, for static files. Must exist, + * relative to the server home + */ + public Context addContext(String contextPath, String docBase) { + return addContext(getHost(), contextPath, docBase); + } + // /** // * Equivalent with // * . @@ -324,50 +327,66 @@ public class Tomcat { } -// /** -// * Initialise the server. -// * -// * @throws LifecycleException -// */ -// public void init() throws Exception { -// getServer(); -// getConnector(); -// server.init(); -// } -// -// -// /** -// * Start the server. -// * -// * @throws LifecycleException -// */ -// public void start() throws LifecycleException { -// getServer(); -// getConnector(); -// server.start(); -// } -// -// /** -// * Stop the server. -// * -// * @throws LifecycleException -// */ -// public void stop() throws LifecycleException { -// getServer(); -// server.stop(); -// } -// -// -// /** -// * Destroy the server. This object cannot be used once this method has been -// * called. -// */ -// public void destroy() throws LifecycleException { -// getServer(); -// server.destroy(); -// // Could null out objects here -// } -// + /** + * Initialise the server. + * + * @throws LifecycleException + */ + public void init() throws LifecycleException { + getServer(); + getConnector(); + if (!initialized) { + initialized = true; + try { + server.init(); + } catch (LifecycleException e) { + throw e; + } catch (Exception e) { + throw new LifecycleException(e); + } + } + } + + + /** + * Start the server. + * + * @throws LifecycleException + */ + public void start() throws LifecycleException { + if (!started) { + init(); + started = true; + server.start(); + } + } + + /** + * Stop the server. + * + * @throws LifecycleException + */ + public void stop() throws LifecycleException { + if (started) { + started = false; + server.stop(); + } + } + + + /** + * Destroy the server. This object cannot be used once this method has been + * called. + */ + public void destroy() throws LifecycleException { + if (initialized) { + stop(); + initialized = false; + // server.destroy(); + // Could null out objects here + } + } + // /** // * Add a user for the in-memory realm. All created apps use this // * by default, can be replaced using setRealm(). @@ -388,69 +407,77 @@ public class Tomcat { // } // roles.add(role); // } -// -// // ------- Extra customization ------- -// // You can tune individual tomcat objects, using internal APIs -// -// /** -// * Get the default http connector. You can set more -// * parameters - the port is already initialized. -// * -// * Alternatively, you can construct a Connector and set any params, -// * then call addConnector(Connector) -// * -// * @return A connector object that can be customized -// */ -// public Connector getConnector() { -// getServer(); -// if (connector != null) { -// return connector; -// } -// -// // The same as in standard Tomcat configuration. -// // This creates an APR HTTP connector if AprLifecycleListener has been -// // configured (created) and Tomcat Native library is available. -// // Otherwise it creates a BIO HTTP connector (Http11Protocol). -// connector = new Connector("HTTP/1.1"); -// connector.setPort(port); -// service.addConnector( connector ); -// return connector; -// } -// -// public void setConnector(Connector connector) { -// this.connector = connector; -// } -// -// /** -// * Get the service object. Can be used to add more -// * connectors and few other global settings. -// */ -// public Service getService() { -// getServer(); -// return service; -// } -// -// /** -// * Sets the current host - all future webapps will -// * be added to this host. When tomcat starts, the -// * host will be the default host. -// * -// * @param host -// */ -// public void setHost(Host host) { -// this.host = host; -// } -// -// public Host getHost() { -// if (host == null) { -// host = new StandardHost(); -// host.setName(hostname); -// -// getEngine().addChild( host ); -// } -// return host; -// } -// + + // ------- Extra customization ------- + // You can tune individual tomcat objects, using internal APIs + + /** + * Get the default http connector. You can set more + * parameters - the port is already initialized. + * + * Alternatively, you can construct a Connector and set any params, + * then call addConnector(Connector) + * + * @return A connector object that can be customized + */ + public Connector getConnector() { + getServer(); + if (connector != null) { + return connector; + } + + // The same as in standard Tomcat configuration. + // This creates an APR HTTP connector if AprLifecycleListener has been + // configured (created) and Tomcat Native library is available. + // Otherwise it creates a BIO HTTP connector (Http11Protocol). + try { + connector = new Connector("HTTP/1.1"); + } catch (RuntimeException e) { + throw e; + } catch (Exception e) { + // Never happens. Connector() declares that it can throw + // an Exception, but never throws one. + throw new RuntimeException(e); + } + connector.setPort(port); + service.addConnector( connector ); + return connector; + } + + public void setConnector(Connector connector) { + this.connector = connector; + } + + /** + * Get the service object. Can be used to add more + * connectors and few other global settings. + */ + public Service getService() { + getServer(); + return service; + } + + /** + * Sets the current host - all future webapps will + * be added to this host. When tomcat starts, the + * host will be the default host. + * + * @param host + */ + public void setHost(Host host) { + this.host = host; + } + + public Host getHost() { + if (host == null) { + host = new StandardHost(); + host.setName(hostname); + + getEngine().addChild( host ); + } + return host; + } + // /** // * Set a custom realm for auth. If not called, a simple // * default will be used, using an internal map. @@ -464,47 +491,48 @@ public class Tomcat { // defaultRealm = realm; // } // -// -// /** -// * Access to the engine, for further customization. -// */ -// public Engine getEngine() { -// if(engine == null ) { -// getServer(); -// engine = new StandardEngine(); -// engine.setName( "Tomcat" ); -// engine.setDefaultHost(hostname); -// if (defaultRealm == null) { -// initSimpleAuth(); -// } -// engine.setRealm(defaultRealm); -// service.setContainer(engine); -// } -// return engine; -// } -// -// /** -// * Get the server object. You can add listeners and few more -// * customizations. JNDI is disabled by default. -// */ -// public Server getServer() { -// -// if (server != null) { -// return server; -// } -// -// initBaseDir(); -// -// System.setProperty("catalina.useNaming", "false"); -// -// server = new StandardServer(); -// server.setPort( -1 ); -// -// service = new StandardService(); -// service.setName("Tomcat"); -// server.addService( service ); -// return server; -// } + + /** + * Access to the engine, for further customization. + */ + public Engine getEngine() { + if(engine == null ) { + getServer(); + engine = new StandardEngine(); + engine.setName( "Tomcat" ); + engine.setDefaultHost(hostname); + // @Deprecated + // if (defaultRealm == null) { + // initSimpleAuth(); + // } + // engine.setRealm(defaultRealm); + service.setContainer(engine); + } + return engine; + } + + /** + * Get the server object. You can add listeners and few more + * customizations. JNDI is disabled by default. + */ + public Server getServer() { + + if (server != null) { + return server; + } + + initBaseDir(); + + System.setProperty("catalina.useNaming", "false"); + + server = new StandardServer(); + server.setPort(-1); + + service = new StandardService(); + service.setName("Tomcat"); + server.addService(service); + return server; + } public Context addContext(Host host, String contextPath, String dir) { return addContext(host, contextPath, contextPath, dir); @@ -519,11 +547,11 @@ public class Tomcat { ctx.setDocBase(dir); ((Lifecycle) ctx).addLifecycleListener(new FixContextListener()); -// if (host == null) { -// getHost().addChild(ctx); -// } else { + if (host == null) { + getHost().addChild(ctx); + } else { host.addChild(ctx); -// } + } return ctx; } @@ -555,11 +583,11 @@ public class Tomcat { // // prevent it from looking ( if it finds one - it'll have dup error ) // ctxCfg.setDefaultWebXml(noDefaultWebXmlPath()); -// if (host == null) { -// getHost().addChild(ctx); -// } else { + if (host == null) { + getHost().addChild(ctx); + } else { host.addChild(ctx); -// } + } return ctx; } @@ -638,36 +666,35 @@ public class Tomcat { // // }; // } -// -// protected void initBaseDir() { -// String catalinaHome = System.getProperty(Globals.CATALINA_HOME_PROP); -// if (basedir == null) { -// basedir = System.getProperty(Globals.CATALINA_BASE_PROP); -// } -// if (basedir == null) { -// basedir = catalinaHome; -// } -// if (basedir == null) { -// // Create a temp dir. -// basedir = System.getProperty("user.dir") + -// "/tomcat." + port; -// File home = new File(basedir); -// home.mkdir(); -// if (!home.isAbsolute()) { -// try { -// basedir = home.getCanonicalPath(); -// } catch (IOException e) { -// basedir = home.getAbsolutePath(); -// } -// } -// } -// if (catalinaHome == null) { -// System.setProperty(Globals.CATALINA_HOME_PROP, basedir); -// } -// System.setProperty(Globals.CATALINA_BASE_PROP, basedir); -// } -// -// static final String[] silences = new String[] { + + protected void initBaseDir() { + String catalinaHome = System.getProperty(Globals.CATALINA_HOME_PROP); + if (basedir == null) { + basedir = System.getProperty(Globals.CATALINA_BASE_PROP); + } + if (basedir == null) { + basedir = catalinaHome; + } + if (basedir == null) { + // Create a temp dir. + basedir = System.getProperty("user.dir") + "/tomcat." + port; + File home = new File(basedir); + home.mkdir(); + if (!home.isAbsolute()) { + try { + basedir = home.getCanonicalPath(); + } catch (IOException e) { + basedir = home.getAbsolutePath(); + } + } + } + if (catalinaHome == null) { + System.setProperty(Globals.CATALINA_HOME_PROP, basedir); + } + System.setProperty(Globals.CATALINA_BASE_PROP, basedir); + } + + // static final String[] silences = new String[] { // "org.apache.coyote.http11.Http11Protocol", // "org.apache.catalina.core.StandardService", // "org.apache.catalina.core.StandardEngine", @@ -730,9 +757,9 @@ public class Tomcat { */ private Context createContext(Host host, String url) { String contextClass = StandardContext.class.getName(); -// if (host == null) { -// host = this.getHost(); -// } + if (host == null) { + host = this.getHost(); + } if (host instanceof StandardHost) { contextClass = ((StandardHost) host).getContextClass(); } Modified: tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/startup/TomcatBaseTest.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/startup/TomcatBaseTest.java?rev=1724909&r1=1724908&r2=1724909&view=diff ============================================================================== --- tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/startup/TomcatBaseTest.java (original) +++ tomcat/tc6.0.x/branches/tomcat6-testing_20160106/test/org/apache/catalina/startup/TomcatBaseTest.java Sat Jan 16 03:16:02 2016 @@ -46,10 +46,6 @@ import org.junit.Assert; import org.junit.Before; import org.apache.catalina.Container; -import org.apache.catalina.Engine; -import org.apache.catalina.Host; -import org.apache.catalina.Lifecycle; -import org.apache.catalina.LifecycleEvent; import org.apache.catalina.LifecycleException; import org.apache.catalina.Manager; import org.apache.catalina.Server; @@ -68,7 +64,7 @@ import org.apache.tomcat.util.buf.ByteCh * don't have to keep writing the cleanup code. */ public abstract class TomcatBaseTest extends LoggingBaseTest { - private Embedded tomcat; + private Tomcat tomcat; private boolean accessLogEnabled = false; public static final String TEMP_DIR = System.getProperty("java.io.tmpdir"); @@ -76,7 +72,7 @@ public abstract class TomcatBaseTest ext /** * Make Tomcat instance accessible to sub-classes. */ - public Embedded getTomcatInstance() { + public Tomcat getTomcatInstance() { return tomcat; } @@ -84,8 +80,7 @@ public abstract class TomcatBaseTest ext * Sub-classes need to know port so they can connect */ public int getPort() { - // return tomcat.getConnector().getLocalPort(); - return tomcat.findConnectors()[0].getLocalPort(); + return tomcat.getConnector().getLocalPort(); } /** @@ -114,10 +109,6 @@ public abstract class TomcatBaseTest ext assertNull("ServerFactory.server field is not null", f.get(null)); tomcat = new TomcatWithFastSessionIDs(); - tomcat.setServer(ServerFactory.getServer()); - - Engine engine = tomcat.createEngine(); - tomcat.addEngine(engine); String protocol = getProtocol(); Connector connector = new Connector(protocol); @@ -128,7 +119,8 @@ public abstract class TomcatBaseTest ext connector.setPort(0); // Mainly set to reduce timeouts during async tests connector.setAttribute("connectionTimeout", "3000"); - tomcat.addConnector(connector); + tomcat.getService().addConnector(connector); + tomcat.setConnector(connector); // Add AprLifecycleListener if we are using the Apr connector if (protocol.contains("Apr")) { @@ -137,15 +129,11 @@ public abstract class TomcatBaseTest ext listener.setSSLRandomSeed("/dev/urandom"); server.addLifecycleListener(listener); connector.setAttribute("pollerThreadCount", Integer.valueOf(1)); - // FIXME: In Tomcat 6 Embedded.start() does not fire INIT_EVENT on Server - listener.lifecycleEvent(new LifecycleEvent(server, Lifecycle.INIT_EVENT)); } File catalinaBase = getTemporaryDirectory(); - tomcat.setCatalinaBase(catalinaBase.getAbsolutePath()); - - Host host = tomcat.createHost("localhost", appBase.getAbsolutePath()); - engine.addChild(host); + tomcat.setBaseDir(catalinaBase.getAbsolutePath()); + tomcat.getHost().setAppBase(appBase.getAbsolutePath()); accessLogEnabled = Boolean.parseBoolean( System.getProperty("tomcat.test.accesslog", "false")); @@ -159,8 +147,7 @@ public abstract class TomcatBaseTest ext AccessLogValve alv = new AccessLogValve(); alv.setDirectory(accessLogDirectory); alv.setPattern("%h %l %u %t \"%r\" %s %b %I %D"); - // tomcat.getHost().getPipeline().addValve(alv); - host.getPipeline().addValve(alv); + tomcat.getHost().getPipeline().addValve(alv); } // Cannot delete the whole tempDir, because logs are there, @@ -185,7 +172,7 @@ public abstract class TomcatBaseTest ext @Override public void tearDown() throws Exception { try { - if (tomcat.started) { + if (tomcat.server != null) { tomcat.stop(); tomcat.destroy(); } @@ -793,7 +780,7 @@ public abstract class TomcatBaseTest ext return rc; } - private static class TomcatWithFastSessionIDs extends Embedded { + private static class TomcatWithFastSessionIDs extends Tomcat { @Override public void start() throws LifecycleException { --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org For additional commands, e-mail: dev-help@tomcat.apache.org