From 118604a706f1fd66bcda450c1ac8370eff60e4cf Mon Sep 17 00:00:00 2001 From: Martin Stockhammer Date: Fri, 16 Aug 2019 22:36:09 +0200 Subject: [PATCH] Fixing unit tests --- .../archiva/configuration/FileTypes.java | 5 + .../src/main/java/SimpleArtifactConsumer.java | 13 +- .../repository/RepositoryPurgeConsumer.java | 11 +- .../AbstractRepositoryPurgeTest.java | 15 +- ...pReleasedSnapshotsRepositoryPurgeTest.java | 27 ++- .../DaysOldRepositoryPurgeTest.java | 42 ++++- .../RepositoryPurgeConsumerTest.java | 69 +++++--- .../RetentionCountRepositoryPurgeTest.java | 23 ++- .../DefaultManagedRepositoryAdmin.java | 35 ++-- ...ArchivaRepositoryScanningTaskExecutor.java | 4 +- ...DefaultRepositoryArchivaTaskScheduler.java | 2 +- ...ositoryScanningTaskExecutorPhase2Test.java | 12 +- .../TestRepositoryStatisticsManager.java | 11 +- .../rest/services/DefaultBrowseService.java | 15 +- .../DefaultManagedRepositoriesService.java | 2 +- .../DefaultReportRepositoriesService.java | 4 +- .../services/AbstractArchivaRestTest.java | 54 ++++++ .../rest/services/BrowseServiceTest.java | 36 ++-- .../NewArtifactsRssFeedProcessor.java | 19 +- ...NewVersionsOfArtifactRssFeedProcessor.java | 28 ++- .../rss/processor/RssFeedProcessor.java | 3 +- .../NewArtifactsRssFeedProcessorTest.java | 28 ++- ...ersionsOfArtifactRssFeedProcessorTest.java | 46 ++++- .../archiva/web/rss/RssFeedServlet.java | 15 +- .../archiva/web/rss/RssFeedServletTest.java | 11 ++ .../AbstractMetadataRepositoryTest.java | 4 +- .../model/RepositoryStatisticsManager.java | 11 +- .../archiva/audit/DefaultAuditManager.java | 10 ++ .../archiva/audit/AuditManagerTest.java | 102 +++++++---- .../CassandraMetadataRepositoryTest.java | 22 ++- .../file/FileMetadataRepositoryTest.java | 2 +- .../repository/jcr/JcrMetadataRepository.java | 2 +- .../consumers/DuplicateArtifactsConsumer.java | 10 ++ .../DuplicateArtifactsConsumerTest.java | 35 ++-- .../DefaultRepositoryStatisticsManager.java | 29 ++- .../RepositoryStatisticsManagerTest.java | 167 +++++++++++++----- .../plugins/stage-repository-merge/pom.xml | 4 - .../merge/Maven2RepositoryMerger.java | 8 + .../configuration/StubConfiguration.java | 8 +- .../merge/Maven2RepositoryMergerTest.java | 37 +++- .../src/test/resources/spring-context.xml | 4 + 41 files changed, 712 insertions(+), 273 deletions(-) diff --git a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/FileTypes.java b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/FileTypes.java index c5d8931ee..1b263edb9 100644 --- a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/FileTypes.java +++ b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/FileTypes.java @@ -62,6 +62,11 @@ public class FileTypes @Named(value = "archivaConfiguration#default") private ArchivaConfiguration archivaConfiguration; + + public FileTypes() { + + } + /** * Map of default values for the file types. */ diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/main/java/SimpleArtifactConsumer.java b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/main/java/SimpleArtifactConsumer.java index 5c5f45f21..c8bd82371 100644 --- a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/main/java/SimpleArtifactConsumer.java +++ b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-archetype/src/main/resources/archetype-resources/src/main/java/SimpleArtifactConsumer.java @@ -25,6 +25,7 @@ import org.apache.archiva.consumers.AbstractMonitoredConsumer; import org.apache.archiva.consumers.ConsumerException; import org.apache.archiva.consumers.KnownRepositoryContentConsumer; import org.apache.archiva.metadata.repository.MetadataResolutionException; +import org.apache.archiva.metadata.repository.MetadataRepositoryException; import org.apache.archiva.metadata.repository.RepositorySession; import org.apache.archiva.metadata.repository.RepositorySessionFactory; import org.apache.archiva.model.ArtifactReference; @@ -100,7 +101,13 @@ public class SimpleArtifactConsumer this.repository = repository; log.info( "Beginning scan of repository [{}]", this.repository.getId() ); - repositorySession = repositorySessionFactory.createSession(); + try + { + repositorySession = repositorySessionFactory.createSession( ); + } catch (MetadataRepositoryException e) { + log.error("Could not create repository session {}", e.getMessage()); + throw new ConsumerException( "Could not create repository session: " + e.getMessage( ), e ); + } } public void processFile( String path ) @@ -119,10 +126,10 @@ public class SimpleArtifactConsumer ManagedRepositoryContent repositoryContent = repository.getContent(); ArtifactReference artifact = repositoryContent.toArtifactReference( path ); - repositorySession.getRepository().getArtifacts( repository.getId(), artifact.getGroupId(), + repositorySession.getRepository().getArtifacts( repositorySession, repository.getId(), artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion() ); } - catch ( LayoutException | MetadataResolutionException e ) + catch ( LayoutException | MetadataResolutionException e ) { throw new ConsumerException( e.getLocalizedMessage(), e ); } diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumer.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumer.java index 6c153f215..536e1fd46 100644 --- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumer.java +++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumer.java @@ -143,7 +143,7 @@ public class RepositoryPurgeConsumer } catch ( org.apache.archiva.metadata.repository.MetadataRepositoryException e ) { - e.printStackTrace( ); + throw new ConsumerException( "Could not create session: " + e.getMessage( ), e ); } if (repository.supportsFeature( ArtifactCleanupFeature.class )) @@ -332,13 +332,4 @@ public class RepositoryPurgeConsumer this.repositorySessionFactory = repositorySessionFactory; } - public RepositorySession getRepositorySession( ) - { - return repositorySession; - } - - public void setRepositorySession( RepositorySession repositorySession ) - { - this.repositorySession = repositorySession; - } } diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurgeTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurgeTest.java index 613ec3054..8f6172bf5 100644 --- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurgeTest.java +++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurgeTest.java @@ -22,6 +22,7 @@ package org.apache.archiva.consumers.core.repository; import org.apache.archiva.metadata.model.ArtifactMetadata; import org.apache.archiva.metadata.repository.MetadataRepository; import org.apache.archiva.metadata.repository.RepositorySession; +import org.apache.archiva.metadata.repository.RepositorySessionFactory; import org.apache.archiva.metadata.repository.storage.maven2.Maven2RepositoryPathTranslator; import org.apache.archiva.repository.BasicManagedRepository; import org.apache.archiva.repository.ManagedRepositoryContent; @@ -101,8 +102,12 @@ public abstract class AbstractRepositoryPurgeTest protected RepositoryListener listener; + protected IMocksControl sessionControl; protected RepositorySession repositorySession; + protected IMocksControl sessionFactoryControl; + protected RepositorySessionFactory sessionFactory; + protected MetadataRepository metadataRepository; @Inject @@ -118,10 +123,14 @@ public abstract class AbstractRepositoryPurgeTest listener = listenerControl.createMock( RepositoryListener.class ); - repositorySession = mock( RepositorySession.class ); - metadataRepository = mock( MetadataRepository.class ); - when( repositorySession.getRepository() ).thenReturn( metadataRepository ); + sessionControl = EasyMock.createControl(); + sessionFactoryControl = EasyMock.createControl( ); + repositorySession = sessionControl.createMock( RepositorySession.class ); + metadataRepository = mock( MetadataRepository.class ); + sessionFactory = sessionFactoryControl.createMock( RepositorySessionFactory.class ); + EasyMock.expect( repositorySession.getRepository() ).andStubReturn( metadataRepository ); + EasyMock.expect( sessionFactory.createSession( ) ).andStubReturn( repositorySession ); } diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java index fdd86cb94..9d44b28b7 100644 --- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java +++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java @@ -91,6 +91,15 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest listener = listenerControl.createMock( RepositoryListener.class ); List listeners = Collections.singletonList( listener ); + + sessionControl.reset(); + sessionFactoryControl.reset(); + EasyMock.expect( sessionFactory.createSession( ) ).andStubReturn( repositorySession ); + EasyMock.expect( repositorySession.getRepository()).andStubReturn( metadataRepository ); + repositorySession.save(); + EasyMock.expectLastCall().anyTimes(); + sessionFactoryControl.replay(); + sessionControl.replay(); repoPurge = new CleanupReleasedSnapshotsRepositoryPurge( getRepository(), metadataTools, applicationContext.getBean( RepositoryRegistry.class ), @@ -137,8 +146,8 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest // Verify the metadataRepository invocations // complete snapshot version removal for released - verify(metadataRepository, times(1)).removeProjectVersion(repositorySession , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); - verify(metadataRepository, never()).removeProjectVersion(repositorySession , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq("2.3") ); + verify(metadataRepository, times(1)).removeProjectVersion(eq(repositorySession) , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); + verify(metadataRepository, never()).removeProjectVersion(eq(repositorySession) , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq("2.3") ); // check if the snapshot was removed assertDeleted( projectRoot + "/2.3-SNAPSHOT" ); @@ -260,8 +269,8 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest // Verify the metadataRepository invocations // Complete version removal for cleanup - verify(metadataRepository, times(1)).removeProjectVersion(repositorySession , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); - verify(metadataRepository, never()).removeProjectVersion(repositorySession , eq(RELEASES_TEST_REPO_ID), eq(projectNs), eq(projectName), eq(releaseVersion) ); + verify(metadataRepository, times(1)).removeProjectVersion(eq(repositorySession) , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); + verify(metadataRepository, never()).removeProjectVersion(eq(repositorySession) , eq(RELEASES_TEST_REPO_ID), eq(projectNs), eq(projectName), eq(releaseVersion) ); // check if the snapshot was removed @@ -333,11 +342,11 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest // Verify the metadataRepository invocations // No removal - verify(metadataRepository, never()).removeProjectVersion(repositorySession , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); - verify(metadataRepository, never()).removeProjectVersion(repositorySession , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq("2.0.3-SNAPSHOT") ); - verify(metadataRepository, never()).removeProjectVersion(repositorySession , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq("2.0.4-SNAPSHOT") ); - verify(metadataRepository, never()).removeArtifact(repositorySession , any(ArtifactMetadata.class), any(String.class) ); - verify(metadataRepository, never()).removeArtifact(repositorySession , any(String.class), any(String.class), any(String.class), any(String.class), any( MetadataFacet.class) ); + verify(metadataRepository, never()).removeProjectVersion(eq(repositorySession) , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); + verify(metadataRepository, never()).removeProjectVersion(eq(repositorySession) , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq("2.0.3-SNAPSHOT") ); + verify(metadataRepository, never()).removeProjectVersion(eq(repositorySession) , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq("2.0.4-SNAPSHOT") ); + verify(metadataRepository, never()).removeArtifact(eq(repositorySession) , any(ArtifactMetadata.class), any(String.class) ); + verify(metadataRepository, never()).removeArtifact(eq(repositorySession) , any(String.class), any(String.class), any(String.class), any(String.class), any( MetadataFacet.class) ); diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java index 651e90a3c..848d4eda6 100644 --- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java +++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java @@ -23,6 +23,7 @@ import org.apache.archiva.metadata.model.ArtifactMetadata; import org.apache.archiva.repository.events.RepositoryListener; import org.apache.archiva.repository.features.ArtifactCleanupFeature; import org.apache.commons.lang.time.DateUtils; +import org.easymock.EasyMock; import org.junit.After; import org.junit.Test; import org.mockito.ArgumentCaptor; @@ -75,6 +76,17 @@ public class DaysOldRepositoryPurgeTest { org.apache.archiva.repository.ManagedRepository repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ); ArtifactCleanupFeature atf = repoConfiguration.getFeature( ArtifactCleanupFeature.class ).get(); + + + sessionControl.reset(); + sessionFactoryControl.reset(); + EasyMock.expect( sessionFactory.createSession( ) ).andStubReturn( repositorySession ); + EasyMock.expect( repositorySession.getRepository()).andStubReturn( metadataRepository ); + repositorySession.save(); + EasyMock.expectLastCall().anyTimes(); + sessionFactoryControl.replay(); + sessionControl.replay(); + repoPurge = new DaysOldRepositoryPurge( getRepository(), atf.getRetentionPeriod().getDays(), atf.getRetentionCount(), repositorySession, Collections.singletonList( listener ) ); @@ -120,9 +132,9 @@ public class DaysOldRepositoryPurgeTest listenerControl.verify(); // Verify the metadataRepository invocations - verify(metadataRepository, never()).removeProjectVersion(repositorySession , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); + verify(metadataRepository, never()).removeProjectVersion(eq(repositorySession) , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); ArgumentCaptor metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class); - verify(metadataRepository, times(2)).removeArtifact(repositorySession , metadataArg.capture(), eq(projectVersion) ); + verify(metadataRepository, times(2)).removeArtifact(eq(repositorySession) , metadataArg.capture(), eq(projectVersion) ); List metaL = metadataArg.getAllValues(); for (ArtifactMetadata meta : metaL) { assertTrue(meta.getId().startsWith(projectName)); @@ -167,6 +179,15 @@ public class DaysOldRepositoryPurgeTest org.apache.archiva.repository.ManagedRepository repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ); ArtifactCleanupFeature atf = repoConfiguration.getFeature( ArtifactCleanupFeature.class ).get(); List listeners = Collections.singletonList( listener ); + + sessionControl.reset(); + sessionFactoryControl.reset(); + EasyMock.expect( sessionFactory.createSession( ) ).andStubReturn( repositorySession ); + EasyMock.expect( repositorySession.getRepository()).andStubReturn( metadataRepository ); + repositorySession.save(); + EasyMock.expectLastCall().anyTimes(); + sessionFactoryControl.replay(); + sessionControl.replay(); repoPurge = new DaysOldRepositoryPurge( getRepository(), atf.getRetentionPeriod().getDays(), atf.getRetentionCount(), repositorySession, listeners ); @@ -206,9 +227,9 @@ public class DaysOldRepositoryPurgeTest listenerControl.verify(); // Verify the metadataRepository invocations - verify(metadataRepository, never()).removeProjectVersion(repositorySession , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); + verify(metadataRepository, never()).removeProjectVersion(eq(repositorySession) , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); ArgumentCaptor metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class); - verify(metadataRepository, times(deletedVersions.size())).removeArtifact(repositorySession , metadataArg.capture(), eq(projectVersion) ); + verify(metadataRepository, times(deletedVersions.size())).removeArtifact(eq(repositorySession) , metadataArg.capture(), eq(projectVersion) ); List metaL = metadataArg.getAllValues(); for (ArtifactMetadata meta : metaL) { assertTrue(meta.getId().startsWith(projectName)); @@ -246,6 +267,15 @@ public class DaysOldRepositoryPurgeTest org.apache.archiva.repository.ManagedRepository repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ); ArtifactCleanupFeature atf = repoConfiguration.getFeature( ArtifactCleanupFeature.class ).get(); List listeners = Collections.singletonList( listener ); + + sessionControl.reset(); + sessionFactoryControl.reset(); + EasyMock.expect( sessionFactory.createSession( ) ).andStubReturn( repositorySession ); + EasyMock.expect( repositorySession.getRepository()).andStubReturn( metadataRepository ); + repositorySession.save(); + EasyMock.expectLastCall().anyTimes(); + sessionFactoryControl.replay(); + sessionControl.replay(); repoPurge = new DaysOldRepositoryPurge( getRepository(), atf.getRetentionPeriod().getDays(), atf.getRetentionCount(), repositorySession, listeners ); @@ -305,9 +335,9 @@ public class DaysOldRepositoryPurgeTest listenerControl.verify(); // Verify the metadataRepository invocations - verify(metadataRepository, never()).removeProjectVersion(repositorySession , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); + verify(metadataRepository, never()).removeProjectVersion(eq(repositorySession) , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); ArgumentCaptor metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class); - verify(metadataRepository, times(deletedVersions.size())).removeArtifact( repositorySession, metadataArg.capture(), eq(projectVersion) ); + verify(metadataRepository, times(deletedVersions.size())).removeArtifact( eq(repositorySession), metadataArg.capture(), eq(projectVersion) ); List metaL = metadataArg.getAllValues(); for (ArtifactMetadata meta : metaL) { assertTrue(meta.getId().startsWith(projectName)); diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.java index d6f634fd9..318144563 100644 --- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.java +++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.java @@ -31,6 +31,7 @@ import org.apache.archiva.mock.MockRepositorySessionFactory; import org.apache.archiva.repository.RepositoryRegistry; import org.apache.archiva.repository.features.ArtifactCleanupFeature; import org.custommonkey.xmlunit.XMLAssert; +import org.easymock.EasyMock; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -71,8 +72,6 @@ public class RepositoryPurgeConsumerTest { super.setUp(); - MockRepositorySessionFactory factory = applicationContext.getBean( MockRepositorySessionFactory.class ); - factory.setRepository( metadataRepository ); } @After @@ -163,16 +162,25 @@ public class RepositoryPurgeConsumerTest public void testConsumerByRetentionCount() throws Exception { - KnownRepositoryContentConsumer repoPurgeConsumer = + RepositoryPurgeConsumer repoPurgeConsumer = applicationContext.getBean( "knownRepositoryContentConsumer#repo-purge-consumer-by-retention-count", - KnownRepositoryContentConsumer.class ); - + RepositoryPurgeConsumer.class ); + repoPurgeConsumer.setRepositorySessionFactory( sessionFactory ); org.apache.archiva.repository.ManagedRepository repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ); ArtifactCleanupFeature atf = repoConfiguration.getFeature( ArtifactCleanupFeature.class ).get(); atf.setRetentionPeriod( Period.ofDays( 0 ) ); // force days older off to allow retention count purge to execute. atf.setRetentionCount( TEST_RETENTION_COUNT ); addRepoToConfiguration( "retention-count", repoConfiguration ); + sessionControl.reset(); + sessionFactoryControl.reset(); + EasyMock.expect( sessionFactory.createSession( ) ).andStubReturn( repositorySession ); + EasyMock.expect( repositorySession.getRepository()).andStubReturn( metadataRepository ); + repositorySession.save(); + EasyMock.expectLastCall().anyTimes(); + sessionFactoryControl.replay(); + sessionControl.replay(); + repoPurgeConsumer.beginScan( repoConfiguration, null ); String repoRoot = prepareTestRepos(); @@ -188,6 +196,9 @@ public class RepositoryPurgeConsumerTest // Provide the metadata list List ml = getArtifactMetadataFromDir( TEST_REPO_ID, projectName, repo, vDir ); + + + when(metadataRepository.getArtifacts( repositorySession, TEST_REPO_ID, projectNs, projectName, projectVersion )).thenReturn(ml); Set deletedVersions = new HashSet<>(); @@ -197,9 +208,9 @@ public class RepositoryPurgeConsumerTest repoPurgeConsumer.processFile( PATH_TO_BY_RETENTION_COUNT_ARTIFACT ); // Verify the metadataRepository invocations - verify(metadataRepository, never()).removeProjectVersion( repositorySession, eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); + verify(metadataRepository, never()).removeProjectVersion( eq(repositorySession), eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); ArgumentCaptor metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class); - verify(metadataRepository, times(2)).removeArtifact( repositorySession, metadataArg.capture(), eq(projectVersion) ); + verify(metadataRepository, times(2)).removeArtifact( eq(repositorySession), metadataArg.capture(), eq(projectVersion) ); List metaL = metadataArg.getAllValues(); for (ArtifactMetadata meta : metaL) { assertTrue(meta.getId().startsWith(projectName)); @@ -265,15 +276,25 @@ public class RepositoryPurgeConsumerTest public void testConsumerByDaysOld() throws Exception { - KnownRepositoryContentConsumer repoPurgeConsumer = + RepositoryPurgeConsumer repoPurgeConsumer = applicationContext.getBean( "knownRepositoryContentConsumer#repo-purge-consumer-by-days-old", - KnownRepositoryContentConsumer.class ); + RepositoryPurgeConsumer.class ); + + repoPurgeConsumer.setRepositorySessionFactory( sessionFactory ); org.apache.archiva.repository.ManagedRepository repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ); ArtifactCleanupFeature atf = repoConfiguration.getFeature( ArtifactCleanupFeature.class ).get(); atf.setRetentionPeriod( Period.ofDays( TEST_DAYS_OLDER ) ); addRepoToConfiguration( "days-old", repoConfiguration ); + sessionControl.reset(); + sessionFactoryControl.reset(); + EasyMock.expect( sessionFactory.createSession( ) ).andStubReturn( repositorySession ); + EasyMock.expect( repositorySession.getRepository()).andStubReturn( metadataRepository ); + repositorySession.save(); + EasyMock.expectLastCall().anyTimes(); + sessionFactoryControl.replay(); + sessionControl.replay(); repoPurgeConsumer.beginScan( repoConfiguration, null ); String repoRoot = prepareTestRepos(); @@ -300,10 +321,11 @@ public class RepositoryPurgeConsumerTest repoPurgeConsumer.processFile( PATH_TO_BY_DAYS_OLD_ARTIFACT ); // Verify the metadataRepository invocations - verify(metadataRepository, never()).removeProjectVersion( repositorySession, eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); + verify(metadataRepository, never()).removeProjectVersion( eq(repositorySession), eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); ArgumentCaptor metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class); - verify(metadataRepository, times(2)).removeArtifact( repositorySession, metadataArg.capture(), eq(projectVersion) ); + verify(metadataRepository, times(2)).removeArtifact( eq(repositorySession), metadataArg.capture(), eq(projectVersion) ); List metaL = metadataArg.getAllValues(); + assertTrue( metaL.size( ) > 0 ); for (ArtifactMetadata meta : metaL) { assertTrue(meta.getId().startsWith(projectName)); assertTrue(deletedVersions.contains(meta.getVersion())); @@ -379,10 +401,10 @@ public class RepositoryPurgeConsumerTest repoPurgeConsumer.processFile( CleanupReleasedSnapshotsRepositoryPurgeTest.PATH_TO_RELEASED_SNAPSHOT_IN_SAME_REPO ); - verify(metadataRepository, never()).removeProjectVersion( repositorySession, eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); + verify(metadataRepository, never()).removeProjectVersion( eq(repositorySession), eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); ArgumentCaptor metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class); - verify(metadataRepository, never()).removeArtifact( repositorySession, any(), any() ); - verify(metadataRepository, never()).removeArtifact( repositorySession, any(), any(), any(), any(), any(MetadataFacet.class) ); + verify(metadataRepository, never()).removeArtifact( eq(repositorySession), any(), any() ); + verify(metadataRepository, never()).removeArtifact( eq(repositorySession), any(), any(), any(), any(), any(MetadataFacet.class) ); // check if the snapshot wasn't removed @@ -413,16 +435,23 @@ public class RepositoryPurgeConsumerTest public void testReleasedSnapshotsWereCleaned() throws Exception { - KnownRepositoryContentConsumer repoPurgeConsumer = + RepositoryPurgeConsumer repoPurgeConsumer = applicationContext.getBean( "knownRepositoryContentConsumer#repo-purge-consumer-by-days-old", - KnownRepositoryContentConsumer.class ); - + RepositoryPurgeConsumer.class ); + repoPurgeConsumer.setRepositorySessionFactory( sessionFactory ); org.apache.archiva.repository.ManagedRepository repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ); ArtifactCleanupFeature acf = repoConfiguration.getFeature( ArtifactCleanupFeature.class ).get(); acf.setDeleteReleasedSnapshots( true ); addRepoToConfiguration( "days-old", repoConfiguration ); - + sessionControl.reset(); + sessionFactoryControl.reset(); + EasyMock.expect( sessionFactory.createSession( ) ).andStubReturn( repositorySession ); + EasyMock.expect( repositorySession.getRepository()).andStubReturn( metadataRepository ); + repositorySession.save(); + EasyMock.expectLastCall().anyTimes(); + sessionFactoryControl.replay(); + sessionControl.replay(); repoPurgeConsumer.beginScan( repoConfiguration, null ); String repoRoot = prepareTestRepos(); @@ -442,9 +471,9 @@ public class RepositoryPurgeConsumerTest repoPurgeConsumer.processFile( CleanupReleasedSnapshotsRepositoryPurgeTest.PATH_TO_RELEASED_SNAPSHOT_IN_SAME_REPO ); - verify(metadataRepository, times(1)).removeProjectVersion( repositorySession, eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); + verify(metadataRepository, times(1)).removeProjectVersion( eq(repositorySession), eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); ArgumentCaptor metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class); - verify(metadataRepository, never()).removeArtifact( repositorySession, any(), any() ); + verify(metadataRepository, never()).removeArtifact( eq(repositorySession), any(), any() ); // check if the snapshot was removed assertDeleted( projectRoot + "/2.3-SNAPSHOT" ); diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.java index ba16bc3d8..e8ffc78b3 100644 --- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.java +++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.java @@ -22,6 +22,7 @@ package org.apache.archiva.consumers.core.repository; import org.apache.archiva.metadata.model.ArtifactMetadata; import org.apache.archiva.repository.events.RepositoryListener; import org.apache.archiva.repository.features.ArtifactCleanupFeature; +import org.easymock.EasyMock; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -53,6 +54,16 @@ public class RetentionCountRepositoryPurgeTest org.apache.archiva.repository.ManagedRepository repoConfiguration = getRepoConfiguration( TEST_REPO_ID, TEST_REPO_NAME ); List listeners = Collections.singletonList( listener ); ArtifactCleanupFeature acf = repoConfiguration.getFeature( ArtifactCleanupFeature.class ).get(); + + sessionControl.reset(); + sessionFactoryControl.reset(); + EasyMock.expect( sessionFactory.createSession( ) ).andStubReturn( repositorySession ); + EasyMock.expect( repositorySession.getRepository()).andStubReturn( metadataRepository ); + repositorySession.save(); + EasyMock.expectLastCall().anyTimes(); + sessionFactoryControl.replay(); + sessionControl.replay(); + repoPurge = new RetentionCountRepositoryPurge( getRepository(), acf.getRetentionCount(), repositorySession, listeners ); } @@ -124,9 +135,9 @@ public class RetentionCountRepositoryPurgeTest listenerControl.verify(); // Verify the metadataRepository invocations - verify(metadataRepository, never()).removeProjectVersion( repositorySession, eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); + verify(metadataRepository, never()).removeProjectVersion( eq(repositorySession), eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); ArgumentCaptor metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class); - verify(metadataRepository, times(deletedVersions.size())).removeArtifact( repositorySession, metadataArg.capture(), eq(projectVersion) ); + verify(metadataRepository, times(deletedVersions.size())).removeArtifact( eq(repositorySession), metadataArg.capture(), eq(projectVersion) ); List metaL = metadataArg.getAllValues(); for (ArtifactMetadata meta : metaL) { assertTrue(meta.getId().startsWith(projectName)); @@ -210,9 +221,9 @@ public class RetentionCountRepositoryPurgeTest listenerControl.verify(); // Verify the metadataRepository invocations - verify(metadataRepository, never()).removeProjectVersion( repositorySession, eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); + verify(metadataRepository, never()).removeProjectVersion( eq(repositorySession), eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); ArgumentCaptor metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class); - verify(metadataRepository, times(deletedVersions.size())).removeArtifact( repositorySession, metadataArg.capture(), eq(projectVersion) ); + verify(metadataRepository, times(deletedVersions.size())).removeArtifact( eq(repositorySession), metadataArg.capture(), eq(projectVersion) ); List metaL = metadataArg.getAllValues(); for (ArtifactMetadata meta : metaL) { assertTrue(meta.getId().startsWith(projectName)); @@ -298,9 +309,9 @@ public class RetentionCountRepositoryPurgeTest listenerControl.verify(); // Verify the metadataRepository invocations - verify(metadataRepository, never()).removeProjectVersion( repositorySession, eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); + verify(metadataRepository, never()).removeProjectVersion( eq(repositorySession), eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) ); ArgumentCaptor metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class); - verify(metadataRepository, times(deletedVersions.size())).removeArtifact( repositorySession, metadataArg.capture(), eq(projectVersion) ); + verify(metadataRepository, times(deletedVersions.size())).removeArtifact( eq(repositorySession), metadataArg.capture(), eq(projectVersion) ); List metaL = metadataArg.getAllValues(); for (ArtifactMetadata meta : metaL) { assertTrue(meta.getId().startsWith(projectName)); diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java index 6d7d8d7c8..94266eb9e 100644 --- a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java +++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java @@ -337,35 +337,38 @@ public class DefaultManagedRepositoryAdmin if ( !stagedOne ) { - RepositorySession repositorySession = null; - try - { - repositorySession = getRepositorySessionFactory().createSession(); - } - catch ( MetadataRepositoryException e ) - { - e.printStackTrace( ); - } - try + boolean success=false; + try(RepositorySession repositorySession = getRepositorySessionFactory().createSession()) { MetadataRepository metadataRepository = repositorySession.getRepository(); metadataRepository.removeRepository(repositorySession , repository.getId() ); //invalidate cache namespacesCache.remove( repository.getId() ); - log.debug( "call repositoryStatisticsManager.deleteStatistics" ); - getRepositoryStatisticsManager().deleteStatistics( metadataRepository, repository.getId() ); repositorySession.save(); + success=true; } catch ( MetadataRepositoryException e ) { //throw new RepositoryAdminException( e.getMessage(), e ); log.warn( "skip error during removing repository from MetadataRepository:{}", e.getMessage(), e ); + success = false; } catch (MetadataSessionException e) { log.warn( "skip error during removing repository from MetadataRepository:{}", e.getMessage(), e ); - } finally + success = false; + } + if (success) { - repositorySession.close(); + log.debug( "call repositoryStatisticsManager.deleteStatistics" ); + try + { + getRepositoryStatisticsManager( ).deleteStatistics( repository.getId( ) ); + } + catch ( MetadataRepositoryException e ) + { + e.printStackTrace( ); + } } + } if ( deleteContent ) @@ -514,8 +517,8 @@ public class DefaultManagedRepositoryAdmin if ( resetStats ) { log.debug( "call repositoryStatisticsManager.deleteStatistics" ); - getRepositoryStatisticsManager().deleteStatistics( repositorySession.getRepository(), - managedRepository.getId() ); + getRepositoryStatisticsManager().deleteStatistics( + managedRepository.getId() ); repositorySession.save(); } diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutor.java b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutor.java index 2c97314ef..bb7690e5e 100644 --- a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutor.java +++ b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutor.java @@ -141,7 +141,7 @@ public class ArchivaRepositoryScanningTaskExecutor if ( !task.isScanAll() ) { RepositoryStatistics previousStats = - repositoryStatisticsManager.getLastStatistics( metadataRepository, repoId ); + repositoryStatisticsManager.getLastStatistics( repoId ); if ( previousStats != null ) { sinceWhen = previousStats.getScanStartTime().getTime(); @@ -166,7 +166,7 @@ public class ArchivaRepositoryScanningTaskExecutor log.info( "Gathering repository statistics" ); - repositoryStatisticsManager.addStatisticsAfterScan( metadataRepository, repoId, + repositoryStatisticsManager.addStatisticsAfterScan( repoId, stats.getWhenGathered(), endTime, stats.getTotalFileCount(), stats.getTotalFileCount() - previousFileCount ); diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/DefaultRepositoryArchivaTaskScheduler.java b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/DefaultRepositoryArchivaTaskScheduler.java index ef9067df5..d87e10a72 100644 --- a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/DefaultRepositoryArchivaTaskScheduler.java +++ b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/DefaultRepositoryArchivaTaskScheduler.java @@ -315,7 +315,7 @@ public class DefaultRepositoryArchivaTaskScheduler { long start = System.currentTimeMillis(); - boolean res = repositoryStatisticsManager.hasStatistics( metadataRepository, repoConfig.getId() ); + boolean res = repositoryStatisticsManager.hasStatistics( repoConfig.getId() ); long end = System.currentTimeMillis(); diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutorPhase2Test.java b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutorPhase2Test.java index 835454370..291d6678e 100644 --- a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutorPhase2Test.java +++ b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutorPhase2Test.java @@ -66,7 +66,7 @@ public class ArchivaRepositoryScanningTaskExecutorPhase2Test // check correctness of new stats RepositoryStatistics newStats = - repositoryStatisticsManager.getLastStatistics( metadataRepository, TEST_REPO_ID ); + repositoryStatisticsManager.getLastStatistics( TEST_REPO_ID ); assertEquals( 0, newStats.getNewFileCount() ); assertEquals( 31, newStats.getTotalFileCount() ); // FIXME: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation @@ -99,7 +99,7 @@ public class ArchivaRepositoryScanningTaskExecutorPhase2Test // check correctness of new stats RepositoryStatistics updatedStats = - repositoryStatisticsManager.getLastStatistics( metadataRepository, TEST_REPO_ID ); + repositoryStatisticsManager.getLastStatistics( TEST_REPO_ID ); assertEquals( 2, updatedStats.getNewFileCount() ); assertEquals( 33, updatedStats.getTotalFileCount() ); // FIXME: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation @@ -146,7 +146,7 @@ public class ArchivaRepositoryScanningTaskExecutorPhase2Test // check correctness of new stats RepositoryStatistics newStats = - repositoryStatisticsManager.getLastStatistics( metadataRepository, TEST_REPO_ID ); + repositoryStatisticsManager.getLastStatistics( TEST_REPO_ID ); assertEquals( 2, newStats.getNewFileCount() ); assertEquals( 33, newStats.getTotalFileCount() ); // FIXME: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation @@ -193,7 +193,7 @@ public class ArchivaRepositoryScanningTaskExecutorPhase2Test // check correctness of new stats RepositoryStatistics newStats = - repositoryStatisticsManager.getLastStatistics( metadataRepository, TEST_REPO_ID ); + repositoryStatisticsManager.getLastStatistics( TEST_REPO_ID ); assertEquals( 2, newStats.getNewFileCount() ); assertEquals( 33, newStats.getTotalFileCount() ); // FIXME: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation @@ -213,7 +213,7 @@ public class ArchivaRepositoryScanningTaskExecutorPhase2Test repoTask.setScanAll( true ); Date date = Calendar.getInstance().getTime(); - repositoryStatisticsManager.addStatisticsAfterScan( metadataRepository, TEST_REPO_ID, // + repositoryStatisticsManager.addStatisticsAfterScan( TEST_REPO_ID, // new Date( date.getTime() - 1234567 ), // date, 8, 8 ); // @@ -239,7 +239,7 @@ public class ArchivaRepositoryScanningTaskExecutorPhase2Test stats.setTotalProjectCount( 5 ); stats.setTotalArtifactFileSize( 38545 ); - repositoryStatisticsManager.addStatisticsAfterScan( metadataRepository, TEST_REPO_ID, // + repositoryStatisticsManager.addStatisticsAfterScan( TEST_REPO_ID, // new Date( date.getTime() - 1234567 ), // date, 31, 31 ); } diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/TestRepositoryStatisticsManager.java b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/TestRepositoryStatisticsManager.java index 7f0512c84..8f1e0c505 100644 --- a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/TestRepositoryStatisticsManager.java +++ b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/TestRepositoryStatisticsManager.java @@ -19,7 +19,6 @@ package org.apache.archiva.scheduler.repository; * under the License. */ -import org.apache.archiva.metadata.repository.MetadataRepository; import org.apache.archiva.metadata.repository.MetadataRepositoryException; import org.apache.archiva.metadata.repository.stats.model.DefaultRepositoryStatistics; import org.apache.archiva.metadata.repository.stats.model.RepositoryStatistics; @@ -39,14 +38,14 @@ public class TestRepositoryStatisticsManager private Map> repoStats = new HashMap<>(); @Override - public boolean hasStatistics( MetadataRepository metadataRepository, String repositoryId ) + public boolean hasStatistics( String repositoryId ) throws MetadataRepositoryException { return !repoStats.isEmpty(); } @Override - public RepositoryStatistics getLastStatistics( MetadataRepository metadataRepository, String repositoryId ) + public RepositoryStatistics getLastStatistics( String repositoryId ) { List repositoryStatisticsList = getStatsList( repositoryId ); return !repositoryStatisticsList.isEmpty() @@ -55,7 +54,7 @@ public class TestRepositoryStatisticsManager } @Override - public void addStatisticsAfterScan( MetadataRepository metadataRepository, String repositoryId, Date startTime, + public void addStatisticsAfterScan( String repositoryId, Date startTime, Date endTime, long totalFiles, long newFiles ) { List stats = getStatsList( repositoryId ); @@ -71,13 +70,13 @@ public class TestRepositoryStatisticsManager } @Override - public void deleteStatistics( MetadataRepository metadataRepository, String repositoryId ) + public void deleteStatistics( String repositoryId ) { repoStats.remove( repositoryId ); } @Override - public List getStatisticsInRange( MetadataRepository metadataRepository, String repositoryId, + public List getStatisticsInRange( String repositoryId, Date startDate, Date endDate ) { throw new UnsupportedOperationException(); diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java index ee606ae3e..adc2c0af0 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java @@ -1110,16 +1110,7 @@ public class DefaultBrowseService public List searchArtifacts( String text, String repositoryId, Boolean exact ) throws ArchivaRestServiceException { - RepositorySession repositorySession = null; - try - { - repositorySession = repositorySessionFactory.createSession(); - } - catch ( MetadataRepositoryException e ) - { - e.printStackTrace( ); - } - try + try(RepositorySession repositorySession = repositorySessionFactory.createSession()) { List artifactMetadatas = repositorySession.getRepository().searchArtifacts(repositorySession , repositoryId, text, exact == null ? false : exact ); @@ -1129,10 +1120,6 @@ public class DefaultBrowseService { throw new ArchivaRestServiceException( e.getMessage(), e ); } - finally - { - repositorySession.close(); - } } @Override diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultManagedRepositoriesService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultManagedRepositoriesService.java index b1e72fe5a..6452409ba 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultManagedRepositoriesService.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultManagedRepositoriesService.java @@ -180,7 +180,7 @@ public class DefaultManagedRepositoriesService RepositoryStatistics stats = null; try { - stats = repositoryStatisticsManager.getLastStatistics( metadataRepository, repositoryId ); + stats = repositoryStatisticsManager.getLastStatistics( repositoryId ); } catch ( MetadataRepositoryException e ) { diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultReportRepositoriesService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultReportRepositoriesService.java index 7e1ebc04b..429c5e203 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultReportRepositoriesService.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultReportRepositoriesService.java @@ -87,7 +87,7 @@ public class DefaultReportRepositoriesService { try { - stats.add( repositoryStatisticsManager.getLastStatistics( metadataRepository, repo ) ); + stats.add( repositoryStatisticsManager.getLastStatistics( repo ) ); } catch ( MetadataRepositoryException e ) { @@ -121,7 +121,7 @@ public class DefaultReportRepositoriesService List stats = null; try { - stats = repositoryStatisticsManager.getStatisticsInRange( metadataRepository, repositoryId, startDate, + stats = repositoryStatisticsManager.getStatisticsInRange( repositoryId, startDate, endDate ); } catch ( MetadataRepositoryException e ) diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java index f13336582..82a8fe720 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/AbstractArchivaRestTest.java @@ -62,6 +62,7 @@ import java.util.Collections; import java.util.Date; import java.util.Locale; import java.util.concurrent.atomic.AtomicReference; +import java.util.function.Function; /** * @author Olivier Lamy @@ -85,7 +86,60 @@ public abstract class AbstractArchivaRestTest return this.reuseServer; } + /* + * Used by tryAssert to allow to throw exceptions in the lambda expression. + */ + @FunctionalInterface + protected interface AssertFunction + { + void accept( ) throws Exception; + } + + protected void tryAssert( AssertFunction func ) throws Exception + { + tryAssert( func, 10, 500 ); + } + /* + * Runs the assert method until the assert is successful or the number of retries + * is reached. This is needed because the JCR Oak index update is asynchronous, so updates + * may not be visible immediately after the modification. + */ + private void tryAssert( AssertFunction func, int retries, int sleepMillis ) throws Exception + { + Throwable t = null; + int retry = retries; + while ( retry-- > 0 ) + { + try + { + func.accept( ); + return; + } + catch ( Exception | AssertionError e ) + { + t = e; + Thread.currentThread( ).sleep( sleepMillis ); + log.warn( "Retrying assert {}: {}", retry, e.getMessage( ) ); + } + } + log.warn( "Retries: {}, Exception: {}", retry, t.getMessage( ) ); + if ( retry <= 0 && t != null ) + { + if ( t instanceof RuntimeException ) + { + throw (RuntimeException) t; + } + else if ( t instanceof Exception ) + { + throw (Exception) t; + } + else if ( t instanceof Error ) + { + throw (Error) t; + } + } + } // START SNIPPET: authz-header // guest with an empty password diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/BrowseServiceTest.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/BrowseServiceTest.java index 448405e7a..f85287214 100644 --- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/BrowseServiceTest.java +++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/test/java/org/apache/archiva/rest/services/BrowseServiceTest.java @@ -334,11 +334,13 @@ public class BrowseServiceTest browseService.addMetadata( "commons-cli", "commons-cli", "1.0", "wine", "bordeaux", TEST_REPO_ID ); - List artifactDownloadInfos = - browseService.getArtifactsByProjectVersionMetadata( "wine", "bordeaux", TEST_REPO_ID ); + tryAssert( ( ) -> { + List artifactDownloadInfos = + browseService.getArtifactsByProjectVersionMetadata( "wine", "bordeaux", TEST_REPO_ID ); - assertThat( artifactDownloadInfos ).isNotNull().isNotEmpty().hasSize( 3 ); - // END SNIPPET: get-artifacts-by-project-version-metadata + assertThat( artifactDownloadInfos ).isNotNull( ).isNotEmpty( ).hasSize( 3 ); + // END SNIPPET: get-artifacts-by-project-version-metadata + } ); } @@ -346,14 +348,24 @@ public class BrowseServiceTest public void getArtifactsByProjectVersionMetadataWithNoRepository() throws Exception { - BrowseService browseService = getBrowseService( authorizationHeader, true ); + final BrowseService browseService = getBrowseService( authorizationHeader, true ); browseService.addMetadata( "commons-cli", "commons-cli", "1.0", "wine", "bordeaux", TEST_REPO_ID ); - List artifactDownloadInfos = - browseService.getArtifactsByProjectVersionMetadata( "wine", "bordeaux", null ); - assertThat( artifactDownloadInfos ).isNotNull().isNotEmpty().hasSize( 3 ); + tryAssert( ( ) -> { + List artifactDownloadInfos = + null; + try + { + artifactDownloadInfos = browseService.getArtifactsByProjectVersionMetadata( "wine", "bordeaux", null ); + } + catch ( ArchivaRestServiceException e ) + { + throw new AssertionError( "ArchivaRestServiceException", e ); + } + assertThat( artifactDownloadInfos ).isNotNull( ).isNotEmpty( ).hasSize( 3 ); + }); } @@ -379,10 +391,12 @@ public class BrowseServiceTest // START SNIPPET: search-artifacts BrowseService browseService = getBrowseService( authorizationHeader, true ); - List artifactDownloadInfos = - browseService.searchArtifacts( "The Apache Software Foundation", TEST_REPO_ID, true ); + tryAssert( ( ) -> { + List artifactDownloadInfos = + browseService.searchArtifacts( "The Apache Software Foundation", TEST_REPO_ID, true ); - assertThat( artifactDownloadInfos ).isNotNull().isNotEmpty().hasSize( 7 ); + assertThat( artifactDownloadInfos ).isNotNull( ).isNotEmpty( ).hasSize( 7 ); + } ); // END SNIPPET: search-artifacts } diff --git a/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessor.java b/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessor.java index 6bac27ec3..ac68bd6f7 100644 --- a/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessor.java +++ b/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessor.java @@ -22,7 +22,6 @@ package org.apache.archiva.rss.processor; import com.sun.syndication.feed.synd.SyndFeed; import com.sun.syndication.io.FeedException; import org.apache.archiva.metadata.model.ArtifactMetadata; -import org.apache.archiva.metadata.repository.MetadataRepository; import org.apache.archiva.metadata.repository.MetadataRepositoryException; import org.apache.archiva.metadata.repository.RepositorySession; import org.apache.archiva.metadata.repository.RepositorySessionFactory; @@ -75,7 +74,7 @@ public class NewArtifactsRssFeedProcessor * new versions of artifact. */ @Override - public SyndFeed process( Map reqParams, MetadataRepository metadataRepository ) + public SyndFeed process( Map reqParams ) throws FeedException { log.debug( "Process new artifacts into rss feeds." ); @@ -83,13 +82,13 @@ public class NewArtifactsRssFeedProcessor String repoId = reqParams.get( RssFeedProcessor.KEY_REPO_ID ); if ( repoId != null ) { - return processNewArtifactsInRepo( repoId, metadataRepository ); + return processNewArtifactsInRepo( repoId ); } return null; } - private SyndFeed processNewArtifactsInRepo( String repoId, MetadataRepository metadataRepository ) + private SyndFeed processNewArtifactsInRepo( String repoId ) throws FeedException { Calendar greaterThanThisDate = Calendar.getInstance( GMT_TIME_ZONE ); @@ -99,7 +98,7 @@ public class NewArtifactsRssFeedProcessor List artifacts; try(RepositorySession session = repositorySessionFactory.createSession()) { - artifacts = metadataRepository.getArtifactsByDateRange(session , repoId, greaterThanThisDate.getTime(), null ); + artifacts = session.getRepository().getArtifactsByDateRange(session , repoId, greaterThanThisDate.getTime(), null ); } catch ( MetadataRepositoryException e ) { @@ -183,4 +182,14 @@ public class NewArtifactsRssFeedProcessor { this.numberOfDaysBeforeNow = numberOfDaysBeforeNow; } + + public RepositorySessionFactory getRepositorySessionFactory( ) + { + return repositorySessionFactory; + } + + public void setRepositorySessionFactory( RepositorySessionFactory repositorySessionFactory ) + { + this.repositorySessionFactory = repositorySessionFactory; + } } diff --git a/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessor.java b/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessor.java index daf186438..aae625c64 100644 --- a/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessor.java +++ b/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessor.java @@ -67,7 +67,7 @@ public class NewVersionsOfArtifactRssFeedProcessor * Process all versions of the artifact which had a rss feed request. */ @Override - public SyndFeed process( Map reqParams, MetadataRepository metadataRepository ) + public SyndFeed process( Map reqParams ) throws FeedException { String groupId = reqParams.get( RssFeedProcessor.KEY_GROUP_ID ); @@ -75,19 +75,19 @@ public class NewVersionsOfArtifactRssFeedProcessor if ( groupId != null && artifactId != null ) { - return processNewVersionsOfArtifact( groupId, artifactId, metadataRepository ); + return processNewVersionsOfArtifact( groupId, artifactId ); } return null; } - private SyndFeed processNewVersionsOfArtifact( String groupId, String artifactId, - MetadataRepository metadataRepository ) + private SyndFeed processNewVersionsOfArtifact( String groupId, String artifactId ) throws FeedException { List artifacts = new ArrayList<>(); try(RepositorySession session = repositorySessionFactory.createSession()) { + final MetadataRepository metadataRepository = session.getRepository( ); for ( Repository repo : repositoryRegistry.getRepositories() ) { final String repoId = repo.getId(); @@ -177,4 +177,24 @@ public class NewVersionsOfArtifactRssFeedProcessor { this.generator = generator; } + + public RepositorySessionFactory getRepositorySessionFactory( ) + { + return repositorySessionFactory; + } + + public void setRepositorySessionFactory( RepositorySessionFactory repositorySessionFactory ) + { + this.repositorySessionFactory = repositorySessionFactory; + } + + public RepositoryRegistry getRepositoryRegistry( ) + { + return repositoryRegistry; + } + + public void setRepositoryRegistry( RepositoryRegistry repositoryRegistry ) + { + this.repositoryRegistry = repositoryRegistry; + } } diff --git a/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/RssFeedProcessor.java b/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/RssFeedProcessor.java index 2fe62d7f1..7bf903af0 100644 --- a/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/RssFeedProcessor.java +++ b/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/RssFeedProcessor.java @@ -21,7 +21,6 @@ package org.apache.archiva.rss.processor; import com.sun.syndication.feed.synd.SyndFeed; import com.sun.syndication.io.FeedException; -import org.apache.archiva.metadata.repository.MetadataRepository; import java.util.Map; @@ -36,6 +35,6 @@ public interface RssFeedProcessor String KEY_ARTIFACT_ID = "artifactId"; - SyndFeed process( Map reqParams, MetadataRepository metadataRepository ) + SyndFeed process( Map reqParams ) throws FeedException; } diff --git a/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessorTest.java b/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessorTest.java index 0706d6491..473d7aaf2 100644 --- a/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessorTest.java +++ b/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessorTest.java @@ -25,8 +25,11 @@ import junit.framework.TestCase; import org.apache.archiva.metadata.model.ArtifactMetadata; import org.apache.archiva.metadata.repository.AbstractMetadataRepository; import org.apache.archiva.metadata.repository.RepositorySession; +import org.apache.archiva.metadata.repository.RepositorySessionFactory; import org.apache.archiva.rss.RssFeedGenerator; import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner; +import org.easymock.EasyMock; +import org.easymock.IMocksControl; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -49,6 +52,12 @@ public class NewArtifactsRssFeedProcessorTest private MetadataRepositoryMock metadataRepository; + private IMocksControl sessionFactoryControl; + private RepositorySessionFactory sessionFactory; + + private IMocksControl sessionControl; + private RepositorySession session; + @Before @Override public void setUp() @@ -60,6 +69,22 @@ public class NewArtifactsRssFeedProcessorTest newArtifactsProcessor.setGenerator( new RssFeedGenerator() ); metadataRepository = new MetadataRepositoryMock(); + + sessionFactoryControl = EasyMock.createControl(); + sessionControl = EasyMock.createControl(); + sessionControl.resetToNice(); + + sessionFactory = sessionFactoryControl.createMock( RepositorySessionFactory.class ); + session = sessionControl.createMock( RepositorySession.class ); + + EasyMock.expect( sessionFactory.createSession() ).andStubReturn( session ); + EasyMock.expect( session.getRepository( ) ).andStubReturn( metadataRepository ); + + sessionFactoryControl.replay(); + sessionControl.replay(); + + newArtifactsProcessor.setRepositorySessionFactory( sessionFactory ); + } @SuppressWarnings ("unchecked") @@ -81,10 +106,11 @@ public class NewArtifactsRssFeedProcessorTest metadataRepository.setArtifactsByDateRange( newArtifacts ); + Map reqParams = new HashMap<>(); reqParams.put( RssFeedProcessor.KEY_REPO_ID, TEST_REPO ); - SyndFeed feed = newArtifactsProcessor.process( reqParams, metadataRepository ); + SyndFeed feed = newArtifactsProcessor.process( reqParams ); // check that the date used in the call is close to the one passed (5 seconds difference at most) Calendar cal = Calendar.getInstance( TimeZone.getTimeZone( "GMT" ) ); diff --git a/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessorTest.java b/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessorTest.java index da0a0dc31..eef6a96ad 100644 --- a/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessorTest.java +++ b/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessorTest.java @@ -22,17 +22,25 @@ package org.apache.archiva.rss.processor; import com.sun.syndication.feed.synd.SyndEntry; import com.sun.syndication.feed.synd.SyndFeed; import junit.framework.TestCase; +import org.apache.archiva.common.filelock.DefaultFileLockManager; import org.apache.archiva.metadata.model.ArtifactMetadata; import org.apache.archiva.metadata.repository.MetadataRepository; import org.apache.archiva.metadata.repository.RepositorySession; import org.apache.archiva.metadata.repository.RepositorySessionFactory; +import org.apache.archiva.repository.BasicManagedRepository; +import org.apache.archiva.repository.Repository; +import org.apache.archiva.repository.RepositoryRegistry; +import org.apache.archiva.repository.storage.FilesystemStorage; import org.apache.archiva.rss.RssFeedGenerator; import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner; +import org.easymock.EasyMock; import org.easymock.IMocksControl; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import java.nio.file.Paths; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Date; @@ -59,8 +67,14 @@ public class NewVersionsOfArtifactRssFeedProcessorTest private MetadataRepository metadataRepository; - private IMocksControl factoryControl; - private RepositorySessionFactory repositorySessionFactory; + private IMocksControl sessionFactoryControl; + private RepositorySessionFactory sessionFactory; + + private IMocksControl sessionControl; + private RepositorySession session; + + private IMocksControl repositoryRegistryControl; + private RepositoryRegistry repositoryRegistry; @Before @@ -76,8 +90,28 @@ public class NewVersionsOfArtifactRssFeedProcessorTest metadataRepositoryControl = createControl(); metadataRepository = metadataRepositoryControl.createMock( MetadataRepository.class ); - factoryControl = createControl(); - repositorySessionFactory = factoryControl.createMock(RepositorySessionFactory.class); + sessionFactoryControl = EasyMock.createControl(); + sessionControl = EasyMock.createControl(); + sessionControl.resetToNice(); + + sessionFactory = sessionFactoryControl.createMock( RepositorySessionFactory.class ); + session = sessionControl.createMock( RepositorySession.class ); + + EasyMock.expect( sessionFactory.createSession() ).andStubReturn( session ); + EasyMock.expect( session.getRepository( ) ).andStubReturn( metadataRepository ); + sessionFactoryControl.replay(); + sessionControl.replay(); + + repositoryRegistryControl = EasyMock.createControl(); + repositoryRegistry = repositoryRegistryControl.createMock( RepositoryRegistry.class ); + + List reg = new ArrayList<>( ); + reg.add( new BasicManagedRepository( TEST_REPO, TEST_REPO, new FilesystemStorage( Paths.get("target/test-storage"), new DefaultFileLockManager() ) ) ); + EasyMock.expect( repositoryRegistry.getRepositories() ).andStubReturn( reg ); + repositoryRegistryControl.replay(); + + newVersionsProcessor.setRepositorySessionFactory( sessionFactory ); + newVersionsProcessor.setRepositoryRegistry( repositoryRegistry ); } @SuppressWarnings("unchecked") @@ -98,7 +132,6 @@ public class NewVersionsOfArtifactRssFeedProcessorTest reqParams.put( RssFeedProcessor.KEY_GROUP_ID, GROUP_ID ); reqParams.put( RssFeedProcessor.KEY_ARTIFACT_ID, ARTIFACT_ID ); - try(RepositorySession session = repositorySessionFactory.createSession()) { expect(metadataRepository.getProjectVersions(session, TEST_REPO, GROUP_ID, ARTIFACT_ID)).andReturn( Arrays.asList("1.0.1", "1.0.2", "1.0.3-SNAPSHOT")); expect(metadataRepository.getArtifacts(session, TEST_REPO, GROUP_ID, ARTIFACT_ID, "1.0.1")).andReturn( @@ -107,10 +140,9 @@ public class NewVersionsOfArtifactRssFeedProcessorTest Collections.singletonList(artifact2)); expect(metadataRepository.getArtifacts(session, TEST_REPO, GROUP_ID, ARTIFACT_ID, "1.0.3-SNAPSHOT")).andReturn( Collections.singletonList(artifact3)); - } metadataRepositoryControl.replay(); - SyndFeed feed = newVersionsProcessor.process( reqParams, metadataRepository ); + SyndFeed feed = newVersionsProcessor.process( reqParams ); assertEquals( "New Versions of Artifact 'org.apache.archiva:artifact-two'", feed.getTitle() ); assertEquals( "New versions of artifact 'org.apache.archiva:artifact-two' found during repository scan.", diff --git a/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/rss/RssFeedServlet.java b/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/rss/RssFeedServlet.java index 0da0c61e5..0288d15a4 100644 --- a/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/rss/RssFeedServlet.java +++ b/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/rss/RssFeedServlet.java @@ -175,15 +175,8 @@ public class RssFeedServlet return; } - RepositorySession repositorySession = repositorySessionFactory.createSession(); - try - { - feed = processor.process( map, repositorySession.getRepository() ); - } - finally - { - repositorySession.close(); - } + feed = processor.process( map ); + if ( feed == null ) { res.sendError( HttpServletResponse.SC_NO_CONTENT, "No information available." ); @@ -242,10 +235,6 @@ public class RssFeedServlet res.sendError( HttpServletResponse.SC_UNAUTHORIZED, USER_NOT_AUTHORIZED ); } - catch ( org.apache.archiva.metadata.repository.MetadataRepositoryException e ) - { - e.printStackTrace( ); - } } /** diff --git a/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/web/rss/RssFeedServletTest.java b/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/web/rss/RssFeedServletTest.java index e20632bb6..bac608e03 100644 --- a/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/web/rss/RssFeedServletTest.java +++ b/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/web/rss/RssFeedServletTest.java @@ -21,7 +21,11 @@ package org.apache.archiva.web.rss; import junit.framework.TestCase; +import org.apache.archiva.common.filelock.DefaultFileLockManager; import org.apache.archiva.configuration.ArchivaConfiguration; +import org.apache.archiva.repository.BasicManagedRepository; +import org.apache.archiva.repository.RepositoryRegistry; +import org.apache.archiva.repository.storage.FilesystemStorage; import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; import org.apache.commons.codec.Encoder; import org.apache.commons.codec.binary.Base64; @@ -54,6 +58,7 @@ import javax.servlet.ServletContext; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.lang.annotation.Annotation; +import java.nio.file.Paths; import java.util.Locale; import java.util.Map; @@ -71,6 +76,9 @@ public class RssFeedServletTest @Inject protected ApplicationContext applicationContext; + @Inject + protected RepositoryRegistry repositoryRegistry; + @BeforeClass public static void initConfigurationPath() throws Exception @@ -110,6 +118,9 @@ public class RssFeedServletTest } }; + repositoryRegistry.reload(); + repositoryRegistry.putRepository( new BasicManagedRepository( "internal", "internal", + new FilesystemStorage( Paths.get( "target/appserver-base/repositories/internal" ), new DefaultFileLockManager( ) ) ) ); rssFeedServlet.init( mockServletConfig ); } diff --git a/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java b/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java index 2d7587902..a5574d635 100644 --- a/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java +++ b/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java @@ -494,8 +494,8 @@ public abstract class AbstractMetadataRepositoryTest assertNull( metadata1.getScm( ) ); assertNull( metadata1.getIssueManagement( ) ); assertNull( metadata1.getOrganization( ) ); - assertEquals( "", metadata1.getDescription( ) ); - assertEquals( "", metadata1.getName( ) ); + assertTrue( metadata1.getDescription( )==null || "".equals(metadata1.getDescription()) ); + assertTrue( metadata1.getName( )==null || "".equals(metadata1.getName()) ); assertEquals( TEST_PROJECT_VERSION, metadata1.getId( ) ); assertEquals( TEST_PROJECT_VERSION, metadata1.getVersion( ) ); assertTrue( metadata1.getMailingLists( ).isEmpty( ) ); diff --git a/archiva-modules/metadata/metadata-statistics-api/src/main/java/org/apache/archiva/metadata/repository/stats/model/RepositoryStatisticsManager.java b/archiva-modules/metadata/metadata-statistics-api/src/main/java/org/apache/archiva/metadata/repository/stats/model/RepositoryStatisticsManager.java index f47e8cc16..4f149ab7c 100644 --- a/archiva-modules/metadata/metadata-statistics-api/src/main/java/org/apache/archiva/metadata/repository/stats/model/RepositoryStatisticsManager.java +++ b/archiva-modules/metadata/metadata-statistics-api/src/main/java/org/apache/archiva/metadata/repository/stats/model/RepositoryStatisticsManager.java @@ -19,7 +19,6 @@ package org.apache.archiva.metadata.repository.stats.model; * under the License. */ -import org.apache.archiva.metadata.repository.MetadataRepository; import org.apache.archiva.metadata.repository.MetadataRepositoryException; import java.util.Date; @@ -33,20 +32,20 @@ import java.util.List; */ public interface RepositoryStatisticsManager { - RepositoryStatistics getLastStatistics( MetadataRepository metadataRepository, String repositoryId ) + RepositoryStatistics getLastStatistics( String repositoryId ) throws MetadataRepositoryException; - boolean hasStatistics( MetadataRepository metadataRepository, String repositoryId ) + boolean hasStatistics( String repositoryId ) throws MetadataRepositoryException; - void addStatisticsAfterScan( MetadataRepository metadataRepository, String repositoryId, Date startTime, + void addStatisticsAfterScan( String repositoryId, Date startTime, Date endTime, long totalFiles, long newFiles ) throws MetadataRepositoryException; - void deleteStatistics( MetadataRepository metadataRepository, String repositoryId ) + void deleteStatistics( String repositoryId ) throws MetadataRepositoryException; - List getStatisticsInRange( MetadataRepository metadataRepository, String repositoryId, + List getStatisticsInRange( String repositoryId, Date startTime, Date endTime ) throws MetadataRepositoryException; } diff --git a/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/DefaultAuditManager.java b/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/DefaultAuditManager.java index 6cf335879..63b7c366a 100644 --- a/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/DefaultAuditManager.java +++ b/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/DefaultAuditManager.java @@ -178,4 +178,14 @@ public class DefaultAuditManager return other.name.compareTo( name ); } } + + public RepositorySessionFactory getRepositorySessionFactory( ) + { + return repositorySessionFactory; + } + + public void setRepositorySessionFactory( RepositorySessionFactory repositorySessionFactory ) + { + this.repositorySessionFactory = repositorySessionFactory; + } } diff --git a/archiva-modules/plugins/audit/src/test/java/org/apache/archiva/audit/AuditManagerTest.java b/archiva-modules/plugins/audit/src/test/java/org/apache/archiva/audit/AuditManagerTest.java index eaf2d8a07..4622b1b3f 100644 --- a/archiva-modules/plugins/audit/src/test/java/org/apache/archiva/audit/AuditManagerTest.java +++ b/archiva-modules/plugins/audit/src/test/java/org/apache/archiva/audit/AuditManagerTest.java @@ -57,6 +57,8 @@ public class AuditManagerTest private RepositorySessionFactory repositorySessionFactory; + private RepositorySession session; + private static final String AUDIT_EVENT_BASE = "2010/01/18/123456."; private static final String TEST_REPO_ID = "test-repo"; @@ -73,6 +75,7 @@ public class AuditManagerTest private static final DecimalFormat MILLIS_FORMAT = new DecimalFormat( "000" ); private IMocksControl factoryControl; + private IMocksControl sessionControl; private static SimpleDateFormat createTimestampFormat() { @@ -96,6 +99,11 @@ public class AuditManagerTest factoryControl = EasyMock.createControl(); repositorySessionFactory = factoryControl.createMock(RepositorySessionFactory.class); + sessionControl = EasyMock.createControl( ); + session = sessionControl.createMock( RepositorySession.class ); + + auditManager.setRepositorySessionFactory( repositorySessionFactory ); + ManagedRepositoryConfiguration repository = new ManagedRepositoryConfiguration(); repository.setId( TEST_REPO_ID ); repository.setLocation( "" ); @@ -113,7 +121,10 @@ public class AuditManagerTest expectedEvents.add( event ); } - try(RepositorySession session = repositorySessionFactory.createSession()) { + sessionControl.reset(); + factoryControl.reset(); + EasyMock.expect( repositorySessionFactory.createSession() ).andStubReturn( session ); + factoryControl.replay(); EasyMock.expect(metadataRepository.getMetadataFacets(session, TEST_REPO_ID, AuditEvent.FACET_ID)).andReturn( getEventNames(expectedEvents)); @@ -122,7 +133,6 @@ public class AuditManagerTest metadataRepository.getMetadataFacet(session, TEST_REPO_ID, AuditEvent.FACET_ID, event.getName())).andReturn( event); } - } metadataRepositoryControl.replay(); List events = @@ -151,7 +161,10 @@ public class AuditManagerTest expectedEvents.add( createEvent( AUDIT_EVENT_BASE + MILLIS_FORMAT.format( i ) ) ); } - try(RepositorySession session = repositorySessionFactory.createSession()) { + sessionControl.reset(); + factoryControl.reset(); + EasyMock.expect( repositorySessionFactory.createSession() ).andStubReturn( session ); + factoryControl.replay(); EasyMock.expect(metadataRepository.getMetadataFacets(session, TEST_REPO_ID, AuditEvent.FACET_ID)).andReturn( getEventNames(expectedEvents)); for (AuditEvent event : expectedEvents) { @@ -159,7 +172,6 @@ public class AuditManagerTest metadataRepository.getMetadataFacet(session, TEST_REPO_ID, AuditEvent.FACET_ID, event.getName())).andReturn( event); } - } metadataRepositoryControl.replay(); List events = @@ -194,8 +206,10 @@ public class AuditManagerTest events.add( event ); eventNames.get( repositoryId ).add( event.getName() ); } - - try(RepositorySession session = repositorySessionFactory.createSession()) { + sessionControl.reset(); + factoryControl.reset(); + EasyMock.expect( repositorySessionFactory.createSession() ).andStubReturn( session ); + factoryControl.replay(); EasyMock.expect(metadataRepository.getMetadataFacets(session, TEST_REPO_ID, AuditEvent.FACET_ID)).andReturn( eventNames.get(TEST_REPO_ID)); EasyMock.expect(metadataRepository.getMetadataFacets(session, TEST_REPO_ID_2, AuditEvent.FACET_ID)).andReturn( @@ -205,7 +219,6 @@ public class AuditManagerTest EasyMock.expect(metadataRepository.getMetadataFacet(session, event.getRepositoryId(), AuditEvent.FACET_ID, event.getName())).andReturn(event); } - } metadataRepositoryControl.replay(); events = @@ -229,11 +242,12 @@ public class AuditManagerTest throws Exception { - - try(RepositorySession session = repositorySessionFactory.createSession()) { + sessionControl.reset(); + factoryControl.reset(); + EasyMock.expect( repositorySessionFactory.createSession() ).andStubReturn( session ); + factoryControl.replay(); EasyMock.expect(metadataRepository.getMetadataFacets(session, TEST_REPO_ID, AuditEvent.FACET_ID)).andReturn( Collections.emptyList()); - } metadataRepositoryControl.replay(); assertTrue( auditManager.getMostRecentAuditEvents( metadataRepository, @@ -249,9 +263,11 @@ public class AuditManagerTest { AuditEvent event = createEvent( new Date() ); - try(RepositorySession session = repositorySessionFactory.createSession()) { + sessionControl.reset(); + factoryControl.reset(); + EasyMock.expect( repositorySessionFactory.createSession() ).andStubReturn( session ); + factoryControl.replay(); metadataRepository.addMetadataFacet(session, TEST_REPO_ID, event); - } metadataRepositoryControl.replay(); @@ -281,9 +297,13 @@ public class AuditManagerTest throws Exception { - try(RepositorySession session = repositorySessionFactory.createSession()) { - metadataRepository.removeMetadataFacets(session, TEST_REPO_ID, AuditEvent.FACET_ID); - } + + sessionControl.reset(); + factoryControl.reset(); + EasyMock.expect( repositorySessionFactory.createSession() ).andStubReturn( session ); + factoryControl.replay(); + + metadataRepository.removeMetadataFacets(session, TEST_REPO_ID, AuditEvent.FACET_ID); metadataRepositoryControl.replay(); @@ -303,15 +323,17 @@ public class AuditManagerTest Date expectedTimestamp = new Date( current.getTime() - 3000 ); AuditEvent expectedEvent = createEvent( expectedTimestamp ); AuditEvent event3 = createEvent( new Date( current.getTime() - 1000 ) ); + sessionControl.reset(); + factoryControl.reset(); + EasyMock.expect( repositorySessionFactory.createSession() ).andStubReturn( session ); + factoryControl.replay(); - try(RepositorySession session = repositorySessionFactory.createSession()) { EasyMock.expect(metadataRepository.getMetadataFacets(session, TEST_REPO_ID, AuditEvent.FACET_ID)).andReturn( Arrays.asList(event1.getName(), expectedEvent.getName(), event3.getName())); // only match the middle one EasyMock.expect(metadataRepository.getMetadataFacet(session, TEST_REPO_ID, AuditEvent.FACET_ID, expectedEvent.getName())).andReturn(expectedEvent); - } metadataRepositoryControl.replay(); @@ -338,7 +360,11 @@ public class AuditManagerTest Date ts3 = new Date( current.getTime() - 1000 ); AuditEvent expectedEvent3 = createEvent( ts3 ); - try(RepositorySession session = repositorySessionFactory.createSession()) { + sessionControl.reset(); + factoryControl.reset(); + EasyMock.expect( repositorySessionFactory.createSession() ).andStubReturn( session ); + factoryControl.replay(); + EasyMock.expect(metadataRepository.getMetadataFacets(session, TEST_REPO_ID, AuditEvent.FACET_ID)).andReturn( Arrays.asList(event1.getName(), expectedEvent2.getName(), expectedEvent3.getName())); @@ -346,7 +372,6 @@ public class AuditManagerTest AuditEvent.FACET_ID, expectedEvent2.getName())).andReturn(expectedEvent2); EasyMock.expect(metadataRepository.getMetadataFacet(session, TEST_REPO_ID, AuditEvent.FACET_ID, expectedEvent3.getName())).andReturn(expectedEvent3); - } metadataRepositoryControl.replay(); List events = @@ -372,7 +397,11 @@ public class AuditManagerTest AuditEvent expectedEvent2 = createEvent( expectedTimestamp ); AuditEvent event3 = createEvent( new Date( current.getTime() - 1000 ) ); - try(RepositorySession session = repositorySessionFactory.createSession()) { + sessionControl.reset(); + factoryControl.reset(); + EasyMock.expect( repositorySessionFactory.createSession() ).andStubReturn( session ); + factoryControl.replay(); + EasyMock.expect(metadataRepository.getMetadataFacets(session, TEST_REPO_ID, AuditEvent.FACET_ID)).andReturn( Arrays.asList(expectedEvent1.getName(), expectedEvent2.getName(), event3.getName())); @@ -381,7 +410,6 @@ public class AuditManagerTest EasyMock.expect(metadataRepository.getMetadataFacet(session, TEST_REPO_ID, AuditEvent.FACET_ID, expectedEvent2.getName())).andReturn(expectedEvent2); - } metadataRepositoryControl.replay(); List events = @@ -409,7 +437,10 @@ public class AuditManagerTest Date ts3 = new Date( current.getTime() - 1000 ); AuditEvent expectedEvent3 = createEvent( ts3 ); - try(RepositorySession session = repositorySessionFactory.createSession()) { + sessionControl.reset(); + factoryControl.reset(); + EasyMock.expect( repositorySessionFactory.createSession() ).andStubReturn( session ); + factoryControl.replay(); EasyMock.expect(metadataRepository.getMetadataFacets(session, TEST_REPO_ID, AuditEvent.FACET_ID)).andReturn( Arrays.asList(expectedEvent1.getName(), expectedEvent2.getName(), expectedEvent3.getName())); @@ -421,7 +452,6 @@ public class AuditManagerTest EasyMock.expect(metadataRepository.getMetadataFacet(session, TEST_REPO_ID, AuditEvent.FACET_ID, expectedEvent3.getName())).andReturn(expectedEvent3); - } metadataRepositoryControl.replay(); List events = @@ -450,8 +480,10 @@ public class AuditManagerTest Date ts3 = new Date( current.getTime() - 1000 ); AuditEvent expectedEvent3 = createEvent( ts3 ); - - try(RepositorySession session = repositorySessionFactory.createSession()) { + sessionControl.reset(); + factoryControl.reset(); + EasyMock.expect( repositorySessionFactory.createSession() ).andStubReturn( session ); + factoryControl.replay(); EasyMock.expect(metadataRepository.getMetadataFacets(session, TEST_REPO_ID, AuditEvent.FACET_ID)).andReturn( Arrays.asList(expectedEvent1.getName(), expectedEvent2.getName(), expectedEvent3.getName())); @@ -464,7 +496,6 @@ public class AuditManagerTest EasyMock.expect(metadataRepository.getMetadataFacet(session, TEST_REPO_ID, AuditEvent.FACET_ID, expectedEvent3.getName())).andReturn(expectedEvent3); - } metadataRepositoryControl.replay(); List events = @@ -490,8 +521,10 @@ public class AuditManagerTest expectedEvent2.setResource( "different-resource" ); AuditEvent expectedEvent3 = createEvent( new Date( current.getTime() - 1000 ) ); - - try(RepositorySession session = repositorySessionFactory.createSession()) { + sessionControl.reset(); + factoryControl.reset(); + EasyMock.expect( repositorySessionFactory.createSession() ).andStubReturn( session ); + factoryControl.replay(); EasyMock.expect(metadataRepository.getMetadataFacets(session, TEST_REPO_ID, AuditEvent.FACET_ID)).andReturn( Arrays.asList(expectedEvent1.getName(), expectedEvent2.getName(), expectedEvent3.getName())); @@ -502,7 +535,6 @@ public class AuditManagerTest EasyMock.expect(metadataRepository.getMetadataFacet(session, TEST_REPO_ID, AuditEvent.FACET_ID, expectedEvent3.getName())).andReturn(expectedEvent3); - } metadataRepositoryControl.replay(); List events = @@ -528,7 +560,10 @@ public class AuditManagerTest Date ts3 = new Date( current.getTime() - 1000 ); AuditEvent expectedEvent3 = createEvent( ts3 ); - try(RepositorySession session = repositorySessionFactory.createSession()) { + sessionControl.reset(); + factoryControl.reset(); + EasyMock.expect( repositorySessionFactory.createSession() ).andStubReturn( session ); + factoryControl.replay(); EasyMock.expect(metadataRepository.getMetadataFacets(session, TEST_REPO_ID, AuditEvent.FACET_ID)) .andReturn(Arrays.asList(expectedEvent1.getName(), expectedEvent3.getName())); @@ -544,7 +579,6 @@ public class AuditManagerTest EasyMock.expect(metadataRepository.getMetadataFacet(session, TEST_REPO_ID, AuditEvent.FACET_ID, expectedEvent3.getName())) .andReturn(expectedEvent3); - } metadataRepositoryControl.replay(); List events = @@ -571,10 +605,12 @@ public class AuditManagerTest String name2 = createEvent( expectedTimestamp ).getName(); String name3 = createEvent( new Date( current.getTime() - 1000 ) ).getName(); - try(RepositorySession session = repositorySessionFactory.createSession()) { + sessionControl.reset(); + factoryControl.reset(); + EasyMock.expect( repositorySessionFactory.createSession() ).andStubReturn( session ); + factoryControl.replay(); EasyMock.expect(metadataRepository.getMetadataFacets(session, TEST_REPO_ID, AuditEvent.FACET_ID)) .andReturn(Arrays.asList(name1, name2, name3)); - } metadataRepositoryControl.replay(); List events = diff --git a/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepositoryTest.java b/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepositoryTest.java index 6bd8c28c9..e7ba4eda0 100644 --- a/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepositoryTest.java +++ b/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepositoryTest.java @@ -22,8 +22,11 @@ package org.apache.archiva.metadata.repository.cassandra; import org.apache.archiva.metadata.model.MetadataFacetFactory; import org.apache.archiva.metadata.repository.AbstractMetadataRepositoryTest; import org.apache.archiva.metadata.repository.MetadataRepository; +import org.apache.archiva.metadata.repository.RepositorySession; import org.apache.archiva.metadata.repository.RepositorySessionFactory; import org.apache.archiva.metadata.repository.cassandra.model.ProjectVersionMetadataModel; +import org.easymock.EasyMock; +import org.easymock.IMocksControl; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -49,10 +52,18 @@ public class CassandraMetadataRepositoryTest CassandraMetadataRepository cmr; + IMocksControl sessionFactoryControl; + RepositorySessionFactory sessionFactory; + + IMocksControl sessionControl; + RepositorySession session; + + + @Override protected RepositorySessionFactory getSessionFactory( ) { - return null; + return sessionFactory; } @Override @@ -78,6 +89,15 @@ public class CassandraMetadataRepositoryTest this.cmr = new CassandraMetadataRepository( factories, null, cassandraArchivaManager ); + sessionFactoryControl = EasyMock.createControl( ); + sessionFactory = sessionFactoryControl.createMock( RepositorySessionFactory.class ); + sessionControl = EasyMock.createControl( ); + session = sessionControl.createMock( RepositorySession.class ); + + EasyMock.expect( sessionFactory.createSession( ) ).andStubReturn( session ); + + sessionFactoryControl.replay(); + clearReposAndNamespace( cassandraArchivaManager ); } diff --git a/archiva-modules/plugins/metadata-store-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java b/archiva-modules/plugins/metadata-store-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java index 93ef8ce80..1795518d4 100644 --- a/archiva-modules/plugins/metadata-store-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java +++ b/archiva-modules/plugins/metadata-store-file/src/test/java/org/apache/archiva/metadata/repository/file/FileMetadataRepositoryTest.java @@ -42,7 +42,7 @@ public class FileMetadataRepositoryTest { private FileMetadataRepository repository; - private RepositorySessionFactory sessionFactory = null; + private RepositorySessionFactory sessionFactory = new FileRepositorySessionFactory(); @Override protected MetadataRepository getRepository( ) diff --git a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java index f9df40d7c..00cef0828 100644 --- a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java +++ b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java @@ -1522,7 +1522,7 @@ public class JcrMetadataRepository " AND [projectVersion].[jcr:path] LIKE '/repositories/%/content/%'" : " AND ISDESCENDANTNODE(projectVersion,'/" + getRepositoryContentPath( repositoryId ) + "')"; List result = new ArrayList<>( ); - if (key!=null && Arrays.binarySearch( PROJECT_VERSION_VERSION_PROPERTIES, key )>=0) + if (key==null || (key!=null && Arrays.binarySearch( PROJECT_VERSION_VERSION_PROPERTIES, key )>=0)) { // We search only for project version properties if the key is a valid property name String q1 = diff --git a/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java b/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java index 09d0e3309..965e42139 100644 --- a/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java +++ b/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java @@ -282,4 +282,14 @@ public class DuplicateArtifactsConsumer initIncludes(); configuration.addChangeListener( this ); } + + public RepositorySessionFactory getRepositorySessionFactory( ) + { + return repositorySessionFactory; + } + + public void setRepositorySessionFactory( RepositorySessionFactory repositorySessionFactory ) + { + this.repositorySessionFactory = repositorySessionFactory; + } } diff --git a/archiva-modules/plugins/problem-reports/src/test/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumerTest.java b/archiva-modules/plugins/problem-reports/src/test/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumerTest.java index 2e4acf9c1..7a08ab116 100644 --- a/archiva-modules/plugins/problem-reports/src/test/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumerTest.java +++ b/archiva-modules/plugins/problem-reports/src/test/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumerTest.java @@ -87,6 +87,8 @@ public class DuplicateArtifactsConsumerTest RepositorySessionFactory repositorySessionFactory; + RepositorySession session; + @Before @Override public void setUp() @@ -102,29 +104,29 @@ public class DuplicateArtifactsConsumerTest metadataRepository = mock( MetadataRepository.class ); repositorySessionFactory = mock(RepositorySessionFactory.class); - RepositorySession session = mock( RepositorySession.class ); - when( session.getRepository() ).thenReturn( metadataRepository ); + session = mock( RepositorySession.class ); - RepositorySessionFactory factory = applicationContext.getBean( RepositorySessionFactory.class ); - //(RepositorySessionFactory) lookup( RepositorySessionFactory.class ); - when( factory.createSession() ).thenReturn( session ); + when( repositorySessionFactory.createSession( ) ).thenReturn( session ); + when( session.getRepository() ).thenReturn( metadataRepository ); when( pathTranslator.getArtifactForPath( TEST_REPO, TEST_FILE ) ).thenReturn( TEST_METADATA ); + + consumer.setRepositorySessionFactory( repositorySessionFactory ); + } @Test public void testConsumerArtifactNotDuplicated() throws Exception { - RepositorySession session = repositorySessionFactory.createSession(); - when( metadataRepository.getArtifactsByChecksum(session , TEST_REPO, TEST_CHECKSUM ) ).thenReturn( + when( metadataRepository.getArtifactsByChecksum(eq(session) , eq(TEST_REPO), eq(TEST_CHECKSUM) ) ).thenReturn( Arrays.asList( TEST_METADATA ) ); consumer.beginScan( config, new Date() ); consumer.processFile( TEST_FILE ); consumer.completeScan(); - verify( metadataRepository, never() ).addMetadataFacet(session , eq( TEST_REPO ), Matchers.anyObject() ); + verify( metadataRepository, never() ).addMetadataFacet(eq(session) , eq( TEST_REPO ), Matchers.anyObject() ); } // TODO: Doesn't currently work @@ -145,7 +147,6 @@ public class DuplicateArtifactsConsumerTest public void testConsumerArtifactDuplicated() throws Exception { - RepositorySession session = repositorySessionFactory.createSession(); when( metadataRepository.getArtifactsByChecksum(session , TEST_REPO, TEST_CHECKSUM ) ).thenReturn( Arrays.asList( TEST_METADATA, createMetadata( "1.0" ) ) ); @@ -154,7 +155,7 @@ public class DuplicateArtifactsConsumerTest consumer.completeScan(); ArgumentCaptor argument = ArgumentCaptor.forClass( RepositoryProblemFacet.class ); - verify( metadataRepository ).addMetadataFacet(session , eq( TEST_REPO ), argument.capture() ); + verify( metadataRepository ).addMetadataFacet(eq(session) , eq( TEST_REPO ), argument.capture() ); RepositoryProblemFacet problem = argument.getValue(); assertProblem( problem ); } @@ -163,7 +164,6 @@ public class DuplicateArtifactsConsumerTest public void testConsumerArtifactDuplicatedButSelfNotInMetadataRepository() throws Exception { - RepositorySession session = repositorySessionFactory.createSession(); when( metadataRepository.getArtifactsByChecksum(session , TEST_REPO, TEST_CHECKSUM ) ).thenReturn( Arrays.asList( createMetadata( "1.0" ) ) ); @@ -172,7 +172,7 @@ public class DuplicateArtifactsConsumerTest consumer.completeScan(); ArgumentCaptor argument = ArgumentCaptor.forClass( RepositoryProblemFacet.class ); - verify( metadataRepository ).addMetadataFacet(session , eq( TEST_REPO ), argument.capture() ); + verify( metadataRepository ).addMetadataFacet(eq(session) , eq( TEST_REPO ), argument.capture() ); RepositoryProblemFacet problem = argument.getValue(); assertProblem( problem ); } @@ -195,8 +195,7 @@ public class DuplicateArtifactsConsumerTest { consumer.completeScan(); } - RepositorySession session = repositorySessionFactory.createSession(); - verify( metadataRepository, never() ).addMetadataFacet(session , eq( TEST_REPO ), Matchers.anyObject() ); + verify( metadataRepository, never() ).addMetadataFacet(eq(session) , eq( TEST_REPO ), Matchers.anyObject() ); } @Test @@ -207,16 +206,14 @@ public class DuplicateArtifactsConsumerTest // No exception unnecessarily for something we can't report on consumer.processFile( "com/example/invalid-artifact.txt" ); consumer.completeScan(); - RepositorySession session = repositorySessionFactory.createSession(); - verify( metadataRepository, never() ).addMetadataFacet(session , eq( TEST_REPO ), Matchers.anyObject() ); + verify( metadataRepository, never() ).addMetadataFacet(eq(session) , eq( TEST_REPO ), Matchers.anyObject() ); } @Test public void testConsumerArtifactNotAnArtifactPathResults() throws Exception { - RepositorySession session = repositorySessionFactory.createSession(); - when( metadataRepository.getArtifactsByChecksum(session , eq( TEST_REPO ), anyString() ) ).thenReturn( + when( metadataRepository.getArtifactsByChecksum(eq(session) , eq( TEST_REPO ), anyString() ) ).thenReturn( Arrays.asList( TEST_METADATA, createMetadata( "1.0" ) ) ); // override, this feels a little overspecified though @@ -228,7 +225,7 @@ public class DuplicateArtifactsConsumerTest consumer.processFile( "com/example/invalid-artifact.txt" ); consumer.completeScan(); - verify( metadataRepository, never() ).addMetadataFacet(session , eq( TEST_REPO ), Matchers.anyObject() ); + verify( metadataRepository, never() ).addMetadataFacet(eq(session) , eq( TEST_REPO ), Matchers.anyObject() ); } private static void assertProblem( RepositoryProblemFacet problem ) diff --git a/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java b/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java index 0bc82e0aa..3c5ae8eef 100644 --- a/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java +++ b/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java @@ -55,25 +55,30 @@ public class DefaultRepositoryStatisticsManager private RepositoryWalkingStatisticsProvider walkingProvider = new RepositoryWalkingStatisticsProvider(); + + @Inject RepositorySessionFactory repositorySessionFactory; @Override - public boolean hasStatistics( MetadataRepository metadataRepository, String repositoryId ) + public boolean hasStatistics( String repositoryId ) throws MetadataRepositoryException { try(RepositorySession session = repositorySessionFactory.createSession()) { + final MetadataRepository metadataRepository = session.getRepository( ); return metadataRepository.hasMetadataFacet(session, repositoryId, DefaultRepositoryStatistics.FACET_ID); } } @Override - public RepositoryStatistics getLastStatistics( MetadataRepository metadataRepository, String repositoryId ) + public RepositoryStatistics getLastStatistics( String repositoryId ) throws MetadataRepositoryException { StopWatch stopWatch = new StopWatch(); stopWatch.start(); try(RepositorySession session = repositorySessionFactory.createSession()) { + final MetadataRepository metadataRepository = session.getRepository( ); + // TODO: consider a more efficient implementation that directly gets the last one from the content repository List scans = metadataRepository.getMetadataFacets(session, repositoryId, DefaultRepositoryStatistics.FACET_ID); if (scans == null) { @@ -95,11 +100,13 @@ public class DefaultRepositoryStatisticsManager } @Override - public void addStatisticsAfterScan( MetadataRepository metadataRepository, String repositoryId, Date startTime, + public void addStatisticsAfterScan( String repositoryId, Date startTime, Date endTime, long totalFiles, long newFiles ) throws MetadataRepositoryException { try(RepositorySession session = repositorySessionFactory.createSession()) { + final MetadataRepository metadataRepository = session.getRepository( ); + DefaultRepositoryStatistics repositoryStatistics = new DefaultRepositoryStatistics(); repositoryStatistics.setRepositoryId(repositoryId); repositoryStatistics.setScanStartTime(startTime); @@ -130,20 +137,22 @@ public class DefaultRepositoryStatisticsManager } @Override - public void deleteStatistics( MetadataRepository metadataRepository, String repositoryId ) + public void deleteStatistics( String repositoryId ) throws MetadataRepositoryException { try(RepositorySession session = repositorySessionFactory.createSession()) { + final MetadataRepository metadataRepository = session.getRepository( ); metadataRepository.removeMetadataFacets(session, repositoryId, DefaultRepositoryStatistics.FACET_ID); } } @Override - public List getStatisticsInRange( MetadataRepository metadataRepository, String repositoryId, + public List getStatisticsInRange( String repositoryId, Date startTime, Date endTime ) throws MetadataRepositoryException { try(RepositorySession session = repositorySessionFactory.createSession()) { + final MetadataRepository metadataRepository = session.getRepository( ); List results = new ArrayList<>(); List list = metadataRepository.getMetadataFacets(session, repositoryId, DefaultRepositoryStatistics.FACET_ID); Collections.sort(list, Collections.reverseOrder()); @@ -173,4 +182,14 @@ public class DefaultRepositoryStatisticsManager fmt.setTimeZone( UTC_TIME_ZONE ); return fmt; } + + public RepositorySessionFactory getRepositorySessionFactory( ) + { + return repositorySessionFactory; + } + + public void setRepositorySessionFactory( RepositorySessionFactory repositorySessionFactory ) + { + this.repositorySessionFactory = repositorySessionFactory; + } } diff --git a/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManagerTest.java b/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManagerTest.java index 0c31249e4..f888f1f1a 100644 --- a/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManagerTest.java +++ b/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManagerTest.java @@ -43,8 +43,7 @@ import java.util.List; import java.util.Map; import java.util.TimeZone; -import static org.easymock.EasyMock.createControl; -import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.*; @RunWith( ArchivaBlockJUnit4ClassRunner.class ) public class RepositoryStatisticsManagerTest @@ -68,6 +67,8 @@ public class RepositoryStatisticsManagerTest private RepositorySessionFactory repositorySessionFactory; private IMocksControl factoryControl; + private IMocksControl sessionControl; + private RepositorySession session; private static SimpleDateFormat createTimestampFormat() { @@ -90,6 +91,12 @@ public class RepositoryStatisticsManagerTest factoryControl = createControl(); repositorySessionFactory = factoryControl.createMock(RepositorySessionFactory.class); + + repositoryStatisticsManager.setRepositorySessionFactory( repositorySessionFactory ); + + sessionControl = createControl( ); + session = sessionControl.createMock( RepositorySession.class ); + } @Test @@ -111,16 +118,23 @@ public class RepositoryStatisticsManagerTest stats.setTotalFileCount( 56229 ); - try(RepositorySession session = repositorySessionFactory.createSession()) { - expect(metadataRepository.getMetadataFacets(session, TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID)).andReturn( + sessionControl.reset(); + factoryControl.reset(); + expect( repositorySessionFactory.createSession( ) ).andStubReturn( session ); + expect( session.getRepository() ).andStubReturn( metadataRepository ); + session.close(); + expectLastCall( ).anyTimes( ); + factoryControl.replay(); + sessionControl.replay(); + + expect(metadataRepository.getMetadataFacets(session, TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID)).andReturn( Arrays.asList(FIRST_TEST_SCAN, SECOND_TEST_SCAN)); - expect(metadataRepository.getMetadataFacet(session, TEST_REPO_ID, + expect(metadataRepository.getMetadataFacet(session, TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID, SECOND_TEST_SCAN)).andReturn(stats); - } metadataRepositoryControl.replay(); - stats = repositoryStatisticsManager.getLastStatistics( metadataRepository, TEST_REPO_ID ); + stats = repositoryStatisticsManager.getLastStatistics( TEST_REPO_ID ); assertNotNull( stats ); assertEquals( 1314527915L, stats.getTotalArtifactFileSize() ); assertEquals( 123, stats.getNewFileCount() ); @@ -140,12 +154,20 @@ public class RepositoryStatisticsManagerTest throws Exception { - RepositorySession session = repositorySessionFactory.createSession(); + sessionControl.reset(); + factoryControl.reset(); + expect( repositorySessionFactory.createSession( ) ).andStubReturn( session ); + expect( session.getRepository() ).andStubReturn( metadataRepository ); + session.close(); + expectLastCall( ).anyTimes( ); + factoryControl.replay(); + sessionControl.replay(); + expect( metadataRepository.getMetadataFacets(session , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn( Collections.emptyList() ); metadataRepositoryControl.replay(); - RepositoryStatistics stats = repositoryStatisticsManager.getLastStatistics( metadataRepository, TEST_REPO_ID ); + RepositoryStatistics stats = repositoryStatisticsManager.getLastStatistics( TEST_REPO_ID ); assertNull( stats ); metadataRepositoryControl.verify(); @@ -161,8 +183,15 @@ public class RepositoryStatisticsManagerTest RepositoryStatistics stats = createTestStats( startTime, current ); walkRepository( 1 ); - RepositorySession session = repositorySessionFactory.createSession(); + sessionControl.reset(); + factoryControl.reset(); + expect( repositorySessionFactory.createSession( ) ).andStubReturn( session ); + expect( session.getRepository() ).andStubReturn( metadataRepository ); + session.close(); + expectLastCall( ).anyTimes( ); + factoryControl.replay(); + sessionControl.replay(); metadataRepository.addMetadataFacet(session , TEST_REPO_ID, stats ); @@ -174,10 +203,10 @@ public class RepositoryStatisticsManagerTest metadataRepositoryControl.replay(); - repositoryStatisticsManager.addStatisticsAfterScan( metadataRepository, TEST_REPO_ID, startTime, current, 56345, + repositoryStatisticsManager.addStatisticsAfterScan( TEST_REPO_ID, startTime, current, 56345, 45 ); - stats = repositoryStatisticsManager.getLastStatistics( metadataRepository, TEST_REPO_ID ); + stats = repositoryStatisticsManager.getLastStatistics( TEST_REPO_ID ); assertNotNull( stats ); assertEquals( 246900, stats.getTotalArtifactFileSize() ); assertEquals( 45, stats.getNewFileCount() ); @@ -201,7 +230,15 @@ public class RepositoryStatisticsManagerTest Date startTime1 = new Date( current.getTime() - 12345 ); DefaultRepositoryStatistics stats1 = createTestStats( startTime1, new Date( current.getTime() - 6000 ) ); - RepositorySession session = repositorySessionFactory.createSession(); + + sessionControl.reset(); + factoryControl.reset(); + expect( repositorySessionFactory.createSession( ) ).andStubReturn( session ); + expect( session.getRepository() ).andStubReturn( metadataRepository ); + session.close(); + expectLastCall( ).anyTimes( ); + factoryControl.replay(); + sessionControl.replay(); metadataRepository.addMetadataFacet(session , TEST_REPO_ID, stats1 ); @@ -222,16 +259,16 @@ public class RepositoryStatisticsManagerTest metadataRepositoryControl.replay(); - repositoryStatisticsManager.addStatisticsAfterScan( metadataRepository, TEST_REPO_ID, startTime1, + repositoryStatisticsManager.addStatisticsAfterScan( TEST_REPO_ID, startTime1, stats1.getScanEndTime(), 56345, 45 ); - repositoryStatisticsManager.addStatisticsAfterScan( metadataRepository, TEST_REPO_ID, startTime2, + repositoryStatisticsManager.addStatisticsAfterScan( TEST_REPO_ID, startTime2, stats2.getScanEndTime(), 56345, 45 ); - assertNotNull( repositoryStatisticsManager.getLastStatistics( metadataRepository, TEST_REPO_ID ) ); + assertNotNull( repositoryStatisticsManager.getLastStatistics( TEST_REPO_ID ) ); - repositoryStatisticsManager.deleteStatistics( metadataRepository, TEST_REPO_ID ); + repositoryStatisticsManager.deleteStatistics( TEST_REPO_ID ); - assertNull( repositoryStatisticsManager.getLastStatistics( metadataRepository, TEST_REPO_ID ) ); + assertNull( repositoryStatisticsManager.getLastStatistics( TEST_REPO_ID ) ); metadataRepositoryControl.verify(); } @@ -240,7 +277,14 @@ public class RepositoryStatisticsManagerTest public void testDeleteStatsWhenEmpty() throws Exception { - RepositorySession session = repositorySessionFactory.createSession(); + sessionControl.reset(); + factoryControl.reset(); + expect( repositorySessionFactory.createSession( ) ).andStubReturn( session ); + expect( session.getRepository() ).andStubReturn( metadataRepository ); + session.close(); + expectLastCall( ).anyTimes( ); + factoryControl.replay(); + sessionControl.replay(); expect( metadataRepository.getMetadataFacets(session , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn( Collections.emptyList() ).times( 2 ); @@ -248,11 +292,11 @@ public class RepositoryStatisticsManagerTest metadataRepositoryControl.replay(); - assertNull( repositoryStatisticsManager.getLastStatistics( metadataRepository, TEST_REPO_ID ) ); + assertNull( repositoryStatisticsManager.getLastStatistics( TEST_REPO_ID ) ); - repositoryStatisticsManager.deleteStatistics( metadataRepository, TEST_REPO_ID ); + repositoryStatisticsManager.deleteStatistics( TEST_REPO_ID ); - assertNull( repositoryStatisticsManager.getLastStatistics( metadataRepository, TEST_REPO_ID ) ); + assertNull( repositoryStatisticsManager.getLastStatistics( TEST_REPO_ID ) ); metadataRepositoryControl.verify(); } @@ -265,14 +309,22 @@ public class RepositoryStatisticsManagerTest Date current = new Date(); + sessionControl.reset(); + factoryControl.reset(); + expect( repositorySessionFactory.createSession( ) ).andStubReturn( session ); + expect( session.getRepository() ).andStubReturn( metadataRepository ); + session.close(); + expectLastCall( ).anyTimes( ); + factoryControl.replay(); + sessionControl.replay(); + + addStats( new Date( current.getTime() - 12345 ), new Date( current.getTime() - 6000 ) ); addStats( new Date( current.getTime() - 3000 ), new Date( current.getTime() - 2000 ) ); addStats( new Date( current.getTime() - 1000 ), current ); ArrayList keys = new ArrayList<>( statsCreated.keySet() ); - RepositorySession session = repositorySessionFactory.createSession(); - expect( metadataRepository.getMetadataFacets(session , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn( keys ); // only match the middle one @@ -286,13 +338,13 @@ public class RepositoryStatisticsManagerTest for ( RepositoryStatistics stats : statsCreated.values() ) { - repositoryStatisticsManager.addStatisticsAfterScan( metadataRepository, TEST_REPO_ID, + repositoryStatisticsManager.addStatisticsAfterScan( TEST_REPO_ID, stats.getScanStartTime(), stats.getScanEndTime(), 56345, 45 ); } List list = - repositoryStatisticsManager.getStatisticsInRange( metadataRepository, TEST_REPO_ID, + repositoryStatisticsManager.getStatisticsInRange( TEST_REPO_ID, new Date( current.getTime() - 4000 ), new Date( current.getTime() - 2000 ) ); @@ -310,14 +362,21 @@ public class RepositoryStatisticsManagerTest Date current = new Date(); + sessionControl.reset(); + factoryControl.reset(); + expect( repositorySessionFactory.createSession( ) ).andStubReturn( session ); + expect( session.getRepository() ).andStubReturn( metadataRepository ); + session.close(); + expectLastCall( ).anyTimes( ); + factoryControl.replay(); + sessionControl.replay(); + addStats( new Date( current.getTime() - 12345 ), new Date( current.getTime() - 6000 ) ); addStats( new Date( current.getTime() - 3000 ), new Date( current.getTime() - 2000 ) ); addStats( new Date( current.getTime() - 1000 ), current ); List keys = new ArrayList<>( statsCreated.keySet() ); - RepositorySession session = repositorySessionFactory.createSession(); - expect( metadataRepository.getMetadataFacets(session , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn( keys ); String key = keys.get( 1 ); @@ -336,13 +395,13 @@ public class RepositoryStatisticsManagerTest for ( RepositoryStatistics stats : statsCreated.values() ) { - repositoryStatisticsManager.addStatisticsAfterScan( metadataRepository, TEST_REPO_ID, + repositoryStatisticsManager.addStatisticsAfterScan( TEST_REPO_ID, stats.getScanStartTime(), stats.getScanEndTime(), 56345, 45 ); } List list = - repositoryStatisticsManager.getStatisticsInRange( metadataRepository, TEST_REPO_ID, + repositoryStatisticsManager.getStatisticsInRange( TEST_REPO_ID, new Date( current.getTime() - 4000 ), current ); assertEquals( 2, list.size() ); @@ -360,14 +419,21 @@ public class RepositoryStatisticsManagerTest Date current = new Date(); + sessionControl.reset(); + factoryControl.reset(); + expect( repositorySessionFactory.createSession( ) ).andStubReturn( session ); + expect( session.getRepository() ).andStubReturn( metadataRepository ); + session.close(); + expectLastCall( ).anyTimes( ); + factoryControl.replay(); + sessionControl.replay(); + addStats( new Date( current.getTime() - 12345 ), new Date( current.getTime() - 6000 ) ); addStats( new Date( current.getTime() - 3000 ), new Date( current.getTime() - 2000 ) ); addStats( new Date( current.getTime() - 1000 ), current ); List keys = new ArrayList<>( statsCreated.keySet() ); - RepositorySession session = repositorySessionFactory.createSession(); - expect( metadataRepository.getMetadataFacets(session , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn( keys ); String key = keys.get( 0 ); @@ -383,13 +449,13 @@ public class RepositoryStatisticsManagerTest for ( RepositoryStatistics stats : statsCreated.values() ) { - repositoryStatisticsManager.addStatisticsAfterScan( metadataRepository, TEST_REPO_ID, + repositoryStatisticsManager.addStatisticsAfterScan( TEST_REPO_ID, stats.getScanStartTime(), stats.getScanEndTime(), 56345, 45 ); } List list = - repositoryStatisticsManager.getStatisticsInRange( metadataRepository, TEST_REPO_ID, + repositoryStatisticsManager.getStatisticsInRange( TEST_REPO_ID, new Date( current.getTime() - 20000 ), new Date( current.getTime() - 2000 ) ); @@ -408,14 +474,21 @@ public class RepositoryStatisticsManagerTest Date current = new Date(); + sessionControl.reset(); + factoryControl.reset(); + expect( repositorySessionFactory.createSession( ) ).andStubReturn( session ); + expect( session.getRepository() ).andStubReturn( metadataRepository ); + session.close(); + expectLastCall( ).anyTimes( ); + factoryControl.replay(); + sessionControl.replay(); + addStats( new Date( current.getTime() - 12345 ), new Date( current.getTime() - 6000 ) ); addStats( new Date( current.getTime() - 3000 ), new Date( current.getTime() - 2000 ) ); addStats( new Date( current.getTime() - 1000 ), current ); ArrayList keys = new ArrayList<>( statsCreated.keySet() ); - RepositorySession session = repositorySessionFactory.createSession(); - expect( metadataRepository.getMetadataFacets(session , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn( keys ); String key = keys.get( 0 ); @@ -435,13 +508,13 @@ public class RepositoryStatisticsManagerTest for ( RepositoryStatistics stats : statsCreated.values() ) { - repositoryStatisticsManager.addStatisticsAfterScan( metadataRepository, TEST_REPO_ID, + repositoryStatisticsManager.addStatisticsAfterScan( TEST_REPO_ID, stats.getScanStartTime(), stats.getScanEndTime(), 56345, 45 ); } List list = - repositoryStatisticsManager.getStatisticsInRange( metadataRepository, TEST_REPO_ID, + repositoryStatisticsManager.getStatisticsInRange( TEST_REPO_ID, new Date( current.getTime() - 20000 ), current ); assertEquals( 3, list.size() ); @@ -459,6 +532,14 @@ public class RepositoryStatisticsManagerTest walkRepository( 3 ); Date current = new Date(); + sessionControl.reset(); + factoryControl.reset(); + expect( repositorySessionFactory.createSession( ) ).andStubReturn( session ); + expect( session.getRepository() ).andStubReturn( metadataRepository ); + session.close(); + expectLastCall( ).anyTimes( ); + factoryControl.replay(); + sessionControl.replay(); addStats( new Date( current.getTime() - 12345 ), new Date( current.getTime() - 6000 ) ); addStats( new Date( current.getTime() - 3000 ), new Date( current.getTime() - 2000 ) ); @@ -466,21 +547,19 @@ public class RepositoryStatisticsManagerTest ArrayList keys = new ArrayList<>( statsCreated.keySet() ); - RepositorySession session = repositorySessionFactory.createSession(); - expect( metadataRepository.getMetadataFacets(session , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn( keys ); metadataRepositoryControl.replay(); for ( RepositoryStatistics stats : statsCreated.values() ) { - repositoryStatisticsManager.addStatisticsAfterScan( metadataRepository, TEST_REPO_ID, + repositoryStatisticsManager.addStatisticsAfterScan( TEST_REPO_ID, stats.getScanStartTime(), stats.getScanEndTime(), 56345, 45 ); } List list = - repositoryStatisticsManager.getStatisticsInRange( metadataRepository, TEST_REPO_ID, + repositoryStatisticsManager.getStatisticsInRange( TEST_REPO_ID, new Date( current.getTime() - 20000 ), new Date( current.getTime() - 16000 ) ); @@ -537,7 +616,9 @@ public class RepositoryStatisticsManagerTest private void walkRepository( int count ) throws Exception { - RepositorySession session = repositorySessionFactory.createSession(); + sessionControl.reset(); + expect( repositorySessionFactory.createSession( ) ).andStubReturn( session ); + factoryControl.replay(); for ( int i = 0; i < count; i++ ) { diff --git a/archiva-modules/plugins/stage-repository-merge/pom.xml b/archiva-modules/plugins/stage-repository-merge/pom.xml index c04f28e45..90ed77286 100644 --- a/archiva-modules/plugins/stage-repository-merge/pom.xml +++ b/archiva-modules/plugins/stage-repository-merge/pom.xml @@ -64,10 +64,6 @@ org.apache.archiva archiva-model - - org.apache.archiva - metadata-store-jcr - org.mockito mockito-all diff --git a/archiva-modules/plugins/stage-repository-merge/src/main/java/org/apache/archiva/stagerepository/merge/Maven2RepositoryMerger.java b/archiva-modules/plugins/stage-repository-merge/src/main/java/org/apache/archiva/stagerepository/merge/Maven2RepositoryMerger.java index eab7ea9ac..a36d7c11f 100644 --- a/archiva-modules/plugins/stage-repository-merge/src/main/java/org/apache/archiva/stagerepository/merge/Maven2RepositoryMerger.java +++ b/archiva-modules/plugins/stage-repository-merge/src/main/java/org/apache/archiva/stagerepository/merge/Maven2RepositoryMerger.java @@ -417,5 +417,13 @@ public class Maven2RepositoryMerger } } + public RepositorySessionFactory getRepositorySessionFactory( ) + { + return repositorySessionFactory; + } + public void setRepositorySessionFactory( RepositorySessionFactory repositorySessionFactory ) + { + this.repositorySessionFactory = repositorySessionFactory; + } } diff --git a/archiva-modules/plugins/stage-repository-merge/src/test/java/org/apache/archiva/configuration/StubConfiguration.java b/archiva-modules/plugins/stage-repository-merge/src/test/java/org/apache/archiva/configuration/StubConfiguration.java index 50bf74570..9690360bc 100644 --- a/archiva-modules/plugins/stage-repository-merge/src/test/java/org/apache/archiva/configuration/StubConfiguration.java +++ b/archiva-modules/plugins/stage-repository-merge/src/test/java/org/apache/archiva/configuration/StubConfiguration.java @@ -33,7 +33,7 @@ import java.util.Locale; public class StubConfiguration implements ArchivaConfiguration { - private Configuration configuration; + private Configuration configuration = new Configuration(); @Override public Configuration getConfiguration() @@ -57,7 +57,7 @@ public class StubConfiguration @Override public void addListener( ConfigurationListener listener ) { - throw new UnsupportedOperationException(); + // throw new UnsupportedOperationException(); } @Override @@ -69,7 +69,7 @@ public class StubConfiguration @Override public void addChangeListener( RegistryListener listener ) { - throw new UnsupportedOperationException(); + // throw new UnsupportedOperationException(); } @Override @@ -123,7 +123,7 @@ public class StubConfiguration @Override public Path getDataDirectory() { - if (configuration!=null && StringUtils.isNotEmpty(configuration.getArchivaRuntimeConfiguration().getDataDirectory())) { + if (configuration!=null && configuration.getArchivaRuntimeConfiguration()!=null && StringUtils.isNotEmpty(configuration.getArchivaRuntimeConfiguration().getDataDirectory())) { Path dataDir = Paths.get(configuration.getArchivaRuntimeConfiguration().getDataDirectory()); if (dataDir.isAbsolute()) { return dataDir; diff --git a/archiva-modules/plugins/stage-repository-merge/src/test/java/org/apache/archiva/stagerepository/merge/Maven2RepositoryMergerTest.java b/archiva-modules/plugins/stage-repository-merge/src/test/java/org/apache/archiva/stagerepository/merge/Maven2RepositoryMergerTest.java index 7405b6480..2ac7e8b75 100644 --- a/archiva-modules/plugins/stage-repository-merge/src/test/java/org/apache/archiva/stagerepository/merge/Maven2RepositoryMergerTest.java +++ b/archiva-modules/plugins/stage-repository-merge/src/test/java/org/apache/archiva/stagerepository/merge/Maven2RepositoryMergerTest.java @@ -26,10 +26,13 @@ import org.apache.archiva.configuration.ManagedRepositoryConfiguration; import org.apache.archiva.configuration.RepositoryScanningConfiguration; import org.apache.archiva.metadata.model.ArtifactMetadata; import org.apache.archiva.metadata.repository.MetadataRepository; +import org.apache.archiva.metadata.repository.MetadataRepositoryException; import org.apache.archiva.metadata.repository.RepositorySession; import org.apache.archiva.metadata.repository.RepositorySessionFactory; +import org.apache.archiva.repository.Repository; import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.MockitoAnnotations; @@ -60,7 +63,31 @@ public class Maven2RepositoryMergerTest private MetadataRepository metadataRepository; - private RepositorySessionFactory repositorySessionFactory; + private static RepositorySessionFactory repositorySessionFactory; + + private static RepositorySession session; + + static + { + repositorySessionFactory = mock(RepositorySessionFactory.class); + session = mock( RepositorySession.class ); + + try + { + when( repositorySessionFactory.createSession( ) ).thenReturn( session ); + } + catch ( MetadataRepositoryException e ) + { + throw new RuntimeException( e ); + } + + } + + public static RepositorySessionFactory getRepositorySessionFactory() { + return repositorySessionFactory; + } + + @Before @Override @@ -70,7 +97,8 @@ public class Maven2RepositoryMergerTest super.setUp(); MockitoAnnotations.initMocks( this ); metadataRepository = mock( MetadataRepository.class ); - repositorySessionFactory = mock(RepositorySessionFactory.class); + repositoryMerger.setRepositorySessionFactory( repositorySessionFactory ); + } private List getArtifacts() @@ -125,11 +153,10 @@ public class Maven2RepositoryMergerTest c.addManagedRepository( targetRepo ); configuration.save( c ); - try(RepositorySession session = repositorySessionFactory.createSession()) { + when(metadataRepository.getArtifacts(session, TEST_REPO_ID)).thenReturn(getArtifacts()); repositoryMerger.merge(metadataRepository, TEST_REPO_ID, "target-rep"); verify(metadataRepository).getArtifacts(session, TEST_REPO_ID); - } assertTrue( Files.exists(mergedArtifact) ); assertTrue( Files.exists(mavenMetadata) ); assertTrue( Files.exists(pom) ); @@ -176,14 +203,12 @@ public class Maven2RepositoryMergerTest "/target/test-repository/com/example/test/test-artifact/1.0-SNAPSHOT/test-artifact-1.0-20100308.230825-1.jar" ); targetRepoFile.toFile().setReadOnly(); - try(RepositorySession session = repositorySessionFactory.createSession()) { when(metadataRepository.getArtifacts(session, sourceRepoId)).thenReturn(sourceRepoArtifactsList); when(metadataRepository.getArtifacts(session, TEST_REPO_ID)).thenReturn(targetRepoArtifactsList); assertEquals(1, repositoryMerger.getConflictingArtifacts(metadataRepository, sourceRepoId, TEST_REPO_ID).size()); verify(metadataRepository).getArtifacts(session, TEST_REPO_ID); - } } } \ No newline at end of file diff --git a/archiva-modules/plugins/stage-repository-merge/src/test/resources/spring-context.xml b/archiva-modules/plugins/stage-repository-merge/src/test/resources/spring-context.xml index db41eff4d..87b681be2 100644 --- a/archiva-modules/plugins/stage-repository-merge/src/test/resources/spring-context.xml +++ b/archiva-modules/plugins/stage-repository-merge/src/test/resources/spring-context.xml @@ -32,4 +32,8 @@ + + + \ No newline at end of file -- 2.39.5