From 8d76c8edf73c8d73773d69b5ad4132132385a2e6 Mon Sep 17 00:00:00 2001 From: Alan Davis Date: Wed, 12 Feb 2014 01:19:54 +0000 Subject: [PATCH] Merged HEAD-BUG-FIX (4.3/Cloud) to HEAD (4.3/Cloud) 59256: Merged V4.2-BUG-FIX (4.2.1) to HEAD-BUG-FIX (Cloud/4.3) 59237: Merged V4.1-BUG-FIX (4.1.8) to V4.2-BUG-FIX (4.2.1) 59231: MNT-10237: Merged V4.1.6 (4.1.6.4) to V4.1-BUG-FIX (4.1.8) 58895: MNT-10109: Merged DEV to PATCHES/V4.1.6 (4.1.6.4) 58855: MNT-10109: Permissions are not restored when a deleted site is recovered from the trashcan - Fix unit tests failure by purging archived sites. Forbid new site creation if site group already exists. 58871: MNT-10109: Permissions are not restored when a deleted site is recovered from the trashcan - Return beforePurgeNode callback binding to Site class. 58947: MNT-10109: PATCHES/V4.1.6 (4.1.6.4) 58946: MNT-10109: Permissions are not restored when a deleted site is recovered from the trashcan - Fix test failures by purging deleted sites from trashcan so that sitename can be reused. Change SiteServiceImplTest to avoid database deadlock. 58949: MNT-10109: PATCHES/V4.1.6 (4.1.6.4) 58948: MNT-10109: Permissions are not restored when a deleted site is recovered from the trashcan - Fix test failures by purging deleted sites from trashcan so that sitename can be reused. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@62120 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../alfresco/repo/site/SiteServiceImpl.java | 3 +- .../activities/AbstractSiteActivityTest.java | 28 ++++++++----------- .../activities/ActivityServiceImplTest.java | 6 ++++ .../feed/cleanup/AbstractFeedCleanerTest.java | 14 ++++++++-- .../GoogleDocumentServiceSystemTest.java | 6 ++++ .../repo/publishing/flickr/FlickrTest.java | 11 +++++++- .../publishing/slideshare/SlideShareTest.java | 11 +++++++- .../repo/publishing/youtube/YouTubeTest.java | 11 +++++++- .../authority/AuthorityServiceTest.java | 7 +++++ .../repo/site/SiteServiceImplTest.java | 12 ++++---- .../SubscriptionServiceActivitiesTest.java | 8 ++++-- .../util/test/junitrules/TemporarySites.java | 16 +++++++++++ 12 files changed, 100 insertions(+), 33 deletions(-) diff --git a/source/java/org/alfresco/repo/site/SiteServiceImpl.java b/source/java/org/alfresco/repo/site/SiteServiceImpl.java index fde22ca01e..327f462c6b 100644 --- a/source/java/org/alfresco/repo/site/SiteServiceImpl.java +++ b/source/java/org/alfresco/repo/site/SiteServiceImpl.java @@ -465,7 +465,7 @@ public class SiteServiceImpl extends AbstractLifecycleBean implements SiteServic // Check to see if we already have a site of this name NodeRef existingSite = getSiteNodeRef(shortName, false); - if (existingSite != null) + if (existingSite != null || authorityService.authorityExists(getSiteGroup(shortName, true))) { // Throw an exception since we have a duplicate site name throw new SiteServiceException(MSG_UNABLE_TO_CREATE, new Object[]{shortName}); @@ -1463,7 +1463,6 @@ public class SiteServiceImpl extends AbstractLifecycleBean implements SiteServic { throw new SiteServiceException(MSG_CAN_NOT_DELETE, new Object[]{shortName}); } - final QName siteType = this.directNodeService.getType(siteNodeRef); // Delete the cached reference siteNodeRefCache.remove(shortName); diff --git a/source/test-java/org/alfresco/repo/activities/AbstractSiteActivityTest.java b/source/test-java/org/alfresco/repo/activities/AbstractSiteActivityTest.java index 7b955c6dd1..26aaefa013 100644 --- a/source/test-java/org/alfresco/repo/activities/AbstractSiteActivityTest.java +++ b/source/test-java/org/alfresco/repo/activities/AbstractSiteActivityTest.java @@ -28,6 +28,7 @@ import org.alfresco.repo.activities.feed.FeedGenerator; import org.alfresco.repo.activities.feed.local.LocalFeedTaskProcessor; import org.alfresco.repo.activities.post.lookup.PostLookup; import org.alfresco.repo.management.subsystems.ChildApplicationContextFactory; +import org.alfresco.repo.node.archive.NodeArchiveService; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.permissions.AccessDeniedException; import org.alfresco.repo.site.SiteModel; @@ -35,6 +36,7 @@ import org.alfresco.service.cmr.activities.ActivityService; import org.alfresco.service.cmr.activities.FeedControl; import org.alfresco.service.cmr.security.MutableAuthenticationService; import org.alfresco.service.cmr.security.PersonService; +import org.alfresco.service.cmr.site.SiteInfo; import org.alfresco.service.cmr.site.SiteService; import org.alfresco.service.cmr.site.SiteVisibility; import org.alfresco.util.ApplicationContextHelper; @@ -65,6 +67,7 @@ public abstract class AbstractSiteActivityTest private PersonService personService; private PostLookup postLookup; private FeedGenerator feedGenerator; + private NodeArchiveService nodeArchiveService; // // Test config & data @@ -116,6 +119,7 @@ public abstract class AbstractSiteActivityTest this.siteService = (SiteService)applicationContext.getBean("SiteService"); this.authenticationService = (MutableAuthenticationService)applicationContext.getBean("AuthenticationService"); this.personService = (PersonService)applicationContext.getBean("PersonService"); + this.nodeArchiveService = (NodeArchiveService)applicationContext.getBean("nodeArchiveService"); LocalFeedTaskProcessor feedProcessor = null; @@ -196,23 +200,13 @@ public abstract class AbstractSiteActivityTest protected void deleteSite(String siteId) throws Exception { - // delete site (and site's associated groups) - siteService.deleteSite(siteId); - } - - @Test - //MNT-9104 If username contains uppercase letters the action of joining a site will not be displayed in "My activities" - public void testUserActivitiesOnSite() throws Exception - { - login(ADMIN_USER, ADMIN_PW); - - addMembership(site1, user4, SiteModel.SITE_CONSUMER); - - generateFeed(); - - login(user4, USER_PW); - - getUserFeed(user4, site1, false, false, true, 1); + SiteInfo siteInfo = siteService.getSite(siteId); + if (siteInfo != null) + { + // delete site (and site's associated groups) + siteService.deleteSite(siteId); + nodeArchiveService.purgeArchivedNode(nodeArchiveService.getArchivedNode(siteInfo.getNodeRef())); + } } @Test diff --git a/source/test-java/org/alfresco/repo/activities/ActivityServiceImplTest.java b/source/test-java/org/alfresco/repo/activities/ActivityServiceImplTest.java index 4a1c0f5040..e7b58cbdf4 100644 --- a/source/test-java/org/alfresco/repo/activities/ActivityServiceImplTest.java +++ b/source/test-java/org/alfresco/repo/activities/ActivityServiceImplTest.java @@ -27,6 +27,7 @@ import junit.framework.TestCase; import org.alfresco.repo.domain.activities.ActivityPostDAO; import org.alfresco.repo.domain.activities.ActivityPostEntity; import org.alfresco.repo.jscript.ClasspathScriptLocation; +import org.alfresco.repo.node.archive.NodeArchiveService; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.service.cmr.activities.ActivityService; import org.alfresco.service.cmr.activities.FeedControl; @@ -34,6 +35,7 @@ import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.ScriptLocation; import org.alfresco.service.cmr.repository.ScriptService; import org.alfresco.service.cmr.security.MutableAuthenticationService; +import org.alfresco.service.cmr.site.SiteInfo; import org.alfresco.service.cmr.site.SiteService; import org.alfresco.service.cmr.site.SiteVisibility; import org.alfresco.test_category.OwnJVMTestsCategory; @@ -57,6 +59,7 @@ public class ActivityServiceImplTest extends TestCase private MutableAuthenticationService authenticationService; private SiteService siteService; private ActivityPostDAO postDAO; + private NodeArchiveService nodeArchiveService; private static final String ADMIN_PW = "admin"; @@ -71,6 +74,7 @@ public class ActivityServiceImplTest extends TestCase activityService = (ActivityService)ctx.getBean("activityService"); scriptService = (ScriptService)ctx.getBean("ScriptService"); siteService = (SiteService)ctx.getBean("SiteService"); + nodeArchiveService = (NodeArchiveService)ctx.getBean("nodeArchiveService"); postDAO = (ActivityPostDAO)ctx.getBean("postDAO"); @@ -145,7 +149,9 @@ public class ActivityServiceImplTest extends TestCase assertNotNull(siteFeedEntries); assertTrue(siteFeedEntries.isEmpty()); + SiteInfo siteInfo = siteService.getSite(siteId); siteService.deleteSite(siteId); + nodeArchiveService.purgeArchivedNode(nodeArchiveService.getArchivedNode(siteInfo.getNodeRef())); } public void testGetEmptyUserFeed() throws Exception diff --git a/source/test-java/org/alfresco/repo/activities/feed/cleanup/AbstractFeedCleanerTest.java b/source/test-java/org/alfresco/repo/activities/feed/cleanup/AbstractFeedCleanerTest.java index f0366e39b7..4374d3f2b7 100644 --- a/source/test-java/org/alfresco/repo/activities/feed/cleanup/AbstractFeedCleanerTest.java +++ b/source/test-java/org/alfresco/repo/activities/feed/cleanup/AbstractFeedCleanerTest.java @@ -30,11 +30,13 @@ import org.alfresco.model.ContentModel; import org.alfresco.repo.domain.activities.ActivityFeedDAO; import org.alfresco.repo.domain.activities.ActivityFeedEntity; import org.alfresco.repo.lock.JobLockService; +import org.alfresco.repo.node.archive.NodeArchiveService; import org.alfresco.repo.policy.PolicyComponent; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.transaction.RetryingTransactionHelper; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.security.PersonService; +import org.alfresco.service.cmr.site.SiteInfo; import org.alfresco.service.cmr.site.SiteService; import org.alfresco.service.cmr.site.SiteVisibility; import org.alfresco.util.ApplicationContextHelper; @@ -61,7 +63,8 @@ public abstract class AbstractFeedCleanerTest private SiteService siteService; private PersonService personService; protected RetryingTransactionHelper transactionHelper; - + private NodeArchiveService nodeArchiveService; + private static final String TEST_SITE = "testSite"; private static final String TEST_SITE_1 = TEST_SITE+"1"; @@ -91,7 +94,8 @@ public abstract class AbstractFeedCleanerTest personService = (PersonService) ctx.getBean("PersonService"); feedDAO = (ActivityFeedDAO) ctx.getBean("feedDAO"); transactionHelper = (RetryingTransactionHelper)ctx.getBean("retryingTransactionHelper"); - + nodeArchiveService = (NodeArchiveService)ctx.getBean("nodeArchiveService"); + // Let's shut down the scheduler so that we aren't competing with the scheduled versions of jobs (ie. feed cleaner) Scheduler scheduler = (Scheduler) ctx.getBean("schedulerFactory"); scheduler.shutdown(); @@ -124,9 +128,11 @@ public abstract class AbstractFeedCleanerTest for (int i = 1; i <= 7; i++) { - if (siteService.getSite("testSite"+i) != null) + SiteInfo site = siteService.getSite("testSite"+i); + if (site != null) { siteService.deleteSite("testSite"+i); + nodeArchiveService.purgeArchivedNode(nodeArchiveService.getArchivedNode(site.getNodeRef())); } } @@ -372,8 +378,10 @@ public abstract class AbstractFeedCleanerTest assertEquals(site4FeedCnt, feedDAO.selectSiteFeedEntries(TEST_SITE_4, -1).size()); assertEquals(site4FeedCnt+site5FeedCnt, feedDAO.selectUserFeedEntries(TEST_USER_D, null, false, false,-1L, -1).size()); + SiteInfo site = siteService.getSite(TEST_SITE_4); // delete the site siteService.deleteSite(TEST_SITE_4); + nodeArchiveService.purgeArchivedNode(nodeArchiveService.getArchivedNode(site.getNodeRef())); // note: site feed cleanup is done in separate txn after commit transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback() diff --git a/source/test-java/org/alfresco/repo/googledocs/GoogleDocumentServiceSystemTest.java b/source/test-java/org/alfresco/repo/googledocs/GoogleDocumentServiceSystemTest.java index 31275a9c05..59e0ba316d 100644 --- a/source/test-java/org/alfresco/repo/googledocs/GoogleDocumentServiceSystemTest.java +++ b/source/test-java/org/alfresco/repo/googledocs/GoogleDocumentServiceSystemTest.java @@ -32,6 +32,7 @@ import org.alfresco.model.ContentModel; import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.content.transform.AbstractContentTransformerTest; import org.alfresco.repo.management.subsystems.ApplicationContextFactory; +import org.alfresco.repo.node.archive.NodeArchiveService; import org.alfresco.repo.rendition.executer.AbstractRenderingEngine; import org.alfresco.repo.rendition.executer.ReformatRenderingEngine; import org.alfresco.repo.security.authentication.AuthenticationUtil; @@ -47,6 +48,7 @@ import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.security.MutableAuthenticationService; import org.alfresco.service.cmr.security.PersonService; +import org.alfresco.service.cmr.site.SiteInfo; import org.alfresco.service.cmr.site.SiteService; import org.alfresco.service.cmr.site.SiteVisibility; import org.alfresco.service.namespace.NamespaceService; @@ -73,6 +75,7 @@ public class GoogleDocumentServiceSystemTest extends TestCase implements GoogleD private PersonService personService; private ApplicationContextFactory subsystem; private RenditionService renditionService; + private NodeArchiveService nodeArchiveService; private static final String USER_ONE = "GoogleDocUserOne"; private static final String USER_TWO = "GoogleDocUserTwo"; @@ -105,6 +108,7 @@ public class GoogleDocumentServiceSystemTest extends TestCase implements GoogleD authenticationService = (MutableAuthenticationService)appContext.getBean("authenticationService"); personService = (PersonService)appContext.getBean("personService"); renditionService = (RenditionService)appContext.getBean("renditionService"); + nodeArchiveService = (NodeArchiveService)appContext.getBean("nodeArchiveService"); // Start the user transaction userTransaction = transactionService.getUserTransaction(); @@ -206,12 +210,14 @@ public class GoogleDocumentServiceSystemTest extends TestCase implements GoogleD @Override protected void tearDown() throws Exception { + SiteInfo siteInfo = siteService.getSite(siteId); siteService.deleteSite(siteId); if (userTransaction != null) { userTransaction.commit(); } + nodeArchiveService.purgeArchivedNode(nodeArchiveService.getArchivedNode(siteInfo.getNodeRef())); } private boolean isGoogleServiceAvailable() diff --git a/source/test-java/org/alfresco/repo/publishing/flickr/FlickrTest.java b/source/test-java/org/alfresco/repo/publishing/flickr/FlickrTest.java index 0afae023ff..4789fbb887 100644 --- a/source/test-java/org/alfresco/repo/publishing/flickr/FlickrTest.java +++ b/source/test-java/org/alfresco/repo/publishing/flickr/FlickrTest.java @@ -25,6 +25,7 @@ import java.util.Map; import org.alfresco.model.ContentModel; import org.alfresco.repo.content.MimetypeMap; +import org.alfresco.repo.node.archive.NodeArchiveService; import org.alfresco.repo.publishing.Environment; import org.alfresco.repo.publishing.PublishingModel; import org.alfresco.repo.publishing.PublishingQueueImpl; @@ -39,6 +40,7 @@ import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.site.SiteInfo; import org.alfresco.service.cmr.site.SiteService; import org.alfresco.service.cmr.site.SiteVisibility; import org.alfresco.service.namespace.NamespaceService; @@ -67,6 +69,7 @@ public class FlickrTest extends BaseSpringTest protected PublishingQueueImpl queue; protected Environment environment; protected NodeRef docLib; + protected NodeArchiveService nodeArchiveService; private ChannelService channelService; @@ -76,6 +79,7 @@ public class FlickrTest extends BaseSpringTest { serviceRegistry = (ServiceRegistry) getApplicationContext().getBean("ServiceRegistry"); channelService = (ChannelService) getApplicationContext().getBean("channelService"); + nodeArchiveService = (NodeArchiveService) getApplicationContext().getBean("nodeArchiveService"); AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); siteService = serviceRegistry.getSiteService(); fileFolderService = serviceRegistry.getFileFolderService(); @@ -90,7 +94,12 @@ public class FlickrTest extends BaseSpringTest public void onTearDown() { - siteService.deleteSite(siteId); + SiteInfo siteInfo = siteService.getSite(siteId); + if (siteInfo != null) + { + siteService.deleteSite(siteId); + nodeArchiveService.purgeArchivedNode(nodeArchiveService.getArchivedNode(siteInfo.getNodeRef())); + } } public void testBlank() diff --git a/source/test-java/org/alfresco/repo/publishing/slideshare/SlideShareTest.java b/source/test-java/org/alfresco/repo/publishing/slideshare/SlideShareTest.java index e923d5b4e2..e35409238d 100644 --- a/source/test-java/org/alfresco/repo/publishing/slideshare/SlideShareTest.java +++ b/source/test-java/org/alfresco/repo/publishing/slideshare/SlideShareTest.java @@ -29,6 +29,7 @@ import java.util.TreeMap; import org.alfresco.model.ContentModel; import org.alfresco.repo.content.MimetypeMap; +import org.alfresco.repo.node.archive.NodeArchiveService; import org.alfresco.repo.publishing.Environment; import org.alfresco.repo.publishing.PublishingModel; import org.alfresco.repo.publishing.PublishingQueueImpl; @@ -44,6 +45,7 @@ import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.site.SiteInfo; import org.alfresco.service.cmr.site.SiteService; import org.alfresco.service.cmr.site.SiteVisibility; import org.alfresco.service.namespace.NamespaceService; @@ -75,6 +77,7 @@ public class SlideShareTest extends BaseSpringTest protected NodeRef docLib; protected Map testFiles = new TreeMap(); protected Map testNodeMap = new HashMap(); + protected NodeArchiveService nodeArchiveService; private ChannelService channelService; @@ -84,6 +87,7 @@ public class SlideShareTest extends BaseSpringTest { serviceRegistry = (ServiceRegistry) getApplicationContext().getBean("ServiceRegistry"); channelService = (ChannelService) getApplicationContext().getBean("channelService"); + nodeArchiveService = (NodeArchiveService) getApplicationContext().getBean("nodeArchiveService"); AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); siteService = serviceRegistry.getSiteService(); fileFolderService = serviceRegistry.getFileFolderService(); @@ -103,7 +107,12 @@ public class SlideShareTest extends BaseSpringTest public void onTearDown() { - siteService.deleteSite(siteId); + SiteInfo siteInfo = siteService.getSite(siteId); + if (siteInfo != null) + { + siteService.deleteSite(siteId); + nodeArchiveService.purgeArchivedNode(nodeArchiveService.getArchivedNode(siteInfo.getNodeRef())); + } } public void testBlank() diff --git a/source/test-java/org/alfresco/repo/publishing/youtube/YouTubeTest.java b/source/test-java/org/alfresco/repo/publishing/youtube/YouTubeTest.java index 297db0fea0..f7831a16b8 100644 --- a/source/test-java/org/alfresco/repo/publishing/youtube/YouTubeTest.java +++ b/source/test-java/org/alfresco/repo/publishing/youtube/YouTubeTest.java @@ -24,6 +24,7 @@ import java.util.HashMap; import java.util.Map; import org.alfresco.model.ContentModel; +import org.alfresco.repo.node.archive.NodeArchiveService; import org.alfresco.repo.publishing.Environment; import org.alfresco.repo.publishing.PublishingModel; import org.alfresco.repo.publishing.PublishingQueueImpl; @@ -38,6 +39,7 @@ import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.site.SiteInfo; import org.alfresco.service.cmr.site.SiteService; import org.alfresco.service.cmr.site.SiteVisibility; import org.alfresco.service.namespace.NamespaceService; @@ -66,6 +68,7 @@ public class YouTubeTest extends BaseSpringTest protected PublishingQueueImpl queue; protected Environment environment; protected NodeRef docLib; + protected NodeArchiveService nodeArchiveService; private ChannelService channelService; @@ -75,6 +78,7 @@ public class YouTubeTest extends BaseSpringTest { serviceRegistry = (ServiceRegistry) getApplicationContext().getBean("ServiceRegistry"); channelService = (ChannelService) getApplicationContext().getBean("channelService"); + nodeArchiveService = (NodeArchiveService) getApplicationContext().getBean("nodeArchiveService"); AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName()); siteService = serviceRegistry.getSiteService(); fileFolderService = serviceRegistry.getFileFolderService(); @@ -89,7 +93,12 @@ public class YouTubeTest extends BaseSpringTest public void onTearDown() { - siteService.deleteSite(siteId); + SiteInfo siteInfo = siteService.getSite(siteId); + if (siteInfo != null) + { + siteService.deleteSite(siteId); + nodeArchiveService.purgeArchivedNode(nodeArchiveService.getArchivedNode(siteInfo.getNodeRef())); + } } public void testBlank() diff --git a/source/test-java/org/alfresco/repo/security/authority/AuthorityServiceTest.java b/source/test-java/org/alfresco/repo/security/authority/AuthorityServiceTest.java index 81521ace94..9d9e357d93 100644 --- a/source/test-java/org/alfresco/repo/security/authority/AuthorityServiceTest.java +++ b/source/test-java/org/alfresco/repo/security/authority/AuthorityServiceTest.java @@ -39,6 +39,7 @@ import org.alfresco.model.ContentModel; import org.alfresco.query.PagingRequest; import org.alfresco.query.PagingResults; import org.alfresco.repo.domain.permissions.AclDAO; +import org.alfresco.repo.node.archive.NodeArchiveService; import org.alfresco.repo.security.authentication.AuthenticationComponent; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.MutableAuthenticationDao; @@ -48,6 +49,7 @@ import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; import org.alfresco.service.cmr.security.AuthorityService; import org.alfresco.service.cmr.security.AuthorityType; @@ -78,6 +80,7 @@ public class AuthorityServiceTest extends TestCase private AclDAO aclDaoComponent; private NodeService nodeService; private AuthorityBridgeTableAsynchronouslyRefreshedCache authorityBridgeTableCache; + private NodeArchiveService nodeArchiveService; public AuthorityServiceTest() { @@ -110,10 +113,14 @@ public class AuthorityServiceTest extends TestCase aclDaoComponent = (AclDAO) ctx.getBean("aclDAO"); nodeService = (NodeService) ctx.getBean("nodeService"); authorityBridgeTableCache = (AuthorityBridgeTableAsynchronouslyRefreshedCache) ctx.getBean("authorityBridgeTableCache"); + nodeArchiveService = (NodeArchiveService) ctx.getBean("nodeArchiveService"); String defaultAdminUser = AuthenticationUtil.getAdminUserName(); AuthenticationUtil.setFullyAuthenticatedUser(defaultAdminUser); + // cleanup trashcan + nodeArchiveService.purgeAllArchivedNodes(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE); + // note: currently depends on any existing (and/or bootstrap) group data - eg. default site "swsdp" (Sample Web Site Design Project) SiteService siteService = (SiteService) ctx.getBean("SiteService"); SITE_CNT = siteService.listSites(defaultAdminUser).size(); diff --git a/source/test-java/org/alfresco/repo/site/SiteServiceImplTest.java b/source/test-java/org/alfresco/repo/site/SiteServiceImplTest.java index 3ab6adafb8..ea56368729 100644 --- a/source/test-java/org/alfresco/repo/site/SiteServiceImplTest.java +++ b/source/test-java/org/alfresco/repo/site/SiteServiceImplTest.java @@ -800,9 +800,8 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest { return authorityService.createAuthority(AuthorityType.GROUP, testGroupName); } - }, AuthenticationUtil.getAdminUserName()); - + // Create a test site String siteShortName = "testUpdateSite"; this.siteService.createSite(TEST_SITE_PRESET, siteShortName, TEST_TITLE, TEST_DESCRIPTION, SiteVisibility.PUBLIC); @@ -817,14 +816,15 @@ public class SiteServiceImplTest extends BaseAlfrescoSpringTest assertNull(this.siteService.getSite(siteShortName)); NodeRef archivedNodeRef = nodeArchiveService.getArchivedNode(siteInfo.getNodeRef()); assertTrue("Deleted sites can be recovered from the Trash.", nodeService.exists(archivedNodeRef)); - - // Ensure that all the related site groups are deleted - assertFalse(authorityService.authorityExists(((SiteServiceImpl)smallSiteService).getSiteGroup(siteShortName, true))); + + // related site groups should remain after site delete but should be deleted on site purge from trashcan. + // Such case is tested in SiteServiceImplMoreTest.deleteSiteAndRestoreEnsuringSiteGroupsAreRecovered + assertTrue(authorityService.authorityExists(((SiteServiceImpl)smallSiteService).getSiteGroup(siteShortName, true))); Set permissions = permissionService.getSettablePermissions(SiteModel.TYPE_SITE); for (String permission : permissions) { String siteRoleGroup = ((SiteServiceImpl)smallSiteService).getSiteRoleGroup(siteShortName, permission, true); - assertFalse(authorityService.authorityExists(siteRoleGroup)); + assertTrue(authorityService.authorityExists(siteRoleGroup)); } // Ensure that the added "normal" groups have not been deleted diff --git a/source/test-java/org/alfresco/repo/subscriptions/SubscriptionServiceActivitiesTest.java b/source/test-java/org/alfresco/repo/subscriptions/SubscriptionServiceActivitiesTest.java index 5d68fc4e3b..4295ed9f32 100644 --- a/source/test-java/org/alfresco/repo/subscriptions/SubscriptionServiceActivitiesTest.java +++ b/source/test-java/org/alfresco/repo/subscriptions/SubscriptionServiceActivitiesTest.java @@ -32,6 +32,7 @@ import org.alfresco.repo.activities.feed.local.LocalFeedTaskProcessor; import org.alfresco.repo.activities.post.lookup.PostLookup; import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.management.subsystems.ChildApplicationContextFactory; +import org.alfresco.repo.node.archive.NodeArchiveService; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.site.SiteModel; import org.alfresco.repo.transaction.RetryingTransactionHelper; @@ -111,7 +112,7 @@ public class SubscriptionServiceActivitiesTest protected static ContentService contentService; protected static PostLookup postLookup; protected static FeedGenerator feedGenerator; - protected static RetryingTransactionHelper transactionHelper; + protected NodeArchiveService nodeArchiveService; private static Scheduler QUARTZ_SCHEDULER; @@ -139,6 +140,7 @@ public class SubscriptionServiceActivitiesTest activityService = (ActivityService) ctx.getBean("activityService"); nodeService = (NodeService) ctx.getBean("NodeService"); contentService = (ContentService) ctx.getBean("ContentService"); + nodeArchiveService = (NodeArchiveService)ctx.getBean("nodeArchiveService"); transactionHelper = (RetryingTransactionHelper) ctx.getBean("retryingTransactionHelper"); ChildApplicationContextFactory activitiesFeed = (ChildApplicationContextFactory) ctx.getBean("ActivitiesFeed"); @@ -473,10 +475,12 @@ public class SubscriptionServiceActivitiesTest private void deleteSite(String siteShortName) { - if (siteService.getSite(siteShortName) != null) + SiteInfo siteInfo = siteService.getSite(siteShortName); + if (siteInfo != null) { log.debug("Deleting site: " + siteShortName); siteService.deleteSite(siteShortName); + nodeArchiveService.purgeArchivedNode(nodeArchiveService.getArchivedNode(siteInfo.getNodeRef())); } else { diff --git a/source/test-java/org/alfresco/util/test/junitrules/TemporarySites.java b/source/test-java/org/alfresco/util/test/junitrules/TemporarySites.java index 1d872bd2d3..0511f4ac83 100644 --- a/source/test-java/org/alfresco/util/test/junitrules/TemporarySites.java +++ b/source/test-java/org/alfresco/util/test/junitrules/TemporarySites.java @@ -26,6 +26,7 @@ import java.util.List; import org.alfresco.model.ContentModel; import org.alfresco.repo.domain.activities.ActivityPostDAO; import org.alfresco.repo.domain.activities.ActivityPostEntity; +import org.alfresco.repo.node.archive.NodeArchiveService; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.repo.site.SiteModel; @@ -74,6 +75,7 @@ public class TemporarySites extends AbstractPersonRule final RetryingTransactionHelper transactionHelper = (RetryingTransactionHelper) appContextRule.getApplicationContext().getBean("retryingTransactionHelper"); final SiteService siteService = appContextRule.getApplicationContext().getBean("siteService", SiteService.class); final ActivityPostDAO postDAO = appContextRule.getApplicationContext().getBean("postDAO", ActivityPostDAO.class); + final NodeArchiveService nodeArchiveService = (NodeArchiveService)appContextRule.getApplicationContext().getBean("nodeArchiveService"); // Run as admin to ensure all sites can be deleted irrespective of which user created them. AuthenticationUtil.runAs(new RunAsWork() @@ -112,6 +114,20 @@ public class TemporarySites extends AbstractPersonRule return null; } }); + transactionHelper.doInTransaction(new RetryingTransactionCallback() + { + @Override public Void execute() throws Throwable + { + for (SiteInfo site : temporarySites) + { + log.debug("Purging temporary site from trashcan: " + site.getShortName()); + nodeArchiveService.purgeArchivedNode(nodeArchiveService.getArchivedNode(site.getNodeRef())); + } + + return null; + } + }); + return null; } }, AuthenticationUtil.getAdminUserName());