You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by br...@apache.org on 2008/03/15 02:26:05 UTC

svn commit: r637325 - in /maven/artifact/trunk/src: main/java/org/apache/maven/artifact/manager/ test/java/org/apache/maven/artifact/manager/ test/resources/org/apache/maven/artifact/manager/

Author: brianf
Date: Fri Mar 14 18:26:04 2008
New Revision: 637325

URL: http://svn.apache.org/viewvc?rev=637325&view=rev
Log:
MNG-2744: case insensitive checksums. Patch from Benjamin Bentmann

Added:
    maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/WagonString.java
Modified:
    maven/artifact/trunk/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
    maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java
    maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/WagonNoOp.java
    maven/artifact/trunk/src/test/resources/org/apache/maven/artifact/manager/DefaultWagonManagerTest.xml

Modified: maven/artifact/trunk/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java
URL: http://svn.apache.org/viewvc/maven/artifact/trunk/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java?rev=637325&r1=637324&r2=637325&view=diff
==============================================================================
--- maven/artifact/trunk/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java (original)
+++ maven/artifact/trunk/src/main/java/org/apache/maven/artifact/manager/DefaultWagonManager.java Fri Mar 14 18:26:04 2008
@@ -747,7 +747,7 @@
                     expectedChecksum = expectedChecksum.substring( 0, spacePos );
                 }
             }
-            if ( expectedChecksum.equals( actualChecksum ) )
+            if ( expectedChecksum.equalsIgnoreCase( actualChecksum ) )
             {
                 File checksumFile = new File( destination + checksumFileExtension );
                 if ( checksumFile.exists() )

Modified: maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java
URL: http://svn.apache.org/viewvc/maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java?rev=637325&r1=637324&r2=637325&view=diff
==============================================================================
--- maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java (original)
+++ maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/DefaultWagonManagerTest.java Fri Mar 14 18:26:04 2008
@@ -25,6 +25,7 @@
 import org.apache.maven.artifact.DefaultArtifact;
 import org.apache.maven.artifact.metadata.ArtifactMetadata;
 import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
 import org.apache.maven.artifact.repository.DefaultArtifactRepository;
 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
 import org.apache.maven.artifact.versioning.VersionRange;
@@ -172,6 +173,178 @@
         finally
         {
             tmpFile.delete();
+        }
+    }
+
+    /**
+     * Checks the verification of checksums.
+     */
+    public void testChecksumVerification()
+        throws Exception
+    {
+        ArtifactRepositoryPolicy policy =
+            new ArtifactRepositoryPolicy( true, ArtifactRepositoryPolicy.UPDATE_POLICY_ALWAYS,
+                                          ArtifactRepositoryPolicy.CHECKSUM_POLICY_FAIL );
+        ArtifactRepository repo =
+            new DefaultArtifactRepository( "id", "string://url", new ArtifactRepositoryLayoutStub(), policy, policy );
+
+        File tmpFile = File.createTempFile( "mvn-cs-test", ".temp" );
+        File sha1File = new File( tmpFile.getPath() + ".sha1" );
+        File md5File = new File( tmpFile.getPath() + ".md5" );
+
+        try
+        {
+            Artifact artifact =
+                new DefaultArtifact( "sample.group", "sample-art", VersionRange.createFromVersion( "1.0" ), "scope",
+                                     "jar", "classifier", null );
+            artifact.setFile( tmpFile );
+
+            {
+                Xpp3Dom path = new Xpp3Dom( "path" );
+                path.setValue( "lower-case-checksum" );
+                Xpp3Dom sha1 = new Xpp3Dom( "path.sha1" );
+                sha1.setValue( "2a25dc564a3b34f68237fc849066cbc7bb7a36a1" );
+                Xpp3Dom resourceStrings = new Xpp3Dom( "resourceStrings" );
+                resourceStrings.addChild( path );
+                resourceStrings.addChild( sha1 );
+                Xpp3Dom conf = new Xpp3Dom( "configuration" );
+                conf.addChild( resourceStrings );
+
+                wagonManager.addConfiguration( repo.getId(), conf );
+
+                try
+                {
+                    wagonManager.getArtifact( artifact, repo );
+                }
+                catch ( ChecksumFailedException e )
+                {
+                    fail( "Checksum verification did not pass: " + e.getMessage() );
+                }
+            }
+
+            {
+                Xpp3Dom path = new Xpp3Dom( "path" );
+                path.setValue( "upper-case-checksum" );
+                Xpp3Dom sha1 = new Xpp3Dom( "path.sha1" );
+                sha1.setValue( "B7BB97D7D0B9244398D9B47296907F73313663E6" );
+                Xpp3Dom resourceStrings = new Xpp3Dom( "resourceStrings" );
+                resourceStrings.addChild( path );
+                resourceStrings.addChild( sha1 );
+                Xpp3Dom conf = new Xpp3Dom( "configuration" );
+                conf.addChild( resourceStrings );
+
+                wagonManager.addConfiguration( repo.getId(), conf );
+
+                try
+                {
+                    wagonManager.getArtifact( artifact, repo );
+                }
+                catch ( ChecksumFailedException e )
+                {
+                    fail( "Checksum verification did not pass: " + e.getMessage() );
+                }
+            }
+
+            {
+                Xpp3Dom path = new Xpp3Dom( "path" );
+                path.setValue( "expected-failure" );
+                Xpp3Dom sha1 = new Xpp3Dom( "path.sha1" );
+                sha1.setValue( "b7bb97d7d0b9244398d9b47296907f73313663e6" );
+                Xpp3Dom resourceStrings = new Xpp3Dom( "resourceStrings" );
+                resourceStrings.addChild( path );
+                resourceStrings.addChild( sha1 );
+                Xpp3Dom conf = new Xpp3Dom( "configuration" );
+                conf.addChild( resourceStrings );
+
+                wagonManager.addConfiguration( repo.getId(), conf );
+
+                try
+                {
+                    wagonManager.getArtifact( artifact, repo );
+                    fail( "Checksum verification did not fail" );
+                }
+                catch ( ChecksumFailedException e )
+                {
+                    // expected
+                }
+            }
+
+            {
+                Xpp3Dom path = new Xpp3Dom( "path" );
+                path.setValue( "lower-case-checksum" );
+                Xpp3Dom md5 = new Xpp3Dom( "path.md5" );
+                md5.setValue( "50b2cf50a103a965efac62b983035cac" );
+                Xpp3Dom resourceStrings = new Xpp3Dom( "resourceStrings" );
+                resourceStrings.addChild( path );
+                resourceStrings.addChild( md5 );
+                Xpp3Dom conf = new Xpp3Dom( "configuration" );
+                conf.addChild( resourceStrings );
+
+                wagonManager.addConfiguration( repo.getId(), conf );
+
+                try
+                {
+                    wagonManager.getArtifact( artifact, repo );
+                }
+                catch ( ChecksumFailedException e )
+                {
+                    fail( "Checksum verification did not pass: " + e.getMessage() );
+                }
+            }
+
+            {
+                Xpp3Dom path = new Xpp3Dom( "path" );
+                path.setValue( "upper-case-checksum" );
+                Xpp3Dom md5 = new Xpp3Dom( "path.md5" );
+                md5.setValue( "842F568FCCFEB7E534DC72133D42FFDC" );
+                Xpp3Dom resourceStrings = new Xpp3Dom( "resourceStrings" );
+                resourceStrings.addChild( path );
+                resourceStrings.addChild( md5 );
+                Xpp3Dom conf = new Xpp3Dom( "configuration" );
+                conf.addChild( resourceStrings );
+
+                wagonManager.addConfiguration( repo.getId(), conf );
+
+                try
+                {
+                    wagonManager.getArtifact( artifact, repo );
+                }
+                catch ( ChecksumFailedException e )
+                {
+                    fail( "Checksum verification did not pass: " + e.getMessage() );
+                }
+            }
+
+            {
+                Xpp3Dom path = new Xpp3Dom( "path" );
+                path.setValue( "expected-failure" );
+                Xpp3Dom md5 = new Xpp3Dom( "path.md5" );
+                md5.setValue( "b7bb97d7d0b9244398d9b47296907f73313663e6" );
+                Xpp3Dom resourceStrings = new Xpp3Dom( "resourceStrings" );
+                resourceStrings.addChild( path );
+                resourceStrings.addChild( md5 );
+                Xpp3Dom conf = new Xpp3Dom( "configuration" );
+                conf.addChild( resourceStrings );
+
+                wagonManager.addConfiguration( repo.getId(), conf );
+
+                try
+                {
+                    wagonManager.getArtifact( artifact, repo );
+                    fail( "Checksum verification did not fail" );
+                }
+                catch ( ChecksumFailedException e )
+                {
+                    // expected
+                }
+            }
+
+        }
+        finally
+        {
+            tmpFile.delete();
+            sha1File.delete();
+            md5File.delete();
         }
     }
 

Modified: maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/WagonNoOp.java
URL: http://svn.apache.org/viewvc/maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/WagonNoOp.java?rev=637325&r1=637324&r2=637325&view=diff
==============================================================================
--- maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/WagonNoOp.java (original)
+++ maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/WagonNoOp.java Fri Mar 14 18:26:04 2008
@@ -40,23 +40,15 @@
     public void get( String resourceName, File destination )
         throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
     {
-        Resource resource = new Resource( resourceName );
-        fireGetInitiated( resource, destination );
-        fireGetStarted( resource, destination );
-        try
-        {
-            destination.createNewFile();
-        }
-        catch ( IOException e )
-        {
-            // ignored
-        }
-        fireGetCompleted( resource, destination );
+        getIfNewer( resourceName, destination, 0 );
     }
 
     public boolean getIfNewer( String resourceName, File destination, long timestamp )
         throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
     {
+        Resource resource = new Resource( resourceName );
+        fireGetInitiated( resource, destination );
+        fireGetStarted( resource, destination );
         try
         {
             destination.createNewFile();
@@ -65,6 +57,7 @@
         {
             return false;
         }
+        fireGetCompleted( resource, destination );
         return true;
     }
 

Added: maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/WagonString.java
URL: http://svn.apache.org/viewvc/maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/WagonString.java?rev=637325&view=auto
==============================================================================
--- maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/WagonString.java (added)
+++ maven/artifact/trunk/src/test/java/org/apache/maven/artifact/manager/WagonString.java Fri Mar 14 18:26:04 2008
@@ -0,0 +1,107 @@
+package org.apache.maven.artifact.manager;
+
+/*
+ * 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.util.Map;
+
+import org.apache.maven.wagon.AbstractWagon;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.TransferFailedException;
+import org.apache.maven.wagon.authorization.AuthorizationException;
+import org.apache.maven.wagon.events.TransferEvent;
+import org.apache.maven.wagon.resource.Resource;
+import org.codehaus.plexus.util.FileUtils;
+
+/**
+ * A wagon stub that can be configured to output strings into some artifacts.
+ */
+public class WagonString
+    extends AbstractWagon
+{
+
+    /**
+     * A mapping from resource names to file contents. Retrievals will throw a {@link ResourceDoesNotExistException} if
+     * a resource is requested which has no entry in this map.
+     * 
+     * @component.configuration default="resourceStrings"
+     */
+    private Map resourceStrings;
+
+    public void closeConnection()
+    {
+        // NO-OP
+    }
+
+    public void get( String resourceName, File destination )
+        throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
+    {
+        getIfNewer( resourceName, destination, 0 );
+    }
+
+    public boolean getIfNewer( String resourceName, File destination, long timestamp )
+        throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
+    {
+        Resource resource = new Resource( resourceName );
+        fireGetInitiated( resource, destination );
+
+        String data = (String) this.resourceStrings.get( resourceName );
+        if ( data == null )
+        {
+            throw new ResourceDoesNotExistException( "Unexistent resource: " + resourceName );
+        }
+
+        fireGetStarted( resource, destination );
+        try
+        {
+            byte[] bytes = data.getBytes( "UTF-8" );
+            FileUtils.fileWrite( destination.getPath(), "UTF-8", data );
+            fireTransferProgress( new TransferEvent( this, resource, TransferEvent.TRANSFER_PROGRESS,
+                                                     TransferEvent.REQUEST_GET ), bytes, bytes.length );
+        }
+        catch ( IOException e )
+        {
+            return false;
+        }
+        fireGetCompleted( resource, destination );
+
+        return true;
+    }
+
+    public void openConnection()
+    {
+        // NO-OP
+    }
+
+    public void put( File source, String destination )
+        throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
+    {
+        Resource resource = new Resource( destination );
+        firePutInitiated( resource, source );
+        firePutStarted( resource, source );
+        firePutCompleted( resource, source );
+    }
+
+    public String[] getSupportedProtocols()
+    {
+        return new String[] { "string" };
+    }
+}

Modified: maven/artifact/trunk/src/test/resources/org/apache/maven/artifact/manager/DefaultWagonManagerTest.xml
URL: http://svn.apache.org/viewvc/maven/artifact/trunk/src/test/resources/org/apache/maven/artifact/manager/DefaultWagonManagerTest.xml?rev=637325&r1=637324&r2=637325&view=diff
==============================================================================
--- maven/artifact/trunk/src/test/resources/org/apache/maven/artifact/manager/DefaultWagonManagerTest.xml (original)
+++ maven/artifact/trunk/src/test/resources/org/apache/maven/artifact/manager/DefaultWagonManagerTest.xml Fri Mar 14 18:26:04 2008
@@ -45,8 +45,13 @@
       <implementation>org.apache.maven.artifact.manager.WagonNoOp</implementation>
     </component>
     <component>
+      <role>org.apache.maven.wagon.Wagon</role>
+      <role-hint>string</role-hint>
+      <implementation>org.apache.maven.artifact.manager.WagonString</implementation>
+    </component>
+    <component>
       <role>org.apache.maven.artifact.repository.authentication.AuthenticationInfoProvider</role>
       <implementation>org.apache.maven.artifact.repository.authentication.DummyAuthenticationInfoProvider</implementation>
     </component>
   </components>
-</plexus>
\ No newline at end of file
+</plexus>