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" );
+ }
+
+}