jdcasey     2005/04/19 17:44:17

  Modified:    
sandbox/repoclean/src/main/java/org/apache/maven/tools/repoclean/digest
                        ArtifactDigestVerifier.java ArtifactDigestor.java
               sandbox/repoclean/src/test/java/org/apache/maven/tools/repoclean
                        TestSupport.java
  Added:       
sandbox/repoclean/src/test/java/org/apache/maven/tools/repoclean/digest
                        ArtifactDigestVerifierTest.java
                        ArtifactDigestorTest.java
               sandbox/repoclean/src/test/resources/digest/ArtifactDigestorTest
                        digestFormatVerifyArtifact.jar
  Log:
  o Added creation of SHA1 digests alongside MD5's
  o Modified digest-file creation to be text files, not binaries.
  
  PR: MNG-311, MNG-287
  
  Revision  Changes    Path
  1.6       +26 -11    
maven-components/sandbox/repoclean/src/main/java/org/apache/maven/tools/repoclean/digest/ArtifactDigestVerifier.java
  
  Index: ArtifactDigestVerifier.java
  ===================================================================
  RCS file: 
/home/cvs/maven-components/sandbox/repoclean/src/main/java/org/apache/maven/tools/repoclean/digest/ArtifactDigestVerifier.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- ArtifactDigestVerifier.java       19 Apr 2005 20:05:15 -0000      1.5
  +++ ArtifactDigestVerifier.java       20 Apr 2005 00:44:17 -0000      1.6
  @@ -18,7 +18,8 @@
    */
   
   import org.apache.maven.artifact.Artifact;
  -import org.apache.maven.tools.repoclean.report.FileReporter;
  +import org.apache.maven.tools.repoclean.report.ReportWriteException;
  +import org.apache.maven.tools.repoclean.report.Reporter;
   import org.codehaus.plexus.util.FileUtils;
   
   import java.io.File;
  @@ -33,22 +34,36 @@
       public static final String ROLE = ArtifactDigestVerifier.class.getName();
   
       private ArtifactDigestor artifactDigestor;
  +    
  +    public void setArtifactDigestor(ArtifactDigestor artifactDigestor)
  +    {
  +        this.artifactDigestor = artifactDigestor;
  +    }
  +
  +    public void verifyDigest( Artifact artifact, File artifactTarget, 
Reporter reporter, boolean reportOnly )
  +        throws ArtifactDigestException, ReportWriteException, IOException
  +    {
  +        verifyDigestFile( artifact, artifactTarget, reporter, reportOnly, 
".md5", ArtifactDigestor.MD5 );
  +        
  +        verifyDigestFile( artifact, artifactTarget, reporter, reportOnly, 
".sha1", ArtifactDigestor.SHA );
  +    }
   
  -    public void verifyDigest( Artifact artifact, File artifactTarget, 
FileReporter reporter, boolean reportOnly ) throws Exception
  +    private void verifyDigestFile( Artifact artifact, File artifactTarget, 
Reporter reporter, boolean reportOnly,
  +                                  String digestExt, String digestAlgorithm )
  +        throws ArtifactDigestException, ReportWriteException, IOException
       {
           // create the digest source file from which to copy/verify.
  -        File digestSourceFile = new File( artifact.getFile() + ".md5" );
  +        File digestSourceFile = new File( artifact.getFile() + digestExt );
   
           // create the digest target file from which to copy/create.
  -        File digestTargetFile = new File( artifactTarget + ".md5" );
  -        
  +        File digestTargetFile = new File( artifactTarget + digestExt );
  +
           boolean verified = false;
   
           // if the digest source file exists, then verify it.
           if ( digestSourceFile.exists() )
           {
  -            verified = artifactDigestor.verifyArtifactDigest( 
artifactTarget, digestTargetFile,
  -                                                              
ArtifactDigestor.MD5 );
  +            verified = artifactDigestor.verifyArtifactDigest( 
artifactTarget, digestTargetFile, digestAlgorithm );
   
               if ( verified )
               {
  @@ -61,7 +76,7 @@
                       catch ( IOException e )
                       {
                           reporter.error( "Cannot copy digest file for 
artifact[" + artifact.getId()
  -                            + "] from source to target.", e );
  +                            + "] from source to target for digest algorithm: 
\'" + digestAlgorithm + "\'.", e );
   
                           throw e;
                       }
  @@ -69,12 +84,12 @@
               }
               else
               {
  -                reporter.warn( ".md5 for artifact[" + artifact.getId() + "] 
in target repository is wrong." );
  +                reporter.warn( digestExt + " for artifact[" + 
artifact.getId() + "] in target repository is wrong." );
               }
           }
           else
           {
  -            reporter.warn( ".md5 for artifact[" + artifact.getId() + "] is 
missing in source repository." );
  +            reporter.warn( digestExt + " for artifact[" + artifact.getId() + 
"] is missing in source repository." );
           }
   
           // if the .md5 was missing or did not verify correctly, create a new 
one
  @@ -83,7 +98,7 @@
           {
               if ( !reportOnly )
               {
  -                artifactDigestor.createArtifactDigest( artifactTarget, 
digestTargetFile, ArtifactDigestor.MD5 );
  +                artifactDigestor.createArtifactDigest( artifactTarget, 
digestTargetFile, digestAlgorithm );
               }
           }
       }
  
  
  
  1.4       +24 -19    
maven-components/sandbox/repoclean/src/main/java/org/apache/maven/tools/repoclean/digest/ArtifactDigestor.java
  
  Index: ArtifactDigestor.java
  ===================================================================
  RCS file: 
/home/cvs/maven-components/sandbox/repoclean/src/main/java/org/apache/maven/tools/repoclean/digest/ArtifactDigestor.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- ArtifactDigestor.java     2 Apr 2005 02:17:19 -0000       1.3
  +++ ArtifactDigestor.java     20 Apr 2005 00:44:17 -0000      1.4
  @@ -6,10 +6,10 @@
   import java.io.BufferedInputStream;
   import java.io.File;
   import java.io.FileInputStream;
  -import java.io.FileOutputStream;
  +import java.io.FileWriter;
   import java.io.IOException;
   import java.io.InputStream;
  -import java.io.OutputStream;
  +import java.io.Writer;
   import java.security.MessageDigest;
   import java.security.NoSuchAlgorithmException;
   
  @@ -43,24 +43,24 @@
       public boolean verifyArtifactDigest( File artifactFile, File digestFile, 
String algorithm )
           throws ArtifactDigestException
       {
  -        if(artifactFile.exists() && digestFile.exists())
  +        if ( artifactFile.exists() && digestFile.exists() )
           {
               byte[] generatedDigest = generateArtifactDigest( artifactFile, 
algorithm );
  -            
  +
               InputStream in = null;
               try
               {
                   in = new FileInputStream( artifactFile );
  -                
  +
                   int digestLen = generatedDigest.length;
                   int currentIdx = 0;
  -                
  +
                   boolean matched = true;
  -                
  +
                   int read = -1;
                   while ( ( read = in.read() ) > -1 )
                   {
  -                    if(currentIdx >= digestLen || read != 
generatedDigest[currentIdx])
  +                    if ( currentIdx >= digestLen || read != 
generatedDigest[currentIdx] )
                       {
                           return false;
                       }
  @@ -68,23 +68,25 @@
               }
               catch ( IOException e )
               {
  -                throw new ArtifactDigestException("Cannot verify digest for 
artifact file: \'" + artifactFile + "\' against digest file: \'" + digestFile + 
"\' using algorithm: \'" + algorithm + "\'", e);
  +                throw new ArtifactDigestException( "Cannot verify digest for 
artifact file: \'" + artifactFile
  +                    + "\' against digest file: \'" + digestFile + "\' using 
algorithm: \'" + algorithm + "\'", e );
               }
               finally
               {
                   IOUtil.close( in );
               }
  -            
  +
           }
           else
           {
               return false;
           }
  -        
  +
           return true;
       }
  -    
  -    private byte[] generateArtifactDigest( File artifactFile, String 
algorithm ) throws ArtifactDigestException
  +
  +    public byte[] generateArtifactDigest( File artifactFile, String 
algorithm )
  +        throws ArtifactDigestException
       {
           MessageDigest digest = null;
           try
  @@ -105,7 +107,7 @@
               int read = -1;
               while ( ( read = in.read( buffer ) ) > -1 )
               {
  -                digest.update(buffer, 0, read);
  +                digest.update( buffer, 0, read );
               }
           }
           catch ( IOException e )
  @@ -120,14 +122,17 @@
           return digest.digest();
       }
   
  -    private void writeDigestFile( File digestFile, byte[] digestData ) 
throws IOException
  +    private void writeDigestFile( File digestFile, byte[] digestData )
  +        throws IOException
       {
  -        OutputStream out = null;
  +        Writer out = null;
           try
           {
  -            out = new FileOutputStream( digestFile );
  -            out.write( digestData );
  -            out.flush();
  +            out = new FileWriter( digestFile );
  +            for ( int i = 0; i < digestData.length; i++ )
  +            {
  +                out.write( Integer.toHexString( digestData[i] ) );
  +            }
           }
           finally
           {
  
  
  
  1.1                  
maven-components/sandbox/repoclean/src/test/java/org/apache/maven/tools/repoclean/digest/ArtifactDigestVerifierTest.java
  
  Index: ArtifactDigestVerifierTest.java
  ===================================================================
  package org.apache.maven.tools.repoclean.digest;
  
  import org.apache.maven.artifact.Artifact;
  import org.apache.maven.artifact.DefaultArtifact;
  import org.apache.maven.tools.repoclean.TestSupport;
  import org.apache.maven.tools.repoclean.report.DummyReporter;
  import org.codehaus.plexus.PlexusTestCase;
  
  import java.io.File;
  
  /*
   * Copyright 2001-2005 The Apache Software Foundation.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  public class ArtifactDigestVerifierTest
      extends PlexusTestCase
  {
      
      public void testShouldWriteBothMD5AndSHA1DigestFiles() throws Exception
      {
          ArtifactDigestVerifier verifier = (ArtifactDigestVerifier) lookup( 
ArtifactDigestVerifier.ROLE );
          
          Artifact artifact = new DefaultArtifact("testGroup", "testArtifact", 
"1.0", "jar");
          
          File artifactFile = 
TestSupport.getResource("digest/ArtifactDigestorTest/digestFormatVerifyArtifact.jar");
          
          artifact.setFile(artifactFile);
          
          File tempFile = File.createTempFile("artifactDigestFileVerifyBase", 
"jar");
          
          File md5 = new File(tempFile + ".md5");
          File sha1 = new File(tempFile + ".sha1");
          
          System.out.println("[INFO] We expect warnings for missing source 
digest files here:");
          verifier.verifyDigest(artifact, tempFile, new DummyReporter(), false);
          System.out.println("[INFO] Target digest files should have been 
created.");
          
          assertTrue(md5.exists());
          assertTrue(sha1.exists());
      }
  
  }
  
  
  
  1.1                  
maven-components/sandbox/repoclean/src/test/java/org/apache/maven/tools/repoclean/digest/ArtifactDigestorTest.java
  
  Index: ArtifactDigestorTest.java
  ===================================================================
  package org.apache.maven.tools.repoclean.digest;
  
  import org.apache.maven.tools.repoclean.TestSupport;
  
  import java.io.File;
  import java.io.FileReader;
  import java.util.Arrays;
  
  import junit.framework.TestCase;
  
  /*
   * Copyright 2001-2005 The Apache Software Foundation.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  public class ArtifactDigestorTest
      extends TestCase
  {
      
      private static final String DIGEST_FORMAT_VERIFY_ARTIFACT = 
"digestFormatVerifyArtifact.jar";
      
      public void testShouldWriteDigestFileInHexNotBinary() throws Exception
      {
          ArtifactDigestor digestor = new ArtifactDigestor();
          
          File artifact = TestSupport.getMyResource(this, 
DIGEST_FORMAT_VERIFY_ARTIFACT);
          
          byte[] rawDigest = digestor.generateArtifactDigest( artifact, 
ArtifactDigestor.MD5 );
          
          StringBuffer rawConverted = new StringBuffer(rawDigest.length * 2);
          for ( int i = 0; i < rawDigest.length; i++ )
          {
              rawConverted.append(Integer.toHexString(rawDigest[i]));
          }
          
          File digestFile = 
File.createTempFile("repoclean-artifactDigest-formatTest", ".md5");
          
          digestor.createArtifactDigest( artifact, digestFile, 
ArtifactDigestor.MD5 );
          
          FileReader reader = new FileReader(digestFile);
          StringBuffer written = new StringBuffer(rawDigest.length * 2);
          
          char[] cbuf = new char[rawDigest.length * 2];
          int read = -1;
          
          while((read = reader.read(cbuf)) > -1)
          {
              written.append(cbuf, 0, read);
          }
          
          reader.close();
          
          assertEquals(rawConverted.length(), written.length());
          
          cbuf = new char[written.length()];
          char[] cbuf2 = new char[cbuf.length];
          
          written.getChars(0, cbuf.length, cbuf, 0);
          rawConverted.getChars(0, cbuf2.length, cbuf2, 0);
          
          assertTrue(Arrays.equals(cbuf, cbuf2));
      }
  
  }
  
  
  
  1.2       +42 -18    
maven-components/sandbox/repoclean/src/test/java/org/apache/maven/tools/repoclean/TestSupport.java
  
  Index: TestSupport.java
  ===================================================================
  RCS file: 
/home/cvs/maven-components/sandbox/repoclean/src/test/java/org/apache/maven/tools/repoclean/TestSupport.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TestSupport.java  19 Apr 2005 20:05:15 -0000      1.1
  +++ TestSupport.java  20 Apr 2005 00:44:17 -0000      1.2
  @@ -21,39 +21,63 @@
   
   public final class TestSupport
   {
  -    
  +
  +    private static final String REPO_SUBDIR = "repo/";
  +
       private static final String REPO_MARKER = "repo-marker.txt";
  -    private static final int MY_PACKAGE_TRIM = 
TestSupport.class.getPackage().getName().length() + 1;
  -    
  +
  +    private static final int PACKAGE_TRIM = 
TestSupport.class.getPackage().getName().length() + 1;
  +
       private TestSupport()
       {
       }
  -    
  -    public static String getMyRepositoryPath(Object testInstance)
  +
  +    public static String getMyRepositoryPath( Object testInstance )
       {
           Class testClass = testInstance.getClass();
  -        
  -        String myRepo = testClass.getName().substring(MY_PACKAGE_TRIM);
  -        
  -        return getRepositoryPath(myRepo);
  +
  +        String myRepo = testClass.getName().substring( PACKAGE_TRIM );
  +
  +        return getRepositoryPath( myRepo );
  +    }
  +
  +    public static File getMyResource( Object testInstance, String 
relativePath )
  +    {
  +        Class testClass = testInstance.getClass();
  +
  +        String myPath = testClass.getName().substring( PACKAGE_TRIM );
  +
  +        String resource = myPath.replace( '.', '/' );
  +
  +        if ( !relativePath.startsWith( "/" ) )
  +        {
  +            resource += "/";
  +        }
  +
  +        resource += relativePath;
  +
  +        return getResource( resource );
       }
   
       public static String getRepositoryPath( String relativePath )
       {
  -        String base = relativePath.replace('.', '/');
  -        
  -        if(!base.endsWith("/"))
  +        String base = relativePath.replace( '.', '/' );
  +
  +        if ( !base.endsWith( "/" ) )
           {
               base += "/";
           }
  -        
  +
  +        return getResource( base + REPO_SUBDIR + REPO_MARKER 
).getParentFile().getAbsolutePath();
  +    }
  +
  +    public static File getResource( String relativePath )
  +    {
           ClassLoader cloader = Thread.currentThread().getContextClassLoader();
           
  -        URL repoMarkerResource = cloader.getResource(base + REPO_MARKER);
  -        
  -        File repoMarker = new 
File(repoMarkerResource.getPath()).getAbsoluteFile();
  -        
  -        return repoMarker.getParentFile().getPath();
  +        URL resource = cloader.getResource( relativePath );
  +
  +        return new File( resource.getPath() ).getAbsoluteFile();
       }
   
   }
  
  
  
  1.1                  
maven-components/sandbox/repoclean/src/test/resources/digest/ArtifactDigestorTest/digestFormatVerifyArtifact.jar
  
        <<Binary file>>
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to