From 7543d8149c50c00f7a5f8c849dbe23d40435905e Mon Sep 17 00:00:00 2001 From: Martin Stockhammer Date: Tue, 21 Nov 2017 20:52:43 +0100 Subject: [PATCH] Updating indexmanager interface and completing test case --- .../archiva-maven2-indexer/pom.xml | 6 ++++ .../indexer/maven/MavenIndexContext.java | 5 +++ .../indexer/maven/MavenIndexManager.java | 11 +++--- .../indexer/maven/MavenIndexManagerTest.java | 35 +++++++++++++++++++ .../src/test/resources/spring-context.xml | 3 ++ .../archiva/indexer/ArchivaIndexManager.java | 3 +- .../indexer/ArchivaIndexingContext.java | 7 ++++ .../archiva/indexer/GenericIndexManager.java | 2 +- 8 files changed, 65 insertions(+), 7 deletions(-) diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/pom.xml b/archiva-modules/archiva-base/archiva-maven2-indexer/pom.xml index 2712e3a51..e51f82443 100644 --- a/archiva-modules/archiva-base/archiva-maven2-indexer/pom.xml +++ b/archiva-modules/archiva-base/archiva-maven2-indexer/pom.xml @@ -173,6 +173,12 @@ redback-common-test-resources test + + org.apache.maven.wagon + wagon-file + test + + org.apache.maven.wagon wagon-http-lightweight diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/main/java/org/apache/archiva/indexer/maven/MavenIndexContext.java b/archiva-modules/archiva-base/archiva-maven2-indexer/src/main/java/org/apache/archiva/indexer/maven/MavenIndexContext.java index 30cc72795..4ee80794d 100644 --- a/archiva-modules/archiva-base/archiva-maven2-indexer/src/main/java/org/apache/archiva/indexer/maven/MavenIndexContext.java +++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/main/java/org/apache/archiva/indexer/maven/MavenIndexContext.java @@ -84,6 +84,11 @@ public class MavenIndexContext implements ArchivaIndexingContext { delegate.close(deleteFiles); } + @Override + public void close() throws IOException { + delegate.close(false); + } + @Override public void purge() throws IOException { delegate.purge(); diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/main/java/org/apache/archiva/indexer/maven/MavenIndexManager.java b/archiva-modules/archiva-base/archiva-maven2-indexer/src/main/java/org/apache/archiva/indexer/maven/MavenIndexManager.java index d54f868a0..00e67e42f 100644 --- a/archiva-modules/archiva-base/archiva-maven2-indexer/src/main/java/org/apache/archiva/indexer/maven/MavenIndexManager.java +++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/main/java/org/apache/archiva/indexer/maven/MavenIndexManager.java @@ -242,13 +242,16 @@ public class MavenIndexManager implements ArchivaIndexManager } @Override - public void update( final ArchivaIndexingContext context, final URI remoteUpdateUri, final boolean fullUpdate ) throws IndexUpdateFailedException + public void update(final ArchivaIndexingContext context, final boolean fullUpdate) throws IndexUpdateFailedException { log.info( "start download remote index for remote repository {}", context.getRepository( ).getId( ) ); - - if ( !( context.getRepository( ) instanceof RemoteRepository ) ) + URI remoteUpdateUri; + if ( !( context.getRepository( ) instanceof RemoteRepository ) || !(context.getRepository().supportsFeature(RemoteIndexFeature.class)) ) { - throw new IndexUpdateFailedException( "The context is not associated to a remote repository " + context.getId( ) ); + throw new IndexUpdateFailedException( "The context is not associated to a remote repository with remote index " + context.getId( ) ); + } else { + RemoteIndexFeature rif = context.getRepository().getFeature(RemoteIndexFeature.class).get(); + remoteUpdateUri = context.getRepository().getLocation().resolve(rif.getIndexUri()); } final RemoteRepository remoteRepository = (RemoteRepository) context.getRepository( ); diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/MavenIndexManagerTest.java b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/MavenIndexManagerTest.java index 96876ad95..53cdaad81 100644 --- a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/MavenIndexManagerTest.java +++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/java/org/apache/archiva/indexer/maven/MavenIndexManagerTest.java @@ -24,7 +24,9 @@ import org.apache.archiva.indexer.ArchivaIndexingContext; import org.apache.archiva.indexer.IndexCreationFailedException; import org.apache.archiva.repository.RepositoryType; import org.apache.archiva.repository.features.IndexCreationFeature; +import org.apache.archiva.repository.features.RemoteIndexFeature; import org.apache.archiva.repository.maven2.MavenManagedRepository; +import org.apache.archiva.repository.maven2.MavenRemoteRepository; import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; import org.apache.maven.index.MAVEN; import org.apache.maven.index.QueryCreator; @@ -59,6 +61,7 @@ public class MavenIndexManagerTest { private Path indexPath; private MavenManagedRepository repository; private ArchivaIndexingContext ctx; + private MavenRemoteRepository repositoryRemote; @Inject MavenIndexManager mavenIndexManager; @@ -84,6 +87,19 @@ public class MavenIndexManagerTest { @Test public void pack() throws Exception { + createTestContext(); + Path destDir = repository.getLocalPath().resolve("org/apache/archiva/archiva-webapp/1.0"); + Path srcDir = Paths.get("src/test/maven-search-test-repo/org/apache/archiva/archiva-webapp/1.0"); + org.apache.commons.io.FileUtils.copyDirectory(srcDir.toFile(),destDir.toFile()); + mavenIndexManager.scan(ctx); + mavenIndexManager.pack(ctx); + assertTrue(Files.list(indexPath).filter(path -> { + try { + return path.getFileName().toString().endsWith(".gz") && Files.size(path) > 0; + } catch (IOException e) { + return false; + } + }).findAny().isPresent()); } @Test @@ -101,8 +117,16 @@ public class MavenIndexManagerTest { assertEquals(4, mvnCtx.acquireIndexSearcher().count(q)); } + /* + * Does only a index update via file uri, no HTTP uri + */ @Test public void update() throws Exception { + createTestContext(); + mavenIndexManager.pack(ctx); + ctx.close(false); + createTestContextForRemote(); + mavenIndexManager.update(ctx, true); } @Test @@ -162,6 +186,17 @@ public class MavenIndexManagerTest { return ctx; } + private ArchivaIndexingContext createTestContextForRemote() throws URISyntaxException, IndexCreationFailedException, IOException { + indexPath = Paths.get("target/repositories/test-repo/.index-test"); + Path repoPath = Paths.get("target/repositories").toAbsolutePath(); + repositoryRemote = new MavenRemoteRepository("test-repo", "Test Repo", repoPath); + repositoryRemote.setLocation(repoPath.resolve("test-repo").toUri()); + RemoteIndexFeature icf = repositoryRemote.getFeature(RemoteIndexFeature.class).get(); + icf.setIndexUri(new URI(".index-test")); + ctx = mavenIndexManager.createContext(repositoryRemote); + return ctx; + } + @Test public void createContext() throws Exception { ArchivaIndexingContext ctx = createTestContext(); diff --git a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/resources/spring-context.xml b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/resources/spring-context.xml index 13ef95f3c..fbf53be07 100644 --- a/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/resources/spring-context.xml +++ b/archiva-modules/archiva-base/archiva-maven2-indexer/src/test/resources/spring-context.xml @@ -30,6 +30,9 @@ + + + diff --git a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/indexer/ArchivaIndexManager.java b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/indexer/ArchivaIndexManager.java index 5e870d04f..fb34eb2ff 100644 --- a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/indexer/ArchivaIndexManager.java +++ b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/indexer/ArchivaIndexManager.java @@ -43,10 +43,9 @@ public interface ArchivaIndexManager { /** * Updates the index from the remote url. * @param context - * @param remoteUpdateUri * @param fullUpdate */ - void update(ArchivaIndexingContext context, URI remoteUpdateUri, boolean fullUpdate) throws IndexUpdateFailedException; + void update(ArchivaIndexingContext context, boolean fullUpdate) throws IndexUpdateFailedException; /** * Adds a list of artifacts to the index. diff --git a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/indexer/ArchivaIndexingContext.java b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/indexer/ArchivaIndexingContext.java index 7f31b0450..95555a3c3 100644 --- a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/indexer/ArchivaIndexingContext.java +++ b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/indexer/ArchivaIndexingContext.java @@ -83,6 +83,13 @@ public interface ArchivaIndexingContext { */ void close(boolean deleteFiles) throws IOException; + /** + * Closes the context without deleting the files. + * Is identical to close(false) + * @throws IOException + */ + void close() throws IOException; + /** * Removes all entries from the index. After this method finished, * isEmpty() should return true. diff --git a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/indexer/GenericIndexManager.java b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/indexer/GenericIndexManager.java index 02069773f..d0f803416 100644 --- a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/indexer/GenericIndexManager.java +++ b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/indexer/GenericIndexManager.java @@ -40,7 +40,7 @@ public class GenericIndexManager implements ArchivaIndexManager { } @Override - public void update(ArchivaIndexingContext context, URI remoteUpdateUri, boolean fullUpdate) { + public void update(ArchivaIndexingContext context, boolean fullUpdate) { } -- 2.39.5