You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by jo...@apache.org on 2007/10/31 23:47:55 UTC
svn commit: r590858 - in /maven/archiva/trunk/archiva-base:
archiva-policies/src/main/java/org/apache/maven/archiva/policies/
archiva-policies/src/test/java/org/apache/maven/archiva/policies/
archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/
Author: joakime
Date: Wed Oct 31 15:47:50 2007
New Revision: 590858
URL: http://svn.apache.org/viewvc?rev=590858&view=rev
Log:
[MRM-577] Release policy of disabled fails all metadata requests.
Fixing release / snapshot policies from applying tests on maven-metadata.xml files.
Creating unit tests for release / snapshot policies.
Switching from boolean return on .applyPolicy() to throwing exception, to gain better logging of why the transfer failed.
Logging policy failures better.
Added:
maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PolicyConfigurationException.java (with props)
maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PolicyViolationException.java (with props)
maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/ReleasePolicyTest.java (with props)
maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/SnapshotsPolicyTest.java (with props)
Removed:
maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/AllTests.java
Modified:
maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/AbstractUpdatePolicy.java
maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/CachedFailuresPolicy.java
maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/ChecksumPolicy.java
maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/DownloadPolicy.java
maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PostDownloadPolicy.java
maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PreDownloadPolicy.java
maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/CachedFailuresPolicyTest.java
maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/ChecksumPolicyTest.java
maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultRepositoryProxyConnectors.java
Modified: maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/AbstractUpdatePolicy.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/AbstractUpdatePolicy.java?rev=590858&r1=590857&r2=590858&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/AbstractUpdatePolicy.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/AbstractUpdatePolicy.java Wed Oct 31 15:47:50 2007
@@ -76,7 +76,7 @@
*/
public static final String ONCE = "once";
- private List options = new ArrayList();
+ private List<String> options = new ArrayList<String>();
public AbstractUpdatePolicy()
{
@@ -91,13 +91,20 @@
protected abstract String getUpdateMode();
- public List getOptions()
+ public List<String> getOptions()
{
return options;
}
- public boolean applyPolicy( String policySetting, Properties request, File localFile )
+ public void applyPolicy( String policySetting, Properties request, File localFile )
+ throws PolicyViolationException, PolicyConfigurationException
{
+ if ( !StringUtils.equals( request.getProperty( "filetype" ), "artifact" ) )
+ {
+ // Only process artifact file types.
+ return;
+ }
+
String version = request.getProperty( "version", "" );
boolean isSnapshotVersion = false;
@@ -108,50 +115,48 @@
if ( !options.contains( policySetting ) )
{
- // No valid code? false it is then.
- getLogger().error( "Unknown artifact-update policyCode [" + policySetting + "]" );
- return false;
+ // Not a valid code.
+ throw new PolicyConfigurationException( "Unknown " + getUpdateMode() + " policy setting [" + policySetting
+ + "], valid settings are [" + StringUtils.join( options.iterator(), "," ) + "]" );
}
if ( IGNORED.equals( policySetting ) )
{
// Ignored means ok to update.
getLogger().debug( "OK to update, " + getUpdateMode() + " policy set to IGNORED." );
- return true;
+ return;
}
// Test for mismatches.
if ( !isSnapshotVersion && isSnapshotPolicy() )
{
getLogger().debug( "OK to update, snapshot policy does not apply for non-snapshot versions." );
- return true;
+ return;
}
if ( isSnapshotVersion && !isSnapshotPolicy() )
{
getLogger().debug( "OK to update, release policy does not apply for snapshot versions." );
- return true;
+ return;
}
if ( DISABLED.equals( policySetting ) )
{
// Disabled means no.
- getLogger().debug( "NO to update, " + getUpdateMode() + " policy set to DISABLED." );
- return false;
+ throw new PolicyViolationException( "NO to update, " + getUpdateMode() + " policy set to DISABLED." );
}
if ( !localFile.exists() )
{
// No file means it's ok.
getLogger().debug( "OK to update " + getUpdateMode() + ", local file does not exist." );
- return true;
+ return;
}
if ( ONCE.equals( policySetting ) )
{
// File exists, but policy is once.
- getLogger().debug( "NO to update" + getUpdateMode() + ", local file exist (and policy is ONCE)." );
- return false;
+ throw new PolicyViolationException( "NO to update " + getUpdateMode() + ", policy is ONCE, and local file exist." );
}
if ( DAILY.equals( policySetting ) )
@@ -161,7 +166,16 @@
Calendar fileCal = Calendar.getInstance();
fileCal.setTimeInMillis( localFile.lastModified() );
- return cal.after( fileCal );
+ if( cal.after( fileCal ) )
+ {
+ // Its ok.
+ return;
+ }
+ else
+ {
+ throw new PolicyViolationException( "NO to update " + getUpdateMode()
+ + ", policy is DAILY, local file exist, and has been updated within the last day." );
+ }
}
if ( HOURLY.equals( policySetting ) )
@@ -171,10 +185,19 @@
Calendar fileCal = Calendar.getInstance();
fileCal.setTimeInMillis( localFile.lastModified() );
- return cal.after( fileCal );
+ if( cal.after( fileCal ) )
+ {
+ // Its ok.
+ return;
+ }
+ else
+ {
+ throw new PolicyViolationException( "NO to update " + getUpdateMode()
+ + ", policy is HOURLY, local file exist, and has been updated within the last hour." );
+ }
}
- getLogger().error( "Unhandled policyCode [" + policySetting + "]" );
- return false;
+ throw new PolicyConfigurationException( "Unable to process " + getUpdateMode()
+ + " policy of [" + policySetting + "], please file a bug report." );
}
}
Modified: maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/CachedFailuresPolicy.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/CachedFailuresPolicy.java?rev=590858&r1=590857&r2=590858&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/CachedFailuresPolicy.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/CachedFailuresPolicy.java Wed Oct 31 15:47:50 2007
@@ -52,7 +52,7 @@
*/
private UrlFailureCache urlFailureCache;
- private List options = new ArrayList();
+ private List<String> options = new ArrayList<String>();
public CachedFailuresPolicy()
{
@@ -60,20 +60,21 @@
options.add( CACHED );
}
- public boolean applyPolicy( String policySetting, Properties request, File localFile )
+ public void applyPolicy( String policySetting, Properties request, File localFile )
+ throws PolicyViolationException, PolicyConfigurationException
{
if ( !options.contains( policySetting ) )
{
- // No valid code? false it is then.
- getLogger().error( "Unknown check-failures policyCode [" + policySetting + "]" );
- return false;
+ // Not a valid code.
+ throw new PolicyConfigurationException( "Unknown cache-failues policy setting [" + policySetting
+ + "], valid settings are [" + StringUtils.join( options.iterator(), "," ) + "]" );
}
if ( IGNORED.equals( policySetting ) )
{
// Ignore.
getLogger().debug( "OK to fetch, check-failures policy set to IGNORED." );
- return true;
+ return;
}
String url = request.getProperty( "url" );
@@ -82,14 +83,11 @@
{
if ( urlFailureCache.hasFailedBefore( url ) )
{
- getLogger().debug( "NO to fetch, check-failures detected previous failure on url: " + url );
- return false;
+ throw new PolicyViolationException( "NO to fetch, check-failures detected previous failure on url: " + url );
}
}
getLogger().debug( "OK to fetch, check-failures detected no issues." );
-
- return true;
}
public String getDefaultOption()
@@ -102,7 +100,7 @@
return "cache-failures";
}
- public List getOptions()
+ public List<String> getOptions()
{
return options;
}
Modified: maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/ChecksumPolicy.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/ChecksumPolicy.java?rev=590858&r1=590857&r2=590858&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/ChecksumPolicy.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/ChecksumPolicy.java Wed Oct 31 15:47:50 2007
@@ -19,6 +19,7 @@
* under the License.
*/
+import org.apache.commons.lang.StringUtils;
import org.apache.maven.archiva.common.utils.Checksums;
import org.codehaus.plexus.logging.AbstractLogEnabled;
@@ -28,7 +29,8 @@
import java.util.Properties;
/**
- * ChecksumPolicy
+ * ChecksumPolicy - a policy applied after the download to see if the file has been downloaded
+ * successfully and completely (or not).
*
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
* @version $Id$
@@ -68,60 +70,70 @@
options.add( IGNORED );
}
- public boolean applyPolicy( String policySetting, Properties request, File localFile )
+ public void applyPolicy( String policySetting, Properties request, File localFile )
+ throws PolicyViolationException, PolicyConfigurationException
{
if ( !options.contains( policySetting ) )
{
- // No valid code? false it is then.
- getLogger().error( "Unknown checksum policyCode [" + policySetting + "]" );
- return false;
+ // Not a valid code.
+ throw new PolicyConfigurationException( "Unknown checksum policy setting [" + policySetting
+ + "], valid settings are [" + StringUtils.join( options.iterator(), "," ) + "]" );
}
if ( IGNORED.equals( policySetting ) )
{
// Ignore.
- return true;
+ return;
}
if ( !localFile.exists() )
{
// Local File does not exist.
- getLogger().debug( "Local file " + localFile.getAbsolutePath() + " does not exist." );
- return false;
+ throw new PolicyViolationException( "Checksum policy failure, local file " + localFile.getAbsolutePath()
+ + " does not exist to check." );
}
if ( FAIL.equals( policySetting ) )
{
- boolean checksPass = checksums.check( localFile );
- if( ! checksPass )
+ if( checksums.check( localFile ) )
{
- File sha1File = new File( localFile.getAbsolutePath() + ".sha1" );
- File md5File = new File( localFile.getAbsolutePath() + ".md5" );
+ return;
+ }
+
+ File sha1File = new File( localFile.getAbsolutePath() + ".sha1" );
+ File md5File = new File( localFile.getAbsolutePath() + ".md5" );
- // On failure. delete files.
- if ( sha1File.exists() )
- {
- sha1File.delete();
- }
-
- if ( md5File.exists() )
- {
- md5File.delete();
- }
+ // On failure. delete files.
+ if ( sha1File.exists() )
+ {
+ sha1File.delete();
+ }
- localFile.delete();
+ if ( md5File.exists() )
+ {
+ md5File.delete();
}
- return checksPass;
+ localFile.delete();
+ throw new PolicyViolationException( "Checksums do not match, policy set to FAIL, "
+ + "deleting checksum files and local file " + localFile.getAbsolutePath() + "." );
}
if ( FIX.equals( policySetting ) )
{
- return checksums.update( localFile );
+ if( checksums.update( localFile ) )
+ {
+ return;
+ }
+ else
+ {
+ throw new PolicyViolationException( "Checksum policy set to FIX, "
+ + "yet unable to update checksums for local file " + localFile.getAbsolutePath() + "." );
+ }
}
- getLogger().error( "Unhandled policyCode [" + policySetting + "]" );
- return false;
+ throw new PolicyConfigurationException( "Unable to process checksum policy of [" + policySetting
+ + "], please file a bug report." );
}
public String getDefaultOption()
Modified: maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/DownloadPolicy.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/DownloadPolicy.java?rev=590858&r1=590857&r2=590858&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/DownloadPolicy.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/DownloadPolicy.java Wed Oct 31 15:47:50 2007
@@ -67,7 +67,8 @@
* @param request the list of request properties that the policy might use.
* @param localFile
*
- * @return true if the policy passes.
+ * @throws PolicyViolationException if the policy has been violated.
*/
- public boolean applyPolicy( String policySetting, Properties request, File localFile );
+ public void applyPolicy( String policySetting, Properties request, File localFile )
+ throws PolicyViolationException, PolicyConfigurationException;
}
Added: maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PolicyConfigurationException.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PolicyConfigurationException.java?rev=590858&view=auto
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PolicyConfigurationException.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PolicyConfigurationException.java Wed Oct 31 15:47:50 2007
@@ -0,0 +1,44 @@
+package org.apache.maven.archiva.policies;
+
+/*
+ * 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.maven.archiva.common.ArchivaException;
+
+/**
+ * PolicyConfigurationException is thrown when a policy cannot be executed due to a
+ * configuration issue.
+ *
+ * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class PolicyConfigurationException
+ extends ArchivaException
+{
+
+ public PolicyConfigurationException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+ public PolicyConfigurationException( String message )
+ {
+ super( message );
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PolicyConfigurationException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PolicyConfigurationException.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PolicyConfigurationException.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PolicyViolationException.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PolicyViolationException.java?rev=590858&view=auto
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PolicyViolationException.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PolicyViolationException.java Wed Oct 31 15:47:50 2007
@@ -0,0 +1,42 @@
+package org.apache.maven.archiva.policies;
+
+/*
+ * 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.maven.archiva.common.ArchivaException;
+
+/**
+ * PolicyViolationException
+ *
+ * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class PolicyViolationException
+ extends ArchivaException
+{
+ public PolicyViolationException( String message, Throwable cause )
+ {
+ super( message, cause );
+ }
+
+ public PolicyViolationException( String message )
+ {
+ super( message );
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PolicyViolationException.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PolicyViolationException.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PolicyViolationException.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PostDownloadPolicy.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PostDownloadPolicy.java?rev=590858&r1=590857&r2=590858&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PostDownloadPolicy.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PostDownloadPolicy.java Wed Oct 31 15:47:50 2007
@@ -19,7 +19,6 @@
* under the License.
*/
-
import java.io.File;
import java.util.Properties;
@@ -30,7 +29,8 @@
* @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
* @version $Id$
*/
-public interface PostDownloadPolicy extends DownloadPolicy
+public interface PostDownloadPolicy
+ extends DownloadPolicy
{
/**
* Apply the download policy.
@@ -42,7 +42,8 @@
* @param request the list of request properties that the policy might use.
* @param localFile the local file that this policy affects
*
- * @return true if the policy passes. false if not.
+ * @throws PolicyViolationException if the policy has been violated.
*/
- public boolean applyPolicy( String policySetting, Properties request, File localFile );
+ public void applyPolicy( String policySetting, Properties request, File localFile )
+ throws PolicyViolationException, PolicyConfigurationException;
}
Modified: maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PreDownloadPolicy.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PreDownloadPolicy.java?rev=590858&r1=590857&r2=590858&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PreDownloadPolicy.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-policies/src/main/java/org/apache/maven/archiva/policies/PreDownloadPolicy.java Wed Oct 31 15:47:50 2007
@@ -41,7 +41,8 @@
* @param request the list of request properties that the policy might use.
* @param localFile the local file that this policy affects
*
- * @return true if the policy passes. false if not.
+ * @throws PolicyViolationException if the policy has been violated.
*/
- public boolean applyPolicy( String policySetting, Properties request, File localFile );
+ public void applyPolicy( String policySetting, Properties request, File localFile )
+ throws PolicyViolationException, PolicyConfigurationException;
}
Modified: maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/CachedFailuresPolicyTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/CachedFailuresPolicyTest.java?rev=590858&r1=590857&r2=590858&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/CachedFailuresPolicyTest.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/CachedFailuresPolicyTest.java Wed Oct 31 15:47:50 2007
@@ -67,7 +67,7 @@
request.setProperty( "url", "http://a.bad.hostname.maven.org/path/to/resource.txt" );
- assertTrue( policy.applyPolicy( CachedFailuresPolicy.IGNORED, request, localFile ) );
+ policy.applyPolicy( CachedFailuresPolicy.IGNORED, request, localFile );
}
public void testCachedNotInCache()
@@ -79,7 +79,7 @@
request.setProperty( "url", "http://a.bad.hostname.maven.org/path/to/resource.txt" );
- assertTrue( policy.applyPolicy( CachedFailuresPolicy.CACHED, request, localFile ) );
+ policy.applyPolicy( CachedFailuresPolicy.CACHED, request, localFile );
}
public void testCachedInCache()
@@ -97,6 +97,14 @@
request.setProperty( "url", url );
- assertFalse( policy.applyPolicy( CachedFailuresPolicy.CACHED, request, localFile ) );
+ try
+ {
+ policy.applyPolicy( CachedFailuresPolicy.CACHED, request, localFile );
+ fail( "Expected a PolicyViolationException." );
+ }
+ catch ( PolicyViolationException e )
+ {
+ // expected path.
+ }
}
}
Modified: maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/ChecksumPolicyTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/ChecksumPolicyTest.java?rev=590858&r1=590857&r2=590858&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/ChecksumPolicyTest.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/ChecksumPolicyTest.java Wed Oct 31 15:47:50 2007
@@ -155,7 +155,7 @@
File localFile = createTestableFiles( null, null );
Properties request = createRequest();
- assertTrue( policy.applyPolicy( ChecksumPolicy.IGNORED, request, localFile ) );
+ policy.applyPolicy( ChecksumPolicy.IGNORED, request, localFile );
}
private void assertFailSetting( boolean expectedResult, String md5State, String sha1State )
@@ -165,11 +165,18 @@
File localFile = createTestableFiles( md5State, sha1State );
Properties request = createRequest();
- boolean actualResult = policy.applyPolicy( ChecksumPolicy.FAIL, request, localFile );
- String msg = createMessage( ChecksumPolicy.FAIL, md5State, sha1State );
-
- if ( actualResult == false )
+ boolean actualResult;
+
+ try
{
+ policy.applyPolicy( ChecksumPolicy.FAIL, request, localFile );
+ actualResult = true;
+ }
+ catch ( PolicyViolationException e )
+ {
+ actualResult = false;
+ String msg = createMessage( ChecksumPolicy.FAIL, md5State, sha1State );
+
assertFalse( msg + " local file should not exist:", localFile.exists() );
File md5File = new File( localFile.getAbsolutePath() + ".sha1" );
File sha1File = new File( localFile.getAbsolutePath() + ".md5" );
@@ -187,7 +194,18 @@
File localFile = createTestableFiles( md5State, sha1State );
Properties request = createRequest();
- boolean actualResult = policy.applyPolicy( ChecksumPolicy.FIX, request, localFile );
+ boolean actualResult;
+
+ try
+ {
+ policy.applyPolicy( ChecksumPolicy.FIX, request, localFile );
+ actualResult = true;
+ }
+ catch ( PolicyViolationException e )
+ {
+ actualResult = false;
+ }
+
assertEquals( createMessage( ChecksumPolicy.FIX, md5State, sha1State ), expectedResult, actualResult );
// End result should be legitimate SHA1 and MD5 files.
@@ -278,8 +296,8 @@
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() + "/" );
+ File sourceDir = getTestFile( "src/test/resources/checksums/" );
+ File destDir = getTestFile( "target/checksum-tests/" + getName() + "/" );
FileUtils.copyFileToDirectory( new File( sourceDir, "artifact.jar" ), destDir );
Added: maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/ReleasePolicyTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/ReleasePolicyTest.java?rev=590858&view=auto
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/ReleasePolicyTest.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/ReleasePolicyTest.java Wed Oct 31 15:47:50 2007
@@ -0,0 +1,347 @@
+package org.apache.maven.archiva.policies;
+
+/*
+ * 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.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.util.FileUtils;
+
+import java.io.File;
+import java.util.Properties;
+
+/**
+ * ReleasePolicyTest
+ *
+ * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class ReleasePolicyTest
+ extends PlexusTestCase
+{
+ private static final String PATH_VERSION_METADATA = "org/apache/archiva/archiva-testable/1.0-SNAPSHOT/maven-metadata.xml";
+
+ private static final String PATH_PROJECT_METADATA = "org/apache/archiva/archiva-testable/maven-metadata.xml";
+
+ private static final String PATH_SNAPSHOT_ARTIFACT = "org/apache/archiva/archiva-testable/1.0-SNAPSHOT/archiva-testable-1.0-SNAPSHOT.jar";
+
+ private static final String PATH_RELEASE_ARTIFACT = "org/apache/archiva/archiva-testable/2.0/archiva-testable-2.0.jar";
+
+ private static final boolean WITH_LOCAL = true;
+
+ private static final boolean NO_LOCAL = false;
+
+ protected static final long ONE_SECOND = ( 1000 /* milliseconds */);
+
+ protected static final long ONE_MINUTE = ( ONE_SECOND * 60 );
+
+ protected static final long ONE_HOUR = ( ONE_MINUTE * 60 );
+
+ protected static final long ONE_DAY = ( ONE_HOUR * 24 );
+
+ protected static final long OVER_ONE_HOUR = ( ONE_HOUR + ONE_MINUTE );
+
+ protected static final long OVER_ONE_DAY = ( ONE_DAY + ONE_HOUR );
+
+ protected static final long OLDER = ( -1 );
+
+ protected static final long NEWER = 0;
+
+ private long generatedLocalFileUpdateDelta = 0;
+
+ public void testReleasePolicyDailyProjectMetadata()
+ throws Exception
+ {
+ // Pass the policy when working with metadata, no matter what.
+ assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_PROJECT_METADATA, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_PROJECT_METADATA, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = OVER_ONE_DAY;
+ assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_PROJECT_METADATA, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_PROJECT_METADATA, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = ( ONE_HOUR * 22 );
+ assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_PROJECT_METADATA, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_PROJECT_METADATA, WITH_LOCAL );
+ }
+
+ public void testReleasePolicyDailyReleaseArtifact()
+ throws Exception
+ {
+ assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
+ assertReleasesPolicyViolation( ReleasesPolicy.DAILY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = OVER_ONE_DAY;
+ assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = ( ONE_HOUR * 22 );
+ assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
+ assertReleasesPolicyViolation( ReleasesPolicy.DAILY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
+ }
+
+ public void testReleasePolicyDailySnapshotArtifact()
+ throws Exception
+ {
+ assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = OVER_ONE_DAY;
+ assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = ( ONE_HOUR * 22 );
+ assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
+ }
+
+ public void testReleasePolicyDailyVersionedMetadata()
+ throws Exception
+ {
+ // Pass the policy when working with metadata, no matter what.
+ assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_VERSION_METADATA, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_VERSION_METADATA, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = OVER_ONE_DAY;
+ assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_VERSION_METADATA, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_VERSION_METADATA, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = ( ONE_HOUR * 22 );
+ assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_VERSION_METADATA, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.DAILY, PATH_VERSION_METADATA, WITH_LOCAL );
+ }
+
+ public void testReleasePolicyDisabledProjectMetadata()
+ throws Exception
+ {
+ // Pass the policy when working with metadata, no matter what.
+ assertReleasesPolicy( ReleasesPolicy.DISABLED, PATH_PROJECT_METADATA, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.DISABLED, PATH_PROJECT_METADATA, WITH_LOCAL );
+ }
+
+ public void testReleasePolicyDisabledReleaseArtifact()
+ throws Exception
+ {
+ assertReleasesPolicyViolation( ReleasesPolicy.DISABLED, PATH_RELEASE_ARTIFACT, NO_LOCAL );
+ assertReleasesPolicyViolation( ReleasesPolicy.DISABLED, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
+ }
+
+ public void testReleasePolicyDisabledSnapshotArtifact()
+ throws Exception
+ {
+ assertReleasesPolicy( ReleasesPolicy.DISABLED, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.DISABLED, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
+ }
+
+ public void testReleasePolicyDisabledVersionedMetadata()
+ throws Exception
+ {
+ // Pass the policy when working with metadata, no matter what.
+ assertReleasesPolicy( ReleasesPolicy.DISABLED, PATH_VERSION_METADATA, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.DISABLED, PATH_VERSION_METADATA, WITH_LOCAL );
+ }
+
+ public void testReleasePolicyHourlyProjectMetadata()
+ throws Exception
+ {
+ // Pass the policy when working with metadata, no matter what.
+ assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_PROJECT_METADATA, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_PROJECT_METADATA, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
+ assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_PROJECT_METADATA, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_PROJECT_METADATA, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
+ assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_PROJECT_METADATA, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_PROJECT_METADATA, WITH_LOCAL );
+ }
+
+ public void testReleasePolicyHourlyReleaseArtifact()
+ throws Exception
+ {
+ assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
+ assertReleasesPolicyViolation( ReleasesPolicy.HOURLY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
+ assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
+ assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
+ assertReleasesPolicyViolation( ReleasesPolicy.HOURLY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
+ }
+
+ public void testReleasePolicyHourlySnapshotArtifact()
+ throws Exception
+ {
+ assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
+ assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
+ assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
+ }
+
+ public void testReleasePolicyHourlyVersionedMetadata()
+ throws Exception
+ {
+ // Pass the policy when working with metadata, no matter what.
+ assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_VERSION_METADATA, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_VERSION_METADATA, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
+ assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_VERSION_METADATA, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_VERSION_METADATA, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
+ assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_VERSION_METADATA, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.HOURLY, PATH_VERSION_METADATA, WITH_LOCAL );
+ }
+
+ public void testReleasePolicyIgnoredProjectMetadata()
+ throws Exception
+ {
+ // Pass the policy when working with metadata, no matter what.
+ assertReleasesPolicy( ReleasesPolicy.IGNORED, PATH_PROJECT_METADATA, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.IGNORED, PATH_PROJECT_METADATA, WITH_LOCAL );
+ }
+
+ public void testReleasePolicyIgnoredReleaseArtifact()
+ throws Exception
+ {
+ assertReleasesPolicy( ReleasesPolicy.IGNORED, PATH_RELEASE_ARTIFACT, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.IGNORED, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
+ }
+
+ public void testReleasePolicyIgnoredSnapshotArtifact()
+ throws Exception
+ {
+ assertReleasesPolicy( ReleasesPolicy.IGNORED, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.IGNORED, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
+ }
+
+ public void testReleasePolicyIgnoredVersionedMetadata()
+ throws Exception
+ {
+ // Pass the policy when working with metadata, no matter what.
+ assertReleasesPolicy( ReleasesPolicy.IGNORED, PATH_VERSION_METADATA, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.IGNORED, PATH_VERSION_METADATA, WITH_LOCAL );
+ }
+
+ public void testReleasePolicyOnceProjectMetadata()
+ throws Exception
+ {
+ // Pass the policy when working with metadata, no matter what.
+ assertReleasesPolicy( ReleasesPolicy.ONCE, PATH_PROJECT_METADATA, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.ONCE, PATH_PROJECT_METADATA, WITH_LOCAL );
+ }
+
+ public void testReleasePolicyOnceReleaseArtifact()
+ throws Exception
+ {
+ assertReleasesPolicy( ReleasesPolicy.ONCE, PATH_RELEASE_ARTIFACT, NO_LOCAL );
+ assertReleasesPolicyViolation( ReleasesPolicy.ONCE, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
+ }
+
+ public void testReleasePolicyOnceSnapshotArtifact()
+ throws Exception
+ {
+ assertReleasesPolicy( ReleasesPolicy.ONCE, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.ONCE, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
+ }
+
+ public void testReleasePolicyOnceVersionedMetadata()
+ throws Exception
+ {
+ // Pass the policy when working with metadata, no matter what.
+ assertReleasesPolicy( ReleasesPolicy.ONCE, PATH_VERSION_METADATA, NO_LOCAL );
+ assertReleasesPolicy( ReleasesPolicy.ONCE, PATH_VERSION_METADATA, WITH_LOCAL );
+ }
+
+ private void assertReleasesPolicy( String setting, String path, boolean createLocalFile )
+ throws Exception
+ {
+ PreDownloadPolicy policy = lookupPolicy();
+ Properties request = new Properties();
+ request.setProperty( "filetype", path.endsWith( "/maven-metadata.xml" ) ? "metadata" : "artifact" );
+
+ if ( path.contains( "1.0-SNAPSHOT" ) )
+ {
+ request.setProperty( "version", "1.0-SNAPSHOT" );
+ }
+
+ if ( path.contains( "2.0" ) )
+ {
+ request.setProperty( "version", "2.0" );
+ }
+
+ File targetDir = getTestFile( "target/test-policy/" );
+ File localFile = new File( targetDir, path );
+
+ if ( localFile.exists() )
+ {
+ localFile.delete();
+ }
+
+ if ( createLocalFile )
+ {
+ localFile.getParentFile().mkdirs();
+ FileUtils.fileWrite( localFile.getAbsolutePath(), "random-junk" );
+ localFile.setLastModified( localFile.lastModified() - generatedLocalFileUpdateDelta );
+ }
+
+ policy.applyPolicy( setting, request, localFile );
+ }
+
+ private void assertReleasesPolicyViolation( String setting, String path, boolean createLocalFile )
+ throws Exception
+ {
+ try
+ {
+ assertReleasesPolicy( setting, path, createLocalFile );
+ fail( "Expected a PolicyViolationException." );
+ }
+ catch ( PolicyViolationException e )
+ {
+ // expected path.
+ }
+ }
+
+ private PreDownloadPolicy lookupPolicy()
+ throws Exception
+ {
+ PreDownloadPolicy policy = (PreDownloadPolicy) lookup( PreDownloadPolicy.class.getName(), "releases" );
+ assertNotNull( policy );
+ return policy;
+ }
+
+ @Override
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ // reset delta to 0.
+ generatedLocalFileUpdateDelta = 0;
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/ReleasePolicyTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/ReleasePolicyTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/ReleasePolicyTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/SnapshotsPolicyTest.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/SnapshotsPolicyTest.java?rev=590858&view=auto
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/SnapshotsPolicyTest.java (added)
+++ maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/SnapshotsPolicyTest.java Wed Oct 31 15:47:50 2007
@@ -0,0 +1,347 @@
+package org.apache.maven.archiva.policies;
+
+/*
+ * 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.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.util.FileUtils;
+
+import java.io.File;
+import java.util.Properties;
+
+/**
+ * SnapshotsPolicyTest
+ *
+ * @author <a href="mailto:joakime@apache.org">Joakim Erdfelt</a>
+ * @version $Id$
+ */
+public class SnapshotsPolicyTest
+ extends PlexusTestCase
+{
+ private static final String PATH_VERSION_METADATA = "org/apache/archiva/archiva-testable/1.0-SNAPSHOT/maven-metadata.xml";
+
+ private static final String PATH_PROJECT_METADATA = "org/apache/archiva/archiva-testable/maven-metadata.xml";
+
+ private static final String PATH_SNAPSHOT_ARTIFACT = "org/apache/archiva/archiva-testable/1.0-SNAPSHOT/archiva-testable-1.0-SNAPSHOT.jar";
+
+ private static final String PATH_RELEASE_ARTIFACT = "org/apache/archiva/archiva-testable/2.0/archiva-testable-2.0.jar";
+
+ private static final boolean WITH_LOCAL = true;
+
+ private static final boolean NO_LOCAL = false;
+
+ protected static final long ONE_SECOND = ( 1000 /* milliseconds */);
+
+ protected static final long ONE_MINUTE = ( ONE_SECOND * 60 );
+
+ protected static final long ONE_HOUR = ( ONE_MINUTE * 60 );
+
+ protected static final long ONE_DAY = ( ONE_HOUR * 24 );
+
+ protected static final long OVER_ONE_HOUR = ( ONE_HOUR + ONE_MINUTE );
+
+ protected static final long OVER_ONE_DAY = ( ONE_DAY + ONE_HOUR );
+
+ protected static final long OLDER = ( -1 );
+
+ protected static final long NEWER = 0;
+
+ private long generatedLocalFileUpdateDelta = 0;
+
+ public void testSnapshotPolicyDailyProjectMetadata()
+ throws Exception
+ {
+ // Pass the policy when working with metadata, no matter what.
+ assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_PROJECT_METADATA, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_PROJECT_METADATA, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = OVER_ONE_DAY;
+ assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_PROJECT_METADATA, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_PROJECT_METADATA, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = ( ONE_HOUR * 22 );
+ assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_PROJECT_METADATA, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_PROJECT_METADATA, WITH_LOCAL );
+ }
+
+ public void testSnapshotPolicyDailyReleaseArtifact()
+ throws Exception
+ {
+ assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = OVER_ONE_DAY;
+ assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = ( ONE_HOUR * 22 );
+ assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
+ }
+
+ public void testSnapshotPolicyDailySnapshotArtifact()
+ throws Exception
+ {
+ assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
+ assertSnapshotPolicyViolation( SnapshotsPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = OVER_ONE_DAY;
+ assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = ( ONE_HOUR * 22 );
+ assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
+ assertSnapshotPolicyViolation( SnapshotsPolicy.DAILY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
+ }
+
+ public void testSnapshotPolicyDailyVersionedMetadata()
+ throws Exception
+ {
+ // Pass the policy when working with metadata, no matter what.
+ assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_VERSION_METADATA, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_VERSION_METADATA, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = OVER_ONE_DAY;
+ assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_VERSION_METADATA, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_VERSION_METADATA, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = ( ONE_HOUR * 22 );
+ assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_VERSION_METADATA, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.DAILY, PATH_VERSION_METADATA, WITH_LOCAL );
+ }
+
+ public void testSnapshotPolicyDisabledProjectMetadata()
+ throws Exception
+ {
+ // Pass the policy when working with metadata, no matter what.
+ assertSnapshotPolicy( SnapshotsPolicy.DISABLED, PATH_PROJECT_METADATA, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.DISABLED, PATH_PROJECT_METADATA, WITH_LOCAL );
+ }
+
+ public void testSnapshotPolicyDisabledReleaseArtifact()
+ throws Exception
+ {
+ assertSnapshotPolicy( SnapshotsPolicy.DISABLED, PATH_RELEASE_ARTIFACT, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.DISABLED, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
+ }
+
+ public void testSnapshotPolicyDisabledSnapshotArtifact()
+ throws Exception
+ {
+ assertSnapshotPolicyViolation( SnapshotsPolicy.DISABLED, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
+ assertSnapshotPolicyViolation( SnapshotsPolicy.DISABLED, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
+ }
+
+ public void testSnapshotPolicyDisabledVersionedMetadata()
+ throws Exception
+ {
+ // Pass the policy when working with metadata, no matter what.
+ assertSnapshotPolicy( SnapshotsPolicy.DISABLED, PATH_VERSION_METADATA, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.DISABLED, PATH_VERSION_METADATA, WITH_LOCAL );
+ }
+
+ public void testSnapshotPolicyHourlyProjectMetadata()
+ throws Exception
+ {
+ // Pass the policy when working with metadata, no matter what.
+ assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_PROJECT_METADATA, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_PROJECT_METADATA, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
+ assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_PROJECT_METADATA, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_PROJECT_METADATA, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
+ assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_PROJECT_METADATA, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_PROJECT_METADATA, WITH_LOCAL );
+ }
+
+ public void testSnapshotPolicyHourlyReleaseArtifact()
+ throws Exception
+ {
+ assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
+ assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
+ assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_RELEASE_ARTIFACT, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
+ }
+
+ public void testSnapshotPolicyHourlySnapshotArtifact()
+ throws Exception
+ {
+ assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
+ assertSnapshotPolicyViolation( SnapshotsPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
+ assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
+ assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
+ assertSnapshotPolicyViolation( SnapshotsPolicy.HOURLY, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
+ }
+
+ public void testSnapshotPolicyHourlyVersionedMetadata()
+ throws Exception
+ {
+ // Pass the policy when working with metadata, no matter what.
+ assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_VERSION_METADATA, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_VERSION_METADATA, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = OVER_ONE_HOUR;
+ assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_VERSION_METADATA, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_VERSION_METADATA, WITH_LOCAL );
+
+ generatedLocalFileUpdateDelta = ( ONE_MINUTE * 45 );
+ assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_VERSION_METADATA, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.HOURLY, PATH_VERSION_METADATA, WITH_LOCAL );
+ }
+
+ public void testSnapshotPolicyIgnoredProjectMetadata()
+ throws Exception
+ {
+ // Pass the policy when working with metadata, no matter what.
+ assertSnapshotPolicy( SnapshotsPolicy.IGNORED, PATH_PROJECT_METADATA, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.IGNORED, PATH_PROJECT_METADATA, WITH_LOCAL );
+ }
+
+ public void testSnapshotPolicyIgnoredReleaseArtifact()
+ throws Exception
+ {
+ assertSnapshotPolicy( SnapshotsPolicy.IGNORED, PATH_RELEASE_ARTIFACT, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.IGNORED, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
+ }
+
+ public void testSnapshotPolicyIgnoredSnapshotArtifact()
+ throws Exception
+ {
+ assertSnapshotPolicy( SnapshotsPolicy.IGNORED, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.IGNORED, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
+ }
+
+ public void testSnapshotPolicyIgnoredVersionedMetadata()
+ throws Exception
+ {
+ // Pass the policy when working with metadata, no matter what.
+ assertSnapshotPolicy( SnapshotsPolicy.IGNORED, PATH_VERSION_METADATA, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.IGNORED, PATH_VERSION_METADATA, WITH_LOCAL );
+ }
+
+ public void testSnapshotPolicyOnceProjectMetadata()
+ throws Exception
+ {
+ // Pass the policy when working with metadata, no matter what.
+ assertSnapshotPolicy( SnapshotsPolicy.ONCE, PATH_PROJECT_METADATA, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.ONCE, PATH_PROJECT_METADATA, WITH_LOCAL );
+ }
+
+ public void testSnapshotPolicyOnceReleaseArtifact()
+ throws Exception
+ {
+ assertSnapshotPolicy( SnapshotsPolicy.ONCE, PATH_RELEASE_ARTIFACT, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.ONCE, PATH_RELEASE_ARTIFACT, WITH_LOCAL );
+ }
+
+ public void testSnapshotPolicyOnceSnapshotArtifact()
+ throws Exception
+ {
+ assertSnapshotPolicy( SnapshotsPolicy.ONCE, PATH_SNAPSHOT_ARTIFACT, NO_LOCAL );
+ assertSnapshotPolicyViolation( SnapshotsPolicy.ONCE, PATH_SNAPSHOT_ARTIFACT, WITH_LOCAL );
+ }
+
+ public void testSnapshotPolicyOnceVersionedMetadata()
+ throws Exception
+ {
+ // Pass the policy when working with metadata, no matter what.
+ assertSnapshotPolicy( SnapshotsPolicy.ONCE, PATH_VERSION_METADATA, NO_LOCAL );
+ assertSnapshotPolicy( SnapshotsPolicy.ONCE, PATH_VERSION_METADATA, WITH_LOCAL );
+ }
+
+ private void assertSnapshotPolicy( String setting, String path, boolean createLocalFile )
+ throws Exception
+ {
+ PreDownloadPolicy policy = lookupPolicy();
+ Properties request = new Properties();
+ request.setProperty( "filetype", path.endsWith( "/maven-metadata.xml" ) ? "metadata" : "artifact" );
+
+ if ( path.contains( "1.0-SNAPSHOT" ) )
+ {
+ request.setProperty( "version", "1.0-SNAPSHOT" );
+ }
+
+ if ( path.contains( "2.0" ) )
+ {
+ request.setProperty( "version", "2.0" );
+ }
+
+ File targetDir = getTestFile( "target/test-policy/" );
+ File localFile = new File( targetDir, path );
+
+ if ( localFile.exists() )
+ {
+ localFile.delete();
+ }
+
+ if ( createLocalFile )
+ {
+ localFile.getParentFile().mkdirs();
+ FileUtils.fileWrite( localFile.getAbsolutePath(), "random-junk" );
+ localFile.setLastModified( localFile.lastModified() - generatedLocalFileUpdateDelta );
+ }
+
+ policy.applyPolicy( setting, request, localFile );
+ }
+
+ private void assertSnapshotPolicyViolation( String setting, String path, boolean createLocalFile )
+ throws Exception
+ {
+ try
+ {
+ assertSnapshotPolicy( setting, path, createLocalFile );
+ fail( "Expected a PolicyViolationException." );
+ }
+ catch ( PolicyViolationException e )
+ {
+ // expected path.
+ }
+ }
+
+ private PreDownloadPolicy lookupPolicy()
+ throws Exception
+ {
+ PreDownloadPolicy policy = (PreDownloadPolicy) lookup( PreDownloadPolicy.class.getName(), "snapshots" );
+ assertNotNull( policy );
+ return policy;
+ }
+
+ @Override
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ // reset delta to 0.
+ generatedLocalFileUpdateDelta = 0;
+ }
+}
Propchange: maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/SnapshotsPolicyTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/SnapshotsPolicyTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Propchange: maven/archiva/trunk/archiva-base/archiva-policies/src/test/java/org/apache/maven/archiva/policies/SnapshotsPolicyTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultRepositoryProxyConnectors.java
URL: http://svn.apache.org/viewvc/maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultRepositoryProxyConnectors.java?rev=590858&r1=590857&r2=590858&view=diff
==============================================================================
--- maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultRepositoryProxyConnectors.java (original)
+++ maven/archiva/trunk/archiva-base/archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/DefaultRepositoryProxyConnectors.java Wed Oct 31 15:47:50 2007
@@ -32,6 +32,8 @@
import org.apache.maven.archiva.model.RepositoryURL;
import org.apache.maven.archiva.model.VersionedReference;
import org.apache.maven.archiva.policies.DownloadPolicy;
+import org.apache.maven.archiva.policies.PolicyConfigurationException;
+import org.apache.maven.archiva.policies.PolicyViolationException;
import org.apache.maven.archiva.policies.PostDownloadPolicy;
import org.apache.maven.archiva.policies.PreDownloadPolicy;
import org.apache.maven.archiva.policies.urlcache.UrlFailureCache;
@@ -140,6 +142,7 @@
File localFile = toLocalFile( repository, artifact );
Properties requestProperties = new Properties();
+ requestProperties.setProperty( "filetype", "artifact" );
requestProperties.setProperty( "version", artifact.getVersion() );
List<ProxyConnector> connectors = getProxyConnectors( repository );
@@ -186,6 +189,7 @@
File localFile = toLocalFile( repository, metadata );
Properties requestProperties = new Properties();
+ requestProperties.setProperty( "filetype", "metadata" );
boolean metadataNeedsUpdating = false;
long originalTimestamp = getLastModified( localFile );
@@ -298,6 +302,7 @@
File localFile = toLocalFile( repository, metadata );
Properties requestProperties = new Properties();
+ requestProperties.setProperty( "filetype", "metadata" );
boolean metadataNeedsUpdating = false;
long originalTimestamp = getLastModified( localFile );
@@ -480,15 +485,20 @@
}
// Handle pre-download policy
- if ( !applyPolicies( this.preDownloadPolicies, connector.getPolicies(), requestProperties, localFile ) )
+ try
{
- getLogger().debug( "Failed pre-download policies - " + localFile.getAbsolutePath() );
-
+ validatePolicies( this.preDownloadPolicies, connector.getPolicies(), requestProperties, localFile );
+ }
+ catch ( PolicyViolationException e )
+ {
+ String emsg = "Transfer not attempted on " + url + " : " + e.getMessage();
if ( fileExists( localFile ) )
{
+ getLogger().info( emsg + ": using already present local file." );
return localFile;
}
+ getLogger().info( emsg );
return null;
}
@@ -543,10 +553,13 @@
}
// Handle post-download policies.
- if ( !applyPolicies( this.postDownloadPolicies, connector.getPolicies(), requestProperties, localFile ) )
+ try
{
- getLogger().debug( "Failed post-download policies - " + localFile.getAbsolutePath() );
-
+ validatePolicies( this.postDownloadPolicies, connector.getPolicies(), requestProperties, localFile );
+ }
+ catch ( PolicyViolationException e )
+ {
+ getLogger().info( "Transfer invalidated from " + url + " : " + e.getMessage() );
if ( fileExists( localFile ) )
{
return localFile;
@@ -697,10 +710,10 @@
* @param settings the map of settings for the policies to execute. (Map of String policy keys, to String policy setting)
* @param request the request properties (utilized by the {@link DownloadPolicy#applyPolicy(String,Properties,File)})
* @param localFile the local file (utilized by the {@link DownloadPolicy#applyPolicy(String,Properties,File)})
- * @return true if all of the policies passed, false if a policy failed.
*/
- private boolean applyPolicies( Map<String, ? extends DownloadPolicy> policies, Map<String, String> settings,
+ private void validatePolicies( Map<String, ? extends DownloadPolicy> policies, Map<String, String> settings,
Properties request, File localFile )
+ throws PolicyViolationException
{
for ( Entry<String, ? extends DownloadPolicy> entry : policies.entrySet() )
{
@@ -710,13 +723,15 @@
String setting = StringUtils.defaultString( (String) settings.get( key ), defaultSetting );
getLogger().debug( "Applying [" + key + "] policy with [" + setting + "]" );
- if ( !policy.applyPolicy( setting, request, localFile ) )
+ try
{
- getLogger().debug( "Didn't pass the [" + key + "] policy." );
- return false;
+ policy.applyPolicy( setting, request, localFile );
+ }
+ catch ( PolicyConfigurationException e )
+ {
+ getLogger().error( e.getMessage(), e );
}
}
- return true;
}
/**
Re: svn commit: r590858 - in /maven/archiva/trunk/archiva-base: archiva-policies/src/main/java/org/apache/maven/archiva/policies/ archiva-policies/src/test/java/org/apache/maven/archiva/policies/ archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/
Posted by Brett Porter <br...@apache.org>.
On 01/11/2007, at 10:46 AM, Joakim Erdfelt wrote:
>>
>>> Switching from boolean return on .applyPolicy() to throwing
>>> exception, to gain better logging of why the transfer failed.
>>
>> No need to change it now, but I don't really agree with this. I
>> don't agree with using exceptions for non-exceptional conditions
>> for readability reasons - particularly just to pass a string
>> around. IMO, better alternatives:
>> 1) just log in the policy check and return true/false as before
>> 2) return an object that has a "success" flag and a "reason"
>> string (essentially the same as an exception, but correctly using
>> the return type)
>
> The flaw with that is that only having a boolean doesn't tell us
> WHY something failed.
> Also the log didn't make a distinction between config issue, normal
> happy path, informational, and problem path.
> Since this is a failure, throw an exception.
> Made the code easier to read too. Lots of uncoding here.
But that's what option 2 is for - roughly same amount of code, has a
reason, but is still true/false return code. This isn't an
exceptional condition - you would expect things to fail policies all
the time when they are not updated, etc.
Anyway, it's just IMO, it obviously works just fine either way.
>
> As for noise, the standard failure reasoning will easily be (10*
> (proxyConnector.size()) more noisy than the configuration errors.
but that's getting adjusted in a separate issue, right?
>
> Working on that now, the DefaultArchivaConfiguration.load()
> mechanism has many configuration cleanup / sanity things in it.
> Shame you got rid of the ConfigurationCleanup interface a while
> back. would have made this easy to test individually instead of all
> lumped together like it is now.
I'm not really sure what you are referring to here, but let's focus
on this some more after 1.0? I was just asking a question, I don't
think we want to much with configuration any further at this point as
the only issue I see open is one about clarity in the web interface.
- Brett
--
Brett Porter - brett@apache.org
Blog: http://www.devzuz.org/blogs/bporter/
Re: svn commit: r590858 - in /maven/archiva/trunk/archiva-base: archiva-policies/src/main/java/org/apache/maven/archiva/policies/
archiva-policies/src/test/java/org/apache/maven/archiva/policies/ archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/
Posted by Joakim Erdfelt <jo...@erdfelt.com>.
Brett Porter wrote:
> Hi Joakim,
>
> On 01/11/2007, at 9:47 AM, joakime@apache.org wrote:
>
>> Fixing release / snapshot policies from applying tests on
>> maven-metadata.xml files.
>
> Was this the addition of the filetype property - or something else as
> well? Bit hard to find in the change :)
Yes. the filetype property.
Didn't want to pull in all of archiva-repository-layer just to get the
benefits of metadata detection.
Felt i could just let the proxy handlers determine scope (artifact /
metadata / supportfile) and pass it down the the policy handlers.
>
>> Switching from boolean return on .applyPolicy() to throwing
>> exception, to gain better logging of why the transfer failed.
>
> No need to change it now, but I don't really agree with this. I don't
> agree with using exceptions for non-exceptional conditions for
> readability reasons - particularly just to pass a string around. IMO,
> better alternatives:
> 1) just log in the policy check and return true/false as before
> 2) return an object that has a "success" flag and a "reason" string
> (essentially the same as an exception, but correctly using the return
> type)
The flaw with that is that only having a boolean doesn't tell us WHY
something failed.
Also the log didn't make a distinction between config issue, normal
happy path, informational, and problem path.
Since this is a failure, throw an exception.
Made the code easier to read too. Lots of uncoding here.
>
>> getLogger().debug( "Applying [" + key + "] policy with
>> [" + setting + "]" );
>> - if ( !policy.applyPolicy( setting, request, localFile ) )
>> + try
>> {
>> - getLogger().debug( "Didn't pass the [" + key + "]
>> policy." );
>> - return false;
>> + policy.applyPolicy( setting, request, localFile );
>> + }
>> + catch ( PolicyConfigurationException e )
>> + {
>> + getLogger().error( e.getMessage(), e );
>> }
>> }
>
> This is going to be very noisy if it's misconfigured - is there
> anything that can test these on system configuration so we can fail fast?
As for noise, the standard failure reasoning will easily be
(10*(proxyConnector.size()) more noisy than the configuration errors.
Working on that now, the DefaultArchivaConfiguration.load() mechanism
has many configuration cleanup / sanity things in it.
Shame you got rid of the ConfigurationCleanup interface a while back.
would have made this easy to test individually instead of all lumped
together like it is now.
Work on MRM-549 is proceeding. Go comment on that other thread about
SKIP/REJECT.
The change to that config.load() is due to MRM-549, but I'm cleaning up
a ton of other proxy connector nonsense too.
--
- Joakim Erdfelt
joakim@erdfelt.com
Open Source Software (OSS) Developer
Re: svn commit: r590858 - in /maven/archiva/trunk/archiva-base: archiva-policies/src/main/java/org/apache/maven/archiva/policies/ archiva-policies/src/test/java/org/apache/maven/archiva/policies/ archiva-proxy/src/main/java/org/apache/maven/archiva/proxy/
Posted by Brett Porter <br...@apache.org>.
Hi Joakim,
On 01/11/2007, at 9:47 AM, joakime@apache.org wrote:
> Fixing release / snapshot policies from applying tests on maven-
> metadata.xml files.
Was this the addition of the filetype property - or something else as
well? Bit hard to find in the change :)
> Switching from boolean return on .applyPolicy() to throwing
> exception, to gain better logging of why the transfer failed.
No need to change it now, but I don't really agree with this. I don't
agree with using exceptions for non-exceptional conditions for
readability reasons - particularly just to pass a string around. IMO,
better alternatives:
1) just log in the policy check and return true/false as before
2) return an object that has a "success" flag and a "reason" string
(essentially the same as an exception, but correctly using the return
type)
> getLogger().debug( "Applying [" + key + "] policy with
> [" + setting + "]" );
> - if ( !policy.applyPolicy( setting, request, localFile ) )
> + try
> {
> - getLogger().debug( "Didn't pass the [" + key + "]
> policy." );
> - return false;
> + policy.applyPolicy( setting, request, localFile );
> + }
> + catch ( PolicyConfigurationException e )
> + {
> + getLogger().error( e.getMessage(), e );
> }
> }
This is going to be very noisy if it's misconfigured - is there
anything that can test these on system configuration so we can fail
fast?
- Brett
--
Brett Porter - brett@apache.org
Blog: http://www.devzuz.org/blogs/bporter/