From 678d0c98ea47b0a2fb866556ad2255f5bb30a01e Mon Sep 17 00:00:00 2001 From: Martin Stockhammer Date: Tue, 6 Jul 2021 20:46:51 +0200 Subject: [PATCH] New test for group handler --- .../archiva/repository/RepositoryHandler.java | 14 +- .../base/group/RepositoryGroupHandler.java | 11 +- .../managed/ManagedRepositoryHandler.java | 4 +- .../group/RepositoryGroupHandlerTest.java | 46 ++++ .../mock/RepositoryProviderMock.java | 21 +- .../src/test/resources/archiva-group.xml | 212 ++++++++++++++++++ .../test/resources/spring-context-group.xml | 57 +++++ 7 files changed, 348 insertions(+), 17 deletions(-) create mode 100644 archiva-modules/archiva-base/archiva-repository-layer/src/test/resources/archiva-group.xml create mode 100644 archiva-modules/archiva-base/archiva-repository-layer/src/test/resources/spring-context-group.xml diff --git a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/RepositoryHandler.java b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/RepositoryHandler.java index efd6c47f5..058fd6543 100644 --- a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/RepositoryHandler.java +++ b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/RepositoryHandler.java @@ -22,7 +22,6 @@ import org.apache.archiva.repository.validation.CheckedResult; import org.apache.archiva.repository.validation.RepositoryChecker; import org.apache.archiva.repository.validation.RepositoryValidator; import org.apache.archiva.repository.validation.ValidationError; -import org.apache.archiva.repository.validation.ValidationResponse; import java.util.Collection; import java.util.List; @@ -57,7 +56,7 @@ public interface RepositoryHandler * Initializes the repository. E.g. starts scheduling and activate additional processes. * @param repository the repository to initialize */ - void initialize( R repository ); + void activateRepository( R repository ); /** * Creates new instances from the archiva configuration. The instances are not registered in the registry. @@ -77,7 +76,7 @@ public interface RepositoryHandler R newInstance( RepositoryType type, String id ) throws RepositoryException; /** - * Creates a new instance and updates the given configuration object. + * Creates a new instance based on the given configuration instance. The instance is not activated and not registered. * * @param repositoryConfiguration the configuration instance * @return a newly created instance @@ -152,10 +151,11 @@ public interface RepositoryHandler void remove( String id, Configuration configuration ) throws RepositoryException; /** - * Returns the repository with the given identifier or null, if it is not registered. + * Returns the repository with the given identifier or null, if no repository is registered + * with the given id. * * @param id the repository id - * @return if the retrieval failed + * @return the repository instance or null */ R get( String id ); @@ -222,12 +222,12 @@ public interface RepositoryHandler boolean has( String id ); /** - * Initializes + * Initializes the handler. This method must be called before using the repository handler. */ void init( ); /** - * Closes the handler + * Closes the handler. After closing, the repository handler instance is not usable anymore. */ void close( ); diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/base/group/RepositoryGroupHandler.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/base/group/RepositoryGroupHandler.java index 560eb722d..40365765c 100644 --- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/base/group/RepositoryGroupHandler.java +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/base/group/RepositoryGroupHandler.java @@ -42,7 +42,6 @@ import org.apache.archiva.repository.storage.StorageAsset; import org.apache.archiva.repository.validation.RepositoryChecker; import org.apache.archiva.repository.validation.RepositoryValidator; import org.apache.archiva.repository.validation.ValidationError; -import org.apache.archiva.repository.validation.ValidationResponse; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -125,7 +124,7 @@ public class RepositoryGroupHandler this.repositoryGroups.putAll( newInstancesFromConfig( ) ); for ( RepositoryGroup group : this.repositoryGroups.values( ) ) { - initialize( group ); + activateRepository( group ); } } @@ -147,7 +146,7 @@ public class RepositoryGroupHandler } @Override - public void initialize( RepositoryGroup repositoryGroup ) + public void activateRepository( RepositoryGroup repositoryGroup ) { StorageAsset indexDirectory = getMergedIndexDirectory( repositoryGroup ); if ( !indexDirectory.exists( ) ) @@ -296,7 +295,7 @@ public class RepositoryGroupHandler configuration.addRepositoryGroup( newCfg ); configurationHandler.save( configuration, ConfigurationHandler.REGISTRY_EVENT_TAG ); setLastState( repositoryGroup, RepositoryState.SAVED ); - initialize( repositoryGroup ); + activateRepository( repositoryGroup ); } finally { @@ -357,7 +356,7 @@ public class RepositoryGroupHandler configurationHandler.save( configuration, ConfigurationHandler.REGISTRY_EVENT_TAG ); updateReferences( currentRepository, repositoryGroupConfiguration ); setLastState( currentRepository, RepositoryState.REFERENCES_SET ); - initialize( currentRepository ); + activateRepository( currentRepository ); this.repositoryGroups.put( id, currentRepository ); setLastState( currentRepository, RepositoryState.REGISTERED ); } @@ -379,7 +378,7 @@ public class RepositoryGroupHandler } updateReferences( oldRepository, oldCfg ); setLastState( oldRepository, RepositoryState.REFERENCES_SET ); - initialize( oldRepository ); + activateRepository( oldRepository ); repositoryGroups.put( id, oldRepository ); setLastState( oldRepository, RepositoryState.REGISTERED ); } else { diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/base/managed/ManagedRepositoryHandler.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/base/managed/ManagedRepositoryHandler.java index c7b10c6e5..6cfb228ec 100644 --- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/base/managed/ManagedRepositoryHandler.java +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/base/managed/ManagedRepositoryHandler.java @@ -77,13 +77,13 @@ implements RepositoryHandler this.managedRepositories.putAll( newInstancesFromConfig( ) ); for ( ManagedRepository managedRepository : this.managedRepositories.values( ) ) { - initialize( managedRepository ); + activateRepository( managedRepository ); } } @Override - public void initialize( ManagedRepository repository ) + public void activateRepository( ManagedRepository repository ) { } diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/base/group/RepositoryGroupHandlerTest.java b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/base/group/RepositoryGroupHandlerTest.java index 0043ee006..09c1c1d8b 100644 --- a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/base/group/RepositoryGroupHandlerTest.java +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/base/group/RepositoryGroupHandlerTest.java @@ -18,20 +18,66 @@ package org.apache.archiva.repository.base.group; * under the License. */ +import org.apache.archiva.configuration.ArchivaConfiguration; +import org.apache.archiva.indexer.merger.MergedRemoteIndexesScheduler; +import org.apache.archiva.repository.Repository; +import org.apache.archiva.repository.RepositoryRegistry; +import org.apache.archiva.repository.base.ArchivaRepositoryRegistry; +import org.apache.archiva.repository.base.ConfigurationHandler; +import org.apache.archiva.repository.validation.RepositoryValidator; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import javax.inject.Inject; +import javax.inject.Named; + +import java.util.List; import static org.junit.jupiter.api.Assertions.*; /** * @author Martin Stockhammer */ +@ExtendWith( SpringExtension.class) +@ContextConfiguration(locations = { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context-group.xml" }) class RepositoryGroupHandlerTest { + @Inject + @Named("repositoryRegistry") + ArchivaRepositoryRegistry repositoryRegistry; + + @Inject + ConfigurationHandler configurationHandler; + + @Inject + @Named( "mergedRemoteIndexesScheduler#default" ) + MergedRemoteIndexesScheduler mergedRemoteIndexesScheduler; + + @Inject + List> repositoryValidatorList; + + @Inject + ArchivaConfiguration archivaConfiguration; + + + private RepositoryGroupHandler createHandler() { + RepositoryGroupHandler groupHandler = new RepositoryGroupHandler( repositoryRegistry, configurationHandler, mergedRemoteIndexesScheduler, repositoryValidatorList ); + groupHandler.init(); + return groupHandler; + } @Test void initializeFromConfig( ) { + RepositoryGroupHandler groupHandler = createHandler( ); + assertNotNull( groupHandler ); + groupHandler.initializeFromConfig(); + assertEquals( 1, groupHandler.getAll( ).size( ) ); + assertNotNull( groupHandler.get( "test-group-01" ).getRepositories( ) ); + assertEquals( "internal", groupHandler.get( "test-group-01" ).getRepositories( ).get( 0 ).getId() ); } @Test diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java index c98ba066b..5a4c9f5ae 100644 --- a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/RepositoryProviderMock.java @@ -25,6 +25,7 @@ import org.apache.archiva.configuration.RepositoryGroupConfiguration; import org.apache.archiva.event.EventHandler; import org.apache.archiva.repository.*; import org.apache.archiva.event.Event; +import org.apache.archiva.repository.base.group.BasicRepositoryGroup; import org.apache.archiva.repository.event.RepositoryEvent; import org.apache.archiva.repository.features.ArtifactCleanupFeature; import org.apache.archiva.repository.features.IndexCreationFeature; @@ -81,7 +82,15 @@ public class RepositoryProviderMock implements RepositoryProvider @Override public EditableRepositoryGroup createRepositoryGroup(String id, String name) { - return null; + try + { + return BasicRepositoryGroup.newFilesystemInstance( id, name, Paths.get( "target/groups" ) ); + } + catch ( IOException e ) + { + throw new RuntimeException( ); + } + } @Override @@ -195,7 +204,15 @@ public class RepositoryProviderMock implements RepositoryProvider @Override public RepositoryGroup createRepositoryGroup(RepositoryGroupConfiguration configuration) throws RepositoryException { - return null; + EditableRepositoryGroup group = createRepositoryGroup( configuration.getId( ), configuration.getName( ) ); + updateGroupInstance( group, configuration ); + return group; + } + + private void updateGroupInstance( EditableRepositoryGroup group, RepositoryGroupConfiguration configuration ) + { + group.setMergedIndexTTL( configuration.getMergedIndexTtl() ); + group.setSchedulingDefinition( configuration.getCronExpression() ); } @Override diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/resources/archiva-group.xml b/archiva-modules/archiva-base/archiva-repository-layer/src/test/resources/archiva-group.xml new file mode 100644 index 000000000..693d10685 --- /dev/null +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/resources/archiva-group.xml @@ -0,0 +1,212 @@ + + + + 3.0.0 + + + internal + Archiva Managed Internal Repository + This is internal repository. + ${appserver.base}/repositories/internal + ${appserver.base}/repositories/internal/.indexer + default + true + false + true + true + 0 0 * * * ? + 30 + + + staging + Repository with staging + This is repository with staging. + ${appserver.base}/repositories/internal + ${appserver.base}/repositories/internal/.indexer + default + true + false + true + true + 0 0 * * * ? + 30 + true + + + snapshots + Archiva Managed Snapshot Repository + ${appserver.base}/repositories/snapshots + ${appserver.base}/repositories/snapshots/.indexer + default + false + true + false + true + 0 0\,30 * * * ? + 30 + + + + + central + Central Repository + https://repo.maven.apache.org/maven2 + default + 35 + + + + + test-group-01 + Test Group 01 + MAVEN + + internal + + + + + + + internal + central + + + disabled + once + fix + cached + + + **/* + + + + + + + jaxen/jars/jaxen-1.0-FCS-full.jar + jaxen:jaxen:1.0-FCS:full:jar + + + + + + + artifacts + + **/*.pom + **/*.jar + **/*.ear + **/*.war + **/*.car + **/*.sar + **/*.mar + **/*.rar + **/*.dtd + **/*.tld + **/*.tar.gz + **/*.tar.bz2 + **/*.zip + + + + indexable-content + + **/*.txt + **/*.TXT + **/*.block + **/*.config + **/*.pom + **/*.xml + **/*.xsd + **/*.dtd + **/*.tld + + + + auto-remove + + **/*.bak + **/*~ + **/*- + + + + ignored + + **/.htaccess + **/KEYS + **/*.rb + **/*.sh + **/.svn/** + **/.DAV/** + .index/** + .indexer/** + + + + + create-missing-checksums + validate-checksum + validate-signature + index-content + auto-remove + auto-rename + metadata-updater + create-archiva-metadata + duplicate-artifacts + + + + update-db-bad-content + + + + + + true + true + + + + + + jpa + + + cached + + + + + + + http://download.oracle.com/maven + com/sleepycat/je/license.txt + + + https://download.oracle.com/maven + com/sleepycat/je/license.txt + + + + + diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/resources/spring-context-group.xml b/archiva-modules/archiva-base/archiva-repository-layer/src/test/resources/spring-context-group.xml new file mode 100644 index 000000000..ccf621180 --- /dev/null +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/resources/spring-context-group.xml @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + + + \ No newline at end of file -- 2.39.5