/*
* 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.wildfly10.itest.domain;
import static java.lang.Boolean.TRUE;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import org.testng.annotations.Test;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.pc.util.ComponentUtil;
import org.rhq.core.pc.util.FacetLockType;
import org.rhq.core.pluginapi.bundle.BundleHandoverContext;
import org.rhq.core.pluginapi.bundle.BundleHandoverFacet;
import org.rhq.core.pluginapi.bundle.BundleHandoverRequest;
import org.rhq.core.pluginapi.bundle.BundleHandoverResponse;
import org.rhq.core.util.exception.ThrowableUtil;
import org.rhq.modules.plugins.wildfly10.itest.AbstractJBossAS7PluginTest;
import org.rhq.modules.plugins.wildfly10.json.Address;
import org.rhq.modules.plugins.wildfly10.json.Operation;
import org.rhq.modules.plugins.wildfly10.json.ReadAttribute;
import org.rhq.modules.plugins.wildfly10.json.ReadResource;
import org.rhq.modules.plugins.wildfly10.json.Result;
import org.rhq.modules.plugins.wildfly10.test.util.ASConnectionFactory;
import org.rhq.modules.plugins.wildfly10.test.util.Constants;
import org.rhq.test.arquillian.RunDiscovery;
/**
* @author Thomas Segismont
*/
@Test(groups = { "integration", "pc", "domain" }, singleThreaded = true)
public class BundleContentHandoverTest extends AbstractJBossAS7PluginTest {
private Resource domainServerResource;
@Test(priority = -10000)
@RunDiscovery(discoverServers = true, discoverServices = false)
public void initialDiscoveryTest() throws Exception {
Resource platformResource = validatePlatform();
domainServerResource = waitForResourceByTypeAndKey(platformResource, platformResource, Constants.DOMAIN_RESOURCE_TYPE,
Constants.DOMAIN_RESOURCE_KEY);
}
@Test(dependsOnMethods = { "initialDiscoveryTest" })
public void testExecuteCliAction() throws Exception {
BundleHandoverFacet handoverFacet = getHandoverFacet();
BundleHandoverContext.Builder contextBuilder = new BundleHandoverContext.Builder() //
.setRevert(false);
BundleHandoverRequest.Builder requestBuilder = new BundleHandoverRequest.Builder() //
.setContent(getClass().getClassLoader().getResourceAsStream("itest/updateDomainEjb3Subsystem.cli")) //
.setFilename("updateDomainEjb3Subsystem.cli") //
.setAction("execute-script") //
.setParams(Collections.<String, String> emptyMap()) //
.setContext(contextBuilder.create());
BundleHandoverResponse response = handoverFacet.handleContent(requestBuilder.createBundleHandoverRequest());
assertTrue(response.isSuccess(), getFailureMessage(response));
Address ejb3SubsystemAddress = new Address();
ejb3SubsystemAddress.add("profile", "full");
ejb3SubsystemAddress.add("subsystem", "ejb3");
Result readAttributeResult = ASConnectionFactory.getDomainControllerASConnection().execute(
new ReadAttribute(ejb3SubsystemAddress, "default-singleton-bean-access-timeout"));
assertTrue(readAttributeResult.isSuccess(), readAttributeResult.getFailureDescription());
Integer defaultSingletonBeanAccessTimeout = (Integer) readAttributeResult.getResult();
assertEquals(defaultSingletonBeanAccessTimeout, Integer.valueOf(7777));
}
@Test(dependsOnMethods = { "initialDiscoveryTest" })
public void testDeploymentAction() throws Exception {
BundleHandoverFacet handoverFacet = getHandoverFacet();
BundleHandoverContext.Builder contextBuilder = new BundleHandoverContext.Builder() //
.setRevert(false);
Map<String, String> params = new HashMap<String, String>();
params.put("serverGroup", "main-server-group");
BundleHandoverRequest.Builder requestBuilder = new BundleHandoverRequest.Builder() //
.setContent(getClass().getClassLoader().getResourceAsStream("itest/javaee6-test-app.war")) //
.setFilename("javaee6-test-app.war") //
.setAction("deployment") //
.setParams(params) //
.setContext(contextBuilder.create());
BundleHandoverResponse response = handoverFacet.handleContent(requestBuilder.createBundleHandoverRequest());
assertTrue(response.isSuccess(), getFailureMessage(response));
Address managedServerDeploymentAddress = new Address();
managedServerDeploymentAddress.add("host", "master");
managedServerDeploymentAddress.add("server", "server-one");
managedServerDeploymentAddress.add("deployment", "javaee6-test-app.war");
Result readAttributeResult = ASConnectionFactory.getDomainControllerASConnection().execute(
new ReadResource(managedServerDeploymentAddress));
assertTrue(readAttributeResult.isSuccess(), readAttributeResult.getFailureDescription());
@SuppressWarnings("unchecked")
Map<String, ?> attributes = (Map<String, ?>) readAttributeResult.getResult();
assertEquals(attributes.get("enabled"), TRUE);
assertEquals(attributes.get("runtime-name"), "javaee6-test-app.war");
Address serverGroupDeploymentAddress = new Address();
serverGroupDeploymentAddress.add("server-group", "main-server-group");
serverGroupDeploymentAddress.add("deployment", "javaee6-test-app.war");
Result removeDeploymentResult = ASConnectionFactory.getDomainControllerASConnection().execute(
new Operation("remove", serverGroupDeploymentAddress));
assertTrue(removeDeploymentResult.isSuccess(), "Could not clean domain controller deployment: "
+ removeDeploymentResult.getFailureDescription());
}
private BundleHandoverFacet getHandoverFacet() throws Exception {
return ComponentUtil.getComponent(domainServerResource.getId(), BundleHandoverFacet.class, FacetLockType.WRITE,
TimeUnit.MINUTES.toMillis(5), true, true, false);
}
public static String getFailureMessage(BundleHandoverResponse response) {
return response.getFailureType() + ": " + response.getMessage() + " "
+ ThrowableUtil.getAllMessages(response.getThrowable());
}
}