Merged HEAD-BUG-FIX (5.0/Cloud) to HEAD (5.0/Cloud)

78353: Merged V4.2-BUG-FIX (4.2.4) to HEAD-BUG-FIX (5.0/Cloud)
      76112: Merged DEV to V4.2-BUG-FIX (4.2.3)
         76109: MNT-11727: CMIS change log doesn't include change events for update operations
         Move and rename operations should be shown as an UPDATE in the CMIS change log. Added unit test.


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@82528 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Erik Winlof
2014-09-03 11:36:33 +00:00
parent 88e47210dc
commit c941d1be30
2 changed files with 92 additions and 2 deletions

View File

@@ -23,6 +23,8 @@
<PathMap source="/alfresco-api/post/PermissionService/setInheritParentPermissions" target="/CMISChangeLog/SECURITY" /> <PathMap source="/alfresco-api/post/PermissionService/setInheritParentPermissions" target="/CMISChangeLog/SECURITY" />
<PathMap source="/alfresco-api/post/PermissionService/clearPermission" target="/CMISChangeLog/SECURITY" /> <PathMap source="/alfresco-api/post/PermissionService/clearPermission" target="/CMISChangeLog/SECURITY" />
<PathMap source="/alfresco-api/post/PermissionService/deletePermission" target="/CMISChangeLog/SECURITY" /> <PathMap source="/alfresco-api/post/PermissionService/deletePermission" target="/CMISChangeLog/SECURITY" />
<PathMap source="/alfresco-api/post/NodeService/moveNode" target="/CMISChangeLog/UPDATED" />
<PathMap source="/alfresco-api/post/FileFolderService/moveFrom" target="/CMISChangeLog/UPDATED" />
</PathMappings> </PathMappings>
<Application name="CMISChangeLog" key="CMISChangeLog"> <Application name="CMISChangeLog" key="CMISChangeLog">
@@ -40,6 +42,12 @@
<AuditPath key="nodeRef"> <AuditPath key="nodeRef">
<RecordValue key="value" dataExtractor="changeLog" /> <RecordValue key="value" dataExtractor="changeLog" />
</AuditPath> </AuditPath>
<AuditPath key="nodeToMoveRef">
<RecordValue key="value" dataExtractor="changeLog" />
</AuditPath>
<AuditPath key="sourceNodeRef">
<RecordValue key="value" dataExtractor="changeLog" />
</AuditPath>
</AuditPath> </AuditPath>
<AuditPath key="error"> <AuditPath key="error">
<RecordValue key="value" dataExtractor="nullValue" /> <RecordValue key="value" dataExtractor="nullValue" />

View File

@@ -96,6 +96,7 @@ import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition; import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
import org.apache.chemistry.opencmis.commons.enums.AclPropagation; import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
import org.apache.chemistry.opencmis.commons.enums.Action; import org.apache.chemistry.opencmis.commons.enums.Action;
import org.apache.chemistry.opencmis.commons.enums.ChangeType;
import org.apache.chemistry.opencmis.commons.enums.CmisVersion; import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships; import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
import org.apache.chemistry.opencmis.commons.enums.VersioningState; import org.apache.chemistry.opencmis.commons.enums.VersioningState;
@@ -2299,6 +2300,87 @@ public class CMISTest
}, "user2", "tenant2"); }, "user2", "tenant2");
} }
/**
* MNT-11727: move and rename operations should be shown as an UPDATE in the CMIS change log
*/
@Test
public void tesMoveRenameWithCMISshouldBeAuditedAsUPDATE() throws Exception
{
// setUp audit subsystem
setupAudit();
AuthenticationUtil.pushAuthentication();
AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName());
try
{
assertTrue("Audit is not enabled", auditSubsystem.isAuditEnabled());
assertNotNull("CMIS audit is not enabled", auditSubsystem.getAuditApplicationByName("CMISChangeLog"));
NodeRef companyHomeNodeRef = repositoryHelper.getCompanyHome();
String folder = GUID.generate();
FileInfo folderInfo = fileFolderService.create(companyHomeNodeRef, folder, ContentModel.TYPE_FOLDER);
final String actualToken = changeLogService.getLastChangeLogToken();
String content = GUID.generate();
FileInfo document = fileFolderService.create(folderInfo.getNodeRef(), content, ContentModel.TYPE_CONTENT);
assertNotNull(document);
nodeService.setProperty(document.getNodeRef(), ContentModel.PROP_NAME, content);
Holder<String> changeLogToken = new Holder<String>();
changeLogToken.setValue(actualToken);
ObjectList changeLog = CMISTest.this.cmisConnector.getContentChanges(changeLogToken, new BigInteger("0"));
List<ObjectData> events = changeLog.getObjects();
int count = events.size();
// it should be 3 entries: 1 for previous folder create, 1 new CREATE (for document create)
// and 1 NEW UPDATE
assertEquals(3, count);
assertEquals(events.get(0).getProperties().getPropertyList().get(0).getValues().get(0), folderInfo.getNodeRef().getId());
assertEquals(events.get(0).getChangeEventInfo().getChangeType(), ChangeType.CREATED);
assertTrue(((String) events.get(1).getProperties().getPropertyList().get(0).getValues().get(0)).contains(document.getNodeRef().getId()));
assertEquals(events.get(1).getChangeEventInfo().getChangeType(), ChangeType.CREATED);
assertTrue(((String) events.get(2).getProperties().getPropertyList().get(0).getValues().get(0)).contains(document.getNodeRef().getId()));
assertEquals(events.get(2).getChangeEventInfo().getChangeType(), ChangeType.UPDATED);
// test rename
final String actualToken2 = changeLogService.getLastChangeLogToken();
nodeService.setProperty(document.getNodeRef(), ContentModel.PROP_NAME, content + "-updated");
changeLogToken = new Holder<String>();
changeLogToken.setValue(actualToken2);
changeLog = CMISTest.this.cmisConnector.getContentChanges(changeLogToken, new BigInteger("0"));
events = changeLog.getObjects();
count = events.size();
assertEquals(2, count);
assertEquals("Rename operation should be shown as an UPDATE in the CMIS change log", events.get(1).getChangeEventInfo().getChangeType(), ChangeType.UPDATED);
// test move
String targetFolder = GUID.generate();
FileInfo targetFolderInfo = fileFolderService.create(companyHomeNodeRef, targetFolder, ContentModel.TYPE_FOLDER);
final String actualToken3 = changeLogService.getLastChangeLogToken();
nodeService.moveNode(document.getNodeRef(), targetFolderInfo.getNodeRef(), ContentModel.ASSOC_CONTAINS, ContentModel.ASSOC_CONTAINS);
changeLogToken = new Holder<String>();
changeLogToken.setValue(actualToken3);
changeLog = CMISTest.this.cmisConnector.getContentChanges(changeLogToken, new BigInteger("0"));
events = changeLog.getObjects();
count = events.size();
assertEquals(2, count);
assertEquals("Move operation should be shown as an UPDATE in the CMIS change log", events.get(1).getChangeEventInfo().getChangeType(), ChangeType.UPDATED);
}
finally
{
auditSubsystem.destroy();
AuthenticationUtil.popAuthentication();
}
}
/** /**
* MNT-11304: Test that Alfresco has no default boundaries for decimals * MNT-11304: Test that Alfresco has no default boundaries for decimals
* @throws Exception * @throws Exception