diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/PublishUpdatesJobExecuter.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/PublishUpdatesJobExecuter.java index 1f130520af..3152644d7e 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/PublishUpdatesJobExecuter.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/job/PublishUpdatesJobExecuter.java @@ -130,41 +130,37 @@ public class PublishUpdatesJobExecuter extends RecordsManagementJobExecuter { if (nodeService.exists(nodeRef)) { - boolean publishing = (Boolean)nodeService.getProperty(nodeRef, PROP_PUBLISH_IN_PROGRESS); - if (!publishing) + // Mark the update node as publishing in progress + markPublishInProgress(nodeRef); + try { - // Mark the update node as publishing in progress - markPublishInProgress(nodeRef); - try + Date start = new Date(); + if (logger.isDebugEnabled()) { - Date start = new Date(); - if (logger.isDebugEnabled()) - { - logger.debug("Starting publish of updates ..."); - logger.debug(" - for " + nodeRef.toString()); - logger.debug(" - at " + start.toString()); - } - - // Publish updates - publishUpdates(nodeRef); - - - if (logger.isDebugEnabled()) - { - Date end = new Date(); - long duration = end.getTime() - start.getTime(); - logger.debug("Completed publish of updates ..."); - logger.debug(" - for " + nodeRef.toString()); - logger.debug(" - at " + end.toString()); - logger.debug(" - duration " + Long.toString(duration)); - } + logger.debug("Starting publish of updates ..."); + logger.debug(" - for " + nodeRef.toString()); + logger.debug(" - at " + start.toString()); } - finally + + // Publish updates + publishUpdates(nodeRef); + + + if (logger.isDebugEnabled()) { - // Ensure the update node has either completed the publish or is marked as no longer in progress - unmarkPublishInProgress(nodeRef); + Date end = new Date(); + long duration = end.getTime() - start.getTime(); + logger.debug("Completed publish of updates ..."); + logger.debug(" - for " + nodeRef.toString()); + logger.debug(" - at " + end.toString()); + logger.debug(" - duration " + Long.toString(duration)); } } + finally + { + // Ensure the update node has either completed the publish or is marked as no longer in progress + unmarkPublishInProgress(nodeRef); + } } } } @@ -221,13 +217,13 @@ public class PublishUpdatesJobExecuter extends RecordsManagementJobExecuter // Execute query to find updates awaiting publishing List resultNodes = null; - + SearchParameters searchParameters = new SearchParameters(); searchParameters.setQueryConsistency(QueryConsistency.TRANSACTIONAL); searchParameters.setQuery(query); searchParameters.addStore(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE); searchParameters.setLanguage(SearchService.LANGUAGE_FTS_ALFRESCO); - + try { ResultSet results = searchService.query(searchParameters); diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/job/AutomaticDispositionTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/job/AutomaticDispositionTest.java index 8cbad76b0f..6c1955da51 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/job/AutomaticDispositionTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/job/AutomaticDispositionTest.java @@ -18,8 +18,19 @@ */ package org.alfresco.module.org_alfresco_module_rm.test.integration.job; +import java.io.Serializable; +import java.util.HashMap; +import java.util.Map; + +import org.alfresco.module.org_alfresco_module_rm.action.impl.CutOffAction; import org.alfresco.module.org_alfresco_module_rm.audit.RecordsManagementAuditService; +import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionAction; +import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedule; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase; +import org.alfresco.module.org_alfresco_module_rm.test.util.CommonRMTestUtils; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.namespace.QName; +import org.alfresco.util.GUID; /** * Test automatic disposition via scheduled job. @@ -57,63 +68,62 @@ public class AutomaticDispositionTest extends BaseRMTestCase * Given there is a complete record eligible for cut off, when the correct frequency of time passes, then * the record will be automatically cut off */ -// FIXME!!!: Commented out. Will be fixed. -// public void testAutomaticCutOff() -// { -// doBehaviourDrivenTest(new BehaviourDrivenTest() -// { -// NodeRef sourceCategory; -// NodeRef sourceRecordFolder; -// NodeRef record; -// -// public void given() -// { -// // create test data -// sourceCategory = filePlanService.createRecordCategory(filePlan, GUID.generate()); -// DispositionSchedule dis = utils.createBasicDispositionSchedule(sourceCategory, GUID.generate(), GUID.generate(), true, false); -// Map adParams = new HashMap(3); -// adParams.put(PROP_DISPOSITION_ACTION_NAME, CutOffAction.NAME); -// adParams.put(PROP_DISPOSITION_DESCRIPTION, GUID.generate()); -// adParams.put(PROP_DISPOSITION_PERIOD, CommonRMTestUtils.PERIOD_IMMEDIATELY); -// dispositionService.addDispositionActionDefinition(dis, adParams); -// sourceRecordFolder = recordFolderService.createRecordFolder(sourceCategory, GUID.generate()); -// -// // create and complete record -// record = utils.createRecord(sourceRecordFolder, GUID.generate()); -// utils.completeRecord(record); -// -// // check the disposition action details -// DispositionAction dispositionAction = dispositionService.getNextDispositionAction(record); -// assertNotNull(dispositionAction); -// assertNotNull(CutOffAction.NAME, dispositionAction.getName()); -// assertTrue(dispositionService.isNextDispositionActionEligible(record)); -// } -// -// public void when() throws Exception -// { -// // sleep .. allowing the job time to execute -// Thread.sleep(30000); -// } -// -// public void then() -// { -// // record should now be cut off -// assertTrue(dispositionService.isDisposableItemCutoff(record)); -// -// // TODO uncomment and ensure is working -// -// //RecordsManagementAuditQueryParameters params = new RecordsManagementAuditQueryParameters(); -// //params.setEvent(CutOffAction.NAME); -// //params.setMaxEntries(1); -// //List entries = auditService.getAuditTrail(params); -// //assertNotNull(entries); -// //assertEquals(1, entries.size()); -// -// //RecordsManagementAuditEntry entry = entries.get(0); -// //assertEquals(record, entry.getNodeRef()); -// } -// }); -// } + public void testAutomaticCutOff() + { + doBehaviourDrivenTest(new BehaviourDrivenTest() + { + NodeRef sourceCategory; + NodeRef sourceRecordFolder; + NodeRef record; + + public void given() + { + // create test data + sourceCategory = filePlanService.createRecordCategory(filePlan, GUID.generate()); + DispositionSchedule dis = utils.createBasicDispositionSchedule(sourceCategory, GUID.generate(), GUID.generate(), true, false); + Map adParams = new HashMap(3); + adParams.put(PROP_DISPOSITION_ACTION_NAME, CutOffAction.NAME); + adParams.put(PROP_DISPOSITION_DESCRIPTION, GUID.generate()); + adParams.put(PROP_DISPOSITION_PERIOD, CommonRMTestUtils.PERIOD_IMMEDIATELY); + dispositionService.addDispositionActionDefinition(dis, adParams); + sourceRecordFolder = recordFolderService.createRecordFolder(sourceCategory, GUID.generate()); + + // create and complete record + record = utils.createRecord(sourceRecordFolder, GUID.generate()); + utils.completeRecord(record); + + // check the disposition action details + DispositionAction dispositionAction = dispositionService.getNextDispositionAction(record); + assertNotNull(dispositionAction); + assertNotNull(CutOffAction.NAME, dispositionAction.getName()); + assertTrue(dispositionService.isNextDispositionActionEligible(record)); + } + + public void when() throws Exception + { + // sleep .. allowing the job time to execute + Thread.sleep(30000); + } + + public void then() + { + // record should now be cut off + assertTrue(dispositionService.isDisposableItemCutoff(record)); + + // TODO uncomment and ensure is working + + //RecordsManagementAuditQueryParameters params = new RecordsManagementAuditQueryParameters(); + //params.setEvent(CutOffAction.NAME); + //params.setMaxEntries(1); + //List entries = auditService.getAuditTrail(params); + //assertNotNull(entries); + //assertEquals(1, entries.size()); + + //RecordsManagementAuditEntry entry = entries.get(0); + //assertEquals(record, entry.getNodeRef()); + } + }); + } // TODO automatic retain diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/DispositionServiceImplTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/DispositionServiceImplTest.java index 8e6ebc420e..a2cdf3cdb7 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/DispositionServiceImplTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/DispositionServiceImplTest.java @@ -36,6 +36,7 @@ import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionService import org.alfresco.module.org_alfresco_module_rm.disposition.property.DispositionProperty; import org.alfresco.module.org_alfresco_module_rm.dod5015.DOD5015Model; import org.alfresco.module.org_alfresco_module_rm.event.EventCompletionDetails; +import org.alfresco.module.org_alfresco_module_rm.job.PublishUpdatesJobExecuter; import org.alfresco.module.org_alfresco_module_rm.job.publish.PublishExecutor; import org.alfresco.module.org_alfresco_module_rm.job.publish.PublishExecutorRegistry; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; @@ -899,125 +900,124 @@ public class DispositionServiceImplTest extends BaseRMTestCase }); } -// private NodeRef testRM386RecordCategory; -// private DispositionSchedule testRM386DispositionSchedule; -// private NodeRef testRM386Record; + private NodeRef testRM386RecordCategory; + private DispositionSchedule testRM386DispositionSchedule; + private NodeRef testRM386Record; /** * Test to make sure all the search rollups are correct after schedule is updated * @throws Exception */ -// FIXME!!!: Commented out. Will be fixed. -// public void testRM386() throws Exception -// { -// doTestInTransaction(new Test() -// { -// @Override -// public Void run() throws Exception -// { -// testRM386RecordCategory = filePlanService.createRecordCategory(rmContainer, "RM386"); -// testRM386DispositionSchedule = utils.createBasicDispositionSchedule( -// testRM386RecordCategory, -// "disposition instructions", -// "disposition authority", -// true, // record level -// true); // set the default actions -// -// NodeRef recordFolder = recordFolderService.createRecordFolder(testRM386RecordCategory, "testRM386RecordFolder"); -// testRM386Record = utils.createRecord(recordFolder, "testRM386Record", "testRM386Record"); -// -// return null; -// } -// -// @SuppressWarnings("unchecked") -// @Override -// public void test(Void result) throws Exception -// { -// // Test the rollups for the record -// Map properties = nodeService.getProperties(testRM386Record); -// -// assertEquals(Boolean.TRUE, properties.get(PROP_RS_HAS_DISPOITION_SCHEDULE)); -// assertEquals(CommonRMTestUtils.DEFAULT_DISPOSITION_AUTHORITY, properties.get(PROP_RS_DISPOITION_AUTHORITY)); -// assertEquals(CommonRMTestUtils.DEFAULT_DISPOSITION_INSTRUCTIONS, properties.get(PROP_RS_DISPOITION_INSTRUCTIONS)); -// -// assertEquals("none", properties.get(PROP_RS_DISPOSITION_PERIOD)); -// assertEquals("0", properties.get(PROP_RS_DISPOSITION_PERIOD_EXPRESSION)); -// -// List events = (List)properties.get(PROP_RS_DISPOSITION_EVENTS); -// assertNotNull(events); -// assertEquals(1, events.size()); -// assertEquals(CommonRMTestUtils.DEFAULT_EVENT_NAME, events.get(0)); -// assertEquals(Boolean.FALSE, properties.get(PROP_RS_DISPOSITION_EVENTS_ELIGIBLE)); -// -// assertEquals("cutoff", properties.get(PROP_RS_DISPOSITION_ACTION_NAME)); -// assertNull(properties.get(PROP_RS_DISPOSITION_ACTION_AS_OF)); -// } -// }); -// -// doTestInTransaction(new Test() -// { -// @Override -// public DispositionActionDefinition run() throws Exception -// { -// DispositionActionDefinition actionDefinition = testRM386DispositionSchedule.getDispositionActionDefinitionByName("cutoff"); -// assertNotNull(actionDefinition); -// -// Map adParams = new HashMap(3); -// -// List events = new ArrayList(1); -// events.add(CommonRMTestUtils.DEFAULT_EVENT_NAME); -// events.add("obsolete"); -// adParams.put(PROP_DISPOSITION_EVENT, (Serializable)events); -// adParams.put(PROP_DISPOSITION_PERIOD, "week|1"); -// -// dispositionService.updateDispositionActionDefinition( -// actionDefinition, -// adParams); -// -// return actionDefinition; -// } -// -// @SuppressWarnings("unchecked") -// @Override -// public void test(DispositionActionDefinition result) throws Exception -// { -// DispositionActionDefinition actionDefinition = testRM386DispositionSchedule.getDispositionActionDefinitionByName("cutoff"); -// assertNotNull(actionDefinition); -// assertTrue(nodeService.hasAspect(actionDefinition.getNodeRef(), ASPECT_UNPUBLISHED_UPDATE)); -// -// // Publish the updates -// PublishUpdatesJobExecuter updater = (PublishUpdatesJobExecuter)applicationContext.getBean("publishUpdatesJobExecuter"); -// updater.executeImpl(); -// -// assertFalse(nodeService.hasAspect(actionDefinition.getNodeRef(), ASPECT_UNPUBLISHED_UPDATE)); -// -// // Check the record has been updated -// DispositionAction dispositionAction = dispositionService.getNextDispositionAction(testRM386Record); -// assertNotNull(dispositionAction); -// assertEquals("cutoff", dispositionAction.getName()); -// assertNotNull(dispositionAction.getAsOfDate()); -// assertEquals(2, dispositionAction.getEventCompletionDetails().size()); -// -// // Test the rollups for the record -// Map properties = nodeService.getProperties(testRM386Record); -// -// assertEquals(Boolean.TRUE, properties.get(PROP_RS_HAS_DISPOITION_SCHEDULE)); -// assertEquals(CommonRMTestUtils.DEFAULT_DISPOSITION_AUTHORITY, properties.get(PROP_RS_DISPOITION_AUTHORITY)); -// assertEquals(CommonRMTestUtils.DEFAULT_DISPOSITION_INSTRUCTIONS, properties.get(PROP_RS_DISPOITION_INSTRUCTIONS)); -// -// assertEquals("week", properties.get(PROP_RS_DISPOSITION_PERIOD)); -// assertEquals("1", properties.get(PROP_RS_DISPOSITION_PERIOD_EXPRESSION)); -// -// List events = (List)properties.get(PROP_RS_DISPOSITION_EVENTS); -// assertNotNull(events); -// assertEquals(2, events.size()); -// assertEquals(Boolean.FALSE, properties.get(PROP_RS_DISPOSITION_EVENTS_ELIGIBLE)); -// -// assertEquals("cutoff", properties.get(PROP_RS_DISPOSITION_ACTION_NAME)); -// assertNotNull(properties.get(PROP_RS_DISPOSITION_ACTION_AS_OF)); -// } -// }); -// -// } + public void testRM386() throws Exception + { + doTestInTransaction(new Test() + { + @Override + public Void run() throws Exception + { + testRM386RecordCategory = filePlanService.createRecordCategory(rmContainer, "RM386"); + testRM386DispositionSchedule = utils.createBasicDispositionSchedule( + testRM386RecordCategory, + "disposition instructions", + "disposition authority", + true, // record level + true); // set the default actions + + NodeRef recordFolder = recordFolderService.createRecordFolder(testRM386RecordCategory, "testRM386RecordFolder"); + testRM386Record = utils.createRecord(recordFolder, "testRM386Record", "testRM386Record"); + + return null; + } + + @SuppressWarnings("unchecked") + @Override + public void test(Void result) throws Exception + { + // Test the rollups for the record + Map properties = nodeService.getProperties(testRM386Record); + + assertEquals(Boolean.TRUE, properties.get(PROP_RS_HAS_DISPOITION_SCHEDULE)); + assertEquals(CommonRMTestUtils.DEFAULT_DISPOSITION_AUTHORITY, properties.get(PROP_RS_DISPOITION_AUTHORITY)); + assertEquals(CommonRMTestUtils.DEFAULT_DISPOSITION_INSTRUCTIONS, properties.get(PROP_RS_DISPOITION_INSTRUCTIONS)); + + assertEquals("none", properties.get(PROP_RS_DISPOSITION_PERIOD)); + assertEquals("0", properties.get(PROP_RS_DISPOSITION_PERIOD_EXPRESSION)); + + List events = (List)properties.get(PROP_RS_DISPOSITION_EVENTS); + assertNotNull(events); + assertEquals(1, events.size()); + assertEquals(CommonRMTestUtils.DEFAULT_EVENT_NAME, events.get(0)); + assertEquals(Boolean.FALSE, properties.get(PROP_RS_DISPOSITION_EVENTS_ELIGIBLE)); + + assertEquals("cutoff", properties.get(PROP_RS_DISPOSITION_ACTION_NAME)); + assertNull(properties.get(PROP_RS_DISPOSITION_ACTION_AS_OF)); + } + }); + + doTestInTransaction(new Test() + { + @Override + public DispositionActionDefinition run() throws Exception + { + DispositionActionDefinition actionDefinition = testRM386DispositionSchedule.getDispositionActionDefinitionByName("cutoff"); + assertNotNull(actionDefinition); + + Map adParams = new HashMap(3); + + List events = new ArrayList(1); + events.add(CommonRMTestUtils.DEFAULT_EVENT_NAME); + events.add("obsolete"); + adParams.put(PROP_DISPOSITION_EVENT, (Serializable)events); + adParams.put(PROP_DISPOSITION_PERIOD, "week|1"); + + dispositionService.updateDispositionActionDefinition( + actionDefinition, + adParams); + + return actionDefinition; + } + + @SuppressWarnings("unchecked") + @Override + public void test(DispositionActionDefinition result) throws Exception + { + DispositionActionDefinition actionDefinition = testRM386DispositionSchedule.getDispositionActionDefinitionByName("cutoff"); + assertNotNull(actionDefinition); + assertTrue(nodeService.hasAspect(actionDefinition.getNodeRef(), ASPECT_UNPUBLISHED_UPDATE)); + + // Publish the updates + PublishUpdatesJobExecuter updater = (PublishUpdatesJobExecuter)applicationContext.getBean("publishUpdatesJobExecuter"); + updater.executeImpl(); + + assertFalse(nodeService.hasAspect(actionDefinition.getNodeRef(), ASPECT_UNPUBLISHED_UPDATE)); + + // Check the record has been updated + DispositionAction dispositionAction = dispositionService.getNextDispositionAction(testRM386Record); + assertNotNull(dispositionAction); + assertEquals("cutoff", dispositionAction.getName()); + assertNotNull(dispositionAction.getAsOfDate()); + assertEquals(2, dispositionAction.getEventCompletionDetails().size()); + + // Test the rollups for the record + Map properties = nodeService.getProperties(testRM386Record); + + assertEquals(Boolean.TRUE, properties.get(PROP_RS_HAS_DISPOITION_SCHEDULE)); + assertEquals(CommonRMTestUtils.DEFAULT_DISPOSITION_AUTHORITY, properties.get(PROP_RS_DISPOITION_AUTHORITY)); + assertEquals(CommonRMTestUtils.DEFAULT_DISPOSITION_INSTRUCTIONS, properties.get(PROP_RS_DISPOITION_INSTRUCTIONS)); + + assertEquals("week", properties.get(PROP_RS_DISPOSITION_PERIOD)); + assertEquals("1", properties.get(PROP_RS_DISPOSITION_PERIOD_EXPRESSION)); + + List events = (List)properties.get(PROP_RS_DISPOSITION_EVENTS); + assertNotNull(events); + assertEquals(2, events.size()); + assertEquals(Boolean.FALSE, properties.get(PROP_RS_DISPOSITION_EVENTS_ELIGIBLE)); + + assertEquals("cutoff", properties.get(PROP_RS_DISPOSITION_ACTION_NAME)); + assertNotNull(properties.get(PROP_RS_DISPOSITION_ACTION_AS_OF)); + } + }); + + } } diff --git a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/RecordsManagementSearchServiceImplTest.java b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/RecordsManagementSearchServiceImplTest.java index 299b975b28..012db1a363 100644 --- a/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/RecordsManagementSearchServiceImplTest.java +++ b/rm-server/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/RecordsManagementSearchServiceImplTest.java @@ -136,30 +136,29 @@ public class RecordsManagementSearchServiceImplTest extends BaseRMTestCase super.tearDown(); } -// FIXME!!!: Commented out. Will be fixed. -// public void testSearch() -// { -// // Full text search -// doTestInTransaction(new Test() -// { -// @Override -// public Void run() -// { -// String query = "keywords:\"elephant\""; -// RecordsManagementSearchParameters params = new RecordsManagementSearchParameters(); -// params.setIncludeUndeclaredRecords(true); -// List> results = rmSearchService.search(siteId, query, params); -// assertNotNull(results); -// assertEquals(2, results.size()); -// -// return null; -// } -// }, AuthenticationUtil.getSystemUserName()); -// -// // Property search -// -// // -// } + public void testSearch() + { + // Full text search + doTestInTransaction(new Test() + { + @Override + public Void run() + { + String query = "keywords:\"elephant\""; + RecordsManagementSearchParameters params = new RecordsManagementSearchParameters(); + params.setIncludeUndeclaredRecords(true); + List> results = rmSearchService.search(siteId, query, params); + assertNotNull(results); + assertEquals(2, results.size()); + + return null; + } + }, AuthenticationUtil.getSystemUserName()); + + // Property search + + // + } public void testSaveSearch() { diff --git a/rm-server/test/resources/alfresco-global-test.properties b/rm-server/test/resources/alfresco-global-test.properties new file mode 100644 index 0000000000..70f77c2c8f --- /dev/null +++ b/rm-server/test/resources/alfresco-global-test.properties @@ -0,0 +1 @@ +index.subsystem.name=buildonly \ No newline at end of file diff --git a/rm-server/test/resources/test-context.xml b/rm-server/test/resources/test-context.xml index 12bbef5412..f25cd8f192 100644 --- a/rm-server/test/resources/test-context.xml +++ b/rm-server/test/resources/test-context.xml @@ -218,4 +218,13 @@ + + + + classpath:alfresco-global-test.properties + + + + + \ No newline at end of file