You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by oc...@apache.org on 2008/02/13 08:51:44 UTC

svn commit: r627299 - in /maven/sandbox/trunk/archiva/archiva-consumer-plugin: ./ src/main/java/org/apache/maven/archiva/consumer/plugin/ src/test/ src/test/java/ src/test/java/org/ src/test/java/org/apache/ src/test/java/org/apache/maven/ src/test/jav...

Author: oching
Date: Tue Feb 12 23:51:42 2008
New Revision: 627299

URL: http://svn.apache.org/viewvc?rev=627299&view=rev
Log:
[MRM-651]
Applied patch submitted by:
Stephen Gargan

-updated consumer to build against 1.1
-added unit test

Added:
    maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/
    maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/java/
    maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/java/org/
    maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/java/org/apache/
    maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/java/org/apache/maven/
    maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/java/org/apache/maven/archiva/
    maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/java/org/apache/maven/archiva/consumer/
    maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/java/org/apache/maven/archiva/consumer/plugin/
    maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/java/org/apache/maven/archiva/consumer/plugin/DiscoverNewArtifactConsumerTest.java
    maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/java/org/apache/maven/archiva/consumer/plugin/MockRepositorySearch.java
    maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/resources/
    maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/resources/org/
    maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/resources/org/apache/
    maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/resources/org/apache/maven/
    maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/resources/org/apache/maven/archiva/
    maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/resources/org/apache/maven/archiva/consumer/
    maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/resources/org/apache/maven/archiva/consumer/plugin/
    maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/resources/org/apache/maven/archiva/consumer/plugin/DiscoverNewArtifactConsumerTest.xml
Modified:
    maven/sandbox/trunk/archiva/archiva-consumer-plugin/pom.xml
    maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/main/java/org/apache/maven/archiva/consumer/plugin/DiscoverNewArtifactConsumer.java

Modified: maven/sandbox/trunk/archiva/archiva-consumer-plugin/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archiva/archiva-consumer-plugin/pom.xml?rev=627299&r1=627298&r2=627299&view=diff
==============================================================================
--- maven/sandbox/trunk/archiva/archiva-consumer-plugin/pom.xml (original)
+++ maven/sandbox/trunk/archiva/archiva-consumer-plugin/pom.xml Tue Feb 12 23:51:42 2008
@@ -3,7 +3,7 @@
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.apache.maven.archiva</groupId>
   <artifactId>archiva-consumer-plugin</artifactId>
-  <version>1.0-beta-2-SNAPSHOT</version>
+  <version>1.1-SNAPSHOT</version>
   <packaging>jar</packaging>
   <name>archiva-consumer-plugin</name>
   <url>http://maven.apache.org</url>
@@ -14,22 +14,22 @@
     <dependency>
       <groupId>org.apache.maven.archiva</groupId>
       <artifactId>archiva-consumer-api</artifactId>
-      <version>1.0-beta-2-SNAPSHOT</version>
+      <version>1.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.archiva</groupId>
       <artifactId>archiva-configuration</artifactId>
-      <version>1.0-beta-2-SNAPSHOT</version>
+      <version>1.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.archiva</groupId>
       <artifactId>archiva-repository-layer</artifactId>
-      <version>1.0-beta-2-SNAPSHOT</version>
+      <version>1.1-SNAPSHOT</version>
     </dependency>
     <dependency>
       <groupId>org.apache.maven.archiva</groupId>
       <artifactId>archiva-indexer</artifactId>
-      <version>1.0-beta-2-SNAPSHOT</version>
+      <version>1.1-SNAPSHOT</version>
     </dependency>
   </dependencies>     
   <build>

Modified: maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/main/java/org/apache/maven/archiva/consumer/plugin/DiscoverNewArtifactConsumer.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/main/java/org/apache/maven/archiva/consumer/plugin/DiscoverNewArtifactConsumer.java?rev=627299&r1=627298&r2=627299&view=diff
==============================================================================
--- maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/main/java/org/apache/maven/archiva/consumer/plugin/DiscoverNewArtifactConsumer.java (original)
+++ maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/main/java/org/apache/maven/archiva/consumer/plugin/DiscoverNewArtifactConsumer.java Tue Feb 12 23:51:42 2008
@@ -19,35 +19,34 @@
  * under the License.
  */
 
-import org.apache.maven.archiva.consumers.AbstractMonitoredConsumer;
-import org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer;
-import org.apache.maven.archiva.consumers.ConsumerException;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.commons.io.IOUtils;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.FileTypes;
-import org.apache.maven.archiva.model.ArchivaRepository;
+import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.maven.archiva.consumers.AbstractMonitoredConsumer;
+import org.apache.maven.archiva.consumers.ConsumerException;
+import org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer;
 import org.apache.maven.archiva.indexer.search.CrossRepositorySearch;
-import org.apache.maven.archiva.indexer.search.SearchResults;
-import org.apache.maven.archiva.indexer.search.SearchResultLimits;
 import org.apache.maven.archiva.indexer.search.SearchResultHit;
-import org.apache.commons.io.IOUtils;
-import org.codehaus.plexus.registry.RegistryListener;
-import org.codehaus.plexus.registry.Registry;
+import org.apache.maven.archiva.indexer.search.SearchResultLimits;
+import org.apache.maven.archiva.indexer.search.SearchResults;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
 import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
-
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.io.File;
-import java.io.IOException;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
+import org.codehaus.plexus.registry.Registry;
+import org.codehaus.plexus.registry.RegistryListener;
 
 /**
  * @author <a href="mailto:oching@apache.org">Maria Odea Ching</a>
  * @plexus.component role="org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer"
- * role-hint="discover-new-artifact"
- * instantiation-strategy="per-lookup"
+ *                   role-hint="discover-new-artifact" instantiation-strategy="per-lookup"
  */
 public class DiscoverNewArtifactConsumer
     extends AbstractMonitoredConsumer
@@ -82,11 +81,11 @@
 
     private List includes = new ArrayList();
 
-    private ArchivaRepository repository;
+    private ManagedRepositoryConfiguration repository;
 
     private File dumpFile;
 
-    private static final String DUMP_FILE_NAME = "new-artifacts.zzz";
+    static final String DUMP_FILE_NAME = "new-artifacts.zzz";
 
     public String getId()
     {
@@ -113,16 +112,12 @@
         return this.includes;
     }
 
-    public void beginScan( ArchivaRepository repository )
+    public void beginScan( ManagedRepositoryConfiguration repository )
         throws ConsumerException
     {
-        if ( !repository.isManaged() )
-        {
-            throw new ConsumerException( "Consumer requires managed repository." );
-        }
-
         this.repository = repository;
-        dumpFile = new File( repository.getUrl().getPath() + "/" + DUMP_FILE_NAME );
+
+        dumpFile = new File( repository.getLocation() + "/" + DUMP_FILE_NAME );
 
         try
         {
@@ -130,7 +125,7 @@
             {
                 dumpFile.delete();
                 dumpFile = null;
-                dumpFile = new File( repository.getUrl().getPath() + "/" + DUMP_FILE_NAME );
+                dumpFile = new File( repository.getLocation() + "/" + DUMP_FILE_NAME );
             }
 
             dumpFile.createNewFile();
@@ -146,7 +141,20 @@
     {
         String id = repository.getId() + "/" + path;
 
-        SearchResults results = repoSearch.searchForTerm( path, new SearchResultLimits( 0 ) );
+        boolean found = isFoundInRepository( path, id );
+
+        if ( !found )
+        {
+            dumpToFile( id );
+        }
+    }
+
+    private boolean isFoundInRepository( String path, String id )
+    {
+        List repoSearchList = new ArrayList();
+        repoSearchList.add( repository.getId() );
+
+        SearchResults results = repoSearch.searchForTerm( "guest", repoSearchList, path, new SearchResultLimits( 0 ) );
 
         List hits = results.getHits();
         boolean found = false;
@@ -160,23 +168,12 @@
                 break;
             }
         }
-
-        if ( !found )
-        {
-            try
-            {
-                dumpToFile( id );
-            }
-            catch ( IOException ie )
-            {
-                throw new ConsumerException( ie.getMessage() );
-            }
-        }
+        return found;
     }
 
     public void completeScan()
     {
-        /* do nothing */
+       // dumpToFile( "Scan Complete" );
     }
 
     public void afterConfigurationChange( Registry registry, String propertyName, Object propertyValue )
@@ -195,7 +192,6 @@
     private void initIncludes()
     {
         includes.clear();
-
         includes.addAll( filetypes.getFileTypePatterns( FileTypes.INDEXABLE_CONTENT ) );
     }
 
@@ -215,9 +211,23 @@
     }
 
     private void dumpToFile( String id )
-        throws IOException
+        throws ConsumerException
+    {
+        try
+        {
+            
+             IOUtils.write(  IOUtils.toString( new FileInputStream( dumpFile ) ) + id +"\n" ,
+                            new FileOutputStream( dumpFile ) );
+        }
+        catch ( IOException e )
+        {
+            throw new ConsumerException( "Error writing '" + id + "' to new artifacts file '"
+                                          + dumpFile.getPath()  + "'", e );
+        }
+    }
+
+    public CrossRepositorySearch getSearch()
     {
-        IOUtils.write( ( IOUtils.toString( new FileInputStream( dumpFile ) ) + "\n" + id ),
-                       new FileOutputStream( dumpFile ) );
+        return repoSearch;
     }
 }

Added: maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/java/org/apache/maven/archiva/consumer/plugin/DiscoverNewArtifactConsumerTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/java/org/apache/maven/archiva/consumer/plugin/DiscoverNewArtifactConsumerTest.java?rev=627299&view=auto
==============================================================================
--- maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/java/org/apache/maven/archiva/consumer/plugin/DiscoverNewArtifactConsumerTest.java (added)
+++ maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/java/org/apache/maven/archiva/consumer/plugin/DiscoverNewArtifactConsumerTest.java Tue Feb 12 23:51:42 2008
@@ -0,0 +1,154 @@
+package org.apache.maven.archiva.consumer.plugin;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.maven.archiva.consumers.ConsumerException;
+import org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer;
+import org.apache.maven.archiva.indexer.filecontent.FileContentRecord;
+import org.apache.maven.archiva.indexer.search.CrossRepositorySearch;
+import org.apache.maven.archiva.indexer.search.SearchResults;
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.component.repository.ComponentDescriptor;
+
+/**
+ * @author <a href="mailto:sgargan@qualcomm.com">Stephen Gargan</a>
+ */
+public class DiscoverNewArtifactConsumerTest
+    extends PlexusTestCase
+{
+    private DiscoverNewArtifactConsumer consumer;
+
+    private MockRepositorySearch mockSearch;
+
+    private File repoDir;
+
+    private File dumpFile;
+
+    private ManagedRepositoryConfiguration testRepository;
+
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+
+        String consumerRole = KnownRepositoryContentConsumer.class.getName();
+        String searchRole = CrossRepositorySearch.class.getName();
+        consumer = (DiscoverNewArtifactConsumer) lookup( consumerRole, "discover-new-artifact" );
+        mockSearch = (MockRepositorySearch) lookup( searchRole, "mockSearch" );
+        
+        setUpMockRepository();
+
+        dumpFile = new File( repoDir, DiscoverNewArtifactConsumer.DUMP_FILE_NAME );
+        dumpFile.delete();
+    }
+
+    private void setUpMockRepository()
+    {
+        repoDir = new java.io.File( getBasedir(), "/target/test-consumer-repo" );
+        repoDir.mkdirs();
+        testRepository = new ManagedRepositoryConfiguration();
+        testRepository.setName( "Test-Consumer-Repository" );
+        testRepository.setId( "test-consumer-repository" );
+        testRepository.setLocation( repoDir.getAbsolutePath() );
+    }
+
+    protected void tearDown()
+        throws Exception
+    {
+        super.tearDown();
+        dumpFile.delete();
+    }
+
+    public void testBeginScan()
+        throws Exception
+    {
+        doTestBeginScan();
+    }
+
+    public void testScanFindsNewContent()
+        throws Exception
+    {
+        doTestBeginScan();
+
+        String artifactPath = "org/simple/test/testartifact/testartifact/1.0/testartifact-1.0.pom";
+        consumer.processFile( artifactPath );
+        mockSearch.verify( "guest", Collections.singletonList( testRepository.getId() ), artifactPath );
+        verifyContentDumped( new String[] { artifactPath } );
+
+        // process another path
+        consumer.processFile( artifactPath );
+        mockSearch.verify( "guest", Collections.singletonList( testRepository.getId() ), artifactPath );
+        verifyContentDumped( new String[] { artifactPath, artifactPath } );
+    }
+
+    public void testScanFindsNoNewContent()
+        throws Exception
+    {
+        doTestBeginScan();
+
+        String artifactPath = "org/simple/test/testartifact/testartifact/1.0/testartifact-1.0.pom";
+
+        // setup the mockSearch to find the artifact
+        mockSearch.setSearchResults( createSearchResults( artifactPath ) );
+        consumer.processFile( artifactPath );
+        mockSearch.verify( "guest", Collections.singletonList( testRepository.getId() ), artifactPath );
+        verifyContentDumped( new String[] {} );
+
+    }
+
+    public SearchResults createSearchResults( String artifactPath )
+    {
+        FileContentRecord fch = new FileContentRecord();
+        fch.setFilename( artifactPath );
+        fch.setRepositoryId( testRepository.getId() );
+        SearchResults results = new SearchResults();
+        results.addFileContentHit( fch );
+
+        return results;
+    }
+
+    private void verifyContentDumped( String[] artifactPaths )
+        throws Exception
+    {
+        List newArtifacts = IOUtils.readLines( new FileInputStream( dumpFile ) );
+        assertEquals( artifactPaths.length, newArtifacts.size() );
+
+        for ( int x = 0; x < newArtifacts.size(); x++ )
+        {
+            assertEquals( testRepository.getId() + "/" + artifactPaths[x], newArtifacts.get( x ) );
+        }
+    }
+
+    private void doTestBeginScan()
+        throws ConsumerException
+    {
+        assertFalse( dumpFile.exists() );
+        consumer.beginScan( testRepository );
+        assertTrue( dumpFile.exists() );
+    }
+
+}

Added: maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/java/org/apache/maven/archiva/consumer/plugin/MockRepositorySearch.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/java/org/apache/maven/archiva/consumer/plugin/MockRepositorySearch.java?rev=627299&view=auto
==============================================================================
--- maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/java/org/apache/maven/archiva/consumer/plugin/MockRepositorySearch.java (added)
+++ maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/java/org/apache/maven/archiva/consumer/plugin/MockRepositorySearch.java Tue Feb 12 23:51:42 2008
@@ -0,0 +1,88 @@
+package org.apache.maven.archiva.consumer.plugin;
+
+import java.util.List;
+
+import org.apache.maven.archiva.indexer.search.CrossRepositorySearch;
+import org.apache.maven.archiva.indexer.search.SearchResultLimits;
+import org.apache.maven.archiva.indexer.search.SearchResults;
+import org.codehaus.plexus.PlexusTestCase;
+
+public class MockRepositorySearch
+    implements CrossRepositorySearch
+{
+    /**
+     * @plexus.configuration default-value="mock-repo-search"
+     */
+    private String id;
+
+    private SearchResults searchResults = new SearchResults();
+
+    private String principal;
+
+    private List selectedRepos;
+
+    private String term;
+
+    /**
+     * Allow a set of mocked {@link SearchResults} to be injected. These get stub returned from each search call
+     * 
+     * @param searchResults
+     */
+    public void setSearchResults( SearchResults searchResults )
+    {
+        this.searchResults = searchResults;
+    }
+
+    public SearchResults searchForBytecode( String principal, List selectedRepos, String term,
+                                            SearchResultLimits limits )
+    {
+        storeParams( principal, selectedRepos, term );
+        return searchResults;
+    }
+
+    public SearchResults searchForChecksum( String principal, List selectedRepos, String checksum,
+                                            SearchResultLimits limits )
+    {
+        storeParams( principal, selectedRepos, term );
+        return searchResults;
+    }
+
+    public SearchResults searchForTerm( String principal, List selectedRepos, String term,
+                                        SearchResultLimits limits )
+    {
+        storeParams( principal, selectedRepos, term );
+        return searchResults;
+    }
+    
+
+    private void storeParams( String principal, List selectedRepos, String term )
+    {
+        this.principal = principal;
+        this.selectedRepos = selectedRepos;
+        this.term = term;
+    }
+
+    public void verify( String principal, List selectedRepos, String term )
+    {
+        if(principal != null)
+        {
+            PlexusTestCase.assertEquals( principal, this.principal );
+        }
+        
+        if(selectedRepos != null)
+        {
+            PlexusTestCase.assertEquals( selectedRepos, this.selectedRepos );
+        }
+        
+        if(term != null)
+        {
+            PlexusTestCase.assertEquals( term, this.term );
+        }
+    }
+
+    public void setId( String id )
+    {
+        this.id = id;
+    }
+
+}

Added: maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/resources/org/apache/maven/archiva/consumer/plugin/DiscoverNewArtifactConsumerTest.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/resources/org/apache/maven/archiva/consumer/plugin/DiscoverNewArtifactConsumerTest.xml?rev=627299&view=auto
==============================================================================
--- maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/resources/org/apache/maven/archiva/consumer/plugin/DiscoverNewArtifactConsumerTest.xml (added)
+++ maven/sandbox/trunk/archiva/archiva-consumer-plugin/src/test/resources/org/apache/maven/archiva/consumer/plugin/DiscoverNewArtifactConsumerTest.xml Tue Feb 12 23:51:42 2008
@@ -0,0 +1,35 @@
+<component-set>
+  <components>
+    <component>
+      <role>org.apache.maven.archiva.consumers.KnownRepositoryContentConsumer</role>
+      <role-hint>discover-new-artifact</role-hint>
+      <implementation>org.apache.maven.archiva.consumer.plugin.DiscoverNewArtifactConsumer</implementation>
+      <instantiation-strategy>per-lookup</instantiation-strategy>
+      <description></description>
+      <requirements>
+        <requirement>
+          <role>org.apache.maven.archiva.configuration.FileTypes</role>
+          <field-name>filetypes</field-name>
+        </requirement>
+        <requirement>
+          <role>org.apache.maven.archiva.indexer.search.CrossRepositorySearch</role>
+          <role-hint>mockSearch</role-hint>
+          <field-name>repoSearch</field-name>
+        </requirement>
+        <requirement>
+          <role>org.apache.maven.archiva.configuration.ArchivaConfiguration</role>
+          <field-name>configuration</field-name>
+        </requirement>
+      </requirements>
+      <configuration>
+        <id>discover-new-artifact</id>
+        <description>Discover new artifacts in the repository.</description>
+      </configuration>
+    </component>    
+    <component>
+      <role>org.apache.maven.archiva.indexer.search.CrossRepositorySearch</role>
+      <role-hint>mockSearch</role-hint>
+      <implementation>org.apache.maven.archiva.consumer.plugin.MockRepositorySearch</implementation>      
+    </component>    
+  </components>
+</component-set>