/*
* Jopr Management Platform
* Copyright (C) 2005-2009 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, version 2, as
* published by the Free Software Foundation, and/or the GNU Lesser
* General Public License, version 2.1, also as published by the Free
* Software Foundation.
*
* 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 and the GNU Lesser General Public License
* for more details.
*
* You should have received a copy of the GNU General Public License
* and the GNU Lesser 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.plugins.jbossas5.test.sbm;
import static org.testng.Assert.fail;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.PropertyMap;
import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.pc.PluginContainer;
import org.rhq.core.pc.inventory.InventoryManager;
import org.rhq.plugins.jbossas5.test.util.AppServerUtils;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
/**
*
* @author Lukas Krejci
*/
@Test(groups = {"as5.plugin", "as5.plugin.sbm"})
public class ServiceBindingManagerResourceTest extends AbstractServiceBindingTest {
protected String getResourceTypeName() {
return SERVICE_BINDING_MANAGER_SERVICE_NAME;
}
@BeforeTest
@Override
public void saveConfiguration() {
super.saveConfiguration();
}
@Test(dependsOnMethods = "testActiveBindingSetNameChange")
public void testMetrics() throws Exception {
super.testMetrics();
}
public void testActiveBindingSetNameChange() {
try {
System.out.println("Running SBM active binding set name change test...");
Resource sbmResource = getSBMResource();
Configuration configuration = loadResourceConfiguration(sbmResource);
//we know that there are ports-default, ports-01, ports-02 and ports-03
//binding sets by default in the server
PropertySimple activeBindingSetProperty = configuration.getSimple("activeBindingSetName");
activeBindingSetProperty.setStringValue("ports-01");
Configuration updatedConfiguration = updateResourceConfiguration(sbmResource, configuration);
assertEquals(updatedConfiguration, configuration, "Active binding set update failed.");
//now try to restart and reconfigure the server
AppServerUtils.shutdownServer();
Resource asResource = AppServerUtils.getASResource();
Configuration newServerConfig = asResource.getPluginConfiguration();
newServerConfig.put(new PropertySimple("namingURL", "jnp://localhost:1199"));
InventoryManager inventoryManager = PluginContainer.getInstance().getInventoryManager();
inventoryManager.updatePluginConfiguration(asResource.getId(), newServerConfig);
System.out.println("Expecting the server to come up with JNP url jnp://localhost:1199");
AppServerUtils.startServer();
Configuration configurationAfterRestart = loadResourceConfiguration(getSBMResource());
assertEquals(configurationAfterRestart, configuration, "The active binding set change didn't survive a server restart.");
} catch (Exception e) {
fail("Failed to change binding set name.", e);
}
}
public void testInvalidActiveBindingSetNameChangeFailure() {
try {
System.out.println("Running SBM invalid active binding set name change test...");
Resource sbmResource = getSBMResource();
Configuration configuration;
configuration = loadResourceConfiguration(sbmResource);
PropertySimple activeBindingSetProperty = configuration.getSimple("activeBindingSetName");
String origActiveBindingSetName = activeBindingSetProperty.getStringValue();
//well - technically we should check if there is a binding set with this name, but hey...
activeBindingSetProperty.setStringValue("*(^$*)(@&_#(*@#@^$&(*^%@)*@)#_&_&(#&^#(@%#@^%");
Configuration updatedConfiguration = updateResourceConfiguration(sbmResource, configuration);
PropertySimple updatedActiveBindingSetProperty = updatedConfiguration.getSimple("activeBindingSetName");
String updatedActiveBindingSetName = updatedActiveBindingSetProperty.getStringValue();
assertEquals(updatedActiveBindingSetName, origActiveBindingSetName);
} catch (Exception e) {
fail("Failed to check that active binding name cannot be set to an invalid name.");
}
}
@Test(dependsOnMethods = "testActiveBindingSetNameChange")
public void testStandardBindingsChangeTest() {
try {
System.out.println("Running SBM standard bindings change test...");
Resource sbmResource = getSBMResource();
Configuration configuration = loadResourceConfiguration(sbmResource);
PropertyMap jnpURLBinding = findBinding(configuration.getList("standardBindings"), JNP_PORT_BINDING_SERVICE_NAME, JNP_PORT_BINDING_BINDING_NAME);
assertNotNull(jnpURLBinding, "Could not find jnp URL binding in the SBM. This should not happen.");
PropertySimple jnpPortProperty = jnpURLBinding.getSimple("port");
int jnpPort = jnpPortProperty.getIntegerValue();
jnpPort += 100;
jnpPortProperty.setIntegerValue(jnpPort);
updateResourceConfiguration(sbmResource, configuration);
Configuration updatedConfiguration = loadResourceConfiguration(sbmResource);
assertEquals(updatedConfiguration, configuration, "A change to JNP URL port standard binding wasn't persisted.");
AppServerUtils.shutdownServer();
Resource asResource = AppServerUtils.getASResource();
Configuration newServerConfig = asResource.getPluginConfiguration();
//this test depends on the active binding set name change test that set the active binding set to
//ports-01 that adds 100 to all standard bindings. We changed the standard binding above
//so now we have to add that 100 to the expected port.
newServerConfig.put(new PropertySimple("namingURL", "jnp://localhost:" + (jnpPort + 100)));
InventoryManager inventoryManager = PluginContainer.getInstance().getInventoryManager();
inventoryManager.updatePluginConfiguration(asResource.getId(), newServerConfig);
System.out.println("Expecting the server to come up with JNP URL jnp://localhost:" + (jnpPort + 100));
AppServerUtils.startServer();
Configuration configurationAfterRestart = loadResourceConfiguration(getSBMResource());
assertEquals(configurationAfterRestart, configuration, "Change to JNP URL port standard binding didn't survive a restart.");
} catch (Exception e) {
fail("Failed to test changing the standard bindings.", e);
}
}
protected void validateTraitMetricValue(String metricName, String value, Resource resource) {
if ("activeBindingSetName".equals(metricName) && getSBMResource().equals(resource)) {
assertEquals(value, "ports-01");
} else {
super.validateTraitMetricValue(metricName, value, resource);
}
}
@AfterTest
@Override
public void restoreConfiguration() {
super.restoreConfiguration();
}
}