From 9c341da0054a68f9152642516f3d27b8cafbf9d2 Mon Sep 17 00:00:00 2001 From: Brett Porter Date: Thu, 20 Mar 2008 00:54:43 +0000 Subject: [PATCH] [MRM-642] don't rely on relative paths for tests Submitted by Stephen Gargan Merged from: r638988 on archiva-1.0.x git-svn-id: https://svn.apache.org/repos/asf/maven/archiva/trunk@639102 13f79535-47bb-0310-9956-ffa450edef68 --- .../archiva/common/utils/ChecksumsTest.java | 18 ++-- .../archiva/common/utils/ResourceUtils.java | 90 +++++++++++++++++++ 2 files changed, 99 insertions(+), 9 deletions(-) create mode 100644 archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/utils/ResourceUtils.java diff --git a/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/utils/ChecksumsTest.java b/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/utils/ChecksumsTest.java index 6123c7786..aaad6b4d4 100644 --- a/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/utils/ChecksumsTest.java +++ b/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/utils/ChecksumsTest.java @@ -27,8 +27,8 @@ import java.io.File; import java.io.FileReader; /** - * ChecksumsTest - * + * ChecksumsTest + * * @author Joakim Erdfelt * @version $Id$ */ @@ -256,14 +256,14 @@ public class ChecksumsTest 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 +271,7 @@ public class ChecksumsTest 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 ); @@ -284,8 +284,8 @@ public class ChecksumsTest 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; } } diff --git a/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/utils/ResourceUtils.java b/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/utils/ResourceUtils.java new file mode 100644 index 000000000..db2a0dc27 --- /dev/null +++ b/archiva-base/archiva-common/src/test/java/org/apache/maven/archiva/common/utils/ResourceUtils.java @@ -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 org.apache.commons.lang.StringUtils; + +import java.io.File; +import java.io.IOException; +import java.net.URL; + +/** + * 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 ); + } +} -- 2.39.5