From c6767af195cf6683d4c06f66b5a5b062a7cd7f39 Mon Sep 17 00:00:00 2001 From: Brett Porter Date: Fri, 10 Aug 2007 08:36:23 +0000 Subject: [PATCH] [MRM-408] make sure parent directories exist when making a PUT request git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@564508 13f79535-47bb-0310-9956-ffa450edef68 --- archiva-web/archiva-webapp/pom.xml | 11 ++- .../web/repository/ProxiedDavServer.java | 8 ++ .../web/repository/RepositoryServletTest.java | 71 ++++++++++++++++++ .../UnauthenticatedRepositoryServlet.java | 36 +++++++++ .../src/test/resources/artifact.jar | 1 + .../RepositoryServletTest.xml} | 73 +++---------------- 6 files changed, 135 insertions(+), 65 deletions(-) create mode 100644 archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/RepositoryServletTest.java create mode 100644 archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/UnauthenticatedRepositoryServlet.java create mode 100644 archiva-web/archiva-webapp/src/test/resources/artifact.jar rename archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/{servlet/repository/RepositoryAccessTest.xml => repository/RepositoryServletTest.xml} (64%) diff --git a/archiva-web/archiva-webapp/pom.xml b/archiva-web/archiva-webapp/pom.xml index af32fb899..2e0c3f051 100644 --- a/archiva-web/archiva-webapp/pom.xml +++ b/archiva-web/archiva-webapp/pom.xml @@ -18,7 +18,8 @@ ~ under the License. --> - + 4.0.0 org.apache.maven.archiva @@ -211,6 +212,12 @@ activation provided + + httpunit + httpunit + 1.6.2 + test + @@ -392,7 +399,7 @@ - + diff --git a/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/ProxiedDavServer.java b/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/ProxiedDavServer.java index 1b8ecefd0..a31ed1f74 100644 --- a/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/ProxiedDavServer.java +++ b/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/repository/ProxiedDavServer.java @@ -133,6 +133,14 @@ public class ProxiedDavServer fetchContentFromProxies( request ); } } + else + { + File rootDirectory = getRootDirectory(); + if ( rootDirectory != null ) + { + new File( rootDirectory, request.getLogicalResource() ).getParentFile().mkdirs(); + } + } davServer.process( request, response ); } diff --git a/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/RepositoryServletTest.java b/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/RepositoryServletTest.java new file mode 100644 index 000000000..5ff9fc094 --- /dev/null +++ b/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/RepositoryServletTest.java @@ -0,0 +1,71 @@ +package org.apache.maven.archiva.web.repository; + +/* + * 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. + */ + +import com.meterware.httpunit.PutMethodWebRequest; +import com.meterware.httpunit.WebRequest; +import com.meterware.httpunit.WebResponse; +import com.meterware.servletunit.ServletRunner; +import com.meterware.servletunit.ServletUnitClient; +import org.codehaus.plexus.PlexusConstants; +import org.codehaus.plexus.PlexusTestCase; +import org.codehaus.plexus.util.FileUtils; +import org.xml.sax.SAXException; + +import java.io.File; +import java.io.IOException; + +public class RepositoryServletTest + extends PlexusTestCase +{ + private ServletUnitClient sc; + + private String appserverBase; + + protected void setUp() + throws Exception + { + super.setUp(); + + appserverBase = getTestFile( "target/appserver-base" ).getAbsolutePath(); + System.setProperty( "appserver.base", appserverBase ); + System.setProperty( "derby.system.home", appserverBase ); + + ServletRunner sr = new ServletRunner(); + sr.registerServlet( "/repository/*", UnauthenticatedRepositoryServlet.class.getName() ); + sc = sr.newClient(); + sc.getSession( true ).getServletContext().setAttribute( PlexusConstants.PLEXUS_KEY, getContainer() ); + } + + public void testPutWithMissingParentCollection() + throws IOException, SAXException + { + File repository = new File( appserverBase, "data/repositories/internal" ); + FileUtils.deleteDirectory( repository ); + + WebRequest request = new PutMethodWebRequest( "http://localhost/repository/internal/path/to/artifact.jar", + getClass().getResourceAsStream( "/artifact.jar" ), + "application/octet-stream" ); + WebResponse response = sc.getResponse( request ); + assertNotNull( "No response received", response ); + assertEquals( "file contents", "artifact.jar\n", + FileUtils.fileRead( new File( repository, "path/to/artifact.jar" ) ) ); + } +} diff --git a/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/UnauthenticatedRepositoryServlet.java b/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/UnauthenticatedRepositoryServlet.java new file mode 100644 index 000000000..843455e06 --- /dev/null +++ b/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/repository/UnauthenticatedRepositoryServlet.java @@ -0,0 +1,36 @@ +package org.apache.maven.archiva.web.repository; + +import org.codehaus.plexus.webdav.servlet.DavServerRequest; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/* + * 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. + */ + +public class UnauthenticatedRepositoryServlet + extends RepositoryServlet +{ + public boolean isAuthorized( DavServerRequest davRequest, HttpServletResponse response ) + throws ServletException, IOException + { + return true; + } +} diff --git a/archiva-web/archiva-webapp/src/test/resources/artifact.jar b/archiva-web/archiva-webapp/src/test/resources/artifact.jar new file mode 100644 index 000000000..e6f67ee94 --- /dev/null +++ b/archiva-web/archiva-webapp/src/test/resources/artifact.jar @@ -0,0 +1 @@ +artifact.jar diff --git a/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/servlet/repository/RepositoryAccessTest.xml b/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/repository/RepositoryServletTest.xml similarity index 64% rename from archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/servlet/repository/RepositoryAccessTest.xml rename to archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/repository/RepositoryServletTest.xml index 723f4c6b8..403a063b8 100644 --- a/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/servlet/repository/RepositoryAccessTest.xml +++ b/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/repository/RepositoryServletTest.xml @@ -8,7 +8,7 @@ ~ "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 + ~ 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 @@ -25,73 +25,20 @@ --> org.codehaus.plexus.logging.LoggerManager - org.codehaus.plexus.logging.log4j.Log4JLoggerManager + org.codehaus.plexus.logging.slf4j.Slf4jLoggerManager basic + + + org.codehaus.plexus.webdav.DavServerManager + default + org.codehaus.plexus.webdav.DefaultDavServerManager + DefaultDavServerManager - DEBUG - console - - - console - DEBUG - org.apache.log4j.ConsoleAppender - - %r [%t] %-5p %c %x - %m%n - - - - - - org.apache.maven - DEBUG - - - org.codehaus.plexus.security - DEBUG - - - - org.codehaus.plexus.mailsender.MailSender - INFO - - - org.quartz - INFO - - - org.apache.jasper - INFO - - - com.opensymphony.xwork - DEBUG - - - com.opensymphony.webwork - DEBUG - - - org.codehaus.plexus.PlexusContainer - INFO - - - JPOX - WARN - - - freemarker - WARN - - - freemarker - WARN - - + proxied - org.codehaus.plexus.jdo.JdoFactory users @@ -116,7 +63,7 @@ org.apache.derby.jdbc.EmbeddedDriver - jdbc:derby:${basedir}/target/repoaccess/database;create=true + jdbc:derby:${basedir}/target/appserver-base/database;create=true sa -- 2.39.5