/* * RHQ Management Platform * Copyright (C) 2005-2014 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation version 2 of the License. * * 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, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ package org.rhq.modules.plugins.jbossas7.itest.domain; import static org.rhq.modules.plugins.jbossas7.ModuleOptionsComponent.createAddModuleOptionTypeOperation; import static org.rhq.modules.plugins.jbossas7.ModuleOptionsComponent.loadModuleOptionType; import static org.rhq.modules.plugins.jbossas7.ModuleOptionsComponent.populateSecurityDomainModuleOptions; import static org.rhq.modules.plugins.jbossas7.test.util.ASConnectionFactory.getDomainControllerASConnection; import static org.rhq.modules.plugins.jbossas7.test.util.Constants.DOMAIN_RESOURCE_KEY; import static org.rhq.modules.plugins.jbossas7.test.util.Constants.DOMAIN_RESOURCE_TYPE; import static org.rhq.modules.plugins.jbossas7.test.util.Constants.PLUGIN_NAME; import static org.rhq.modules.plugins.jbossas7.test.util.Constants.STANDALONE_RESOURCE_KEY; import static org.rhq.modules.plugins.jbossas7.test.util.Constants.STANDALONE_RESOURCE_TYPE; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; import java.io.IOException; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Set; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.JsonProcessingException; import org.codehaus.jackson.map.DeserializationConfig; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; import org.testng.SkipException; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import org.rhq.core.clientapi.agent.inventory.CreateResourceRequest; import org.rhq.core.clientapi.agent.inventory.CreateResourceResponse; import org.rhq.core.clientapi.agent.inventory.DeleteResourceRequest; import org.rhq.core.clientapi.agent.inventory.DeleteResourceResponse; import org.rhq.core.domain.configuration.Configuration; import org.rhq.core.domain.configuration.Property; import org.rhq.core.domain.configuration.PropertyMap; import org.rhq.core.domain.configuration.PropertySimple; import org.rhq.core.domain.configuration.definition.ConfigurationDefinition; import org.rhq.core.domain.resource.CreateResourceStatus; import org.rhq.core.domain.resource.DeleteResourceStatus; import org.rhq.core.domain.resource.InventoryStatus; import org.rhq.core.domain.resource.Resource; import org.rhq.core.domain.resource.ResourceCategory; import org.rhq.core.domain.resource.ResourceType; import org.rhq.core.pc.configuration.ConfigurationManager; import org.rhq.core.pc.inventory.InventoryManager; import org.rhq.modules.plugins.jbossas7.ASConnection; import org.rhq.modules.plugins.jbossas7.ModuleOptionsComponent.ModuleOptionType; import org.rhq.modules.plugins.jbossas7.ModuleOptionsComponent.Value; import org.rhq.modules.plugins.jbossas7.itest.AbstractJBossAS7PluginTest; import org.rhq.modules.plugins.jbossas7.json.Address; import org.rhq.modules.plugins.jbossas7.json.Operation; import org.rhq.modules.plugins.jbossas7.json.Result; import org.rhq.test.arquillian.RunDiscovery; /** * Test exercising the subsystem=security/SecurityDomain/[Authentication(Classic|Jaspi), * Authorization, Mapping, Audit, Acl, * Identity-Trust] * @author Simeon Pinder */ @Test(groups = { "integration", "pc", "domain" }, singleThreaded = true) public class SecurityModuleOptionsTest extends AbstractJBossAS7PluginTest { private static ASConnection con = null; private static ObjectMapper mapper = null; private static String TEST_DOMAIN = "testDomain"; private static String SECURITY_RESOURCE_TYPE = "Security"; private static String SECURITY_RESOURCE_KEY = "subsystem=security"; private static String SECURITY_DOMAIN_RESOURCE_KEY = "security-domain"; // Out of box: // The full-ha profile is associated with other-server-group // server-three is in other-server-group and not started private static String PROFILE = "profile=full-ha"; private static String SECURITY_DOMAIN_RESOURCE_TYPE = "Security Domain"; private static String AUTH_CLASSIC_RESOURCE_TYPE = "Authentication (Classic)"; private static String AUTH_CLASSIC_RESOURCE_KEY = "authentication=classic"; private static Resource securityResource = null; private static final ResourceType RESOURCE_TYPE = new ResourceType(SECURITY_RESOURCE_TYPE, PLUGIN_NAME, ResourceCategory.SERVICE, null); private static final String RESOURCE_KEY = SECURITY_RESOURCE_KEY; private static Resource testSecurityDomain = null; private String testSecurityDomainKey = null; //Define some shared and reusable content static HashMap<String, String> jsonMap = new HashMap<String, String>(); static { jsonMap .put( "login-modules", "[{\"flag\":\"required\", \"code\":\"Ldap\", \"module-options\":{\"bindDn\":\"uid=ldapSecureUser,ou=People,dc=redat,dc=com\", \"bindPw\":\"test126\", \"allowEmptyPasswords\":\"true\"}}]"); jsonMap .put( "policy-modules", "[{\"flag\":\"requisite\", \"code\":\"LdapExtended\", \"module-options\":{\"policy\":\"module\", \"policy1\":\"module1\"}}]"); jsonMap .put("mapping-modules", "[{\"code\":\"Test\", \"type\":\"attribute\", \"module-options\":{\"mapping\":\"module\", \"mapping1\":\"module1\"}}]"); jsonMap.put("provider-modules", "[{\"code\":\"Providers\", \"module-options\":{\"provider\":\"module\", \"provider1\":\"module1\"}}]"); // (jshaughn) commenting out, this caused an NPE (EAP 6.0.1), not sure why... //jsonMap // .put("acl-modules", // "[{\"flag\":\"sufficient\", \"code\":\"ACL\", \"module-options\":{\"acl\":\"module\", \"acl1\":\"module1\"}}]"); jsonMap .put("trust-modules", "[{\"flag\":\"optional\", \"code\":\"TRUST\", \"module-options\":{\"trust\":\"module\", \"trust1\":\"module1\"}}]"); } @BeforeTest public void checkServerVersion() { if (System.getProperty("as7.version").equals("6.1.0.Alpha")) { // This version has issues with Security Modules throw new SkipException("This test does not run on 6.1.0.Alpha"); } } // only need servers to create the management users necessary to load the module options @Test(priority = -10000) @RunDiscovery(discoverServers = true, discoverServices = false) public void initialDiscoveryTest() throws Exception { validateDiscovery(true); } /** This method mass loads all the supported Module Option Types(Excluding authentication=jaspi, cannot co-exist with * authentication=classic) into a single SecurityDomain. This is done as * -i)creating all of the related hierarchy of types needed to exercise N Module Options Types and their associated * Module Options instances would take too long to setup(N creates would signal N discovery runs before test could complete). * -ii)setting the priority of this method lower than the discovery method means that we'll get all the same types in much * less time. * * @throws Exception */ @Test(priority = 1041) public void loadStandardModuleOptionTypes() throws Exception { mapper = new ObjectMapper(); mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); //create new Security Domain Address destination = new Address(PROFILE); destination.addSegment(SECURITY_RESOURCE_KEY); String securityDomainId = TEST_DOMAIN + "2"; destination.addSegment(SECURITY_DOMAIN_RESOURCE_KEY + "=" + securityDomainId); ASConnection connection = getDomainControllerASConnection(); Result result = new Result(); Operation op = null; //delete old one if present to setup clean slate op = new Operation("remove", destination); result = connection.execute(op); //build/rebuild hierarchy op = new Operation("add", destination); result = connection.execute(op); assert result.getOutcome().equals("success") : "Add of Security Domain has failed: " + result.getFailureDescription(); //Ex. profile=standalone-ha,subsystem=security,security-domain String addressPrefix = PROFILE + "," + SECURITY_RESOURCE_KEY + "," + SECURITY_DOMAIN_RESOURCE_KEY; //loop over standard types and add base details for all of them to security domain String address = ""; for (String attribute : jsonMap.keySet()) { if (attribute.equals("policy-modules")) { address = addressPrefix + "=" + securityDomainId + ",authorization=classic"; } else if (attribute.equals("acl-modules")) { address = addressPrefix + "=" + securityDomainId + ",acl=classic"; } else if (attribute.equals("mapping-modules")) { address = addressPrefix + "=" + securityDomainId + ",mapping=classic"; } else if (attribute.equals("trust-modules")) { address = addressPrefix + "=" + securityDomainId + ",identity-trust=classic"; } else if (attribute.equals("provider-modules")) { address = addressPrefix + "=" + securityDomainId + ",audit=classic"; } else if (attribute.equals("login-modules")) { address = addressPrefix + "=" + securityDomainId + ",authentication=classic"; } else { assert false : "An unknown attribute '" + attribute + "' was found. Is there a new type to be supported?"; } //build the operation to add the component ////Load json map into ModuleOptionType try { // loading jsonMap contents for Ex. 'login-module' JsonNode node = mapper.readTree(jsonMap.get(attribute)); Object obj = mapper.treeToValue(node, Object.class); result.setResult(obj); result.setOutcome("success"); } catch (JsonProcessingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //populate the Value component complete with module Options. List<Value> moduleTypeValue = populateSecurityDomainModuleOptions(result, loadModuleOptionType(attribute)); op = createAddModuleOptionTypeOperation(new Address(address), attribute, moduleTypeValue); //submit the command result = connection.execute(op); assert result.getOutcome().equals("success") : "Add ModuleOptionType has failed: " + result.getFailureDescription(); } } /** Runs the second discovery run to load all the new types added. * * @throws Exception */ @Test(priority = 1042, groups = "discovery") @RunDiscovery(discoverServices = true, discoverServers = true) public void secondDiscovery() throws Exception { validateDiscovery(); Resource platform = this.pluginContainer.getInventoryManager().getPlatform(); assertNotNull(platform); assertEquals(platform.getInventoryStatus(), InventoryStatus.COMMITTED); waitForAsyncDiscoveryToStabilize(platform); // We don't call waitForAsyncDiscoveryToStabilize(platform) here because we use // waitForResourceByTypeAndKey as needed in the relevant tests. } /** This test method exercises a number of things: * - that the security-domain children loaded have been created successfully * - that all of the supported Module Option Type children(excluding 'authentication=jaspi') have been * discovered as AS7 types successfully. * - that the correct child attribute was specified for each type //Ex. acl=classic -> acl-modules * - * * @throws Exception */ @Test(priority = 1043) public void testDiscoveredSecurityNodes() throws Exception { ConfigurationManager testConfigurationManager = pluginContainer.getConfigurationManager(); //iterate through list of nodes and make sure they've all been discovered ////Ex. profile=full-ha,subsystem=security,security-domain=testDomain2,acl=classic String attribute = null; for (String jsonKey : jsonMap.keySet()) { //Ex. policy-modules attribute = jsonKey; //spinder 6/26/12: Temporarily disable until figure out why NPE happens only for this type? if (attribute.equals(ModuleOptionType.Authentication.getAttribute())) { break;// } //Ex. name=acl-modules //check the configuration for the Module Option Type Ex. 'Acl (Profile)' Resource. Should be able to verify components Resource moduleOptionsTypeResource = getModuleOptionTypeResource(attribute); //assert non-zero id returned assert moduleOptionsTypeResource.getId() != 0 : "The resource was not properly initialized. Expected id != 0"; //Now request the resource complete with resource config Configuration loadedConfiguration = testConfigurationManager .loadResourceConfiguration(moduleOptionsTypeResource.getId()); String code = null; String type = null; String flag = null; //populate the associated attributes if it's supported. for (String key : loadedConfiguration.getAllProperties().keySet()) { Property property = loadedConfiguration.getAllProperties().get(key); if (key.equals("code")) { code = ((PropertySimple) property).getStringValue(); } else if (key.equals("flag")) { flag = ((PropertySimple) property).getStringValue(); } else {//Ex. type. type = ((PropertySimple) property).getStringValue(); } } //retrieve module options as well. String jsonContent = jsonMap.get(attribute); Result result = new Result(); try { // loading jsonMap contents for Ex. 'login-module' JsonNode node = mapper.readTree(jsonContent); Object obj = mapper.treeToValue(node, Object.class); result.setResult(obj); result.setOutcome("success"); } catch (JsonProcessingException e) { e.printStackTrace(); assert false; } catch (IOException e) { e.printStackTrace(); assert false; } //populate the Value component complete with module Options. List<Value> moduleTypeValue = populateSecurityDomainModuleOptions(result, loadModuleOptionType(attribute)); Value moduleOptionType = moduleTypeValue.get(0); //Ex. retrieve the acl-modules component and assert values. //always test 'code' assert moduleOptionType.getCode().equals(code) : "Module Option 'code' value is not correct. Expected '" + code + "' but was '" + moduleOptionType.getCode() + "'"; if (attribute.equals(ModuleOptionType.Mapping.getAttribute())) { assert moduleOptionType.getType().equals(type) : "Mapping Module 'type' value is not correct. Expected '" + type + "' but was '" + moduleOptionType.getType() + "'"; } else if (!attribute.equals(ModuleOptionType.Audit.getAttribute())) {//Audit has no second parameter assert moduleOptionType.getFlag().equals(flag) : "Provider Module 'flag' value is not correct. Expected '" + flag + "' but was '" + moduleOptionType.getFlag() + "'"; } //Retrieve Module Options and test //Ex. Module Options for (Acl Modules - Profile) Resource moduleOptionsResource = getModuleOptionsResource(moduleOptionsTypeResource, attribute); //assert non-zero id returned assert moduleOptionsResource.getId() != 0 : "The resource was not properly initialized. Expected id != 0"; //fetch configuration for module options //Now request the resource complete with resource config Configuration loadedOptionsConfiguration = testConfigurationManager .loadResourceConfiguration(moduleOptionsResource.getId()); for (String key : loadedOptionsConfiguration.getAllProperties().keySet()) { //retrieve the open map of Module Options PropertyMap map = ((PropertyMap) loadedOptionsConfiguration.getAllProperties().get(key)); LinkedHashMap<String, Object> options = moduleOptionType.getOptions(); for (String optionKey : map.getMap().keySet()) { PropertySimple property = (PropertySimple) map.getMap().get(optionKey); //test the key assert options.containsKey(optionKey) : "Unable to find expected option key '" + optionKey + "'. Check hierarchy."; //now the value. String value = String.valueOf(options.get(optionKey)); assert value.equals(property.getStringValue()) : "Unable to find expected Module Option mapping. Key '" + optionKey + "' did not map to expected value '" + value + "' but was '" + property.getStringValue() + "'."; } } } } @Test(priority = 1044) public void testCreateSecurityDomain() throws Exception { //get the root security resource securityResource = getResource(); //plugin config Configuration createPlugConfig = new Configuration(); createPlugConfig.put(new PropertySimple("path", SECURITY_DOMAIN_RESOURCE_KEY += "=" + TEST_DOMAIN)); //resource config Configuration createResConfig = new Configuration(); createResConfig.put(new PropertySimple("name", TEST_DOMAIN)); CreateResourceRequest request = new CreateResourceRequest(); request.setParentResourceId(securityResource.getId()); request.setPluginConfiguration(createPlugConfig); request.setPluginName(PLUGIN_NAME); request.setResourceConfiguration(createResConfig); request.setResourceName(TEST_DOMAIN); request.setResourceTypeName(SECURITY_DOMAIN_RESOURCE_TYPE); CreateResourceResponse response = pluginContainer.getResourceFactoryManager().executeCreateResourceImmediately( request); assert response.getStatus() == CreateResourceStatus.SUCCESS : "The Security Domain creation failed with an error mesasge: " + response.getErrorMessage(); } @Test(priority = 1045) public void testAuthenticationClassic() throws Exception { //get the root security resource securityResource = getResource(); //find TEST_DOMAIN 'security-domain' Resource securityDomain = null; Set<Resource> childResources = securityResource.getChildResources(); for (Resource r : childResources) { if (r.getName().indexOf(TEST_DOMAIN) > -1) { securityDomain = r; } } //plugin config Configuration createPlugConfig = new Configuration(); createPlugConfig.put(new PropertySimple("path", AUTH_CLASSIC_RESOURCE_KEY)); //resource config Configuration createResConfig = new Configuration(); createResConfig.put(new PropertySimple("code", "Ldap")); createResConfig.put(new PropertySimple("flag", "requisite")); CreateResourceRequest request = new CreateResourceRequest(); request.setParentResourceId(securityDomain.getId()); request.setPluginConfiguration(createPlugConfig); request.setPluginName(PLUGIN_NAME); request.setResourceConfiguration(createResConfig); request.setResourceName("Test - notUsed."); request.setResourceTypeName(AUTH_CLASSIC_RESOURCE_TYPE); CreateResourceResponse response = pluginContainer.getResourceFactoryManager().executeCreateResourceImmediately( request); assert response.getStatus() == CreateResourceStatus.SUCCESS : "The 'Authentication (Classic)' node creation failed with an error mesasge: " + response.getErrorMessage(); } @Test(priority = 1046) public void testDeleteSecurityDomain() throws Exception { //get the root security resource securityResource = getResource(); Resource found = null; Set<Resource> childResources = securityResource.getChildResources(); for (Resource r : childResources) { if (r.getName().indexOf(TEST_DOMAIN) > -1) { found = r; } } //plugin config Configuration deletePlugConfig = new Configuration(); deletePlugConfig.put(new PropertySimple("path", SECURITY_DOMAIN_RESOURCE_KEY += "=" + TEST_DOMAIN)); //resource config Configuration deleteResConfig = new Configuration(); deleteResConfig.put(new PropertySimple("name", TEST_DOMAIN)); DeleteResourceRequest request = new DeleteResourceRequest(); if (found != null) { request.setResourceId(found.getId()); } DeleteResourceResponse response = pluginContainer.getResourceFactoryManager().executeDeleteResourceImmediately( request); assert response.getStatus() == DeleteResourceStatus.SUCCESS : "The Security Domain deletion failed with an error mesasge: " + response.getErrorMessage(); } // public static void main(String[] args) { // SecurityModuleOptionsTest setup = new SecurityModuleOptionsTest(); // try { // setup.loadStandardModuleOptionTypes(); // } catch (Exception e) { // e.printStackTrace(); // } // } private Resource getResource() { InventoryManager im = pluginContainer.getInventoryManager(); Resource platform = im.getPlatform(); Resource server = waitForResourceByTypeAndKey(platform, platform, STANDALONE_RESOURCE_TYPE, STANDALONE_RESOURCE_KEY); Resource bindings = waitForResourceByTypeAndKey(platform, server, RESOURCE_TYPE, RESOURCE_KEY); return bindings; } /** Automates hierarchy creation for Module Option type resources and their parents * * @param optionAttributeType * @return */ private Resource getModuleOptionTypeResource(String optionAttributeType) { Resource moduleOptionResource = null; String securityDomainId = SECURITY_DOMAIN_RESOURCE_KEY + "=" + TEST_DOMAIN + "2"; if (testSecurityDomain == null) { InventoryManager im = pluginContainer.getInventoryManager(); Resource platform = im.getPlatform(); if (platform != null) System.out.println("*** Found Platform [" + platform.getResourceKey() + "]"); //host controller Resource hostController = waitForResourceByTypeAndKey(platform, platform, DOMAIN_RESOURCE_TYPE, DOMAIN_RESOURCE_KEY); if (hostController != null) System.out.println("*** Found Host Controller [" + hostController.getResourceKey() + "]"); //profile=full-ha ResourceType profileType = new ResourceType("Profile", PLUGIN_NAME, ResourceCategory.SERVICE, null); String key = PROFILE; Resource profile = waitForResourceByTypeAndKey(platform, hostController, profileType, key); if (profile != null) System.out.println("*** Found Profile [" + platform.getResourceKey() + "]"); //Security (Profile) ResourceType securityType = new ResourceType("Security (Profile)", PLUGIN_NAME, ResourceCategory.SERVICE, null); key += "," + SECURITY_RESOURCE_KEY; Resource security = waitForResourceByTypeAndKey(platform, profile, securityType, key); if (security != null) System.out.println("*** Found Security [" + security.getResourceKey() + "]"); //Security Domain (Profile) ResourceType domainType = new ResourceType("Security Domain (Profile)", PLUGIN_NAME, ResourceCategory.SERVICE, null); key += "," + securityDomainId; testSecurityDomainKey = key; testSecurityDomain = waitForResourceByTypeAndKey(platform, security, domainType, key); if (testSecurityDomain != null) System.out.println("*** Found Domain [" + testSecurityDomain.getResourceKey() + "]"); } //acl=classic String descriptorName = ""; String moduleAttribute = ""; //acl if (optionAttributeType.equals(ModuleOptionType.Acl.getAttribute())) { descriptorName = "ACL (Profile)"; moduleAttribute = "acl=classic"; } else if (optionAttributeType.equals(ModuleOptionType.Audit.getAttribute())) { descriptorName = "Audit (Profile)"; moduleAttribute = "audit=classic"; } else if (optionAttributeType.equals(ModuleOptionType.Authentication.getAttribute())) { descriptorName = "Authentication (Classic - Profile)"; moduleAttribute = "authentication=classic"; } else if (optionAttributeType.equals(ModuleOptionType.Authorization.getAttribute())) { descriptorName = "Authorization (Profile)"; moduleAttribute = "authorization=classic"; } else if (optionAttributeType.equals(ModuleOptionType.IdentityTrust.getAttribute())) { descriptorName = "Identity Trust (Profile)"; moduleAttribute = "identity-trust=classic"; } else if (optionAttributeType.equals(ModuleOptionType.Mapping.getAttribute())) { descriptorName = "Mapping (Profile)"; moduleAttribute = "mapping=classic"; } //Build the right Module Option Type. Ex. ACL (Profile), etc. ResourceType moduleOptionType = new ResourceType(descriptorName, PLUGIN_NAME, ResourceCategory.SERVICE, null); ConfigurationDefinition cdef = new ConfigurationDefinition(descriptorName, null); moduleOptionType.setResourceConfigurationDefinition(cdef); //Ex. profile=full-ha,subsystem=security,security-domain=testDomain2,identity-trust=classic String moduleOptionTypeKey = testSecurityDomainKey += "," + moduleAttribute; if (!testSecurityDomainKey.endsWith(securityDomainId)) { moduleOptionTypeKey = testSecurityDomainKey.substring(0, testSecurityDomainKey.indexOf(securityDomainId) + securityDomainId.length()) + "," + moduleAttribute; } InventoryManager im = pluginContainer.getInventoryManager(); Resource platform = im.getPlatform(); moduleOptionResource = waitForResourceByTypeAndKey(platform, testSecurityDomain, moduleOptionType, moduleOptionTypeKey); if (moduleOptionResource != null) System.out.println("*** Found ModuleOption [" + moduleOptionResource.getResourceKey() + "]"); return moduleOptionResource; } /** Automates hierarchy creation for Module Option type resources and their parents * * @param optionAttributeType * @return */ private Resource getModuleOptionsResource(Resource parent, String optionAttributeType) { Resource moduleOptionsResource = null; String descriptorName = ""; String moduleAttribute = ""; String moduleOptionsDescriptor = ""; if (optionAttributeType.equals(ModuleOptionType.Acl.getAttribute())) { // descriptorName = "ACL Modules (Profile)"; descriptorName = "Acl Modules (Profile)"; moduleAttribute = "acl=classic"; moduleOptionsDescriptor = "Module Options (Acl - Profile)"; } else if (optionAttributeType.equals(ModuleOptionType.Audit.getAttribute())) { descriptorName = "Provider Modules (Profile)"; moduleAttribute = "audit=classic"; moduleOptionsDescriptor = "Module Options (Provider Modules - Profile)"; } else if (optionAttributeType.equals(ModuleOptionType.Authentication.getAttribute())) { descriptorName = "Login Modules (Classic - Profile)"; moduleAttribute = "authentication=classic"; moduleOptionsDescriptor = "Module Options (Classic - Profile)"; } else if (optionAttributeType.equals(ModuleOptionType.Authorization.getAttribute())) { descriptorName = "Authorization Modules (Profile)"; moduleAttribute = "authorization=classic"; moduleOptionsDescriptor = "Module Options (Authorization - Profile)"; } else if (optionAttributeType.equals(ModuleOptionType.IdentityTrust.getAttribute())) { descriptorName = "Identity Trust Modules (Profile)"; moduleAttribute = "identity-trust=classic"; moduleOptionsDescriptor = "Module Options (Identity Trust - Profile)"; } else if (optionAttributeType.equals(ModuleOptionType.Mapping.getAttribute())) { descriptorName = "Mapping Modules (Profile)"; moduleAttribute = "mapping=classic"; moduleOptionsDescriptor = "Module Options (Mapping - Profile)"; } InventoryManager im = pluginContainer.getInventoryManager(); Resource platform = im.getPlatform(); //Build the right Module Option Type. Ex. ACL Modules (Profile), etc. ResourceType modulesType = new ResourceType(descriptorName, PLUGIN_NAME, ResourceCategory.SERVICE, null); //Ex. profile=full-ha,subsystem=security,security-domain=testDomain2,acl=classic,acl-modules:0 String sharedRoot = "profile=full-ha,subsystem=security,security-domain=testDomain2"; String moduleOptionTypeKey = sharedRoot += "," + moduleAttribute + "," + optionAttributeType + ":0"; //Ex. Module Options Type children [ACL Modules (Profile),etc.] Resource modulesInstance = waitForResourceByTypeAndKey(platform, parent, modulesType, moduleOptionTypeKey); //Module Options ResourceType moduleOptionsType = new ResourceType(moduleOptionsDescriptor, PLUGIN_NAME, ResourceCategory.SERVICE, null); moduleOptionsResource = waitForResourceByTypeAndKey(platform, modulesInstance, moduleOptionsType, moduleOptionTypeKey + ",module-options"); return moduleOptionsResource; } private Resource getResource(Resource parentResource, String pluginDescriptorTypeName, String resourceKey) { Resource resource = null; if (((parentResource != null) & (pluginDescriptorTypeName != null) & (resourceKey != null)) & (((!pluginDescriptorTypeName.isEmpty()) & (!resourceKey.isEmpty())))) { InventoryManager im = pluginContainer.getInventoryManager(); Resource platform = im.getPlatform(); ResourceType resourceType = buildResourceType(pluginDescriptorTypeName); resource = waitForResourceByTypeAndKey(platform, parentResource, resourceType, resourceKey); } return resource; } private ResourceType buildResourceType(String pluginTypeName) { ResourceType created = null; if ((pluginTypeName != null) && (!pluginTypeName.isEmpty())) { created = new ResourceType(pluginTypeName, PLUGIN_NAME, ResourceCategory.SERVICE, null); } return created; } /** For each operation * - will write verbose json and operation details to system.out if verboseOutput = true; * - will execute the operation against running server if execute = true. * * @param op * @param execute * @param verboseOutput * @return */ public static Result exerciseOperation(Operation op, boolean execute, boolean verboseOutput) { //display operation as AS7 plugin will build it if (verboseOutput) { System.out.println("\tOperation is:" + op); } String jsonToSend = ""; try { jsonToSend = mapper.defaultPrettyPrintingWriter().writeValueAsString(op); } catch (JsonGenerationException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //As generated by jackson mapper if (verboseOutput) { System.out.println("@@@@ OUTBOUND JSON#\n" + jsonToSend + "#"); } //Execute the operation Result result = new Result(); if (execute) { result = con.execute(op); } else { if (verboseOutput) { System.out.println("**** NOTE: Execution disabled . NOT exercising write-attribute operation. **** "); } } if (verboseOutput) { //result wrapper details System.out.println("\tResult:" + result); //detailed results System.out.println("\tValue:" + result.getResult()); System.out.println("-----------------------------------------------------\n"); } return result; } }