summaryrefslogtreecommitdiffstats
path: root/archiva-modules/archiva-base/archiva-indexer
diff options
context:
space:
mode:
authorOlivier Lamy <olamy@apache.org>2011-08-15 21:27:48 +0000
committerOlivier Lamy <olamy@apache.org>2011-08-15 21:27:48 +0000
commitc1abddcaf9427b95ad98f53b5da6bdb7492d0ca6 (patch)
tree5cb63d4b90664c9c50746e9de1748ed5740fb520 /archiva-modules/archiva-base/archiva-indexer
parentf8aa5f9e7896b1977b28b1acad484c28074902c5 (diff)
downloadarchiva-c1abddcaf9427b95ad98f53b5da6bdb7492d0ca6.tar.gz
archiva-c1abddcaf9427b95ad98f53b5da6bdb7492d0ca6.zip
[MRM-1501] add unit for searching with osgi query
git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1158021 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'archiva-modules/archiva-base/archiva-indexer')
-rw-r--r--archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java52
-rw-r--r--archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/SearchFields.java80
-rw-r--r--archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/AbstractNexusRepositorySearch.java190
-rw-r--r--archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchOSGITest.java70
-rw-r--r--archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java140
-rw-r--r--archiva-modules/archiva-base/archiva-indexer/src/test/resources/nexus-search-test-repo/org/apache/felix/org.apache.felix.bundlerepository/1.6.6/org.apache.felix.bundlerepository-1.6.6.jarbin0 -> 168279 bytes
-rw-r--r--archiva-modules/archiva-base/archiva-indexer/src/test/resources/nexus-search-test-repo/org/apache/felix/org.apache.felix.bundlerepository/1.6.6/org.apache.felix.bundlerepository-1.6.6.pom138
7 files changed, 522 insertions, 148 deletions
diff --git a/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java b/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java
index 288e0ee39..01b3e9a1e 100644
--- a/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java
+++ b/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/NexusRepositorySearch.java
@@ -34,6 +34,7 @@ import org.apache.maven.index.FlatSearchRequest;
import org.apache.maven.index.FlatSearchResponse;
import org.apache.maven.index.MAVEN;
import org.apache.maven.index.NexusIndexer;
+import org.apache.maven.index.OSGI;
import org.apache.maven.index.context.IndexingContext;
import org.apache.maven.index.context.UnsupportedExistingLuceneIndexException;
import org.apache.maven.index.expr.StringSearchExpression;
@@ -41,12 +42,12 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
+import javax.inject.Inject;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import javax.inject.Inject;
/**
* RepositorySearch implementation which uses the Nexus Indexer for searching.
@@ -121,27 +122,62 @@ public class NexusRepositorySearch
BooleanQuery q = new BooleanQuery();
if ( StringUtils.isNotBlank( searchFields.getGroupId() ) )
{
- q.add( indexer.constructQuery( MAVEN.GROUP_ID, new StringSearchExpression( searchFields.getGroupId() ) ), Occur.MUST );
+ q.add( indexer.constructQuery( MAVEN.GROUP_ID, new StringSearchExpression( searchFields.getGroupId() ) ),
+ Occur.MUST );
}
if ( StringUtils.isNotBlank( searchFields.getArtifactId() ) )
{
- q.add( indexer.constructQuery( MAVEN.ARTIFACT_ID, new StringSearchExpression( searchFields.getArtifactId() ) ), Occur.MUST );
+ q.add(
+ indexer.constructQuery( MAVEN.ARTIFACT_ID, new StringSearchExpression( searchFields.getArtifactId() ) ),
+ Occur.MUST );
}
if ( StringUtils.isNotBlank( searchFields.getVersion() ) )
{
- q.add( indexer.constructQuery( MAVEN.VERSION, new StringSearchExpression( searchFields.getVersion() ) ), Occur.MUST );
+ q.add( indexer.constructQuery( MAVEN.VERSION, new StringSearchExpression( searchFields.getVersion() ) ),
+ Occur.MUST );
}
if ( StringUtils.isNotBlank( searchFields.getPackaging() ) )
{
- q.add( indexer.constructQuery( MAVEN.PACKAGING, new StringSearchExpression( searchFields.getPackaging() ) ), Occur.MUST );
+ q.add( indexer.constructQuery( MAVEN.PACKAGING, new StringSearchExpression( searchFields.getPackaging() ) ),
+ Occur.MUST );
}
if ( StringUtils.isNotBlank( searchFields.getClassName() ) )
{
- q.add( indexer.constructQuery( MAVEN.CLASSNAMES, new StringSearchExpression( searchFields.getClassName( ) ) ), Occur.MUST );
+ q.add(
+ indexer.constructQuery( MAVEN.CLASSNAMES, new StringSearchExpression( searchFields.getClassName() ) ),
+ Occur.MUST );
+ }
+
+ if ( StringUtils.isNotBlank( searchFields.getBundleSymbolicName() ) )
+ {
+ q.add( indexer.constructQuery( OSGI.SYMBOLIC_NAME,
+ new StringSearchExpression( searchFields.getBundleSymbolicName() ) ),
+ Occur.MUST );
+ }
+
+ if ( StringUtils.isNotBlank( searchFields.getBundleVersion() ) )
+ {
+ q.add(
+ indexer.constructQuery( OSGI.VERSION, new StringSearchExpression( searchFields.getBundleVersion() ) ),
+ Occur.MUST );
+ }
+
+ if ( StringUtils.isNotBlank( searchFields.getBundleExportPackage() ) )
+ {
+ q.add( indexer.constructQuery( OSGI.EXPORT_PACKAGE,
+ new StringSearchExpression( searchFields.getBundleExportPackage() ) ),
+ Occur.MUST );
+ }
+
+ if ( StringUtils.isNotBlank( searchFields.getBundleExportService() ) )
+ {
+ q.add( indexer.constructQuery( OSGI.SYMBOLIC_NAME,
+ new StringSearchExpression( searchFields.getBundleExportService() ) ),
+ Occur.MUST );
}
if ( q.getClauses() == null || q.getClauses().length <= 0 )
@@ -199,7 +235,7 @@ public class NexusRepositorySearch
private void constructQuery( String term, BooleanQuery q )
{
q.add( indexer.constructQuery( MAVEN.GROUP_ID, new StringSearchExpression( term ) ), Occur.SHOULD );
- q.add( indexer.constructQuery( MAVEN.ARTIFACT_ID, new StringSearchExpression( term ) ), Occur.SHOULD );
+ q.add( indexer.constructQuery( MAVEN.ARTIFACT_ID, new StringSearchExpression( term ) ), Occur.SHOULD );
q.add( indexer.constructQuery( MAVEN.VERSION, new StringSearchExpression( term ) ), Occur.SHOULD );
q.add( indexer.constructQuery( MAVEN.PACKAGING, new StringSearchExpression( term ) ), Occur.SHOULD );
q.add( indexer.constructQuery( MAVEN.CLASSNAMES, new StringSearchExpression( term ) ), Occur.SHOULD );
@@ -228,7 +264,7 @@ public class NexusRepositorySearch
indexDirectory = new File( repoConfig.getLocation(), ".indexer" );
}
- if (indexer.getIndexingContexts().containsKey( repoConfig.getId() ))
+ if ( indexer.getIndexingContexts().containsKey( repoConfig.getId() ) )
{
// alreday here so no need to record it again
log.info( "index with id {} already exists skip adding it", repoConfig.getId() );
diff --git a/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/SearchFields.java b/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/SearchFields.java
index af8813213..fac51e112 100644
--- a/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/SearchFields.java
+++ b/archiva-modules/archiva-base/archiva-indexer/src/main/java/org/apache/archiva/indexer/search/SearchFields.java
@@ -48,17 +48,46 @@ public class SearchFields
* class name or package name
*/
private String className;
-
+
/**
* repositories
*/
private List<String> repositories = new ArrayList<String>();
-
+
+
+ /**
+ * contains osgi metadata Bundle-Version if available
+ *
+ * @since 1.4
+ */
+ private String bundleVersion;
+
+ /**
+ * contains osgi metadata Bundle-SymbolicName if available
+ *
+ * @since 1.4
+ */
+ private String bundleSymbolicName;
+
+ /**
+ * contains osgi metadata Export-Package if available
+ *
+ * @since 1.4
+ */
+ private String bundleExportPackage;
+
+ /**
+ * contains osgi metadata Export-Service if available
+ *
+ * @since 1.4
+ */
+ private String bundleExportService;
+
public SearchFields()
{
-
+ // no op
}
-
+
public SearchFields( String groupId, String artifactId, String version, String packaging, String className,
List<String> repositories )
{
@@ -69,7 +98,7 @@ public class SearchFields
this.className = className;
this.repositories = repositories;
}
-
+
public String getGroupId()
{
return groupId;
@@ -129,4 +158,45 @@ public class SearchFields
{
this.repositories = repositories;
}
+
+
+ public String getBundleVersion()
+ {
+ return bundleVersion;
+ }
+
+ public void setBundleVersion( String bundleVersion )
+ {
+ this.bundleVersion = bundleVersion;
+ }
+
+ public String getBundleSymbolicName()
+ {
+ return bundleSymbolicName;
+ }
+
+ public void setBundleSymbolicName( String bundleSymbolicName )
+ {
+ this.bundleSymbolicName = bundleSymbolicName;
+ }
+
+ public String getBundleExportPackage()
+ {
+ return bundleExportPackage;
+ }
+
+ public void setBundleExportPackage( String bundleExportPackage )
+ {
+ this.bundleExportPackage = bundleExportPackage;
+ }
+
+ public String getBundleExportService()
+ {
+ return bundleExportService;
+ }
+
+ public void setBundleExportService( String bundleExportService )
+ {
+ this.bundleExportService = bundleExportService;
+ }
}
diff --git a/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/AbstractNexusRepositorySearch.java b/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/AbstractNexusRepositorySearch.java
new file mode 100644
index 000000000..ea2a1a0e1
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/AbstractNexusRepositorySearch.java
@@ -0,0 +1,190 @@
+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.common.plexusbridge.PlexusSisuBridge;
+import org.apache.commons.io.FileUtils;
+import org.apache.maven.archiva.common.utils.ArchivaNexusIndexerUtil;
+import org.apache.maven.archiva.common.utils.FileUtil;
+import org.apache.maven.archiva.configuration.ArchivaConfiguration;
+import org.apache.maven.archiva.configuration.Configuration;
+import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
+import org.apache.maven.index.ArtifactContext;
+import org.apache.maven.index.ArtifactContextProducer;
+import org.apache.maven.index.NexusIndexer;
+import org.apache.maven.index.artifact.IllegalArtifactCoordinateException;
+import org.apache.maven.index.context.IndexingContext;
+import org.apache.maven.index.context.UnsupportedExistingLuceneIndexException;
+import org.easymock.MockControl;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.runner.RunWith;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import javax.inject.Inject;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Olivier Lamy
+ */
+@RunWith( SpringJUnit4ClassRunner.class )
+@ContextConfiguration( locations = { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" } )
+public abstract class AbstractNexusRepositorySearch
+ extends TestCase
+{
+
+ public static String TEST_REPO_1 = "nexus-search-test-repo";
+
+ public static String TEST_REPO_2 = "nexus-search-test-repo-2";
+
+ RepositorySearch search;
+
+ ArchivaConfiguration archivaConfig;
+
+ ArtifactContextProducer artifactContextProducer;
+
+ MockControl archivaConfigControl;
+
+ Configuration config;
+
+ @Inject
+ PlexusSisuBridge plexusSisuBridge;
+
+ NexusIndexer nexusIndexer;
+
+ @Before
+ public void setUp()
+ throws Exception
+ {
+ super.setUp();
+
+ FileUtils.deleteDirectory(
+ new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_1 + "/.indexer" ) );
+ assertFalse( new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_1 + "/.indexer" ).exists() );
+
+ FileUtils.deleteDirectory(
+ new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_2 + "/.indexer" ) );
+ assertFalse( new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_2 + "/.indexer" ).exists() );
+
+ archivaConfigControl = MockControl.createControl( ArchivaConfiguration.class );
+
+ archivaConfig = (ArchivaConfiguration) archivaConfigControl.getMock();
+
+ search = new NexusRepositorySearch( plexusSisuBridge, archivaConfig );
+
+ nexusIndexer = plexusSisuBridge.lookup( NexusIndexer.class );
+
+ artifactContextProducer = plexusSisuBridge.lookup( ArtifactContextProducer.class );
+
+ config = new Configuration();
+ config.addManagedRepository( createRepositoryConfig( TEST_REPO_1 ) );
+ config.addManagedRepository( createRepositoryConfig( TEST_REPO_2 ) );
+ }
+
+ @After
+ public void tearDown()
+ throws Exception
+ {
+
+ for ( IndexingContext indexingContext : nexusIndexer.getIndexingContexts().values() )
+ {
+ nexusIndexer.removeIndexingContext( indexingContext, true );
+ }
+
+ FileUtils.deleteDirectory(
+ new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_1 + "/.indexer" ) );
+ assertFalse( new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_1 + "/.indexer" ).exists() );
+
+ FileUtils.deleteDirectory(
+ new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_2 + "/.indexer" ) );
+ assertFalse( new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_2 + "/.indexer" ).exists() );
+
+ super.tearDown();
+ }
+
+ protected ManagedRepositoryConfiguration createRepositoryConfig( String repository )
+ {
+ ManagedRepositoryConfiguration repositoryConfig = new ManagedRepositoryConfiguration();
+ repositoryConfig.setId( repository );
+ repositoryConfig.setLocation( FileUtil.getBasedir() + "/target/test-classes/" + repository );
+ repositoryConfig.setLayout( "default" );
+ repositoryConfig.setName( repository );
+ repositoryConfig.setScanned( true );
+ repositoryConfig.setSnapshots( false );
+ repositoryConfig.setReleases( true );
+
+ return repositoryConfig;
+ }
+
+ protected void createIndex( String repository, List<File> filesToBeIndexed, boolean scan )
+ throws IOException, UnsupportedExistingLuceneIndexException
+ {
+
+ File indexerDirectory = new File( FileUtil.getBasedir(), "/target/test-classes/" + repository + "/.indexer" );
+
+ if ( indexerDirectory.exists() )
+ {
+ FileUtils.deleteDirectory( indexerDirectory );
+ }
+
+ assertFalse( indexerDirectory.exists() );
+
+ File lockFile =
+ new File( FileUtil.getBasedir(), "/target/test-classes/" + repository + "/.indexer/write.lock" );
+ if ( lockFile.exists() )
+ {
+ lockFile.delete();
+ }
+
+ assertFalse( lockFile.exists() );
+
+ File repo = new File( FileUtil.getBasedir(), "/target/test-classes/" + repository );
+ File indexDirectory = new File( FileUtil.getBasedir(), "/target/test-classes/" + repository + "/.indexer" );
+
+ IndexingContext context = nexusIndexer.addIndexingContext( repository, repository, repo, indexDirectory,
+ repo.toURI().toURL().toExternalForm(),
+ indexDirectory.toURI().toURL().toString(),
+ ArchivaNexusIndexerUtil.FULL_INDEX );
+
+ List<ArtifactContext> artifactContexts = new ArrayList<ArtifactContext>( filesToBeIndexed.size() );
+ for ( File artifactFile : filesToBeIndexed )
+ {
+ ArtifactContext ac = artifactContextProducer.getArtifactContext( context, artifactFile );
+ artifactContexts.add( ac );
+ }
+
+ context.setSearchable( true );
+
+ if ( filesToBeIndexed != null && !filesToBeIndexed.isEmpty() )
+ {
+ nexusIndexer.addArtifactsToIndex( artifactContexts, context );
+ }
+ if ( scan )
+ {
+ nexusIndexer.scan( context, false );
+ }
+ assertTrue( new File( FileUtil.getBasedir(), "/target/test-classes/" + repository + "/.indexer" ).exists() );
+ }
+}
diff --git a/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchOSGITest.java b/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchOSGITest.java
new file mode 100644
index 000000000..dfc530625
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchOSGITest.java
@@ -0,0 +1,70 @@
+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.junit.Test;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * @author Olivier Lamy
+ */
+public class NexusRepositorySearchOSGITest
+ extends AbstractNexusRepositorySearch
+{
+
+ @Test
+ public void searchFelixWithSymbolicName()
+ throws Exception
+ {
+
+ createIndex( TEST_REPO_1, Collections.<File>emptyList(), true );
+
+ List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
+
+ // search artifactId
+ archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config );
+
+ 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 ) );
+
+ }
+
+}
diff --git a/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java b/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java
index abf861366..da2a5d396 100644
--- a/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java
+++ b/archiva-modules/archiva-base/archiva-indexer/src/test/java/org/apache/archiva/indexer/search/NexusRepositorySearchTest.java
@@ -44,6 +44,7 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import javax.inject.Inject;
@@ -51,59 +52,9 @@ import javax.inject.Inject;
@RunWith( SpringJUnit4ClassRunner.class )
@ContextConfiguration( locations = { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" } )
public class NexusRepositorySearchTest
- extends TestCase
+ extends AbstractNexusRepositorySearch
{
- private RepositorySearch search;
- private ArchivaConfiguration archivaConfig;
-
- //private DefaultIndexingContext context;
-
- //private IndexerEngine indexerEngine;
-
- private ArtifactContextProducer artifactContextProducer;
-
- private MockControl archivaConfigControl;
-
- private Configuration config;
-
- private static String TEST_REPO_1 = "nexus-search-test-repo";
-
- private static String TEST_REPO_2 = "nexus-search-test-repo-2";
-
- @Inject
- PlexusSisuBridge plexusSisuBridge;
-
- NexusIndexer nexusIndexer;
-
- @Before
- public void setUp()
- throws Exception
- {
- super.setUp();
-
- FileUtils.deleteDirectory(
- new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_1 + "/.indexer" ) );
- assertFalse( new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_1 + "/.indexer" ).exists() );
-
- FileUtils.deleteDirectory(
- new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_2 + "/.indexer" ) );
- assertFalse( new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_2 + "/.indexer" ).exists() );
-
- archivaConfigControl = MockControl.createControl( ArchivaConfiguration.class );
-
- archivaConfig = (ArchivaConfiguration) archivaConfigControl.getMock();
-
- search = new NexusRepositorySearch( plexusSisuBridge, archivaConfig );
-
- nexusIndexer = plexusSisuBridge.lookup( NexusIndexer.class );
-
- artifactContextProducer = plexusSisuBridge.lookup( ArtifactContextProducer.class );
-
- config = new Configuration();
- config.addManagedRepository( createRepositoryConfig( TEST_REPO_1 ) );
- config.addManagedRepository( createRepositoryConfig( TEST_REPO_2 ) );
- }
private void createSimpleIndex( boolean scan )
throws IOException, UnsupportedExistingLuceneIndexException, IllegalArtifactCoordinateException
@@ -154,94 +105,13 @@ public class NexusRepositorySearchTest
createIndex( TEST_REPO_1, files, scan );
}
- private ManagedRepositoryConfiguration createRepositoryConfig( String repository )
- {
- ManagedRepositoryConfiguration repositoryConfig = new ManagedRepositoryConfiguration();
- repositoryConfig.setId( repository );
- repositoryConfig.setLocation( FileUtil.getBasedir() + "/target/test-classes/" + repository );
- repositoryConfig.setLayout( "default" );
- repositoryConfig.setName( repository );
- repositoryConfig.setScanned( true );
- repositoryConfig.setSnapshots( false );
- repositoryConfig.setReleases( true );
-
- return repositoryConfig;
- }
-
- @After
- public void tearDown()
- throws Exception
- {
-
- for ( IndexingContext indexingContext : nexusIndexer.getIndexingContexts().values() )
- {
- nexusIndexer.removeIndexingContext( indexingContext, true );
- }
-
- FileUtils.deleteDirectory(
- new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_1 + "/.indexer" ) );
- assertFalse( new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_1 + "/.indexer" ).exists() );
-
- FileUtils.deleteDirectory(
- new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_2 + "/.indexer" ) );
- assertFalse( new File( FileUtil.getBasedir(), "/target/test-classes/" + TEST_REPO_2 + "/.indexer" ).exists() );
-
- super.tearDown();
- }
-
- private void createIndex( String repository, List<File> filesToBeIndexed, boolean scan )
- throws IOException, UnsupportedExistingLuceneIndexException, IllegalArtifactCoordinateException
- {
-
- File indexerDirectory = new File( FileUtil.getBasedir(), "/target/test-classes/" + repository + "/.indexer" );
-
- if ( indexerDirectory.exists() )
- {
- FileUtils.deleteDirectory( indexerDirectory );
- }
-
- assertFalse( indexerDirectory.exists() );
-
- File lockFile =
- new File( FileUtil.getBasedir(), "/target/test-classes/" + repository + "/.indexer/write.lock" );
- if ( lockFile.exists() )
- {
- lockFile.delete();
- }
-
- assertFalse( lockFile.exists() );
-
- File repo = new File( FileUtil.getBasedir(), "/target/test-classes/" + repository );
- File indexDirectory = new File( FileUtil.getBasedir(), "/target/test-classes/" + repository + "/.indexer" );
-
- IndexingContext context = nexusIndexer.addIndexingContext( repository, repository, repo, indexDirectory,
- repo.toURI().toURL().toExternalForm(),
- indexDirectory.toURI().toURL().toString(),
- ArchivaNexusIndexerUtil.FULL_INDEX );
-
- List<ArtifactContext> artifactContexts = new ArrayList<ArtifactContext>( filesToBeIndexed.size() );
- for ( File artifactFile : filesToBeIndexed )
- {
- ArtifactContext ac = artifactContextProducer.getArtifactContext( context, artifactFile );
- artifactContexts.add( ac );
- }
-
- nexusIndexer.addArtifactsToIndex( artifactContexts, context );
- if ( scan )
- {
- nexusIndexer.scan( context );
- }
- assertTrue( new File( FileUtil.getBasedir(), "/target/test-classes/" + repository + "/.indexer" ).exists() );
- }
-
@Test
public void testQuickSearch()
throws Exception
{
createSimpleIndex( false );
- List<String> selectedRepos = new ArrayList<String>();
- selectedRepos.add( TEST_REPO_1 );
+ List<String> selectedRepos = Arrays.asList( TEST_REPO_1 );
// search artifactId
archivaConfigControl.expectAndReturn( archivaConfig.getConfiguration(), config );
@@ -351,7 +221,7 @@ public class NexusRepositorySearchTest
assertNotNull( results );
assertEquals( 1, results.getHits().size() );
- assertEquals( "total hits not 5 for page1 " + results, 5, results.getTotalHits() );
+ assertEquals( "total hits not 6 for page1 " + results, 6, results.getTotalHits() );
assertEquals( "returned hits not 1 for page1 " + results, 1, results.getReturnedHitsCount() );
assertEquals( limits, results.getLimits() );
@@ -372,7 +242,7 @@ public class NexusRepositorySearchTest
assertNotNull( results );
assertEquals( "hits not 1", 1, results.getHits().size() );
- assertEquals( "total hits not 5 for page 2 " + results, 5, results.getTotalHits() );
+ assertEquals( "total hits not 6 for page 2 " + results, 6, results.getTotalHits() );
assertEquals( "returned hits not 1 for page2 " + results, 1, results.getReturnedHitsCount() );
assertEquals( limits, results.getLimits() );
}
diff --git a/archiva-modules/archiva-base/archiva-indexer/src/test/resources/nexus-search-test-repo/org/apache/felix/org.apache.felix.bundlerepository/1.6.6/org.apache.felix.bundlerepository-1.6.6.jar b/archiva-modules/archiva-base/archiva-indexer/src/test/resources/nexus-search-test-repo/org/apache/felix/org.apache.felix.bundlerepository/1.6.6/org.apache.felix.bundlerepository-1.6.6.jar
new file mode 100644
index 000000000..218330e3f
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-indexer/src/test/resources/nexus-search-test-repo/org/apache/felix/org.apache.felix.bundlerepository/1.6.6/org.apache.felix.bundlerepository-1.6.6.jar
Binary files differ
diff --git a/archiva-modules/archiva-base/archiva-indexer/src/test/resources/nexus-search-test-repo/org/apache/felix/org.apache.felix.bundlerepository/1.6.6/org.apache.felix.bundlerepository-1.6.6.pom b/archiva-modules/archiva-base/archiva-indexer/src/test/resources/nexus-search-test-repo/org/apache/felix/org.apache.felix.bundlerepository/1.6.6/org.apache.felix.bundlerepository-1.6.6.pom
new file mode 100644
index 000000000..19831eefa
--- /dev/null
+++ b/archiva-modules/archiva-base/archiva-indexer/src/test/resources/nexus-search-test-repo/org/apache/felix/org.apache.felix.bundlerepository/1.6.6/org.apache.felix.bundlerepository-1.6.6.pom
@@ -0,0 +1,138 @@
+<!--
+ 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <parent>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>felix-parent</artifactId>
+ <version>2.1</version>
+ <relativePath>../pom/pom.xml</relativePath>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <packaging>bundle</packaging>
+ <name>Apache Felix Bundle Repository</name>
+ <description>Bundle repository service.</description>
+ <artifactId>org.apache.felix.bundlerepository</artifactId>
+ <version>1.6.6</version>
+ <scm>
+ <connection>scm:svn:http://svn.apache.org/repos/asf/felix/releases/org.apache.felix.bundlerepository-1.6.6</connection>
+ <developerConnection>scm:svn:https://svn.apache.org/repos/asf/felix/releases/org.apache.felix.bundlerepository-1.6.6</developerConnection>
+ <url>http://svn.apache.org/repos/asf/felix/releases/org.apache.felix.bundlerepository-1.6.6</url>
+ </scm>
+ <dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>org.apache.felix.utils</artifactId>
+ <version>1.1.0</version>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>org.osgi.service.obr</artifactId>
+ <version>1.0.2</version>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>org.apache.felix.shell</artifactId>
+ <version>1.4.1</version>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>net.sf.kxml</groupId>
+ <artifactId>kxml2</artifactId>
+ <version>2.3.0</version>
+ <optional>true</optional>
+ <exclusions>
+ <exclusion>
+ <groupId>xmlpull</groupId>
+ <artifactId>xmlpull</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ <version>4.0.0</version>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ <version>4.1.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.woodstox</groupId>
+ <artifactId>woodstox-core-asl</artifactId>
+ <version>4.0.7</version>
+ <optional>true</optional>
+ </dependency>
+ <dependency>
+ <groupId>org.easymock</groupId>
+ <artifactId>easymock</artifactId>
+ <version>2.4</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <version>2.3.4</version>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Export-Package>org.apache.felix.bundlerepository;version="2.0"</Export-Package>
+ <Private-Package>
+ org.kxml2.io,
+ org.xmlpull.v1,
+ org.apache.felix.bundlerepository.impl.*,
+ org.apache.felix.utils.*
+ </Private-Package>
+ <Import-Package>!javax.xml.parsers,!org.xml.sax,org.osgi.service.log;resolution:=optional,org.osgi.service.obr;resolution:=optional,javax.xml.stream;resolution:=optional,*</Import-Package>
+ <DynamicImport-Package>org.apache.felix.shell</DynamicImport-Package>
+ <Bundle-Activator>${project.artifactId}.impl.Activator</Bundle-Activator>
+ <Bundle-DocURL>http://felix.apache.org/site/apache-felix-osgi-bundle-repository.html</Bundle-DocURL>
+ <Bundle-Url>http://felix.apache.org/site/downloads.cgi</Bundle-Url>
+ <Bundle-Source>http://felix.apache.org/site/downloads.cgi</Bundle-Source>
+ <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
+ <Bundle-Vendor>The Apache Software Foundation</Bundle-Vendor>
+ <Export-Service>org.apache.felix.bundlerepository.RepositoryAdmin,org.osgi.service.obr.RepositoryAdmin</Export-Service>
+ <_versionpolicy>[$(version;==;$(@)),$(version;+;$(@)))</_versionpolicy>
+ <Include-Resource>META-INF/LICENSE=LICENSE,META-INF/LICENSE.kxml2=LICENSE.kxml2,META-INF/NOTICE=NOTICE,META-INF/DEPENDENCIES=DEPENDENCIES</Include-Resource>
+ </instructions>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.rat</groupId>
+ <artifactId>apache-rat-plugin</artifactId>
+ <configuration>
+ <excludeSubProjects>false</excludeSubProjects>
+ <useEclipseDefaultExcludes>true</useEclipseDefaultExcludes>
+ <useMavenDefaultExcludes>true</useMavenDefaultExcludes>
+ <excludes>
+ <param>doc/*</param>
+ <param>maven-eclipse.xml</param>
+ <param>.checkstyle</param>
+ <param>.externalToolBuilders/*</param>
+ </excludes>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>