http://git-wip-us.apache.org/repos/asf/archiva/blob/c6e4e563/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearchTest.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearchTest.java b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearchTest.java new file mode 100644 index 0000000..1cc1574 --- /dev/null +++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/search/MavenRepositorySearchTest.java @@ -0,0 +1,933 @@ +package org.apache.archiva.indexer.maven.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.indexer.search.*; +import org.apache.archiva.indexer.util.SearchUtil; +import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; +import org.apache.maven.index_shaded.lucene.index.IndexUpgrader; +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.nio.file.Path; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Locale; + + +@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<Path> files = new ArrayList<>(); + files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test", TEST_REPO_1, + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) ); + files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test", TEST_REPO_1, + "/org/apache/archiva/archiva-test/1.0/archiva-test-1.0.jar" )); + files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test", TEST_REPO_1, + "org/apache/archiva/archiva-test/2.0/archiva-test-2.0.jar" )); + + createIndex( TEST_REPO_1, files, scan ); + } + + private void createIndexContainingMoreArtifacts( boolean scan ) + throws Exception + { + List<Path> files = new ArrayList<>(); + files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + TEST_REPO_1 + + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) ); + files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + TEST_REPO_1 + + "/org/apache/archiva/archiva-test/1.0/archiva-test-1.0.jar" ) ); + files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + TEST_REPO_1 + + "/org/apache/archiva/archiva-test/2.0/archiva-test-2.0.jar" ) ); + files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + TEST_REPO_1 + + "/org/apache/archiva/archiva-webapp/1.0/archiva-webapp-1.0.war" ) ); + files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), + "src/test/" + TEST_REPO_1 + "/com/artifactid-numeric/1.0/artifactid-numeric-1.0.jar" ) ); + files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + TEST_REPO_1 + + "/com/artifactid-numeric123/1.0/artifactid-numeric123-1.0.jar" ) ); + files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.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<Path> files = new ArrayList<>(); + + files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + TEST_REPO_1 + + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) ); + + files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + TEST_REPO_1 + + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.pom" ) ); + + files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + 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(); + + EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + // search groupId + 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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + 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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + 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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + 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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + 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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + 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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + archivaConfigControl.replay(); + + SearchResults results = search.search( "user", selectedRepos, "org", limits, Collections.emptyList() ); + + archivaConfigControl.verify(); + + assertNotNull( results ); + assertEquals( 1, results.getHits().size() ); + assertEquals( "total hits not 9 for page1 " + results, 9, 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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + 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 9 for page 2 " + results, 9, 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<Path> files = new ArrayList<>(); + files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + TEST_REPO_2 + + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) ); + files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + 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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + 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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + 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" ); + + 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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + 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<Path> files = new ArrayList<>(); + files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + TEST_REPO_2 + + "/org/apache/archiva/archiva-search/1.0/archiva-search-1.0.jar" ) ); + files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + 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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + 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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + 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<Path> files = new ArrayList<>(); + files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), + "src/test/" + TEST_REPO_1 + "/com/artifactid-numeric/1.0/artifactid-numeric-1.0.jar" ) ); + files.add( Paths.get( org.apache.archiva.common.utils.FileUtils.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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + 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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + 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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + archivaConfigControl.replay(); + + search.search( "user", searchFields, null ); + + archivaConfigControl.verify(); + + fail( "A RepositorySearchException 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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + 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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + 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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + 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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + 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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + 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.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + 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 ); + + archivaConfigControl.replay(); + + SearchResults results = search.search( "user", searchFields, null ); + + archivaConfigControl.verify(); + + assertNotNull( results ); + assertEquals( 0, results.getHits().size() ); + } + + @Test + public void nolimitedResult() + throws Exception + { + + Path repo = Paths.get( "target/repo-release" ); + Path indexDirectory = repo.resolve(".index" ); + FileUtils.copyDirectoryStructure( Paths.get( "src/test/repo-release" ).toFile(), repo.toFile() ); + + IndexUpgrader.main( new String[]{ indexDirectory.toAbsolutePath().toString() } ); + + createIndex( "repo-release", Collections.emptyList(), false ); + + nexusIndexer.addIndexingContext( REPO_RELEASE, REPO_RELEASE, repo.toFile(), indexDirectory.toFile(), + repo.toUri().toURL().toExternalForm(), + indexDirectory.toUri().toURL().toString(), indexCreators ); + + SearchResultLimits limits = new SearchResultLimits( SearchResultLimits.ALL_PAGES ); + limits.setPageSize( 300 ); + + EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); + EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); + + archivaConfigControl.replay(); + + SearchResults searchResults = search.search( null, Arrays.asList( REPO_RELEASE ), // + "org.example", limits, // + Collections.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(); + } +}
http://git-wip-us.apache.org/repos/asf/archiva/blob/c6e4e563/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/search/AbstractMavenRepositorySearch.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/search/AbstractMavenRepositorySearch.java b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/search/AbstractMavenRepositorySearch.java deleted file mode 100644 index ab85ec5..0000000 --- a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/search/AbstractMavenRepositorySearch.java +++ /dev/null @@ -1,303 +0,0 @@ -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 junit.framework.TestCase; -import org.apache.archiva.admin.repository.managed.DefaultManagedRepositoryAdmin; -import org.apache.archiva.admin.repository.proxyconnector.DefaultProxyConnectorAdmin; -import org.apache.archiva.common.plexusbridge.PlexusSisuBridge; -import org.apache.archiva.common.utils.FileUtils; -import org.apache.archiva.configuration.ArchivaConfiguration; -import org.apache.archiva.configuration.Configuration; -import org.apache.archiva.configuration.ConfigurationListener; -import org.apache.archiva.configuration.ManagedRepositoryConfiguration; -import org.apache.archiva.repository.RepositoryRegistry; -import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; -import org.apache.commons.lang.SystemUtils; -import org.apache.maven.index.ArtifactContext; -import org.apache.maven.index.ArtifactContextProducer; -import org.apache.maven.index.ArtifactScanningListener; -import org.apache.maven.index.NexusIndexer; -import org.apache.maven.index.QueryCreator; -import org.apache.maven.index.ScanningResult; -import org.apache.maven.index.context.IndexCreator; -import org.apache.maven.index.context.IndexingContext; -import org.easymock.EasyMock; -import org.easymock.IMocksControl; -import org.junit.After; -import org.junit.Before; -import org.junit.runner.RunWith; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.test.context.ContextConfiguration; - -import javax.inject.Inject; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.List; -import java.util.Locale; - -/** - * @author Olivier Lamy - */ -@RunWith( ArchivaSpringJUnit4ClassRunner.class ) -@ContextConfiguration( locations = { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" } ) -public abstract class AbstractMavenRepositorySearch - extends TestCase -{ - - protected Logger log = LoggerFactory.getLogger( getClass() ); - - public static String TEST_REPO_1 = "maven-search-test-repo"; - - public static String TEST_REPO_2 = "maven-search-test-repo-2"; - - - public static String REPO_RELEASE = "repo-release"; - - MavenRepositorySearch search; - - ArchivaConfiguration archivaConfig; - - @Inject - ArtifactContextProducer artifactContextProducer; - - @Inject - RepositoryRegistry repositoryRegistry; - - IMocksControl archivaConfigControl; - - Configuration config; - - @Inject - PlexusSisuBridge plexusSisuBridge; - - @Inject - List<IndexCreator> indexCreators; - - @Inject - NexusIndexer nexusIndexer; - - @Inject - QueryCreator queryCreator; - - @Before - @Override - public void setUp() - throws Exception - { - super.setUp(); - - FileUtils.deleteDirectory( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "/target/repos/" + TEST_REPO_1 + "/.indexer" ) ); - assertFalse( Files.exists(Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "/target/repos/" + TEST_REPO_1 + "/.indexer" )) ); - - FileUtils.deleteDirectory( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "/target/repos/" + TEST_REPO_2 + "/.indexer" ) ); - assertFalse( Files.exists(Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "/target/repos/" + TEST_REPO_2 + "/.indexer" )) ); - - archivaConfigControl = EasyMock.createControl(); - - archivaConfig = archivaConfigControl.createMock( ArchivaConfiguration.class ); - - DefaultManagedRepositoryAdmin defaultManagedRepositoryAdmin = new DefaultManagedRepositoryAdmin(); - defaultManagedRepositoryAdmin.setArchivaConfiguration( archivaConfig ); - - DefaultProxyConnectorAdmin defaultProxyConnectorAdmin = new DefaultProxyConnectorAdmin(); - defaultProxyConnectorAdmin.setArchivaConfiguration( archivaConfig ); - repositoryRegistry.setArchivaConfiguration( archivaConfig ); - - search = new MavenRepositorySearch( nexusIndexer, defaultManagedRepositoryAdmin, defaultProxyConnectorAdmin, - queryCreator ); - - defaultManagedRepositoryAdmin.setIndexer( nexusIndexer ); - defaultManagedRepositoryAdmin.setIndexCreators( indexCreators ); - assertNotNull( repositoryRegistry ); - defaultManagedRepositoryAdmin.setRepositoryRegistry( repositoryRegistry ); - - config = new Configuration(); - config.addManagedRepository( createRepositoryConfig( TEST_REPO_1 ) ); - config.addManagedRepository( createRepositoryConfig( TEST_REPO_2 ) ); - config.addManagedRepository( createRepositoryConfig( REPO_RELEASE ) ); - - - archivaConfig.addListener( EasyMock.anyObject( ConfigurationListener.class ) ); - EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); - EasyMock.expect( archivaConfig.getConfiguration() ).andReturn(config).anyTimes(); - archivaConfigControl.replay(); - repositoryRegistry.reload(); - archivaConfigControl.reset(); - } - - @After - @Override - public void tearDown() - throws Exception - { - for ( IndexingContext indexingContext : nexusIndexer.getIndexingContexts().values() ) - { - nexusIndexer.removeIndexingContext( indexingContext, true ); - } - - FileUtils.deleteDirectory( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "/target/repos/" + TEST_REPO_1 ) ); - assertFalse( Files.exists(Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "/target/repos/" + TEST_REPO_1 )) ); - - FileUtils.deleteDirectory( Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "/target/repos/" + TEST_REPO_2 ) ); - assertFalse( Files.exists(Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "/target/repos/" + TEST_REPO_2 )) ); - - super.tearDown(); - } - - protected ManagedRepositoryConfiguration createRepositoryConfig( String repository ) - { - ManagedRepositoryConfiguration repositoryConfig = new ManagedRepositoryConfiguration(); - repositoryConfig.setId( repository ); - repositoryConfig.setLocation( org.apache.archiva.common.utils.FileUtils.getBasedir() + "/target/repos/" + repository ); - Path f = Paths.get( repositoryConfig.getLocation() ); - if ( !Files.exists(f) ) - { - try - { - Files.createDirectories( f ); - } - catch ( IOException e ) - { - log.error("Could not create directories for {}", f); - } - } - repositoryConfig.setLayout( "default" ); - repositoryConfig.setName( repository ); - repositoryConfig.setScanned( true ); - repositoryConfig.setSnapshots( false ); - repositoryConfig.setReleases( true ); - - return repositoryConfig; - } - - protected void createIndex( String repository, List<Path> filesToBeIndexed, boolean scan ) - throws Exception - { - - IndexingContext context = nexusIndexer.getIndexingContexts().get( repository ); - - if ( context != null ) - { - nexusIndexer.removeIndexingContext( context, true ); - } - - Path indexerDirectory = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "/target/repos/" + repository + "/.indexer" ); - - if ( Files.exists(indexerDirectory) ) - { - FileUtils.deleteDirectory( indexerDirectory ); - } - - assertFalse( Files.exists(indexerDirectory) ); - - Path lockFile = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "/target/repos/" + repository + "/.indexer/write.lock" ); - if ( Files.exists(lockFile) ) - { - Files.delete(lockFile); - } - - assertFalse( Files.exists(lockFile) ); - - Path repo = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "src/test/" + repository ); - assertTrue( Files.exists(repo) ); - Path indexDirectory = - Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/index/test-" + Long.toString( System.currentTimeMillis() ) ); - indexDirectory.toFile().deleteOnExit(); - FileUtils.deleteDirectory( indexDirectory ); - - context = nexusIndexer.addIndexingContext( repository, repository, repo.toFile(), indexDirectory.toFile(), - repo.toUri().toURL().toExternalForm(), - indexDirectory.toUri().toURL().toString(), indexCreators ); - - // minimize datas in memory -// context.getIndexWriter().setMaxBufferedDocs( -1 ); -// context.getIndexWriter().setRAMBufferSizeMB( 1 ); - for ( Path artifactFile : filesToBeIndexed ) - { - assertTrue( "file not exists " + artifactFile, Files.exists(artifactFile) ); - ArtifactContext ac = artifactContextProducer.getArtifactContext( context, artifactFile.toFile() ); - - if ( artifactFile.toString().endsWith( ".pom" ) ) - { - ac.getArtifactInfo().setFileExtension( "pom" ); - ac.getArtifactInfo().setPackaging( "pom" ); - ac.getArtifactInfo().setClassifier( "pom" ); - } - nexusIndexer.addArtifactToIndex( ac, context ); - context.updateTimestamp( true ); - } - - if ( scan ) - { - nexusIndexer.scan( context, new ArtifactScanListener(), false ); - } - // force flushing - context.getIndexWriter().commit(); - context.setSearchable( true ); - - } - - static class ArtifactScanListener - implements ArtifactScanningListener - { - protected Logger log = LoggerFactory.getLogger( getClass() ); - - @Override - public void scanningStarted( IndexingContext ctx ) - { - // - } - - @Override - public void scanningFinished( IndexingContext ctx, ScanningResult result ) - { - // no op - } - - @Override - public void artifactError( ArtifactContext ac, Exception e ) - { - log.debug( "artifactError {}", ac.getArtifact().getPath(), e ); - } - - @Override - public void artifactDiscovered( ArtifactContext ac ) - { - log.debug( "artifactDiscovered {}:{}", // - ac.getArtifact() == null ? "" : ac.getArtifact().getPath(), // - ac.getArtifact() == null ? "" : ac.getArtifactInfo() ); - } - } - - public String niceDisplay( SearchResults searchResults ) - throws Exception - { - StringBuilder sb = new StringBuilder(); - for ( SearchResultHit hit : searchResults.getHits() ) - { - sb.append( hit.toString() ).append( SystemUtils.LINE_SEPARATOR ); - } - return sb.toString(); - } -} http://git-wip-us.apache.org/repos/asf/archiva/blob/c6e4e563/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchOSGITest.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchOSGITest.java b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchOSGITest.java deleted file mode 100644 index 6942930..0000000 --- a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchOSGITest.java +++ /dev/null @@ -1,78 +0,0 @@ -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.easymock.EasyMock; -import org.junit.Test; - -import java.nio.file.Path; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Locale; - -/** - * @author Olivier Lamy - */ -public class MavenRepositorySearchOSGITest - extends AbstractMavenRepositorySearch -{ - - @Test - public void searchFelixWithSymbolicName() - throws Exception - { - - createIndex( TEST_REPO_1, Collections.<Path>emptyList(), true ); - - List<String> selectedRepos = Arrays.asList( TEST_REPO_1 ); - - // search artifactId - EasyMock.expect( archivaConfig.getDefaultLocale() ).andReturn( Locale.getDefault( ) ).anyTimes(); - EasyMock.expect( archivaConfig.getConfiguration()).andReturn(config).anyTimes(); - - archivaConfigControl.replay(); - - SearchFields searchFields = new SearchFields(); - searchFields.setBundleSymbolicName( "org.apache.felix.bundlerepository" ); - searchFields.setBundleVersion( "1.6.6" ); - 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.felix", hit.getGroupId() ); - assertEquals( "org.apache.felix.bundlerepository", hit.getArtifactId() ); - assertEquals( "1.6.6", hit.getVersions().get( 0 ) ); - - assertEquals( "org.apache.felix.bundlerepository;uses:=\"org.osgi.framework\";version=\"2.0\"", - hit.getBundleExportPackage() ); - assertEquals( "org.apache.felix.bundlerepository.RepositoryAdmin,org.osgi.service.obr.RepositoryAdmin", - hit.getBundleExportService() ); - assertEquals( "org.apache.felix.bundlerepository", hit.getBundleSymbolicName() ); - assertEquals( "1.6.6", hit.getBundleVersion() ); - } - -} http://git-wip-us.apache.org/repos/asf/archiva/blob/c6e4e563/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchPaginateTest.java ---------------------------------------------------------------------- diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchPaginateTest.java b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchPaginateTest.java deleted file mode 100644 index 802444a..0000000 --- a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/search/MavenRepositorySearchPaginateTest.java +++ /dev/null @@ -1,105 +0,0 @@ -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 junit.framework.TestCase; -import org.apache.archiva.indexer.util.SearchUtil; -import org.junit.Test; -import org.junit.runner.RunWith; - -import java.util.Arrays; -import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner; - -/** - * @author Olivier Lamy - */ -@RunWith( ArchivaBlockJUnit4ClassRunner.class ) -public class MavenRepositorySearchPaginateTest - extends TestCase -{ - @Test - public void nonPaginatedResult() - throws Exception - { - MavenRepositorySearch search = new MavenRepositorySearch(); - - SearchResults searchResults = build( 10, new SearchResultLimits( 0 ) ); - - searchResults = search.paginate( searchResults ); - - assertEquals( 10, searchResults.getReturnedHitsCount() ); - - } - - @Test - public void nonPaginatedHugeResult() - throws Exception - { - MavenRepositorySearch search = new MavenRepositorySearch(); - - SearchResults origSearchResults = build( 63, new SearchResultLimits( 0 ) ); - - SearchResults searchResults = search.paginate( origSearchResults ); - - assertEquals( 30, searchResults.getReturnedHitsCount() ); - - origSearchResults = build( 63, new SearchResultLimits( 1 ) ); - - searchResults = search.paginate( origSearchResults ); - - assertEquals( 30, searchResults.getReturnedHitsCount() ); - - } - - @Test - public void paginatedResult() - throws Exception - { - MavenRepositorySearch search = new MavenRepositorySearch(); - - SearchResults searchResults = build( 32, new SearchResultLimits( 1 ) ); - - searchResults = search.paginate( searchResults ); - - assertEquals( 2, searchResults.getReturnedHitsCount() ); - - } - - - SearchResults build( int number, SearchResultLimits limits ) - { - SearchResults searchResults = new SearchResults(); - searchResults.setLimits( limits ); - for ( int i = 0; i < number; i++ ) - { - SearchResultHit hit = new SearchResultHit(); - hit.setGroupId( "commons-foo" ); - hit.setArtifactId( "commons-bar-" + i ); - hit.setPackaging( "jar" ); - hit.setVersions( Arrays.asList( "1.0" ) ); - String id = - SearchUtil.getHitId( hit.getGroupId(), hit.getArtifactId(), hit.getClassifier(), hit.getPackaging() ); - searchResults.addHit( id, hit ); - } - - searchResults.setTotalHits( number ); - return searchResults; - - } -}