Author: markt
Date: Thu Sep 13 21:50:33 2012
New Revision: 1384557
URL: http://svn.apache.org/viewvc?rev=1384557&view=rev
Log:
Add unit tests for DirResourceSets mounted below the web app root. Fixed a
couple of identified failures including an nasty edge case at the root of the
mounted DirResourceSet
Added:
tomcat/sandbox/trunk-resources/test/org/apache/catalina/webresources/TestDirResourceSetMount.java
(with props)
Modified:
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/DirResourceSet.java
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/FileResource.java
tomcat/sandbox/trunk-resources/test/org/apache/catalina/webresources/TestDirResourceSet.java
Modified:
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/DirResourceSet.java
URL:
http://svn.apache.org/viewvc/tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/DirResourceSet.java?rev=1384557&r1=1384556&r2=1384557&view=diff
==============================================================================
---
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/DirResourceSet.java
(original)
+++
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/DirResourceSet.java
Thu Sep 13 21:50:33 2012
@@ -151,7 +151,13 @@ public class DirResourceSet extends Abst
sm.getString("dirResourceSet.writeNpe"));
}
- File dest = new File(base, path);
+ File dest = null;
+ if (path.startsWith(webAppMount)) {
+ dest = new File(base, path.substring(webAppMount.length()));
+ } else {
+ return false;
+ }
+
if (dest.exists()) {
throw new IllegalArgumentException(
sm.getString("dirResourceSet.writeExists"));
Modified:
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/FileResource.java
URL:
http://svn.apache.org/viewvc/tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/FileResource.java?rev=1384557&r1=1384556&r2=1384557&view=diff
==============================================================================
---
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/FileResource.java
(original)
+++
tomcat/sandbox/trunk-resources/java/org/apache/catalina/webresources/FileResource.java
Thu Sep 13 21:50:33 2012
@@ -35,11 +35,29 @@ public class FileResource extends Abstra
private static final Log log = LogFactory.getLog(FileResource.class);
private final File resource;
+ private final String name;
public FileResource(WebResourceRoot root, File resource,
String webAppPath) {
super(root,webAppPath);
this.resource = resource;
+
+ if (webAppPath.charAt(webAppPath.length() - 1) == '/') {
+ String realName = resource.getName() + '/';
+ if (webAppPath.endsWith(realName)) {
+ name = resource.getName();
+ } else {
+ // This is the root directory of a mounted ResourceSet
+ // Need to return the mounted name, not the real name
+ int endOfName = webAppPath.length() - 1;
+ name = webAppPath.substring(
+ webAppPath.lastIndexOf("/", endOfName - 1) + 1,
+ endOfName);
+ }
+ } else {
+ // Must be a file
+ name = resource.getName();
+ }
}
@Override
@@ -69,7 +87,7 @@ public class FileResource extends Abstra
@Override
public String getName() {
- return resource.getName();
+ return name;
}
@Override
Modified:
tomcat/sandbox/trunk-resources/test/org/apache/catalina/webresources/TestDirResourceSet.java
URL:
http://svn.apache.org/viewvc/tomcat/sandbox/trunk-resources/test/org/apache/catalina/webresources/TestDirResourceSet.java?rev=1384557&r1=1384556&r2=1384557&view=diff
==============================================================================
---
tomcat/sandbox/trunk-resources/test/org/apache/catalina/webresources/TestDirResourceSet.java
(original)
+++
tomcat/sandbox/trunk-resources/test/org/apache/catalina/webresources/TestDirResourceSet.java
Thu Sep 13 21:50:33 2012
@@ -221,7 +221,8 @@ public class TestDirResourceSet {
@Test(expected = IllegalArgumentException.class)
public void testWriteEmpty() {
- dirResourceSet.write("", null);
+ InputStream is = new ByteArrayInputStream("test".getBytes());
+ dirResourceSet.write("", is);
}
@Test(expected = IllegalArgumentException.class)
Added:
tomcat/sandbox/trunk-resources/test/org/apache/catalina/webresources/TestDirResourceSetMount.java
URL:
http://svn.apache.org/viewvc/tomcat/sandbox/trunk-resources/test/org/apache/catalina/webresources/TestDirResourceSetMount.java?rev=1384557&view=auto
==============================================================================
---
tomcat/sandbox/trunk-resources/test/org/apache/catalina/webresources/TestDirResourceSetMount.java
(added)
+++
tomcat/sandbox/trunk-resources/test/org/apache/catalina/webresources/TestDirResourceSetMount.java
Thu Sep 13 21:50:33 2012
@@ -0,0 +1,300 @@
+/*
+ * 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.webresources;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.InputStream;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import org.apache.catalina.WebResource;
+
+public class TestDirResourceSetMount {
+
+ private DirResourceSet dirResourceSet;
+
+ @Before
+ public void setup() {
+ File f = new File("test/webresources");
+ dirResourceSet = new DirResourceSet(
+ new TesterWebResourceRoot(), f, "/mount", "");
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testGetResourceEmpty() {
+ dirResourceSet.getResource("");
+ }
+
+ @Test
+ public void testGetResourceAbove() {
+ WebResource webResource = dirResourceSet.getResource("/");
+ Assert.assertFalse(webResource.exists());
+ }
+
+ @Test
+ public void testGetResourceRoot() {
+ WebResource webResource = dirResourceSet.getResource("/mount");
+ Assert.assertTrue(webResource.isDirectory());
+ Assert.assertEquals("mount", webResource.getName());
+ Assert.assertEquals("/mount/", webResource.getWebappPath());
+ }
+
+ @Test
+ public void testGetResourceDirA() {
+ WebResource webResource = dirResourceSet.getResource("/mount/d1");
+ Assert.assertTrue(webResource.isDirectory());
+ Assert.assertEquals("d1", webResource.getName());
+ Assert.assertEquals("/mount/d1/", webResource.getWebappPath());
+ }
+
+ @Test
+ public void testGetResourceDirB() {
+ WebResource webResource = dirResourceSet.getResource("/mount/d1/");
+ Assert.assertTrue(webResource.isDirectory());
+ Assert.assertEquals("d1", webResource.getName());
+ Assert.assertEquals("/mount/d1/", webResource.getWebappPath());
+ }
+
+ @Test
+ public void testGetResourceFile() {
+ WebResource webResource =
+ dirResourceSet.getResource("/mount/d1/d1-f1.txt");
+ Assert.assertTrue(webResource.isFile());
+ Assert.assertEquals("d1-f1.txt", webResource.getName());
+ Assert.assertEquals("/mount/d1/d1-f1.txt",
webResource.getWebappPath());
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testListEmpty() {
+ dirResourceSet.list("");
+ }
+
+ @Test
+ public void testListAbove() {
+ String[] results = dirResourceSet.list("/");
+
+ Assert.assertNotNull(results);
+ Assert.assertEquals(0, results.length);
+ }
+
+ @Test
+ public void testListRoot() {
+ String[] results = dirResourceSet.list("/mount");
+
+ Set<String> expected = new HashSet<>();
+ expected.add("d1");
+ expected.add("d2");
+ expected.add("f1.txt");
+ expected.add("f2.txt");
+
+ for (String result : results) {
+ Assert.assertTrue(result, expected.remove(result));
+ }
+ Assert.assertEquals(0, expected.size());
+ }
+
+ @Test
+ public void testListDirA() {
+ String[] results = dirResourceSet.list("/mount/d1");
+
+ Set<String> expected = new HashSet<>();
+ expected.add("d1-f1.txt");
+
+ for (String result : results) {
+ Assert.assertTrue(result, expected.remove(result));
+ }
+ Assert.assertEquals(0, expected.size());
+ }
+
+ @Test
+ public void testListDirB() {
+ String[] results = dirResourceSet.list("/mount/d1/");
+
+ Set<String> expected = new HashSet<>();
+ expected.add("d1-f1.txt");
+
+ for (String result : results) {
+ Assert.assertTrue(result, expected.remove(result));
+ }
+ Assert.assertEquals(0, expected.size());
+ }
+
+ @Test
+ public void testListFile() {
+ String[] results = dirResourceSet.list("/mount/d1/d1-f1.txt");
+
+ Assert.assertNotNull(results);
+ Assert.assertEquals(0, results.length);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testListWebAppPathsEmpty() {
+ dirResourceSet.listWebAppPaths("");
+ }
+
+ @Test
+ public void testListWebAppPathsAbove() {
+ Set<String> results = dirResourceSet.listWebAppPaths("/");
+
+ Assert.assertEquals(0, results.size());
+ }
+
+ @Test
+ public void testListWebAppPathsRoot() {
+ Set<String> results = dirResourceSet.listWebAppPaths("/mount");
+
+ Set<String> expected = new HashSet<>();
+ expected.add("/mount/d1/");
+ expected.add("/mount/d2/");
+ expected.add("/mount/f1.txt");
+ expected.add("/mount/f2.txt");
+
+ for (String result : results) {
+ Assert.assertTrue(result, expected.remove(result));
+ }
+ Assert.assertEquals(0, expected.size());
+ }
+
+ @Test
+ public void testListWebAppPathsDirA() {
+ Set<String> results = dirResourceSet.listWebAppPaths("/mount/d1");
+
+ Set<String> expected = new HashSet<>();
+ expected.add("/mount/d1/d1-f1.txt");
+
+ for (String result : results) {
+ Assert.assertTrue(result, expected.remove(result));
+ }
+ Assert.assertEquals(0, expected.size());
+ }
+
+ @Test
+ public void testListWebAppPathsDirB() {
+ Set<String> results = dirResourceSet.listWebAppPaths("/mount/d1/");
+
+ Set<String> expected = new HashSet<>();
+ expected.add("/mount/d1/d1-f1.txt");
+
+ for (String result : results) {
+ Assert.assertTrue(result, expected.remove(result));
+ }
+ Assert.assertEquals(0, expected.size());
+ }
+
+ @Test
+ public void testListWebAppPathsFile() {
+ Set<String> results =
+ dirResourceSet.listWebAppPaths("/mount/d1/d1-f1.txt");
+
+ Assert.assertEquals(0, results.size());
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testMkdirEmpty() {
+ dirResourceSet.mkdir("");
+ }
+
+ @Test
+ public void testMkdirAbove() {
+ Assert.assertFalse(dirResourceSet.mkdir("/"));
+ }
+
+ @Test
+ public void testMkdirRoot() {
+ Assert.assertFalse(dirResourceSet.mkdir("/mount"));
+ }
+
+ @Test
+ public void testMkdirDirA() {
+ Assert.assertFalse(dirResourceSet.mkdir("/mount/d1"));
+ }
+
+ @Test
+ public void testMkdirDirB() {
+ Assert.assertFalse(dirResourceSet.mkdir("/mount/d1/"));
+ }
+
+ @Test
+ public void testMkdirFile() {
+ Assert.assertFalse(dirResourceSet.mkdir("/mount/d1/d1-f1.txt"));
+ }
+
+ @Test
+ public void testMkdirNew() {
+ Assert.assertTrue(dirResourceSet.mkdir("/mount/new-test"));
+
+ File file = new File("test/webresources/new-test");
+ Assert.assertTrue(file.isDirectory());
+ Assert.assertTrue(file.delete());
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testWriteEmpty() {
+ InputStream is = new ByteArrayInputStream("test".getBytes());
+ dirResourceSet.write("", is);
+ }
+
+ @Test
+ public void testWriteAbove() {
+ InputStream is = new ByteArrayInputStream("test".getBytes());
+ Assert.assertFalse(dirResourceSet.write("/", is));
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testWriteRoot() {
+ InputStream is = new ByteArrayInputStream("test".getBytes());
+ dirResourceSet.write("/mount", is);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testWriteDirA() {
+ InputStream is = new ByteArrayInputStream("test".getBytes());
+ dirResourceSet.write("/mount/d1", is);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testWriteDirB() {
+ InputStream is = new ByteArrayInputStream("test".getBytes());
+ dirResourceSet.write("/mount/d1/", is);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void testWriteFile() {
+ InputStream is = new ByteArrayInputStream("test".getBytes());
+ dirResourceSet.write("/mount/d1/d1-f1.txt", is);
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void testWriteNew() {
+ dirResourceSet.write("/mount/new-test", null);
+ }
+
+ @Test
+ public void testWrite() {
+ InputStream is = new ByteArrayInputStream("test".getBytes());
+ Assert.assertTrue(dirResourceSet.write("/mount/new-test", is));
+
+ File file = new File("test/webresources/new-test");
+ Assert.assertTrue(file.exists());
+ Assert.assertTrue(file.delete());
+ }
+}
Propchange:
tomcat/sandbox/trunk-resources/test/org/apache/catalina/webresources/TestDirResourceSetMount.java
------------------------------------------------------------------------------
svn:eol-style = native
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]