Author: kkolinko
Date: Sun Jul 13 13:43:43 2014
New Revision: 1610197
URL: http://svn.apache.org/r1610197
Log:
Test for add/remove ContextVersion. The issue was reported for Tomcat 7 in
"Time for 7.0.55" thread on dev mailing list.
I see no failures with Tomcat 8.
Modified:
tomcat/trunk/java/org/apache/catalina/mapper/Mapper.java
tomcat/trunk/test/org/apache/catalina/mapper/TestMapper.java
Modified: tomcat/trunk/java/org/apache/catalina/mapper/Mapper.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/mapper/Mapper.java?rev=1610197&r1=1610196&r2=1610197&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/mapper/Mapper.java (original)
+++ tomcat/trunk/java/org/apache/catalina/mapper/Mapper.java Sun Jul 13
13:43:43 2014
@@ -750,7 +750,7 @@ public final class Mapper {
ContextVersion contextVersion = null;
ContextVersion[] contextVersions = context.versions;
- int versionCount = contextVersions.length;
+ final int versionCount = contextVersions.length;
if (versionCount > 1) {
Context[] contextObjects = new Context[contextVersions.length];
for (int i = 0; i < contextObjects.length; i++) {
Modified: tomcat/trunk/test/org/apache/catalina/mapper/TestMapper.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/mapper/TestMapper.java?rev=1610197&r1=1610196&r2=1610197&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/mapper/TestMapper.java (original)
+++ tomcat/trunk/test/org/apache/catalina/mapper/TestMapper.java Sun Jul 13
13:43:43 2014
@@ -22,6 +22,7 @@ import java.util.concurrent.atomic.Atomi
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
@@ -257,6 +258,89 @@ public class TestMapper extends LoggingB
}
@Test
+ public void testAddRemoveContextVersion() throws Exception {
+ final String hostName = "iowejoiejfoiew";
+ final int iowPos = 3;
+ final String contextPath = "/foo/bar";
+ final int contextPos = 2;
+
+ MappingData mappingData = new MappingData();
+ MessageBytes hostMB = MessageBytes.newInstance();
+ MessageBytes uriMB = MessageBytes.newInstance();
+ hostMB.setString(hostName);
+ uriMB.setString("/foo/bar/blah/bobou/foo");
+
+ // Verifying configuration created by setUp()
+ Mapper.MappedHost mappedHost = mapper.hosts[iowPos];
+ assertEquals(hostName, mappedHost.name);
+ Mapper.MappedContext mappedContext =
mappedHost.contextList.contexts[contextPos];
+ assertEquals(contextPath, mappedContext.name);
+ assertEquals(1, mappedContext.versions.length);
+ assertEquals("0", mappedContext.versions[0].name);
+ Host oldHost = mappedHost.object;
+ Context oldContext = mappedContext.versions[0].object;
+
+ mappingData.recycle();
+ mapper.map(hostMB, uriMB, null, mappingData);
+ assertEquals("blah7", mappingData.host.getName());
+ assertEquals("context2", mappingData.context.getName());
+
+ Context newContext = createContext("newContext");
+ mapper.addContextVersion(
+ hostName,
+ oldHost,
+ contextPath,
+ "1",
+ newContext,
+ null,
+ null,
+ Arrays.asList(new WrapperMappingInfo[] { new
WrapperMappingInfo(
+ "/", createWrapper("default"), false, false) }));
+
+ assertEquals(2, mappedContext.versions.length);
+ assertEquals("0", mappedContext.versions[0].name);
+ assertEquals("1", mappedContext.versions[1].name);
+ mappingData.recycle();
+ mapper.map(hostMB, uriMB, null, mappingData);
+ assertEquals("newContext", mappingData.context.getName());
+
+ mapper.removeContextVersion(oldContext, hostName, contextPath, "0");
+
+ assertEquals(1, mappedContext.versions.length);
+ assertEquals("1", mappedContext.versions[0].name);
+ mappingData.recycle();
+ mapper.map(hostMB, uriMB, null, mappingData);
+ assertEquals("newContext", mappingData.context.getName());
+
+ mapper.removeContextVersion(oldContext, hostName, contextPath, "1");
+
+ assertNotSame(mappedContext,
mappedHost.contextList.contexts[contextPos]);
+ assertEquals("/foo/bar/bla",
mappedHost.contextList.contexts[contextPos].name);
+ mappingData.recycle();
+ mapper.map(hostMB, uriMB, null, mappingData);
+ assertEquals("context1", mappingData.context.getName());
+
+ mapper.addContextVersion(
+ hostName,
+ oldHost,
+ contextPath,
+ "0",
+ newContext,
+ null,
+ null,
+ Arrays.asList(new WrapperMappingInfo[] { new
WrapperMappingInfo(
+ "/", createWrapper("default"), false, false) }));
+ mappedContext = mappedHost.contextList.contexts[contextPos];
+
+ assertEquals(contextPath, mappedContext.name);
+ assertEquals(1, mappedContext.versions.length);
+ assertEquals("0", mappedContext.versions[0].name);
+ mappingData.recycle();
+ mapper.map(hostMB, uriMB, null, mappingData);
+ assertEquals("newContext", mappingData.context.getName());
+ }
+
+ @Test
public void testContextListConcurrencyBug56653() throws Exception {
final Host host = createHost("localhost");
final Context contextRoot = createContext("ROOT");
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]