You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ep...@apache.org on 2006/02/22 03:39:06 UTC

svn commit: r379654 [2/2] - in /maven/repository-manager/trunk/maven-repository-indexer/src: main/java/org/apache/maven/repository/indexing/ test/java/org/apache/maven/repository/indexing/

Added: maven/repository-manager/trunk/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/RepositoryIndexSearchLayerTest.java
URL: http://svn.apache.org/viewcvs/maven/repository-manager/trunk/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/RepositoryIndexSearchLayerTest.java?rev=379654&view=auto
==============================================================================
--- maven/repository-manager/trunk/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/RepositoryIndexSearchLayerTest.java (added)
+++ maven/repository-manager/trunk/maven-repository-indexer/src/test/java/org/apache/maven/repository/indexing/RepositoryIndexSearchLayerTest.java Tue Feb 21 18:39:04 2006
@@ -0,0 +1,476 @@
+package org.apache.maven.repository.indexing;
+
+/*
+ * Copyright 2005-2006 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.codehaus.plexus.PlexusTestCase;
+import org.codehaus.plexus.util.FileUtils;
+import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
+import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
+import org.apache.maven.artifact.repository.ArtifactRepository;
+import org.apache.maven.artifact.repository.metadata.RepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.GroupRepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.ArtifactRepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.SnapshotArtifactRepositoryMetadata;
+import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.factory.ArtifactFactory;
+import org.apache.maven.repository.digest.DefaultDigester;
+import org.apache.maven.repository.digest.Digester;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
+
+import java.io.File;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.FileReader;
+import java.util.List;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.net.URL;
+
+/**
+ * <p/>
+ * This class tests the RepositoryIndexSearchLayer.
+ */
+public class RepositoryIndexSearchLayerTest
+    extends PlexusTestCase
+{
+    private ArtifactRepository repository;
+
+    private ArtifactFactory artifactFactory;
+
+    private Digester digester;
+
+    private String indexPath;
+
+    /**
+     * Setup method
+     *
+     * @throws Exception
+     */
+    protected void setUp()
+        throws Exception
+    {
+        super.setUp();
+        File repositoryDirectory = getTestFile( "src/test/repository" );
+        String repoDir = repositoryDirectory.toURL().toString();
+        ArtifactRepositoryLayout layout = (ArtifactRepositoryLayout) lookup( ArtifactRepositoryLayout.ROLE, "default" );
+        ArtifactRepositoryFactory repoFactory = (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.ROLE );
+        repository = repoFactory.createArtifactRepository( "test", repoDir, layout, null, null );
+        digester = new DefaultDigester();
+
+        indexPath = "target/index";
+        FileUtils.deleteDirectory( indexPath );
+    }
+
+    /**
+     * Tear down method
+     *
+     * @throws Exception
+     */
+    protected void tearDown()
+        throws Exception
+    {
+        super.tearDown();
+    }
+
+    /**
+     * Method for creating the index used for testing
+     *
+     * @throws Exception
+     */
+    private void createTestIndex()
+        throws Exception
+    {
+        RepositoryIndexingFactory factory = (RepositoryIndexingFactory) lookup( RepositoryIndexingFactory.ROLE );
+        ArtifactRepositoryIndex indexer = factory.createArtifactRepositoryIndex( indexPath, repository );
+
+        Artifact artifact = getArtifact( "org.apache.maven", "maven-artifact", "2.0.1" );
+        artifact.setFile( new File( repository.getBasedir(), repository.pathOf( artifact ) ) );
+        indexer.indexArtifact( artifact );
+        indexer.optimize();
+        indexer.close();
+
+        artifact = getArtifact( "org.apache.maven", "maven-model", "2.0" );
+        artifact.setFile( new File( repository.getBasedir(), repository.pathOf( artifact ) ) );
+        indexer.indexArtifact( artifact );
+        indexer.optimize();
+        indexer.close();
+
+        artifact = getArtifact( "test", "test-artifactId", "1.0" );
+        artifact.setFile( new File( repository.getBasedir(), repository.pathOf( artifact ) ) );
+        indexer.indexArtifact( artifact );
+        indexer.optimize();
+        indexer.close();
+
+        artifact = getArtifact( "test", "test-artifactId", "1.0" );
+        artifact.setFile( new File( repository.getBasedir(), repository.pathOf( artifact ) ) );
+        indexer.indexArtifact( artifact );
+        indexer.optimize();
+        indexer.close();
+
+        MetadataRepositoryIndex metaIndexer = factory.createMetadataRepositoryIndex( indexPath, repository );
+        RepositoryMetadata repoMetadata =
+            getMetadata( "org.apache.maven", null, null, "maven-metadata.xml", metaIndexer.GROUP_METADATA );
+        metaIndexer.index( repoMetadata );
+        metaIndexer.optimize();
+        metaIndexer.close();
+
+        repoMetadata = getMetadata( "org.apache.maven", "maven-artifact", "2.0.1", "maven-metadata.xml",
+                                    metaIndexer.ARTIFACT_METADATA );
+        metaIndexer.index( repoMetadata );
+        metaIndexer.optimize();
+        metaIndexer.close();
+
+        repoMetadata = getMetadata( "org.apache.maven", "maven-artifact", "2.0.1", "maven-metadata.xml",
+                                    metaIndexer.SNAPSHOT_METADATA );
+        metaIndexer.index( repoMetadata );
+        metaIndexer.optimize();
+        metaIndexer.close();
+
+        repoMetadata = getMetadata( "test", null, null, "maven-metadata.xml", metaIndexer.GROUP_METADATA );
+        metaIndexer.index( repoMetadata );
+        metaIndexer.optimize();
+        metaIndexer.close();
+
+        PomRepositoryIndex pomIndexer = factory.createPomRepositoryIndex( indexPath, repository );
+
+        Model pom = getPom( "org.apache.maven", "maven-artifact", "2.0.1" );
+        pomIndexer.indexPom( pom );
+        pomIndexer.optimize();
+        pomIndexer.close();
+
+        pom = getPom( "org.apache.maven", "maven-model", "2.0" );
+        pomIndexer.indexPom( pom );
+        pomIndexer.optimize();
+        pomIndexer.close();
+
+        pom = getPom( "test", "test-artifactId", "1.0" );
+        pomIndexer.indexPom( pom );
+        pomIndexer.optimize();
+        pomIndexer.close();
+
+        pom = getPom( "test", "test-artifactId", "1.0" );
+        pomIndexer.indexPom( pom );
+        pomIndexer.optimize();
+        pomIndexer.close();
+    }
+
+    /**
+     * Method for testing the "query everything" searcher
+     *
+     * @throws Exception
+     */
+    public void testGeneralSearcher()
+        throws Exception
+    {
+        createTestIndex();
+        RepositoryIndexingFactory factory = (RepositoryIndexingFactory) lookup( RepositoryIndexingFactory.ROLE );
+        ArtifactRepositoryIndex indexer = factory.createArtifactRepositoryIndex( indexPath, repository );
+        RepositoryIndexSearchLayer searchLayer = factory.createRepositoryIndexSearchLayer( indexer );
+
+        List returnList = searchLayer.searchGeneral( "org.apache.maven" );
+        for ( Iterator iter = returnList.iterator(); iter.hasNext(); )
+        {
+            SearchResult result = (SearchResult) iter.next();
+            Map map = result.getFieldMatches();
+            Set entries = map.entrySet();
+            for ( Iterator it = entries.iterator(); it.hasNext(); )
+            {
+                Map.Entry entry = (Map.Entry) it.next();
+                if ( entry.getKey().equals( RepositoryIndex.FLD_PACKAGES ) )
+                {
+                    List packages = (List) entry.getValue();
+                    for ( Iterator iterator = packages.iterator(); iterator.hasNext(); )
+                    {
+                        assertTrue( ( (String) iterator.next() ).indexOf( "org.apache.maven" ) != -1 );
+                    }
+                }
+            }
+        }
+
+        //POM license urls
+        returnList = searchLayer.searchGeneral( "http://www.apache.org/licenses/LICENSE-2.0.txt" );
+        for ( Iterator iter = returnList.iterator(); iter.hasNext(); )
+        {
+            SearchResult result = (SearchResult) iter.next();
+            Map map = result.getFieldMatches();
+            Set entries = map.entrySet();
+            for ( Iterator it = entries.iterator(); it.hasNext(); )
+            {
+                Map.Entry entry = (Map.Entry) it.next();
+                if ( entry.getKey().equals( RepositoryIndex.FLD_LICENSE_URLS ) )
+                {
+                    List packages = (List) entry.getValue();
+                    for ( Iterator iterator = packages.iterator(); iterator.hasNext(); )
+                    {
+                        assertEquals( "http://www.apache.org/licenses/LICENSE-2.0.txt", (String) iterator.next() );
+                    }
+                }
+            }
+        }
+
+        //POM dependency
+        returnList = searchLayer.searchGeneral( "org.codehaus.plexus:plexus-utils:1.0.5" );
+        for ( Iterator iter = returnList.iterator(); iter.hasNext(); )
+        {
+            SearchResult result = (SearchResult) iter.next();
+            Map map = result.getFieldMatches();
+            Set entries = map.entrySet();
+            for ( Iterator it = entries.iterator(); it.hasNext(); )
+            {
+                Map.Entry entry = (Map.Entry) it.next();
+                if ( entry.getKey().equals( RepositoryIndex.FLD_DEPENDENCIES ) )
+                {
+                    List packages = (List) entry.getValue();
+                    for ( Iterator iterator = packages.iterator(); iterator.hasNext(); )
+                    {
+                        assertEquals( "org.codehaus.plexus:plexus-utils:1.0.5", (String) iterator.next() );
+                    }
+                }
+            }
+        }
+
+        // POM reporting plugin
+        returnList = searchLayer.searchGeneral( "org.apache.maven.plugins:maven-checkstyle-plugin:2.0" );
+        for ( Iterator iter = returnList.iterator(); iter.hasNext(); )
+        {
+            SearchResult result = (SearchResult) iter.next();
+            Map map = result.getFieldMatches();
+            Set entries = map.entrySet();
+            for ( Iterator it = entries.iterator(); it.hasNext(); )
+            {
+                Map.Entry entry = (Map.Entry) it.next();
+                if ( entry.getKey().equals( RepositoryIndex.FLD_PLUGINS_REPORT ) )
+                {
+                    List packages = (List) entry.getValue();
+                    for ( Iterator iterator = packages.iterator(); iterator.hasNext(); )
+                    {
+                        assertEquals( "org.apache.maven.plugins:maven-checkstyle-plugin:2.0",
+                                      (String) iterator.next() );
+                    }
+                }
+            }
+        }
+
+        // POM build plugin
+        returnList = searchLayer.searchGeneral( "org.codehaus.modello:modello-maven-plugin:2.0" );
+        for ( Iterator iter = returnList.iterator(); iter.hasNext(); )
+        {
+            SearchResult result = (SearchResult) iter.next();
+            Map map = result.getFieldMatches();
+            Set entries = map.entrySet();
+            for ( Iterator it = entries.iterator(); it.hasNext(); )
+            {
+                Map.Entry entry = (Map.Entry) it.next();
+                if ( entry.getKey().equals( RepositoryIndex.FLD_PLUGINS_BUILD ) )
+                {
+                    List packages = (List) entry.getValue();
+                    for ( Iterator iterator = packages.iterator(); iterator.hasNext(); )
+                    {
+                        assertEquals( "org.codehaus.modello:modello-maven-plugin:2.0", (String) iterator.next() );
+                    }
+                }
+            }
+        }
+
+        //maven-artifact-2.0.1.jar MD5 checksum
+        returnList = searchLayer.searchGeneral( "F5A934ABBBC70A33136D89A996B9D5C09F652766" );
+        for ( Iterator iter = returnList.iterator(); iter.hasNext(); )
+        {
+            SearchResult result = (SearchResult) iter.next();
+            Map map = result.getFieldMatches();
+            Set entries = map.entrySet();
+            for ( Iterator it = entries.iterator(); it.hasNext(); )
+            {
+                Map.Entry entry = (Map.Entry) it.next();
+                if ( entry.getKey().equals( RepositoryIndex.FLD_MD5 ) )
+                {
+                    assertTrue(
+                        ( (String) entry.getValue() ).indexOf( "F5A934ABBBC70A33136D89A996B9D5C09F652766" ) != -1 );
+                }
+            }
+        }
+
+        //maven-artifact-2.0.1.jar SHA1 checksum
+        returnList = searchLayer.searchGeneral( "AE55D9B5720E11B6CF19FE1E31A42E51" );
+        for ( Iterator iter = returnList.iterator(); iter.hasNext(); )
+        {
+            SearchResult result = (SearchResult) iter.next();
+            Map map = result.getFieldMatches();
+            Set entries = map.entrySet();
+            for ( Iterator it = entries.iterator(); it.hasNext(); )
+            {
+                Map.Entry entry = (Map.Entry) it.next();
+                if ( entry.getKey().equals( RepositoryIndex.FLD_SHA1 ) )
+                {
+                    assertTrue( ( (String) entry.getValue() ).indexOf( "AE55D9B5720E11B6CF19FE1E31A42E516" ) != -1 );
+                }
+            }
+        }
+
+        //packaging jar
+        returnList = searchLayer.searchGeneral( "jar" );
+        for ( Iterator iter = returnList.iterator(); iter.hasNext(); )
+        {
+            SearchResult result = (SearchResult) iter.next();
+            Map map = result.getFieldMatches();
+            Set entries = map.entrySet();
+            for ( Iterator it = entries.iterator(); it.hasNext(); )
+            {
+                Map.Entry entry = (Map.Entry) it.next();
+                if ( entry.getKey().equals( RepositoryIndex.FLD_PACKAGING ) )
+                {
+                    assertEquals( "jar", (String) entry.getValue() );
+                }
+            }
+        }
+
+        returnList = searchLayer.searchGeneral( "test" );
+        for ( Iterator iter = returnList.iterator(); iter.hasNext(); )
+        {
+            SearchResult result = (SearchResult) iter.next();
+            assertEquals( result.getArtifact().getGroupId(), "test" );
+        }
+
+        returnList = searchLayer.searchGeneral( "test-artifactId" );
+        for ( Iterator iter = returnList.iterator(); iter.hasNext(); )
+        {
+            SearchResult result = (SearchResult) iter.next();
+            assertEquals( result.getArtifact().getArtifactId(), "test-artifactId" );
+        }
+
+    }
+
+
+    /**
+     * Method for creating RepositoryMetadata object
+     *
+     * @param groupId      the groupId to be set
+     * @param artifactId   the artifactId to be set
+     * @param version      the version to be set
+     * @param filename     the name of the metadata file
+     * @param metadataType the type of RepositoryMetadata object to be created (GROUP, ARTIFACT or SNAPSHOT)
+     * @return RepositoryMetadata
+     * @throws Exception
+     */
+    private RepositoryMetadata getMetadata( String groupId, String artifactId, String version, String filename,
+                                            String metadataType )
+        throws Exception
+    {
+        RepositoryMetadata repoMetadata = null;
+        URL url;
+        InputStream is = null;
+        MetadataXpp3Reader metadataReader = new MetadataXpp3Reader();
+
+        //group metadata
+        if ( metadataType.equals( MetadataRepositoryIndex.GROUP_METADATA ) )
+        {
+            url = new File( repository.getBasedir() + groupId.replace( '.', '/' ) + "/" + filename ).toURL();
+            is = url.openStream();
+            repoMetadata = new GroupRepositoryMetadata( groupId );
+            repoMetadata.setMetadata( metadataReader.read( new InputStreamReader( is ) ) );
+        }
+        //artifact metadata
+        else if ( metadataType.equals( MetadataRepositoryIndex.ARTIFACT_METADATA ) )
+        {
+            url = new File(
+                repository.getBasedir() + groupId.replace( '.', '/' ) + "/" + artifactId + "/" + filename ).toURL();
+            is = url.openStream();
+            repoMetadata = new ArtifactRepositoryMetadata( getArtifact( groupId, artifactId, version ) );
+            repoMetadata.setMetadata( metadataReader.read( new InputStreamReader( is ) ) );
+        }
+        //snapshot/version metadata
+        else if ( metadataType.equals( MetadataRepositoryIndex.SNAPSHOT_METADATA ) )
+        {
+            url = new File( repository.getBasedir() + groupId.replace( '.', '/' ) + "/" + artifactId + "/" + version +
+                "/" + filename ).toURL();
+            is = url.openStream();
+            repoMetadata = new SnapshotArtifactRepositoryMetadata( getArtifact( groupId, artifactId, version ) );
+            repoMetadata.setMetadata( metadataReader.read( new InputStreamReader( is ) ) );
+        }
+
+        return repoMetadata;
+    }
+
+    /**
+     * Method for creating Artifact object
+     *
+     * @param groupId    the groupId of the artifact to be created
+     * @param artifactId the artifactId of the artifact to be created
+     * @param version    the version of the artifact to be created
+     * @return Artifact object
+     * @throws Exception
+     */
+    private Artifact getArtifact( String groupId, String artifactId, String version )
+        throws Exception
+    {
+        if ( artifactFactory == null )
+        {
+            artifactFactory = (ArtifactFactory) lookup( ArtifactFactory.ROLE );
+        }
+
+        return artifactFactory.createBuildArtifact( groupId, artifactId, version, "jar" );
+    }
+
+    /**
+     * Method for creating a Model object given the groupId, artifactId and version
+     *
+     * @param groupId    the groupId of the model to be created
+     * @param artifactId the artifactId of the model to be created
+     * @param version    the version of the model to be created
+     * @return Model object
+     * @throws Exception
+     */
+    private Model getPom( String groupId, String artifactId, String version )
+        throws Exception
+    {
+        Artifact artifact = getArtifact( groupId, artifactId, version );
+
+        return getPom( artifact );
+    }
+
+    /**
+     * Method for creating a Model object given an artifact
+     *
+     * @param artifact the artifact to be created a Model object for
+     * @return Model object
+     * @throws Exception
+     */
+    private Model getPom( Artifact artifact )
+        throws Exception
+    {
+        File pomFile = getPomFile( artifact );
+
+        MavenXpp3Reader pomReader = new MavenXpp3Reader();
+        return pomReader.read( new FileReader( pomFile ) );
+    }
+
+    /**
+     * Method for creating a pom file
+     *
+     * @param artifact
+     * @return File
+     */
+    private File getPomFile( Artifact artifact )
+    {
+        String path = new File( repository.getBasedir(), repository.pathOf( artifact ) ).getAbsolutePath();
+        return new File( path.substring( 0, path.lastIndexOf( '.' ) ) + ".pom" );
+    }
+
+}