/* * DO NOT REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 2013 ForgeRock Inc. All rights reserved. * * The contents of this file are subject to the terms * of the Common Development and Distribution License * (the License). You may not use this file except in * compliance with the License. * * You can obtain a copy of the License at * http://forgerock.org/license/CDDLv1.0.html * See the License for the specific language governing * permission and limitations under the License. * * When distributing Covered Code, include this CDDL * Header Notice in each file and include the License file * at http://forgerock.org/license/CDDLv1.0.html * If applicable, add the following below the CDDL Header, * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" */ package org.forgerock.openicf.connectors.rsaauthenticationmanager; import com.rsa.admin.data.PrincipalDTO; import com.rsa.authmgr.common.AdminResource; import java.util.*; import org.identityconnectors.common.logging.Log; import org.identityconnectors.common.security.GuardedString; import org.identityconnectors.framework.api.APIConfiguration; import org.identityconnectors.framework.api.ConnectorFacade; import org.identityconnectors.framework.api.ConnectorFacadeFactory; import org.identityconnectors.framework.common.exceptions.*; import org.identityconnectors.framework.common.objects.*; import org.identityconnectors.test.common.TestHelpers; import org.identityconnectors.test.common.PropertyBag; import org.identityconnectors.framework.common.objects.Schema; import org.forgerock.openicf.connectors.rsaauthenticationmanager.RSAAuthenticationManager8Configuration; import org.forgerock.openicf.connectors.rsaauthenticationmanager.RSAAuthenticationManager8Connector; import org.identityconnectors.framework.common.objects.filter.ContainsFilter; import org.identityconnectors.framework.common.objects.filter.EqualsFilter; import org.identityconnectors.test.common.ToListResultsHandler; import org.testng.Assert; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; /** * Attempts to test the {@link RSAAuthenticationManager8Connector}with the framework. * * @author Alex Babeanu (ababeanu@nulli.com) * www.nulli.com - Identity Solution Architects * * @version 1.1.1.0 * @since 1.0 */ public class RSAAuthenticationManager8ConnectorTests { /* * Test properties from config.groovy */ private static final PropertyBag PROPERTIES = TestHelpers.getProperties(RSAAuthenticationManager8Connector.class); // Host is a public property read from public configuration file //private static final String NAMING_PROVIDER_URL = PROPERTIES.getStringProperty("configuration.NamingProviderUrl"); private static final String NAMING_PROVIDER_URL = "t3s://securidadmindev.network.dev:7002"; // Login and password are private properties read from private configuration file private static final String CMD_CLIENT_USER = "CmdClient_s2kxf5af"; //"" - PROPERTIES.getStringProperty("configuration.CmdclientUser"); private static final GuardedString CMD_CLIENT_USER_PWD = new GuardedString("juhhGiR08jRKZqo8tzO9s5BZ7cgooi".toCharArray()); // - PROPERTIES.getProperty("configuration.CmdClientUserPwd", GuardedString.class); private static final String INITIAL_NAMING_FACTORY = "weblogic.jndi.WLInitialContextFactory"; //PROPERTIES.getStringProperty("configuration.InitialNamingFactory"); // "weblogic.jndi.WLInitialContextFactory" private static final GuardedString RSA_SSL_CLIENT_ID_STORE_PWD = new GuardedString("changeit".toCharArray()); //PROPERTIES.getProperty("configuration.RsaSslClientIdStorePwd", GuardedString.class); private static final GuardedString RSA_SSL_CLIENT_ID_KEY_PWD = new GuardedString("AoahSSR8E2A8Jg7gC33Z6Okv78EDBd".toCharArray()); // PROPERTIES.getProperty("configuration.RsaSslClientIdKeyPwd", GuardedString.class); private static final String IMS_SSL_CLIENT_PROVIDER_URL = "t3s://securidadmindev.network.dev:7022"; //PROPERTIES.getStringProperty("configuration.ImsSslClientProviderUrl"); private static final String IMS_SSL_CLIENT_IDENTITY_KEYSTORE_FILENAME = "cacerts"; // PROPERTIES.getStringProperty("configuration.ImsSslClientIdentityKeystoreFilename"); private static final String IMS_SSL_CLIENT_IDENTITY_KEY_ALIAS = "client-identity"; // PROPERTIES.getStringProperty("configuration.ImsSslClientIdentityKeyAlias"); private static final String IMS_SSL_CLIENT_ROOT_CA_ALIAS = "root-ca"; //PROPERTIES.getStringProperty("configuration.ImsSslClientRootCaAlias"); private static final String IMS_SOAP_CLIENT_PROVIDER_URL = ""; // PROPERTIES.getStringProperty("configuration.ImsSoapClientProviderUrl"); private static final String IMS_HTTP_INVOKER_CLIENT_PROVIDER_URL = "https://securidadmindev.network.dev:7002/ims-ws/httpinvoker/CommandServer"; //PROPERTIES.getStringProperty("configuration.ImsHttpinvokerClientProviderUrl"); private static final String AM_USER_MGR_PRINCIPAL = "openicf"; private static final GuardedString AM_USER_MGR_PWD = new GuardedString("oPen-c0nn3cT2".toCharArray()); private static RSAAuthenticationManager8Connector testConnector = new RSAAuthenticationManager8Connector(); //set up logging private static final Log LOGGER = Log.getLog(RSAAuthenticationManager8ConnectorTests.class); @BeforeClass public static void setUp() { // TODO - Comment-out those asserts of props that are NOT Assert.assertNotNull(NAMING_PROVIDER_URL ); Assert.assertNotNull(CMD_CLIENT_USER ); Assert.assertNotNull(CMD_CLIENT_USER_PWD); Assert.assertNotNull(INITIAL_NAMING_FACTORY); // "weblogic.jndi.WLInitialContextFactory" Assert.assertNotNull(RSA_SSL_CLIENT_ID_STORE_PWD); Assert.assertNotNull(RSA_SSL_CLIENT_ID_KEY_PWD); Assert.assertNotNull(IMS_SSL_CLIENT_PROVIDER_URL); Assert.assertNotNull(IMS_SSL_CLIENT_IDENTITY_KEYSTORE_FILENAME); Assert.assertNotNull(IMS_SSL_CLIENT_IDENTITY_KEY_ALIAS); Assert.assertNotNull(IMS_SSL_CLIENT_ROOT_CA_ALIAS); // Assert.assertNotNull(IMS_SOAP_CLIENT_PROVIDER_URL); Assert.assertNotNull(IMS_HTTP_INVOKER_CLIENT_PROVIDER_URL); Assert.assertNotNull(AM_USER_MGR_PRINCIPAL); Assert.assertNotNull(AM_USER_MGR_PWD); // // Set Connector config propeties RSAAuthenticationManager8Configuration TestConfig = new RSAAuthenticationManager8Configuration(); TestConfig.setCmdclientUser(CMD_CLIENT_USER); TestConfig.setCmdClientUserPwd(CMD_CLIENT_USER_PWD); TestConfig.setRsaSslClientIdStorePwd(RSA_SSL_CLIENT_ID_STORE_PWD); TestConfig.setRsaSslClientIdKeyPwd(RSA_SSL_CLIENT_ID_KEY_PWD); TestConfig.setImsSslClientProviderUrl(IMS_SSL_CLIENT_PROVIDER_URL); TestConfig.setImsSslClientIdentityKeystoreFilename(IMS_SSL_CLIENT_IDENTITY_KEYSTORE_FILENAME); TestConfig.setImsSslClientIdentityKeyAlias(IMS_SSL_CLIENT_IDENTITY_KEY_ALIAS); TestConfig.setImsSslClientRootCaAlias(IMS_SSL_CLIENT_ROOT_CA_ALIAS); //TestConfig.setImsSslClientProviderUrl(IMS_SOAP_CLIENT_PROVIDER_URL); TestConfig.setImsHttpinvokerClientProviderUrl(IMS_HTTP_INVOKER_CLIENT_PROVIDER_URL); TestConfig.setNamingProviderUrl(NAMING_PROVIDER_URL); TestConfig.setUserMgrPrincipal(AM_USER_MGR_PRINCIPAL); TestConfig.setUserMgrPwd(AM_USER_MGR_PWD); TestConfig.setSecurityDomain(RSAAuthenticationManager8Configuration.RSA_DOMAIN); // Initialize the connector testConnector.init(TestConfig); //Map<String, ? extends Object> configData = (Map<String, ? extends Object>) PROPERTIES.getProperty("configuration",Map.class) //TestHelpers.fillConfiguration( } @AfterClass public static void tearDown() { // //clean up resources testConnector.dispose(); } @Test (enabled=true) public void testRSAConnectionTest() { LOGGER.info("Testing config params..."); testConnector.getConnection().test(); LOGGER.info("Succesful connection."); } /* */ @Test (enabled=true, dependsOnMethods={"testRSAConnectionTest"}) public void createRSAOpTest() { LOGGER.info("Running Test 1: Create RSA User..."); //You can use TestHelpers to do some of the boilerplate work in running a search //TestHelpers.search(theConnector, ObjectClass.ACCOUNT, filter, handler, null); // CreateOp Signature: // Uid create(final ObjectClass objectClass, final Set<Attribute> createAttributes, final OperationOptions options)] // New User's ObjectClass ObjectClass ObjC = new ObjectClass("__ACCOUNT__"); // New User's Attributes HashSet<Attribute> CreateAttrs = new HashSet<Attribute> (); // User Pwd CreateAttrs.add(new Name("JoDoe3")); CreateAttrs.add(new Uid("JoDoe3")); CreateAttrs.add(AttributeBuilder.buildPassword(new GuardedString("oPen-c0nn3cT2".toCharArray()))); //CreateAttrs.add(AttributeBuilder.build(PrincipalDTO.LOGINUID, "JoDoe3")); CreateAttrs.add(AttributeBuilder.build(PrincipalDTO.FIRST_NAME, "Joe3")); CreateAttrs.add(AttributeBuilder.build(PrincipalDTO.LAST_NAME, "Doe3")); CreateAttrs.add(AttributeBuilder.build(PrincipalDTO.DESCRIPTION, "IDM Consultant")); CreateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_EMPLOYEE_NB, "00518999")); CreateAttrs.add(AttributeBuilder.build(PrincipalDTO.ADMINISTRATOR_FLAG, false)); CreateAttrs.add(AttributeBuilder.build(PrincipalDTO.EMAIL,"jodoe3@suncor.com")); CreateAttrs.add(AttributeBuilder.build(PrincipalDTO.MIDDLE_NAME,"Albert3")); // Custom Attribs CreateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_ALLOWED_TO_CREATE_PIN, Boolean.TRUE)); CreateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_REQUIRED_TO_CREATE_PIN, Boolean.FALSE)); CreateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_TEMP_START_DATE, "2013/09/01")); CreateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_TEMP_START_HOUR, "8")); CreateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_TEMP_END_DATE, "2014/09/01")); CreateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_TEMP_END_HOUR, "5")); CreateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_SECRET_WORD, "Connector")); //CreateAttrs.add(AttributeBuilder.build(PrincipalDTO.SECURITY_DOMAIN,RSAAuthenticationManager8Configuration.RSA_DOMAIN)); // TODO - Security Questions ? // AM Account Add-on attributes: CreateAttrs.add(AttributeBuilder.build(AdminResource.DEFAULTSHELL, "/bin/sh")); // Uncomment if needed: /* CreateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.ATTR_WIN_PWD, "Pwd-1234")); CreateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.ATTR_SHELL_ALLOWED, true)); */ // Add Group Memberships ArrayList<String> AddGroups = new ArrayList<String>(); AddGroups.add("SSLVPN"); AddGroups.add("Remote Access"); AddGroups.add("Certigard"); CreateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_GROUPS, AddGroups)); // Add Tokens CreateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_TOKEN1_SN, "000031953940")); CreateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_TOKEN2_SN, "000039688583")); // This one is disabled: CreateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_TOKEN3_SN, "000024017653")); /* */ // Create user Uid uid = testConnector.create(ObjC, CreateAttrs, new OperationOptionsBuilder().build()); if (uid == null) throw new ConfigurationException ("UID is blank, user creation failure"); else { System.out.println("\n New user created with UID = " + uid.getUidValue()); } } /* */ /* */ @Test (enabled=true, dependsOnMethods={"createRSAOpTest"}) //createRSAOpTest "})//, dependsOnMethods={"equalsSearchOpTest"})//, dependsOnMethods={"testRSAConnectionTest"} ) public void updateUserRSAOpTest() { LOGGER.info("Running Test 2: Update RSA User..."); //You can use TestHelpers to do some of the boilerplate work in running a search //TestHelpers.search(theConnector, ObjectClass.ACCOUNT, filter, handler, null); // New User's ObjectClass ObjectClass ObjC = new ObjectClass("__ACCOUNT__"); // New User's Attributes // Update User Uid UpdUsr = new Uid ("JoDoe3"); HashSet<Attribute> UpdateAttrs = new HashSet<Attribute> (); // Un-comment the attributes you want to modify: // User Pwd //UpdateAttrs.add(AttributeBuilder.buildPassword(new GuardedString("oPen-c0nn3cT".toCharArray()))); //UpdateAttrs.add(AttributeBuilder.build(PrincipalDTO.LOGINUID, "JoDoe2")); UpdateAttrs.add(AttributeBuilder.build(PrincipalDTO.FIRST_NAME, "Joe3MOD")); UpdateAttrs.add(AttributeBuilder.build(PrincipalDTO.LAST_NAME, "Doe3MOD")); UpdateAttrs.add(AttributeBuilder.build(PrincipalDTO.DESCRIPTION, "IDM Consultant MOD")); //UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_EMPLOYEE_NB, "00518999")); //UpdateAttrs.add(AttributeBuilder.build(PrincipalDTO.ADMINISTRATOR_FLAG, Boolean.FALSE)); UpdateAttrs.add(AttributeBuilder.build(PrincipalDTO.EMAIL,"jodoe3mod@suncor.com")); UpdateAttrs.add(AttributeBuilder.build(PrincipalDTO.MIDDLE_NAME,"Albert3Mod")); // New Expiration Date UpdateAttrs.add(AttributeBuilder.build(PrincipalDTO.EXPIRATION_DATE, "2014/06/22")); // New Start Date UpdateAttrs.add(AttributeBuilder.build(PrincipalDTO.START_DATE, "2013/09/03")); // New Expire Lockout Date // Date principal will no longer be locked out of the system. UpdateAttrs.add(AttributeBuilder.build(PrincipalDTO.EXPIRE_LOCKOUT_DATE, "2013/09/03")); /* */ // Flag indicating whether principal is locked out of the system. UpdateAttrs.add(AttributeBuilder.build(PrincipalDTO.LOCKOUT_FLAG, Boolean.FALSE)); // Flag indicating whether the principal is enabled. UpdateAttrs.add(AttributeBuilder.build(PrincipalDTO.ENABLE_FLAG, Boolean.TRUE)); // Flag indicating if principal can be impersonated. UpdateAttrs.add(AttributeBuilder.build(PrincipalDTO.IMPERSONATABLE_FLAG, Boolean.TRUE)); // Flag indicating if principal can impersonate others. UpdateAttrs.add(AttributeBuilder.build(PrincipalDTO.IMPERSONATOR_FLAG, Boolean.TRUE)); //Another example using TestHelpers //List<ConnectorObject> results = TestHelpers.searchToList(theConnector, ObjectClass.GROUP, filter); // Extended/custom Attribds UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_ALLOWED_TO_CREATE_PIN, Boolean.TRUE)); UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_REQUIRED_TO_CREATE_PIN, Boolean.TRUE)); UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_SECRET_WORD, "WatermelonMOD")); UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_EMPLOYEE_NB, "00518999")); // Tepm Start Date UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_TEMP_START_DATE, "2013/12/01")); UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_TEMP_END_DATE, "2014/07/01")); // Add Group Memberships ArrayList<String> AddGroups = new ArrayList<String>(); AddGroups.add("SSLVPN"); AddGroups.add("CSG User"); AddGroups.add("CSC Admin"); AddGroups.add("CSC General"); UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_GROUPS, AddGroups)); // Token operations UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_TOKEN1_LOST, "true")); //UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_TOKEN3_UNASSIGN, "true")); //UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_TOKEN2_NEW_PIN_MODE, "false")); //UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_TOKEN2_CLEAR_PIN, "true")); UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_TOKEN2_DISABLED, "true")); // Default SHell UpdateAttrs.add(AttributeBuilder.build(AdminResource.DEFAULTSHELL, "/bin/ksh")); // Update // No options for update OperationOptionsBuilder OpsBuilder = new OperationOptionsBuilder(); Uid uid = testConnector.update(ObjC, UpdUsr, UpdateAttrs, OpsBuilder.build()); } /* */ @Test (enabled=false, dependsOnMethods={"updateUserRSAOpTest"}) //createRSAOpTest"}) //equalsSearchOpTest"})//, dependsOnMethods={"updateUserRSAOpTest"}) public void updateTokenOp() { // New User's Attributes // Update User Uid UpdUsr = new Uid("JoDoe3"); HashSet<Attribute> UpdateAttrs = new HashSet<Attribute>(); // New User's ObjectClass ObjectClass ObjC = new ObjectClass("__ACCOUNT__"); // Token operations //UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_TOKEN1_LOST, "true")); UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_TOKEN3_UNASSIGN, "true")); UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_TOKEN2_NEW_PIN_MODE, "false")); UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_TOKEN2_CLEAR_PIN, "true")); //UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_TOKEN2_DISABLED, "true")); // Update // No options for update OperationOptionsBuilder OpsBuilder = new OperationOptionsBuilder(); Uid uid = testConnector.update(ObjC, UpdUsr, UpdateAttrs, OpsBuilder.build()); } @Test (enabled=false, dependsOnMethods={"updateTokenOp"}) public void assignTokenOpTest() { LOGGER.info("Running Test 3: Assign Token to RSA User..."); //You can use TestHelpers to do some of the boilerplate work in running a search //TestHelpers.search(theConnector, ObjectClass.ACCOUNT, filter, handler, null); //User ObjectClass ObjectClass ObjC = new ObjectClass(RSAAuthenticationManager8Configuration.TOKEN_OBJECTCLASS); // User ID Uid Usr = new Uid ("JoDoe3"); // Token ASSIGN action: OperationOptionsBuilder OpsBuilder = new OperationOptionsBuilder(); OpsBuilder.setOption(RSAAuthenticationManager8Configuration.TOKEN_OP_OPTION_ASSIGN_NAME, RSAAuthenticationManager8Configuration.TOKEN_OP_OPTION_ASSIGN); // Set Token SNs to assign to user: List<String> tokens = Arrays.asList("000024017618", "000039766597", "000100015179"); HashSet<Attribute> UpdateAttrs = new HashSet<Attribute> (); UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_TOKEN_SN_LIST, tokens)); testConnector.update(ObjC, Usr, UpdateAttrs, OpsBuilder.build()); } @Test (enabled=false, dependsOnMethods={"assignTokenOpTest"}) public void disableTokenOpTest() { LOGGER.info("Running Test 4: disable Token ..."); //You can use TestHelpers to do some of the boilerplate work in running a search //TestHelpers.search(theConnector, ObjectClass.ACCOUNT, filter, handler, null); //User ObjectClass ObjectClass ObjC = new ObjectClass("__TOKEN__"); // User ID - not really necessary for this operation Uid Usr = new Uid ("JoDoe3"); // Token DISABLE action: OperationOptionsBuilder OpsBuilder = new OperationOptionsBuilder(); OpsBuilder.setOption(RSAAuthenticationManager8Configuration.TOKEN_OP_OPTION_DISABLE_NAME, RSAAuthenticationManager8Configuration.TOKEN_OP_OPTION_DISABLE); // Set Token SNs to revoke from their respective users: List<String> tokens = Arrays.asList("000024017618", "000039766597", "000100015179"); HashSet<Attribute> UpdateAttrs = new HashSet<Attribute> (); UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_TOKEN_SN_LIST, tokens)); testConnector.update(ObjC, Usr, UpdateAttrs, OpsBuilder.build()); } @Test (enabled=false, dependsOnMethods={"disableTokenOpTest"}) public void enableTokenOpTest() { LOGGER.info("Running Test 5: disable Token ..."); //You can use TestHelpers to do some of the boilerplate work in running a search //TestHelpers.search(theConnector, ObjectClass.ACCOUNT, filter, handler, null); //User ObjectClass ObjectClass ObjC = new ObjectClass("__TOKEN__"); // User ID - not really necessary for this operation Uid Usr = new Uid ("JoDoe3"); // Token DISABLE action: OperationOptionsBuilder OpsBuilder = new OperationOptionsBuilder(); OpsBuilder.setOption(RSAAuthenticationManager8Configuration.TOKEN_OP_OPTION_ENABLE_NAME, RSAAuthenticationManager8Configuration.TOKEN_OP_OPTION_ENABLE); // Set Token SNs to revoke from their respective users: List<String> tokens = Arrays.asList("000024017618", "000039766597", "000100015179"); HashSet<Attribute> UpdateAttrs = new HashSet<Attribute> (); UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_TOKEN_SN_LIST, tokens)); testConnector.update(ObjC, Usr, UpdateAttrs, OpsBuilder.build()); } @Test (enabled=false, dependsOnMethods={"enableTokenOpTest"}) public void revokeTokenOpTest() { LOGGER.info("Running Test 6: Revoke Token from RSA User..."); //You can use TestHelpers to do some of the boilerplate work in running a search //TestHelpers.search(theConnector, ObjectClass.ACCOUNT, filter, handler, null); //User ObjectClass ObjectClass ObjC = new ObjectClass("__TOKEN__"); // User ID - not really necessary for this operation Uid Usr = new Uid ("JoDoe3"); // Token REVOKE action: OperationOptionsBuilder OpsBuilder = new OperationOptionsBuilder(); OpsBuilder.setOption(RSAAuthenticationManager8Configuration.TOKEN_OP_OPTION_REVOKE_NAME, RSAAuthenticationManager8Configuration.TOKEN_OP_OPTION_REVOKE); // Set Token SNs to revoke from their respective users: List<String> tokens = Arrays.asList("000024017618", "000039766597", "000100015179"); HashSet<Attribute> UpdateAttrs = new HashSet<Attribute> (); UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_TOKEN_SN_LIST, tokens)); testConnector.update(ObjC, Usr, UpdateAttrs, OpsBuilder.build()); } @Test (enabled=true, dependsOnMethods={"updateUserRSAOpTest"}) //dependsOnMethods={"revokeTokenOpTest"}) public void linkUser2GroupOpTest() { LOGGER.info("Running Test 7: Assign User to a group..."); //You can use TestHelpers to do some of the boilerplate work in running a search //TestHelpers.search(theConnector, ObjectClass.ACCOUNT, filter, handler, null); //User ObjectClass ObjectClass ObjC = new ObjectClass("__GROUP__"); // User ID Uid Usr = new Uid ("JoDoe3"); // Token ASSIGN action: OperationOptionsBuilder OpsBuilder = new OperationOptionsBuilder(); OpsBuilder.setOption(RSAAuthenticationManager8Configuration.GROUP_OP_OPTION_LINK_NAME, RSAAuthenticationManager8Configuration.GROUP_OP_OPTION_LINK); // GroupName: HashSet<Attribute> UpdateAttrs = new HashSet<Attribute> (); UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_GROUP_NAME, "CSC Admin")); testConnector.update(ObjC, Usr, UpdateAttrs, OpsBuilder.build()); } @Test (enabled=true, dependsOnMethods={"linkUser2GroupOpTest"}) public void unlinkUserFromGroupOpTest() { LOGGER.info("Running Test 8: Unlink User from a group..."); //User ObjectClass ObjectClass ObjC = new ObjectClass("__GROUP__"); // User ID Uid Usr = new Uid ("JoDoe3"); // Token ASSIGN action: OperationOptionsBuilder OpsBuilder = new OperationOptionsBuilder(); OpsBuilder.setOption(RSAAuthenticationManager8Configuration.GROUP_OP_OPTION_UNLINK_NAME, RSAAuthenticationManager8Configuration.GROUP_OP_OPTION_UNLINK); // GroupName: HashSet<Attribute> UpdateAttrs = new HashSet<Attribute> (); UpdateAttrs.add(AttributeBuilder.build(RSAAuthenticationManager8Configuration.CUSTOM_ATTR_GROUP_NAME, "CSC Admin")); testConnector.update(ObjC, Usr, UpdateAttrs, OpsBuilder.build()); } @Test (enabled=true, dependsOnMethods={"unlinkUserFromGroupOpTest"})//{"unlinkUserFromGroupOpTest"}) public void containsSearchOpTest() { LOGGER.info("Running Test 9: Contains Search..."); // Results Handler ToListResultsHandler handler = new ToListResultsHandler(); // Query Options: set Search Limit OperationOptionsBuilder OpsBuilder = new OperationOptionsBuilder(); OpsBuilder.setOption(RSAAuthenticationManager8Configuration.SEARCH_LIMIT_NAME, RSAAuthenticationManager8Configuration.SEARCH_LIMIT_DEFAULT); // Search Filter: LoginID contains "JoDoe" ContainsFilter contains = new ContainsFilter (AttributeBuilder.build(Name.NAME, "JoDoe")); // Run Search TestHelpers.search(testConnector, ObjectClass.ACCOUNT, contains, handler, OpsBuilder.build()); // Assert results Assert.assertTrue(handler.getObjects().size() > 0, "zero results returned"); // Read results int nbRes = handler.getObjects().size(); System.out.println("handled " + Integer.toString(nbRes) + " results."); // Loop through results for (ConnectorObject result : handler.getObjects()) { Set<Attribute> attribs = result.getAttributes(); Iterator<Attribute> attIt = attribs.iterator(); // Loop through attributes while (attIt.hasNext()) { Attribute att = attIt.next(); System.out.println ("\n Attribute: " + att.getName() + " - value: " + att.getValue().toString()); } System.out.println ("\n ------------------------------"); } } @Test (enabled=true, dependsOnMethods={"containsSearchOpTest"}) //testRSAConnectionTest"}) //updateTokenOp"}) //containsSearchOpTest"}) public void equalsSearchOpTest() { LOGGER.info("Running Test 10: Equals Search..."); // Results Handler ToListResultsHandler handler = new ToListResultsHandler(); // Query Options: set Search Limit OperationOptionsBuilder OpsBuilder = new OperationOptionsBuilder(); OpsBuilder.setOption(RSAAuthenticationManager8Configuration.SEARCH_LIMIT_NAME, RSAAuthenticationManager8Configuration.SEARCH_LIMIT_DEFAULT); // Search Filter: LoginID contains "JoDoe" EqualsFilter contains = new EqualsFilter (AttributeBuilder.build(Name.NAME, "JoDoe3")); // Run Search TestHelpers.search(testConnector, ObjectClass.ACCOUNT, contains, handler, OpsBuilder.build()); // Assert results Assert.assertTrue(handler.getObjects().size() > 0, "zero results returned"); // Read results int nbRes = handler.getObjects().size(); System.out.println("handled " + Integer.toString(nbRes) + " results."); // Loop through results for (ConnectorObject result : handler.getObjects()) { Set<Attribute> attribs = result.getAttributes(); Iterator<Attribute> attIt = attribs.iterator(); // Loop through attributes while (attIt.hasNext()) { Attribute att = attIt.next(); if (att != null) if (att.getValue() != null) System.out.println ("\n Attribute: " + att.getName() + " - value: " + att.getValue().toString()); else System.out.println ("\n Attribute: " + att.getName() + " - value: NULL"); } System.out.println ("\n ------------------------------"); } } @Test (enabled=false, dependsOnMethods={"equalsSearchOpTest"}) //{"equalsSearchOpTest"}) public void searchAllOpTest() { LOGGER.info("Running Test 10: Search All..."); // Results Handler ToListResultsHandler handler = new ToListResultsHandler(); // Query Options: set Search Limit OperationOptionsBuilder OpsBuilder = new OperationOptionsBuilder(); //OpsBuilder.setOption(RSAAuthenticationManager8Configuration.SEARCH_LIMIT_NAME, RSAAuthenticationManager8Configuration.SEARCH_LIMIT_DEFAULT); // Search Filter: LoginID contains "JoDoe" EqualsFilter contains = new EqualsFilter (AttributeBuilder.build(Name.NAME, "")); // Run Search TestHelpers.search(testConnector, ObjectClass.ACCOUNT, contains, handler, OpsBuilder.build()); // Assert results Assert.assertTrue(handler.getObjects().size() > 0, "zero results returned"); // Read results int nbRes = handler.getObjects().size(); System.out.println("handled " + Integer.toString(nbRes) + " results."); // Loop through results /* for (ConnectorObject result : handler.getObjects()) { Set<Attribute> attribs = result.getAttributes(); Iterator<Attribute> attIt = attribs.iterator(); // Loop through attributes while (attIt.hasNext()) { Attribute att = attIt.next(); if (att != null) if (att.getValue() != null) System.out.println ("\n Attribute: " + att.getName() + " - value: " + att.getValue().toString()); else System.out.println ("\n Attribute: " + att.getName() + " - value: NULL"); } System.out.println ("\n ------------------------------"); } */ } @Test (enabled=true, dependsOnMethods={"equalsSearchOpTest"})//, searchAllOpTest dependsOnMethods={""}) public void connAliveTest() { LOGGER.info ("Checking if the connection is still alive..."); testConnector.checkAlive(); LOGGER.info ("The connection is still alive."); } @Test (enabled=true, dependsOnMethods={"equalsSearchOpTest"}) //connAliveTest"})//, dependsOnMethods={"equalsSearchOpTest"}) public void deleteUserRSAOpTest() { LOGGER.info("Running LAST Upd test: Delete RSA User..."); //You can use TestHelpers to do some of the boilerplate work in running a search //TestHelpers.search(theConnector, ObjectClass.ACCOUNT, filter, handler, null); //User ObjectClass ObjectClass ObjC = new ObjectClass("__ACCOUNT__"); // User ID Uid DelUsr = new Uid ("JoDoe3"); // No options options for delete OperationOptionsBuilder OpsBuilder = new OperationOptionsBuilder(); testConnector.delete(ObjC, DelUsr, OpsBuilder.build()); } @Test (enabled=true, dependsOnMethods={"deleteUserRSAOpTest"}) //deleteUserRSAOpTest public void schemaOpTest() { LOGGER.info("Running Schema Test: fetch supported schema..."); //You can use TestHelpers to do some of the boilerplate work in running a search //TestHelpers.search(theConnector, ObjectClass.ACCOUNT, filter, handler, null); Schema sch = testConnector.schema(); Set <ObjectClassInfo> objs = sch.getObjectClassInfo(); System.out.println ("------ Suported ObjClasses:"); for (ObjectClassInfo info: objs) { System.out.println(info.getType()); Set<AttributeInfo> attrsInfo = info.getAttributeInfo(); for (AttributeInfo attrInfo : attrsInfo) { System.out.println(" --- " + attrInfo.getName()); } } } protected ConnectorFacade getFacade(RSAAuthenticationManager8Configuration config) { ConnectorFacadeFactory factory = ConnectorFacadeFactory.getInstance(); // **test only** APIConfiguration impl = TestHelpers.createTestConfiguration(RSAAuthenticationManager8Connector.class, config); return factory.newInstance(impl); } }