mirror of
				https://github.com/Alfresco/alfresco-community-repo.git
				synced 2025-10-29 15:21:53 +00:00 
			
		
		
		
	125606 rmunteanu: Merged 5.1.1 (5.1.1) to 5.1.N (5.1.2)
      125515 slanglois: MNT-16155 Update source headers - add new Copyrights for Java and JSP source files + automatic check in the build
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@125788 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
		
	
		
			
				
	
	
		
			1008 lines
		
	
	
		
			50 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			1008 lines
		
	
	
		
			50 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| /*
 | |
|  * #%L
 | |
|  * Alfresco Repository
 | |
|  * %%
 | |
|  * Copyright (C) 2005 - 2016 Alfresco Software Limited
 | |
|  * %%
 | |
|  * This file is part of the Alfresco software. 
 | |
|  * If the software was purchased under a paid Alfresco license, the terms of 
 | |
|  * the paid license agreement will prevail.  Otherwise, the software is 
 | |
|  * provided under the following open source license terms:
 | |
|  * 
 | |
|  * Alfresco is free software: you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU Lesser General Public License as published by
 | |
|  * the Free Software Foundation, either version 3 of the License, or
 | |
|  * (at your option) any later version.
 | |
|  * 
 | |
|  * Alfresco 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 Lesser General Public License for more details.
 | |
|  * 
 | |
|  * You should have received a copy of the GNU Lesser General Public License
 | |
|  * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
 | |
|  * #L%
 | |
|  */
 | |
| package org.alfresco.repo.remotecredentials;
 | |
| 
 | |
| import static org.junit.Assert.assertEquals;
 | |
| import static org.junit.Assert.assertNotNull;
 | |
| 
 | |
| import java.util.ArrayList;
 | |
| import java.util.Collections;
 | |
| import java.util.List;
 | |
| import java.util.Map.Entry;
 | |
| import java.util.Set;
 | |
| 
 | |
| import org.alfresco.model.ContentModel;
 | |
| import org.alfresco.query.PagingRequest;
 | |
| import org.alfresco.query.PagingResults;
 | |
| import org.alfresco.repo.model.Repository;
 | |
| import org.alfresco.repo.policy.BehaviourFilter;
 | |
| import org.alfresco.repo.security.authentication.AuthenticationUtil;
 | |
| import org.alfresco.repo.transaction.RetryingTransactionHelper;
 | |
| import org.alfresco.service.cmr.dictionary.DictionaryService;
 | |
| import org.alfresco.service.cmr.remotecredentials.BaseCredentialsInfo;
 | |
| import org.alfresco.service.cmr.remotecredentials.PasswordCredentialsInfo;
 | |
| import org.alfresco.service.cmr.remotecredentials.RemoteCredentialsService;
 | |
| import org.alfresco.service.cmr.repository.ChildAssociationRef;
 | |
| import org.alfresco.service.cmr.repository.NodeRef;
 | |
| import org.alfresco.service.cmr.repository.NodeService;
 | |
| import org.alfresco.service.cmr.security.MutableAuthenticationService;
 | |
| import org.alfresco.service.cmr.security.PermissionService;
 | |
| import org.alfresco.service.cmr.security.PersonService;
 | |
| import org.alfresco.service.namespace.NamespaceService;
 | |
| import org.alfresco.service.namespace.QName;
 | |
| import org.alfresco.service.transaction.TransactionService;
 | |
| import org.alfresco.test_category.OwnJVMTestsCategory;
 | |
| import org.alfresco.util.PropertyMap;
 | |
| import org.alfresco.util.test.junitrules.ApplicationContextInit;
 | |
| import org.alfresco.util.test.junitrules.TemporaryNodes;
 | |
| import org.alfresco.util.test.junitrules.WellKnownNodes;
 | |
| import org.junit.After;
 | |
| import org.junit.AfterClass;
 | |
| import org.junit.Before;
 | |
| import org.junit.BeforeClass;
 | |
| import org.junit.ClassRule;
 | |
| import org.junit.Rule;
 | |
| import org.junit.Test;
 | |
| import org.junit.experimental.categories.Category;
 | |
| import org.springframework.context.ApplicationContext;
 | |
| 
 | |
| /**
 | |
|  * Test cases for {@link RemoteCredentialsServiceImpl} and friends.
 | |
|  * 
 | |
|  * Note - this test will largely use a test shared credentials
 | |
|  *  container, but one test puts things into the real credentials folder
 | |
|  * 
 | |
|  * @author Nick Burch
 | |
|  * @since Odin
 | |
|  */
 | |
| @Category(OwnJVMTestsCategory.class)
 | |
| public class RemoteCredentialsServicesTest
 | |
| {
 | |
|     private static final String TEST_REMOTE_SYSTEM_ONE = "TestRemoteSystemOne";
 | |
|     private static final String TEST_REMOTE_SYSTEM_TWO = "TestRemoteSystemTwo";
 | |
|     private static final String TEST_REMOTE_SYSTEM_THREE = "aAaAaTestRemoteSystemThree";
 | |
|     
 | |
|     private static final String TEST_REMOTE_USERNAME_ONE   = "test@example.com";
 | |
|     private static final String TEST_REMOTE_USERNAME_TWO   = "test2@example.com";
 | |
|     private static final String TEST_REMOTE_USERNAME_THREE = "test3@example.com";
 | |
|     
 | |
|     private static final String SHARED_SYSTEM_CONTAINER_NAME = "test-remote-credentials";
 | |
| 
 | |
|     // Rule to initialise the default Alfresco spring configuration
 | |
|     @ClassRule public static ApplicationContextInit APP_CONTEXT_INIT = new ApplicationContextInit();
 | |
|     
 | |
|     // A rule to help find well known nodes in the system
 | |
|     @ClassRule public static WellKnownNodes knownNodes = new WellKnownNodes(APP_CONTEXT_INIT);
 | |
|     
 | |
|     // A rule to manage test nodes use in each test method
 | |
|     @ClassRule public static TemporaryNodes classTestNodes = new TemporaryNodes(APP_CONTEXT_INIT);
 | |
|     @Rule public TemporaryNodes testNodes = new TemporaryNodes(APP_CONTEXT_INIT);
 | |
|     
 | |
|     // injected services
 | |
|     private static MutableAuthenticationService AUTHENTICATION_SERVICE;
 | |
|     private static BehaviourFilter              BEHAVIOUR_FILTER;
 | |
|     private static RemoteCredentialsService     REMOTE_CREDENTIALS_SERVICE;
 | |
|     private static RemoteCredentialsService     PRIVATE_REMOTE_CREDENTIALS_SERVICE;
 | |
|     private static DictionaryService            DICTIONARY_SERVICE;
 | |
|     private static NodeService                  NODE_SERVICE;
 | |
|     private static NodeService                  PUBLIC_NODE_SERVICE;
 | |
|     private static NamespaceService             NAMESPACE_SERVICE;
 | |
|     private static Repository                   REPOSITORY_HELPER;
 | |
|     private static PersonService                PERSON_SERVICE;
 | |
|     private static RetryingTransactionHelper    TRANSACTION_HELPER;
 | |
|     private static TransactionService           TRANSACTION_SERVICE;
 | |
|     private static PermissionService            PERMISSION_SERVICE;
 | |
|     
 | |
|     private static final String TEST_USER_ONE = RemoteCredentialsServicesTest.class.getSimpleName() + "_testuser1";
 | |
|     private static final String TEST_USER_TWO = RemoteCredentialsServicesTest.class.getSimpleName() + "_testuser2";
 | |
|     private static final String TEST_USER_THREE = RemoteCredentialsServicesTest.class.getSimpleName() + "_testuser3";
 | |
|     private static final String ADMIN_USER = AuthenticationUtil.getAdminUserName();
 | |
| 
 | |
|     @BeforeClass public static void initTestsContext() throws Exception
 | |
|     {
 | |
|         ApplicationContext testContext = APP_CONTEXT_INIT.getApplicationContext();
 | |
|         
 | |
|         PRIVATE_REMOTE_CREDENTIALS_SERVICE = (RemoteCredentialsService)testContext.getBean("remoteCredentialsService");
 | |
|         REMOTE_CREDENTIALS_SERVICE = (RemoteCredentialsService)testContext.getBean("RemoteCredentialsService");
 | |
|         
 | |
|         AUTHENTICATION_SERVICE = (MutableAuthenticationService)testContext.getBean("authenticationService");
 | |
|         BEHAVIOUR_FILTER       = (BehaviourFilter)testContext.getBean("policyBehaviourFilter");
 | |
|         DICTIONARY_SERVICE     = (DictionaryService)testContext.getBean("dictionaryService");
 | |
|         NAMESPACE_SERVICE      = (NamespaceService)testContext.getBean("namespaceService");
 | |
|         REPOSITORY_HELPER      = (Repository)testContext.getBean("repositoryHelper");
 | |
|         NODE_SERVICE           = (NodeService)testContext.getBean("nodeService");
 | |
|         PUBLIC_NODE_SERVICE    = (NodeService)testContext.getBean("NodeService");
 | |
|         PERSON_SERVICE         = (PersonService)testContext.getBean("personService");
 | |
|         TRANSACTION_HELPER     = (RetryingTransactionHelper)testContext.getBean("retryingTransactionHelper");
 | |
|         TRANSACTION_SERVICE    = (TransactionService)testContext.getBean("TransactionService");
 | |
|         PERMISSION_SERVICE     = (PermissionService)testContext.getBean("permissionService");
 | |
| 
 | |
|         // Switch to a test shared system container
 | |
|         RemoteCredentialsServiceImpl.setSharedCredentialsSystemContainerName(SHARED_SYSTEM_CONTAINER_NAME);
 | |
|     }
 | |
|     
 | |
|     @Before public void setupUsers() throws Exception
 | |
|     {
 | |
|         // Do the setup as admin
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER);
 | |
|         createUser(TEST_USER_ONE);
 | |
|         createUser(TEST_USER_TWO);
 | |
|         createUser(TEST_USER_THREE);
 | |
|         
 | |
|         // We need to create the test site as the test user so that they can contribute content to it in tests below.
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Tests that read only methods don't create the shared credentials
 | |
|      *  container, but that write ones will do.
 | |
|      */
 | |
|     @Test public void testSharedCredentialsContainer() throws Exception
 | |
|     {
 | |
|         // Run as a test user
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
 | |
|         
 | |
|         
 | |
|         // To start with, the container shouldn't be there
 | |
|         NodeRef container = ((RemoteCredentialsServiceImpl)PRIVATE_REMOTE_CREDENTIALS_SERVICE).getSharedContainerNodeRef(false);
 | |
|         if (container != null)
 | |
|         {
 | |
|             // Tidy up
 | |
|             AuthenticationUtil.setAdminUserAsFullyAuthenticatedUser();
 | |
|             
 | |
|             // Zap the container
 | |
|             PUBLIC_NODE_SERVICE.deleteNode(container);
 | |
|         }
 | |
|         
 | |
|         
 | |
|         // Run as a test user
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
 | |
|         
 | |
|         // Ask for the list of shared remote systems
 | |
|         REMOTE_CREDENTIALS_SERVICE.listSharedRemoteSystems(new PagingRequest(10));
 | |
|         
 | |
|         // Won't have been created by a read
 | |
|         container = ((RemoteCredentialsServiceImpl)PRIVATE_REMOTE_CREDENTIALS_SERVICE).getSharedContainerNodeRef(false);
 | |
|         assertEquals(null, container);
 | |
|         
 | |
|         
 | |
|         // Try to store some credentials
 | |
|         PasswordCredentialsInfo credentials = new PasswordCredentialsInfoImpl();
 | |
|         REMOTE_CREDENTIALS_SERVICE.createSharedCredentials(TEST_REMOTE_SYSTEM_ONE, credentials);
 | |
|         
 | |
|         // It will now exist
 | |
|         container = ((RemoteCredentialsServiceImpl)PRIVATE_REMOTE_CREDENTIALS_SERVICE).getSharedContainerNodeRef(false);
 | |
|         assertNotNull(container);
 | |
|         
 | |
|         // Should have a marker aspect, and the specified name
 | |
|         Set<QName> cAspects = PUBLIC_NODE_SERVICE.getAspects(container);
 | |
|         assertEquals("Aspect missing, found " + cAspects, true, 
 | |
|                 cAspects.contains(RemoteCredentialsModel.ASPECT_REMOTE_CREDENTIALS_SYSTEM_CONTAINER));
 | |
|         assertEquals(SHARED_SYSTEM_CONTAINER_NAME, PUBLIC_NODE_SERVICE.getProperty(container, ContentModel.PROP_NAME));
 | |
|         
 | |
|         // Should have single node in it
 | |
|         assertEquals(1, PUBLIC_NODE_SERVICE.getChildAssocs(container).size());
 | |
|         
 | |
|         
 | |
|         // Tidy up
 | |
|         AuthenticationUtil.setAdminUserAsFullyAuthenticatedUser();
 | |
|         
 | |
|         // Zap the container
 | |
|         PUBLIC_NODE_SERVICE.deleteNode(container);
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * Creating shared and personal credentials, then checking how this
 | |
|      *  affects the listing of Remote Systems
 | |
|      */
 | |
|     @Test public void testCreateCredentialsAndSystemListing() throws Exception
 | |
|     {
 | |
|         PagingResults<String> systems = null;
 | |
|         
 | |
|         // Run as a test user
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
 | |
| 
 | |
|         
 | |
|         // Initially both should be empty
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listPersonRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals("No systems should be found, got " + systems.getPage(), 
 | |
|                      0, systems.getPage().size());
 | |
|         
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listSharedRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals("No systems should be found, got " + systems.getPage(), 
 | |
|                      0, systems.getPage().size());
 | |
|         
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listAllRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals("No systems should be found, got " + systems.getPage(), 
 | |
|                      0, systems.getPage().size());
 | |
|         
 | |
|         
 | |
|         // Create one for the person
 | |
|         PasswordCredentialsInfoImpl credentials = new PasswordCredentialsInfoImpl();
 | |
|         credentials.setRemoteUsername(TEST_REMOTE_USERNAME_ONE);
 | |
|         REMOTE_CREDENTIALS_SERVICE.createPersonCredentials(TEST_REMOTE_SYSTEM_ONE, credentials);
 | |
|         
 | |
|         // Check it shows up
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listPersonRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals("Unexpected systems " + systems.getPage(),
 | |
|                      1, systems.getPage().size());
 | |
|         
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listSharedRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals("Unexpected systems " + systems.getPage(),
 | |
|                      0, systems.getPage().size());
 | |
|         
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listAllRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals("Unexpected systems " + systems.getPage(),
 | |
|                      1, systems.getPage().size());
 | |
|         
 | |
|         
 | |
|         // Switch to another user, check it doesn't
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_TWO);
 | |
|         
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listPersonRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(0, systems.getPage().size());
 | |
|         
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listSharedRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(0, systems.getPage().size());
 | |
|         
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listAllRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(0, systems.getPage().size());
 | |
|         
 | |
|         
 | |
|         // Create both personal and shared ones as the current user
 | |
|         credentials = new PasswordCredentialsInfoImpl();
 | |
|         credentials.setRemoteUsername(TEST_REMOTE_USERNAME_TWO);
 | |
|         REMOTE_CREDENTIALS_SERVICE.createPersonCredentials(TEST_REMOTE_SYSTEM_TWO, credentials);
 | |
|         
 | |
|         credentials = new PasswordCredentialsInfoImpl();
 | |
|         credentials.setRemoteUsername(TEST_REMOTE_USERNAME_THREE);
 | |
|         REMOTE_CREDENTIALS_SERVICE.createPersonCredentials(TEST_REMOTE_SYSTEM_THREE, credentials);
 | |
|         
 | |
|         credentials = new PasswordCredentialsInfoImpl();
 | |
|         credentials.setRemoteUsername(TEST_REMOTE_USERNAME_THREE);
 | |
|         BaseCredentialsInfo cc = REMOTE_CREDENTIALS_SERVICE.createSharedCredentials(TEST_REMOTE_SYSTEM_THREE, credentials);
 | |
|         
 | |
|         // Check as the user who created these
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listPersonRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(2, systems.getPage().size());
 | |
|         
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listSharedRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(1, systems.getPage().size());
 | |
|         
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listAllRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(2, systems.getPage().size());
 | |
|         
 | |
|         
 | |
|         // Check as the first user, they should see the shared one
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
 | |
|         
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listPersonRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(1, systems.getPage().size());
 | |
|         
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listSharedRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(1, systems.getPage().size());
 | |
|         
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listAllRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(2, systems.getPage().size());
 | |
|         
 | |
|         
 | |
|         // Change the shared permissions, see it goes away
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER);
 | |
|         PERMISSION_SERVICE.setInheritParentPermissions(cc.getRemoteSystemContainerNodeRef(), false);
 | |
|         
 | |
|         
 | |
|         // Check as the owning user, will still see all of them
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_TWO);
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listPersonRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(2, systems.getPage().size());
 | |
|         
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listSharedRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(1, systems.getPage().size());
 | |
|         
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listAllRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(2, systems.getPage().size());
 | |
|         
 | |
|         
 | |
|         // Check as the other user, shared will have gone as we lost read permissions
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
 | |
|         
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listPersonRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(1, systems.getPage().size());
 | |
|         
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listSharedRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(0, systems.getPage().size());
 | |
|         
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listAllRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(1, systems.getPage().size());
 | |
|         
 | |
|         
 | |
|         // Finally, check the listings have the correct things in them
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_TWO);
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listPersonRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(2, systems.getPage().size());
 | |
|         assertEquals(true, systems.getPage().contains(TEST_REMOTE_SYSTEM_TWO));
 | |
|         assertEquals(true, systems.getPage().contains(TEST_REMOTE_SYSTEM_THREE));
 | |
|         
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listSharedRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(1, systems.getPage().size());
 | |
|         assertEquals(true, systems.getPage().contains(TEST_REMOTE_SYSTEM_THREE));
 | |
|         
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listAllRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(2, systems.getPage().size());
 | |
|         assertEquals(true, systems.getPage().contains(TEST_REMOTE_SYSTEM_TWO));
 | |
|         assertEquals(true, systems.getPage().contains(TEST_REMOTE_SYSTEM_THREE));
 | |
|     }
 | |
|     
 | |
|     /** Test CRUD on person credentials, with listing */
 | |
|     @Test public void testPersonCredentialsCRUD() throws Exception
 | |
|     {
 | |
|         PagingResults<String> systems = null;
 | |
|         PagingResults<? extends BaseCredentialsInfo> creds = null;
 | |
|         
 | |
|         
 | |
|         // Run as a test user
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
 | |
| 
 | |
|         // Initially both should be empty empty
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listPersonRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals("No systems should be found, got " + systems.getPage(), 
 | |
|                      0, systems.getPage().size());
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listSharedRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals("No systems should be found, got " + systems.getPage(), 
 | |
|                      0, systems.getPage().size());
 | |
|         
 | |
|         
 | |
|         // Create for a person
 | |
|         PasswordCredentialsInfoImpl pwCred = new PasswordCredentialsInfoImpl();
 | |
|         pwCred.setRemoteUsername(TEST_REMOTE_USERNAME_ONE);
 | |
|         BaseCredentialsInfo credentials = REMOTE_CREDENTIALS_SERVICE.createPersonCredentials(TEST_REMOTE_SYSTEM_ONE, pwCred);
 | |
|         
 | |
|         // Check the new object was populated properly
 | |
|         assertNotNull(credentials);
 | |
|         assertNotNull(credentials.getNodeRef());
 | |
|         assertNotNull(credentials.getRemoteSystemContainerNodeRef());
 | |
|         assertEquals(TEST_REMOTE_SYSTEM_ONE, credentials.getRemoteSystemName());
 | |
|         assertEquals(TEST_REMOTE_USERNAME_ONE, credentials.getRemoteUsername());
 | |
|         assertEquals(RemoteCredentialsModel.TYPE_PASSWORD_CREDENTIALS, credentials.getCredentialsType());
 | |
|         
 | |
|         
 | |
|         // Fetch and re-check
 | |
|         credentials = REMOTE_CREDENTIALS_SERVICE.getPersonCredentials(TEST_REMOTE_SYSTEM_ONE);
 | |
|         assertNotNull(credentials);
 | |
|         assertNotNull(credentials.getNodeRef());
 | |
|         assertNotNull(credentials.getRemoteSystemContainerNodeRef());
 | |
|         assertEquals(TEST_REMOTE_SYSTEM_ONE, credentials.getRemoteSystemName());
 | |
|         assertEquals(TEST_REMOTE_USERNAME_ONE, credentials.getRemoteUsername());
 | |
|         assertEquals(RemoteCredentialsModel.TYPE_PASSWORD_CREDENTIALS, credentials.getCredentialsType());
 | |
|         
 | |
|         // Won't be there for non-existent systems
 | |
|         credentials = REMOTE_CREDENTIALS_SERVICE.getPersonCredentials(TEST_REMOTE_SYSTEM_TWO);
 | |
|         assertEquals(null, credentials);
 | |
|         credentials = REMOTE_CREDENTIALS_SERVICE.getPersonCredentials(TEST_REMOTE_SYSTEM_THREE);
 | |
|         assertEquals(null, credentials);
 | |
|         
 | |
|         
 | |
|         // Update
 | |
|         credentials = REMOTE_CREDENTIALS_SERVICE.getPersonCredentials(TEST_REMOTE_SYSTEM_ONE);
 | |
|         assertEquals(PasswordCredentialsInfoImpl.class, credentials.getClass());
 | |
|         pwCred = (PasswordCredentialsInfoImpl)credentials;
 | |
|         
 | |
|         pwCred.setRemoteUsername(TEST_REMOTE_USERNAME_TWO);
 | |
|         pwCred.setRemotePassword("testing");
 | |
|         
 | |
|         credentials = REMOTE_CREDENTIALS_SERVICE.updateCredentials(pwCred);
 | |
|         assertNotNull(credentials);
 | |
|         assertEquals(TEST_REMOTE_USERNAME_TWO, credentials.getRemoteUsername());
 | |
|         
 | |
|         // Fetch and re-check
 | |
|         pwCred = (PasswordCredentialsInfoImpl)REMOTE_CREDENTIALS_SERVICE.getPersonCredentials(TEST_REMOTE_SYSTEM_ONE);
 | |
|         assertNotNull(pwCred);
 | |
|         assertEquals(TEST_REMOTE_USERNAME_TWO, pwCred.getRemoteUsername());
 | |
|         assertEquals("testing", pwCred.getRemotePassword());
 | |
|         
 | |
|         
 | |
|         // Update the auth worked flag
 | |
|         credentials = REMOTE_CREDENTIALS_SERVICE.getPersonCredentials(TEST_REMOTE_SYSTEM_ONE);
 | |
|         assertEquals(true, credentials.getLastAuthenticationSucceeded());
 | |
|         
 | |
|         // To the same thing
 | |
|         credentials = REMOTE_CREDENTIALS_SERVICE.updateCredentialsAuthenticationSucceeded(true, credentials);
 | |
|         assertEquals(true, credentials.getLastAuthenticationSucceeded());
 | |
|         
 | |
|         credentials = REMOTE_CREDENTIALS_SERVICE.getPersonCredentials(TEST_REMOTE_SYSTEM_ONE);
 | |
|         assertEquals(true, credentials.getLastAuthenticationSucceeded());
 | |
|         
 | |
|         // To a different things
 | |
|         credentials = REMOTE_CREDENTIALS_SERVICE.updateCredentialsAuthenticationSucceeded(false, credentials);
 | |
|         assertEquals(false, credentials.getLastAuthenticationSucceeded());
 | |
|         
 | |
|         credentials = REMOTE_CREDENTIALS_SERVICE.getPersonCredentials(TEST_REMOTE_SYSTEM_ONE);
 | |
|         assertEquals(false, credentials.getLastAuthenticationSucceeded());
 | |
|         
 | |
|         // And back
 | |
|         credentials = REMOTE_CREDENTIALS_SERVICE.updateCredentialsAuthenticationSucceeded(true, credentials);
 | |
|         assertEquals(true, credentials.getLastAuthenticationSucceeded());
 | |
|         
 | |
|         credentials = REMOTE_CREDENTIALS_SERVICE.getPersonCredentials(TEST_REMOTE_SYSTEM_ONE);
 | |
|         assertEquals(true, credentials.getLastAuthenticationSucceeded());
 | |
|         
 | |
|         
 | |
|         // List remote systems
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listPersonRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(1, systems.getPage().size());
 | |
|         
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listSharedRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(0, systems.getPage().size());
 | |
|         
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listAllRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(1, systems.getPage().size());
 | |
|         
 | |
|         
 | |
|         // List the credentials
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listPersonCredentials(TEST_REMOTE_SYSTEM_ONE, null, new PagingRequest(10));
 | |
|         assertEquals(1, creds.getPage().size());
 | |
|         assertEquals(TEST_REMOTE_USERNAME_TWO, creds.getPage().get(0).getRemoteUsername());
 | |
|         
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_ONE, null, new PagingRequest(10));
 | |
|         assertEquals(0, creds.getPage().size());
 | |
|         
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listAllCredentials(TEST_REMOTE_SYSTEM_ONE, null, new PagingRequest(10));
 | |
|         assertEquals(1, creds.getPage().size());
 | |
|         assertEquals(TEST_REMOTE_USERNAME_TWO, creds.getPage().get(0).getRemoteUsername());
 | |
|         
 | |
|         
 | |
|         // Delete
 | |
|         REMOTE_CREDENTIALS_SERVICE.deleteCredentials(credentials);
 | |
|         
 | |
|         credentials = REMOTE_CREDENTIALS_SERVICE.getPersonCredentials(TEST_REMOTE_SYSTEM_ONE);
 | |
|         assertEquals(null, credentials);
 | |
|         
 | |
|         
 | |
|         // List again - credentials should have gone, but system remains
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listPersonCredentials(TEST_REMOTE_SYSTEM_ONE, null, new PagingRequest(10));
 | |
|         assertEquals(0, creds.getPage().size());
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_ONE, null, new PagingRequest(10));
 | |
|         assertEquals(0, creds.getPage().size());
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listAllCredentials(TEST_REMOTE_SYSTEM_ONE, null, new PagingRequest(10));
 | |
|         assertEquals(0, creds.getPage().size());
 | |
|         
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listPersonRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(1, systems.getPage().size());
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listSharedRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(0, systems.getPage().size());
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listAllRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(1, systems.getPage().size());
 | |
|         
 | |
| 
 | |
|         // Create credentials of Password, OAuth1 and OAuth2 types
 | |
|         pwCred = new PasswordCredentialsInfoImpl();
 | |
|         pwCred.setRemoteUsername(TEST_REMOTE_USERNAME_ONE);
 | |
|         REMOTE_CREDENTIALS_SERVICE.createPersonCredentials(TEST_REMOTE_SYSTEM_TWO, pwCred);
 | |
|         
 | |
|         OAuth1CredentialsInfoImpl oa1Cred = new OAuth1CredentialsInfoImpl();
 | |
|         oa1Cred.setRemoteUsername(TEST_REMOTE_USERNAME_TWO);
 | |
|         oa1Cred.setOAuthToken("test");
 | |
|         REMOTE_CREDENTIALS_SERVICE.createPersonCredentials(TEST_REMOTE_SYSTEM_TWO, oa1Cred);
 | |
|         
 | |
|         OAuth2CredentialsInfoImpl oa2Cred = new OAuth2CredentialsInfoImpl();
 | |
|         oa2Cred.setRemoteUsername(TEST_REMOTE_USERNAME_THREE);
 | |
|         oa2Cred.setOauthAccessToken("testA");
 | |
|         oa2Cred.setOauthRefreshToken("testR");
 | |
|         REMOTE_CREDENTIALS_SERVICE.createPersonCredentials(TEST_REMOTE_SYSTEM_TWO, oa2Cred);
 | |
|     
 | |
|         
 | |
|         // List, should see all three sets of credentials
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listPersonCredentials(TEST_REMOTE_SYSTEM_TWO, null, new PagingRequest(10));
 | |
|         assertEquals(3, creds.getPage().size());
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_TWO, null, new PagingRequest(10));
 | |
|         assertEquals(0, creds.getPage().size());
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listAllCredentials(TEST_REMOTE_SYSTEM_TWO, null, new PagingRequest(10));
 | |
|         assertEquals(3, creds.getPage().size());
 | |
|         
 | |
|         // List the systems, still only system one and two
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listPersonRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(2, systems.getPage().size());
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listSharedRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(0, systems.getPage().size());
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listAllRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(2, systems.getPage().size());
 | |
|         
 | |
|         
 | |
|         // Check we can filter credentials by type
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listPersonCredentials(TEST_REMOTE_SYSTEM_TWO, null, new PagingRequest(10));
 | |
|         assertEquals(3, creds.getPage().size());
 | |
|         
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listPersonCredentials(TEST_REMOTE_SYSTEM_TWO, RemoteCredentialsModel.TYPE_PASSWORD_CREDENTIALS, new PagingRequest(10));
 | |
|         assertEquals(1, creds.getPage().size());
 | |
|         assertEquals(TEST_REMOTE_USERNAME_ONE, creds.getPage().get(0).getRemoteUsername());
 | |
|         
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listPersonCredentials(TEST_REMOTE_SYSTEM_TWO, RemoteCredentialsModel.TYPE_OAUTH1_CREDENTIALS, new PagingRequest(10));
 | |
|         assertEquals(1, creds.getPage().size());
 | |
|         assertEquals(TEST_REMOTE_USERNAME_TWO, creds.getPage().get(0).getRemoteUsername());
 | |
|         
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listPersonCredentials(TEST_REMOTE_SYSTEM_TWO, RemoteCredentialsModel.TYPE_OAUTH2_CREDENTIALS, new PagingRequest(10));
 | |
|         assertEquals(1, creds.getPage().size());
 | |
|         assertEquals(TEST_REMOTE_USERNAME_THREE, creds.getPage().get(0).getRemoteUsername());
 | |
|     }
 | |
|     
 | |
|     /** Test CRUD on shared credentials, with listing */
 | |
|     @Test public void testSharedCredentialsCRUD() throws Exception
 | |
|     {
 | |
|         PagingResults<String> systems = null;
 | |
|         PagingResults<? extends BaseCredentialsInfo> creds = null;
 | |
|         
 | |
|         
 | |
|         // Run as a test user
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
 | |
| 
 | |
|         // Initially both should be empty empty
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listPersonRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals("No systems should be found, got " + systems.getPage(), 
 | |
|                      0, systems.getPage().size());
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listSharedRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals("No systems should be found, got " + systems.getPage(), 
 | |
|                      0, systems.getPage().size());
 | |
|         
 | |
| 
 | |
|         // Create shared
 | |
|         PasswordCredentialsInfoImpl pwCred = new PasswordCredentialsInfoImpl();
 | |
|         pwCred.setRemoteUsername(TEST_REMOTE_USERNAME_ONE);
 | |
|         BaseCredentialsInfo credentials = REMOTE_CREDENTIALS_SERVICE.createSharedCredentials(TEST_REMOTE_SYSTEM_ONE, pwCred);
 | |
|         
 | |
|         // Check the new object was populated properly
 | |
|         assertNotNull(credentials);
 | |
|         assertNotNull(credentials.getNodeRef());
 | |
|         assertNotNull(credentials.getRemoteSystemContainerNodeRef());
 | |
|         assertEquals(TEST_REMOTE_SYSTEM_ONE, credentials.getRemoteSystemName());
 | |
|         assertEquals(TEST_REMOTE_USERNAME_ONE, credentials.getRemoteUsername());
 | |
|         assertEquals(RemoteCredentialsModel.TYPE_PASSWORD_CREDENTIALS, credentials.getCredentialsType());
 | |
|         
 | |
|         
 | |
|         // Update
 | |
|         pwCred = (PasswordCredentialsInfoImpl)credentials;
 | |
|         pwCred.setRemoteUsername(TEST_REMOTE_USERNAME_TWO);
 | |
|         credentials = REMOTE_CREDENTIALS_SERVICE.updateCredentials(pwCred);
 | |
|         
 | |
|         assertNotNull(credentials);
 | |
|         assertNotNull(credentials.getNodeRef());
 | |
|         assertNotNull(credentials.getRemoteSystemContainerNodeRef());
 | |
|         assertEquals(TEST_REMOTE_SYSTEM_ONE, credentials.getRemoteSystemName());
 | |
|         assertEquals(TEST_REMOTE_USERNAME_TWO, credentials.getRemoteUsername());
 | |
|         assertEquals(RemoteCredentialsModel.TYPE_PASSWORD_CREDENTIALS, credentials.getCredentialsType());
 | |
|         
 | |
|         
 | |
|         // List
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listPersonRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(0, systems.getPage().size());
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listSharedRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(1, systems.getPage().size());
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listAllRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(1, systems.getPage().size());
 | |
|         
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listPersonCredentials(TEST_REMOTE_SYSTEM_ONE, null, new PagingRequest(10));
 | |
|         assertEquals(0, creds.getPage().size());
 | |
|         
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_ONE, null, new PagingRequest(10));
 | |
|         assertEquals(1, creds.getPage().size());
 | |
|         assertEquals(TEST_REMOTE_USERNAME_TWO, creds.getPage().get(0).getRemoteUsername());
 | |
|         
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listAllCredentials(TEST_REMOTE_SYSTEM_ONE, null, new PagingRequest(10));
 | |
|         assertEquals(1, creds.getPage().size());
 | |
|         assertEquals(TEST_REMOTE_USERNAME_TWO, creds.getPage().get(0).getRemoteUsername());
 | |
|         
 | |
|         
 | |
|         // Delete
 | |
|         REMOTE_CREDENTIALS_SERVICE.deleteCredentials(credentials);
 | |
|         
 | |
|         
 | |
|         // List, system remains, credentials gone
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listPersonRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(0, systems.getPage().size());
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listSharedRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(1, systems.getPage().size());
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listAllRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(1, systems.getPage().size());
 | |
|         
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listPersonCredentials(TEST_REMOTE_SYSTEM_ONE, null, new PagingRequest(10));
 | |
|         assertEquals(0, creds.getPage().size());
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_ONE, null, new PagingRequest(10));
 | |
|         assertEquals(0, creds.getPage().size());
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listAllCredentials(TEST_REMOTE_SYSTEM_ONE, null, new PagingRequest(10));
 | |
|         assertEquals(0, creds.getPage().size());
 | |
|     }
 | |
|     
 | |
|     /** Dedicated permissions and paging tests */
 | |
|     @Test public void testListingPermissionsAndPaging() throws Exception
 | |
|     {
 | |
|         PagingResults<String> systems = null;
 | |
|         PagingResults<? extends BaseCredentialsInfo> creds = null;
 | |
|         
 | |
|         
 | |
|         // Run as a test user
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
 | |
| 
 | |
|         // Initially both should be empty empty
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listPersonRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals("No systems should be found, got " + systems.getPage(), 
 | |
|                      0, systems.getPage().size());
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listSharedRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals("No systems should be found, got " + systems.getPage(), 
 | |
|                      0, systems.getPage().size());
 | |
|         
 | |
| 
 | |
|         // Create some credentials as the first user, for systems One and Two
 | |
|         PasswordCredentialsInfoImpl pwCred = new PasswordCredentialsInfoImpl();
 | |
|         pwCred.setRemoteUsername(TEST_REMOTE_USERNAME_ONE);
 | |
|         REMOTE_CREDENTIALS_SERVICE.createSharedCredentials(TEST_REMOTE_SYSTEM_ONE, pwCred);
 | |
|         
 | |
|         pwCred = new PasswordCredentialsInfoImpl();
 | |
|         pwCred.setRemoteUsername(TEST_REMOTE_USERNAME_TWO);
 | |
|         REMOTE_CREDENTIALS_SERVICE.createSharedCredentials(TEST_REMOTE_SYSTEM_ONE, pwCred);
 | |
|         
 | |
|         pwCred = new PasswordCredentialsInfoImpl();
 | |
|         pwCred.setRemoteUsername(TEST_REMOTE_USERNAME_TWO);
 | |
|         REMOTE_CREDENTIALS_SERVICE.createSharedCredentials(TEST_REMOTE_SYSTEM_TWO, pwCred);
 | |
|         
 | |
|         pwCred = new PasswordCredentialsInfoImpl();
 | |
|         pwCred.setRemoteUsername(TEST_REMOTE_USERNAME_TWO);
 | |
|         REMOTE_CREDENTIALS_SERVICE.createPersonCredentials(TEST_REMOTE_SYSTEM_TWO, pwCred);
 | |
|         
 | |
|         
 | |
|         // Switch to the second user, create some credentials on Two and Three
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_TWO);
 | |
|         
 | |
|         pwCred = new PasswordCredentialsInfoImpl();
 | |
|         pwCred.setRemoteUsername(TEST_REMOTE_USERNAME_TWO);
 | |
|         REMOTE_CREDENTIALS_SERVICE.createSharedCredentials(TEST_REMOTE_SYSTEM_TWO, pwCred);
 | |
|         
 | |
|         pwCred = new PasswordCredentialsInfoImpl();
 | |
|         pwCred.setRemoteUsername(TEST_REMOTE_USERNAME_THREE);
 | |
|         REMOTE_CREDENTIALS_SERVICE.createSharedCredentials(TEST_REMOTE_SYSTEM_THREE, pwCred);
 | |
|         
 | |
|         pwCred = new PasswordCredentialsInfoImpl();
 | |
|         pwCred.setRemoteUsername(TEST_REMOTE_USERNAME_THREE);
 | |
|         REMOTE_CREDENTIALS_SERVICE.createPersonCredentials(TEST_REMOTE_SYSTEM_THREE, pwCred);
 | |
|         
 | |
|         
 | |
|         // Check the listings of remote systems for each user
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listPersonRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(1, systems.getPage().size());
 | |
|         assertEquals(TEST_REMOTE_SYSTEM_TWO, systems.getPage().get(0));
 | |
|         
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_TWO);
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listPersonRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(1, systems.getPage().size());
 | |
|         assertEquals(TEST_REMOTE_SYSTEM_THREE, systems.getPage().get(0));
 | |
|         
 | |
|         
 | |
|         // Check the listings of remote systems that are shared - shouldn't matter which user
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listSharedRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(3, systems.getPage().size());
 | |
|         
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_TWO);
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listSharedRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(3, systems.getPage().size());
 | |
|         
 | |
|         
 | |
|         // Check the listings of the credentials by user
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listPersonCredentials(TEST_REMOTE_SYSTEM_ONE, null, new PagingRequest(10));
 | |
|         assertEquals(0, creds.getPage().size());
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listPersonCredentials(TEST_REMOTE_SYSTEM_TWO, null, new PagingRequest(10));
 | |
|         assertEquals(1, creds.getPage().size());
 | |
|         assertEquals(TEST_REMOTE_SYSTEM_TWO, creds.getPage().get(0).getRemoteSystemName());
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listPersonCredentials(TEST_REMOTE_SYSTEM_THREE, null, new PagingRequest(10));
 | |
|         assertEquals(0, creds.getPage().size());
 | |
|         
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_TWO);
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listPersonCredentials(TEST_REMOTE_SYSTEM_ONE, null, new PagingRequest(10));
 | |
|         assertEquals(0, creds.getPage().size());
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listPersonCredentials(TEST_REMOTE_SYSTEM_TWO, null, new PagingRequest(10));
 | |
|         assertEquals(0, creds.getPage().size());
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listPersonCredentials(TEST_REMOTE_SYSTEM_THREE, null, new PagingRequest(10));
 | |
|         assertEquals(1, creds.getPage().size());
 | |
|         assertEquals(TEST_REMOTE_SYSTEM_THREE, creds.getPage().get(0).getRemoteSystemName());
 | |
|         
 | |
|         
 | |
|         // Check the shared listing of credentials, same for both users
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_ONE, null, new PagingRequest(10));
 | |
|         assertEquals(2, creds.getPage().size());
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_TWO, null, new PagingRequest(10));
 | |
|         assertEquals(2, creds.getPage().size());
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_THREE, null, new PagingRequest(10));
 | |
|         assertEquals(1, creds.getPage().size());
 | |
|         
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_TWO);
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_ONE, null, new PagingRequest(10));
 | |
|         assertEquals(2, creds.getPage().size());
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_TWO, null, new PagingRequest(10));
 | |
|         assertEquals(2, creds.getPage().size());
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_THREE, null, new PagingRequest(10));
 | |
|         assertEquals(1, creds.getPage().size());
 | |
|         
 | |
|         
 | |
|         // Check the paging of remote systems
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listSharedRemoteSystems(new PagingRequest(10));
 | |
|         assertEquals(3, systems.getPage().size());
 | |
|         assertEquals(false, systems.hasMoreItems());
 | |
|         assertEquals(3, systems.getTotalResultCount().getFirst().intValue());
 | |
| 
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listSharedRemoteSystems(new PagingRequest(1));
 | |
|         assertEquals(1, systems.getPage().size());
 | |
|         assertEquals(true, systems.hasMoreItems());
 | |
|         assertEquals(3, systems.getTotalResultCount().getFirst().intValue());
 | |
| 
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listSharedRemoteSystems(new PagingRequest(1, 2));
 | |
|         assertEquals(2, systems.getPage().size());
 | |
|         assertEquals(false, systems.hasMoreItems());
 | |
|         assertEquals(3, systems.getTotalResultCount().getFirst().intValue());
 | |
| 
 | |
|         systems = REMOTE_CREDENTIALS_SERVICE.listSharedRemoteSystems(new PagingRequest(2, 2));
 | |
|         assertEquals(1, systems.getPage().size());
 | |
|         assertEquals(false, systems.hasMoreItems());
 | |
|         assertEquals(3, systems.getTotalResultCount().getFirst().intValue());
 | |
|      
 | |
|         
 | |
|         // Check the paging of credentials
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_ONE, null, new PagingRequest(10));
 | |
|         assertEquals(2, creds.getPage().size());
 | |
|         assertEquals(false, creds.hasMoreItems());
 | |
|         assertEquals(2, creds.getTotalResultCount().getFirst().intValue());
 | |
|         
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_ONE, null, new PagingRequest(1));
 | |
|         assertEquals(1, creds.getPage().size());
 | |
|         assertEquals(true, creds.hasMoreItems());
 | |
|         assertEquals(2, creds.getTotalResultCount().getFirst().intValue());
 | |
|         
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_ONE, null, new PagingRequest(1,1));
 | |
|         assertEquals(1, creds.getPage().size());
 | |
|         assertEquals(false, creds.hasMoreItems());
 | |
|         assertEquals(2, creds.getTotalResultCount().getFirst().intValue());
 | |
|         
 | |
|         
 | |
|         // Tweak shared permissions
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_TWO);
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_ONE, null, new PagingRequest(10));
 | |
|         assertEquals(2, creds.getPage().size());
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_TWO, null, new PagingRequest(10));
 | |
|         assertEquals(2, creds.getPage().size());
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_THREE, null, new PagingRequest(10));
 | |
|         assertEquals(1, creds.getPage().size());
 | |
| 
 | |
|         // Systems One and Two were created by users one
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_ONE, null, new PagingRequest(1));
 | |
|         NodeRef sharedS1 = creds.getPage().get(0).getRemoteSystemContainerNodeRef();
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_TWO, null, new PagingRequest(1));
 | |
|         NodeRef sharedS2 = creds.getPage().get(0).getRemoteSystemContainerNodeRef();
 | |
|         
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER);
 | |
|         PERMISSION_SERVICE.setInheritParentPermissions(sharedS1, false);
 | |
|         PERMISSION_SERVICE.setInheritParentPermissions(sharedS2, false);
 | |
|         
 | |
|         
 | |
|         // Should then only be able to see Three, the one they created
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_TWO);
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_ONE, null, new PagingRequest(10));
 | |
|         assertEquals(0, creds.getPage().size());
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_TWO, null, new PagingRequest(10));
 | |
|         assertEquals(0, creds.getPage().size());
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_THREE, null, new PagingRequest(10));
 | |
|         assertEquals(1, creds.getPage().size());
 | |
|         
 | |
|         // User One won't be able to see User Two's shared credentials under S2 under the new permissions
 | |
|         // They can still see their own credentials for S1 and S2, plus all in S3 (permissions unchanged)
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_ONE, null, new PagingRequest(10));
 | |
|         assertEquals(2, creds.getPage().size());
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_TWO, null, new PagingRequest(10));
 | |
|         assertEquals(1, creds.getPage().size());
 | |
|         creds = REMOTE_CREDENTIALS_SERVICE.listSharedCredentials(TEST_REMOTE_SYSTEM_THREE, null, new PagingRequest(10));
 | |
|         assertEquals(1, creds.getPage().size());
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * Most of the shared credentials container tests work on the test one,
 | |
|      *  so that things are in a known and empty state.
 | |
|      * We have this one test that uses the real shared container, just to check
 | |
|      *  that it's correctly setup and available
 | |
|      */
 | |
|     @Test public void testRealSharedCredentialsContainer() throws Exception
 | |
|     {
 | |
|         // Create a new instance, using the real container
 | |
|         RemoteCredentialsServiceImpl realService = new RemoteCredentialsServiceImpl();
 | |
|         realService.setDictionaryService(DICTIONARY_SERVICE);
 | |
|         realService.setNamespaceService(NAMESPACE_SERVICE);
 | |
|         realService.setNodeService(PUBLIC_NODE_SERVICE);
 | |
|         realService.setRepositoryHelper(REPOSITORY_HELPER);
 | |
| 
 | |
|         for (Entry<QName,RemoteCredentialsInfoFactory> e : ((RemoteCredentialsServiceImpl)PRIVATE_REMOTE_CREDENTIALS_SERVICE).getCredentialsFactories().entrySet() )
 | |
|         {
 | |
|             realService.registerCredentialsFactory(e.getKey(), e.getValue());
 | |
|         }
 | |
| 
 | |
|         
 | |
|         // Run as a test user
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(TEST_USER_ONE);
 | |
|         
 | |
|         // Do a create / fetch / delete step
 | |
|         PasswordCredentialsInfoImpl pwCredI = new PasswordCredentialsInfoImpl();
 | |
|         pwCredI.setRemoteUsername(TEST_REMOTE_USERNAME_ONE);
 | |
|         pwCredI.setRemotePassword(TEST_USER_THREE);
 | |
|         BaseCredentialsInfo credentials = null;
 | |
|         
 | |
|         try
 | |
|         {
 | |
|             // Create
 | |
|             credentials = realService.createSharedCredentials(TEST_REMOTE_SYSTEM_ONE, pwCredI);
 | |
|             assertEquals(TEST_REMOTE_USERNAME_ONE, credentials.getRemoteUsername());
 | |
| 
 | |
|             // Update
 | |
|             ((PasswordCredentialsInfoImpl)credentials).setRemoteUsername(TEST_REMOTE_USERNAME_TWO);
 | |
|             ((PasswordCredentialsInfoImpl)credentials).setRemotePassword(TEST_USER_ONE);
 | |
|             credentials = realService.updateCredentials(credentials);
 | |
|             assertEquals(TEST_REMOTE_USERNAME_TWO, credentials.getRemoteUsername());
 | |
|             
 | |
|             // Delete
 | |
|             realService.deleteCredentials(credentials);
 | |
|             
 | |
|             // Tidy, and zap the test parent
 | |
|             PUBLIC_NODE_SERVICE.deleteNode(credentials.getRemoteSystemContainerNodeRef());
 | |
|             credentials = null;
 | |
|         }
 | |
|         finally
 | |
|         {
 | |
|             // Tidy up if needed
 | |
|             if (credentials != null)
 | |
|             {
 | |
|                 AuthenticationUtil.setAdminUserAsFullyAuthenticatedUser();
 | |
|                 
 | |
|                 // Zap the credentials themselves
 | |
|                 PUBLIC_NODE_SERVICE.deleteNode(credentials.getNodeRef());
 | |
|                 
 | |
|                 // And their test parent
 | |
|                 PUBLIC_NODE_SERVICE.deleteNode(credentials.getRemoteSystemContainerNodeRef());
 | |
|             }
 | |
|         }
 | |
|     }
 | |
|     
 | |
|     // --------------------------------------------------------------------------------
 | |
|     
 | |
|     /**
 | |
|      * By default, all tests are run as the admin user.
 | |
|      */
 | |
|     @Before public void setAdminUser()
 | |
|     {
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER);
 | |
|     }
 | |
|     
 | |
|     @After public void deleteTestNodes() throws Exception
 | |
|     {
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER);
 | |
|         
 | |
|         // Find the shared system container, and zap contents
 | |
|         NodeRef container = ((RemoteCredentialsServiceImpl)PRIVATE_REMOTE_CREDENTIALS_SERVICE).getSharedContainerNodeRef(false);
 | |
|         if (container != null)
 | |
|         {
 | |
|             List<NodeRef> children = new ArrayList<NodeRef>();
 | |
|             for (ChildAssociationRef child : PUBLIC_NODE_SERVICE.getChildAssocs(container))
 | |
|             {
 | |
|                 children.add(child.getChildRef());
 | |
|             }
 | |
|             performDeletionOfNodes(children);
 | |
|         }
 | |
| 
 | |
|         // Zap the users, including any credentials stored for them
 | |
|         deleteUser(TEST_USER_ONE);
 | |
|         deleteUser(TEST_USER_TWO);
 | |
|         deleteUser(TEST_USER_THREE);
 | |
|     }
 | |
|     
 | |
|     @AfterClass public static void remoteTestSharedCredentialsContainer() throws Exception
 | |
|     {
 | |
|         AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER);
 | |
|         NodeRef container = ((RemoteCredentialsServiceImpl)PRIVATE_REMOTE_CREDENTIALS_SERVICE).getSharedContainerNodeRef(false);
 | |
|         if (container != null)
 | |
|         {
 | |
|             performDeletionOfNodes(Collections.singletonList(container));
 | |
|         }
 | |
|     }
 | |
|     
 | |
|     /**
 | |
|      * Deletes the specified NodeRefs, if they exist.
 | |
|      * @param nodesToDelete
 | |
|      */
 | |
|     private static void performDeletionOfNodes(final List<NodeRef> nodesToDelete)
 | |
|     {
 | |
|         TRANSACTION_HELPER.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
 | |
|         {
 | |
|            @Override
 | |
|            public Void execute() throws Throwable
 | |
|            {
 | |
|               AuthenticationUtil.setFullyAuthenticatedUser(ADMIN_USER);
 | |
| 
 | |
|               for (NodeRef node : nodesToDelete)
 | |
|               {
 | |
|                  if (NODE_SERVICE.exists(node))
 | |
|                  {
 | |
|                     NODE_SERVICE.deleteNode(node);
 | |
|                  }
 | |
|               }
 | |
| 
 | |
|               return null;
 | |
|            }
 | |
|         });
 | |
|     }
 | |
|     
 | |
|     private static void createUser(final String userName)
 | |
|     {
 | |
|         TRANSACTION_HELPER.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
 | |
|         {
 | |
|            @Override
 | |
|            public Void execute() throws Throwable
 | |
|            {
 | |
|               if (!AUTHENTICATION_SERVICE.authenticationExists(userName))
 | |
|               {
 | |
|                  AUTHENTICATION_SERVICE.createAuthentication(userName, "PWD".toCharArray());
 | |
|               }
 | |
| 
 | |
|               if (!PERSON_SERVICE.personExists(userName))
 | |
|               {
 | |
|                  PropertyMap ppOne = new PropertyMap();
 | |
|                  ppOne.put(ContentModel.PROP_USERNAME, userName);
 | |
|                  ppOne.put(ContentModel.PROP_FIRSTNAME, "firstName");
 | |
|                  ppOne.put(ContentModel.PROP_LASTNAME, "lastName");
 | |
|                  ppOne.put(ContentModel.PROP_EMAIL, "email@email.com");
 | |
|                  ppOne.put(ContentModel.PROP_JOBTITLE, "jobTitle");
 | |
| 
 | |
|                  PERSON_SERVICE.createPerson(ppOne);
 | |
|               }
 | |
| 
 | |
|               return null;
 | |
|            }
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     private static void deleteUser(final String userName)
 | |
|     {
 | |
|         TRANSACTION_HELPER.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback<Void>()
 | |
|         {
 | |
|            @Override
 | |
|            public Void execute() throws Throwable
 | |
|            {
 | |
|               if (PERSON_SERVICE.personExists(userName))
 | |
|               {
 | |
|                  PERSON_SERVICE.deletePerson(userName);
 | |
|               }
 | |
| 
 | |
|               return null;
 | |
|            }
 | |
|         });
 | |
|     }
 | |
| }
 |