diff --git a/source/java/org/alfresco/repo/imap/LoadTester.java b/source/java/org/alfresco/repo/imap/LoadTester.java index 838da8ed87..def43f91ef 100755 --- a/source/java/org/alfresco/repo/imap/LoadTester.java +++ b/source/java/org/alfresco/repo/imap/LoadTester.java @@ -2,23 +2,34 @@ package org.alfresco.repo.imap; import java.io.IOException; import java.util.Date; +import java.util.LinkedList; import java.util.List; import javax.mail.Flags; +import javax.transaction.UserTransaction; import junit.framework.TestCase; +import org.alfresco.model.ContentModel; import org.alfresco.repo.importer.ACPImportPackageHandler; +import org.alfresco.repo.management.subsystems.ChildApplicationContextFactory; +import org.alfresco.repo.model.filefolder.FileFolderServiceImpl; import org.alfresco.service.ServiceRegistry; +import org.alfresco.service.cmr.model.FileFolderService; 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.search.SearchService; import org.alfresco.service.cmr.security.AuthenticationService; +import org.alfresco.service.cmr.security.PermissionService; +import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.cmr.view.ImporterService; import org.alfresco.service.cmr.view.Location; import org.alfresco.service.namespace.NamespaceService; +import org.alfresco.service.transaction.TransactionService; import org.alfresco.util.ApplicationContextHelper; +import org.alfresco.util.PropertyMap; +import org.alfresco.util.config.RepositoryFolderConfigBean; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.context.ApplicationContext; @@ -35,55 +46,121 @@ public class LoadTester extends TestCase private ImapService imapService; private ImporterService importerService; + private AuthenticationService authenticationService; private AlfrescoImapUser user; // DH: Do not assume the presence of any specific user or password. Create a new user for the test. private static final String USER_NAME = "admin"; private static final String USER_PASSWORD = "admin"; + private static final String TEST_IMAP_ROOT_FOLDER_NAME = "aaa"; private static final String TEST_DATA_FOLDER_NAME = "test_data"; private static final String TEST_FOLDER_NAME = "test_imap1000"; private static final long MESSAGE_QUANTITY = 1000; - + private String anotherUserName; + @Override public void setUp() throws Exception { ServiceRegistry serviceRegistry = (ServiceRegistry) ctx.getBean("ServiceRegistry"); - AuthenticationService authenticationService = serviceRegistry.getAuthenticationService(); + authenticationService = serviceRegistry.getAuthenticationService(); imapService = serviceRegistry.getImapService(); importerService = serviceRegistry.getImporterService(); NodeService nodeService = serviceRegistry.getNodeService(); SearchService searchService = serviceRegistry.getSearchService(); NamespaceService namespaceService = serviceRegistry.getNamespaceService(); + PersonService personService = serviceRegistry.getPersonService(); + FileFolderService fileFolderService = serviceRegistry.getFileFolderService(); + TransactionService transactionService = serviceRegistry.getTransactionService(); + PermissionService permissionService = serviceRegistry.getPermissionService(); - user = new AlfrescoImapUser(USER_NAME + "@alfresco.com", USER_NAME, USER_PASSWORD); + + // start the transaction + UserTransaction txn = transactionService.getUserTransaction(); + txn.begin(); authenticationService.authenticate(USER_NAME, USER_PASSWORD.toCharArray()); - StoreRef storeRef = new StoreRef("workspace://SpacesStore"); - NodeRef rootRef = nodeService.getRootNode(storeRef); + anotherUserName = "test_imap_user"; + + NodeRef person = personService.getPerson(anotherUserName); - // Delete test folder - List nodeRefs = searchService.selectNodes(rootRef, "/app:company_home/imap:imap_home/cm:admin/cm:" + TEST_FOLDER_NAME, null, namespaceService, false); - if (nodeRefs.size() == 1) + if (person != null) { - NodeRef ch = nodeRefs.get(0); - nodeService.deleteNode(ch); + personService.deletePerson(anotherUserName); + PropertyMap testUser = new PropertyMap(); + testUser.put(ContentModel.PROP_USERNAME, anotherUserName); + testUser.put(ContentModel.PROP_FIRSTNAME, anotherUserName); + testUser.put(ContentModel.PROP_LASTNAME, anotherUserName); + testUser.put(ContentModel.PROP_EMAIL, anotherUserName + "@alfresco.com"); + testUser.put(ContentModel.PROP_JOBTITLE, "jobTitle"); + personService.createPerson(testUser); + } - // Delete test data folder - nodeRefs = searchService.selectNodes(rootRef, "/app:company_home/imap:imap_home/cm:admin/cm:" + TEST_DATA_FOLDER_NAME, null, namespaceService, false); + if (authenticationService.authenticationExists(anotherUserName)) + { + authenticationService.deleteAuthentication(anotherUserName); + } + authenticationService.createAuthentication(anotherUserName, anotherUserName.toCharArray()); + + + user = new AlfrescoImapUser(anotherUserName + "@alfresco.com", anotherUserName, anotherUserName); + + String storePath = "workspace://SpacesStore"; + String companyHomePathInStore = "/app:company_home"; + + StoreRef storeRef = new StoreRef(storePath); + NodeRef storeRootNodeRef = nodeService.getRootNode(storeRef); + + List nodeRefs = searchService.selectNodes(storeRootNodeRef, companyHomePathInStore, null, namespaceService, false); + NodeRef companyHomeNodeRef = nodeRefs.get(0); + + ChildApplicationContextFactory imap = (ChildApplicationContextFactory) ctx.getBean("imap"); + ApplicationContext imapCtx = imap.getApplicationContext(); + ImapServiceImpl imapServiceImpl = (ImapServiceImpl)imapCtx.getBean("imapService"); + + + // Delete test folder + nodeRefs = searchService.selectNodes(storeRootNodeRef, + companyHomePathInStore + "/" + NamespaceService.CONTENT_MODEL_PREFIX + ":" + TEST_IMAP_ROOT_FOLDER_NAME, + null, namespaceService, false); if (nodeRefs.size() == 1) { NodeRef ch = nodeRefs.get(0); nodeService.deleteNode(ch); } - // DH: Do not assume the presence of a path for the IMAP home. Create the IMAP home and set it on the service. - NodeRef adminNodeRef = searchService.selectNodes(rootRef, "/app:company_home/imap:imap_home/cm:admin", null, namespaceService, false).get(0); - importTestData("test-resources/imap/load_test_data.acp", adminNodeRef); + + // Creating IMAP test folder for IMAP root + LinkedList folders = new LinkedList(); + folders.add(TEST_IMAP_ROOT_FOLDER_NAME); + FileFolderServiceImpl.makeFolders(fileFolderService, companyHomeNodeRef, folders, ContentModel.TYPE_FOLDER); + + // Setting IMAP root + RepositoryFolderConfigBean imapHome = new RepositoryFolderConfigBean(); + imapHome.setStore(storePath); + imapHome.setRootPath(companyHomePathInStore); + imapHome.setFolderPath(TEST_IMAP_ROOT_FOLDER_NAME); + imapServiceImpl.setImapHome(imapHome); + + // Starting IMAP + imapServiceImpl.startup(); + + nodeRefs = searchService.selectNodes(storeRootNodeRef, + companyHomePathInStore + "/" + NamespaceService.CONTENT_MODEL_PREFIX + ":" + TEST_IMAP_ROOT_FOLDER_NAME, + null, + namespaceService, + false); + // Used to create User's folder + NodeRef userFolderRef = imapService.getMailboxRootRef(TEST_DATA_FOLDER_NAME, anotherUserName); + permissionService.setPermission(userFolderRef, anotherUserName, PermissionService.ALL_PERMISSIONS, true); + importTestData("imap/load_test_data.acp", userFolderRef); + + reauthenticate(anotherUserName, anotherUserName); + AlfrescoImapFolder testDataFolder = imapService.getFolder(user, TEST_DATA_FOLDER_NAME); SimpleStoredMessage m = testDataFolder.getMessages().get(0); @@ -109,9 +186,18 @@ public class LoadTester extends TestCase t = System.currentTimeMillis() - t; logger.info("Create time: " + t + " ms (" + t/1000 + " s (" + t/60000 + " min))"); + + txn.commit(); } + private void reauthenticate(String name, String password) + { + authenticationService.invalidateTicket(authenticationService.getCurrentTicket()); + authenticationService.clearCurrentSecurityContext(); + authenticationService.authenticate(name, password.toCharArray()); + } + public void tearDown() throws Exception { diff --git a/source/java/org/alfresco/repo/imap/RemoteLoadTester.java b/source/java/org/alfresco/repo/imap/RemoteLoadTester.java index cf963c10df..2206bb2a81 100755 --- a/source/java/org/alfresco/repo/imap/RemoteLoadTester.java +++ b/source/java/org/alfresco/repo/imap/RemoteLoadTester.java @@ -25,8 +25,8 @@ public class RemoteLoadTester extends TestCase private Log logger = LogFactory.getLog(RemoteLoadTester.class); - private static final String USER_NAME = "admin"; - private static final String USER_PASSWORD = "admin"; + private static final String USER_NAME = "test_imap_user"; + private static final String USER_PASSWORD = "test_imap_user"; private static final String TEST_FOLDER_NAME = "test_imap1000"; @Override