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; } }