/* * Copyright (C) 2003-2007 eXo Platform SAS. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see<http://www.gnu.org/licenses/>. */ package org.exoplatform.services.ecm.dms.drive; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.List; import javax.jcr.Node; import javax.jcr.NodeIterator; import javax.jcr.Session; import org.exoplatform.services.cache.CacheService; import org.exoplatform.services.cms.BasePath; import org.exoplatform.services.cms.drives.DriveData; import org.exoplatform.services.cms.drives.ManageDriveService; import org.exoplatform.services.cms.drives.impl.ManageDriveServiceImpl; import org.exoplatform.services.jcr.ext.hierarchy.NodeHierarchyCreator; import org.exoplatform.services.wcm.BaseWCMTestCase; /** * Created by The eXo Platform SARL * Author : Ly Dinh Quang * quang.ly@exoplatform.com * xxx5669@gmail.com * Jun 11, 2009 */ public class TestDriveService extends BaseWCMTestCase { private ManageDriveService driveService; private NodeHierarchyCreator nodeHierarchyCreator; private CacheService caService; private Node rootNode; private String drivePath; private static String WORKSPACE = "exo:workspace" ; private static String PERMISSIONS = "exo:accessPermissions" ; private static String VIEWS = "exo:views" ; private static String ICON = "exo:icon" ; private static String PATH = "exo:path" ; private static String VIEW_REFERENCES = "exo:viewPreferences" ; private static String VIEW_NON_DOCUMENT = "exo:viewNonDocument" ; private static String VIEW_SIDEBAR = "exo:viewSideBar" ; private static String SHOW_HIDDEN_NODE = "exo:showHiddenNode" ; private static String ALLOW_CREATE_FOLDER = "exo:allowCreateFolders" ; private static String ALL_DRIVES_CACHED_BY_ROLES = "_allDrivesByRoles"; private static String ALL_MAIN_CACHED_DRIVE = "_mainDrives"; private static String ALL_PERSONAL_CACHED_DRIVE = "_personalDrives"; private static String ALL_GROUP_CACHED_DRIVES = "_groupDrives"; /** * Set up for testing * * In Collaboration workspace * * /---TestTreeNode * | * |_____A1 * | |___A1_1 * | |___A1_1_1 * | |___A1_2 * | * |_____B1 * |___B1_1 * */ public void setUp() throws Exception { super.setUp(); driveService = (ManageDriveService)container.getComponentInstanceOfType(ManageDriveService.class); caService = (CacheService)container.getComponentInstanceOfType(CacheService.class); nodeHierarchyCreator = (NodeHierarchyCreator)container.getComponentInstanceOfType(NodeHierarchyCreator.class); drivePath = nodeHierarchyCreator.getJcrPath(BasePath.EXO_DRIVES_PATH); applySystemSession(); // clean and setup data removeAllDrives(); createTree(); } public void createTree() throws Exception { rootNode = session.getRootNode(); Node testNode = rootNode.addNode("TestTreeNode"); Node nodeA1 = testNode.addNode("A1"); nodeA1.addNode("A1_1").addNode("A1_1_1"); nodeA1.addNode("A1_2"); testNode.addNode("B1").addNode("B1_1"); session.save(); } /** * Register all drive plugins to repository * Input: * Init three param which is configured in test-drives-configuration.xml * Expect: * Size of list node = 3, contains 'System files' node, 'Collaboration Center' node, * 'Backup Administration' node * @throws Exception */ public void testInit() throws Exception { Session mySession = sessionProviderService_.getSystemSessionProvider(null).getSession(DMSSYSTEM_WS, repository); Node myDrive = (Node)mySession.getItem(drivePath); assertNotNull(myDrive.getNodes().getSize()); } /** * Register a new drive to workspace or update if the drive is existing * Input: * name = "MyDrive", workspace = COLLABORATION_WS, permissions = "*:/platform/administrators", * homePath = "/TestTreeNode/A1", views = "admin-view", icon = "", viewReferences = true, * viewNonDocument = true, viewSideBar = true, showHiddenNode = true, repository = REPO_NAME, * allowCreateFolder = "nt:folder" * Expect: * node: name = MyDrive is not null * property of this node is mapped exactly * @throws Exception */ public void testAddDrive() throws Exception { driveService.addDrive("MyDrive", COLLABORATION_WS, "*:/platform/administrators", "/TestTreeNode/A1", "admin-view", "", true, true, true, true, "nt:folder", "*"); Session mySession = sessionProviderService_.getSystemSessionProvider(null).getSession(DMSSYSTEM_WS, repository); Node myDrive = (Node)mySession.getItem(drivePath + "/MyDrive"); assertNotNull(myDrive); assertEquals(myDrive.getProperty(WORKSPACE).getString(), COLLABORATION_WS) ; assertEquals(myDrive.getProperty(PERMISSIONS).getString(), "*:/platform/administrators"); assertEquals(myDrive.getProperty(PATH).getString(), "/TestTreeNode/A1"); assertEquals(myDrive.getProperty(VIEWS).getString(), "admin-view"); assertEquals(myDrive.getProperty(ICON).getString(), ""); assertEquals(myDrive.getProperty(VIEW_REFERENCES).getBoolean(), true); assertEquals(myDrive.getProperty(VIEW_NON_DOCUMENT).getBoolean(), true); assertEquals(myDrive.getProperty(VIEW_SIDEBAR).getBoolean(), true); assertEquals(myDrive.getProperty(ALLOW_CREATE_FOLDER).getString(), "nt:folder"); assertEquals(myDrive.getProperty(SHOW_HIDDEN_NODE).getBoolean(), true); } /** * Test addDrive: in case drive already existed * @throws Exception */ public void testAddDrive2() throws Exception { driveService.addDrive("MyDrive", COLLABORATION_WS, "*:/platform/user", "/TestTreeNode/A1_1", "admin-view, system-view", "", true, true, true, false, "nt:folder,nt:unstructured", "*"); driveService.addDrive("MyDrive", COLLABORATION_WS, "*:/platform/administrators", "/TestTreeNode/A1", "admin-view", "", true, true, true, true, "nt:folder", "*"); Session mySession = sessionProviderService_.getSystemSessionProvider(null).getSession(DMSSYSTEM_WS, repository); Node myDrive = (Node)mySession.getItem(drivePath + "/MyDrive"); assertNotNull(myDrive); assertEquals(myDrive.getProperty(WORKSPACE).getString(), COLLABORATION_WS) ; assertEquals(myDrive.getProperty(PERMISSIONS).getString(), "*:/platform/administrators"); assertEquals(myDrive.getProperty(PATH).getString(), "/TestTreeNode/A1"); assertEquals(myDrive.getProperty(VIEWS).getString(), "admin-view"); assertEquals(myDrive.getProperty(ICON).getString(), ""); assertEquals(myDrive.getProperty(VIEW_REFERENCES).getBoolean(), true); assertEquals(myDrive.getProperty(VIEW_NON_DOCUMENT).getBoolean(), true); assertEquals(myDrive.getProperty(VIEW_SIDEBAR).getBoolean(), true); assertEquals(myDrive.getProperty(ALLOW_CREATE_FOLDER).getString(), "nt:folder"); assertEquals(myDrive.getProperty(SHOW_HIDDEN_NODE).getBoolean(), true); } /** * Return an DriveData Object * Input: Add a new drive * name = "MyDrive", workspace = COLLABORATION_WS, permissions = "*:/platform/administrators", * homePath = "/TestTreeNode/A1", views = "admin-view", icon = "", viewReferences = true, * viewNonDocument = true, viewSideBar = true, showHiddenNode = true, repository = REPO_NAME, * allowCreateFolder = "nt:folder" * Input: * driveName = "abc", repository = REPO_NAME * Expect: * node: name = "abc" is null * Input: * driveName = "MyDrive", repository = REPO_NAME * Expect: * node: name = MyDrive is not null * @throws Exception */ public void testGetDriveByName() throws Exception { driveService.addDrive("MyDrive", COLLABORATION_WS, "*:/platform/administrators", "/TestTreeNode/A1", "admin-view", "", true, true, true, true, "nt:folder", "*"); DriveData driveData1 = driveService.getDriveByName("abc"); assertNull(driveData1); DriveData driveData2 = driveService.getDriveByName("MyDrive"); assertNotNull(driveData2); assertEquals(driveData2.getWorkspace(), COLLABORATION_WS) ; assertEquals(driveData2.getPermissions(), "*:/platform/administrators"); assertEquals(driveData2.getHomePath(), "/TestTreeNode/A1"); assertEquals(driveData2.getViews(), "admin-view"); assertEquals(driveData2.getIcon(), ""); assertEquals(driveData2.getViewPreferences(), true); assertEquals(driveData2.getViewNonDocument(), true); assertEquals(driveData2.getViewSideBar(), true); assertEquals(driveData2.getAllowCreateFolders(), "nt:folder"); assertEquals(driveData2.getShowHiddenNode(), true); } /** * Test GetDriveByName: groupdrivetemplate is inactive * @throws Exception */ public void testGetDriveByNameWithInActiveGroupDriveTemplate() throws Exception { deActivateGroupDriveTemplate(); driveService.addDrive("MyDrive", COLLABORATION_WS, "*:/platform/administrators", "/TestTreeNode/A1", "admin-view", "", true, true, true, true, "nt:folder", null); DriveData driveData1 = driveService.getDriveByName("abc"); DriveData driveData2 = driveService.getDriveByName("MyDrive"); DriveData groupDrive = driveService.getDriveByName(".platform.administrators"); assertNull(driveData1); assertNotNull(driveData2); assertEquals(driveData2.getWorkspace(), COLLABORATION_WS) ; assertEquals(driveData2.getPermissions(), "*:/platform/administrators"); assertEquals(driveData2.getHomePath(), "/TestTreeNode/A1"); assertEquals(driveData2.getViews(), "admin-view"); assertEquals(driveData2.getIcon(), ""); assertEquals(driveData2.getViewPreferences(), true); assertEquals(driveData2.getViewNonDocument(), true); assertEquals(driveData2.getViewSideBar(), true); assertEquals(driveData2.getAllowCreateFolders(), "nt:folder"); assertEquals(driveData2.getShowHiddenNode(), true); assertEquals(driveData2.getAllowNodeTypesOnTree(), "*"); assertNull(groupDrive); } /** * This method will look up in all workspaces of repository to find DriveData * Input: * Add two drive * 1. name = "MyDrive1", workspace = COLLABORATION_WS, * permissions = "*:/platform/administrators", homePath = "/TestTreeNode/A1", * views = "admin-view", icon = "", viewReferences = true, viewNonDocument = true, * viewSideBar = true, showHiddenNode = true, repository = REPO_NAME, * allowCreateFolder = "nt:folder" * 2. name = "MyDrive2", workspace = COLLABORATION_WS, permissions = "*:/platform/user", * homePath = "/TestTreeNode/A1_1", views = "admin-view, system-view", icon = "", * viewReferences = true, viewNonDocument = true, viewSideBar = true, * showHiddenNode = false, repository = REPO_NAME, allowCreateFolder = "nt:folder" * Expect: * Size of list node = 2, contains node MyDrive1 and MyDrive2 * @throws Exception */ public void testGetAllDrives() throws Exception { driveService.addDrive("MyDrive1", COLLABORATION_WS, "*:/platform/administrators", "/TestTreeNode/A1", "admin-view", "", true, true, true, true, "nt:folder", "*"); driveService.addDrive("MyDrive2", COLLABORATION_WS, "*:/platform/user", "/TestTreeNode/A1_1", "admin-view, system-view", "", true, true, true, false, "nt:folder,nt:unstructured", "*"); List<DriveData> listDriveData = driveService.getAllDrives(); assertEquals(listDriveData.size(), 2); assertEquals(listDriveData.get(0).getWorkspace(), COLLABORATION_WS) ; assertEquals(listDriveData.get(0).getPermissions(), "*:/platform/administrators"); assertEquals(listDriveData.get(0).getHomePath(), "/TestTreeNode/A1"); assertEquals(listDriveData.get(0).getViews(), "admin-view"); assertEquals(listDriveData.get(0).getIcon(), ""); assertEquals(listDriveData.get(0).getViewPreferences(), true); assertEquals(listDriveData.get(0).getViewNonDocument(), true); assertEquals(listDriveData.get(0).getViewSideBar(), true); assertEquals(listDriveData.get(0).getAllowCreateFolders(), "nt:folder"); assertEquals(listDriveData.get(0).getShowHiddenNode(), true); assertEquals(listDriveData.get(1).getWorkspace(), COLLABORATION_WS) ; assertEquals(listDriveData.get(1).getPermissions(), "*:/platform/user"); assertEquals(listDriveData.get(1).getHomePath(), "/TestTreeNode/A1_1"); assertEquals(listDriveData.get(1).getViews(), "admin-view, system-view"); assertEquals(listDriveData.get(1).getIcon(), ""); assertEquals(listDriveData.get(1).getViewPreferences(), true); assertEquals(listDriveData.get(1).getViewNonDocument(), true); assertEquals(listDriveData.get(1).getViewSideBar(), true); assertEquals(listDriveData.get(1).getAllowCreateFolders(), "nt:folder,nt:unstructured"); assertEquals(listDriveData.get(1).getShowHiddenNode(), false); } /** * Test getAllDrives(boolean withVirtualDrives): withVirtualDrives = true; * * @throws Exception */ public void testGetAllDrivesWithVitualIsTrue() throws Exception { activateGroupDriveTemplate("john"); driveService.addDrive("MyDrive1", COLLABORATION_WS, "*:/platform/administrators", "/TestTreeNode/A1", "admin-view", "", true, true, true, true, "nt:folder", "*"); driveService.addDrive("MyDrive2", COLLABORATION_WS, "*:/platform/user", "/TestTreeNode/A1_1", "admin-view, system-view", "", true, true, true, false, "nt:folder,nt:unstructured", "*"); List<DriveData> drives = driveService.getAllDrives(true); assertTrue(drives.contains(driveService.getDriveByName("MyDrive1"))); assertTrue(drives.contains(driveService.getDriveByName("MyDrive2"))); assertTrue(drives.contains(driveService.getDriveByName("Groups"))); } /** * Test getAllDrives(boolean withVirtualDrives): withVirtualDrives = false; * * @throws Exception */ public void testGetAllDrivesWithVitualIsFalse() throws Exception { activateGroupDriveTemplate("john"); driveService.addDrive("MyDrive1", COLLABORATION_WS, "*:/platform/administrators", "/TestTreeNode/A1", "admin-view", "", true, true, true, true, "nt:folder", "*"); driveService.addDrive("MyDrive2", COLLABORATION_WS, "*:/platform/user", "/TestTreeNode/A1_1", "admin-view, system-view", "", true, true, true, false, "nt:folder,nt:unstructured", "*"); List<DriveData> drives = driveService.getAllDrives(false); assertTrue(drives.contains(driveService.getDriveByName("MyDrive1"))); assertTrue(drives.contains(driveService.getDriveByName("MyDrive2"))); assertFalse(drives.contains(driveService.getDriveByName("Groups"))); } /** * Remove drive with specified drive name and repository * Input: * Add two drive * 1. name = "MyDrive1", workspace = COLLABORATION_WS, * permissions = "*:/platform/administrators", homePath = "/TestTreeNode/A1", * views = "admin-view", icon = "", viewReferences = true, viewNonDocument = true, * viewSideBar = true, showHiddenNode = true, repository = REPO_NAME, * allowCreateFolder = "nt:folder" * 2. name = "MyDrive2", workspace = COLLABORATION_WS, permissions = "*:/platform/user", * homePath = "/TestTreeNode/A1_1", views = "admin-view, system-view", icon = "", * viewReferences = true, viewNonDocument = true, viewSideBar = true, * showHiddenNode = false, repository = REPO_NAME, allowCreateFolder = "nt:folder" * Input: Remove drive * driveName = "MyDrive1", repository = REPO_NAME * Expect: * Size of list node = 1 * Input: Remove drive * driveName = "xXx", repository = REPO_NAME * Expect: * Size of list node = 1 * @throws Exception */ public void testRemoveDrive() throws Exception { driveService.addDrive("MyDrive1", COLLABORATION_WS, "*:/platform/administrators", "/TestTreeNode/A1", "admin-view", "", true, true, true, true, "nt:folder", "*"); driveService.addDrive("MyDrive2", COLLABORATION_WS, "*:/platform/user", "/TestTreeNode/A1_1", "admin-view, system-view", "", true, true, true, false, "nt:folder,nt:unstructured", "*"); assertEquals(driveService.getAllDrives().size(), 2); driveService.removeDrive("MyDrive1"); assertEquals(driveService.getAllDrives().size(), 1); driveService.removeDrive("xXx"); assertEquals(driveService.getAllDrives().size(), 1); } /** * Return the list of DriveData * Input: * Add three drive * 1. name = "MyDrive1", workspace = COLLABORATION_WS, * permissions = "*:/platform/administrators", homePath = "/TestTreeNode/A1", * views = "admin-view", icon = "", viewReferences = true, viewNonDocument = true, * viewSideBar = true, showHiddenNode = true, repository = REPO_NAME, * allowCreateFolder = "nt:folder" * 2. name = "MyDrive2", workspace = COLLABORATION_WS, permissions = "*:/platform/user", * homePath = "/TestTreeNode/A1_1", views = "admin-view, system-view", icon = "", * viewReferences = true, viewNonDocument = true, viewSideBar = true, * showHiddenNode = false, repository = REPO_NAME, allowCreateFolder = "nt:unstructured" * 2. name = "MyDrive3", workspace = COLLABORATION_WS, permissions = "*:/platform/user", * homePath = "/TestTreeNode/A1_2", views = "system-view", icon = "", * viewReferences = true, viewNonDocument = true, viewSideBar = true, * showHiddenNode = true, repository = REPO_NAME, allowCreateFolder = "nt:unstructured" * Input: * permission = "*:/platform/user", repository = REPO_NAME * Expect: * Size of list node = 2, contains node MyDrive2 and MyDrive3 * * Input: * permission = "*:/platform/xXx", repository = REPO_NAME * Expect: * Size of list node = 0 * @throws Exception */ public void testGetAllDriveByPermission() throws Exception { driveService.addDrive("MyDrive1", COLLABORATION_WS, "*:/platform/administrators", "/TestTreeNode/A1", "admin-view", "", true, true, true, true, "nt:folder", "*"); driveService.addDrive("MyDrive2", COLLABORATION_WS, "*:/platform/user", "/TestTreeNode/A1_1", "admin-view, system-view", "", true, true, true, false, "nt:unstructured", "*"); driveService.addDrive("MyDrive3", COLLABORATION_WS, "*:/platform/user", "/TestTreeNode/A1_2", "system-view", "", true, true, true, true, "nt:unstructured", "*"); List<DriveData> listDriveData = driveService.getAllDrives(); assertEquals(listDriveData.size(), 3); List<DriveData> driveDatas = driveService.getAllDriveByPermission("*:/platform/user"); assertEquals(driveDatas.size(), 2); assertEquals(driveDatas.get(0).getWorkspace(), COLLABORATION_WS) ; assertEquals(driveDatas.get(0).getPermissions(), "*:/platform/user"); assertEquals(driveDatas.get(0).getHomePath(), "/TestTreeNode/A1_1"); assertEquals(driveDatas.get(0).getViews(), "admin-view, system-view"); assertEquals(driveDatas.get(0).getIcon(), ""); assertEquals(driveDatas.get(0).getViewPreferences(), true); assertEquals(driveDatas.get(0).getViewNonDocument(), true); assertEquals(driveDatas.get(0).getViewSideBar(), true); assertEquals(driveDatas.get(0).getAllowCreateFolders(), "nt:unstructured"); assertEquals(driveDatas.get(0).getShowHiddenNode(), false); assertEquals(driveDatas.get(1).getWorkspace(), COLLABORATION_WS) ; assertEquals(driveDatas.get(1).getPermissions(), "*:/platform/user"); assertEquals(driveDatas.get(1).getHomePath(), "/TestTreeNode/A1_2"); assertEquals(driveDatas.get(1).getViews(), "system-view"); assertEquals(driveDatas.get(1).getIcon(), ""); assertEquals(driveDatas.get(1).getViewPreferences(), true); assertEquals(driveDatas.get(1).getViewNonDocument(), true); assertEquals(driveDatas.get(1).getViewSideBar(), true); assertEquals(driveDatas.get(1).getAllowCreateFolders(), "nt:unstructured"); assertEquals(driveDatas.get(1).getShowHiddenNode(), true); List<DriveData> driveDatas2 = driveService.getAllDriveByPermission("*:/platform/xXx"); assertEquals(driveDatas2.size(), 0); } /** * This method will check to make sure the view is not in used before remove this view * Input: * Add three drive * 1. name = "MyDrive1", workspace = COLLABORATION_WS, * permissions = "*:/platform/administrators", homePath = "/TestTreeNode/A1", * views = "admin-view", icon = "", viewReferences = true, viewNonDocument = true, * viewSideBar = true, showHiddenNode = true, repository = REPO_NAME, * allowCreateFolder = "nt:folder" * 2. name = "MyDrive2", workspace = COLLABORATION_WS, permissions = "*:/platform/user", * homePath = "/TestTreeNode/A1_1", views = "admin-view, system-view", icon = "", * viewReferences = true, viewNonDocument = true, viewSideBar = true, * showHiddenNode = false, repository = REPO_NAME, allowCreateFolder = "nt:folder,nt:unstructured" * 2. name = "MyDrive3", workspace = COLLABORATION_WS, permissions = "*:/platform/user", * homePath = "/TestTreeNode/A1_2", views = "system-view", icon = "", * viewReferences = true, viewNonDocument = true, viewSideBar = true, * showHiddenNode = true, repository = REPO_NAME, allowCreateFolder = "nt:unstructured" * Input: * viewName = "system-view", repository = REPO_NAME * Expect: * result: true * Input: * viewName = "xXx", repository = REPO_NAME * Expect: * result: false * @throws Exception */ public void testIsUsedView() throws Exception { driveService.addDrive("MyDrive1", COLLABORATION_WS, "*:/platform/administrators", "/TestTreeNode/A1", "admin-view", "", true, true, true, true, "nt:folder", "*"); driveService.addDrive("MyDrive2", COLLABORATION_WS, "*:/platform/user", "/TestTreeNode/A1_1", "admin-view, system-view", "", true, true, true, false, "nt:folder,nt:unstructured", "*"); driveService.addDrive("MyDrive3", COLLABORATION_WS, "*:/platform/user", "/TestTreeNode/A1_2", "system-view", "", true, true, true, true, "nt:unstructured", "*"); assertTrue(driveService.isUsedView("system-view")); assertFalse(driveService.isUsedView("xXx")); } /** * Test getGroupDrives: groupDriveTemplate is activated. * * @throws Exception */ public void testGetGroupDrivesWithActivatedGroupDriveTemplate() throws Exception { activateGroupDriveTemplate("john"); List<String> userRoles = new ArrayList<String>(); userRoles.add("john"); userRoles.add("manager:/organization/management/executive-board"); userRoles.add("*:/platform/web-contributors"); userRoles.add("*:/platform/administrators"); userRoles.add("*:/platform/administrators"); userRoles.add("*:/platform/users"); List<DriveData> drives = driveService.getGroupDrives("john", userRoles); assertEquals(drives.size(), 4); } /** * Test getGroupDrives: groupDriveTemplate is deactivated * * @throws Exception */ public void testGetGroupDrivesWithDeactivatedGroupDriveTemplate() throws Exception { List<String> userRoles = new ArrayList<String>(); userRoles.add("john"); userRoles.add("manager:/organization/management/executive-board"); userRoles.add("*:/platform/web-contributors"); userRoles.add("*:/platform/administrators"); userRoles.add("*:/platform/users"); Field field = ManageDriveServiceImpl.class.getDeclaredField("groupDriveTemplate_"); field.setAccessible(true); field.set(driveService, null); driveService.clearAllDrivesCache(); List<DriveData> drives = driveService.getGroupDrives("john", userRoles); assertEquals(drives.size(), 0); } /** * Test getGroupDrives: drivecache * * @throws Exception */ @SuppressWarnings("unchecked") public void testGetGroupDrivesWithDriveCacheAndActivatedGroupDriveTemplate() throws Exception { activateGroupDriveTemplate("john"); List<String> userRoles = new ArrayList<String>(); userRoles.add("john"); userRoles.add("manager:/organization/management/executive-board"); userRoles.add("*:/platform/web-contributors"); userRoles.add("*:/platform/administrators"); userRoles.add("*:/platform/administrators"); userRoles.add("*:/platform/users"); driveService.getGroupDrives("john", userRoles); Object drivesInCache = caService.getCacheInstance("wcm.drive").get(REPO_NAME + "_" + "john" + ALL_GROUP_CACHED_DRIVES); assertTrue(drivesInCache != null); assertEquals(((List<DriveData>)drivesInCache).size(), 4); } /** * Test getPersonalDrives. * Input 4 drives: 3 personal drives * Expected: 3 personal drives * * @throws Exception */ public void testGetPersonalDrives() throws Exception { driveService.addDrive("Public", COLLABORATION_WS, "*:/platform/users", "/Users/${userId}/Public", "simple-view, admin-view", "", false, false, true, false, "nt:folder,nt:unstructured", "*"); driveService.addDrive("Private", COLLABORATION_WS, "${userId}", "/Users/${userId}/Private", "timeline-view", "", true, false, true, false, "nt:folder,nt:unstructured", "*"); driveService.addDrive("MyDrive1", COLLABORATION_WS, "*:/platform/administrators", "/TestTreeNode/A1", "admin-view", "", true, true, true, true, "nt:folder", "*"); Node userNode = nodeHierarchyCreator.getUserNode(sessionProvider, "john"); driveService.addDrive("Public2", COLLABORATION_WS, "*:/platform/users", userNode.getPath() + "/Public2", "simple-view, admin-view", "", false, false, true, false, "nt:folder,nt:unstructured", "*"); List<DriveData> drives = driveService.getPersonalDrives("john"); assertEquals(drives.size(), 3); assertEquals(drives.get(0).getWorkspace(), COLLABORATION_WS) ; assertEquals(drives.get(0).getPermissions(), "${userId}"); assertEquals(drives.get(0).getHomePath(), "/Users/${userId}/Private"); assertEquals(drives.get(0).getViews(), "timeline-view"); assertEquals(drives.get(0).getIcon(), ""); assertEquals(drives.get(0).getViewPreferences(), true); assertEquals(drives.get(0).getViewNonDocument(), false); assertEquals(drives.get(0).getViewSideBar(), true); assertEquals(drives.get(0).getAllowCreateFolders(), "nt:folder,nt:unstructured"); assertEquals(drives.get(0).getShowHiddenNode(), false); assertEquals(drives.get(1).getWorkspace(), COLLABORATION_WS) ; assertEquals(drives.get(1).getPermissions(), "*:/platform/users"); assertEquals(drives.get(1).getHomePath(), "/Users/${userId}/Public"); assertEquals(drives.get(1).getViews(), "simple-view, admin-view"); assertEquals(drives.get(1).getIcon(), ""); assertEquals(drives.get(1).getViewPreferences(), false); assertEquals(drives.get(1).getViewNonDocument(), false); assertEquals(drives.get(1).getViewSideBar(), true); assertEquals(drives.get(1).getAllowCreateFolders(), "nt:folder,nt:unstructured"); assertEquals(drives.get(1).getShowHiddenNode(), false); assertEquals(drives.get(2).getWorkspace(), COLLABORATION_WS) ; assertEquals(drives.get(2).getPermissions(), "*:/platform/users"); assertEquals(drives.get(2).getHomePath(), userNode.getPath() + "/Public2"); assertEquals(drives.get(2).getViews(), "simple-view, admin-view"); assertEquals(drives.get(2).getIcon(), ""); assertEquals(drives.get(2).getViewPreferences(), false); assertEquals(drives.get(2).getViewNonDocument(), false); assertEquals(drives.get(2).getViewSideBar(), true); assertEquals(drives.get(2).getAllowCreateFolders(), "nt:folder,nt:unstructured"); assertEquals(drives.get(2).getShowHiddenNode(), false); } /** * Test getPersonalDrives: with drivecache * Input 4 drives: 3 personal drives * Expected: 3 personal drives * * @throws Exception */ @SuppressWarnings("unchecked") public void testGetPersonalDrivesWithCache() throws Exception { driveService.clearAllDrivesCache(); driveService.addDrive("Public", COLLABORATION_WS, "*:/platform/users", "/Users/${userId}/Public", "simple-view, admin-view", "", false, false, true, false, "nt:folder,nt:unstructured", "*"); driveService.addDrive("Private", COLLABORATION_WS, "${userId}", "/Users/${userId}/Private", "timeline-view", "", true, false, true, false, "nt:folder,nt:unstructured", "*"); driveService.addDrive("MyDrive1", COLLABORATION_WS, "*:/platform/administrators", "/TestTreeNode/A1", "admin-view", "", true, true, true, true, "nt:folder", "*"); Node userNode = nodeHierarchyCreator.getUserNode(sessionProvider, "john"); driveService.addDrive("Public2", COLLABORATION_WS, "*:/platform/users", userNode.getPath() + "/Public2", "simple-view, admin-view", "", false, false, true, false, "nt:folder,nt:unstructured", "*"); driveService.getPersonalDrives("john"); driveService.getPersonalDrives("john"); Object drivesInCache = caService.getCacheInstance("wcm.drive").get(REPO_NAME + "_" + "john" + ALL_PERSONAL_CACHED_DRIVE); assertTrue(drivesInCache != null); assertEquals(((List<DriveData>)drivesInCache).size(), 3); } /** * Test isVitualDrive: activate GroupDriveTemplate * * @throws Exception */ public void testIsVitualDriveWithActiveGroupDriveTemplate() throws Exception { activateGroupDriveTemplate("john"); driveService.addDrive("MyDrive1", COLLABORATION_WS, "*:/platform/administrators", "/TestTreeNode/A1", "admin-view", "", true, true, true, true, "nt:folder", "*"); driveService.addDrive("Public2", COLLABORATION_WS, "*:/platform/users", "/Users/john/Public2", "simple-view, admin-view", "", false, false, true, false, "nt:folder,nt:unstructured", "*"); assertFalse(driveService.isVitualDrive("MyDrive1")); assertTrue(driveService.isVitualDrive("Groups")); } /** * Test isVitualDrive: deactivate GroupDriveTemplate * * @throws Exception */ public void testIsVitualDriveWithDeactivatedGroupDriveTemplate() throws Exception { driveService.addDrive("MyDrive1", COLLABORATION_WS, "*:/platform/administrators", "/TestTreeNode/A1", "admin-view", "", true, true, true, true, "nt:folder", "*"); driveService.addDrive("Public2", COLLABORATION_WS, "*:/platform/users", "/Users/john/Public2", "simple-view, admin-view", "", false, false, true, false, "nt:folder,nt:unstructured", "*"); Field field = ManageDriveServiceImpl.class.getDeclaredField("groupDriveTemplate_"); field.setAccessible(true); field.set(driveService, null); assertFalse(driveService.isVitualDrive("MyDrive1")); assertFalse(driveService.isVitualDrive("Groups")); } /** * Test testNewRoleUpdated * * @throws Exception */ public void testNewRoleUpdated() throws Exception { driveService.setNewRoleUpdated(true); assertTrue(driveService.newRoleUpdated()); driveService.setNewRoleUpdated(false); assertFalse(driveService.newRoleUpdated()); } /** * Test getMainDrives * Input: drives including personal, group, general drives * Expect: only general drives * * @throws Exception */ public void testGetMainDrives() throws Exception { driveService.addDrive("Public", COLLABORATION_WS, "*:/platform/users", "/Users/${userId}/Public", "simple-view, admin-view", "", false, false, true, false, "nt:folder,nt:unstructured", "*"); driveService.addDrive("Private", COLLABORATION_WS, "${userId}", "/Users/${userId}/Private", "timeline-view", "", true, false, true, false, "nt:folder,nt:unstructured", "*"); driveService.addDrive("MyDrive1", COLLABORATION_WS, "*:/platform/administrators", "/TestTreeNode/A1", "admin-view", "", true, true, true, true, "nt:folder", "*"); Node userNode = nodeHierarchyCreator.getUserNode(sessionProvider, "john"); driveService.addDrive("Public2", COLLABORATION_WS, "*:/platform/users", userNode.getPath() + "/Public2", "simple-view, admin-view", "", false, false, true, false, "nt:folder,nt:unstructured", "*"); activateGroupDriveTemplate("john"); List<String> userRoles = new ArrayList<String>(); userRoles.add("john"); userRoles.add("manager:/organization/management/executive-board"); userRoles.add("*:/platform/web-contributors"); userRoles.add("*:/platform/administrators"); userRoles.add("*:/platform/users"); List<DriveData> drives = driveService.getMainDrives("john", userRoles); assertEquals(drives.size(), 1); assertEquals(drives.get(0).getWorkspace(), COLLABORATION_WS) ; assertEquals(drives.get(0).getPermissions(), "*:/platform/administrators"); assertEquals(drives.get(0).getHomePath(), "/TestTreeNode/A1"); assertEquals(drives.get(0).getViews(), "admin-view"); assertEquals(drives.get(0).getIcon(), ""); assertEquals(drives.get(0).getViewPreferences(), true); assertEquals(drives.get(0).getViewNonDocument(), true); assertEquals(drives.get(0).getViewSideBar(), true); assertEquals(drives.get(0).getAllowCreateFolders(), "nt:folder"); assertEquals(drives.get(0).getShowHiddenNode(), true); } /** * Test getMainDrives: using driveCache * * @throws Exception */ @SuppressWarnings("unchecked") public void testGetMainDrivesWithCaches() throws Exception { driveService.clearAllDrivesCache(); driveService.addDrive("Public", COLLABORATION_WS, "*:/platform/users", "/Users/${userId}/Public", "simple-view, admin-view", "", false, false, true, false, "nt:folder,nt:unstructured", "*"); driveService.addDrive("Private", COLLABORATION_WS, "${userId}", "/Users/${userId}/Private", "timeline-view", "", true, false, true, false, "nt:folder,nt:unstructured", "*"); driveService.addDrive("MyDrive1", COLLABORATION_WS, "*:/platform/administrators", "/TestTreeNode/A1", "admin-view", "", true, true, true, true, "nt:folder", "*"); driveService.addDrive("MyDrive2", COLLABORATION_WS, "*:/platform/administrators", "/TestTreeNode/A1", "admin-view", "", true, true, true, true, "nt:folder", "*"); Node userNode = nodeHierarchyCreator.getUserNode(sessionProvider, "john"); driveService.addDrive("Public2", COLLABORATION_WS, "*:/platform/users", userNode.getPath() + "/Public2", "simple-view, admin-view", "", false, false, true, false, "nt:folder,nt:unstructured", "*"); activateGroupDriveTemplate("john"); List<String> userRoles = new ArrayList<String>(); userRoles.add("john"); userRoles.add("manager:/organization/management/executive-board"); userRoles.add("*:/platform/web-contributors"); userRoles.add("*:/platform/administrators"); userRoles.add("*:/platform/users"); driveService.getMainDrives("john", userRoles); driveService.getMainDrives("john", userRoles); Object drivesInCache = caService.getCacheInstance("wcm.drive").get(REPO_NAME + "_" + "john" + ALL_MAIN_CACHED_DRIVE); assertEquals(((List<DriveData>)drivesInCache).size(), 2); } /** * Test getDriveByUserRoles: userId not null * * @throws Exception */ public void testGetDriveByUserRolesWithUserIdNotNull() throws Exception { driveService.clearAllDrivesCache(); driveService.addDrive("Public", COLLABORATION_WS, "*:/platform/users", "/Users/${userId}/Public", // Marry have permission "simple-view, admin-view", "", false, false, true, false, "nt:folder,nt:unstructured", "*"); driveService.addDrive("Private", COLLABORATION_WS, "${userId}", "/Users/${userId}/Private", // Marry have permission "timeline-view", "", true, false, true, false, "nt:folder,nt:unstructured", "*"); driveService.addDrive("MyDrive1", COLLABORATION_WS, "*:/platform/administrators", "/TestTreeNode/A1", "admin-view", "", true, true, true, true, "nt:folder", "*"); driveService.addDrive("MyDrive2", COLLABORATION_WS, "*:/platform/administrators", "/TestTreeNode/A1", "admin-view", "", true, true, true, true, "nt:folder", "*"); driveService.addDrive("MyDrive3", COLLABORATION_WS, "*", "/TestTreeNode/A1", // Marry have permission "admin-view", "", true, true, true, true, "nt:folder", "*"); driveService.addDrive("Public2", COLLABORATION_WS, "*:/platform/users", "/Users/john/Public2", // Marry have permission "simple-view, admin-view", "", false, false, true, false, "nt:folder,nt:unstructured", "*"); activateGroupDriveTemplate("marry"); List<String> userRoles = new ArrayList<String>(); userRoles.add("marry"); userRoles.add("*:/platform/web-contributors"); // Marry have permission userRoles.add("*:/platform/users"); // Marry have permission List<DriveData> drives = driveService.getDriveByUserRoles("marry", userRoles); assertEquals(drives.size(), 6); assertTrue(drives.contains(driveService.getDriveByName("Public"))); assertTrue(drives.contains(driveService.getDriveByName("Private"))); assertFalse(drives.contains(driveService.getDriveByName("MyDrive1"))); assertFalse(drives.contains(driveService.getDriveByName("MyDrive2"))); assertTrue(drives.contains(driveService.getDriveByName("Public2"))); assertTrue(drives.contains(driveService.getDriveByName("MyDrive3"))); assertTrue(drives.contains(driveService.getDriveByName(".platform.web-contributors"))); assertTrue(drives.contains(driveService.getDriveByName(".platform.users"))); } /** * Test getDriveByUserRoles: userId null * * @throws Exception */ public void testGetDriveByUserRolesWithUserIdNull() throws Exception { driveService.clearAllDrivesCache(); driveService.addDrive("Public", COLLABORATION_WS, "*:/platform/users", "/Users/${userId}/Public", // Marry have permission "simple-view, admin-view", "", false, false, true, false, "nt:folder,nt:unstructured", "*"); driveService.addDrive("Private", COLLABORATION_WS, "${userId}", "/Users/${userId}/Private", // Marry have permission "timeline-view", "", true, false, true, false, "nt:folder,nt:unstructured", "*"); driveService.addDrive("MyDrive1", COLLABORATION_WS, "*:/platform/administrators", "/TestTreeNode/A1", "admin-view", "", true, true, true, true, "nt:folder", "*"); driveService.addDrive("MyDrive2", COLLABORATION_WS, "*:/platform/administrators", "/TestTreeNode/A1", "admin-view", "", true, true, true, true, "nt:folder", "*"); driveService.addDrive("MyDrive3", COLLABORATION_WS, "*", "/TestTreeNode/A1", // Marry have permission "admin-view", "", true, true, true, true, "nt:folder", "*"); driveService.addDrive("Public2", COLLABORATION_WS, "*:/platform/users", "/Users/john/Public2", // Marry have permission "simple-view, admin-view", "", false, false, true, false, "nt:folder,nt:unstructured", "*"); activateGroupDriveTemplate("marry"); List<String> userRoles = new ArrayList<String>(); userRoles.add("marry"); userRoles.add("*:/platform/web-contributors"); // Marry have permission userRoles.add("*:/platform/users"); // Marry have permission List<DriveData> drives = driveService.getDriveByUserRoles(null, userRoles); assertEquals(drives.size(), 1); assertFalse(drives.contains(driveService.getDriveByName("Public"))); assertFalse(drives.contains(driveService.getDriveByName("Private"))); assertFalse(drives.contains(driveService.getDriveByName("MyDrive1"))); assertFalse(drives.contains(driveService.getDriveByName("MyDrive2"))); assertFalse(drives.contains(driveService.getDriveByName("Public2"))); assertTrue(drives.contains(driveService.getDriveByName("MyDrive3"))); assertFalse(drives.contains(driveService.getDriveByName(".platform.web-contributors"))); assertFalse(drives.contains(driveService.getDriveByName(".platform.users"))); } /** * Test getDriveByUserRoles: using driveCache * * @throws Exception */ @SuppressWarnings("unchecked") public void testGetDriveByUserRolesWithDriveCache() throws Exception { driveService.clearAllDrivesCache(); driveService.addDrive("Public", COLLABORATION_WS, "*:/platform/users", "/Users/${userId}/Public", // Marry have permission "simple-view, admin-view", "", false, false, true, false, "nt:folder,nt:unstructured", "*"); driveService.addDrive("Private", COLLABORATION_WS, "${userId}", "/Users/${userId}/Private", // Marry have permission "timeline-view", "", true, false, true, false, "nt:folder,nt:unstructured", "*"); driveService.addDrive("MyDrive1", COLLABORATION_WS, "*:/platform/administrators", "/TestTreeNode/A1", "admin-view", "", true, true, true, true, "nt:folder", "*"); driveService.addDrive("MyDrive2", COLLABORATION_WS, "*:/platform/administrators", "/TestTreeNode/A1", "admin-view", "", true, true, true, true, "nt:folder", "*"); driveService.addDrive("MyDrive3", COLLABORATION_WS, "*", "/TestTreeNode/A1", // Marry have permission "admin-view", "", true, true, true, true, "nt:folder", "*"); driveService.addDrive("Public2", COLLABORATION_WS, "*:/platform/users", "/Users/john/Public2", // Marry have permission "simple-view, admin-view", "", false, false, true, false, "nt:folder,nt:unstructured", "*"); activateGroupDriveTemplate("marry"); List<String> userRoles = new ArrayList<String>(); userRoles.add("marry"); userRoles.add("*:/platform/web-contributors"); // Marry have permission userRoles.add("*:/platform/users"); // Marry have permission driveService.getDriveByUserRoles("marry", userRoles); driveService.getDriveByUserRoles("marry", userRoles); Object drivesInCache = caService.getCacheInstance("wcm.drive").get(REPO_NAME + "_" + "marry" + ALL_DRIVES_CACHED_BY_ROLES); assertEquals(((List<DriveData>)drivesInCache).size(), 6); } /** * Test init() */ public void testInitMethod() { try { driveService.init(); } catch (Exception e) { fail(); } } /** * Add Groups Drive Template * * @throws Exception */ private void activateGroupDriveTemplate(String userId) throws Exception { driveService.clearGroupCache(userId); driveService.addDrive("Groups", COLLABORATION_WS, "*:${groupId}", "/Groups${groupId}", "simple-view", "", false, true, true, false, "nt:folder,nt:unstructured", "*"); driveService.getAllDrives(); } /** * Deactivate group drive template * @throws Exception */ private void deActivateGroupDriveTemplate() throws Exception { Field field = ManageDriveServiceImpl.class.getDeclaredField("groupDriveTemplate_"); field.setAccessible(true); field.set(driveService, null); } public void tearDown() throws Exception { removeAllDrives(); session.getRootNode().getNode("TestTreeNode").remove(); session.save(); super.tearDown(); } private void removeAllDrives() throws Exception { Session mySession = sessionProviderService_.getSystemSessionProvider(null).getSession(DMSSYSTEM_WS, repository); Node rootDrive = (Node)mySession.getItem(drivePath); NodeIterator iter = rootDrive.getNodes(); while (iter.hasNext()) { iter.nextNode().remove(); } rootDrive.getSession().save(); session.save(); } }