diff --git a/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/AbstractWebDAVTest.java b/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/AbstractWebDAVTest.java index 0e455c9ff..464b4fe17 100644 --- a/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/AbstractWebDAVTest.java +++ b/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/AbstractWebDAVTest.java @@ -49,6 +49,23 @@ public class AbstractWebDAVTest extends TestCase * Root webdav view. */ public static final String ROOT = "http://localhost:8080/xwiki/webdav"; + + /** Build a correct escaped URI from the URI constructor */ + + /** URI scheme */ + public static final String URI_SCHEME = "http"; + + /** URI host */ + public static final String URI_HOST = "localhost"; + + /** URI port */ + public static final int URI_PORT = 8080; + + /** URI webdav root */ + public static final String URI_WEBDAV_ROOT = "/xwiki/webdav"; + + /** location of the spaces view (uri construction) */ + public static final String PATH_SPACES_VIEW = "/spaces"; /** * location of the home view. diff --git a/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/DefaultWebDAVTest.java b/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/DefaultWebDAVTest.java index 59784839b..aaff9a1a1 100644 --- a/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/DefaultWebDAVTest.java +++ b/xwiki-enterprise-test/xwiki-enterprise-test-webdav/src/test/it/org/xwiki/test/webdav/DefaultWebDAVTest.java @@ -215,9 +215,62 @@ public void testUpdatePageWikiContent() */ public void testMakingAttachment() { - String spaceUrl = SPACES + "/TestSpace"; - String pageUrl = spaceUrl + "/TestPage"; - String attachmentUrl = pageUrl + "/attachment.txt"; + testMakingAttachmentFile("attachment.txt","normal text file"); + } + + /** + * Test making attachments with unsafe characters in filename. + * These characters should also always be encoded. + */ + public void testMakingAttachmentsUnsafeChars() + { + testMakingAttachmentFile("my attach.txt","space"); + testMakingAttachmentFile("[bracket].txt","brackets"); + testMakingAttachmentFile("{brace}.txt","braces"); + testMakingAttachmentFile("^caret.txt","caret"); + testMakingAttachmentFile("#pound.txt","pound"); + testMakingAttachmentFile("%percent.txt","percent"); + testMakingAttachmentFile("plus+plus.txt","plus"); + } + + /** + * Properly escape the given url path, using RFC 2396. + * This will properly convert encode, and quote illegal characters correctly. + */ + protected String getEscapedUrl(String pagePath){ + String escapedUrl = ""; + try{ + java.net.URI uri = new java.net.URI( + URI_SCHEME, //scheme + null, //no user info + URI_HOST, //host + URI_PORT, //port + pagePath, //path + null, //no query + null); //no #fragment + + escapedUrl = uri.toASCIIString(); + }catch(java.net.URISyntaxException ue){ + fail("Could not escape url: '"+pagePath+"' "+ue.getMessage()); + } + + return escapedUrl; + } + + /** + * Test making attachment with filename given under /TestSpace/TestPage + */ + protected void testMakingAttachmentFile(String filename, String testing) + { + String spaceUrl = getEscapedUrl( + URI_WEBDAV_ROOT + PATH_SPACES_VIEW + "/TestSpace"); + + String pageUrl = getEscapedUrl( + URI_WEBDAV_ROOT + PATH_SPACES_VIEW + "/TestSpace/TestPage"); + + String attachmentUrl = getEscapedUrl( + URI_WEBDAV_ROOT + PATH_SPACES_VIEW + "/TestSpace/TestPage/" + filename); + String attachmentContent = "Attachment Content"; DeleteMethod deleteMethod = new DeleteMethod(); deleteMethod.setDoAuthentication(true); @@ -250,9 +303,9 @@ public void testMakingAttachment() deleteMethod.setPath(spaceUrl); assertEquals(DavServletResponse.SC_NO_CONTENT, getHttpClient().executeMethod(deleteMethod)); } catch (HttpException ex) { - fail(ex.getMessage()); + fail("Failed '"+testing+"' attachment: "+ex.getMessage()); } catch (IOException ex) { - fail(ex.getMessage()); + fail("Failed '"+testing+"' attachment: "+ex.getMessage()); } - } + } }