You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by og...@apache.org on 2009/02/05 20:17:13 UTC
svn commit: r741250 - in /maven/mercury/trunk:
mercury-it/src/test/java/org/apache/maven/mercury/all/
mercury-it/src/test/java/org/apache/maven/mercury/all/it/
mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api...
Author: ogusakov
Date: Thu Feb 5 19:17:12 2009
New Revision: 741250
URL: http://svn.apache.org/viewvc?rev=741250&view=rev
Log:
[MERCURY-83] added "exempt" flag to transfers to facilitate excluding of repository metadata from stream verification
Added:
maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/all/
maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/all/it/
maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/all/it/AbstractTestCase.java (with props)
maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/all/it/AllTestCases.java (with props)
Modified:
maven/mercury/trunk/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Binding.java
maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java
maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java
maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java
maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java
maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java
Added: maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/all/it/AbstractTestCase.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/all/it/AbstractTestCase.java?rev=741250&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/all/it/AbstractTestCase.java (added)
+++ maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/all/it/AbstractTestCase.java Thu Feb 5 19:17:12 2009
@@ -0,0 +1,36 @@
+/*
+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.
+*/
+
+package org.apache.maven.mercury.all.it;
+
+import org.codehaus.plexus.PlexusTestCase;
+
+import junit.framework.TestCase;
+
+/**
+ * Common tests code
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public abstract class AbstractTestCase
+extends PlexusTestCase
+{
+}
Propchange: maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/all/it/AbstractTestCase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/all/it/AbstractTestCase.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Added: maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/all/it/AllTestCases.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/all/it/AllTestCases.java?rev=741250&view=auto
==============================================================================
--- maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/all/it/AllTestCases.java (added)
+++ maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/all/it/AllTestCases.java Thu Feb 5 19:17:12 2009
@@ -0,0 +1,77 @@
+/*
+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.
+*/
+
+package org.apache.maven.mercury.all.it;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+/**
+ * adopted from Maven ITs structure
+ *
+ * @author Oleg Gusakov
+ * @version $Id$
+ *
+ */
+public class AllTestCases
+ extends AbstractTestCase
+{
+ @Override
+ protected void setUp()
+ throws Exception
+ {
+ super.setUp();
+ }
+
+ @Override
+ protected void tearDown()
+ throws Exception
+ {
+ super.tearDown();
+ }
+
+ public void testConfig()
+ {
+
+ }
+
+ public static Test suite()
+ {
+ TestSuite suite = new TestSuite();
+
+ /*
+ * This must be the first one to ensure the local repository is properly setup.
+ */
+// suite.addTestSuite( MercuryITBootstrapTest.class );
+
+ /*
+ * Add tests in reverse alpha order by number below. This makes testing new
+ * ITs quicker and since it counts down to zero, it's easier to judge how close
+ * the tests are to finishing. Newer tests are also more likely to fail, so this is
+ * a fail fast technique as well.
+ */
+
+
+ /*
+ * Add tests in reverse alpha order above.
+ */
+
+ return suite;
+ }
+}
Propchange: maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/all/it/AllTestCases.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/mercury/trunk/mercury-it/src/test/java/org/apache/maven/mercury/all/it/AllTestCases.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision
Modified: maven/mercury/trunk/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Binding.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Binding.java?rev=741250&r1=741249&r2=741250&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Binding.java (original)
+++ maven/mercury/trunk/mercury-transport/mercury-transport-api/src/main/java/org/apache/maven/mercury/transport/api/Binding.java Thu Feb 5 19:17:12 2009
@@ -38,16 +38,22 @@
private static final IMercuryLogger LOG = MercuryLoggerManager.getLogger( Binding.class );
protected URL remoteResource;
+
protected File localFile;
+
/**
* inbound in-memory binding for reading remote content.
* It is created by the constructor
*/
protected ByteArrayOutputStream localOS;
+
/**
* this is outbound in-memory binding. IS is passed by the client
*/
protected InputStream localIS;
+
+ /** indicates that this transfer is exempt from stream verification */
+ boolean exempt = false;
protected Exception error;
@@ -59,7 +65,12 @@
{
this.remoteResource = remoteUrl;
this.localFile = localFile;
+ }
+ public Binding( URL remoteUrl, File localFile, boolean exempt )
+ {
+ this( remoteUrl,localFile );
+ this.exempt = exempt;
}
/**
@@ -75,6 +86,12 @@
this.localOS = new ByteArrayOutputStream( 4*1024 );
}
+ public Binding( URL remoteUrl, boolean exempt )
+ {
+ this( remoteUrl );
+ this.exempt = exempt;
+ }
+
/**
* outbound constructor - send contents of the stream to remoteUrl
*
@@ -86,6 +103,11 @@
this.remoteResource = remoteUrl;
this.localIS = is;
}
+ public Binding( URL remoteUrl, InputStream is, boolean exempt )
+ {
+ this( remoteUrl, is );
+ this.exempt = exempt;
+ }
/**
* inbound constructor - read contents of the remoteUrl to the stream
@@ -99,6 +121,12 @@
this.localOS = os;
}
+ public Binding( URL remoteUrl, ByteArrayOutputStream os, boolean exempt )
+ {
+ this( remoteUrl, os );
+ this.exempt = exempt;
+ }
+
public URL getRemoteResource()
{
return remoteResource;
@@ -129,6 +157,16 @@
return localFile != null;
}
+ public boolean isExempt()
+ {
+ return exempt;
+ }
+
+ public void setExempt( boolean exempt )
+ {
+ this.exempt = exempt;
+ }
+
public byte [] getInboundContent()
{
if( localOS != null )
@@ -156,12 +194,11 @@
public String toString()
{
return '['
+ + (exempt ? "(exempt)" : "")
+ (remoteResource == null ? "null URL" : remoteResource.toString() )+" <=> "
+ (localFile == null ? ( localIS == null ? (localOS == null ? "null local Res" : localOS) : "localIS" ) : localFile.getAbsolutePath() )
+']'
;
}
-
-
}
Modified: maven/mercury/trunk/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/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java?rev=741250&r1=741249&r2=741250&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java (original)
+++ maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/DefaultDeployer.java Thu Feb 5 19:17:12 2009
@@ -191,7 +191,9 @@
try
{
Server server = resolveServer(binding);
- Set<StreamObserver> observers = createStreamObservers(server);
+
+ Set<StreamObserver> observers = createStreamObservers( server, binding.isExempt() );
+
target = new DeploymentTarget( server, _httpClient, batchId, binding, request.getValidators(), observers )
{
public void onComplete()
@@ -329,7 +331,7 @@
return server;
}
- private Set<StreamObserver> createStreamObservers( Server server )
+ private Set<StreamObserver> createStreamObservers( Server server, boolean exempt )
throws StreamObserverException
{
HashSet<StreamObserver> observers = new HashSet<StreamObserver>();
@@ -337,7 +339,7 @@
if( server == null )
return observers;
- if( server.hasWriterStreamVerifierFactories() )
+ if( (!exempt) && server.hasWriterStreamVerifierFactories() )
{
Set<StreamVerifierFactory> factories = server.getWriterStreamVerifierFactories();
for (StreamVerifierFactory f:factories)
Modified: maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java?rev=741250&r1=741249&r2=741250&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java (original)
+++ maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/deploy/FilePutExchange.java Thu Feb 5 19:17:12 2009
@@ -66,8 +66,11 @@
public FilePutExchange( Server server, String batchId, Binding binding, File localFile, Set<StreamObserver> observers, HttpClient client )
{
super( server, binding, localFile, client );
- _observers.addAll(observers);
+
_batchId = batchId;
+
+ if( observers != null && ! observers.isEmpty() )
+ _observers.addAll(observers);
}
Modified: maven/mercury/trunk/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/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java?rev=741250&r1=741249&r2=741250&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java (original)
+++ maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/DefaultRetriever.java Thu Feb 5 19:17:12 2009
@@ -173,7 +173,7 @@
try
{
Server server = resolveServer(binding);
- Set<StreamObserver> observers = createStreamObservers(server);
+ Set<StreamObserver> observers = createStreamObservers( server, binding.isExempt() );
target = new RetrievalTarget( server, DefaultRetriever.this, binding, request.getValidators(), observers )
{
@@ -310,7 +310,7 @@
return server;
}
- private Set<StreamObserver> createStreamObservers (Server server)
+ private Set<StreamObserver> createStreamObservers (Server server, boolean exempt )
throws StreamObserverException
{
HashSet<StreamObserver> observers = new HashSet<StreamObserver>();
@@ -318,7 +318,7 @@
if( server == null )
return observers;
- if ( server.hasReaderStreamVerifierFactories() )
+ if ( (!exempt) && server.hasReaderStreamVerifierFactories() )
{
Set<StreamVerifierFactory> factories = server.getReaderStreamVerifierFactories();
for( StreamVerifierFactory f:factories )
Modified: maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java?rev=741250&r1=741249&r2=741250&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java (original)
+++ maven/mercury/trunk/mercury-transport/mercury-transport-http/src/main/java/org/apache/maven/mercury/spi/http/client/retrieve/FileGetExchange.java Thu Feb 5 19:17:12 2009
@@ -72,7 +72,8 @@
public FileGetExchange( Server server, Binding binding, File localFile, Set<StreamObserver> observers, HttpClient client )
{
super( server, binding, localFile, client );
- if (observers != null)
+
+ if( observers != null && ! observers.isEmpty() )
_observers.addAll(observers);
}
Modified: maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java
URL: http://svn.apache.org/viewvc/maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java?rev=741250&r1=741249&r2=741250&view=diff
==============================================================================
--- maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java (original)
+++ maven/mercury/trunk/mercury-transport/mercury-transport-http/src/test/java/org/apache/maven/mercury/spi/http/client/JettyRetrieverTest.java Thu Feb 5 19:17:12 2009
@@ -146,7 +146,6 @@
f.delete();
}
-
public File mkTempDir()
throws Exception
{
@@ -154,6 +153,7 @@
dir.delete();
dir.mkdir();
dir.deleteOnExit();
+
assert dir.exists();
assert dir.isDirectory();
assert dir.canWrite();
@@ -177,6 +177,7 @@
file3 = new File(dir, "file3.jar");
file4 = new File(dir, "file4.so");
file5 = new File(dir, "file5.jpg");
+
Binding binding0 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file0.txt"), file0);
bindings.add(binding0);
@@ -203,7 +204,7 @@
// for (HttpClientException t:response.getExceptions())
// t.printStackTrace();
// System.err.println("-------------------------------------------------");
- assertEquals(2,response.getExceptions().size());
+ assertEquals( 2,response.getExceptions().size() );
assertTrue(!file0.exists());
assertTrue(!file1.exists());
assertTrue(!file2.exists());
@@ -213,6 +214,58 @@
}
+
+ public void testSyncRetrievalAllGoodExempt()
+ throws Exception
+ {
+ factories.add( new SHA1VerifierFactory(false, true) ); //!lenient, sufficient
+ remoteServerType.setReaderStreamVerifierFactories(factories);
+
+ //make local dir to put stuff in
+ dir = mkTempDir();
+ DefaultRetrievalRequest request = new DefaultRetrievalRequest();
+ HashSet<Binding> bindings = new HashSet<Binding>();
+
+ file0 = new File(dir, "file0.txt");
+ file1 = new File(dir, "file1.txt");
+ file2 = new File(dir, "file2.txt");
+ file3 = new File(dir, "file3.jar");
+ file4 = new File(dir, "file4.so");
+ file5 = new File(dir, "file5.jpg");
+
+ Binding binding0 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file0.txt"), file0);
+ bindings.add(binding0);
+
+ Binding binding1 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file1.txt"),file1, true ); //has no sha file
+ bindings.add(binding1);
+
+ Binding binding2 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file2.txt"), file2, true ); //has wrong sha file
+ bindings.add(binding2);
+
+ Binding binding3 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file3.jar"), file3);
+ bindings.add(binding3);
+
+ Binding binding4 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file4.so"), file4);
+ bindings.add(binding4);
+
+ Binding binding5 = new Binding(new URL(__HOST_FRAGMENT+_port+__PATH_FRAGMENT+"file5.jpg"), file5);
+ bindings.add(binding5);
+
+ request.setBindings(bindings);
+
+ RetrievalResponse response = retriever.retrieve(request);
+
+// because bad files are exempt - should be no exceptions
+ assertEquals( 0, response.getExceptions().size() );
+
+ assertTrue(!file0.exists());
+ assertTrue(!file1.exists());
+ assertTrue(!file2.exists());
+ assertTrue(!file3.exists());
+ assertTrue(!file4.exists());
+ assertTrue(!file5.exists());
+
+ }
public void testSyncRetrievalPgpGood()
throws Exception