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