package org.apache.archiva.indexer.search;
/*
* 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 org.apache.archiva.common.utils.FileUtil;
import org.apache.archiva.indexer.util.SearchUtil;
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
import org.codehaus.plexus.util.FileUtils;
import org.easymock.EasyMock;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@RunWith(ArchivaSpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" })
public class MavenRepositorySearchTest
extends AbstractMavenRepositorySearch
{
private void createSimpleIndex( boolean scan )
throws Exception
{
List<File> files = new ArrayList<>();
files.add( Paths.get( FileUtil.getBasedir(), "src/test", TEST_REPO_1,
"/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ).toFile() );
files.add( Paths.get( FileUtil.getBasedir(), "src/test", TEST_REPO_1,
"/org/apache/archiva/archiva-test/1.0/archiva-test-1.0.jar" ).toFile() );
files.add( Paths.get( FileUtil.getBasedir(), "src/test", TEST_REPO_1,
"org/apache/archiva/archiva-test/2.0/archiva-test-2.0.jar" ).toFile() );
createIndex( TEST_REPO_1, files, scan );
}
private void createIndexContainingMoreArtifacts( boolean scan )
throws Exception
{
List<File> files = new ArrayList<>();
files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
+ "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) );
files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
+ "/org/apache/archiva/archiva-test/1.0/archiva-test-1.0.jar" ) );
files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
+ "/org/apache/archiva/archiva-test/2.0/archiva-test-2.0.jar" ) );
files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
+ "/org/apache/archiva/archiva-webapp/1.0/archiva-webapp-1.0.war" ) );
files.add( new File( FileUtil.getBasedir(),
"src/test/" + TEST_REPO_1 + "/com/artifactid-numeric/1.0/artifactid-numeric-1.0.jar" ) );
files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
+ "/com/artifactid-numeric123/1.0/artifactid-numeric123-1.0.jar" ) );
files.add( new File( FileUtil.getBasedir(),
"src/test/" + TEST_REPO_1 + "/com/classname-search/1.0/classname-search-1.0.jar" ) );
createIndex( TEST_REPO_1, files, scan );
}
private void createIndexContainingMultipleArtifactsSameVersion( boolean scan )
throws Exception
{
List<File> files = new ArrayList<>();
files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
+ "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) );
files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
+ "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.pom" ) );
files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
+ "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0-sources.jar" ) );
createIndex( TEST_REPO_1, files, scan );
}
@Test
public void testQuickSearch()
throws Exception
{
createSimpleIndex( false );
List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
// search artifactId
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
SearchResults results = search.search( "user", selectedRepos, "archiva-search", null, null );
archivaConfigControl.verify();
assertNotNull( results );
SearchResultHit hit =
results.getSearchResultHit( SearchUtil.getHitId( "org.apache.archiva", "archiva-search", null, "jar" ) );
assertNotNull( "hit null in result " + results.getHits(), hit );
assertEquals( "org.apache.archiva", hit.getGroupId() );
assertEquals( "archiva-search", hit.getArtifactId() );
assertEquals( "1.0", hit.getVersions().get( 0 ) );
archivaConfigControl.reset();
// search groupId
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
results = search.search( "user", selectedRepos, "org.apache.archiva", null, null );
archivaConfigControl.verify();
assertNotNull( results );
assertEquals( "total hints not 3", 3, results.getTotalHits() );
//TODO: search for class & package names
}
@Test
public void testQuickSearchNotWithClassifier()
throws Exception
{
createSimpleIndex( true );
List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
// search artifactId
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
SearchResults results = search.search( "user", selectedRepos, "archiva-search", null, null );
archivaConfigControl.verify();
assertNotNull( results );
SearchResultHit hit =
results.getSearchResultHit( SearchUtil.getHitId( "org.apache.archiva", "archiva-search", null, "jar" ) );
assertNotNull( "hit null in result " + results.getHits(), hit );
assertEquals( "org.apache.archiva", hit.getGroupId() );
assertEquals( "archiva-search", hit.getArtifactId() );
assertEquals( "1.0", hit.getVersions().get( 0 ) );
archivaConfigControl.reset();
// search groupId
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
results = search.search( "user", selectedRepos, "archiva-search", null, null );
archivaConfigControl.verify();
assertNotNull( results );
assertEquals( "total hints not 3 hits " + results.getHits(), 3, results.getTotalHits() );
//TODO: search for class & package names
}
@Test
public void testQuickSearchMultipleArtifactsSameVersion()
throws Exception
{
createIndexContainingMultipleArtifactsSameVersion( false );
List<String> selectedRepos = new ArrayList<>();
selectedRepos.add( TEST_REPO_1 );
// search artifactId
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
SearchResults results = search.search( "user", selectedRepos, "archiva-search", null, null );
archivaConfigControl.verify();
assertNotNull( results );
assertEquals( 3, results.getTotalHits() );
SearchResultHit hit = results.getHits().get( 0 );
assertEquals( "org.apache.archiva", hit.getGroupId() );
assertEquals( "archiva-search", hit.getArtifactId() );
assertEquals( "1.0", hit.getVersions().get( 0 ) );
//only 1 version of 1.0 is retrieved
assertEquals( 1, hit.getVersions().size() );
}
@Test
public void testMultipleArtifactsSameVersionWithClassifier()
throws Exception
{
createIndexContainingMultipleArtifactsSameVersion( true );
List<String> selectedRepos = new ArrayList<>();
selectedRepos.add( TEST_REPO_1 );
// search artifactId
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
SearchFields searchFields = new SearchFields();
searchFields.setGroupId( "org.apache.archiva" );
searchFields.setArtifactId( "archiva-search" );
searchFields.setClassifier( "sources" );
searchFields.setRepositories( selectedRepos );
SearchResults results = search.search( "user", searchFields, null );
archivaConfigControl.verify();
assertNotNull( results );
assertEquals( 1, results.getTotalHits() );
SearchResultHit hit = results.getHits().get( 0 );
assertEquals( "org.apache.archiva", hit.getGroupId() );
assertEquals( "archiva-search", hit.getArtifactId() );
assertEquals( "1.0", hit.getVersions().get( 0 ) );
//only 1 version of 1.0 is retrieved
assertEquals( 1, hit.getVersions().size() );
}
// search for existing artifact using multiple keywords
@Test
public void testQuickSearchWithMultipleKeywords()
throws Exception
{
createSimpleIndex( false );
List<String> selectedRepos = new ArrayList<>();
selectedRepos.add( TEST_REPO_1 );
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
SearchResults results = search.search( "user", selectedRepos, "archiva search", null, null );
archivaConfigControl.verify();
assertNotNull( results );
assertEquals( 1, results.getTotalHits() );
}
@Test
public void testQuickSearchWithPagination()
throws Exception
{
createSimpleIndex( true );
List<String> selectedRepos = new ArrayList<>();
selectedRepos.add( TEST_REPO_1 );
// page 1
SearchResultLimits limits = new SearchResultLimits( 0 );
limits.setPageSize( 1 );
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
SearchResults results = search.search( "user", selectedRepos, "org", limits, Collections.<String>emptyList() );
archivaConfigControl.verify();
assertNotNull( results );
assertEquals( 1, results.getHits().size() );
assertEquals( "total hits not 8 for page1 " + results, 8, results.getTotalHits() );
assertEquals( "returned hits not 1 for page1 " + results, 1, results.getReturnedHitsCount() );
assertEquals( limits, results.getLimits() );
archivaConfigControl.reset();
// page 2
limits = new SearchResultLimits( 1 );
limits.setPageSize( 1 );
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
results = search.search( "user", selectedRepos, "org", limits, null );
archivaConfigControl.verify();
assertNotNull( results );
assertEquals( "hits not 1", 1, results.getHits().size() );
assertEquals( "total hits not 8 for page 2 " + results, 8, results.getTotalHits() );
assertEquals( "returned hits not 1 for page2 " + results, 1, results.getReturnedHitsCount() );
assertEquals( limits, results.getLimits() );
}
@Test
public void testArtifactFoundInMultipleRepositories()
throws Exception
{
createSimpleIndex( true );
List<File> files = new ArrayList<>();
files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_2
+ "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) );
files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_2
+ "/org/apache/archiva/archiva-search/1.1/archiva-search-1.1.jar" ) );
createIndex( TEST_REPO_2, files, false );
List<String> selectedRepos = new ArrayList<>();
selectedRepos.add( TEST_REPO_1 );
selectedRepos.add( TEST_REPO_2 );
config.addManagedRepository( createRepositoryConfig( TEST_REPO_2 ) );
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 5 );
archivaConfigControl.replay();
// wait lucene flush.....
Thread.sleep( 2000 );
SearchResults results = search.search( "user", selectedRepos, "archiva-search", null, null );
archivaConfigControl.verify();
assertNotNull( results );
SearchResultHit hit =
results.getSearchResultHit( SearchUtil.getHitId( "org.apache.archiva", "archiva-search", null, "jar" ) );
assertEquals( "org.apache.archiva", hit.getGroupId() );
assertEquals( "archiva-search", hit.getArtifactId() );
assertEquals( "not 2 version for hit " + hit + "::" + niceDisplay( results ), 2, hit.getVersions().size() );
assertTrue( hit.getVersions().contains( "1.0" ) );
assertTrue( hit.getVersions().contains( "1.1" ) );
archivaConfigControl.reset();
// TODO: [BROWSE] in artifact info from browse, display all the repositories where the artifact is found
}
@Test
public void testNoMatchFound()
throws Exception
{
createSimpleIndex( false );
List<String> selectedRepos = new ArrayList<>();
selectedRepos.add( TEST_REPO_1 );
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
SearchResults results = search.search( "user", selectedRepos, "dfghdfkweriuasndsaie", null, null );
archivaConfigControl.verify();
assertNotNull( results );
assertEquals( 0, results.getTotalHits() );
}
@Test
public void testNoIndexFound()
throws Exception
{
List<String> selectedRepos = new ArrayList<>();
selectedRepos.add( TEST_REPO_1 );
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
SearchResults results = search.search( "user", selectedRepos, "org.apache.archiva", null, null );
assertNotNull( results );
assertEquals( 0, results.getTotalHits() );
archivaConfigControl.verify();
}
@Test
public void testRepositoryNotFound()
throws Exception
{
List<String> selectedRepos = new ArrayList<>();
selectedRepos.add( "non-existing-repo" );
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
SearchResults results = search.search( "user", selectedRepos, "org.apache.archiva", null, null );
assertNotNull( results );
assertEquals( 0, results.getTotalHits() );
archivaConfigControl.verify();
}
@Test
public void testSearchWithinSearchResults()
throws Exception
{
createSimpleIndex( true );
List<String> selectedRepos = new ArrayList<>();
selectedRepos.add( TEST_REPO_1 );
List<String> previousSearchTerms = new ArrayList<>();
previousSearchTerms.add( "archiva-test" );
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
SearchResults results = search.search( "user", selectedRepos, "1.0", null, previousSearchTerms );
archivaConfigControl.verify();
assertNotNull( results );
assertEquals( "total hints not 1", 1, results.getTotalHits() );
SearchResultHit hit = results.getHits().get( 0 );
assertEquals( "org.apache.archiva", hit.getGroupId() );
assertEquals( "archiva-test", hit.getArtifactId() );
assertEquals( "versions not 1", 1, hit.getVersions().size() );
assertEquals( "1.0", hit.getVersions().get( 0 ) );
}
// tests for advanced search
@Test
public void testAdvancedSearch()
throws Exception
{
List<File> files = new ArrayList<>();
files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_2
+ "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) );
files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_2
+ "/org/apache/archiva/archiva-search/1.1/archiva-search-1.1.jar" ) );
createIndex( TEST_REPO_2, files, false );
List<String> selectedRepos = new ArrayList<>();
selectedRepos.add( TEST_REPO_2 );
SearchFields searchFields = new SearchFields();
searchFields.setGroupId( "org.apache.archiva" );
searchFields.setVersion( "1.0" );
searchFields.setRepositories( selectedRepos );
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
SearchResults results = search.search( "user", searchFields, null );
archivaConfigControl.verify();
assertNotNull( results );
assertEquals( 1, results.getTotalHits() );
SearchResultHit hit = results.getHits().get( 0 );
assertEquals( "org.apache.archiva", hit.getGroupId() );
assertEquals( "archiva-search", hit.getArtifactId() );
assertEquals( "1.0", hit.getVersions().get( 0 ) );
}
@Test
public void testAdvancedSearchWithPagination()
throws Exception
{
createIndexContainingMoreArtifacts( false );
List<String> selectedRepos = new ArrayList<>();
selectedRepos.add( TEST_REPO_1 );
SearchFields searchFields = new SearchFields();
searchFields.setGroupId( "org.apache.archiva" );
searchFields.setRepositories( selectedRepos );
// page 1
SearchResultLimits limits = new SearchResultLimits( 0 );
limits.setPageSize( 1 );
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
SearchResults results = search.search( "user", searchFields, limits );
archivaConfigControl.verify();
assertNotNull( results );
assertEquals( 4, results.getTotalHits() );
assertEquals( 1, results.getHits().size() );
// page 2
archivaConfigControl.reset();
limits = new SearchResultLimits( 1 );
limits.setPageSize( 1 );
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
results = search.search( "user", searchFields, limits );
archivaConfigControl.verify();
assertNotNull( results );
assertEquals( 4, results.getTotalHits() );
assertEquals( 1, results.getHits().size() );
}
// MRM-981 - artifactIds with numeric characters aren't found in advanced search
@Test
public void testAdvancedSearchArtifactIdHasNumericChar()
throws Exception
{
List<File> files = new ArrayList<>();
files.add( new File( FileUtil.getBasedir(),
"src/test/" + TEST_REPO_1 + "/com/artifactid-numeric/1.0/artifactid-numeric-1.0.jar" ) );
files.add( new File( FileUtil.getBasedir(), "src/test/" + TEST_REPO_1
+ "/com/artifactid-numeric123/1.0/artifactid-numeric123-1.0.jar" ) );
createIndex( TEST_REPO_1, files, true );
List<String> selectedRepos = new ArrayList<>();
selectedRepos.add( TEST_REPO_1 );
SearchFields searchFields = new SearchFields();
searchFields.setArtifactId( "artifactid-numeric" );
searchFields.setRepositories( selectedRepos );
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
SearchResults results = search.search( "user", searchFields, null );
archivaConfigControl.verify();
assertNotNull( results );
assertEquals( 2, results.getTotalHits() );
}
@Test
public void testAdvancedSearchNoRepositoriesConfigured()
throws Exception
{
SearchFields searchFields = new SearchFields();
searchFields.setArtifactId( "archiva" );
searchFields.setRepositories( null );
try
{
search.search( "user", searchFields, null );
fail( "A RepositorySearchExcecption should have been thrown." );
}
catch ( RepositorySearchException e )
{
assertEquals( "Repositories cannot be null.", e.getMessage() );
}
}
@Test
public void testAdvancedSearchSearchFieldsAreNull()
throws Exception
{
List<String> selectedRepos = new ArrayList<>();
selectedRepos.add( TEST_REPO_1 );
SearchFields searchFields = new SearchFields();
searchFields.setRepositories( selectedRepos );
try
{
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
search.search( "user", searchFields, null );
archivaConfigControl.verify();
fail( "A RepositorySearchExcecption should have been thrown." );
}
catch ( RepositorySearchException e )
{
assertEquals( "No search fields set.", e.getMessage() );
}
}
@Test
public void testAdvancedSearchSearchFieldsAreBlank()
throws Exception
{
List<String> selectedRepos = new ArrayList<>();
selectedRepos.add( TEST_REPO_1 );
SearchFields searchFields = new SearchFields();
searchFields.setGroupId( "" );
searchFields.setArtifactId( "" );
searchFields.setVersion( "" );
searchFields.setPackaging( "" );
searchFields.setClassName( "" );
searchFields.setRepositories( selectedRepos );
try
{
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
search.search( "user", searchFields, null );
archivaConfigControl.verify();
fail( "A RepositorySearchExcecption should have been thrown." );
}
catch ( RepositorySearchException e )
{
assertEquals( "No search fields set.", e.getMessage() );
}
}
@Test
public void testAdvancedSearchAllSearchCriteriaSpecified()
throws Exception
{
createSimpleIndex( true );
List<String> selectedRepos = new ArrayList<>();
selectedRepos.add( TEST_REPO_1 );
SearchFields searchFields = new SearchFields();
searchFields.setGroupId( "org.apache.archiva" );
searchFields.setArtifactId( "archiva-test" );
searchFields.setVersion( "2.0" );
searchFields.setPackaging( "jar" );
searchFields.setClassName( "org.apache.archiva.test.App" );
searchFields.setRepositories( selectedRepos );
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
SearchResults results = search.search( "user", searchFields, null );
archivaConfigControl.verify();
assertNotNull( results );
assertEquals( "total hints not 1" + results, 1, results.getTotalHits() );
SearchResultHit hit = results.getHits().get( 0 );
assertEquals( "org.apache.archiva", hit.getGroupId() );
assertEquals( "archiva-test", hit.getArtifactId() );
assertEquals( "version not 2.0", "2.0", hit.getVersions().get( 0 ) );
}
@Test
public void testAdvancedSearchJarArtifacts()
throws Exception
{
createIndexContainingMoreArtifacts( true );
List<String> selectedRepos = new ArrayList<>();
selectedRepos.add( TEST_REPO_1 );
SearchFields searchFields = new SearchFields();
searchFields.setPackaging( "jar" );
searchFields.setRepositories( selectedRepos );
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
SearchResults results = search.search( "user", searchFields, null );
archivaConfigControl.verify();
assertNotNull( results );
assertEquals( "not 8 but " + results.getTotalHits() + ":" + niceDisplay( results ), 8, results.getTotalHits() );
}
@Test
public void testAdvancedSearchWithIncorrectPackaging()
throws Exception
{
createSimpleIndex( true );
List<String> selectedRepos = new ArrayList<>();
selectedRepos.add( TEST_REPO_1 );
SearchFields searchFields = new SearchFields();
searchFields.setGroupId( "org.apache.archiva" );
searchFields.setArtifactId( "archiva-test" );
searchFields.setVersion( "2.0" );
searchFields.setPackaging( "war" );
searchFields.setRepositories( selectedRepos );
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
SearchResults results = search.search( "user", searchFields, null );
archivaConfigControl.verify();
assertNotNull( results );
assertEquals( 0, results.getTotalHits() );
}
@Test
public void testAdvancedSearchClassname()
throws Exception
{
createIndexContainingMoreArtifacts( true );
List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
SearchFields searchFields = new SearchFields();
searchFields.setClassName( "com.classname.search.App" );
searchFields.setRepositories( selectedRepos );
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
SearchResults results = search.search( "user", searchFields, null );
archivaConfigControl.verify();
assertNotNull( results );
assertEquals( "totalHits not 1 results " + results, 1, results.getTotalHits() );
SearchResultHit hit = results.getHits().get( 0 );
assertEquals( "groupId not com", "com", hit.getGroupId() );
assertEquals( "arttifactId not classname-search", "classname-search", hit.getArtifactId() );
assertEquals( " hits.version(0) not 1.0", "1.0", hit.getVersions().get( 0 ) );
}
@Test
public void testAdvancedSearchNoIndexFound()
throws Exception
{
List<String> selectedRepos = new ArrayList<>();
selectedRepos.add( TEST_REPO_1 );
SearchFields searchFields = new SearchFields();
searchFields.setGroupId( "org.apache.archiva" );
searchFields.setRepositories( selectedRepos );
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
SearchResults results = search.search( "user", searchFields, null );
archivaConfigControl.verify();
assertNotNull( results );
assertEquals( 0, results.getTotalHits() );
}
@Test
public void testAdvancedSearchClassNameInWar()
throws Exception
{
createIndexContainingMoreArtifacts( true );
List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
SearchFields searchFields = new SearchFields();
searchFields.setClassName( "SomeClass" );
searchFields.setRepositories( selectedRepos );
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
SearchResults results = search.search( "user", searchFields, null );
archivaConfigControl.verify();
assertNotNull( results );
assertEquals( 1, results.getHits().size() );
assertEquals( "test-webapp", results.getHits().get( 0 ).getArtifactId() );
}
@Test
public void getAllGroupIds()
throws Exception
{
createIndexContainingMoreArtifacts( true );
List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 0, 2 );
archivaConfigControl.replay();
Collection<String> groupIds = search.getAllGroupIds( "user", selectedRepos );
archivaConfigControl.verify();
log.info( "groupIds: {}", groupIds );
assertEquals( 3, groupIds.size() );
assertTrue( groupIds.contains( "com" ) );
assertTrue( groupIds.contains( "org.apache.felix" ) );
assertTrue( groupIds.contains( "org.apache.archiva" ) );
}
@Test
public void testSearchWithUnknownRepo()
throws Exception
{
createIndexContainingMoreArtifacts( true );
List<String> selectedRepos = Arrays.asList( "foo" );
SearchFields searchFields = new SearchFields();
searchFields.setClassName( "SomeClass" );
searchFields.setRepositories( selectedRepos );
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 2 );
archivaConfigControl.replay();
SearchResults results = search.search( "user", searchFields, null );
archivaConfigControl.verify();
assertNotNull( results );
assertEquals( 0, results.getHits().size() );
}
@Test
public void nolimitedResult()
throws Exception
{
File repo = new File( "target/repo-release" );
File indexDirectory = new File( repo, ".index" );
FileUtils.copyDirectoryStructure( new File( "src/test/repo-release" ), repo );
createIndex( "repo-release", Collections.<File>emptyList(), false );
nexusIndexer.addIndexingContext( REPO_RELEASE, REPO_RELEASE, repo, indexDirectory,
repo.toURI().toURL().toExternalForm(),
indexDirectory.toURI().toURL().toString(), search.getAllIndexCreators() );
SearchResultLimits limits = new SearchResultLimits( SearchResultLimits.ALL_PAGES );
limits.setPageSize( 300 );
EasyMock.expect( archivaConfig.getConfiguration() ).andReturn( config ).times( 1, 5 );
archivaConfigControl.replay();
SearchResults searchResults = search.search( null, Arrays.asList( REPO_RELEASE ), "org.example", limits,
Collections.<String>emptyList() );
log.info( "results: {}", searchResults.getHits().size() );
assertEquals( 255, searchResults.getHits().size() );
SearchFields searchFields = new SearchFields();
searchFields.setGroupId( "org.example" );
searchFields.setRepositories( Arrays.asList( REPO_RELEASE ) );
searchResults = search.search( null, searchFields, limits );
log.info( "results: {}", searchResults.getHits().size() );
assertEquals( 255, searchResults.getHits().size() );
archivaConfigControl.verify();
}
}