Author: ogusakov Date: Thu Aug 21 13:15:13 2008 New Revision: 687846 URL: http://svn.apache.org/viewvc?rev=687846&view=rev Log: Split verification for reader and writer for finer configuration, added signature verification to local repo reader.
Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/2/a-2.jar (with props) maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/2/a-2.jar.asc maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.jar.asc maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.jar.sha1 maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.pom.asc maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.pom.sha1 maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/maven-metadata-local.xml Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/AbstractRepository.java maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/Repository.java maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2.java maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/Messages.properties maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2Test.java maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2Test.java maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Server.java maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyDeployerTest.java maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/AbstractRepository.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/AbstractRepository.java?rev=687846&r1=687845&r2=687846&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/AbstractRepository.java (original) +++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/AbstractRepository.java Thu Aug 21 13:15:13 2008 @@ -210,6 +210,11 @@ return repositoryQualityRange.isAcceptedQuality( quality ); } //--------------------------------------------------------------------------- + public boolean hasServer() + { + return server != null; + } + //--------------------------------------------------------------------------- public Server getServer() { return server; Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/Repository.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/Repository.java?rev=687846&r1=687845&r2=687846&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/Repository.java (original) +++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-api/src/main/java/org/apache/maven/mercury/repository/api/Repository.java Thu Aug 21 13:15:13 2008 @@ -111,9 +111,10 @@ throws NonExistentProtocolException; /** - * returns server where this repo resides + * server where this repo resides. For local repo - folder as URL and stream verifiers are important. * * @return server */ + boolean hasServer(); Server getServer(); } Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java?rev=687846&r1=687845&r2=687846&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java (original) +++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2.java Thu Aug 21 13:15:13 2008 @@ -2,10 +2,13 @@ import java.io.File; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import org.apache.maven.mercury.artifact.Artifact; import org.apache.maven.mercury.artifact.ArtifactBasicMetadata; @@ -18,6 +21,10 @@ import org.apache.maven.mercury.builder.api.MetadataProcessingException; import org.apache.maven.mercury.builder.api.MetadataProcessor; import org.apache.maven.mercury.builder.api.MetadataReader; +import org.apache.maven.mercury.crypto.api.StreamObserverException; +import org.apache.maven.mercury.crypto.api.StreamVerifier; +import org.apache.maven.mercury.crypto.api.StreamVerifierException; +import org.apache.maven.mercury.crypto.api.StreamVerifierFactory; import org.apache.maven.mercury.repository.api.AbstracRepositoryReader; import org.apache.maven.mercury.repository.api.AbstractRepository; import org.apache.maven.mercury.repository.api.LocalRepository; @@ -75,6 +82,11 @@ RepositoryOperationResult<DefaultArtifact> res = new RepositoryOperationResult<DefaultArtifact>(); + Set<StreamVerifierFactory> vFacs = null; + + if( _repo.hasServer() && _repo.getServer().hasReaderStreamVerifierFactories() ) + vFacs = _repo.getServer().getReaderStreamVerifierFactories(); + for( ArtifactBasicMetadata bmd : query ) { DefaultArtifact da = bmd instanceof DefaultArtifact ? (DefaultArtifact)bmd : new DefaultArtifact( bmd ); @@ -195,10 +207,11 @@ continue; } - da.setFile( binary ); - try // reading pom if one exists { + if( checkFile( binary, vFacs ) ) + da.setFile( binary ); + if( "pom".equals( bmd.getType() ) ) { da.setPomBlob( FileUtil.readRawData( binary ) ); @@ -207,14 +220,17 @@ { File pomFile = new File( _repoDir, relPathOf( da, null, "pom", dav) ); if( pomFile.exists() ) + { + if( checkFile( pomFile, vFacs ) ) da.setPomBlob( FileUtil.readRawData( pomFile ) ); + } else _log.warn( _lang.getMessage( "pom.not.found", bmd.toString()) ); } res.add( da ); } - catch( IOException e ) + catch( Exception e ) { throw new RepositoryException( e ); } @@ -222,6 +238,86 @@ return res; } //--------------------------------------------------------------------------------------------------------------- + private static boolean checkFile( File f, Set<StreamVerifierFactory> vFacs ) + throws RepositoryException, StreamVerifierException + { + if( vFacs != null ) + { + String fileName = f.getAbsolutePath(); + + HashSet<StreamVerifier> vs = new HashSet<StreamVerifier>( vFacs.size() ); + + for( StreamVerifierFactory svf : vFacs ) + { + StreamVerifier sv = svf.newInstance(); + String ext = sv.getAttributes().getExtension(); + String sigFileName = fileName+(ext.startsWith( "." )?"":".")+ext; + File sigFile = new File( sigFileName ); + if( sigFile.exists() ) + { + try + { + sv.initSignature( FileUtil.readRawDataAsString( sigFile ) ); + } + catch( IOException e ) + { + throw new RepositoryException( _lang.getMessage( "cannot.read.signature.file", sigFileName, e.getMessage() ) ); + } + vs.add( sv ); + } + else if( ! sv.getAttributes().isLenient() ) + { + throw new RepositoryException( _lang.getMessage( "no.signature.file", ext, sigFileName ) ); + } + // otherwise ignore absence of signature file, if verifier is lenient + } + + FileInputStream fin = null; + try + { + fin = new FileInputStream( f ); + byte [] buf = new byte[ 1024 ]; + int n = -1; + while( (n = fin.read( buf )) != -1 ) + { + for( StreamVerifier sv : vs ) + try + { + sv.bytesReady( buf, 0, n ); + } + catch( StreamObserverException e ) + { + if( ! sv.getAttributes().isLenient() ) + throw new RepositoryException(e); + } + } + + for( StreamVerifier sv : vs ) + { + if( sv.verifySignature() ) + { + if( sv.getAttributes().isSufficient() ) + break; + } + else + { + if( !sv.getAttributes().isLenient() ) + throw new RepositoryException( _lang.getMessage( "signature.failed", sv.getAttributes().getExtension(), fileName ) ); + } + } + } + catch( IOException e ) + { + throw new RepositoryException(e); + } + finally + { + if( fin != null ) try { fin.close(); } catch( Exception any ) {} + } + } + return true; + } + //--------------------------------------------------------------------------------------------------------------- /** * */ Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2.java?rev=687846&r1=687845&r2=687846&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2.java (original) +++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2.java Thu Aug 21 13:15:13 2008 @@ -93,8 +93,8 @@ Set<StreamVerifierFactory> vFacs = null; Server server = _repo.getServer(); - if( server != null && server.hasStreamVerifierFactories() ) - vFacs = server.getStreamVerifierFactories(); + if( server != null && server.hasWriterStreamVerifierFactories() ) + vFacs = server.getWriterStreamVerifierFactories(); if( vFacs == null ) // let it be empty, but not null vFacs = new HashSet<StreamVerifierFactory>(1); Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/Messages.properties URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/Messages.properties?rev=687846&r1=687845&r2=687846&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/Messages.properties (original) +++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/main/java/org/apache/maven/mercury/repository/local/m2/Messages.properties Thu Aug 21 13:15:13 2008 @@ -7,4 +7,7 @@ gavdir.not.found=No directory {1} for artifact {0} pom.not.found=Artifact {0} - binary exists, but POM not found in the repository artifact.no.stream=Cannot find either input stream or file, associated with artifact {0} -pom.artifact.no.stream=Cannot find either pom blob, input stream or file, associated with artifact {0} \ No newline at end of file +pom.artifact.no.stream=Cannot find either pom blob, input stream or file, associated with artifact {0} +no.signature.file=Verifier for {0} is mandatory, but file {1} does not exist +signature.failed=Signature "{0}": verification failed for file {1} +cannot.read.signature.file=Cannot read signature file {0}, error: {1} \ No newline at end of file Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2Test.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2Test.java?rev=687846&r1=687845&r2=687846&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2Test.java (original) +++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryReaderM2Test.java Thu Aug 21 13:15:13 2008 @@ -2,6 +2,7 @@ import java.io.File; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Map; @@ -12,11 +13,15 @@ import org.apache.maven.mercury.artifact.DefaultArtifact; import org.apache.maven.mercury.artifact.QualityRange; import org.apache.maven.mercury.builder.api.MetadataProcessor; +import org.apache.maven.mercury.crypto.api.StreamVerifierAttributes; +import org.apache.maven.mercury.crypto.api.StreamVerifierException; +import org.apache.maven.mercury.crypto.api.StreamVerifierFactory; +import org.apache.maven.mercury.crypto.pgp.PgpStreamVerifierFactory; +import org.apache.maven.mercury.crypto.sha.SHA1VerifierFactory; import org.apache.maven.mercury.repository.api.RepositoryException; import org.apache.maven.mercury.repository.api.RepositoryOperationResult; import org.apache.maven.mercury.repository.api.RepositoryReader; -import org.apache.maven.mercury.repository.api.RepositoryWriter; -import org.apache.maven.mercury.util.FileUtil; +import org.apache.maven.mercury.transport.api.Server; /** * @@ -34,16 +39,24 @@ List<ArtifactBasicMetadata> query; ArtifactBasicMetadata bmd; + + private static final String publicKeyFile = "/pgp/pubring.gpg"; + + Server server; + HashSet<StreamVerifierFactory> factories; //------------------------------------------------------------------------------ @Override protected void setUp() throws Exception { - repo = new LocalRepositoryM2( "local-repo-m2", new File("./target/test-classes/repo") ); mdProcessor = new MetadataProcessorMock(); - reader = repo.getReader( mdProcessor ); - + query = new ArrayList<ArtifactBasicMetadata>(); + + server = new Server( "test", new File("./target/test-classes/repo").toURL() ); + + repo = new LocalRepositoryM2( server ); + reader = repo.getReader( mdProcessor ); } //------------------------------------------------------------------------------ public void testReadReleaseVersion() @@ -60,6 +73,10 @@ RepositoryOperationResult<ArtifactBasicMetadata> ror = res.get( bmd ); assertNotNull( ror ); + + if( ror.hasExceptions() ) + System.out.println( ror.getExceptions() ); + assertFalse( ror.hasExceptions() ); assertTrue( ror.hasResults() ); @@ -86,6 +103,10 @@ RepositoryOperationResult<ArtifactBasicMetadata> ror = res.get( bmd ); assertNotNull( ror ); + + if( ror.hasExceptions() ) + System.out.println( ror.getExceptions() ); + assertFalse( ror.hasExceptions() ); assertTrue( ror.hasResults() ); @@ -125,6 +146,10 @@ RepositoryOperationResult<DefaultArtifact> ror = reader.readArtifacts( query ); assertNotNull( ror ); + + if( ror.hasExceptions() ) + System.out.println( ror.getExceptions() ); + assertFalse( ror.hasExceptions() ); assertTrue( ror.hasResults() ); @@ -150,6 +175,10 @@ RepositoryOperationResult<DefaultArtifact> ror = reader.readArtifacts( query ); assertNotNull( ror ); + + if( ror.hasExceptions() ) + System.out.println( ror.getExceptions() ); + assertFalse( ror.hasExceptions() ); assertTrue( ror.hasResults() ); @@ -165,8 +194,6 @@ assertTrue( da.getFile().exists() ); assertEquals( 159630, da.getFile().length() ); assertNotNull( da.getPomBlob() ); - -System.out.println( new String(da.getPomBlob()) ); } //------------------------------------------------------------------------------ public void testReadSnapshotTS() @@ -178,6 +205,10 @@ RepositoryOperationResult<DefaultArtifact> ror = reader.readArtifacts( query ); assertNotNull( ror ); + + if( ror.hasExceptions() ) + System.out.println( ror.getExceptions() ); + assertFalse( ror.hasExceptions() ); assertTrue( ror.hasResults() ); @@ -193,8 +224,6 @@ assertTrue( da.getFile().exists() ); assertEquals( 14800, da.getFile().length() ); assertNotNull( da.getPomBlob() ); - -System.out.println( new String(da.getPomBlob()) ); } //------------------------------------------------------------------------------ public void testReadLatest() @@ -206,6 +235,10 @@ RepositoryOperationResult<DefaultArtifact> ror = reader.readArtifacts( query ); assertNotNull( ror ); + + if( ror.hasExceptions() ) + System.out.println( ror.getExceptions() ); + assertFalse( ror.hasExceptions() ); assertTrue( ror.hasResults() ); @@ -235,6 +268,10 @@ RepositoryOperationResult<DefaultArtifact> ror = reader.readArtifacts( query ); assertNotNull( ror ); + + if( ror.hasExceptions() ) + System.out.println( ror.getExceptions() ); + assertFalse( ror.hasExceptions() ); assertTrue( ror.hasResults() ); @@ -252,8 +289,129 @@ assertTrue( da.getFile().exists() ); assertEquals( 14800, da.getFile().length() ); assertNotNull( da.getPomBlob() ); + } + //------------------------------------------------------------------------------ + public void testReadAndVerifyGoodArtifact() + throws IllegalArgumentException, RepositoryException, StreamVerifierException + { + // verifiers + factories = new HashSet<StreamVerifierFactory>(); + factories.add( + new PgpStreamVerifierFactory( + new StreamVerifierAttributes( PgpStreamVerifierFactory.DEFAULT_EXTENSION, false, true ) + , getClass().getResourceAsStream( publicKeyFile ) + ) + ); + factories.add( new SHA1VerifierFactory(false,false) ); + server.setReaderStreamVerifierFactories(factories); + + bmd = new ArtifactBasicMetadata("a:a:4"); + query.add( bmd ); + + RepositoryOperationResult<DefaultArtifact> ror = reader.readArtifacts( query ); -System.out.println( new String(da.getPomBlob()) ); + assertNotNull( ror ); + + if( ror.hasExceptions() ) + System.out.println( ror.getExceptions() ); + + assertFalse( ror.hasExceptions() ); + assertTrue( ror.hasResults() ); + + List<DefaultArtifact> res = ror.getResults(); + + assertNotNull( res ); + assertEquals( 1, res.size() ); + + DefaultArtifact da = res.get( 0 ); + + assertNotNull( da ); + assertNotNull( da.getFile() ); + assertTrue( da.getFile().exists() ); + assertNotNull( da.getPomBlob() ); + } + //------------------------------------------------------------------------------ + public void testReadAndVerifyArtifactNoSig() + throws IllegalArgumentException, StreamVerifierException + { + // verifiers + factories = new HashSet<StreamVerifierFactory>(); + factories.add( + new PgpStreamVerifierFactory( + new StreamVerifierAttributes( PgpStreamVerifierFactory.DEFAULT_EXTENSION, false, true ) + , getClass().getResourceAsStream( publicKeyFile ) + ) + ); + server.setReaderStreamVerifierFactories(factories); + + bmd = new ArtifactBasicMetadata("a:a:3"); + query.add( bmd ); + + try + { + reader.readArtifacts( query ); + } + catch( RepositoryException e ) + { + System.out.println( "Expected exception: "+e.getMessage() ); + return; + } + fail( "Artifact a:a:3 does not have .asc signature, PGP verifier is not lenient, but this did not cause a RepositoryException" ); + } + //------------------------------------------------------------------------------ + public void testReadAndVerifyArtifactBadSig() + throws IllegalArgumentException, StreamVerifierException + { + // verifiers + factories = new HashSet<StreamVerifierFactory>(); + factories.add( + new PgpStreamVerifierFactory( + new StreamVerifierAttributes( PgpStreamVerifierFactory.DEFAULT_EXTENSION, false, true ) + , getClass().getResourceAsStream( publicKeyFile ) + ) + ); + server.setReaderStreamVerifierFactories(factories); + + bmd = new ArtifactBasicMetadata("a:a:2"); + query.add( bmd ); + + try + { + reader.readArtifacts( query ); + } + catch( RepositoryException e ) + { + System.out.println( "Expected exception: "+e.getMessage() ); + return; + } + fail( "Artifact a:a:2 does have a bad .asc (PGP) signature, PGP verifier is not lenient, but this did not cause a RepositoryException" ); + } + //------------------------------------------------------------------------------ + public void testReadAndVerifyArtifactNoSigLenientVerifier() + throws IllegalArgumentException, StreamVerifierException + { + // verifiers + factories = new HashSet<StreamVerifierFactory>(); + factories.add( + new PgpStreamVerifierFactory( + new StreamVerifierAttributes( PgpStreamVerifierFactory.DEFAULT_EXTENSION, true, true ) + , getClass().getResourceAsStream( publicKeyFile ) + ) + ); + factories.add( new SHA1VerifierFactory(true,false) ); + server.setReaderStreamVerifierFactories(factories); + + bmd = new ArtifactBasicMetadata("a:a:3"); + query.add( bmd ); + + try + { + reader.readArtifacts( query ); + } + catch( RepositoryException e ) + { + fail( "Artifact a:a:3 does not have .asc signature, PGP verifier is lenient, but still caused a RepositoryException: "+e.getMessage() ); + } } //------------------------------------------------------------------------------ //------------------------------------------------------------------------------ Modified: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2Test.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2Test.java?rev=687846&r1=687845&r2=687846&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2Test.java (original) +++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/java/org/apache/maven/mercury/repository/local/m2/LocalRepositoryWriterM2Test.java Thu Aug 21 13:15:13 2008 @@ -75,7 +75,7 @@ ) ); factories.add( new SHA1VerifierFactory(false,false) ); - server.setStreamVerifierFactories(factories); + server.setWriterStreamVerifierFactories(factories); repo = new LocalRepositoryM2( server ); reader = repo.getReader( mdProcessor ); @@ -142,4 +142,16 @@ assertEquals( 7785, ap.length() ); } + public void ntestTemp() + throws Exception + { + Set<Artifact> set = new HashSet<Artifact>(3); + DefaultArtifact da = new DefaultArtifact( new ArtifactBasicMetadata("a:a:4") ); + da.setPomBlob( FileUtil.readRawData( getClass().getResourceAsStream( "/a-4.pom" ) ) ); + da.setStream( getClass().getResourceAsStream( "/a-4.jar" ) ); + set.add( da ); + + writer.writeArtifact( set ); + } + } Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/2/a-2.jar URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/2/a-2.jar?rev=687846&view=auto ============================================================================== Binary file - no diff available. Propchange: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/2/a-2.jar ------------------------------------------------------------------------------ svn:mime-type = application/octet-stream Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/2/a-2.jar.asc URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/2/a-2.jar.asc?rev=687846&view=auto ============================================================================== --- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/2/a-2.jar.asc (added) +++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/2/a-2.jar.asc Thu Aug 21 13:15:13 2008 @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- +Version: BCPG v1.40 + +iEYEABECAAYFAkitxHsACgkQDttdkRQbxPI7ywCdHDfUKblJaNRHID0S4yuhXCGO +oi8An2QRvn7A3KnrUq1v92t6bM4IKkMl +=khMy +-----END PGP SIGNATURE----- Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.jar.asc URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.jar.asc?rev=687846&view=auto ============================================================================== --- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.jar.asc (added) +++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.jar.asc Thu Aug 21 13:15:13 2008 @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- +Version: BCPG v1.40 + +iEYEABECAAYFAkitxHsACgkQDttdkRQbxPI7ywCdHDfUKblJaNRHID0S4yuhXCGO +oi8An2QRvn7A3KnrUq1v92t6bM4IKkMl +=khMy +-----END PGP SIGNATURE----- Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.jar.sha1 URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.jar.sha1?rev=687846&view=auto ============================================================================== --- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.jar.sha1 (added) +++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.jar.sha1 Thu Aug 21 13:15:13 2008 @@ -0,0 +1 @@ +c35fe6fb7d71197acbf7c47c194c45082e4b65f2 \ No newline at end of file Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.pom.asc URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.pom.asc?rev=687846&view=auto ============================================================================== --- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.pom.asc (added) +++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.pom.asc Thu Aug 21 13:15:13 2008 @@ -0,0 +1,7 @@ +-----BEGIN PGP SIGNATURE----- +Version: BCPG v1.40 + +iEYEABECAAYFAkitxHsACgkQDttdkRQbxPLETACfaU+Tv6TEnMuoc8zHEpXsCqFA +kQsAoIbUVY/qAn6WVUwr3HH1l23wyql3 +=yXa4 +-----END PGP SIGNATURE----- Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.pom.sha1 URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.pom.sha1?rev=687846&view=auto ============================================================================== --- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.pom.sha1 (added) +++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/a-4.pom.sha1 Thu Aug 21 13:15:13 2008 @@ -0,0 +1 @@ +5e06980bdcbc3985bd872a32b7776fa5063aa6b3 \ No newline at end of file Added: maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/maven-metadata-local.xml URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/maven-metadata-local.xml?rev=687846&view=auto ============================================================================== --- maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/maven-metadata-local.xml (added) +++ maven/sandbox/trunk/mercury/mercury-repo/mercury-repo-local-m2/src/test/resources/repo/a/a/4/maven-metadata-local.xml Thu Aug 21 13:15:13 2008 @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?><metadata> + <groupId>a</groupId> + <artifactId>a</artifactId> + <version>4</version> + <versioning> + <versions> + <version>4</version> + </versions> + <lastUpdated>20080821193939</lastUpdated> + </versioning> +</metadata> \ No newline at end of file Modified: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Server.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Server.java?rev=687846&r1=687845&r2=687846&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Server.java (original) +++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Server.java Thu Aug 21 13:15:13 2008 @@ -33,7 +33,8 @@ private boolean requireEncryption = false; private boolean requireTrustedServer = false; - private Set<StreamVerifierFactory> streamVerifierFactories; + private Set<StreamVerifierFactory> writerStreamVerifierFactories; + private Set<StreamVerifierFactory> readerStreamVerifierFactories; public Server( String id, URL url ) { @@ -97,19 +98,34 @@ return this.serverCredentials; } - public boolean hasStreamVerifierFactories() + public boolean hasWriterStreamVerifierFactories() { - return streamVerifierFactories != null && streamVerifierFactories.size() > 0; + return writerStreamVerifierFactories != null && writerStreamVerifierFactories.size() > 0; } - public Set<StreamVerifierFactory> getStreamVerifierFactories() + public Set<StreamVerifierFactory> getWriterStreamVerifierFactories() { - return streamVerifierFactories; + return writerStreamVerifierFactories; } - public void setStreamVerifierFactories( Set<StreamVerifierFactory> factories ) + public void setWriterStreamVerifierFactories( Set<StreamVerifierFactory> factories ) { - streamVerifierFactories = factories; + writerStreamVerifierFactories = factories; + } + + public boolean hasReaderStreamVerifierFactories() + { + return readerStreamVerifierFactories != null && readerStreamVerifierFactories.size() > 0; + } + + public Set<StreamVerifierFactory> getReaderStreamVerifierFactories() + { + return readerStreamVerifierFactories; + } + + public void setReaderStreamVerifierFactories( Set<StreamVerifierFactory> factories ) + { + readerStreamVerifierFactories = factories; } public boolean isRequireEncryption() Modified: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java?rev=687846&r1=687845&r2=687846&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java (original) +++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java Thu Aug 21 13:15:13 2008 @@ -332,7 +332,7 @@ throws StreamVerifierException { HashSet<StreamObserver> observers = new HashSet<StreamObserver>(); - Set<StreamVerifierFactory> factories = server.getStreamVerifierFactories(); + Set<StreamVerifierFactory> factories = server.getWriterStreamVerifierFactories(); for (StreamVerifierFactory f:factories) { observers.add( f.newInstance() ); Modified: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java?rev=687846&r1=687845&r2=687846&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java (original) +++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java Thu Aug 21 13:15:13 2008 @@ -314,7 +314,7 @@ HashSet<StreamObserver> observers = new HashSet<StreamObserver>(); if (server != null) { - Set<StreamVerifierFactory> factories = server.getStreamVerifierFactories(); + Set<StreamVerifierFactory> factories = server.getReaderStreamVerifierFactories(); for( StreamVerifierFactory f:factories ) { observers.add( f.newInstance() ); Modified: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyDeployerTest.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyDeployerTest.java?rev=687846&r1=687845&r2=687846&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyDeployerTest.java (original) +++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyDeployerTest.java Thu Aug 21 13:15:13 2008 @@ -182,7 +182,7 @@ , keyId, secretKeyPass ) ); - remoteServerType.setStreamVerifierFactories(factories); + remoteServerType.setWriterStreamVerifierFactories(factories); System.err.println("Basedir = "+_baseDir.getAbsolutePath()); @@ -314,7 +314,7 @@ public void testUploadFail () throws Exception { factories.add(new SHA1VerifierFactory(false, true)); //!lenient, sufficient - remoteServerType.setStreamVerifierFactories(factories); + remoteServerType.setWriterStreamVerifierFactories(factories); HashSet<Binding> bindings = new HashSet<Binding>(); DeployRequestImpl request = new DeployRequestImpl(); @@ -388,7 +388,7 @@ public void testUploadFailFast () throws Exception { factories.add(new SHA1VerifierFactory(false, true)); //!lenient, sufficient - remoteServerType.setStreamVerifierFactories(factories); + remoteServerType.setWriterStreamVerifierFactories(factories); HashSet<Binding> bindings = new HashSet<Binding>(); DeployRequestImpl request = new DeployRequestImpl(); @@ -446,7 +446,7 @@ public void testMemoryDeployment () throws Exception { factories.add(new SHA1VerifierFactory(false, true)); //!lenient, sufficient - remoteServerType.setStreamVerifierFactories(factories); + remoteServerType.setWriterStreamVerifierFactories(factories); HashSet<Binding> bindings = new HashSet<Binding>(); DeployRequestImpl request = new DeployRequestImpl(); Modified: maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java?rev=687846&r1=687845&r2=687846&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java (original) +++ maven/sandbox/trunk/mercury/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java Thu Aug 21 13:15:13 2008 @@ -164,7 +164,7 @@ throws Exception { factories.add( new SHA1VerifierFactory(false, true) ); //!lenient, sufficient - remoteServerType.setStreamVerifierFactories(factories); + remoteServerType.setReaderStreamVerifierFactories(factories); //make local dir to put stuff in dir = mkTempDir(); @@ -223,7 +223,7 @@ , getClass().getResourceAsStream( publicKeyFile ) ) ); - remoteServerType.setStreamVerifierFactories(factories); + remoteServerType.setReaderStreamVerifierFactories(factories); //make local dir to put stuff in dir = mkTempDir(); @@ -252,7 +252,7 @@ throws Exception { factories.add(new SHA1VerifierFactory(false, true)); //!lenient, sufficient - remoteServerType.setStreamVerifierFactories(factories); + remoteServerType.setReaderStreamVerifierFactories(factories); //make local dir to put stuff in dir = mkTempDir(); @@ -312,7 +312,7 @@ throws Exception { factories.add(new SHA1VerifierFactory(true, true)); //lenient, sufficient - remoteServerType.setStreamVerifierFactories(factories); + remoteServerType.setReaderStreamVerifierFactories(factories); //make local dir to put stuff in dir = mkTempDir(); @@ -366,7 +366,7 @@ throws Exception { factories.add(new SHA1VerifierFactory(true, true)); //lenient, sufficient - remoteServerType.setStreamVerifierFactories(factories); + remoteServerType.setReaderStreamVerifierFactories(factories); //make local dir to put stuff in dir = mkTempDir(); DefaultRetrievalRequest request = new DefaultRetrievalRequest(); @@ -415,7 +415,7 @@ public void testValidatorSuccess() throws Exception { factories.add(new SHA1VerifierFactory(true, true)); //lenient, sufficient - remoteServerType.setStreamVerifierFactories(factories); + remoteServerType.setReaderStreamVerifierFactories(factories); //make local dir to put stuff in dir = mkTempDir(); @@ -469,7 +469,7 @@ public void testValidatorFailure () throws Exception { factories.add(new SHA1VerifierFactory(true, true)); //lenient, sufficient - remoteServerType.setStreamVerifierFactories(factories); + remoteServerType.setReaderStreamVerifierFactories(factories); //make local dir to put stuff in dir = mkTempDir(); @@ -523,7 +523,7 @@ public void testMemoryRetrieval () throws Exception { factories.add(new SHA1VerifierFactory(true, true)); //lenient, sufficient - remoteServerType.setStreamVerifierFactories(factories); + remoteServerType.setReaderStreamVerifierFactories(factories); //make local dir to put stuff in dir = mkTempDir(); Modified: maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java?rev=687846&r1=687845&r2=687846&view=diff ============================================================================== --- maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java (original) +++ maven/sandbox/trunk/mercury/mercury-util/src/main/java/org/apache/maven/mercury/util/FileUtil.java Thu Aug 21 13:15:13 2008 @@ -71,6 +71,12 @@ writeRawData( fOut, fis ); } //--------------------------------------------------------------------------------------------------------------- + public static String readRawDataAsString( File file ) + throws IOException + { + return new String( readRawData( file ), DEFAULT_CHARSET ); + } + //--------------------------------------------------------------------------------------------------------------- public static byte[] readRawData( File file ) throws IOException {