/*
* 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.standalone;
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 java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.rhq.core.clientapi.agent.configuration.ConfigurationUpdateRequest;
import org.rhq.core.clientapi.server.configuration.ConfigurationUpdateResponse;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.Property;
import org.rhq.core.domain.configuration.PropertySimple;
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.modules.plugins.jbossas7.itest.AbstractJBossAS7PluginTest;
import org.rhq.test.arquillian.RunDiscovery;
@Test(groups = { "integration", "pc", "standalone" }, singleThreaded = true)
public class TemplatedResourcesTest extends AbstractJBossAS7PluginTest {
private Log log = LogFactory.getLog(this.getClass());
private Resource platform;
private Resource server;
@Test(priority = 10, groups = "discovery")
@RunDiscovery(discoverServices = true, discoverServers = true)
public void initialDiscoveryTest() throws Exception {
platform = validatePlatform();
server = waitForResourceByTypeAndKey(platform, platform, STANDALONE_RESOURCE_TYPE, STANDALONE_RESOURCE_KEY);
}
@Test(priority = 11)
public void loadUpdateTemplatedResourceConfiguration() throws Exception {
ConfigurationManager configurationManager = this.pluginContainer.getConfigurationManager();
for (ResourceData resourceData : testResourceData) {
ResourceType resourceType = new ResourceType(resourceData.resourceTypeName, PLUGIN_NAME,
ResourceCategory.SERVICE, null);
Resource subsystem = waitForResourceByTypeAndKey(platform, server, resourceType, resourceData.resourceKey);
Assert.assertNotNull(subsystem);
Queue<Resource> unparsedResources = new LinkedList<Resource>();
unparsedResources.add(subsystem);
List<Resource> foundResources = new ArrayList<Resource>();
while (!unparsedResources.isEmpty()) {
Resource currentResource = unparsedResources.poll();
for (Resource childResource : currentResource.getChildResources()) {
unparsedResources.add(childResource);
if (childResource.getResourceType().getName().equals(resourceData.subResourceType)) {
foundResources.add(childResource);
}
}
}
for (Resource resourceUnderTest : foundResources) {
log.info(foundResources);
assert resourceUnderTest.getId() != 0 : "Resource not properly initialized. Id = 0. Try extending sleep after discovery.";
Configuration resourceUnderTestConfig = configurationManager
.loadResourceConfiguration(resourceUnderTest.getId());
Assert.assertNotNull(resourceUnderTestConfig);
Assert.assertFalse(resourceUnderTestConfig.getProperties().isEmpty());
boolean specialPropertyFound = false;
for (Property property : resourceUnderTestConfig.getProperties()) {
if (property.getName().equals(resourceData.specialConfigurationProperty)) {
Assert.assertNotNull(((PropertySimple) property).getStringValue());
specialPropertyFound = true;
break;
}
}
Assert.assertTrue(specialPropertyFound, resourceData.specialConfigurationProperty
+ "property not found in the list of properties");
ConfigurationUpdateRequest testUpdateRequest = new ConfigurationUpdateRequest(1,
resourceUnderTestConfig, resourceUnderTest.getId());
ConfigurationUpdateResponse response = configurationManager
.executeUpdateResourceConfigurationImmediately(testUpdateRequest);
Assert.assertNotNull(response);
}
}
}
private ResourceData[] testResourceData = new ResourceData[] {
new ResourceData("Infinispan", "subsystem=infinispan", "Cache", "__type"),
new ResourceData("Threads", "subsystem=threads", "ThreadPool", "__type"),
new ResourceData("Messaging", "subsystem=messaging", "Path", "__name") };
private static class ResourceData {
final String resourceTypeName;
final String resourceKey;
final String subResourceType;
final String specialConfigurationProperty;
public ResourceData(String resourceTypeName, String resourceKey, String subResourceType,
String specialConfigurationProperty) {
this.resourceTypeName = resourceTypeName;
this.resourceKey = resourceKey;
this.subResourceType = subResourceType;
this.specialConfigurationProperty = specialConfigurationProperty;
}
}
}