blob: 8c055a7951c2b217948919154481438470e1287e [file] [log] [blame]
package org.apache.maven.indexer.examples;
/*
* 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.IOException;
import java.security.NoSuchAlgorithmException;
import java.util.Collection;
import org.apache.lucene.queryparser.classic.ParseException;
import org.apache.maven.index.ArtifactInfo;
import org.apache.maven.indexer.examples.indexing.SearchRequest;
import org.apache.maven.indexer.examples.indexing.SearchResults;
import org.apache.maven.indexer.examples.services.ArtifactIndexingService;
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import static junit.framework.TestCase.assertFalse;
import static org.junit.Assert.assertTrue;
/**
* @author mtodorov
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/META-INF/spring/*-context.xml",
"classpath*:/META-INF/spring/*-context.xml" })
public class SpringUsageExampleTest
{
public static final File REPOSITORIES_BASEDIR = new File( "target/repositories" );
@Autowired
private ArtifactIndexingService artifactIndexingService;
private SimpleArtifactGenerator generator = new SimpleArtifactGenerator();
@Before
public void setUp()
throws Exception
{
if ( !new File( REPOSITORIES_BASEDIR,
"releases/org/apache/maven/indexer/examples/indexer-examples-spring" ).exists() )
{
//noinspection ResultOfMethodCallIgnored
REPOSITORIES_BASEDIR.mkdirs();
// Generate some valid test artifacts:
generateArtifactAndAddToIndex( new File( REPOSITORIES_BASEDIR, "releases" ).getAbsolutePath(),
"releases",
"org.apache.maven.indexer.examples",
"indexer-examples-spring",
"1.0",
"jar",
null );
generateArtifactAndAddToIndex( new File( REPOSITORIES_BASEDIR, "releases" ).getAbsolutePath(),
"releases",
"org.apache.maven.indexer.examples",
"indexer-examples-spring",
"1.1",
"jar",
null );
generateArtifactAndAddToIndex( new File( REPOSITORIES_BASEDIR, "releases" ).getAbsolutePath(),
"releases",
"org.apache.maven.indexer.examples",
"indexer-examples-spring",
"1.2",
"jar",
null );
generateArtifactAndAddToIndex( new File( REPOSITORIES_BASEDIR, "releases" ).getAbsolutePath(),
"releases",
"org.apache.maven.indexer.examples",
"indexer-examples-spring",
"1.3",
"jar",
null );
generateArtifactAndAddToIndex( new File( REPOSITORIES_BASEDIR, "releases" ).getAbsolutePath(),
"releases",
"org.apache.maven.indexer.examples",
"indexer-examples-spring",
"1.3.1",
"jar",
null );
generateArtifactAndAddToIndex( new File( REPOSITORIES_BASEDIR, "releases" ).getAbsolutePath(),
"releases",
"org.apache.maven.indexer.examples",
"indexer-examples-spring",
"1.4",
"jar",
null );
}
}
@Test
public void testAddAndDelete()
throws IOException, ParseException, NoSuchAlgorithmException, XmlPullParserException
{
// Create a search request matching GAV "org.apache.maven.indexer.examples:indexer-examples-spring:1.4"
SearchRequest request = new SearchRequest( "releases",
"+g:org.apache.maven.indexer.examples +a:indexer-examples-spring +v:1.4" );
assertTrue( "Couldn't find existing artifact!", artifactIndexingService.contains( request ) );
// Delete the artifact from the index:
artifactIndexingService.deleteFromIndex( "releases",
"org.apache.maven.indexer.examples",
"indexer-examples-spring",
"1.4",
"jar",
null );
assertFalse( "Failed to remove artifact from index!", artifactIndexingService.contains( request ) );
}
@Test
public void testSearch()
throws IOException, ParseException
{
// Create a search request matching GAV "org.apache.maven.indexer.examples:indexer-examples-spring:1.3"
SearchRequest request = new SearchRequest( "releases",
"+g:org.apache.maven.indexer.examples +a:indexer-examples-spring +v:1.3*" );
assertTrue( "Couldn't find existing artifact!", artifactIndexingService.contains( request ) );
final SearchResults searchResults = artifactIndexingService.search( request );
assertFalse( searchResults.getResults().isEmpty() );
for ( String repositoryId : searchResults.getResults().keySet() )
{
System.out.println( "Matches in repository " + repositoryId + ":" );
final Collection<ArtifactInfo> artifactInfos = searchResults.getResults().get( repositoryId );
for ( ArtifactInfo artifactInfo : artifactInfos )
{
System.out.println( " " +
artifactInfo.getGroupId() + ":" +
artifactInfo.getArtifactId() + ":" +
artifactInfo.getVersion() + ":" +
artifactInfo.getPackaging() + ":" +
artifactInfo.getClassifier() );
}
}
}
/**
* This method creates some valid dummy artifacts in order to be able to add them to index.
*
* @param repositoryBasedir
* @param repositoryId
* @param groupId
* @param artifactId
* @param version
* @param extension
* @param classifier
* @return
* @throws IOException
* @throws NoSuchAlgorithmException
* @throws XmlPullParserException
*/
private File generateArtifactAndAddToIndex( String repositoryBasedir,
String repositoryId,
String groupId,
String artifactId,
String version,
String extension,
String classifier )
throws IOException, NoSuchAlgorithmException, XmlPullParserException
{
final File artifactFile = generator.generateArtifact( repositoryBasedir,
groupId,
artifactId,
version,
classifier,
extension );
// Add the artifact to the index:
artifactIndexingService.addToIndex( repositoryId,
artifactFile,
groupId,
artifactId,
version,
extension,
classifier );
return artifactFile;
}
}