MNT-16375 "CMISChangelog auditing enablement impacts CMIS connection if quantity records are excessive" fix tests

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@129392 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Steven Glover
2016-08-10 07:57:29 +00:00
parent e559032bf9
commit bf9655a9eb
2 changed files with 268 additions and 136 deletions

View File

@@ -1,3 +1,4 @@
/* /*
* #%L * #%L
* Alfresco Repository * Alfresco Repository
@@ -26,135 +27,140 @@
package org.alfresco.opencmis; package org.alfresco.opencmis;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;
import java.io.File; import java.io.File;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.BigInteger; import java.math.BigInteger;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.GregorianCalendar; import java.util.GregorianCalendar;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import org.alfresco.model.ContentModel; import org.alfresco.model.ContentModel;
import org.alfresco.opencmis.dictionary.CMISDictionaryService; import org.alfresco.opencmis.dictionary.CMISDictionaryService;
import org.alfresco.opencmis.dictionary.PropertyDefinitionWrapper; import org.alfresco.opencmis.dictionary.PropertyDefinitionWrapper;
import org.alfresco.opencmis.dictionary.TypeDefinitionWrapper; import org.alfresco.opencmis.dictionary.TypeDefinitionWrapper;
import org.alfresco.opencmis.search.CMISQueryOptions; import org.alfresco.opencmis.search.CMISQueryOptions;
import org.alfresco.opencmis.search.CMISQueryOptions.CMISQueryMode; import org.alfresco.opencmis.search.CMISQueryOptions.CMISQueryMode;
import org.alfresco.repo.action.evaluator.ComparePropertyValueEvaluator; import org.alfresco.repo.action.evaluator.ComparePropertyValueEvaluator;
import org.alfresco.repo.action.executer.AddFeaturesActionExecuter; import org.alfresco.repo.action.executer.AddFeaturesActionExecuter;
import org.alfresco.repo.audit.AuditComponent; import org.alfresco.repo.audit.AuditComponent;
import org.alfresco.repo.audit.AuditServiceImpl; import org.alfresco.repo.audit.AuditComponentImpl;
import org.alfresco.repo.audit.UserAuditFilter; import org.alfresco.repo.audit.AuditServiceImpl;
import org.alfresco.repo.audit.model.AuditModelRegistryImpl; import org.alfresco.repo.audit.UserAuditFilter;
import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.audit.model.AuditModelRegistryImpl;
import org.alfresco.repo.dictionary.DictionaryDAO; import org.alfresco.repo.batch.BatchProcessWorkProvider;
import org.alfresco.repo.dictionary.M2Model; import org.alfresco.repo.batch.BatchProcessor;
import org.alfresco.repo.domain.audit.AuditDAO; import org.alfresco.repo.content.MimetypeMap;
import org.alfresco.repo.domain.node.NodeDAO; import org.alfresco.repo.dictionary.DictionaryDAO;
import org.alfresco.repo.model.Repository; import org.alfresco.repo.dictionary.M2Model;
import org.alfresco.repo.node.archive.NodeArchiveService; import org.alfresco.repo.domain.audit.AuditDAO;
import org.alfresco.repo.security.authentication.AuthenticationContext; import org.alfresco.repo.domain.node.NodeDAO;
import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.model.Repository;
import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; import org.alfresco.repo.node.archive.NodeArchiveService;
import org.alfresco.repo.tenant.TenantAdminService; import org.alfresco.repo.security.authentication.AuthenticationContext;
import org.alfresco.repo.tenant.TenantService; import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.tenant.TenantUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork;
import org.alfresco.repo.tenant.TenantUtil.TenantRunAsWork; import org.alfresco.repo.tenant.TenantAdminService;
import org.alfresco.repo.transaction.RetryingTransactionHelper; import org.alfresco.repo.tenant.TenantService;
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.repo.tenant.TenantUtil;
import org.alfresco.repo.version.VersionableAspectTest; import org.alfresco.repo.tenant.TenantUtil.TenantRunAsWork;
import org.alfresco.repo.workflow.WorkflowDeployer; import org.alfresco.repo.transaction.RetryingTransactionHelper;
import org.alfresco.service.cmr.action.ActionCondition; import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
import org.alfresco.service.cmr.action.ActionService; import org.alfresco.repo.version.VersionableAspectTest;
import org.alfresco.service.cmr.dictionary.AspectDefinition; import org.alfresco.repo.workflow.WorkflowDeployer;
import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.action.ActionCondition;
import org.alfresco.service.cmr.lock.LockService; import org.alfresco.service.cmr.action.ActionService;
import org.alfresco.service.cmr.lock.LockType; import org.alfresco.service.cmr.dictionary.AspectDefinition;
import org.alfresco.service.cmr.model.FileFolderService; import org.alfresco.service.cmr.dictionary.DictionaryService;
import org.alfresco.service.cmr.model.FileInfo; import org.alfresco.service.cmr.lock.LockService;
import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.lock.LockType;
import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.repository.ContentWriter; import org.alfresco.service.cmr.model.FileInfo;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.rule.Rule; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.rule.RuleService; import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.rule.RuleType; import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.search.SearchService; import org.alfresco.service.cmr.rule.Rule;
import org.alfresco.service.cmr.security.AccessPermission; import org.alfresco.service.cmr.rule.RuleService;
import org.alfresco.service.cmr.security.AuthorityService; import org.alfresco.service.cmr.rule.RuleType;
import org.alfresco.service.cmr.security.AuthorityType; import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.service.cmr.security.AccessPermission;
import org.alfresco.service.cmr.tagging.TaggingService; import org.alfresco.service.cmr.security.AuthorityService;
import org.alfresco.service.cmr.version.Version; import org.alfresco.service.cmr.security.AuthorityType;
import org.alfresco.service.cmr.version.VersionService; import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.version.VersionType; import org.alfresco.service.cmr.tagging.TaggingService;
import org.alfresco.service.cmr.workflow.WorkflowAdminService; import org.alfresco.service.cmr.version.Version;
import org.alfresco.service.cmr.workflow.WorkflowService; import org.alfresco.service.cmr.version.VersionService;
import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.cmr.version.VersionType;
import org.alfresco.service.namespace.QName; import org.alfresco.service.cmr.workflow.WorkflowAdminService;
import org.alfresco.service.transaction.TransactionService; import org.alfresco.service.cmr.workflow.WorkflowService;
import org.alfresco.util.ApplicationContextHelper; import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.util.Pair; import org.alfresco.service.namespace.QName;
import org.apache.chemistry.opencmis.commons.PropertyIds; import org.alfresco.service.transaction.TransactionService;
import org.apache.chemistry.opencmis.commons.data.Ace; import org.alfresco.util.ApplicationContextHelper;
import org.apache.chemistry.opencmis.commons.data.AllowableActions; import org.alfresco.util.Pair;
import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement; import org.apache.chemistry.opencmis.commons.PropertyIds;
import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData; import org.apache.chemistry.opencmis.commons.data.Ace;
import org.apache.chemistry.opencmis.commons.data.ObjectData; import org.apache.chemistry.opencmis.commons.data.AllowableActions;
import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData; import org.apache.chemistry.opencmis.commons.data.CmisExtensionElement;
import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList; import org.apache.chemistry.opencmis.commons.data.FailedToDeleteData;
import org.apache.chemistry.opencmis.commons.data.ObjectList; import org.apache.chemistry.opencmis.commons.data.ObjectData;
import org.apache.chemistry.opencmis.commons.data.ObjectParentData; import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
import org.apache.chemistry.opencmis.commons.data.Properties; import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
import org.apache.chemistry.opencmis.commons.data.PropertyData; import org.apache.chemistry.opencmis.commons.data.ObjectList;
import org.apache.chemistry.opencmis.commons.data.RepositoryInfo; import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition; import org.apache.chemistry.opencmis.commons.data.Properties;
import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition; import org.apache.chemistry.opencmis.commons.data.PropertyData;
import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer; import org.apache.chemistry.opencmis.commons.data.RepositoryInfo;
import org.apache.chemistry.opencmis.commons.enums.AclPropagation; import org.apache.chemistry.opencmis.commons.definitions.PropertyDefinition;
import org.apache.chemistry.opencmis.commons.enums.Action; import org.apache.chemistry.opencmis.commons.definitions.TypeDefinition;
import org.apache.chemistry.opencmis.commons.enums.ChangeType; import org.apache.chemistry.opencmis.commons.definitions.TypeDefinitionContainer;
import org.apache.chemistry.opencmis.commons.enums.CmisVersion; import org.apache.chemistry.opencmis.commons.enums.AclPropagation;
import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships; import org.apache.chemistry.opencmis.commons.enums.Action;
import org.apache.chemistry.opencmis.commons.enums.UnfileObject; import org.apache.chemistry.opencmis.commons.enums.ChangeType;
import org.apache.chemistry.opencmis.commons.enums.VersioningState; import org.apache.chemistry.opencmis.commons.enums.CmisVersion;
import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException; import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException; import org.apache.chemistry.opencmis.commons.enums.UnfileObject;
import org.apache.chemistry.opencmis.commons.exceptions.CmisUpdateConflictException; import org.apache.chemistry.opencmis.commons.enums.VersioningState;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl; import org.apache.chemistry.opencmis.commons.exceptions.CmisConstraintException;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.CmisExtensionElementImpl; import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl; import org.apache.chemistry.opencmis.commons.exceptions.CmisUpdateConflictException;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.ExtensionDataImpl; import org.apache.chemistry.opencmis.commons.impl.dataobjects.AccessControlListImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl; import org.apache.chemistry.opencmis.commons.impl.dataobjects.CmisExtensionElementImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalDefinitionImpl; import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdImpl; import org.apache.chemistry.opencmis.commons.impl.dataobjects.ExtensionDataImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl; import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertiesImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerImpl; import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyDecimalDefinitionImpl;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringImpl; import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIdImpl;
import org.apache.chemistry.opencmis.commons.impl.server.AbstractServiceFactory; import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerDefinitionImpl;
import org.apache.chemistry.opencmis.commons.server.CallContext; import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyIntegerImpl;
import org.apache.chemistry.opencmis.commons.server.CmisService; import org.apache.chemistry.opencmis.commons.impl.dataobjects.PropertyStringImpl;
import org.apache.chemistry.opencmis.commons.spi.Holder; import org.apache.chemistry.opencmis.commons.impl.server.AbstractServiceFactory;
import org.junit.After; import org.apache.chemistry.opencmis.commons.server.CallContext;
import org.junit.Before; import org.apache.chemistry.opencmis.commons.server.CmisService;
import org.junit.Test; import org.apache.chemistry.opencmis.commons.spi.Holder;
import org.springframework.context.ApplicationContext; import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.extensions.webscripts.GUID; import org.springframework.extensions.webscripts.GUID;
/** /**
@@ -164,7 +170,9 @@ import org.springframework.extensions.webscripts.GUID;
* *
*/ */
public class CMISTest public class CMISTest
{ {
private static Log logger = LogFactory.getLog(CMISTest.class);
private static final QName TEST_START_TASK = QName.createQName("http://www.alfresco.org/model/workflow/test/1.0", "startTaskVarScriptAssign"); private static final QName TEST_START_TASK = QName.createQName("http://www.alfresco.org/model/workflow/test/1.0", "startTaskVarScriptAssign");
private static final QName TEST_WORKFLOW_TASK = QName.createQName("http://www.alfresco.org/model/workflow/test/1.0", "assignVarTask"); private static final QName TEST_WORKFLOW_TASK = QName.createQName("http://www.alfresco.org/model/workflow/test/1.0", "assignVarTask");
@@ -196,6 +204,7 @@ public class CMISTest
private TenantService tenantService; private TenantService tenantService;
private SearchService searchService; private SearchService searchService;
private java.util.Properties globalProperties; private java.util.Properties globalProperties;
private AuditComponentImpl auditComponent;
private AlfrescoCmisServiceFactory factory; private AlfrescoCmisServiceFactory factory;
@@ -374,7 +383,8 @@ public class CMISTest
this.tenantAdminService = (TenantAdminService) ctx.getBean("tenantAdminService"); this.tenantAdminService = (TenantAdminService) ctx.getBean("tenantAdminService");
this.tenantService = (TenantService) ctx.getBean("tenantService"); this.tenantService = (TenantService) ctx.getBean("tenantService");
this.searchService = (SearchService) ctx.getBean("SearchService"); this.searchService = (SearchService) ctx.getBean("SearchService");
this.auditComponent = (AuditComponentImpl) ctx.getBean("auditComponent");
this.globalProperties = (java.util.Properties) ctx.getBean("global-properties"); this.globalProperties = (java.util.Properties) ctx.getBean("global-properties");
this.globalProperties.setProperty(VersionableAspectTest.AUTO_VERSION_PROPS_KEY, "true"); this.globalProperties.setProperty(VersionableAspectTest.AUTO_VERSION_PROPS_KEY, "true");
} }
@@ -2649,7 +2659,7 @@ public class CMISTest
Holder<String> changeLogToken = new Holder<String>(); Holder<String> changeLogToken = new Holder<String>();
changeLogToken.setValue(actualToken); changeLogToken.setValue(actualToken);
ObjectList changeLog = CMISTest.this.cmisConnector.getContentChanges(changeLogToken, new BigInteger("0")); ObjectList changeLog = CMISTest.this.cmisConnector.getContentChanges(changeLogToken, new BigInteger("10"));
List<ObjectData> events = changeLog.getObjects(); List<ObjectData> events = changeLog.getObjects();
int count = events.size(); int count = events.size();
// it should be 3 entries: 1 for previous folder create, 1 new CREATE (for document create) // it should be 3 entries: 1 for previous folder create, 1 new CREATE (for document create)
@@ -2677,7 +2687,7 @@ public class CMISTest
changeLogToken = new Holder<String>(); changeLogToken = new Holder<String>();
changeLogToken.setValue(actualToken2); changeLogToken.setValue(actualToken2);
changeLog = CMISTest.this.cmisConnector.getContentChanges(changeLogToken, new BigInteger("0")); changeLog = CMISTest.this.cmisConnector.getContentChanges(changeLogToken, new BigInteger("10"));
events = changeLog.getObjects(); events = changeLog.getObjects();
count = events.size(); count = events.size();
assertEquals(2, count); assertEquals(2, count);
@@ -2698,7 +2708,7 @@ public class CMISTest
changeLogToken = new Holder<String>(); changeLogToken = new Holder<String>();
changeLogToken.setValue(actualToken3); changeLogToken.setValue(actualToken3);
changeLog = CMISTest.this.cmisConnector.getContentChanges(changeLogToken, new BigInteger("0")); changeLog = CMISTest.this.cmisConnector.getContentChanges(changeLogToken, new BigInteger("10"));
events = changeLog.getObjects(); events = changeLog.getObjects();
count = events.size(); count = events.size();
assertEquals(2, count); assertEquals(2, count);
@@ -3578,5 +3588,127 @@ public class CMISTest
auditSubsystem.destroy(); auditSubsystem.destroy();
AuthenticationUtil.popAuthentication(); AuthenticationUtil.popAuthentication();
} }
}
@Test
public void testMNT16375() throws Exception
{
setupAudit();
AuthenticationUtil.pushAuthentication();
AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName());
withCmisService(new CmisServiceCallback<Void>()
{
@Override
public Void execute(CmisService cmisService)
{
long start = System.currentTimeMillis();
List<RepositoryInfo> repositories = cmisService.getRepositoryInfos(null);
long end = System.currentTimeMillis();
logger.info("time = " + (end - start) + "ms");
assertNotNull(repositories);
assertTrue(repositories.size() > 0);
return null;
}
}, CmisVersion.CMIS_1_1);
}
//@Test
public void populate() throws Exception
{
setupAudit();
final NodeRef companyHomeNodeRef = repositoryHelper.getCompanyHome();
final int batchSize = 100;
final int totalWork = 500000;
BatchProcessor.BatchProcessWorker<String> worker = new BatchProcessor.BatchProcessWorker<String>()
{
public String getIdentifier(String folder)
{
return folder;
}
public void beforeProcess() throws Throwable
{
AuthenticationUtil.pushAuthentication();
AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName());
}
public void afterProcess() throws Throwable
{
AuthenticationUtil.popAuthentication();
}
public void process(final String guid) throws Throwable
{
Map<String, Serializable> auditData = new HashMap<>();
HashMap<String, Serializable> data = new HashMap<>();
data.put("nodeRef", "workspace://SpacesStore/" + guid);
data.put("objectId", guid);
auditData.put("/CMISChangeLog/CREATED/result/value", data);
auditDAO.createAuditEntry(2l, System.currentTimeMillis(), "admin", auditData);
// perform CREATED, UPDATED, SECURITY, DELETED CMIS change type actions
// FileInfo folderInfo = fileFolderService.create(companyHomeNodeRef, folder, ContentModel.TYPE_FOLDER);
// nodeService.setProperty(folderInfo.getNodeRef(), ContentModel.PROP_NAME, folder);
// assertNotNull(folderInfo);
//
// String content = GUID.generate();
// FileInfo document = fileFolderService.create(folderInfo.getNodeRef(), content, ContentModel.TYPE_CONTENT);
// assertNotNull(document);
// nodeService.setProperty(document.getNodeRef(), ContentModel.PROP_NAME, content);
//
// permissionService.setPermission(document.getNodeRef(), "SomeAuthority", PermissionService.EXECUTE_CONTENT, true);
//
// fileFolderService.delete(document.getNodeRef());
// fileFolderService.delete(folderInfo.getNodeRef());
}
};
BatchProcessWorkProvider<String> provider = new BatchProcessWorkProvider<String>()
{
private int counter = 0;
@Override
public int getTotalEstimatedWorkSize()
{
return totalWork;
}
@Override
public Collection<String> getNextWork()
{
if(counter < totalWork)
{
counter += batchSize;
List<String> guids = new ArrayList<>(batchSize);
for(int i = 0; i < batchSize; i++)
{
guids.add(GUID.generate());
}
return guids;
}
else
{
return Collections.emptyList();
}
}
};
new BatchProcessor<String>(
"CMISTest.createAuditEntries",
transactionService.getRetryingTransactionHelper(),
provider,
4, batchSize,
ctx,
logger, 100).process(worker, true);
} }
} }

View File

@@ -564,13 +564,13 @@ public class AuditDAOTest extends TestCase
createItem(info1, 14); createItem(info1, 14);
auditDAO.findAuditEntries(preDeleteCallback, new AuditQueryParameters(), -1); auditDAO.findAuditEntries(preDeleteCallback, new AuditQueryParameters(), Integer.MAX_VALUE);
assertEquals(5, preDeleteCallback.numEntries(app1)); assertEquals(5, preDeleteCallback.numEntries(app1));
assertEquals(2, preDeleteCallback.numEntries(app2)); assertEquals(2, preDeleteCallback.numEntries(app2));
auditDAO.deleteAuditEntries(app1Id, t1, t2); auditDAO.deleteAuditEntries(app1Id, t1, t2);
auditDAO.findAuditEntries(resultsCallback, new AuditQueryParameters(), -1); auditDAO.findAuditEntries(resultsCallback, new AuditQueryParameters(), Integer.MAX_VALUE);
assertEquals("Two entries should have been deleted from app1", 3, resultsCallback.numEntries(app1)); assertEquals("Two entries should have been deleted from app1", 3, resultsCallback.numEntries(app1));
assertEquals("No entries should have been deleted from app2", 2, resultsCallback.numEntries(app2)); assertEquals("No entries should have been deleted from app2", 2, resultsCallback.numEntries(app2));
return null; return null;