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 2025/02/03 16:46:32 UTC
(tomcat) branch 11.0.x updated (14f25027c7 -> 0fdefcc1a6)
This is an automated email from the ASF dual-hosted git repository.
markt pushed a change to branch 11.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
from 14f25027c7 Fix BZ 69559 - Avoid 24 warning when not relevant
new bda90a6f6a Refactor into more, shorter tests to aid parallel test execution
new 0fdefcc1a6 Improvements to French translations. (remm)
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:
.../catalina/servlets/LocalStrings_fr.properties | 2 +
.../catalina/startup/LocalStrings_fr.properties | 1 +
... => HostConfigAutomaticDeploymentBaseTest.java} | 866 +++++++--------------
.../TestHostConfigAutomaticDeploymentA.java | 482 ------------
.../TestHostConfigAutomaticDeploymentAddition.java | 182 +++++
.../TestHostConfigAutomaticDeploymentB.java | 687 ----------------
...estHostConfigAutomaticDeploymentBrokenApp.java} | 22 +-
.../TestHostConfigAutomaticDeploymentC8.java | 504 ++++++++++++
...tConfigAutomaticDeploymentContextClassName.java | 62 ++
.../TestHostConfigAutomaticDeploymentCopyXML.java | 71 ++
.../TestHostConfigAutomaticDeploymentDeleteA.java | 62 ++
.../TestHostConfigAutomaticDeploymentDeleteB.java | 113 +++
.../TestHostConfigAutomaticDeploymentDeleteC.java | 101 +++
.../TestHostConfigAutomaticDeploymentDir.java | 89 +++
.../TestHostConfigAutomaticDeploymentDirXml.java | 91 +++
...tHostConfigAutomaticDeploymentModification.java | 167 ++++
...TestHostConfigAutomaticDeploymentUnpackWAR.java | 71 ++
...tConfigAutomaticDeploymentUpdateWarOffline.java | 73 ++
.../TestHostConfigAutomaticDeploymentWar.java | 90 +++
.../TestHostConfigAutomaticDeploymentWarXml.java | 94 +++
.../TestHostConfigAutomaticDeploymentXml.java | 91 +++
...ConfigAutomaticDeploymentXmlExternalDirXml.java | 102 +++
...ConfigAutomaticDeploymentXmlExternalWarXml.java | 105 +++
webapps/docs/changelog.xml | 3 +
24 files changed, 2365 insertions(+), 1766 deletions(-)
rename test/org/apache/catalina/startup/{TestHostConfigAutomaticDeploymentC.java => HostConfigAutomaticDeploymentBaseTest.java} (52%)
delete mode 100644 test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentA.java
create mode 100644 test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentAddition.java
delete mode 100644 test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentB.java
copy test/{jakarta/servlet/http/TestCookieRFC6265Validator.java => org/apache/catalina/startup/TestHostConfigAutomaticDeploymentBrokenApp.java} (63%)
create mode 100644 test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentC8.java
create mode 100644 test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentContextClassName.java
create mode 100644 test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentCopyXML.java
create mode 100644 test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentDeleteA.java
create mode 100644 test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentDeleteB.java
create mode 100644 test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentDeleteC.java
create mode 100644 test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentDir.java
create mode 100644 test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentDirXml.java
create mode 100644 test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentModification.java
create mode 100644 test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentUnpackWAR.java
create mode 100644 test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentUpdateWarOffline.java
create mode 100644 test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentWar.java
create mode 100644 test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentWarXml.java
create mode 100644 test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentXml.java
create mode 100644 test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentXmlExternalDirXml.java
create mode 100644 test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentXmlExternalWarXml.java
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
(tomcat) 01/02: Refactor into more, shorter tests to aid parallel test execution
Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch 11.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit bda90a6f6a5e5d258984e639d687649d3299db7d
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Fri Jan 31 16:58:56 2025 +0000
Refactor into more, shorter tests to aid parallel test execution
---
... => HostConfigAutomaticDeploymentBaseTest.java} | 866 +++++++--------------
.../TestHostConfigAutomaticDeploymentA.java | 482 ------------
.../TestHostConfigAutomaticDeploymentAddition.java | 182 +++++
.../TestHostConfigAutomaticDeploymentB.java | 687 ----------------
...TestHostConfigAutomaticDeploymentBrokenApp.java | 36 +
.../TestHostConfigAutomaticDeploymentC8.java | 504 ++++++++++++
...tConfigAutomaticDeploymentContextClassName.java | 62 ++
.../TestHostConfigAutomaticDeploymentCopyXML.java | 71 ++
.../TestHostConfigAutomaticDeploymentDeleteA.java | 62 ++
.../TestHostConfigAutomaticDeploymentDeleteB.java | 113 +++
.../TestHostConfigAutomaticDeploymentDeleteC.java | 101 +++
.../TestHostConfigAutomaticDeploymentDir.java | 89 +++
.../TestHostConfigAutomaticDeploymentDirXml.java | 91 +++
...tHostConfigAutomaticDeploymentModification.java | 167 ++++
...TestHostConfigAutomaticDeploymentUnpackWAR.java | 71 ++
...tConfigAutomaticDeploymentUpdateWarOffline.java | 73 ++
.../TestHostConfigAutomaticDeploymentWar.java | 90 +++
.../TestHostConfigAutomaticDeploymentWarXml.java | 94 +++
.../TestHostConfigAutomaticDeploymentXml.java | 91 +++
...ConfigAutomaticDeploymentXmlExternalDirXml.java | 102 +++
...ConfigAutomaticDeploymentXmlExternalWarXml.java | 105 +++
21 files changed, 2386 insertions(+), 1753 deletions(-)
diff --git a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentC.java b/test/org/apache/catalina/startup/HostConfigAutomaticDeploymentBaseTest.java
similarity index 52%
rename from test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentC.java
rename to test/org/apache/catalina/startup/HostConfigAutomaticDeploymentBaseTest.java
index 0b2189f62f..d720f4202c 100644
--- a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentC.java
+++ b/test/org/apache/catalina/startup/HostConfigAutomaticDeploymentBaseTest.java
@@ -22,11 +22,7 @@ import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.core.IsInstanceOf.instanceOf;
-
import org.junit.Assert;
-import org.junit.Test;
import org.apache.catalina.Context;
import org.apache.catalina.Host;
@@ -38,52 +34,37 @@ 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 TestHostConfigAutomaticDeploymentC 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_XML_COPYXML_FALSE_SOURCE =
- new File("test/deployment/contextCopyXMLFalse.war");
- private static final File WAR_XML_COPYXML_TRUE_SOURCE =
- new File("test/deployment/contextCopyXMLTrue.war");
- private static final File WAR_XML_UNPACKWAR_FALSE_SOURCE =
- new File("test/deployment/contextUnpackWARFalse.war");
- private static final File WAR_XML_UNPACKWAR_TRUE_SOURCE =
- new File("test/deployment/contextUnpackWARTrue.war");
- private static final File WAR_SOURCE =
- new File("test/deployment/noContext.war");
- private static final File WAR_BROKEN_SOURCE =
- new File("test/deployment/broken.war");
- private static final File DIR_XML_SOURCE =
- new File("test/deployment/dirContext");
- private static final File DIR_XML_SOURCE_META_INF =
- new File("test/deployment/dirContext/META-INF");
- 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 int DIR_XML = 5;
-
- private static final int NONE = 1;
- private static final int RELOAD = 2;
- private static final int REDEPLOY = 3;
-
- 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;
+public class HostConfigAutomaticDeploymentBaseTest extends TomcatBaseTest {
+
+ protected static final ContextName APP_NAME = new ContextName("myapp", false);
+ protected static final File XML_SOURCE = new File("test/deployment/context.xml");
+ protected static final File WAR_XML_SOURCE = new File("test/deployment/context.war");
+ protected static final File WAR_XML_COPYXML_FALSE_SOURCE = new File("test/deployment/contextCopyXMLFalse.war");
+ protected static final File WAR_XML_COPYXML_TRUE_SOURCE = new File("test/deployment/contextCopyXMLTrue.war");
+ protected static final File WAR_XML_UNPACKWAR_FALSE_SOURCE = new File("test/deployment/contextUnpackWARFalse.war");
+ protected static final File WAR_XML_UNPACKWAR_TRUE_SOURCE = new File("test/deployment/contextUnpackWARTrue.war");
+ protected static final File WAR_SOURCE = new File("test/deployment/noContext.war");
+ protected static final File WAR_BROKEN_SOURCE = new File("test/deployment/broken.war");
+ protected static final File DIR_XML_SOURCE = new File("test/deployment/dirContext");
+ protected static final File DIR_XML_SOURCE_META_INF = new File("test/deployment/dirContext/META-INF");
+ protected static final File DIR_SOURCE = new File("test/deployment/dirNoContext");
+
+ protected static final int XML = 1;
+ protected static final int EXT = 2;
+ protected static final int WAR = 3;
+ protected static final int DIR = 4;
+ protected static final int DIR_XML = 5;
+
+ protected static final int NONE = 1;
+ protected static final int RELOAD = 2;
+ protected static final int REDEPLOY = 3;
+
+ protected static final String XML_COOKIE_NAME = "XML_CONTEXT";
+ protected static final String WAR_COOKIE_NAME = "WAR_CONTEXT";
+ protected static final String DIR_COOKIE_NAME = "DIR_CONTEXT";
+
+ protected File external;
+
@Override
public void setUp() throws Exception {
@@ -111,146 +92,181 @@ public class TestHostConfigAutomaticDeploymentC extends TomcatBaseTest {
}
- /*
- * Expected behaviour for modification of files.
- *
- * Artifacts present Artifact Artifacts remaining
- * XML WAR EXT DIR Modified XML WAR EXT DIR Action
- * N N N Y DIR - - - M None
- * N Y N N WAR - M - - Redeploy
- * N Y N Y DIR - Y - M None
- * N Y N Y WAR - M - R Redeploy
- * Y N N N XML M - - - Redeploy
- * Y N N Y DIR Y - - M None
- * Y N N Y XML M - - Y Redeploy
- * Y N Y N EXT Y - M - Reload if WAR
- * Y N Y N XML M - Y - Redeploy
- * Y N Y Y DIR Y - Y M None
- * Y N Y Y EXT Y - M R Reload
- * Y N Y Y XML M - Y Y Redeploy
- * Y Y N N WAR Y M - - Reload
- * Y Y N N XML M Y - - Redeploy
- * Y Y N Y DIR Y Y - M None
- * Y Y N Y WAR Y M - - Reload
- * Y Y N Y XML M Y - Y Redeploy
- */
- @Test
- public void testModifyDirUpdateDir() throws Exception {
- doTestModify(false, false, false, false, true, DIR,
- false, false, true, DIR_COOKIE_NAME, NONE);
- }
+ protected void doTestDelete(boolean startXml, boolean startExternalWar,
+ boolean startExternalDir, boolean startWar, boolean startDir,
+ int toDelete, boolean resultXml, boolean resultWar,
+ boolean resultDir, String resultCookieName) throws Exception {
- @Test
- public void testModifyWarUpdateWar() throws Exception {
- doTestModify(false, false, false, true, false, WAR,
- false, true, false, WAR_COOKIE_NAME, REDEPLOY);
- }
+ Tomcat tomcat = getTomcatInstance();
+ StandardHost host = (StandardHost) tomcat.getHost();
- @Test
- public void testModifyWarDirUpdateDir() throws Exception {
- // DIR_COOKIE_NAME since Tomcat is going to assume DIR is expanded WAR
- doTestModify(false, false, false, true, true, DIR,
- false, true, true, DIR_COOKIE_NAME, NONE);
- }
+ // Init
+ File xml = null;
+ File ext = null;
+ File war = null;
+ File dir = null;
- @Test
- public void testModifyWarDirUpdateWar() throws Exception {
- doTestModify(false, false, false, true, true, WAR,
- false, true, true, WAR_COOKIE_NAME, REDEPLOY);
- }
+ 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);
+ }
- @Test
- public void testModifyXmlUpdateXml() throws Exception {
- doTestModify(true, false, false, false, false, XML,
- true, false, false, XML_COOKIE_NAME, REDEPLOY,
- LifecycleState.FAILED);
- }
+ if ((startWar || startExternalWar) && !startDir) {
+ host.setUnpackWARs(false);
+ }
- @Test
- public void testModifyXmlDirUpdateDir() throws Exception {
- doTestModify(true, false, false, false, true, DIR,
- true, false, true, XML_COOKIE_NAME, NONE);
- }
+ // Deploy the files we copied
+ tomcat.start();
+ host.backgroundProcess();
- @Test
- public void testModifyXmlDirUpdateXml() throws Exception {
- doTestModify(true, false, false, false, true, XML,
- true, false, true, XML_COOKIE_NAME, REDEPLOY);
- }
+ // 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();
+ }
- @Test
- public void testModifyXmlExtwarUpdateExtwar() throws Exception {
- doTestModify(true, true, false, false, false, EXT,
- true, false, false, XML_COOKIE_NAME, RELOAD);
- }
+ // Trigger an auto-deployment cycle
+ host.backgroundProcess();
- @Test
- public void testModifyXmlExtdirUpdateExtdir() throws Exception {
- doTestModify(true, false, true, false, false, EXT,
- true, false, false, XML_COOKIE_NAME, NONE);
- }
+ Context ctxt = (Context) host.findChild(APP_NAME.getName());
- @Test
- public void testModifyXmlExtwarUpdateXml() throws Exception {
- doTestModify(true, true, false, false, false, XML,
- true, false, false, XML_COOKIE_NAME, REDEPLOY);
- }
+ // 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());
+ }
+ }
+ }
- @Test
- public void testModifyXmlExtdirUpdateXml() throws Exception {
- doTestModify(true, false, true, false, false, XML,
- true, false, false, XML_COOKIE_NAME, REDEPLOY);
- }
+ 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());
+ }
+ }
- @Test
- public void testModifyXmlExtwarDirUpdateDir() throws Exception {
- doTestModify(true, true, false, false, true, DIR,
- true, false, false, XML_COOKIE_NAME, NONE);
- }
+ 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);
+ }
+ }
- @Test
- public void testModifyXmlExtwarDirUpdateExt() throws Exception {
- doTestModify(true, true, false, false, true, EXT,
- true, false, true, XML_COOKIE_NAME, RELOAD);
+ if (ctxt != null) {
+ Assert.assertEquals(resultCookieName, ctxt.getSessionCookieName());
+ }
}
- @Test
- public void testModifyXmlExtwarDirUpdateXml() throws Exception {
- doTestModify(true, true, false, false, true, XML,
- true, false, false, XML_COOKIE_NAME, REDEPLOY);
- }
- @Test
- public void testModifyXmlWarUpdateWar() throws Exception {
- doTestModify(true, false, false, true, false, WAR,
- true, true, false, XML_COOKIE_NAME, RELOAD);
- }
+ protected void doTestDeployment(boolean deployXML, boolean copyXML,
+ boolean unpackWARs, LifecycleState resultState, String cookieName,
+ boolean resultXml, boolean resultWar, boolean resultDir)
+ throws Exception {
- @Test
- public void testModifyXmlWarUpdateXml() throws Exception {
- doTestModify(true, false, false, true, false, XML,
- true, true, false, XML_COOKIE_NAME, REDEPLOY);
- }
+ Tomcat tomcat = getTomcatInstance();
- @Test
- public void testModifyXmlWarDirUpdateDir() throws Exception {
- doTestModify(true, false, false, true, true, DIR,
- true, true, true, XML_COOKIE_NAME, NONE);
- }
+ // Start the instance
+ tomcat.start();
- @Test
- public void testModifyXmlWarDirUpdateWar() throws Exception {
- doTestModify(true, false, false, true, true, WAR,
- true, true, true, XML_COOKIE_NAME, RELOAD);
- }
+ // 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()));
- @Test
- public void testModifyXmlWarDirUpdateXml() throws Exception {
- doTestModify(true, false, false, true, true, XML,
- true, true, true, XML_COOKIE_NAME, REDEPLOY);
+ 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 void doTestModify(boolean startXml, boolean startExternalWar,
+
+ protected void doTestModify(boolean startXml, boolean startExternalWar,
boolean startExternalDir, boolean startWar, boolean startDir,
int toModify, boolean resultXml, boolean resultWar,
boolean resultDir, String resultCookieName, int resultAction)
@@ -260,7 +276,8 @@ public class TestHostConfigAutomaticDeploymentC extends TomcatBaseTest {
resultCookieName, resultAction, LifecycleState.STARTED);
}
- private void doTestModify(boolean startXml, boolean startExternalWar,
+
+ protected void doTestModify(boolean startXml, boolean startExternalWar,
boolean startExternalDir, boolean startWar, boolean startDir,
int toModify, boolean resultXml, boolean resultWar,
boolean resultDir, String resultCookieName, int resultAction,
@@ -416,161 +433,7 @@ public class TestHostConfigAutomaticDeploymentC extends TomcatBaseTest {
}
- /*
- * Expected behaviour for the addition of files.
- *
- * Artifacts present copyXML deployXML Artifact Artifacts remaining
- * XML WAR EXT DIR Added XML WAR EXT DIR Action
- * N Y N N N Y DIR - Y - A None
- * N N N Y N Y WAR - A - R Redeploy
- * Y N N N N Y DIR Y - - A None
- * N N N Y N Y XML A - - Y Redeploy
- * Y N N N N Y WAR Y A - - Reload
- * N Y N N N Y XML A Y - - Redeploy
- * Y Y N N N Y DIR Y Y - A None
- * Y N N Y N Y WAR Y A - N Reload
- * N Y N Y N Y XML A Y - Y Redeploy
- * Y N Y N N Y DIR Y - Y A None
- * Y N Y N N Y WAR Y A Y - None
- * N N N Y N Y EXT A - A R Redeploy
- * N Y N N N Y EXT A Y A - Redeploy
- *
- * N N N Y Y/N N DIR+XML - - - Y Redeploy (failed)
- * N N N Y Y Y DIR+XML A - - Y Redeploy
- * N N N Y N Y DIR+XML - - - Y Redeploy
- *
- * Addition of a file is treated as if the added file has been modified
- * with the following additional actions:
- * - If a WAR is added, any DIR is removed and may be recreated depending on
- * unpackWARs.
- * - If an XML file is added that refers to an external docBase any WAR or
- * DIR in the appBase will be removed. The DIR may be recreated if the
- * external resource is a WAR and unpackWARs is true.
- * - If a DIR is added when a WAR already exists and unpackWARs is false,
- * the DIR will be ignored but a warning will be logged when the DIR is
- * first detected. If the WAR is removed, the DIR will be left and may be
- * deployed via automatic deployment.
- * - If a WAR is added when an external WAR already exists for the same
- * context, the WAR will be treated the same way as a DIR is treated in
- * the previous bullet point.
- */
- @Test
- public void testAdditionWarAddDir() throws Exception {
- doTestAddition(false, false, false, true, false, DIR,
- false, true, true, WAR_COOKIE_NAME, NONE);
- }
-
- @Test
- public void testAdditionDirAddWar() throws Exception {
- doTestAddition(false, false, false, false, true, WAR,
- false, true, true, WAR_COOKIE_NAME, REDEPLOY);
- }
-
- @Test
- public void testAdditionXmlAddDir() throws Exception {
- doTestAddition(true, false, false, false, false, DIR,
- true, false, true, XML_COOKIE_NAME, NONE);
- }
-
- @Test
- public void testAdditionDirAddXml() throws Exception {
- doTestAddition(false, false, false, false, true, XML,
- true, false, true, XML_COOKIE_NAME, REDEPLOY);
- }
-
- @Test
- public void testAdditionXmlAddWar() throws Exception {
- doTestAddition(true, false, false, false, false, WAR,
- true, true, false, XML_COOKIE_NAME, RELOAD);
- }
-
- @Test
- public void testAdditionWarAddXml() throws Exception {
- doTestAddition(false, false, false, true, false, XML,
- true, true, false, XML_COOKIE_NAME, REDEPLOY);
- }
-
- @Test
- public void testAdditionXmlWarAddDir() throws Exception {
- doTestAddition(true, false, false, true, false, DIR,
- true, true, true, XML_COOKIE_NAME, NONE);
- }
-
- @Test
- public void testAdditionXmlDirAddWar() throws Exception {
- doTestAddition(true, false, false, false, true, WAR,
- true, true, false, XML_COOKIE_NAME, RELOAD);
- }
-
- @Test
- public void testAdditionWarDirAddXml() throws Exception {
- doTestAddition(false, false, false, true, true, XML,
- true, true, true, XML_COOKIE_NAME, REDEPLOY);
- }
-
- @Test
- public void testAdditionXmlExtwarAddDir() throws Exception {
- doTestAddition(true, true, false, false, false, DIR,
- true, false, true, XML_COOKIE_NAME, NONE);
- }
-
- @Test
- public void testAdditionXmlExtdirAddDir() throws Exception {
- doTestAddition(true, false, true, false, false, DIR,
- true, false, true, XML_COOKIE_NAME, NONE);
- }
-
- @Test
- public void testAdditionXmlExtwarAddWar() throws Exception {
- doTestAddition(true, true, false, false, false, WAR,
- true, true, false, XML_COOKIE_NAME, NONE);
- }
-
- @Test
- public void testAdditionXmlExtdirAddWar() throws Exception {
- doTestAddition(true, false, true, false, false, WAR,
- true, true, false, XML_COOKIE_NAME, NONE);
- }
-
- @Test
- public void testAdditionDirAddXmlExtwar() throws Exception {
- doTestAddition(false, false, false, false, true, EXT,
- true, false, true, XML_COOKIE_NAME, REDEPLOY);
- }
-
- @Test
- public void testAdditionWarAddXmlExtwar() throws Exception {
- doTestAddition(false, false, false, true, false, EXT,
- true, true, false, XML_COOKIE_NAME, REDEPLOY);
- }
-
- @Test
- public void testAdditionDirAddDirXmlTF() throws Exception {
- doTestAddition(false, false, false, false, true, true, false, DIR_XML,
- false, false, true, null, REDEPLOY, LifecycleState.FAILED);
- }
-
- @Test
- public void testAdditionDirAddDirXmlFF() throws Exception {
- doTestAddition(false, false, false, false, true, false, false, DIR_XML,
- false, false, true, null, REDEPLOY, LifecycleState.FAILED);
- }
-
- @Test
- public void testAdditionDirAddDirXmlTT() throws Exception {
- doTestAddition(false, false, false, false, true, true, true, DIR_XML,
- true, false, true, DIR_COOKIE_NAME, REDEPLOY,
- LifecycleState.STARTED);
- }
-
- @Test
- public void testAdditionDirAddDirXmlFT() throws Exception {
- doTestAddition(false, false, false, false, true, false, true, DIR_XML,
- false, false, true, DIR_COOKIE_NAME, REDEPLOY,
- LifecycleState.STARTED);
- }
-
- private void doTestAddition(boolean startXml, boolean startExternalWar,
+ protected void doTestAddition(boolean startXml, boolean startExternalWar,
boolean startExternalDir, boolean startWar, boolean startDir,
int toAdd, boolean resultXml, boolean resultWar,
boolean resultDir, String resultCookieName, int resultAction)
@@ -581,7 +444,8 @@ public class TestHostConfigAutomaticDeploymentC extends TomcatBaseTest {
resultCookieName, resultAction, LifecycleState.STARTED);
}
- private void doTestAddition(boolean startXml, boolean startExternalWar,
+
+ protected void doTestAddition(boolean startXml, boolean startExternalWar,
boolean startExternalDir, boolean startWar, boolean startDir,
boolean copyXML, boolean deployXML, int toAdd, boolean resultXml,
boolean resultWar, boolean resultDir, String resultCookieName,
@@ -741,52 +605,32 @@ public class TestHostConfigAutomaticDeploymentC extends TomcatBaseTest {
}
- /*
- * Test context unpackWAR setting.
- * If context.getUnpackWAR != Host.getUnpackWARs the Host wins.
- */
- @Test
- public void testUnpackWARFFF() throws Exception {
- doTestUnpackWAR(false, false, false, false);
- }
+ protected void doTestBrokenAppWithAntiLocking(boolean unpackWARs)
+ throws Exception {
- @Test
- public void testUnpackWARFFT() throws Exception {
- doTestUnpackWAR(false, false, true, false);
- }
+ Tomcat tomcat = getTomcatInstance();
+ StandardHost host = (StandardHost) tomcat.getHost();
- @Test
- public void testUnpackWARFTF() throws Exception {
- doTestUnpackWAR(false, true, false, false);
- }
+ host.setUnpackWARs(unpackWARs);
- @Test
- public void testUnpackWARFTT() throws Exception {
- doTestUnpackWAR(false, true, true, false);
- }
+ File war = createWar(WAR_BROKEN_SOURCE, false);
+ createXmlInConfigBaseForExternal(war, true);
- @Test
- public void testUnpackWARTFF() throws Exception {
- doTestUnpackWAR(true, false, false, false);
- }
+ File dir = new File(host.getAppBaseFile(), APP_NAME.getBaseName());
- @Test
- public void testUnpackWARTFT() throws Exception {
- // External WAR - therefore XML in WAR will be ignored
- doTestUnpackWAR(true, false, true, true);
- }
+ tomcat.start();
- @Test
- public void testUnpackWARTTF() throws Exception {
- doTestUnpackWAR(true, true, false, true);
- }
+ // Simulate deploy on start-up
+ tomcat.getHost().backgroundProcess();
- @Test
- public void testUnpackWARTTT() throws Exception {
- doTestUnpackWAR(true, true, true, true);
+ Assert.assertTrue(war.isFile());
+ if (unpackWARs) {
+ Assert.assertTrue(dir.isDirectory());
+ }
}
- private void doTestUnpackWAR(boolean unpackWARs, boolean unpackWAR,
+
+ protected void doTestUnpackWAR(boolean unpackWARs, boolean unpackWAR,
boolean external, boolean resultDir) throws Exception {
Tomcat tomcat = getTomcatInstance();
@@ -814,41 +658,80 @@ public class TestHostConfigAutomaticDeploymentC extends TomcatBaseTest {
}
- @Test
- public void testBrokenAppWithAntiLockingF() throws Exception {
- testBrokenAppWithAntiLocking(false);
- }
+ protected void doTestCopyXML(boolean copyXmlHost, boolean copyXmlWar,
+ boolean external, boolean resultXml) throws Exception {
+
+ Tomcat tomcat = getTomcatInstance();
+ StandardHost host = (StandardHost) tomcat.getHost();
+
+ host.setCopyXML(copyXmlHost);
+
+ tomcat.start();
+
+ File war;
+ if (copyXmlWar) {
+ war = createWar(WAR_XML_COPYXML_TRUE_SOURCE, !external);
+ } else {
+ war = createWar(WAR_XML_COPYXML_FALSE_SOURCE, !external);
+ }
+ if (external) {
+ createXmlInConfigBaseForExternal(war);
+ }
- @Test
- public void testBrokenAppWithAntiLockingT() throws Exception {
- testBrokenAppWithAntiLocking(true);
+ host.backgroundProcess();
+
+ File xml = new File(host.getConfigBaseFile(),
+ APP_NAME.getBaseName() + ".xml");
+ Assert.assertEquals(
+ Boolean.valueOf(resultXml), Boolean.valueOf(xml.isFile()));
+
+ Context context = (Context) host.findChild(APP_NAME.getName());
+ if (external) {
+ Assert.assertEquals(XML_COOKIE_NAME,
+ context.getSessionCookieName());
+ } else {
+ Assert.assertEquals(WAR_COOKIE_NAME,
+ context.getSessionCookieName());
+ }
}
- private void testBrokenAppWithAntiLocking(boolean unpackWARs)
- throws Exception {
+ protected void doTestUpdateWarOffline(File srcWar, boolean deployOnStartUp, boolean autoDeploy)
+ throws Exception {
Tomcat tomcat = getTomcatInstance();
StandardHost host = (StandardHost) tomcat.getHost();
+ host.setDeployOnStartup(deployOnStartUp);
- host.setUnpackWARs(unpackWARs);
-
- File war = createWar(WAR_BROKEN_SOURCE, false);
- createXmlInConfigBaseForExternal(war, true);
-
- File dir = new File(host.getAppBaseFile(), APP_NAME.getBaseName());
+ File war = createWar(srcWar, true);
+ // Make the WAR appear to have been created earlier
+ Assert.assertTrue("Failed to set last modified for [" + war + "]", war.setLastModified(
+ war.lastModified() - 2 * HostConfig.FILE_MODIFICATION_RESOLUTION_MS));
+ tomcat.addWebapp(APP_NAME.getPath(), war.getAbsolutePath());
tomcat.start();
- // Simulate deploy on start-up
- tomcat.getHost().backgroundProcess();
+ // Get the last modified timestamp for the expanded dir
+ File dir = new File(host.getAppBase(), APP_NAME.getBaseName());
+ // Make the DIR appear to have been created earlier
+ long lastModified = war.lastModified() - 2 * HostConfig.FILE_MODIFICATION_RESOLUTION_MS;
+ Assert.assertTrue("Failed to set last modified for [" + dir + "]",
+ dir.setLastModified(lastModified));
- Assert.assertTrue(war.isFile());
- if (unpackWARs) {
- Assert.assertTrue(dir.isDirectory());
+ host.stop();
+ Assert.assertTrue("Failed to set last modified for [" + war + "]",
+ war.setLastModified(System.currentTimeMillis()));
+ host.start();
+ if (autoDeploy) {
+ host.backgroundProcess();
}
+
+ long newLastModified = dir.lastModified();
+
+ Assert.assertNotEquals("Timestamp hasn't changed", lastModified, newLastModified);
}
- private File createDirInAppbase(boolean withXml) throws IOException {
+
+ protected File createDirInAppbase(boolean withXml) throws IOException {
File dir = new File(getTomcatInstance().getHost().getAppBaseFile(),
APP_NAME.getBaseName());
if (withXml) {
@@ -859,14 +742,16 @@ public class TestHostConfigAutomaticDeploymentC extends TomcatBaseTest {
return dir;
}
- private File createDirXmlInAppbase() throws IOException {
+
+ protected File createDirXmlInAppbase() throws IOException {
File dir = new File(getTomcatInstance().getHost().getAppBaseFile(),
APP_NAME.getBaseName() + "/META-INF");
recursiveCopy(DIR_XML_SOURCE_META_INF.toPath(), dir.toPath());
return dir;
}
- private File createDirInExternal(boolean withXml) throws IOException {
+
+ protected File createDirInExternal(boolean withXml) throws IOException {
File ext = new File(external, "external" + ".war");
if (withXml) {
recursiveCopy(DIR_XML_SOURCE.toPath(), ext.toPath());
@@ -876,7 +761,8 @@ public class TestHostConfigAutomaticDeploymentC extends TomcatBaseTest {
return ext;
}
- private File createWar(File src, boolean useAppbase) throws IOException {
+
+ protected File createWar(File src, boolean useAppbase) throws IOException {
File dest;
if (useAppbase) {
dest = new File(getTomcatInstance().getHost().getAppBaseFile(),
@@ -891,7 +777,8 @@ public class TestHostConfigAutomaticDeploymentC extends TomcatBaseTest {
return dest;
}
- private File createXmlInConfigBaseForAppbase() throws IOException {
+
+ protected File createXmlInConfigBaseForAppbase() throws IOException {
File xml = getXmlInConfigBaseForAppbase();
File parent = xml.getParentFile();
if (!parent.isDirectory()) {
@@ -904,16 +791,19 @@ public class TestHostConfigAutomaticDeploymentC extends TomcatBaseTest {
return xml;
}
- private File getXmlInConfigBaseForAppbase() {
+
+ protected File getXmlInConfigBaseForAppbase() {
Host host = getTomcatInstance().getHost();
return new File(host.getConfigBaseFile(), APP_NAME + ".xml");
}
- private File createXmlInConfigBaseForExternal(File ext) throws IOException {
+
+ protected File createXmlInConfigBaseForExternal(File ext) throws IOException {
return createXmlInConfigBaseForExternal(ext, false);
}
- private File createXmlInConfigBaseForExternal(File ext, boolean antiLocking)
+
+ protected File createXmlInConfigBaseForExternal(File ext, boolean antiLocking)
throws IOException {
File xml = new File(getTomcatInstance().getHost().getConfigBaseFile(),
APP_NAME + ".xml");
@@ -940,6 +830,7 @@ public class TestHostConfigAutomaticDeploymentC extends TomcatBaseTest {
return xml;
}
+
private static class StateTracker implements LifecycleListener {
private StringBuilder stateHistory = new StringBuilder();
@@ -963,200 +854,7 @@ public class TestHostConfigAutomaticDeploymentC extends TomcatBaseTest {
}
- /*
- * Test context copyXML setting.
- * If context.copyXML != Host.copyXML the Host wins.
- * For external WARs, a context.xml must always already exist
- */
- @Test
- public void testCopyXMLFFF() throws Exception {
- doTestCopyXML(false, false, false, false);
- }
-
- @Test
- public void testCopyXMLFFT() throws Exception {
- doTestCopyXML(false, false, true, true);
- }
-
- @Test
- public void testCopyXMLFTF() throws Exception {
- doTestCopyXML(false, true, false, true);
- }
-
- @Test
- public void testCopyXMLFTT() throws Exception {
- doTestCopyXML(false, true, true, true);
- }
-
- @Test
- public void testCopyXMLTFF() throws Exception {
- doTestCopyXML(true, false, false, true);
- }
-
- @Test
- public void testCopyXMLTFT() throws Exception {
- doTestCopyXML(true, false, true, true);
- }
-
- @Test
- public void testCopyXMLTTF() throws Exception {
- doTestCopyXML(true, true, false, true);
- }
-
- @Test
- public void testCopyXMLTTT() throws Exception {
- doTestCopyXML(true, true, true, true);
- }
-
- private void doTestCopyXML(boolean copyXmlHost, boolean copyXmlWar,
- boolean external, boolean resultXml) throws Exception {
-
- Tomcat tomcat = getTomcatInstance();
- StandardHost host = (StandardHost) tomcat.getHost();
-
- host.setCopyXML(copyXmlHost);
-
- tomcat.start();
-
- File war;
- if (copyXmlWar) {
- war = createWar(WAR_XML_COPYXML_TRUE_SOURCE, !external);
- } else {
- war = createWar(WAR_XML_COPYXML_FALSE_SOURCE, !external);
- }
- if (external) {
- createXmlInConfigBaseForExternal(war);
- }
-
- host.backgroundProcess();
-
- File xml = new File(host.getConfigBaseFile(),
- APP_NAME.getBaseName() + ".xml");
- Assert.assertEquals(
- Boolean.valueOf(resultXml), Boolean.valueOf(xml.isFile()));
-
- Context context = (Context) host.findChild(APP_NAME.getName());
- if (external) {
- Assert.assertEquals(XML_COOKIE_NAME,
- context.getSessionCookieName());
- } else {
- Assert.assertEquals(WAR_COOKIE_NAME,
- context.getSessionCookieName());
- }
- }
-
-
- @Test
- public void testSetContextClassName() throws Exception {
-
- Tomcat tomcat = getTomcatInstance();
-
- Host host = tomcat.getHost();
- if (host instanceof StandardHost) {
- StandardHost standardHost = (StandardHost) host;
- standardHost.setContextClass(TesterContext.class.getName());
- }
-
- // Copy the WAR file
- File war = new File(host.getAppBaseFile(),
- APP_NAME.getBaseName() + ".war");
- Files.copy(WAR_XML_SOURCE.toPath(), war.toPath());
-
- // Deploy the copied war
- tomcat.start();
- host.backgroundProcess();
-
- // Check the Context class
- Context ctxt = (Context) host.findChild(APP_NAME.getName());
-
- assertThat(ctxt, instanceOf(TesterContext.class));
- }
-
-
public static class TesterContext extends StandardContext {
// No functional change
}
-
-
- @Test
- public void testUpdateWarOfflineNoContextFF() throws Exception {
- doTestUpdateWarOffline(WAR_SOURCE, false, false);
- }
-
-
- @Test
- public void testUpdateWarOfflineNoContextTF() throws Exception {
- doTestUpdateWarOffline(WAR_SOURCE, true, false);
- }
-
-
- @Test
- public void testUpdateWarOfflineNoContextFT() throws Exception {
- doTestUpdateWarOffline(WAR_SOURCE, false, true);
- }
-
-
- @Test
- public void testUpdateWarOfflineNoContextTT() throws Exception {
- doTestUpdateWarOffline(WAR_SOURCE, true, true);
- }
-
-
- @Test
- public void testUpdateWarOfflineContextFF() throws Exception {
- doTestUpdateWarOffline(WAR_XML_SOURCE, false, false);
- }
-
-
- @Test
- public void testUpdateWarOfflineContextTF() throws Exception {
- doTestUpdateWarOffline(WAR_XML_SOURCE, true, false);
- }
-
-
- @Test
- public void testUpdateWarOfflineContextFT() throws Exception {
- doTestUpdateWarOffline(WAR_XML_SOURCE, false, true);
- }
-
-
- @Test
- public void testUpdateWarOfflineContextTT() throws Exception {
- doTestUpdateWarOffline(WAR_XML_SOURCE, true, true);
- }
-
-
- private void doTestUpdateWarOffline(File srcWar, boolean deployOnStartUp, boolean autoDeploy)
- throws Exception {
- Tomcat tomcat = getTomcatInstance();
- StandardHost host = (StandardHost) tomcat.getHost();
- host.setDeployOnStartup(deployOnStartUp);
-
- File war = createWar(srcWar, true);
- // Make the WAR appear to have been created earlier
- Assert.assertTrue("Failed to set last modified for [" + war + "]", war.setLastModified(
- war.lastModified() - 2 * HostConfig.FILE_MODIFICATION_RESOLUTION_MS));
-
- tomcat.addWebapp(APP_NAME.getPath(), war.getAbsolutePath());
- tomcat.start();
-
- // Get the last modified timestamp for the expanded dir
- File dir = new File(host.getAppBase(), APP_NAME.getBaseName());
- // Make the DIR appear to have been created earlier
- long lastModified = war.lastModified() - 2 * HostConfig.FILE_MODIFICATION_RESOLUTION_MS;
- Assert.assertTrue("Failed to set last modified for [" + dir + "]",
- dir.setLastModified(lastModified));
-
- host.stop();
- Assert.assertTrue("Failed to set last modified for [" + war + "]",
- war.setLastModified(System.currentTimeMillis()));
- host.start();
- if (autoDeploy) {
- host.backgroundProcess();
- }
-
- long newLastModified = dir.lastModified();
-
- Assert.assertNotEquals("Timestamp hasn't changed", lastModified, newLastModified);
- }
}
diff --git a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentA.java b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentA.java
deleted file mode 100644
index 60f9dd78f5..0000000000
--- a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentA.java
+++ /dev/null
@@ -1,482 +0,0 @@
-/*
- * 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/TestHostConfigAutomaticDeploymentAddition.java b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentAddition.java
new file mode 100644
index 0000000000..7b38f42e27
--- /dev/null
+++ b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentAddition.java
@@ -0,0 +1,182 @@
+/*
+ * 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 org.junit.Test;
+
+import org.apache.catalina.LifecycleState;
+
+/**
+ * The purpose of this class is to test the automatic deployment features of the
+ * {@link HostConfig} implementation.
+ */
+public class TestHostConfigAutomaticDeploymentAddition extends HostConfigAutomaticDeploymentBaseTest {
+
+ /*
+ * Expected behaviour for the addition of files.
+ *
+ * Artifacts present copyXML deployXML Artifact Artifacts remaining
+ * XML WAR EXT DIR Added XML WAR EXT DIR Action
+ * N Y N N N Y DIR - Y - A None
+ * N N N Y N Y WAR - A - R Redeploy
+ * Y N N N N Y DIR Y - - A None
+ * N N N Y N Y XML A - - Y Redeploy
+ * Y N N N N Y WAR Y A - - Reload
+ * N Y N N N Y XML A Y - - Redeploy
+ * Y Y N N N Y DIR Y Y - A None
+ * Y N N Y N Y WAR Y A - N Reload
+ * N Y N Y N Y XML A Y - Y Redeploy
+ * Y N Y N N Y DIR Y - Y A None
+ * Y N Y N N Y WAR Y A Y - None
+ * N N N Y N Y EXT A - A R Redeploy
+ * N Y N N N Y EXT A Y A - Redeploy
+ *
+ * N N N Y Y/N N DIR+XML - - - Y Redeploy (failed)
+ * N N N Y Y Y DIR+XML A - - Y Redeploy
+ * N N N Y N Y DIR+XML - - - Y Redeploy
+ *
+ * Addition of a file is treated as if the added file has been modified
+ * with the following additional actions:
+ * - If a WAR is added, any DIR is removed and may be recreated depending on
+ * unpackWARs.
+ * - If an XML file is added that refers to an external docBase any WAR or
+ * DIR in the appBase will be removed. The DIR may be recreated if the
+ * external resource is a WAR and unpackWARs is true.
+ * - If a DIR is added when a WAR already exists and unpackWARs is false,
+ * the DIR will be ignored but a warning will be logged when the DIR is
+ * first detected. If the WAR is removed, the DIR will be left and may be
+ * deployed via automatic deployment.
+ * - If a WAR is added when an external WAR already exists for the same
+ * context, the WAR will be treated the same way as a DIR is treated in
+ * the previous bullet point.
+ */
+ @Test
+ public void testAdditionWarAddDir() throws Exception {
+ doTestAddition(false, false, false, true, false, DIR,
+ false, true, true, WAR_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testAdditionDirAddWar() throws Exception {
+ doTestAddition(false, false, false, false, true, WAR,
+ false, true, true, WAR_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testAdditionXmlAddDir() throws Exception {
+ doTestAddition(true, false, false, false, false, DIR,
+ true, false, true, XML_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testAdditionDirAddXml() throws Exception {
+ doTestAddition(false, false, false, false, true, XML,
+ true, false, true, XML_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testAdditionXmlAddWar() throws Exception {
+ doTestAddition(true, false, false, false, false, WAR,
+ true, true, false, XML_COOKIE_NAME, RELOAD);
+ }
+
+ @Test
+ public void testAdditionWarAddXml() throws Exception {
+ doTestAddition(false, false, false, true, false, XML,
+ true, true, false, XML_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testAdditionXmlWarAddDir() throws Exception {
+ doTestAddition(true, false, false, true, false, DIR,
+ true, true, true, XML_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testAdditionXmlDirAddWar() throws Exception {
+ doTestAddition(true, false, false, false, true, WAR,
+ true, true, false, XML_COOKIE_NAME, RELOAD);
+ }
+
+ @Test
+ public void testAdditionWarDirAddXml() throws Exception {
+ doTestAddition(false, false, false, true, true, XML,
+ true, true, true, XML_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testAdditionXmlExtwarAddDir() throws Exception {
+ doTestAddition(true, true, false, false, false, DIR,
+ true, false, true, XML_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testAdditionXmlExtdirAddDir() throws Exception {
+ doTestAddition(true, false, true, false, false, DIR,
+ true, false, true, XML_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testAdditionXmlExtwarAddWar() throws Exception {
+ doTestAddition(true, true, false, false, false, WAR,
+ true, true, false, XML_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testAdditionXmlExtdirAddWar() throws Exception {
+ doTestAddition(true, false, true, false, false, WAR,
+ true, true, false, XML_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testAdditionDirAddXmlExtwar() throws Exception {
+ doTestAddition(false, false, false, false, true, EXT,
+ true, false, true, XML_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testAdditionWarAddXmlExtwar() throws Exception {
+ doTestAddition(false, false, false, true, false, EXT,
+ true, true, false, XML_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testAdditionDirAddDirXmlTF() throws Exception {
+ doTestAddition(false, false, false, false, true, true, false, DIR_XML,
+ false, false, true, null, REDEPLOY, LifecycleState.FAILED);
+ }
+
+ @Test
+ public void testAdditionDirAddDirXmlFF() throws Exception {
+ doTestAddition(false, false, false, false, true, false, false, DIR_XML,
+ false, false, true, null, REDEPLOY, LifecycleState.FAILED);
+ }
+
+ @Test
+ public void testAdditionDirAddDirXmlTT() throws Exception {
+ doTestAddition(false, false, false, false, true, true, true, DIR_XML,
+ true, false, true, DIR_COOKIE_NAME, REDEPLOY,
+ LifecycleState.STARTED);
+ }
+
+ @Test
+ public void testAdditionDirAddDirXmlFT() throws Exception {
+ doTestAddition(false, false, false, false, true, false, true, DIR_XML,
+ false, false, true, DIR_COOKIE_NAME, REDEPLOY,
+ LifecycleState.STARTED);
+ }
+}
diff --git a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentB.java b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentB.java
deleted file mode 100644
index b892b194c5..0000000000
--- a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentB.java
+++ /dev/null
@@ -1,687 +0,0 @@
-/*
- * 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/TestHostConfigAutomaticDeploymentBrokenApp.java b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentBrokenApp.java
new file mode 100644
index 0000000000..42bbb05d54
--- /dev/null
+++ b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentBrokenApp.java
@@ -0,0 +1,36 @@
+/*
+ * 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 org.junit.Test;
+
+/**
+ * The purpose of this class is to test the automatic deployment features of the
+ * {@link HostConfig} implementation.
+ */
+public class TestHostConfigAutomaticDeploymentBrokenApp extends HostConfigAutomaticDeploymentBaseTest {
+
+ @Test
+ public void testBrokenAppWithAntiLockingF() throws Exception {
+ doTestBrokenAppWithAntiLocking(false);
+ }
+
+ @Test
+ public void testBrokenAppWithAntiLockingT() throws Exception {
+ doTestBrokenAppWithAntiLocking(true);
+ }
+}
diff --git a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentC8.java b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentC8.java
new file mode 100644
index 0000000000..af3bd31074
--- /dev/null
+++ b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentC8.java
@@ -0,0 +1,504 @@
+/*
+ * 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.nio.file.Files;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.IsInstanceOf.instanceOf;
+
+import org.junit.Test;
+
+import org.apache.catalina.Context;
+import org.apache.catalina.Host;
+import org.apache.catalina.LifecycleState;
+import org.apache.catalina.core.StandardHost;
+
+/**
+ * The purpose of this class is to test the automatic deployment features of the
+ * {@link HostConfig} implementation.
+ */
+public class TestHostConfigAutomaticDeploymentC8 extends HostConfigAutomaticDeploymentBaseTest {
+
+ /*
+ * Expected behaviour for modification of files.
+ *
+ * Artifacts present Artifact Artifacts remaining
+ * XML WAR EXT DIR Modified XML WAR EXT DIR Action
+ * N N N Y DIR - - - M None
+ * N Y N N WAR - M - - Redeploy
+ * N Y N Y DIR - Y - M None
+ * N Y N Y WAR - M - R Redeploy
+ * Y N N N XML M - - - Redeploy
+ * Y N N Y DIR Y - - M None
+ * Y N N Y XML M - - Y Redeploy
+ * Y N Y N EXT Y - M - Reload if WAR
+ * Y N Y N XML M - Y - Redeploy
+ * Y N Y Y DIR Y - Y M None
+ * Y N Y Y EXT Y - M R Reload
+ * Y N Y Y XML M - Y Y Redeploy
+ * Y Y N N WAR Y M - - Reload
+ * Y Y N N XML M Y - - Redeploy
+ * Y Y N Y DIR Y Y - M None
+ * Y Y N Y WAR Y M - - Reload
+ * Y Y N Y XML M Y - Y Redeploy
+ */
+ @Test
+ public void testModifyDirUpdateDir() throws Exception {
+ doTestModify(false, false, false, false, true, DIR,
+ false, false, true, DIR_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testModifyWarUpdateWar() throws Exception {
+ doTestModify(false, false, false, true, false, WAR,
+ false, true, false, WAR_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testModifyWarDirUpdateDir() throws Exception {
+ // DIR_COOKIE_NAME since Tomcat is going to assume DIR is expanded WAR
+ doTestModify(false, false, false, true, true, DIR,
+ false, true, true, DIR_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testModifyWarDirUpdateWar() throws Exception {
+ doTestModify(false, false, false, true, true, WAR,
+ false, true, true, WAR_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testModifyXmlUpdateXml() throws Exception {
+ doTestModify(true, false, false, false, false, XML,
+ true, false, false, XML_COOKIE_NAME, REDEPLOY,
+ LifecycleState.FAILED);
+ }
+
+ @Test
+ public void testModifyXmlDirUpdateDir() throws Exception {
+ doTestModify(true, false, false, false, true, DIR,
+ true, false, true, XML_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testModifyXmlDirUpdateXml() throws Exception {
+ doTestModify(true, false, false, false, true, XML,
+ true, false, true, XML_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testModifyXmlExtwarUpdateExtwar() throws Exception {
+ doTestModify(true, true, false, false, false, EXT,
+ true, false, false, XML_COOKIE_NAME, RELOAD);
+ }
+
+ @Test
+ public void testModifyXmlExtdirUpdateExtdir() throws Exception {
+ doTestModify(true, false, true, false, false, EXT,
+ true, false, false, XML_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testModifyXmlExtwarUpdateXml() throws Exception {
+ doTestModify(true, true, false, false, false, XML,
+ true, false, false, XML_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testModifyXmlExtdirUpdateXml() throws Exception {
+ doTestModify(true, false, true, false, false, XML,
+ true, false, false, XML_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testModifyXmlExtwarDirUpdateDir() throws Exception {
+ doTestModify(true, true, false, false, true, DIR,
+ true, false, false, XML_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testModifyXmlExtwarDirUpdateExt() throws Exception {
+ doTestModify(true, true, false, false, true, EXT,
+ true, false, true, XML_COOKIE_NAME, RELOAD);
+ }
+
+ @Test
+ public void testModifyXmlExtwarDirUpdateXml() throws Exception {
+ doTestModify(true, true, false, false, true, XML,
+ true, false, false, XML_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testModifyXmlWarUpdateWar() throws Exception {
+ doTestModify(true, false, false, true, false, WAR,
+ true, true, false, XML_COOKIE_NAME, RELOAD);
+ }
+
+ @Test
+ public void testModifyXmlWarUpdateXml() throws Exception {
+ doTestModify(true, false, false, true, false, XML,
+ true, true, false, XML_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testModifyXmlWarDirUpdateDir() throws Exception {
+ doTestModify(true, false, false, true, true, DIR,
+ true, true, true, XML_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testModifyXmlWarDirUpdateWar() throws Exception {
+ doTestModify(true, false, false, true, true, WAR,
+ true, true, true, XML_COOKIE_NAME, RELOAD);
+ }
+
+ @Test
+ public void testModifyXmlWarDirUpdateXml() throws Exception {
+ doTestModify(true, false, false, true, true, XML,
+ true, true, true, XML_COOKIE_NAME, REDEPLOY);
+ }
+
+ /*
+ * Expected behaviour for the addition of files.
+ *
+ * Artifacts present copyXML deployXML Artifact Artifacts remaining
+ * XML WAR EXT DIR Added XML WAR EXT DIR Action
+ * N Y N N N Y DIR - Y - A None
+ * N N N Y N Y WAR - A - R Redeploy
+ * Y N N N N Y DIR Y - - A None
+ * N N N Y N Y XML A - - Y Redeploy
+ * Y N N N N Y WAR Y A - - Reload
+ * N Y N N N Y XML A Y - - Redeploy
+ * Y Y N N N Y DIR Y Y - A None
+ * Y N N Y N Y WAR Y A - N Reload
+ * N Y N Y N Y XML A Y - Y Redeploy
+ * Y N Y N N Y DIR Y - Y A None
+ * Y N Y N N Y WAR Y A Y - None
+ * N N N Y N Y EXT A - A R Redeploy
+ * N Y N N N Y EXT A Y A - Redeploy
+ *
+ * N N N Y Y/N N DIR+XML - - - Y Redeploy (failed)
+ * N N N Y Y Y DIR+XML A - - Y Redeploy
+ * N N N Y N Y DIR+XML - - - Y Redeploy
+ *
+ * Addition of a file is treated as if the added file has been modified
+ * with the following additional actions:
+ * - If a WAR is added, any DIR is removed and may be recreated depending on
+ * unpackWARs.
+ * - If an XML file is added that refers to an external docBase any WAR or
+ * DIR in the appBase will be removed. The DIR may be recreated if the
+ * external resource is a WAR and unpackWARs is true.
+ * - If a DIR is added when a WAR already exists and unpackWARs is false,
+ * the DIR will be ignored but a warning will be logged when the DIR is
+ * first detected. If the WAR is removed, the DIR will be left and may be
+ * deployed via automatic deployment.
+ * - If a WAR is added when an external WAR already exists for the same
+ * context, the WAR will be treated the same way as a DIR is treated in
+ * the previous bullet point.
+ */
+ @Test
+ public void testAdditionWarAddDir() throws Exception {
+ doTestAddition(false, false, false, true, false, DIR,
+ false, true, true, WAR_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testAdditionDirAddWar() throws Exception {
+ doTestAddition(false, false, false, false, true, WAR,
+ false, true, true, WAR_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testAdditionXmlAddDir() throws Exception {
+ doTestAddition(true, false, false, false, false, DIR,
+ true, false, true, XML_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testAdditionDirAddXml() throws Exception {
+ doTestAddition(false, false, false, false, true, XML,
+ true, false, true, XML_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testAdditionXmlAddWar() throws Exception {
+ doTestAddition(true, false, false, false, false, WAR,
+ true, true, false, XML_COOKIE_NAME, RELOAD);
+ }
+
+ @Test
+ public void testAdditionWarAddXml() throws Exception {
+ doTestAddition(false, false, false, true, false, XML,
+ true, true, false, XML_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testAdditionXmlWarAddDir() throws Exception {
+ doTestAddition(true, false, false, true, false, DIR,
+ true, true, true, XML_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testAdditionXmlDirAddWar() throws Exception {
+ doTestAddition(true, false, false, false, true, WAR,
+ true, true, false, XML_COOKIE_NAME, RELOAD);
+ }
+
+ @Test
+ public void testAdditionWarDirAddXml() throws Exception {
+ doTestAddition(false, false, false, true, true, XML,
+ true, true, true, XML_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testAdditionXmlExtwarAddDir() throws Exception {
+ doTestAddition(true, true, false, false, false, DIR,
+ true, false, true, XML_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testAdditionXmlExtdirAddDir() throws Exception {
+ doTestAddition(true, false, true, false, false, DIR,
+ true, false, true, XML_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testAdditionXmlExtwarAddWar() throws Exception {
+ doTestAddition(true, true, false, false, false, WAR,
+ true, true, false, XML_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testAdditionXmlExtdirAddWar() throws Exception {
+ doTestAddition(true, false, true, false, false, WAR,
+ true, true, false, XML_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testAdditionDirAddXmlExtwar() throws Exception {
+ doTestAddition(false, false, false, false, true, EXT,
+ true, false, true, XML_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testAdditionWarAddXmlExtwar() throws Exception {
+ doTestAddition(false, false, false, true, false, EXT,
+ true, true, false, XML_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testAdditionDirAddDirXmlTF() throws Exception {
+ doTestAddition(false, false, false, false, true, true, false, DIR_XML,
+ false, false, true, null, REDEPLOY, LifecycleState.FAILED);
+ }
+
+ @Test
+ public void testAdditionDirAddDirXmlFF() throws Exception {
+ doTestAddition(false, false, false, false, true, false, false, DIR_XML,
+ false, false, true, null, REDEPLOY, LifecycleState.FAILED);
+ }
+
+ @Test
+ public void testAdditionDirAddDirXmlTT() throws Exception {
+ doTestAddition(false, false, false, false, true, true, true, DIR_XML,
+ true, false, true, DIR_COOKIE_NAME, REDEPLOY,
+ LifecycleState.STARTED);
+ }
+
+ @Test
+ public void testAdditionDirAddDirXmlFT() throws Exception {
+ doTestAddition(false, false, false, false, true, false, true, DIR_XML,
+ false, false, true, DIR_COOKIE_NAME, REDEPLOY,
+ LifecycleState.STARTED);
+ }
+
+ /*
+ * Test context unpackWAR setting.
+ * If context.getUnpackWAR != Host.getUnpackWARs the Host wins.
+ */
+ @Test
+ public void testUnpackWARFFF() throws Exception {
+ doTestUnpackWAR(false, false, false, false);
+ }
+
+ @Test
+ public void testUnpackWARFFT() throws Exception {
+ doTestUnpackWAR(false, false, true, false);
+ }
+
+ @Test
+ public void testUnpackWARFTF() throws Exception {
+ doTestUnpackWAR(false, true, false, false);
+ }
+
+ @Test
+ public void testUnpackWARFTT() throws Exception {
+ doTestUnpackWAR(false, true, true, false);
+ }
+
+ @Test
+ public void testUnpackWARTFF() throws Exception {
+ doTestUnpackWAR(true, false, false, false);
+ }
+
+ @Test
+ public void testUnpackWARTFT() throws Exception {
+ // External WAR - therefore XML in WAR will be ignored
+ doTestUnpackWAR(true, false, true, true);
+ }
+
+ @Test
+ public void testUnpackWARTTF() throws Exception {
+ doTestUnpackWAR(true, true, false, true);
+ }
+
+ @Test
+ public void testUnpackWARTTT() throws Exception {
+ doTestUnpackWAR(true, true, true, true);
+ }
+
+ @Test
+ public void testBrokenAppWithAntiLockingF() throws Exception {
+ doTestBrokenAppWithAntiLocking(false);
+ }
+
+ @Test
+ public void testBrokenAppWithAntiLockingT() throws Exception {
+ doTestBrokenAppWithAntiLocking(true);
+ }
+
+ /*
+ * Test context copyXML setting.
+ * If context.copyXML != Host.copyXML the Host wins.
+ * For external WARs, a context.xml must always already exist
+ */
+ @Test
+ public void testCopyXMLFFF() throws Exception {
+ doTestCopyXML(false, false, false, false);
+ }
+
+ @Test
+ public void testCopyXMLFFT() throws Exception {
+ doTestCopyXML(false, false, true, true);
+ }
+
+ @Test
+ public void testCopyXMLFTF() throws Exception {
+ doTestCopyXML(false, true, false, true);
+ }
+
+ @Test
+ public void testCopyXMLFTT() throws Exception {
+ doTestCopyXML(false, true, true, true);
+ }
+
+ @Test
+ public void testCopyXMLTFF() throws Exception {
+ doTestCopyXML(true, false, false, true);
+ }
+
+ @Test
+ public void testCopyXMLTFT() throws Exception {
+ doTestCopyXML(true, false, true, true);
+ }
+
+ @Test
+ public void testCopyXMLTTF() throws Exception {
+ doTestCopyXML(true, true, false, true);
+ }
+
+ @Test
+ public void testCopyXMLTTT() throws Exception {
+ doTestCopyXML(true, true, true, true);
+ }
+
+ @Test
+ public void testSetContextClassName() throws Exception {
+
+ Tomcat tomcat = getTomcatInstance();
+
+ Host host = tomcat.getHost();
+ if (host instanceof StandardHost) {
+ StandardHost standardHost = (StandardHost) host;
+ standardHost.setContextClass(TesterContext.class.getName());
+ }
+
+ // Copy the WAR file
+ File war = new File(host.getAppBaseFile(),
+ APP_NAME.getBaseName() + ".war");
+ Files.copy(WAR_XML_SOURCE.toPath(), war.toPath());
+
+ // Deploy the copied war
+ tomcat.start();
+ host.backgroundProcess();
+
+ // Check the Context class
+ Context ctxt = (Context) host.findChild(APP_NAME.getName());
+
+ assertThat(ctxt, instanceOf(TesterContext.class));
+ }
+
+
+ @Test
+ public void testUpdateWarOfflineNoContextFF() throws Exception {
+ doTestUpdateWarOffline(WAR_SOURCE, false, false);
+ }
+
+
+ @Test
+ public void testUpdateWarOfflineNoContextTF() throws Exception {
+ doTestUpdateWarOffline(WAR_SOURCE, true, false);
+ }
+
+
+ @Test
+ public void testUpdateWarOfflineNoContextFT() throws Exception {
+ doTestUpdateWarOffline(WAR_SOURCE, false, true);
+ }
+
+
+ @Test
+ public void testUpdateWarOfflineNoContextTT() throws Exception {
+ doTestUpdateWarOffline(WAR_SOURCE, true, true);
+ }
+
+
+ @Test
+ public void testUpdateWarOfflineContextFF() throws Exception {
+ doTestUpdateWarOffline(WAR_XML_SOURCE, false, false);
+ }
+
+
+ @Test
+ public void testUpdateWarOfflineContextTF() throws Exception {
+ doTestUpdateWarOffline(WAR_XML_SOURCE, true, false);
+ }
+
+
+ @Test
+ public void testUpdateWarOfflineContextFT() throws Exception {
+ doTestUpdateWarOffline(WAR_XML_SOURCE, false, true);
+ }
+
+
+ @Test
+ public void testUpdateWarOfflineContextTT() throws Exception {
+ doTestUpdateWarOffline(WAR_XML_SOURCE, true, true);
+ }
+}
diff --git a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentContextClassName.java b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentContextClassName.java
new file mode 100644
index 0000000000..1be9748de4
--- /dev/null
+++ b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentContextClassName.java
@@ -0,0 +1,62 @@
+/*
+ * 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.nio.file.Files;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.core.IsInstanceOf.instanceOf;
+
+import org.junit.Test;
+
+import org.apache.catalina.Context;
+import org.apache.catalina.Host;
+import org.apache.catalina.core.StandardHost;
+
+/**
+ * The purpose of this class is to test the automatic deployment features of the
+ * {@link HostConfig} implementation.
+ */
+public class TestHostConfigAutomaticDeploymentContextClassName extends HostConfigAutomaticDeploymentBaseTest {
+
+ @Test
+ public void testSetContextClassName() throws Exception {
+
+ Tomcat tomcat = getTomcatInstance();
+
+ Host host = tomcat.getHost();
+ if (host instanceof StandardHost) {
+ StandardHost standardHost = (StandardHost) host;
+ standardHost.setContextClass(TesterContext.class.getName());
+ }
+
+ // Copy the WAR file
+ File war = new File(host.getAppBaseFile(),
+ APP_NAME.getBaseName() + ".war");
+ Files.copy(WAR_XML_SOURCE.toPath(), war.toPath());
+
+ // Deploy the copied war
+ tomcat.start();
+ host.backgroundProcess();
+
+ // Check the Context class
+ Context ctxt = (Context) host.findChild(APP_NAME.getName());
+
+ assertThat(ctxt, instanceOf(TesterContext.class));
+ }
+}
diff --git a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentCopyXML.java b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentCopyXML.java
new file mode 100644
index 0000000000..74d2a92368
--- /dev/null
+++ b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentCopyXML.java
@@ -0,0 +1,71 @@
+/*
+ * 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 org.junit.Test;
+
+/**
+ * The purpose of this class is to test the automatic deployment features of the
+ * {@link HostConfig} implementation.
+ */
+public class TestHostConfigAutomaticDeploymentCopyXML extends HostConfigAutomaticDeploymentBaseTest {
+
+ /*
+ * Test context copyXML setting.
+ * If context.copyXML != Host.copyXML the Host wins.
+ * For external WARs, a context.xml must always already exist
+ */
+ @Test
+ public void testCopyXMLFFF() throws Exception {
+ doTestCopyXML(false, false, false, false);
+ }
+
+ @Test
+ public void testCopyXMLFFT() throws Exception {
+ doTestCopyXML(false, false, true, true);
+ }
+
+ @Test
+ public void testCopyXMLFTF() throws Exception {
+ doTestCopyXML(false, true, false, true);
+ }
+
+ @Test
+ public void testCopyXMLFTT() throws Exception {
+ doTestCopyXML(false, true, true, true);
+ }
+
+ @Test
+ public void testCopyXMLTFF() throws Exception {
+ doTestCopyXML(true, false, false, true);
+ }
+
+ @Test
+ public void testCopyXMLTFT() throws Exception {
+ doTestCopyXML(true, false, true, true);
+ }
+
+ @Test
+ public void testCopyXMLTTF() throws Exception {
+ doTestCopyXML(true, true, false, true);
+ }
+
+ @Test
+ public void testCopyXMLTTT() throws Exception {
+ doTestCopyXML(true, true, true, true);
+ }
+}
diff --git a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentDeleteA.java b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentDeleteA.java
new file mode 100644
index 0000000000..e6ff4db840
--- /dev/null
+++ b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentDeleteA.java
@@ -0,0 +1,62 @@
+/*
+ * 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 org.junit.Test;
+
+/**
+ * The purpose of this class is to test the automatic deployment features of the
+ * {@link HostConfig} implementation.
+ */
+public class TestHostConfigAutomaticDeploymentDeleteA extends HostConfigAutomaticDeploymentBaseTest {
+
+ /*
+ * 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
+ *
+ * Notes: 1. The DIR will be re-created since unpackWARs is 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);
+ }
+}
diff --git a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentDeleteB.java b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentDeleteB.java
new file mode 100644
index 0000000000..cac8d073b2
--- /dev/null
+++ b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentDeleteB.java
@@ -0,0 +1,113 @@
+/*
+ * 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 org.junit.Test;
+
+import org.apache.catalina.core.StandardHost;
+
+/**
+ * The purpose of this class is to test the automatic deployment features of the
+ * {@link HostConfig} implementation.
+ */
+public class TestHostConfigAutomaticDeploymentDeleteB extends HostConfigAutomaticDeploymentBaseTest {
+
+ /*
+ * Expected behaviour for the deletion of files.
+ *
+ * Artifacts present Artifact Artifacts remaining
+ * XML WAR EXT DIR Removed XML WAR EXT DIR Notes
+ * 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
+ *
+ * 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 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);
+ }
+}
diff --git a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentDeleteC.java b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentDeleteC.java
new file mode 100644
index 0000000000..61ec60db09
--- /dev/null
+++ b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentDeleteC.java
@@ -0,0 +1,101 @@
+/*
+ * 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 org.junit.Test;
+
+import org.apache.catalina.core.StandardHost;
+
+/**
+ * The purpose of this class is to test the automatic deployment features of the
+ * {@link HostConfig} implementation.
+ */
+public class TestHostConfigAutomaticDeploymentDeleteC extends HostConfigAutomaticDeploymentBaseTest {
+
+ /*
+ * Expected behaviour for the deletion of files.
+ *
+ * Artifacts present Artifact Artifacts remaining
+ * XML WAR EXT DIR Removed XML WAR EXT DIR Notes
+ * 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 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);
+ }
+}
diff --git a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentDir.java b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentDir.java
new file mode 100644
index 0000000000..4f2fedca4c
--- /dev/null
+++ b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentDir.java
@@ -0,0 +1,89 @@
+/*
+ * 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 org.junit.Test;
+
+import org.apache.catalina.LifecycleState;
+
+/**
+ * The purpose of this class is to test the automatic deployment features of the
+ * {@link HostConfig} implementation.
+ */
+public class TestHostConfigAutomaticDeploymentDir extends HostConfigAutomaticDeploymentBaseTest {
+
+ /*
+ * 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);
+ }
+}
diff --git a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentDirXml.java b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentDirXml.java
new file mode 100644
index 0000000000..8cd1a7b95a
--- /dev/null
+++ b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentDirXml.java
@@ -0,0 +1,91 @@
+/*
+ * 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 org.junit.Test;
+
+import org.apache.catalina.LifecycleState;
+
+/**
+ * The purpose of this class is to test the automatic deployment features of the
+ * {@link HostConfig} implementation.
+ */
+public class TestHostConfigAutomaticDeploymentDirXml extends HostConfigAutomaticDeploymentBaseTest {
+
+ /*
+ * 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);
+ }
+}
diff --git a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentModification.java b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentModification.java
new file mode 100644
index 0000000000..65e5755d78
--- /dev/null
+++ b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentModification.java
@@ -0,0 +1,167 @@
+/*
+ * 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 org.junit.Test;
+
+import org.apache.catalina.LifecycleState;
+
+/**
+ * The purpose of this class is to test the automatic deployment features of the
+ * {@link HostConfig} implementation.
+ */
+public class TestHostConfigAutomaticDeploymentModification extends HostConfigAutomaticDeploymentBaseTest {
+
+ /*
+ * Expected behaviour for modification of files.
+ *
+ * Artifacts present Artifact Artifacts remaining
+ * XML WAR EXT DIR Modified XML WAR EXT DIR Action
+ * N N N Y DIR - - - M None
+ * N Y N N WAR - M - - Redeploy
+ * N Y N Y DIR - Y - M None
+ * N Y N Y WAR - M - R Redeploy
+ * Y N N N XML M - - - Redeploy
+ * Y N N Y DIR Y - - M None
+ * Y N N Y XML M - - Y Redeploy
+ * Y N Y N EXT Y - M - Reload if WAR
+ * Y N Y N XML M - Y - Redeploy
+ * Y N Y Y DIR Y - Y M None
+ * Y N Y Y EXT Y - M R Reload
+ * Y N Y Y XML M - Y Y Redeploy
+ * Y Y N N WAR Y M - - Reload
+ * Y Y N N XML M Y - - Redeploy
+ * Y Y N Y DIR Y Y - M None
+ * Y Y N Y WAR Y M - - Reload
+ * Y Y N Y XML M Y - Y Redeploy
+ */
+ @Test
+ public void testModifyDirUpdateDir() throws Exception {
+ doTestModify(false, false, false, false, true, DIR,
+ false, false, true, DIR_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testModifyWarUpdateWar() throws Exception {
+ doTestModify(false, false, false, true, false, WAR,
+ false, true, false, WAR_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testModifyWarDirUpdateDir() throws Exception {
+ // DIR_COOKIE_NAME since Tomcat is going to assume DIR is expanded WAR
+ doTestModify(false, false, false, true, true, DIR,
+ false, true, true, DIR_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testModifyWarDirUpdateWar() throws Exception {
+ doTestModify(false, false, false, true, true, WAR,
+ false, true, true, WAR_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testModifyXmlUpdateXml() throws Exception {
+ doTestModify(true, false, false, false, false, XML,
+ true, false, false, XML_COOKIE_NAME, REDEPLOY,
+ LifecycleState.FAILED);
+ }
+
+ @Test
+ public void testModifyXmlDirUpdateDir() throws Exception {
+ doTestModify(true, false, false, false, true, DIR,
+ true, false, true, XML_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testModifyXmlDirUpdateXml() throws Exception {
+ doTestModify(true, false, false, false, true, XML,
+ true, false, true, XML_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testModifyXmlExtwarUpdateExtwar() throws Exception {
+ doTestModify(true, true, false, false, false, EXT,
+ true, false, false, XML_COOKIE_NAME, RELOAD);
+ }
+
+ @Test
+ public void testModifyXmlExtdirUpdateExtdir() throws Exception {
+ doTestModify(true, false, true, false, false, EXT,
+ true, false, false, XML_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testModifyXmlExtwarUpdateXml() throws Exception {
+ doTestModify(true, true, false, false, false, XML,
+ true, false, false, XML_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testModifyXmlExtdirUpdateXml() throws Exception {
+ doTestModify(true, false, true, false, false, XML,
+ true, false, false, XML_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testModifyXmlExtwarDirUpdateDir() throws Exception {
+ doTestModify(true, true, false, false, true, DIR,
+ true, false, false, XML_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testModifyXmlExtwarDirUpdateExt() throws Exception {
+ doTestModify(true, true, false, false, true, EXT,
+ true, false, true, XML_COOKIE_NAME, RELOAD);
+ }
+
+ @Test
+ public void testModifyXmlExtwarDirUpdateXml() throws Exception {
+ doTestModify(true, true, false, false, true, XML,
+ true, false, false, XML_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testModifyXmlWarUpdateWar() throws Exception {
+ doTestModify(true, false, false, true, false, WAR,
+ true, true, false, XML_COOKIE_NAME, RELOAD);
+ }
+
+ @Test
+ public void testModifyXmlWarUpdateXml() throws Exception {
+ doTestModify(true, false, false, true, false, XML,
+ true, true, false, XML_COOKIE_NAME, REDEPLOY);
+ }
+
+ @Test
+ public void testModifyXmlWarDirUpdateDir() throws Exception {
+ doTestModify(true, false, false, true, true, DIR,
+ true, true, true, XML_COOKIE_NAME, NONE);
+ }
+
+ @Test
+ public void testModifyXmlWarDirUpdateWar() throws Exception {
+ doTestModify(true, false, false, true, true, WAR,
+ true, true, true, XML_COOKIE_NAME, RELOAD);
+ }
+
+ @Test
+ public void testModifyXmlWarDirUpdateXml() throws Exception {
+ doTestModify(true, false, false, true, true, XML,
+ true, true, true, XML_COOKIE_NAME, REDEPLOY);
+ }
+}
diff --git a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentUnpackWAR.java b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentUnpackWAR.java
new file mode 100644
index 0000000000..cdef493490
--- /dev/null
+++ b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentUnpackWAR.java
@@ -0,0 +1,71 @@
+/*
+ * 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 org.junit.Test;
+
+/**
+ * The purpose of this class is to test the automatic deployment features of the
+ * {@link HostConfig} implementation.
+ */
+public class TestHostConfigAutomaticDeploymentUnpackWAR extends HostConfigAutomaticDeploymentBaseTest {
+
+ /*
+ * Test context unpackWAR setting.
+ * If context.getUnpackWAR != Host.getUnpackWARs the Host wins.
+ */
+ @Test
+ public void testUnpackWARFFF() throws Exception {
+ doTestUnpackWAR(false, false, false, false);
+ }
+
+ @Test
+ public void testUnpackWARFFT() throws Exception {
+ doTestUnpackWAR(false, false, true, false);
+ }
+
+ @Test
+ public void testUnpackWARFTF() throws Exception {
+ doTestUnpackWAR(false, true, false, false);
+ }
+
+ @Test
+ public void testUnpackWARFTT() throws Exception {
+ doTestUnpackWAR(false, true, true, false);
+ }
+
+ @Test
+ public void testUnpackWARTFF() throws Exception {
+ doTestUnpackWAR(true, false, false, false);
+ }
+
+ @Test
+ public void testUnpackWARTFT() throws Exception {
+ // External WAR - therefore XML in WAR will be ignored
+ doTestUnpackWAR(true, false, true, true);
+ }
+
+ @Test
+ public void testUnpackWARTTF() throws Exception {
+ doTestUnpackWAR(true, true, false, true);
+ }
+
+ @Test
+ public void testUnpackWARTTT() throws Exception {
+ doTestUnpackWAR(true, true, true, true);
+ }
+}
diff --git a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentUpdateWarOffline.java b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentUpdateWarOffline.java
new file mode 100644
index 0000000000..403c153b35
--- /dev/null
+++ b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentUpdateWarOffline.java
@@ -0,0 +1,73 @@
+/*
+ * 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 org.junit.Test;
+
+/**
+ * The purpose of this class is to test the automatic deployment features of the
+ * {@link HostConfig} implementation.
+ */
+public class TestHostConfigAutomaticDeploymentUpdateWarOffline extends HostConfigAutomaticDeploymentBaseTest {
+
+ @Test
+ public void testUpdateWarOfflineNoContextFF() throws Exception {
+ doTestUpdateWarOffline(WAR_SOURCE, false, false);
+ }
+
+
+ @Test
+ public void testUpdateWarOfflineNoContextTF() throws Exception {
+ doTestUpdateWarOffline(WAR_SOURCE, true, false);
+ }
+
+
+ @Test
+ public void testUpdateWarOfflineNoContextFT() throws Exception {
+ doTestUpdateWarOffline(WAR_SOURCE, false, true);
+ }
+
+
+ @Test
+ public void testUpdateWarOfflineNoContextTT() throws Exception {
+ doTestUpdateWarOffline(WAR_SOURCE, true, true);
+ }
+
+
+ @Test
+ public void testUpdateWarOfflineContextFF() throws Exception {
+ doTestUpdateWarOffline(WAR_XML_SOURCE, false, false);
+ }
+
+
+ @Test
+ public void testUpdateWarOfflineContextTF() throws Exception {
+ doTestUpdateWarOffline(WAR_XML_SOURCE, true, false);
+ }
+
+
+ @Test
+ public void testUpdateWarOfflineContextFT() throws Exception {
+ doTestUpdateWarOffline(WAR_XML_SOURCE, false, true);
+ }
+
+
+ @Test
+ public void testUpdateWarOfflineContextTT() throws Exception {
+ doTestUpdateWarOffline(WAR_XML_SOURCE, true, true);
+ }
+}
diff --git a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentWar.java b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentWar.java
new file mode 100644
index 0000000000..2e95c1fe7d
--- /dev/null
+++ b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentWar.java
@@ -0,0 +1,90 @@
+/*
+ * 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 org.junit.Test;
+
+import org.apache.catalina.LifecycleState;
+
+/**
+ * The purpose of this class is to test the automatic deployment features of the
+ * {@link HostConfig} implementation.
+ */
+public class TestHostConfigAutomaticDeploymentWar extends HostConfigAutomaticDeploymentBaseTest {
+
+ /*
+ * 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);
+ }
+}
diff --git a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentWarXml.java b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentWarXml.java
new file mode 100644
index 0000000000..30cbd28962
--- /dev/null
+++ b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentWarXml.java
@@ -0,0 +1,94 @@
+/*
+ * 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 org.junit.Test;
+
+import org.apache.catalina.LifecycleState;
+
+/**
+ * The purpose of this class is to test the automatic deployment features of the
+ * {@link HostConfig} implementation.
+ */
+public class TestHostConfigAutomaticDeploymentWarXml extends HostConfigAutomaticDeploymentBaseTest {
+
+ /*
+ * 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);
+ }
+}
diff --git a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentXml.java b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentXml.java
new file mode 100644
index 0000000000..30b946f901
--- /dev/null
+++ b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentXml.java
@@ -0,0 +1,91 @@
+/*
+ * 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 org.junit.Test;
+
+import org.apache.catalina.LifecycleState;
+
+/**
+ * The purpose of this class is to test the automatic deployment features of the
+ * {@link HostConfig} implementation.
+ */
+public class TestHostConfigAutomaticDeploymentXml extends HostConfigAutomaticDeploymentBaseTest {
+
+ /*
+ * 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);
+ }
+}
diff --git a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentXmlExternalDirXml.java b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentXmlExternalDirXml.java
new file mode 100644
index 0000000000..fb89c942c0
--- /dev/null
+++ b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentXmlExternalDirXml.java
@@ -0,0 +1,102 @@
+/*
+ * 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 org.junit.Test;
+
+import org.apache.catalina.LifecycleState;
+
+/**
+ * The purpose of this class is to test the automatic deployment features of the
+ * {@link HostConfig} implementation.
+ */
+public class TestHostConfigAutomaticDeploymentXmlExternalDirXml extends HostConfigAutomaticDeploymentBaseTest {
+
+ /*
+ * 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);
+ }
+}
diff --git a/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentXmlExternalWarXml.java b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentXmlExternalWarXml.java
new file mode 100644
index 0000000000..a4df88b3fa
--- /dev/null
+++ b/test/org/apache/catalina/startup/TestHostConfigAutomaticDeploymentXmlExternalWarXml.java
@@ -0,0 +1,105 @@
+/*
+ * 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 org.junit.Test;
+
+import org.apache.catalina.LifecycleState;
+
+/**
+ * The purpose of this class is to test the automatic deployment features of the
+ * {@link HostConfig} implementation.
+ */
+public class TestHostConfigAutomaticDeploymentXmlExternalWarXml extends HostConfigAutomaticDeploymentBaseTest {
+
+ /*
+ * 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);
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org
(tomcat) 02/02: Improvements to French translations. (remm)
Posted by ma...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
markt pushed a commit to branch 11.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git
commit 0fdefcc1a62297e19790621d8fe746524d1cf8a4
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Mon Feb 3 16:46:25 2025 +0000
Improvements to French translations. (remm)
---
java/org/apache/catalina/servlets/LocalStrings_fr.properties | 2 ++
java/org/apache/catalina/startup/LocalStrings_fr.properties | 1 +
webapps/docs/changelog.xml | 3 +++
3 files changed, 6 insertions(+)
diff --git a/java/org/apache/catalina/servlets/LocalStrings_fr.properties b/java/org/apache/catalina/servlets/LocalStrings_fr.properties
index abf744bff6..202ea351b5 100644
--- a/java/org/apache/catalina/servlets/LocalStrings_fr.properties
+++ b/java/org/apache/catalina/servlets/LocalStrings_fr.properties
@@ -45,6 +45,8 @@ defaultServlet.blockExternalEntity2=L''accès à l''entité externe nommée [{0}
defaultServlet.blockExternalSubset=L''accès au sous-ensemble externe de nom [{0}] et de baseURI [{1}] a été bloqué
defaultServlet.directory.parent=Jusqu''à [{0}]
defaultServlet.directory.title=Liste du répertoire pour [{0}]
+defaultServlet.globalXSLTTooBig=Le fichier XSLT global [{0}] est trop grand pour être mis en tampon
+defaultServlet.invalidRedirectStatusCode=Le code de statut de redirection [{0}] est invalide
defaultServlet.missingResource=La ressource demandée [{0}] n''est pas disponible
defaultServlet.noResources=Pas de ressources statiques
defaultServlet.readerCloseFailed=Impossible de fermer le lecteur
diff --git a/java/org/apache/catalina/startup/LocalStrings_fr.properties b/java/org/apache/catalina/startup/LocalStrings_fr.properties
index 5d15950742..e385e85753 100644
--- a/java/org/apache/catalina/startup/LocalStrings_fr.properties
+++ b/java/org/apache/catalina/startup/LocalStrings_fr.properties
@@ -75,6 +75,7 @@ contextConfig.invalidSciHandlesTypes=Impossible de charger la classe [{0}] pour
contextConfig.jarFile=Impossible de traiter les annotations du JAR [{0}]
contextConfig.jspFile.error=Le fichier JSP [{0}] doit commencer par un ''/''
contextConfig.jspFile.warning=WARNING : Le fichier JSP [{0}] doit commencer par un ''/'' dans l''API Servlet 2.4
+contextConfig.loadError=Erreur lors du chargement du code généré
contextConfig.missingRealm=Aucun royaume (realm) n'a été configuré pour réaliser l'authentification
contextConfig.noAntiLocking=La valeur [{0}] configurée pour java.io.tmpdir ne correspond pas à un répertoire valide, le paramètre antiResourceLocking configuré pour l''application [{1}] sera ignoré
contextConfig.noJsp=Le groupe de propriétés JSP pour l''URL [{0}] sera sauté, le Servlet JSP avec le nom [{1}] n''a pas été trouvé
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 77647679ab..67206b716d 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -315,6 +315,9 @@
<update>
Update JSign to 7.0. (markt)
</update>
+ <add>
+ Improvements to French translations. (remm)
+ </add>
</changelog>
</subsection>
</section>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org