/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.test.system.controller;
import java.io.IOException;
import java.net.URL;
import java.util.Collections;
import java.util.List;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import org.jboss.system.ServiceContext;
import org.jboss.system.ServiceControllerMBean;
import org.jboss.test.AbstractSystemTest;
import org.jboss.test.AbstractTestDelegate;
import org.jboss.test.system.controller.support.Order;
import org.jboss.test.system.controller.support.Simple;
import org.jboss.test.system.controller.support.SimpleMBean;
/**
* A Controller Test.
*
* @author <a href="adrian@jboss.com">Adrian Brock</a>
* @version $Revision: 85945 $
*/
public abstract class AbstractControllerTest extends AbstractSystemTest
{
public static boolean OLD_NOT_REGISTERED = false;
public static boolean OLD_REGISTERED = true;
/**
* Create a new ContainerTest.
*
* @param name the test name
*/
public AbstractControllerTest(String name)
{
super(name);
}
public static AbstractTestDelegate getNewControllerDelegate(Class clazz) throws Exception
{
ControllerTestDelegate delegate = new NewControllerTestDelegate(clazz);
// @todo delegate.enableSecurity = true;
return delegate;
}
public static AbstractTestDelegate getOldControllerDelegate(Class clazz) throws Exception
{
ControllerTestDelegate delegate = new OldControllerTestDelegate(clazz);
// @todo delegate.enableSecurity = true;
return delegate;
}
protected void setUp() throws Exception
{
super.setUp();
Order.reset();
}
protected void tearDown() throws Exception
{
getControllerDelegate().uninstallTemporary();
super.tearDown();
}
protected ControllerTestDelegate getControllerDelegate()
{
return (ControllerTestDelegate) getDelegate();
}
protected MBeanServer getServer()
{
return getControllerDelegate().getServer();
}
protected ServiceControllerMBean getController()
{
return getControllerDelegate().getController();
}
protected List<ObjectName> deploy(URL url) throws Exception
{
return getControllerDelegate().deploy(url, true);
}
protected List<ObjectName> deploy(String resource) throws Exception
{
URL url = getResourceURL(resource);
return deploy(url);
}
protected void undeploy(List<ObjectName> objectNames)
{
getControllerDelegate().undeploy(objectNames);
}
protected List<ObjectName> install(String resource) throws Exception
{
URL url = getResourceURL(resource);
return install(url);
}
protected List<ObjectName> install(URL url) throws Exception
{
return getControllerDelegate().install(url);
}
protected void uninstall(List<ObjectName> objectNames)
{
getControllerDelegate().uninstall(objectNames);
}
protected void assertInstall(ObjectName name) throws Exception
{
String resource = getName();
resource = resource.substring(4) + "_install.xml";
install(resource);
assertServiceConfigured(name);
assertRegistered(name);
}
protected void assertUninstall(ObjectName name) throws Exception
{
uninstall(Collections.singletonList(name));
assertNoService(name);
assertNotRegistered(name);
}
protected List<ObjectName> assertDeploy(ObjectName name) throws Exception
{
String resource = getName();
resource = resource.substring(4) + "_install.xml";
List<ObjectName> result = deploy(resource);
assertServiceRunning(name);
assertRegistered(name);
return result;
}
protected void assertUndeploy(ObjectName name) throws Exception
{
assertUndeploy(name, Collections.singletonList(name));
}
protected void assertUndeploy(ObjectName name, List<ObjectName> names) throws Exception
{
uninstall(names);
assertNoService(name);
assertNotRegistered(name);
}
protected void validate() throws Exception
{
getControllerDelegate().validate();
}
protected void assertInvalidDeployments() throws Exception
{
getControllerDelegate().assertInvalidDeployments();
}
protected void assertInitialDeployFailure(String resource, ObjectName name, Class<? extends Throwable> expected) throws Exception
{
URL url = getResourceURL(resource);
getControllerDelegate().assertInitialDeployFailure(url, name, expected);
}
protected List<ObjectName> assertDeployFailure(ObjectName name, Class<? extends Throwable> expected) throws Exception
{
return assertDeployFailure(name, ServiceContext.FAILED, expected);
}
protected List<ObjectName> assertDeployFailure(ObjectName name, int expectedState, Class<? extends Throwable> expected) throws Exception
{
String resource = getName();
resource = resource.substring(4) + "_bad.xml";
return assertDeployFailure(resource, name, expectedState, expected);
}
protected List<ObjectName> assertDeployFailure(String resource, ObjectName name, Class<? extends Throwable> expected) throws Exception
{
return assertDeployFailure(resource, name, ServiceContext.FAILED, expected);
}
protected List<ObjectName> assertDeployFailure(String resource, ObjectName name, int expectedState, Class<? extends Throwable> expected) throws Exception
{
URL url = getResourceURL(resource);
List<ObjectName> result = getControllerDelegate().assertDeployFailure(url, name, expected);
if (expectedState == ServiceContext.FAILED)
assertServiceFailed(name, OLD_REGISTERED);
else
assertServiceState(name, expectedState);
return result;
}
protected void redeployAfterDeployFailure(ObjectName name, Class<? extends Throwable> expected) throws Exception
{
String root = getName();
root = root.substring(4);
List<ObjectName> names = assertDeployFailure(root + "_bad.xml", SimpleMBean.OBJECT_NAME, expected);
undeploy(names);
deploy(root + "_good.xml");
assertServiceRunning(name);
}
protected void redeployAfterUndeployFailure(ObjectName name) throws Exception
{
String root = getName();
root = root.substring(4);
List<ObjectName> names = deploy(root + "_bad.xml");
assertServiceRunning(name);
undeploy(names);
deploy(root + "_good.xml");
assertServiceRunning(name);
}
protected List<ObjectName> assertMaybeDeployFailure(ObjectName name, Class<? extends Throwable> expected) throws Exception
{
String resource = getName();
resource = resource.substring(4) + "_bad.xml";
return assertMaybeDeployFailure(resource, name, expected);
}
protected List<ObjectName> assertMaybeDeployFailure(String resource, ObjectName name, Class<? extends Throwable> expected) throws Exception
{
URL url = getResourceURL(resource);
List<ObjectName> result = getControllerDelegate().assertMaybeDeployFailure(url, name, expected);
assertServiceFailed(name, OLD_NOT_REGISTERED);
return result;
}
protected void redeployAfterMaybeDeployFailure(ObjectName name, Class<? extends Throwable> expected) throws Exception
{
String root = getName();
root = root.substring(4);
List<ObjectName> names = assertMaybeDeployFailure(root + "_bad.xml", SimpleMBean.OBJECT_NAME, expected);
undeploy(names);
deploy(root + "_good.xml");
assertServiceRunning(name);
}
protected void assertMaybeParseFailure(ObjectName name, Class<? extends Throwable> expected) throws Exception
{
String resource = getName();
resource = resource.substring(4) + "_bad.xml";
assertMaybeParseFailure(resource, name, expected);
}
protected void assertMaybeParseFailure(String resource, ObjectName name, Class<? extends Throwable> expected) throws Exception
{
URL url = getResourceURL(resource);
getControllerDelegate().assertMaybeParseFailure(url, name, expected);
assertServiceFailed(name, OLD_NOT_REGISTERED);
}
protected ServiceContext getServiceContext(ObjectName name) throws Exception
{
assertNotNull(name);
return getControllerDelegate().getServiceContext(name);
}
protected void assertServiceFailed(ObjectName name) throws Exception
{
assertServiceFailed(name, OLD_REGISTERED);
}
protected void assertServiceFailed(ObjectName name, boolean registered) throws Exception
{
getControllerDelegate().assertServiceFailed(name, registered);
}
protected void assertServiceInstalled(ObjectName name) throws Exception
{
assertServiceState(name, ServiceContext.INSTALLED, true);
}
protected void assertServiceConfigured(ObjectName name) throws Exception
{
assertServiceState(name, ServiceContext.CONFIGURED, true);
}
protected void assertServiceCreated(ObjectName name) throws Exception
{
assertServiceState(name, ServiceContext.CREATED, true);
}
protected void assertServiceRunning(ObjectName name) throws Exception
{
assertServiceState(name, ServiceContext.RUNNING, true);
}
protected void assertServiceStopped(ObjectName name) throws Exception
{
assertServiceState(name, ServiceContext.STOPPED, true);
}
protected void assertServiceDestroyed(ObjectName name) throws Exception
{
assertServiceState(name, ServiceContext.DESTROYED, true);
}
protected void assertServiceState(ObjectName name, int expectedState) throws Exception
{
ServiceContext ctx = getServiceContext(name);
assertTrue("Incorrect state for " + name + " expected " + ServiceContext.getStateString(expectedState) + " got " + ctx.getStateString(), expectedState == ctx.state);
}
protected void assertServiceState(ObjectName name, int expectedState, boolean registered) throws Exception
{
getControllerDelegate().assertServiceState(name, expectedState, registered);
}
protected void assertNoService(ObjectName name) throws Exception
{
ServiceContext ctx = getServiceContext(name);
assertNull("Should not be a service context for " + name, ctx);
}
protected URL getResourceURL(String resource) throws Exception
{
URL url = getClass().getResource(resource);
if (url == null)
throw new IOException(resource + " not found");
return url;
}
protected void assertRegistered(ObjectName name) throws Exception
{
MBeanServer server = getServer();
assertTrue(name + " should be registered in the MBeanServer", server.isRegistered(name));
}
protected void assertNotRegistered(ObjectName name) throws Exception
{
MBeanServer server = getServer();
assertFalse(name + " should NOT be registered in the MBeanServer", server.isRegistered(name));
}
protected <T> T getMBean(Class<T> expected, ObjectName name, String attribute) throws Exception
{
MBeanServer server = getServer();
Object object = server.getAttribute(name, attribute);
assertNotNull(object);
return assertInstanceOf(expected, object);
}
protected Simple getSimple() throws Exception
{
return getMBean(Simple.class, SimpleMBean.OBJECT_NAME, "Instance");
}
protected void FAILS_IN_OLD()
{
getLog().debug("This test fails with the old service controller, ignoring.");
}
}