You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2023/12/04 14:14:41 UTC

(tomcat) branch main updated (4db15071f7 -> 22993ae0b6)

This is an automated email from the ASF dual-hosted git repository.

markt pushed a change to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git


    from 4db15071f7 Refactor and handle NIO2 which doesn't return a response
     new ec8f903f01 Differences are clear which a much shorter test
     new 22993ae0b6 Split test into three - helps when test machines have many cores

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../TestHostConfigAutomaticDeploymentA.java        | 482 ++++++++++++
 .../TestHostConfigAutomaticDeploymentB.java        | 687 +++++++++++++++++
 ...ava => TestHostConfigAutomaticDeploymentC.java} | 820 +--------------------
 test/webapp/bug6nnnn/bug64872b-timeunit.jsp        |   2 +-
 4 files changed, 1171 insertions(+), 820 deletions(-)
 create mode 100644 test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentA.java
 create mode 100644 test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentB.java
 rename test/org/apache/catalina/startup/{TestHostConfigAutomaticDeployment.java => TestHostConfigAutomaticDeploymentC.java} (59%)


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


(tomcat) 02/02: Split test into three - helps when test machines have many cores

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit 22993ae0b6c5395af9ccb2b3768a3fd178d2a3c7
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Mon Dec 4 14:14:32 2023 +0000

    Split test into three - helps when test machines have many cores
---
 .../TestHostConfigAutomaticDeploymentA.java        | 482 ++++++++++++
 .../TestHostConfigAutomaticDeploymentB.java        | 687 +++++++++++++++++
 ...ava => TestHostConfigAutomaticDeploymentC.java} | 820 +--------------------
 3 files changed, 1170 insertions(+), 819 deletions(-)

diff --git a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentA.java b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentA.java
new file mode 100644
index 0000000000..60f9dd78f5
--- /dev/null
+++ b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentA.java
@@ -0,0 +1,482 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.catalina.startup;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import org.apache.catalina.Context;
+import org.apache.catalina.Host;
+import org.apache.catalina.LifecycleState;
+import org.apache.catalina.core.StandardContext;
+import org.apache.catalina.core.StandardHost;
+import org.apache.catalina.util.ContextName;
+
+/**
+ * The purpose of this class is to test the automatic deployment features of the
+ * {@link HostConfig} implementation.
+ */
+public class TestHostConfigAutomaticDeploymentA extends TomcatBaseTest {
+
+    private static final ContextName  APP_NAME = new ContextName("myapp", false);
+    private static final File XML_SOURCE =
+            new File("test/deployment/context.xml");
+    private static final File WAR_XML_SOURCE =
+            new File("test/deployment/context.war");
+    private static final File DIR_XML_SOURCE =
+            new File("test/deployment/dirContext");
+    private static final File DIR_SOURCE =
+            new File("test/deployment/dirNoContext");
+
+    private static final int XML = 1;
+    private static final int EXT = 2;
+    private static final int WAR = 3;
+    private static final int DIR = 4;
+
+    private static final String XML_COOKIE_NAME = "XML_CONTEXT";
+    private static final String WAR_COOKIE_NAME = "WAR_CONTEXT";
+    private static final String DIR_COOKIE_NAME = "DIR_CONTEXT";
+    // private static final String DEFAULT_COOKIE_NAME = "JSESSIONID";
+
+    private File external;
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+
+        Tomcat tomcat = getTomcatInstance();
+
+        external = new File(getTemporaryDirectory(), "external");
+        if (!external.exists() && !external.mkdir()) {
+            Assert.fail("Unable to create external for test");
+        }
+
+        // Disable background thread
+        tomcat.getEngine().setBackgroundProcessorDelay(-1);
+
+        // Enable deployer
+        tomcat.getHost().addLifecycleListener(new HostConfig());
+
+        // Disable deployment on start up
+        tomcat.getHost().setDeployOnStartup(false);
+
+        // Clean-up after test
+        addDeleteOnTearDown(new File(tomcat.basedir, "/conf"));
+        addDeleteOnTearDown(external);
+    }
+
+
+    /*
+     * Expected behaviour for the deletion of files.
+     *
+     * Artifacts present     Artifact     Artifacts remaining
+     *  XML  WAR  EXT  DIR    Removed     XML  WAR  EXT DIR    Notes
+     *   N    N    N    Y       DIR        -    -    -   N
+     *   N    Y    N    N       WAR        -    N    -   -
+     *   N    Y    N    Y       DIR        -    Y    -   R     1
+     *   N    Y    N    Y       WAR        -    N    -   N
+     *   Y    N    N    N       XML        N    -    -   -
+     *   Y    N    N    Y       DIR        N    -    -   N
+     *   Y    N    N    Y       XML        R    -    -   Y     2
+     *   Y    N    Y    N       EXT        Y    -    N   -
+     *   Y    N    Y    N       XML        N    -    Y   -
+     *   Y    N    Y    Y       DIR        R    -    Y   R     1,2
+     *   Y    N    Y    Y       EXT        Y    -    N   N
+     *   Y    N    Y    Y       XML        N    -    Y   N
+     *   Y    Y    N    N       WAR        N    N    -   -
+     *   Y    Y    N    N       XML        N    N    -   -
+     *   Y    Y    N    Y       DIR        R    Y    -   R     1,2
+     *   Y    Y    N    Y       WAR        N    N    -   -
+     *   Y    Y    N    Y       XML        R    Y    -   Y
+     *
+     * Notes: 1. The DIR will be re-created since unpackWARs is true.
+     *        2. The XML will be extracted from the WAR/DIR if deployXML and
+     *           copyXML are true.
+     */
+    @Test
+    public void testDeleteDirRemoveDir() throws Exception {
+        doTestDelete(false, false, false, false, true, DIR, false, false, false,
+                null);
+    }
+
+    @Test
+    public void testDeleteWarRemoveWar() throws Exception {
+        doTestDelete(false, false, false, true, false, WAR, false, false, false,
+                null);
+    }
+
+    @Test
+    public void testDeleteWarDirRemoveDir() throws Exception {
+        doTestDelete(false, false, false, true, true, DIR, false, true, true,
+                WAR_COOKIE_NAME);
+    }
+
+    @Test
+    public void testDeleteWarDirRemoveWar() throws Exception {
+        doTestDelete(false, false, false, true, true, WAR, false, false, false,
+                null);
+    }
+
+    @Test
+    public void testDeleteXmlRemoveXml() throws Exception {
+        doTestDelete(true, false, false, false, false, XML, false, false, false,
+                null);
+    }
+
+    @Test
+    public void testDeleteXmlDirRemoveDir() throws Exception {
+        doTestDelete(true, false, false, false, true, DIR, false, false, false,
+                null);
+    }
+
+    @Test
+    public void testDeleteXmlDirRemoveXml() throws Exception {
+        doTestDelete(true, false, false, false, true, XML, false, false, true,
+                DIR_COOKIE_NAME);
+    }
+
+    @Test
+    public void testDeleteXmlDirRemoveXmlCopyXml() throws Exception {
+        ((StandardHost) getTomcatInstance().getHost()).setCopyXML(true);
+        doTestDelete(true, false, false, false, true, XML, true, false, true,
+                DIR_COOKIE_NAME);
+    }
+
+    @Test
+    public void testDeleteXmlExtwarRemoveExt() throws Exception {
+        doTestDelete(true, true, false, false, false, EXT, true, false, false,
+                XML_COOKIE_NAME);
+    }
+
+    @Test
+    public void testDeleteXmlExtdirRemoveExt() throws Exception {
+        doTestDelete(true, false, true, false, false, EXT, true, false, false,
+                XML_COOKIE_NAME);
+    }
+
+    @Test
+    public void testDeleteXmlExtwarRemoveXml() throws Exception {
+        doTestDelete(true, true, false, false, false, XML, false, false, false,
+                null);
+    }
+
+    @Test
+    public void testDeleteXmlExtdirRemoveXml() throws Exception {
+        doTestDelete(true, false, true, false, false, XML, false, false, false,
+                null);
+    }
+
+    @Test
+    public void testDeleteXmlExtwarDirRemoveDir() throws Exception {
+        doTestDelete(true, true, false, false, true, DIR, true, false, true,
+                XML_COOKIE_NAME);
+    }
+
+    @Test
+    public void testDeleteXmlExtwarDirRemoveExt() throws Exception {
+        doTestDelete(true, true, false, false, true, EXT, true, false, false,
+                XML_COOKIE_NAME);
+    }
+
+    @Test
+    public void testDeleteXmlExtwarDirRemoveXml() throws Exception {
+        doTestDelete(true, true, false, false, true, XML, false, false, false,
+                null);
+    }
+
+    @Test
+    public void testDeleteXmlWarRemoveWar() throws Exception {
+        doTestDelete(true, false, false, true, false, WAR, false, false, false,
+                null);
+    }
+
+    @Test
+    public void testDeleteXmlWarRemoveXml() throws Exception {
+        doTestDelete(true, false, false, true, false, XML, false, true, false,
+                WAR_COOKIE_NAME);
+    }
+
+    @Test
+    public void testDeleteXmlWarRemoveXmlCopyXml() throws Exception {
+        ((StandardHost) getTomcatInstance().getHost()).setCopyXML(true);
+        doTestDelete(true, false, false, true, false, XML, true, true, false,
+                WAR_COOKIE_NAME);
+    }
+
+    @Test
+    public void testDeleteXmlWarDirRemoveDir() throws Exception {
+        doTestDelete(true, false, false, true, true, DIR, false, true, true,
+                WAR_COOKIE_NAME);
+    }
+
+    @Test
+    public void testDeleteXmlWarDirRemoveDirCopyXml() throws Exception {
+        ((StandardHost) getTomcatInstance().getHost()).setCopyXML(true);
+        doTestDelete(true, false, false, true, true, DIR, true, true, true,
+                WAR_COOKIE_NAME);
+    }
+
+    @Test
+    public void testDeleteXmlWarDirRemoveWar() throws Exception {
+        doTestDelete(true, false, false, true, true, WAR, false, false, false,
+                null);
+    }
+
+    @Test
+    public void testDeleteXmlWarDirRemoveWarCopyXml() throws Exception {
+        ((StandardHost) getTomcatInstance().getHost()).setCopyXML(true);
+        doTestDelete(true, false, false, true, true, WAR, false, false, false,
+                null);
+    }
+
+    @Test
+    public void testDeleteXmlWarDirRemoveXml() throws Exception {
+        doTestDelete(true, false, false, true, true, XML, false, true, true,
+                DIR_COOKIE_NAME);
+    }
+
+    @Test
+    public void testDeleteXmlWarDirRemoveXmlCopyXml() throws Exception {
+        ((StandardHost) getTomcatInstance().getHost()).setCopyXML(true);
+        doTestDelete(true, false, false, true, true, XML, true, true, true,
+                WAR_COOKIE_NAME);
+    }
+
+    private void doTestDelete(boolean startXml, boolean startExternalWar,
+            boolean startExternalDir, boolean startWar, boolean startDir,
+            int toDelete, boolean resultXml, boolean resultWar,
+            boolean resultDir, String resultCookieName) throws Exception {
+
+        Tomcat tomcat = getTomcatInstance();
+        StandardHost host = (StandardHost) tomcat.getHost();
+
+        // Init
+        File xml = null;
+        File ext = null;
+        File war = null;
+        File dir = null;
+
+        if (startXml && !startExternalWar && !startExternalDir) {
+            xml = createXmlInConfigBaseForAppbase();
+        }
+        if (startExternalWar) {
+            ext = createWar(WAR_XML_SOURCE, false);
+            xml = createXmlInConfigBaseForExternal(ext);
+        }
+        if (startExternalDir) {
+            ext = createDirInExternal(true);
+            xml = createXmlInConfigBaseForExternal(ext);
+        }
+        if (startWar) {
+            war = createWar(WAR_XML_SOURCE, true);
+        }
+        if (startDir) {
+            dir = createDirInAppbase(true);
+        }
+
+        if ((startWar || startExternalWar) && !startDir) {
+            host.setUnpackWARs(false);
+        }
+
+        // Deploy the files we copied
+        tomcat.start();
+        host.backgroundProcess();
+
+        // Remove the specified file
+        switch (toDelete) {
+            case XML:
+                ExpandWar.delete(xml);
+                break;
+            case EXT:
+                ExpandWar.delete(ext);
+                break;
+            case WAR:
+                ExpandWar.delete(war);
+                break;
+            case DIR:
+                ExpandWar.delete(dir);
+                break;
+            default:
+                Assert.fail();
+        }
+
+        // Trigger an auto-deployment cycle
+        host.backgroundProcess();
+
+        Context ctxt = (Context) host.findChild(APP_NAME.getName());
+
+        // Check the results
+        // External WAR and DIR should only be deleted if the test is testing
+        // behaviour when the external resource is deleted
+        if (toDelete == EXT) {
+            if (ext == null) {
+                Assert.fail();
+            } else {
+                Assert.assertFalse(ext.exists());
+            }
+        } else {
+            if (startExternalWar) {
+                if (ext == null) {
+                    Assert.fail();
+                } else {
+                    Assert.assertTrue(ext.isFile());
+                }
+            }
+            if (startExternalDir) {
+                if (ext == null) {
+                    Assert.fail();
+                } else {
+                    Assert.assertTrue(ext.isDirectory());
+                }
+            }
+        }
+
+        if (resultXml) {
+            if (xml == null) {
+                Assert.fail();
+            } else {
+                Assert.assertTrue(xml.isFile());
+            }
+        }
+        if (resultWar) {
+            if (war == null) {
+                Assert.fail();
+            } else {
+                Assert.assertTrue(war.isFile());
+            }
+        }
+        if (resultDir) {
+            if (dir == null) {
+                Assert.fail();
+            } else {
+                Assert.assertTrue(dir.isDirectory());
+            }
+        }
+
+        if (!resultXml && (startExternalWar || startExternalDir)) {
+            Assert.assertNull(ctxt);
+        }
+        if (!resultWar && !resultDir) {
+            if (resultXml) {
+                Assert.assertNotNull(ctxt);
+                Assert.assertEquals(LifecycleState.FAILED, ctxt.getState());
+            } else {
+                Assert.assertNull(ctxt);
+            }
+        }
+
+        if (ctxt != null) {
+            Assert.assertEquals(resultCookieName, ctxt.getSessionCookieName());
+        }
+    }
+
+
+    private File createDirInAppbase(boolean withXml) throws IOException {
+        File dir = new File(getTomcatInstance().getHost().getAppBaseFile(),
+                APP_NAME.getBaseName());
+        if (withXml) {
+            recursiveCopy(DIR_XML_SOURCE.toPath(), dir.toPath());
+        } else {
+            recursiveCopy(DIR_SOURCE.toPath(), dir.toPath());
+        }
+        return dir;
+    }
+
+    private File createDirInExternal(boolean withXml) throws IOException {
+        File ext = new File(external, "external" + ".war");
+        if (withXml) {
+            recursiveCopy(DIR_XML_SOURCE.toPath(), ext.toPath());
+        } else {
+            recursiveCopy(DIR_SOURCE.toPath(), ext.toPath());
+        }
+        return ext;
+    }
+
+    private File createWar(File src, boolean useAppbase) throws IOException {
+        File dest;
+        if (useAppbase) {
+            dest = new File(getTomcatInstance().getHost().getAppBaseFile(),
+                APP_NAME.getBaseName() + ".war");
+        } else {
+            dest = new File(external, "external" + ".war");
+        }
+        Files.copy(src.toPath(), dest.toPath());
+        // Make sure that HostConfig thinks the WAR has been modified.
+        Assert.assertTrue("Failed to set last modified for [" + dest + "]", dest.setLastModified(
+                System.currentTimeMillis() - 2 * HostConfig.FILE_MODIFICATION_RESOLUTION_MS));
+        return dest;
+    }
+
+    private File createXmlInConfigBaseForAppbase() throws IOException {
+        File xml = getXmlInConfigBaseForAppbase();
+        File parent = xml.getParentFile();
+        if (!parent.isDirectory()) {
+            Assert.assertTrue(parent.mkdirs());
+        }
+        Files.copy(XML_SOURCE.toPath(), xml.toPath());
+        // Make sure that HostConfig thinks the xml has been modified.
+        Assert.assertTrue("Failed to set last modified for [" + xml + "]", xml.setLastModified(
+                System.currentTimeMillis() - 2 * HostConfig.FILE_MODIFICATION_RESOLUTION_MS));
+        return xml;
+    }
+
+    private File getXmlInConfigBaseForAppbase() {
+        Host host = getTomcatInstance().getHost();
+        return new File(host.getConfigBaseFile(), APP_NAME + ".xml");
+    }
+
+    private File createXmlInConfigBaseForExternal(File ext) throws IOException {
+        return createXmlInConfigBaseForExternal(ext, false);
+    }
+
+    private File createXmlInConfigBaseForExternal(File ext, boolean antiLocking)
+            throws IOException {
+        File xml = new File(getTomcatInstance().getHost().getConfigBaseFile(),
+                APP_NAME + ".xml");
+        File parent = xml.getParentFile();
+        if (!parent.isDirectory()) {
+            Assert.assertTrue(parent.mkdirs());
+        }
+
+        try (FileOutputStream fos = new FileOutputStream(xml)) {
+            StringBuilder context = new StringBuilder();
+            context.append("<Context sessionCookieName=\"");
+            context.append(XML_COOKIE_NAME);
+            context.append("\" docBase=\"");
+            context.append(ext.getAbsolutePath());
+            if (antiLocking) {
+                context.append("\" antiResourceLocking=\"true");
+            }
+            context.append("\" />");
+            fos.write(context.toString().getBytes(StandardCharsets.ISO_8859_1));
+        }
+        // Make sure that HostConfig thinks the xml has been modified.
+        Assert.assertTrue("Failed to set last modified for [" + xml + "]", xml.setLastModified(
+                System.currentTimeMillis() - 2 * HostConfig.FILE_MODIFICATION_RESOLUTION_MS));
+        return xml;
+    }
+
+    public static class TesterContext extends StandardContext {
+        // No functional change
+    }
+}
diff --git a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentB.java b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentB.java
new file mode 100644
index 0000000000..b892b194c5
--- /dev/null
+++ b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentB.java
@@ -0,0 +1,687 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.catalina.startup;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import org.apache.catalina.Context;
+import org.apache.catalina.Host;
+import org.apache.catalina.LifecycleState;
+import org.apache.catalina.core.StandardContext;
+import org.apache.catalina.core.StandardHost;
+import org.apache.catalina.util.ContextName;
+
+/**
+ * The purpose of this class is to test the automatic deployment features of the
+ * {@link HostConfig} implementation.
+ */
+public class TestHostConfigAutomaticDeploymentB extends TomcatBaseTest {
+
+    private static final ContextName  APP_NAME = new ContextName("myapp", false);
+    private static final File XML_SOURCE =
+            new File("test/deployment/context.xml");
+    private static final File WAR_XML_SOURCE =
+            new File("test/deployment/context.war");
+    private static final File WAR_SOURCE =
+            new File("test/deployment/noContext.war");
+    private static final File DIR_XML_SOURCE =
+            new File("test/deployment/dirContext");
+    private static final File DIR_SOURCE =
+            new File("test/deployment/dirNoContext");
+
+    private static final String XML_COOKIE_NAME = "XML_CONTEXT";
+    private static final String WAR_COOKIE_NAME = "WAR_CONTEXT";
+    private static final String DIR_COOKIE_NAME = "DIR_CONTEXT";
+    // private static final String DEFAULT_COOKIE_NAME = "JSESSIONID";
+
+    private File external;
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+
+        Tomcat tomcat = getTomcatInstance();
+
+        external = new File(getTemporaryDirectory(), "external");
+        if (!external.exists() && !external.mkdir()) {
+            Assert.fail("Unable to create external for test");
+        }
+
+        // Disable background thread
+        tomcat.getEngine().setBackgroundProcessorDelay(-1);
+
+        // Enable deployer
+        tomcat.getHost().addLifecycleListener(new HostConfig());
+
+        // Disable deployment on start up
+        tomcat.getHost().setDeployOnStartup(false);
+
+        // Clean-up after test
+        addDeleteOnTearDown(new File(tomcat.basedir, "/conf"));
+        addDeleteOnTearDown(external);
+    }
+
+
+    /*
+     * Expected behaviour for deployment of an XML file.
+     * deployXML  copyXML  unpackWARs      XML  WAR  DIR
+     *    Y/N       Y/N       Y/N           Y    N    N
+     *
+     * Note: Context will fail to start because no valid docBase is present.
+     */
+    @Test
+    public void testDeploymentXmlFFF() throws Exception {
+        createXmlInConfigBaseForAppbase();
+        doTestDeployment(false, false, false,
+                LifecycleState.FAILED, XML_COOKIE_NAME, true, false, false);
+    }
+
+    @Test
+    public void testDeploymentXmlFFT() throws Exception {
+        createXmlInConfigBaseForAppbase();
+        doTestDeployment(false, false, true,
+                LifecycleState.FAILED, XML_COOKIE_NAME, true, false, false);
+    }
+
+    @Test
+    public void testDeploymentXmlFTF() throws Exception {
+        createXmlInConfigBaseForAppbase();
+        doTestDeployment(false, true, false,
+                LifecycleState.FAILED, XML_COOKIE_NAME, true, false, false);
+    }
+
+    @Test
+    public void testDeploymentXmlFTT() throws Exception {
+        createXmlInConfigBaseForAppbase();
+        doTestDeployment(false, true, true,
+                LifecycleState.FAILED, XML_COOKIE_NAME, true, false, false);
+    }
+
+    @Test
+    public void testDeploymentXmlTFF() throws Exception {
+        createXmlInConfigBaseForAppbase();
+        doTestDeployment(true, false, false,
+                LifecycleState.FAILED, XML_COOKIE_NAME, true, false, false);
+    }
+
+    @Test
+    public void testDeploymentXmlTFT() throws Exception {
+        createXmlInConfigBaseForAppbase();
+        doTestDeployment(true, false, true,
+                LifecycleState.FAILED, XML_COOKIE_NAME, true, false, false);
+    }
+
+    @Test
+    public void testDeploymentXmlTTF() throws Exception {
+        createXmlInConfigBaseForAppbase();
+        doTestDeployment(true, true, false,
+                LifecycleState.FAILED, XML_COOKIE_NAME, true, false, false);
+    }
+
+    @Test
+    public void testDeploymentXmlTTT() throws Exception {
+        createXmlInConfigBaseForAppbase();
+        doTestDeployment(true, true, true,
+                LifecycleState.FAILED, XML_COOKIE_NAME, true, false, false);
+    }
+
+
+    /*
+     * Expected behaviour for deployment of an XML file that points to an
+     * external WAR.
+     * deployXML  copyXML  unpackWARs      XML  WAR  DIR
+     *    Y/N       Y/N        Y            Y    N    Y
+     *    Y/N       Y/N        N            Y    N    N
+     *
+     * Notes: No WAR file is present in the appBase because it is an external
+     *        WAR.
+     *        Any context.xml file embedded in the external WAR file is ignored.
+     */
+    @Test
+    public void testDeploymentXmlExternalWarXmlFFF() throws Exception {
+        File war = createWar(WAR_XML_SOURCE, false);
+        createXmlInConfigBaseForExternal(war);
+        doTestDeployment(false, false, false,
+                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
+    }
+
+    @Test
+    public void testDeploymentXmlExternalWarXmlFFT() throws Exception {
+        File war = createWar(WAR_XML_SOURCE, false);
+        createXmlInConfigBaseForExternal(war);
+        doTestDeployment(false, false, true,
+                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, true);
+    }
+
+    @Test
+    public void testDeploymentXmlExternalWarXmlFTF() throws Exception {
+        File war = createWar(WAR_XML_SOURCE, false);
+        createXmlInConfigBaseForExternal(war);
+        doTestDeployment(false, true, false,
+                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
+    }
+
+    @Test
+    public void testDeploymentXmlExternalWarXmlFTT() throws Exception {
+        File war = createWar(WAR_XML_SOURCE, false);
+        createXmlInConfigBaseForExternal(war);
+        doTestDeployment(false, true, true,
+                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, true);
+    }
+
+    @Test
+    public void testDeploymentXmlExternalWarXmlTFF() throws Exception {
+        File war = createWar(WAR_XML_SOURCE, false);
+        createXmlInConfigBaseForExternal(war);
+        doTestDeployment(true, false, false,
+                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
+    }
+
+    @Test
+    public void testDeploymentXmlExternalWarXmlTFT() throws Exception {
+        File war = createWar(WAR_XML_SOURCE, false);
+        createXmlInConfigBaseForExternal(war);
+        doTestDeployment(true, false, true,
+                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, true);
+    }
+
+    @Test
+    public void testDeploymentXmlExternalWarXmlTTF() throws Exception {
+        File war = createWar(WAR_XML_SOURCE, false);
+        createXmlInConfigBaseForExternal(war);
+        doTestDeployment(true, true, false,
+                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
+    }
+
+    @Test
+    public void testDeploymentXmlExternalWarXmlTTT() throws Exception {
+        File war = createWar(WAR_XML_SOURCE, false);
+        createXmlInConfigBaseForExternal(war);
+        doTestDeployment(true, true, true,
+                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, true);
+    }
+
+
+    /*
+     * Expected behaviour for deployment of an XML file that points to an
+     * external DIR.
+     * deployXML  copyXML  unpackWARs      XML  WAR  DIR
+     *    Y/N       Y/N       Y/N           Y    N    N
+     *
+     * Notes: Any context.xml file embedded in the external DIR file is ignored.
+     */
+    @Test
+    public void testDeploymentXmlExternalDirXmlFFF() throws Exception {
+        File dir = createDirInExternal(true);
+        createXmlInConfigBaseForExternal(dir);
+        doTestDeployment(false, false, false,
+                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
+    }
+
+    @Test
+    public void testDeploymentXmlExternalDirXmlFFT() throws Exception {
+        File dir = createDirInExternal(true);
+        createXmlInConfigBaseForExternal(dir);
+        doTestDeployment(false, false, true,
+                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
+    }
+
+    @Test
+    public void testDeploymentXmlExternalDirXmlFTF() throws Exception {
+        File dir = createDirInExternal(true);
+        createXmlInConfigBaseForExternal(dir);
+        doTestDeployment(false, true, false,
+                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
+    }
+
+    @Test
+    public void testDeploymentXmlExternalDirXmlFTT() throws Exception {
+        File dir = createDirInExternal(true);
+        createXmlInConfigBaseForExternal(dir);
+        doTestDeployment(false, true, true,
+                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
+    }
+
+    @Test
+    public void testDeploymentXmlExternalDirXmlTFF() throws Exception {
+        File dir = createDirInExternal(true);
+        createXmlInConfigBaseForExternal(dir);
+        doTestDeployment(true, false, false,
+                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
+    }
+
+    @Test
+    public void testDeploymentXmlExternalDirXmlTFT() throws Exception {
+        File dir = createDirInExternal(true);
+        createXmlInConfigBaseForExternal(dir);
+        doTestDeployment(true, false, true,
+                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
+    }
+
+    @Test
+    public void testDeploymentXmlExternalDirXmlTTF() throws Exception {
+        File dir = createDirInExternal(true);
+        createXmlInConfigBaseForExternal(dir);
+        doTestDeployment(true, true, false,
+                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
+    }
+
+    @Test
+    public void testDeploymentXmlExternalDirXmlTTT() throws Exception {
+        File dir = createDirInExternal(true);
+        createXmlInConfigBaseForExternal(dir);
+        doTestDeployment(true, true, true,
+                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
+    }
+
+
+    /*
+     * Expected behaviour for deployment of a WAR with an embedded XML file.
+     * deployXML  copyXML  unpackWARs      XML  WAR  DIR
+     *     N        Y/N        N            N    Y    N
+     *     N        Y/N        Y            N    Y    Y
+     *     Y         N         N            N    Y    N
+     *     Y         N         Y            N    Y    Y
+     *     Y         Y         N            Y    Y    N
+     *     Y         Y         Y            Y    Y    Y
+     */
+    @Test
+    public void testDeploymentWarXmlFFF() throws Exception {
+        createWar(WAR_XML_SOURCE, true);
+        doTestDeployment(false, false, false,
+                LifecycleState.FAILED, null, false, true, false);
+    }
+
+    @Test
+    public void testDeploymentWarXmlFFT() throws Exception {
+        createWar(WAR_XML_SOURCE, true);
+        doTestDeployment(false, false, true,
+                LifecycleState.FAILED, null, false, true, true);
+    }
+
+    @Test
+    public void testDeploymentWarXmlFTF() throws Exception {
+        createWar(WAR_XML_SOURCE, true);
+        doTestDeployment(false, true, false,
+                LifecycleState.FAILED, null, false, true, false);
+    }
+
+    @Test
+    public void testDeploymentWarXmlFTT() throws Exception {
+        createWar(WAR_XML_SOURCE, true);
+        doTestDeployment(false, true, true,
+                LifecycleState.FAILED, null, false, true, true);
+    }
+
+    @Test
+    public void testDeploymentWarXmlTFF() throws Exception {
+        createWar(WAR_XML_SOURCE, true);
+        doTestDeployment(true, false, false,
+                LifecycleState.STARTED, WAR_COOKIE_NAME, false, true, false);
+    }
+
+    @Test
+    public void testDeploymentWarXmlTFT() throws Exception {
+        createWar(WAR_XML_SOURCE, true);
+        doTestDeployment(true, false, true,
+                LifecycleState.STARTED, WAR_COOKIE_NAME, false, true, true);
+    }
+
+    @Test
+    public void testDeploymentWarXmlTTF() throws Exception {
+        createWar(WAR_XML_SOURCE, true);
+        doTestDeployment(true, true, false,
+                LifecycleState.STARTED, WAR_COOKIE_NAME, true, true, false);
+    }
+
+    @Test
+    public void testDeploymentWarXmlTTT() throws Exception {
+        createWar(WAR_XML_SOURCE, true);
+        doTestDeployment(true, true, true,
+                LifecycleState.STARTED, WAR_COOKIE_NAME, true, true, true);
+    }
+
+
+    /*
+     * Expected behaviour for deployment of a WAR without an embedded XML file.
+     * deployXML  copyXML  unpackWARs      XML  WAR  DIR
+     *    Y/N       Y/N        N            N    Y    N
+     *    Y/N       Y/N        Y            N    Y    Y
+     */
+    @Test
+    public void testDeploymentWarFFF() throws Exception {
+        createWar(WAR_SOURCE, true);
+        doTestDeployment(false, false, false,
+                LifecycleState.STARTED, null, false, true, false);
+    }
+
+    @Test
+    public void testDeploymentWarFFT() throws Exception {
+        createWar(WAR_SOURCE, true);
+        doTestDeployment(false, false, true,
+                LifecycleState.STARTED, null, false, true, true);
+    }
+
+    @Test
+    public void testDeploymentWarFTF() throws Exception {
+        createWar(WAR_SOURCE, true);
+        doTestDeployment(false, true, false,
+                LifecycleState.STARTED, null, false, true, false);
+    }
+
+    @Test
+    public void testDeploymentWarFTT() throws Exception {
+        createWar(WAR_SOURCE, true);
+        doTestDeployment(false, true, true,
+                LifecycleState.STARTED, null, false, true, true);
+    }
+
+    @Test
+    public void testDeploymentWarTFF() throws Exception {
+        createWar(WAR_SOURCE, true);
+        doTestDeployment(true, false, false,
+                LifecycleState.STARTED, null, false, true, false);
+    }
+
+    @Test
+    public void testDeploymentWarTFT() throws Exception {
+        createWar(WAR_SOURCE, true);
+        doTestDeployment(true, false, true,
+                LifecycleState.STARTED, null, false, true, true);
+    }
+
+    @Test
+    public void testDeploymentWarTTF() throws Exception {
+        createWar(WAR_SOURCE, true);
+        doTestDeployment(true, true, false,
+                LifecycleState.STARTED, null, false, true, false);
+    }
+
+    @Test
+    public void testDeploymentWarTTT() throws Exception {
+        createWar(WAR_SOURCE, true);
+        doTestDeployment(true, true, true,
+                LifecycleState.STARTED, null, false, true, true);
+    }
+
+
+    /*
+     * Expected behaviour for deployment of a DIR with an embedded XML file.
+     * deployXML  copyXML  unpackWARs      XML  WAR  DIR
+     *     N        Y/N       Y/N           N    N    Y
+     *     Y         N        Y/N           N    N    Y
+     *     Y         Y        Y/N           Y    N    Y
+     */
+    @Test
+    public void testDeploymentDirXmlFFF() throws Exception {
+        createDirInAppbase(true);
+        doTestDeployment(false, false, false,
+                LifecycleState.FAILED, null, false, false, true);
+    }
+
+    @Test
+    public void testDeploymentDirXmlFFT() throws Exception {
+        createDirInAppbase(true);
+        doTestDeployment(false, false, true,
+                LifecycleState.FAILED, null, false, false, true);
+    }
+
+    @Test
+    public void testDeploymentDirXmlFTF() throws Exception {
+        createDirInAppbase(true);
+        doTestDeployment(false, true, false,
+                LifecycleState.FAILED, null, false, false, true);
+    }
+
+    @Test
+    public void testDeploymentDirXmlFTT() throws Exception {
+        createDirInAppbase(true);
+        doTestDeployment(false, true, true,
+                LifecycleState.FAILED, null, false, false, true);
+    }
+
+    @Test
+    public void testDeploymentDirXmlTFF() throws Exception {
+        createDirInAppbase(true);
+        doTestDeployment(true, false, false,
+                LifecycleState.STARTED, DIR_COOKIE_NAME, false, false, true);
+    }
+
+    @Test
+    public void testDeploymentDirXmlTFT() throws Exception {
+        createDirInAppbase(true);
+        doTestDeployment(true, false, true,
+                LifecycleState.STARTED, DIR_COOKIE_NAME, false, false, true);
+    }
+
+    @Test
+    public void testDeploymentDirXmlTTF() throws Exception {
+        createDirInAppbase(true);
+        doTestDeployment(true, true, false,
+                LifecycleState.STARTED, DIR_COOKIE_NAME, true, false, true);
+    }
+
+    @Test
+    public void testDeploymentDirXmlTTT() throws Exception {
+        createDirInAppbase(true);
+        doTestDeployment(true, true, true,
+                LifecycleState.STARTED, DIR_COOKIE_NAME, true, false, true);
+    }
+
+
+    /*
+     * Expected behaviour for deployment of a DIR without an embedded XML file.
+     * deployXML  copyXML  unpackWARs      XML  WAR  DIR
+     *    Y/N       Y/N       Y/N           N    N    Y
+     */
+    @Test
+    public void testDeploymentDirFFF() throws Exception {
+        createDirInAppbase(false);
+        doTestDeployment(false, false, false,
+                LifecycleState.STARTED, null, false, false, true);
+    }
+
+    @Test
+    public void testDeploymentDirFFT() throws Exception {
+        createDirInAppbase(false);
+        doTestDeployment(false, false, true,
+                LifecycleState.STARTED, null, false, false, true);
+    }
+
+    @Test
+    public void testDeploymentDirFTF() throws Exception {
+        createDirInAppbase(false);
+        doTestDeployment(false, true, false,
+                LifecycleState.STARTED, null, false, false, true);
+    }
+
+    @Test
+    public void testDeploymentDirFTT() throws Exception {
+        createDirInAppbase(false);
+        doTestDeployment(false, true, true,
+                LifecycleState.STARTED, null, false, false, true);
+    }
+
+    @Test
+    public void testDeploymentDirTFF() throws Exception {
+        createDirInAppbase(false);
+        doTestDeployment(true, false, false,
+                LifecycleState.STARTED, null, false, false, true);
+    }
+
+    @Test
+    public void testDeploymentDirTFT() throws Exception {
+        createDirInAppbase(false);
+        doTestDeployment(true, false, true,
+                LifecycleState.STARTED, null, false, false, true);
+    }
+
+    @Test
+    public void testDeploymentDirTTF() throws Exception {
+        createDirInAppbase(false);
+        doTestDeployment(true, true, false,
+                LifecycleState.STARTED, null, false, false, true);
+    }
+
+    @Test
+    public void testDeploymentDirTTT() throws Exception {
+        createDirInAppbase(false);
+        doTestDeployment(true, true, true,
+                LifecycleState.STARTED, null, false, false, true);
+    }
+
+    private void doTestDeployment(boolean deployXML, boolean copyXML,
+            boolean unpackWARs, LifecycleState resultState, String cookieName,
+            boolean resultXml, boolean resultWar, boolean resultDir)
+            throws Exception {
+
+        Tomcat tomcat = getTomcatInstance();
+
+        // Start the instance
+        tomcat.start();
+
+        // Set the attributes
+        StandardHost host = (StandardHost) tomcat.getHost();
+        host.setDeployXML(deployXML);
+        host.setCopyXML(copyXML);
+        host.setUnpackWARs(unpackWARs);
+
+        // Trigger automatic deployment
+        host.backgroundProcess();
+
+        // Test the results
+        Context ctxt = (Context) tomcat.getHost().findChild(APP_NAME.getPath());
+        if (resultState == null) {
+            Assert.assertNull(ctxt);
+        } else {
+            Assert.assertNotNull(ctxt);
+            Assert.assertEquals(resultState, ctxt.getState());
+            Assert.assertEquals(cookieName, ctxt.getSessionCookieName());
+        }
+
+        File xml = new File(
+                host.getConfigBaseFile(), APP_NAME.getBaseName() + ".xml");
+        Assert.assertEquals(
+                Boolean.valueOf(resultXml), Boolean.valueOf(xml.isFile()));
+
+        File war = new File(
+                host.getAppBaseFile(), APP_NAME.getBaseName() + ".war");
+        Assert.assertEquals(
+                Boolean.valueOf(resultWar), Boolean.valueOf(war.isFile()));
+
+        File dir = new File(host.getAppBase(), APP_NAME.getBaseName());
+        Assert.assertEquals(
+                Boolean.valueOf(resultDir), Boolean.valueOf(dir.isDirectory()));
+    }
+
+
+    private File createDirInAppbase(boolean withXml) throws IOException {
+        File dir = new File(getTomcatInstance().getHost().getAppBaseFile(),
+                APP_NAME.getBaseName());
+        if (withXml) {
+            recursiveCopy(DIR_XML_SOURCE.toPath(), dir.toPath());
+        } else {
+            recursiveCopy(DIR_SOURCE.toPath(), dir.toPath());
+        }
+        return dir;
+    }
+
+    private File createDirInExternal(boolean withXml) throws IOException {
+        File ext = new File(external, "external" + ".war");
+        if (withXml) {
+            recursiveCopy(DIR_XML_SOURCE.toPath(), ext.toPath());
+        } else {
+            recursiveCopy(DIR_SOURCE.toPath(), ext.toPath());
+        }
+        return ext;
+    }
+
+    private File createWar(File src, boolean useAppbase) throws IOException {
+        File dest;
+        if (useAppbase) {
+            dest = new File(getTomcatInstance().getHost().getAppBaseFile(),
+                APP_NAME.getBaseName() + ".war");
+        } else {
+            dest = new File(external, "external" + ".war");
+        }
+        Files.copy(src.toPath(), dest.toPath());
+        // Make sure that HostConfig thinks the WAR has been modified.
+        Assert.assertTrue("Failed to set last modified for [" + dest + "]", dest.setLastModified(
+                System.currentTimeMillis() - 2 * HostConfig.FILE_MODIFICATION_RESOLUTION_MS));
+        return dest;
+    }
+
+    private File createXmlInConfigBaseForAppbase() throws IOException {
+        File xml = getXmlInConfigBaseForAppbase();
+        File parent = xml.getParentFile();
+        if (!parent.isDirectory()) {
+            Assert.assertTrue(parent.mkdirs());
+        }
+        Files.copy(XML_SOURCE.toPath(), xml.toPath());
+        // Make sure that HostConfig thinks the xml has been modified.
+        Assert.assertTrue("Failed to set last modified for [" + xml + "]", xml.setLastModified(
+                System.currentTimeMillis() - 2 * HostConfig.FILE_MODIFICATION_RESOLUTION_MS));
+        return xml;
+    }
+
+    private File getXmlInConfigBaseForAppbase() {
+        Host host = getTomcatInstance().getHost();
+        return new File(host.getConfigBaseFile(), APP_NAME + ".xml");
+    }
+
+    private File createXmlInConfigBaseForExternal(File ext) throws IOException {
+        return createXmlInConfigBaseForExternal(ext, false);
+    }
+
+    private File createXmlInConfigBaseForExternal(File ext, boolean antiLocking)
+            throws IOException {
+        File xml = new File(getTomcatInstance().getHost().getConfigBaseFile(),
+                APP_NAME + ".xml");
+        File parent = xml.getParentFile();
+        if (!parent.isDirectory()) {
+            Assert.assertTrue(parent.mkdirs());
+        }
+
+        try (FileOutputStream fos = new FileOutputStream(xml)) {
+            StringBuilder context = new StringBuilder();
+            context.append("<Context sessionCookieName=\"");
+            context.append(XML_COOKIE_NAME);
+            context.append("\" docBase=\"");
+            context.append(ext.getAbsolutePath());
+            if (antiLocking) {
+                context.append("\" antiResourceLocking=\"true");
+            }
+            context.append("\" />");
+            fos.write(context.toString().getBytes(StandardCharsets.ISO_8859_1));
+        }
+        // Make sure that HostConfig thinks the xml has been modified.
+        Assert.assertTrue("Failed to set last modified for [" + xml + "]", xml.setLastModified(
+                System.currentTimeMillis() - 2 * HostConfig.FILE_MODIFICATION_RESOLUTION_MS));
+        return xml;
+    }
+
+    public static class TesterContext extends StandardContext {
+        // No functional change
+    }
+}
diff --git a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeployment.java b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentC.java
similarity index 59%
rename from test/org/apache/catalina/startup/TestHostConfigAutomaticDeployment.java
rename to test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentC.java
index cfe5c46d84..0b2189f62f 100644
--- a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeployment.java
+++ b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentC.java
@@ -42,7 +42,7 @@ import org.apache.catalina.util.ContextName;
  * The purpose of this class is to test the automatic deployment features of the
  * {@link HostConfig} implementation.
  */
-public class TestHostConfigAutomaticDeployment extends TomcatBaseTest {
+public class TestHostConfigAutomaticDeploymentC extends TomcatBaseTest {
 
     private static final ContextName  APP_NAME = new ContextName("myapp", false);
     private static final File XML_SOURCE =
@@ -111,824 +111,6 @@ public class TestHostConfigAutomaticDeployment extends TomcatBaseTest {
     }
 
 
-    /*
-     * Expected behaviour for deployment of an XML file.
-     * deployXML  copyXML  unpackWARs      XML  WAR  DIR
-     *    Y/N       Y/N       Y/N           Y    N    N
-     *
-     * Note: Context will fail to start because no valid docBase is present.
-     */
-    @Test
-    public void testDeploymentXmlFFF() throws Exception {
-        createXmlInConfigBaseForAppbase();
-        doTestDeployment(false, false, false,
-                LifecycleState.FAILED, XML_COOKIE_NAME, true, false, false);
-    }
-
-    @Test
-    public void testDeploymentXmlFFT() throws Exception {
-        createXmlInConfigBaseForAppbase();
-        doTestDeployment(false, false, true,
-                LifecycleState.FAILED, XML_COOKIE_NAME, true, false, false);
-    }
-
-    @Test
-    public void testDeploymentXmlFTF() throws Exception {
-        createXmlInConfigBaseForAppbase();
-        doTestDeployment(false, true, false,
-                LifecycleState.FAILED, XML_COOKIE_NAME, true, false, false);
-    }
-
-    @Test
-    public void testDeploymentXmlFTT() throws Exception {
-        createXmlInConfigBaseForAppbase();
-        doTestDeployment(false, true, true,
-                LifecycleState.FAILED, XML_COOKIE_NAME, true, false, false);
-    }
-
-    @Test
-    public void testDeploymentXmlTFF() throws Exception {
-        createXmlInConfigBaseForAppbase();
-        doTestDeployment(true, false, false,
-                LifecycleState.FAILED, XML_COOKIE_NAME, true, false, false);
-    }
-
-    @Test
-    public void testDeploymentXmlTFT() throws Exception {
-        createXmlInConfigBaseForAppbase();
-        doTestDeployment(true, false, true,
-                LifecycleState.FAILED, XML_COOKIE_NAME, true, false, false);
-    }
-
-    @Test
-    public void testDeploymentXmlTTF() throws Exception {
-        createXmlInConfigBaseForAppbase();
-        doTestDeployment(true, true, false,
-                LifecycleState.FAILED, XML_COOKIE_NAME, true, false, false);
-    }
-
-    @Test
-    public void testDeploymentXmlTTT() throws Exception {
-        createXmlInConfigBaseForAppbase();
-        doTestDeployment(true, true, true,
-                LifecycleState.FAILED, XML_COOKIE_NAME, true, false, false);
-    }
-
-
-    /*
-     * Expected behaviour for deployment of an XML file that points to an
-     * external WAR.
-     * deployXML  copyXML  unpackWARs      XML  WAR  DIR
-     *    Y/N       Y/N        Y            Y    N    Y
-     *    Y/N       Y/N        N            Y    N    N
-     *
-     * Notes: No WAR file is present in the appBase because it is an external
-     *        WAR.
-     *        Any context.xml file embedded in the external WAR file is ignored.
-     */
-    @Test
-    public void testDeploymentXmlExternalWarXmlFFF() throws Exception {
-        File war = createWar(WAR_XML_SOURCE, false);
-        createXmlInConfigBaseForExternal(war);
-        doTestDeployment(false, false, false,
-                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
-    }
-
-    @Test
-    public void testDeploymentXmlExternalWarXmlFFT() throws Exception {
-        File war = createWar(WAR_XML_SOURCE, false);
-        createXmlInConfigBaseForExternal(war);
-        doTestDeployment(false, false, true,
-                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, true);
-    }
-
-    @Test
-    public void testDeploymentXmlExternalWarXmlFTF() throws Exception {
-        File war = createWar(WAR_XML_SOURCE, false);
-        createXmlInConfigBaseForExternal(war);
-        doTestDeployment(false, true, false,
-                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
-    }
-
-    @Test
-    public void testDeploymentXmlExternalWarXmlFTT() throws Exception {
-        File war = createWar(WAR_XML_SOURCE, false);
-        createXmlInConfigBaseForExternal(war);
-        doTestDeployment(false, true, true,
-                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, true);
-    }
-
-    @Test
-    public void testDeploymentXmlExternalWarXmlTFF() throws Exception {
-        File war = createWar(WAR_XML_SOURCE, false);
-        createXmlInConfigBaseForExternal(war);
-        doTestDeployment(true, false, false,
-                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
-    }
-
-    @Test
-    public void testDeploymentXmlExternalWarXmlTFT() throws Exception {
-        File war = createWar(WAR_XML_SOURCE, false);
-        createXmlInConfigBaseForExternal(war);
-        doTestDeployment(true, false, true,
-                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, true);
-    }
-
-    @Test
-    public void testDeploymentXmlExternalWarXmlTTF() throws Exception {
-        File war = createWar(WAR_XML_SOURCE, false);
-        createXmlInConfigBaseForExternal(war);
-        doTestDeployment(true, true, false,
-                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
-    }
-
-    @Test
-    public void testDeploymentXmlExternalWarXmlTTT() throws Exception {
-        File war = createWar(WAR_XML_SOURCE, false);
-        createXmlInConfigBaseForExternal(war);
-        doTestDeployment(true, true, true,
-                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, true);
-    }
-
-
-    /*
-     * Expected behaviour for deployment of an XML file that points to an
-     * external DIR.
-     * deployXML  copyXML  unpackWARs      XML  WAR  DIR
-     *    Y/N       Y/N       Y/N           Y    N    N
-     *
-     * Notes: Any context.xml file embedded in the external DIR file is ignored.
-     */
-    @Test
-    public void testDeploymentXmlExternalDirXmlFFF() throws Exception {
-        File dir = createDirInExternal(true);
-        createXmlInConfigBaseForExternal(dir);
-        doTestDeployment(false, false, false,
-                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
-    }
-
-    @Test
-    public void testDeploymentXmlExternalDirXmlFFT() throws Exception {
-        File dir = createDirInExternal(true);
-        createXmlInConfigBaseForExternal(dir);
-        doTestDeployment(false, false, true,
-                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
-    }
-
-    @Test
-    public void testDeploymentXmlExternalDirXmlFTF() throws Exception {
-        File dir = createDirInExternal(true);
-        createXmlInConfigBaseForExternal(dir);
-        doTestDeployment(false, true, false,
-                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
-    }
-
-    @Test
-    public void testDeploymentXmlExternalDirXmlFTT() throws Exception {
-        File dir = createDirInExternal(true);
-        createXmlInConfigBaseForExternal(dir);
-        doTestDeployment(false, true, true,
-                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
-    }
-
-    @Test
-    public void testDeploymentXmlExternalDirXmlTFF() throws Exception {
-        File dir = createDirInExternal(true);
-        createXmlInConfigBaseForExternal(dir);
-        doTestDeployment(true, false, false,
-                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
-    }
-
-    @Test
-    public void testDeploymentXmlExternalDirXmlTFT() throws Exception {
-        File dir = createDirInExternal(true);
-        createXmlInConfigBaseForExternal(dir);
-        doTestDeployment(true, false, true,
-                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
-    }
-
-    @Test
-    public void testDeploymentXmlExternalDirXmlTTF() throws Exception {
-        File dir = createDirInExternal(true);
-        createXmlInConfigBaseForExternal(dir);
-        doTestDeployment(true, true, false,
-                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
-    }
-
-    @Test
-    public void testDeploymentXmlExternalDirXmlTTT() throws Exception {
-        File dir = createDirInExternal(true);
-        createXmlInConfigBaseForExternal(dir);
-        doTestDeployment(true, true, true,
-                LifecycleState.STARTED, XML_COOKIE_NAME, true, false, false);
-    }
-
-
-    /*
-     * Expected behaviour for deployment of a WAR with an embedded XML file.
-     * deployXML  copyXML  unpackWARs      XML  WAR  DIR
-     *     N        Y/N        N            N    Y    N
-     *     N        Y/N        Y            N    Y    Y
-     *     Y         N         N            N    Y    N
-     *     Y         N         Y            N    Y    Y
-     *     Y         Y         N            Y    Y    N
-     *     Y         Y         Y            Y    Y    Y
-     */
-    @Test
-    public void testDeploymentWarXmlFFF() throws Exception {
-        createWar(WAR_XML_SOURCE, true);
-        doTestDeployment(false, false, false,
-                LifecycleState.FAILED, null, false, true, false);
-    }
-
-    @Test
-    public void testDeploymentWarXmlFFT() throws Exception {
-        createWar(WAR_XML_SOURCE, true);
-        doTestDeployment(false, false, true,
-                LifecycleState.FAILED, null, false, true, true);
-    }
-
-    @Test
-    public void testDeploymentWarXmlFTF() throws Exception {
-        createWar(WAR_XML_SOURCE, true);
-        doTestDeployment(false, true, false,
-                LifecycleState.FAILED, null, false, true, false);
-    }
-
-    @Test
-    public void testDeploymentWarXmlFTT() throws Exception {
-        createWar(WAR_XML_SOURCE, true);
-        doTestDeployment(false, true, true,
-                LifecycleState.FAILED, null, false, true, true);
-    }
-
-    @Test
-    public void testDeploymentWarXmlTFF() throws Exception {
-        createWar(WAR_XML_SOURCE, true);
-        doTestDeployment(true, false, false,
-                LifecycleState.STARTED, WAR_COOKIE_NAME, false, true, false);
-    }
-
-    @Test
-    public void testDeploymentWarXmlTFT() throws Exception {
-        createWar(WAR_XML_SOURCE, true);
-        doTestDeployment(true, false, true,
-                LifecycleState.STARTED, WAR_COOKIE_NAME, false, true, true);
-    }
-
-    @Test
-    public void testDeploymentWarXmlTTF() throws Exception {
-        createWar(WAR_XML_SOURCE, true);
-        doTestDeployment(true, true, false,
-                LifecycleState.STARTED, WAR_COOKIE_NAME, true, true, false);
-    }
-
-    @Test
-    public void testDeploymentWarXmlTTT() throws Exception {
-        createWar(WAR_XML_SOURCE, true);
-        doTestDeployment(true, true, true,
-                LifecycleState.STARTED, WAR_COOKIE_NAME, true, true, true);
-    }
-
-
-    /*
-     * Expected behaviour for deployment of a WAR without an embedded XML file.
-     * deployXML  copyXML  unpackWARs      XML  WAR  DIR
-     *    Y/N       Y/N        N            N    Y    N
-     *    Y/N       Y/N        Y            N    Y    Y
-     */
-    @Test
-    public void testDeploymentWarFFF() throws Exception {
-        createWar(WAR_SOURCE, true);
-        doTestDeployment(false, false, false,
-                LifecycleState.STARTED, null, false, true, false);
-    }
-
-    @Test
-    public void testDeploymentWarFFT() throws Exception {
-        createWar(WAR_SOURCE, true);
-        doTestDeployment(false, false, true,
-                LifecycleState.STARTED, null, false, true, true);
-    }
-
-    @Test
-    public void testDeploymentWarFTF() throws Exception {
-        createWar(WAR_SOURCE, true);
-        doTestDeployment(false, true, false,
-                LifecycleState.STARTED, null, false, true, false);
-    }
-
-    @Test
-    public void testDeploymentWarFTT() throws Exception {
-        createWar(WAR_SOURCE, true);
-        doTestDeployment(false, true, true,
-                LifecycleState.STARTED, null, false, true, true);
-    }
-
-    @Test
-    public void testDeploymentWarTFF() throws Exception {
-        createWar(WAR_SOURCE, true);
-        doTestDeployment(true, false, false,
-                LifecycleState.STARTED, null, false, true, false);
-    }
-
-    @Test
-    public void testDeploymentWarTFT() throws Exception {
-        createWar(WAR_SOURCE, true);
-        doTestDeployment(true, false, true,
-                LifecycleState.STARTED, null, false, true, true);
-    }
-
-    @Test
-    public void testDeploymentWarTTF() throws Exception {
-        createWar(WAR_SOURCE, true);
-        doTestDeployment(true, true, false,
-                LifecycleState.STARTED, null, false, true, false);
-    }
-
-    @Test
-    public void testDeploymentWarTTT() throws Exception {
-        createWar(WAR_SOURCE, true);
-        doTestDeployment(true, true, true,
-                LifecycleState.STARTED, null, false, true, true);
-    }
-
-
-    /*
-     * Expected behaviour for deployment of a DIR with an embedded XML file.
-     * deployXML  copyXML  unpackWARs      XML  WAR  DIR
-     *     N        Y/N       Y/N           N    N    Y
-     *     Y         N        Y/N           N    N    Y
-     *     Y         Y        Y/N           Y    N    Y
-     */
-    @Test
-    public void testDeploymentDirXmlFFF() throws Exception {
-        createDirInAppbase(true);
-        doTestDeployment(false, false, false,
-                LifecycleState.FAILED, null, false, false, true);
-    }
-
-    @Test
-    public void testDeploymentDirXmlFFT() throws Exception {
-        createDirInAppbase(true);
-        doTestDeployment(false, false, true,
-                LifecycleState.FAILED, null, false, false, true);
-    }
-
-    @Test
-    public void testDeploymentDirXmlFTF() throws Exception {
-        createDirInAppbase(true);
-        doTestDeployment(false, true, false,
-                LifecycleState.FAILED, null, false, false, true);
-    }
-
-    @Test
-    public void testDeploymentDirXmlFTT() throws Exception {
-        createDirInAppbase(true);
-        doTestDeployment(false, true, true,
-                LifecycleState.FAILED, null, false, false, true);
-    }
-
-    @Test
-    public void testDeploymentDirXmlTFF() throws Exception {
-        createDirInAppbase(true);
-        doTestDeployment(true, false, false,
-                LifecycleState.STARTED, DIR_COOKIE_NAME, false, false, true);
-    }
-
-    @Test
-    public void testDeploymentDirXmlTFT() throws Exception {
-        createDirInAppbase(true);
-        doTestDeployment(true, false, true,
-                LifecycleState.STARTED, DIR_COOKIE_NAME, false, false, true);
-    }
-
-    @Test
-    public void testDeploymentDirXmlTTF() throws Exception {
-        createDirInAppbase(true);
-        doTestDeployment(true, true, false,
-                LifecycleState.STARTED, DIR_COOKIE_NAME, true, false, true);
-    }
-
-    @Test
-    public void testDeploymentDirXmlTTT() throws Exception {
-        createDirInAppbase(true);
-        doTestDeployment(true, true, true,
-                LifecycleState.STARTED, DIR_COOKIE_NAME, true, false, true);
-    }
-
-
-    /*
-     * Expected behaviour for deployment of a DIR without an embedded XML file.
-     * deployXML  copyXML  unpackWARs      XML  WAR  DIR
-     *    Y/N       Y/N       Y/N           N    N    Y
-     */
-    @Test
-    public void testDeploymentDirFFF() throws Exception {
-        createDirInAppbase(false);
-        doTestDeployment(false, false, false,
-                LifecycleState.STARTED, null, false, false, true);
-    }
-
-    @Test
-    public void testDeploymentDirFFT() throws Exception {
-        createDirInAppbase(false);
-        doTestDeployment(false, false, true,
-                LifecycleState.STARTED, null, false, false, true);
-    }
-
-    @Test
-    public void testDeploymentDirFTF() throws Exception {
-        createDirInAppbase(false);
-        doTestDeployment(false, true, false,
-                LifecycleState.STARTED, null, false, false, true);
-    }
-
-    @Test
-    public void testDeploymentDirFTT() throws Exception {
-        createDirInAppbase(false);
-        doTestDeployment(false, true, true,
-                LifecycleState.STARTED, null, false, false, true);
-    }
-
-    @Test
-    public void testDeploymentDirTFF() throws Exception {
-        createDirInAppbase(false);
-        doTestDeployment(true, false, false,
-                LifecycleState.STARTED, null, false, false, true);
-    }
-
-    @Test
-    public void testDeploymentDirTFT() throws Exception {
-        createDirInAppbase(false);
-        doTestDeployment(true, false, true,
-                LifecycleState.STARTED, null, false, false, true);
-    }
-
-    @Test
-    public void testDeploymentDirTTF() throws Exception {
-        createDirInAppbase(false);
-        doTestDeployment(true, true, false,
-                LifecycleState.STARTED, null, false, false, true);
-    }
-
-    @Test
-    public void testDeploymentDirTTT() throws Exception {
-        createDirInAppbase(false);
-        doTestDeployment(true, true, true,
-                LifecycleState.STARTED, null, false, false, true);
-    }
-
-    private void doTestDeployment(boolean deployXML, boolean copyXML,
-            boolean unpackWARs, LifecycleState resultState, String cookieName,
-            boolean resultXml, boolean resultWar, boolean resultDir)
-            throws Exception {
-
-        Tomcat tomcat = getTomcatInstance();
-
-        // Start the instance
-        tomcat.start();
-
-        // Set the attributes
-        StandardHost host = (StandardHost) tomcat.getHost();
-        host.setDeployXML(deployXML);
-        host.setCopyXML(copyXML);
-        host.setUnpackWARs(unpackWARs);
-
-        // Trigger automatic deployment
-        host.backgroundProcess();
-
-        // Test the results
-        Context ctxt = (Context) tomcat.getHost().findChild(APP_NAME.getPath());
-        if (resultState == null) {
-            Assert.assertNull(ctxt);
-        } else {
-            Assert.assertNotNull(ctxt);
-            Assert.assertEquals(resultState, ctxt.getState());
-            Assert.assertEquals(cookieName, ctxt.getSessionCookieName());
-        }
-
-        File xml = new File(
-                host.getConfigBaseFile(), APP_NAME.getBaseName() + ".xml");
-        Assert.assertEquals(
-                Boolean.valueOf(resultXml), Boolean.valueOf(xml.isFile()));
-
-        File war = new File(
-                host.getAppBaseFile(), APP_NAME.getBaseName() + ".war");
-        Assert.assertEquals(
-                Boolean.valueOf(resultWar), Boolean.valueOf(war.isFile()));
-
-        File dir = new File(host.getAppBase(), APP_NAME.getBaseName());
-        Assert.assertEquals(
-                Boolean.valueOf(resultDir), Boolean.valueOf(dir.isDirectory()));
-    }
-
-
-    /*
-     * Expected behaviour for the deletion of files.
-     *
-     * Artifacts present     Artifact     Artifacts remaining
-     *  XML  WAR  EXT  DIR    Removed     XML  WAR  EXT DIR    Notes
-     *   N    N    N    Y       DIR        -    -    -   N
-     *   N    Y    N    N       WAR        -    N    -   -
-     *   N    Y    N    Y       DIR        -    Y    -   R     1
-     *   N    Y    N    Y       WAR        -    N    -   N
-     *   Y    N    N    N       XML        N    -    -   -
-     *   Y    N    N    Y       DIR        N    -    -   N
-     *   Y    N    N    Y       XML        R    -    -   Y     2
-     *   Y    N    Y    N       EXT        Y    -    N   -
-     *   Y    N    Y    N       XML        N    -    Y   -
-     *   Y    N    Y    Y       DIR        R    -    Y   R     1,2
-     *   Y    N    Y    Y       EXT        Y    -    N   N
-     *   Y    N    Y    Y       XML        N    -    Y   N
-     *   Y    Y    N    N       WAR        N    N    -   -
-     *   Y    Y    N    N       XML        N    N    -   -
-     *   Y    Y    N    Y       DIR        R    Y    -   R     1,2
-     *   Y    Y    N    Y       WAR        N    N    -   -
-     *   Y    Y    N    Y       XML        R    Y    -   Y
-     *
-     * Notes: 1. The DIR will be re-created since unpackWARs is true.
-     *        2. The XML will be extracted from the WAR/DIR if deployXML and
-     *           copyXML are true.
-     */
-    @Test
-    public void testDeleteDirRemoveDir() throws Exception {
-        doTestDelete(false, false, false, false, true, DIR, false, false, false,
-                null);
-    }
-
-    @Test
-    public void testDeleteWarRemoveWar() throws Exception {
-        doTestDelete(false, false, false, true, false, WAR, false, false, false,
-                null);
-    }
-
-    @Test
-    public void testDeleteWarDirRemoveDir() throws Exception {
-        doTestDelete(false, false, false, true, true, DIR, false, true, true,
-                WAR_COOKIE_NAME);
-    }
-
-    @Test
-    public void testDeleteWarDirRemoveWar() throws Exception {
-        doTestDelete(false, false, false, true, true, WAR, false, false, false,
-                null);
-    }
-
-    @Test
-    public void testDeleteXmlRemoveXml() throws Exception {
-        doTestDelete(true, false, false, false, false, XML, false, false, false,
-                null);
-    }
-
-    @Test
-    public void testDeleteXmlDirRemoveDir() throws Exception {
-        doTestDelete(true, false, false, false, true, DIR, false, false, false,
-                null);
-    }
-
-    @Test
-    public void testDeleteXmlDirRemoveXml() throws Exception {
-        doTestDelete(true, false, false, false, true, XML, false, false, true,
-                DIR_COOKIE_NAME);
-    }
-
-    @Test
-    public void testDeleteXmlDirRemoveXmlCopyXml() throws Exception {
-        ((StandardHost) getTomcatInstance().getHost()).setCopyXML(true);
-        doTestDelete(true, false, false, false, true, XML, true, false, true,
-                DIR_COOKIE_NAME);
-    }
-
-    @Test
-    public void testDeleteXmlExtwarRemoveExt() throws Exception {
-        doTestDelete(true, true, false, false, false, EXT, true, false, false,
-                XML_COOKIE_NAME);
-    }
-
-    @Test
-    public void testDeleteXmlExtdirRemoveExt() throws Exception {
-        doTestDelete(true, false, true, false, false, EXT, true, false, false,
-                XML_COOKIE_NAME);
-    }
-
-    @Test
-    public void testDeleteXmlExtwarRemoveXml() throws Exception {
-        doTestDelete(true, true, false, false, false, XML, false, false, false,
-                null);
-    }
-
-    @Test
-    public void testDeleteXmlExtdirRemoveXml() throws Exception {
-        doTestDelete(true, false, true, false, false, XML, false, false, false,
-                null);
-    }
-
-    @Test
-    public void testDeleteXmlExtwarDirRemoveDir() throws Exception {
-        doTestDelete(true, true, false, false, true, DIR, true, false, true,
-                XML_COOKIE_NAME);
-    }
-
-    @Test
-    public void testDeleteXmlExtwarDirRemoveExt() throws Exception {
-        doTestDelete(true, true, false, false, true, EXT, true, false, false,
-                XML_COOKIE_NAME);
-    }
-
-    @Test
-    public void testDeleteXmlExtwarDirRemoveXml() throws Exception {
-        doTestDelete(true, true, false, false, true, XML, false, false, false,
-                null);
-    }
-
-    @Test
-    public void testDeleteXmlWarRemoveWar() throws Exception {
-        doTestDelete(true, false, false, true, false, WAR, false, false, false,
-                null);
-    }
-
-    @Test
-    public void testDeleteXmlWarRemoveXml() throws Exception {
-        doTestDelete(true, false, false, true, false, XML, false, true, false,
-                WAR_COOKIE_NAME);
-    }
-
-    @Test
-    public void testDeleteXmlWarRemoveXmlCopyXml() throws Exception {
-        ((StandardHost) getTomcatInstance().getHost()).setCopyXML(true);
-        doTestDelete(true, false, false, true, false, XML, true, true, false,
-                WAR_COOKIE_NAME);
-    }
-
-    @Test
-    public void testDeleteXmlWarDirRemoveDir() throws Exception {
-        doTestDelete(true, false, false, true, true, DIR, false, true, true,
-                WAR_COOKIE_NAME);
-    }
-
-    @Test
-    public void testDeleteXmlWarDirRemoveDirCopyXml() throws Exception {
-        ((StandardHost) getTomcatInstance().getHost()).setCopyXML(true);
-        doTestDelete(true, false, false, true, true, DIR, true, true, true,
-                WAR_COOKIE_NAME);
-    }
-
-    @Test
-    public void testDeleteXmlWarDirRemoveWar() throws Exception {
-        doTestDelete(true, false, false, true, true, WAR, false, false, false,
-                null);
-    }
-
-    @Test
-    public void testDeleteXmlWarDirRemoveWarCopyXml() throws Exception {
-        ((StandardHost) getTomcatInstance().getHost()).setCopyXML(true);
-        doTestDelete(true, false, false, true, true, WAR, false, false, false,
-                null);
-    }
-
-    @Test
-    public void testDeleteXmlWarDirRemoveXml() throws Exception {
-        doTestDelete(true, false, false, true, true, XML, false, true, true,
-                DIR_COOKIE_NAME);
-    }
-
-    @Test
-    public void testDeleteXmlWarDirRemoveXmlCopyXml() throws Exception {
-        ((StandardHost) getTomcatInstance().getHost()).setCopyXML(true);
-        doTestDelete(true, false, false, true, true, XML, true, true, true,
-                WAR_COOKIE_NAME);
-    }
-
-    private void doTestDelete(boolean startXml, boolean startExternalWar,
-            boolean startExternalDir, boolean startWar, boolean startDir,
-            int toDelete, boolean resultXml, boolean resultWar,
-            boolean resultDir, String resultCookieName) throws Exception {
-
-        Tomcat tomcat = getTomcatInstance();
-        StandardHost host = (StandardHost) tomcat.getHost();
-
-        // Init
-        File xml = null;
-        File ext = null;
-        File war = null;
-        File dir = null;
-
-        if (startXml && !startExternalWar && !startExternalDir) {
-            xml = createXmlInConfigBaseForAppbase();
-        }
-        if (startExternalWar) {
-            ext = createWar(WAR_XML_SOURCE, false);
-            xml = createXmlInConfigBaseForExternal(ext);
-        }
-        if (startExternalDir) {
-            ext = createDirInExternal(true);
-            xml = createXmlInConfigBaseForExternal(ext);
-        }
-        if (startWar) {
-            war = createWar(WAR_XML_SOURCE, true);
-        }
-        if (startDir) {
-            dir = createDirInAppbase(true);
-        }
-
-        if ((startWar || startExternalWar) && !startDir) {
-            host.setUnpackWARs(false);
-        }
-
-        // Deploy the files we copied
-        tomcat.start();
-        host.backgroundProcess();
-
-        // Remove the specified file
-        switch (toDelete) {
-            case XML:
-                ExpandWar.delete(xml);
-                break;
-            case EXT:
-                ExpandWar.delete(ext);
-                break;
-            case WAR:
-                ExpandWar.delete(war);
-                break;
-            case DIR:
-                ExpandWar.delete(dir);
-                break;
-            default:
-                Assert.fail();
-        }
-
-        // Trigger an auto-deployment cycle
-        host.backgroundProcess();
-
-        Context ctxt = (Context) host.findChild(APP_NAME.getName());
-
-        // Check the results
-        // External WAR and DIR should only be deleted if the test is testing
-        // behaviour when the external resource is deleted
-        if (toDelete == EXT) {
-            if (ext == null) {
-                Assert.fail();
-            } else {
-                Assert.assertFalse(ext.exists());
-            }
-        } else {
-            if (startExternalWar) {
-                if (ext == null) {
-                    Assert.fail();
-                } else {
-                    Assert.assertTrue(ext.isFile());
-                }
-            }
-            if (startExternalDir) {
-                if (ext == null) {
-                    Assert.fail();
-                } else {
-                    Assert.assertTrue(ext.isDirectory());
-                }
-            }
-        }
-
-        if (resultXml) {
-            if (xml == null) {
-                Assert.fail();
-            } else {
-                Assert.assertTrue(xml.isFile());
-            }
-        }
-        if (resultWar) {
-            if (war == null) {
-                Assert.fail();
-            } else {
-                Assert.assertTrue(war.isFile());
-            }
-        }
-        if (resultDir) {
-            if (dir == null) {
-                Assert.fail();
-            } else {
-                Assert.assertTrue(dir.isDirectory());
-            }
-        }
-
-        if (!resultXml && (startExternalWar || startExternalDir)) {
-            Assert.assertNull(ctxt);
-        }
-        if (!resultWar && !resultDir) {
-            if (resultXml) {
-                Assert.assertNotNull(ctxt);
-                Assert.assertEquals(LifecycleState.FAILED, ctxt.getState());
-            } else {
-                Assert.assertNull(ctxt);
-            }
-        }
-
-        if (ctxt != null) {
-            Assert.assertEquals(resultCookieName, ctxt.getSessionCookieName());
-        }
-    }
-
-
     /*
      * Expected behaviour for modification of files.
      *


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org


(tomcat) 01/02: Differences are clear which a much shorter test

Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git

commit ec8f903f019b65bfe3a941a78bd39d09e254573f
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Mon Dec 4 14:01:29 2023 +0000

    Differences are clear which a much shorter test
---
 test/webapp/bug6nnnn/bug64872b-timeunit.jsp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/webapp/bug6nnnn/bug64872b-timeunit.jsp b/test/webapp/bug6nnnn/bug64872b-timeunit.jsp
index 679925f836..84256713b1 100644
--- a/test/webapp/bug6nnnn/bug64872b-timeunit.jsp
+++ b/test/webapp/bug6nnnn/bug64872b-timeunit.jsp
@@ -19,7 +19,7 @@
   <head><title>Bug 64872b TimeUnit test case</title></head>
   <body>
   <%
-  for (int i=0; i < 100000; i++) {
+  for (int i=0; i < 5000; i++) {
   %>
     <p>01 The value of foo is [<ts:tagTimeUnit foo="SECONDS" />]</p>
   <%


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org