Index: archiva-common/src/test/java/org/apache/maven/archiva/common/utils/ChecksumsTest.java =================================================================== --- archiva-common/src/test/java/org/apache/maven/archiva/common/utils/ChecksumsTest.java (revision 611304) +++ archiva-common/src/test/java/org/apache/maven/archiva/common/utils/ChecksumsTest.java (working copy) @@ -19,16 +19,19 @@ * under the License. */ -import org.codehaus.plexus.PlexusTestCase; -import org.codehaus.plexus.util.FileUtils; - import java.io.BufferedReader; import java.io.File; import java.io.FileReader; +import java.io.IOException; +import java.net.URL; +import org.apache.commons.lang.StringUtils; +import org.codehaus.plexus.PlexusTestCase; +import org.codehaus.plexus.util.FileUtils; + /** - * ChecksumsTest - * + * ChecksumsTest + * * @author Joakim Erdfelt * @version $Id$ */ @@ -256,14 +259,14 @@ private File createTestableFiles( String md5State, String sha1State ) throws Exception { - File sourceDir = new File( "src/test/resources/checksums/" ); + File destDir = new File( "target/checksum-tests/" + getName() + "/" ); - FileUtils.copyFileToDirectory( new File( sourceDir, "artifact.jar" ), destDir ); + FileUtils.copyFileToDirectory( ResourceUtils.getResource( "/checksums/artifact.jar" ), destDir ); if ( md5State != null ) { - File md5File = new File( sourceDir, "artifact.jar.md5-" + md5State ); + File md5File = ResourceUtils.getResource( "/checksums/artifact.jar.md5-" + md5State ); assertTrue( "Testable file exists: " + md5File.getName() + ":", md5File.exists() && md5File.isFile() ); File destFile = new File( destDir, "artifact.jar.md5" ); FileUtils.copyFile( md5File, destFile ); @@ -271,7 +274,7 @@ if ( sha1State != null ) { - File sha1File = new File( sourceDir, "artifact.jar.sha1-" + sha1State ); + File sha1File = ResourceUtils.getResource( "/checksums/artifact.jar.sha1-" + sha1State ); assertTrue( "Testable file exists: " + sha1File.getName() + ":", sha1File.exists() && sha1File.isFile() ); File destFile = new File( destDir, "artifact.jar.sha1" ); FileUtils.copyFile( sha1File, destFile ); @@ -281,11 +284,13 @@ return localFile; } + + private Checksums lookupChecksums() throws Exception { - Checksums policy = (Checksums) lookup( Checksums.class ); - assertNotNull( policy ); - return policy; + Checksums checksums = (Checksums) lookup( Checksums.class ); + assertNotNull( checksums ); + return checksums; } } Index: archiva-common/src/test/java/org/apache/maven/archiva/common/utils/ResourceUtils.java =================================================================== --- archiva-common/src/test/java/org/apache/maven/archiva/common/utils/ResourceUtils.java (revision 0) +++ archiva-common/src/test/java/org/apache/maven/archiva/common/utils/ResourceUtils.java (revision 0) @@ -0,0 +1,90 @@ +package org.apache.maven.archiva.common.utils; + +/* + * 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 java.io.File; +import java.io.IOException; +import java.net.URL; + +import org.apache.commons.lang.StringUtils; + +/** + * ResourceUtils + */ +public class ResourceUtils +{ + /** + * Lookup resource at the given path relative to the root of the classpath and if it exists return a file object + * that can be used to access it. + *

+ * At test time the contents of both the src/resources and test/resources dirs are available at the root of the + * classpath. + *

+ * To retrieve the file src/test/resources/sometest/test.properties use getResource("/sometest/test.properties"). + * + * @param resourcePath the path to the resource relative to the root of the classpath + * @return File a file object pointing to the resource on the classpath or null if the resource cannot be found + */ + public static File getResource( String resourcePath ) + throws IOException + { + return getResource( resourcePath, null ); + } + + /** + * Lookup resource at the given path relative to the root of the classpath and if it exists return a file object + * that can be used to access it. + *

+ * At test time the contents of both the src/resources and test/resources dirs are available at the root of the + * classpath. + *

+ * To retrieve the file src/test/resources/sometest/test.properties use getResource("/sometest/test.properties"). + * + * @param resourcePath the path to the resource relative to the root of the classpath + * @param classloader the classloader who's classpath should be searched for the resource + * @return File a file object pointing to the resource on the classpath or null if the resource cannot be found + */ + public static File getResource( String resourcePath, ClassLoader classloader ) + throws IOException + { + File testResource = null; + + if ( StringUtils.isNotBlank( resourcePath ) ) + { + // make sure the retrieval is relative to the root of the classpath + resourcePath = resourcePath.startsWith( "/" ) ? resourcePath : "/" + resourcePath; + + URL resourceUrl = getResourceUrl( resourcePath, classloader ); + if ( resourceUrl == null ) + { + throw new IOException( "Could not find test resource at path '" + resourcePath + "'" ); + } + testResource = new File( resourceUrl.getFile() ); + } + + return testResource; + } + + private static URL getResourceUrl( String resourcePath, ClassLoader classloader ) + { + return classloader != null ? classloader.getResource( resourcePath ) + : ResourceUtils.class.getResource( resourcePath ); + } +}