/* * 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.metadata.test; import java.io.IOException; import java.net.URL; import java.util.Arrays; import java.util.HashSet; import java.util.List; import javax.management.ObjectName; import junit.framework.AssertionFailedError; import org.jboss.dependency.spi.ControllerState; import org.jboss.mx.util.ObjectNameFactory; import org.jboss.system.metadata.ServiceAttributeMetaData; import org.jboss.system.metadata.ServiceConstructorMetaData; import org.jboss.system.metadata.ServiceDependencyListValueMetaData; import org.jboss.system.metadata.ServiceDependencyMetaData; import org.jboss.system.metadata.ServiceDependencyValueMetaData; import org.jboss.system.metadata.ServiceElementValueMetaData; import org.jboss.system.metadata.ServiceInjectionValueMetaData; import org.jboss.system.metadata.ServiceJBXBValueMetaData; import org.jboss.system.metadata.ServiceJavaBeanValueMetaData; import org.jboss.system.metadata.ServiceMetaData; import org.jboss.system.metadata.ServiceTextValueMetaData; import org.jboss.system.metadata.ServiceValueFactoryParameterMetaData; import org.jboss.system.metadata.ServiceValueFactoryValueMetaData; import org.jboss.system.metadata.ServiceValueMetaData; import org.jboss.test.AbstractSystemTest; import org.jboss.test.AbstractTestDelegate; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /** * A MetaDataTest. * * @author <a href="adrian@jboss.com">Adrian Brock</a> * @version $Revision: 85945 $ */ public class AbstractMetaDataTest extends AbstractSystemTest { protected static ObjectName testBasicMBeanName = ObjectNameFactory.create("jboss.test:type=BasicMBeanName"); protected static String testBasicMBeanCode = "BasicMBeanCode"; protected static String testBasicMBeanInterface = "BasicMBeanInterface"; protected static ObjectName TEST1 = ObjectNameFactory.create("test:test=1"); protected static ObjectName TEST2 = ObjectNameFactory.create("test:test=2"); protected static ObjectName[] NO_OBJECT_NAMES = new ObjectName[0]; /** * Create a new ContainerTest. * * @param name the test name */ public AbstractMetaDataTest(String name) { super(name); } /** * Default setup with security manager enabled * * @param clazz the class * @return the delegate * @throws Exception for any error */ public static AbstractTestDelegate getDelegate(Class<?> clazz) throws Exception { MetaDataTestDelegate delegate = new MetaDataTestDelegate(clazz); delegate.enableSecurity = true; return delegate; } /** * Unmarshal some xml * * @param name the name * @return the list of services * @throws Exception for any error */ protected List<ServiceMetaData> unmarshal(String name) throws Exception { URL url = findXML(name); return getMetaDataDelegate().unmarshal(url); } /** * Unmarshal a single mbean * * @return the single service * @throws Exception for any error */ protected ServiceMetaData unmarshalSingleMBean() throws Exception { String name = getName(); name = name.substring(4) + ".xml"; return unmarshalSingleMBean(name); } /** * Unmarshal a single mbean * * @param name the name * @return the single service * @throws Exception for any error */ protected ServiceMetaData unmarshalSingleMBean(String name) throws Exception { URL url = findXML(name); List<ServiceMetaData> services = getMetaDataDelegate().unmarshal(url); assertFalse(url + " should contain an mbean ", services.isEmpty()); ServiceMetaData service = services.get(services.size()-1); assertNotNull(service); return service; } protected void assertFailUnmarshal(Class<? extends Throwable> expected) throws Exception { String name = getName(); name = name.substring(4) + ".xml"; assertFailUnmarshal(name, expected); } protected void assertFailUnmarshal(String name, Class<? extends Throwable> expected) throws Exception { try { unmarshal(name); fail("Should fail to unmarshal " + name); } catch (AssertionFailedError e) { throw e; } catch (Throwable error) { AbstractSystemTest.checkThrowableDeep(expected, error); } } /** * Find the xml * * @param name the name * @return the url of the xml * @throws Exception for any error */ protected URL findXML(String name) throws Exception { URL url = getResource(name); if (url == null) throw new IOException(name + " not found"); return url; } protected MetaDataTestDelegate getMetaDataDelegate() { return (MetaDataTestDelegate) getDelegate(); } protected void assertDefaultConstructor(ServiceMetaData metaData) throws Exception { ServiceConstructorMetaData constructor = metaData.getConstructor(); assertNotNull(constructor); String[] signature = constructor.getSignature(); assertNotNull(signature); assertEquals(0, signature.length); String[] params = constructor.getParams(); assertNotNull(params); assertEquals(0, params.length); } protected void assertConstructor(String[] expectedSignature, String[] expectedParams, ServiceMetaData metaData) throws Exception { ServiceConstructorMetaData constructor = metaData.getConstructor(); assertNotNull(constructor); String[] signature = constructor.getSignature(); assertNotNull(signature); assertEquals(expectedSignature, signature); String[] params = constructor.getParams(); assertNotNull(params); assertEquals(expectedParams, params); } protected void assertNoAttributes(ServiceMetaData metaData) throws Exception { List<ServiceAttributeMetaData> attributes = metaData.getAttributes(); assertNotNull(attributes); assertEquals(0, attributes.size()); } protected void assertAttributeName(ServiceAttributeMetaData attribute, String name) throws Exception { assertNotNull(attribute); String result = attribute.getName(); assertNotNull(result); assertEquals("Expected attribute with name " + name + " got " + result, name, result); } protected void assertAttribute(ServiceMetaData metaData, String name) throws Exception { assertNotNull(metaData); List<ServiceAttributeMetaData> attributes = metaData.getAttributes(); assertNotNull(attributes); assertEquals(1, attributes.size()); ServiceAttributeMetaData attribute = attributes.get(0); assertAttributeName(attribute, name); } protected void assertAttributes(ServiceMetaData metaData, String[] names) throws Exception { assertNotNull(names); assertNotNull(metaData); List<ServiceAttributeMetaData> attributes = metaData.getAttributes(); assertNotNull(attributes); assertEquals(names.length, attributes.size()); ServiceAttributeMetaData attribute = attributes.get(0); for (String name : names) assertAttributeName(attribute, name); } protected void assertAttribute(ServiceAttributeMetaData attribute, boolean trim, boolean replace, String name) throws Exception { assertNotNull(attribute); String result = attribute.getName(); assertNotNull(result); assertEquals(name, result); assertEquals(trim, attribute.isTrim()); assertEquals(replace, attribute.isReplace()); } protected void assertTextAttribute(ServiceAttributeMetaData attribute) throws Exception { assertTextAttribute(attribute, true, true, "Attribute", "value"); } protected void assertTextAttribute(ServiceAttributeMetaData attribute, String value) throws Exception { assertTextAttribute(attribute, true, true, "Attribute", value); } protected void assertTextAttribute(ServiceAttributeMetaData attribute, String name, String value) throws Exception { assertTextAttribute(attribute, true, true, name, value); } protected void assertTextAttribute(ServiceAttributeMetaData attribute, boolean trim, boolean replace) throws Exception { assertTextAttribute(attribute, trim, replace, "Attribute", "value"); } protected void assertTextAttribute(ServiceAttributeMetaData attribute, boolean trim, boolean replace, String name, String value) throws Exception { assertAttribute(attribute, trim, replace, name); ServiceValueMetaData actual = attribute.getValue(); assertNotNull(actual); assertTextValue(actual, value); } protected void assertDependsAttribute(ServiceAttributeMetaData attribute) throws Exception { assertDependsAttribute(attribute, false, false, "Attribute", TEST1); } protected void assertDependsAttribute(ServiceAttributeMetaData attribute, String name, ObjectName value) throws Exception { assertDependsAttribute(attribute, false, false, name, value); } protected void assertDependsAttribute(ServiceAttributeMetaData attribute, boolean trim, boolean replace, String name, ObjectName value) throws Exception { assertAttribute(attribute, trim, replace, name); ServiceValueMetaData actual = attribute.getValue(); assertNotNull(actual); assertDependencyValue(actual, value); } protected void assertDependsListAttribute(ServiceAttributeMetaData attribute) throws Exception { assertDependsListAttribute(attribute, false, false, "Attribute", TEST1); } protected void assertDependsListAttribute(ServiceAttributeMetaData attribute, String name, ObjectName value) throws Exception { assertDependsListAttribute(attribute, false, false, name, value); } protected void assertDependsListAttribute(ServiceAttributeMetaData attribute, boolean trim, boolean replace, String name, ObjectName value) throws Exception { assertDependsListAttribute(attribute, trim, replace, name, new ObjectName[] { value }); } protected void assertDependsListAttribute(ServiceAttributeMetaData attribute, boolean trim, boolean replace, String name, ObjectName[] value) throws Exception { assertAttribute(attribute, trim, replace, name); ServiceValueMetaData actual = attribute.getValue(); assertNotNull(actual); assertDependencyListValue(actual, value); } protected void assertDependsListAttributeEmpty(ServiceAttributeMetaData attribute) throws Exception { assertDependsListAttribute(attribute, false, false, "Attribute", NO_OBJECT_NAMES); } protected void assertTextValue(ServiceValueMetaData actual, String expected) throws Exception { assertNotNull(expected); assertNotNull(actual); ServiceTextValueMetaData value = assertInstanceOf(ServiceTextValueMetaData.class, actual); assertEquals(expected, value.getText()); } protected void assertDependencyValue(ServiceValueMetaData actual, ObjectName expected) throws Exception { assertDependencyValue(actual, expected, null); } protected void assertDependencyValue(ServiceValueMetaData actual, ObjectName expected, String proxyType) throws Exception { assertNotNull(expected); assertNotNull(actual); ServiceDependencyValueMetaData value = assertInstanceOf(ServiceDependencyValueMetaData.class, actual); assertEquals(expected, value.getObjectName()); assertEquals(proxyType, value.getProxyType()); } protected void assertDependencyListValueEmpty(ServiceValueMetaData actual) throws Exception { assertDependencyListValue(actual, NO_OBJECT_NAMES ); } protected void assertDependencyListValue(ServiceValueMetaData actual, ObjectName expected) throws Exception { assertDependencyListValue(actual, new ObjectName[] { expected } ); } protected void assertDependencyListValue(ServiceValueMetaData actual, ObjectName[] expected) throws Exception { assertNotNull(expected); assertNotNull(actual); ServiceDependencyListValueMetaData value = assertInstanceOf(ServiceDependencyListValueMetaData.class, actual); List<ObjectName> list = value.getObjectNames(); assertNotNull(list); ObjectName[] test = list.toArray(new ObjectName[list.size()]); assertTrue("Expected " + Arrays.asList(expected) + " got " + Arrays.asList(test), Arrays.equals(expected, test)); } protected void assertElementValue(ServiceValueMetaData actual, String expected) throws Exception { assertNotNull(expected); assertNotNull(actual); ServiceElementValueMetaData value = assertInstanceOf(ServiceElementValueMetaData.class, actual); Element element = value.getElement(); assertNotNull(element); String name = element.getTagName(); assertNotNull(name); assertEquals(expected, name); } protected void assertJavaBeanValue(ServiceValueMetaData actual, String expected) throws Exception { assertNotNull(actual); ServiceJavaBeanValueMetaData value = assertInstanceOf(ServiceJavaBeanValueMetaData.class, actual); Element element = value.getElement(); assertChildOfAttribute(element, expected); } protected void assertJBXBValue(ServiceValueMetaData actual, String expected) throws Exception { assertNotNull(actual); ServiceJBXBValueMetaData value = assertInstanceOf(ServiceJBXBValueMetaData.class, actual); Element element = value.getElement(); assertChildOfAttribute(element, expected); } protected void assertInjectValue(ServiceValueMetaData actual, Object dependency, String property) throws Exception { assertInjectValue(actual, dependency, property, ControllerState.INSTALLED); } protected void assertInjectValue(ServiceValueMetaData actual, Object dependency, String property, ControllerState requiredState) throws Exception { assertNotNull(actual); ServiceInjectionValueMetaData value = assertInstanceOf(ServiceInjectionValueMetaData.class, actual); assertEquals(dependency, value.getDependency()); assertEquals(property, value.getProperty()); assertEquals(requiredState, value.getDependentState()); } protected void assertValueFactoryValue(ServiceValueMetaData actual, List<ServiceValueFactoryParameterMetaData> parameters, String defaultValue) throws Exception { assertValueFactoryValue(actual, "method", parameters, defaultValue, "bean", ControllerState.INSTALLED); } protected void assertValueFactoryValue(ServiceValueMetaData actual, List<ServiceValueFactoryParameterMetaData> parameters, String defaultValue, ControllerState state) throws Exception { assertValueFactoryValue(actual, "method", parameters, defaultValue, "bean", state); } protected void assertValueFactoryValue(ServiceValueMetaData actual, String method, List<ServiceValueFactoryParameterMetaData> parameters, String defaultValue, Object dependency, ControllerState requiredState) throws Exception { assertNotNull(actual); ServiceValueFactoryValueMetaData value = assertInstanceOf(ServiceValueFactoryValueMetaData.class, actual); assertEquals(method, value.getMethod()); assertEquals(dependency, value.getDependency()); assertEquals(requiredState, value.getDependentState()); ServiceTextValueMetaData defMetadata = value.getDefaultValue(); assertEquals(defaultValue, (defMetadata == null ? null : defMetadata.getText())); assertEquals(parameters, value.getParameterMetaData()); } protected void assertChildOfAttribute(Element element, String expected) throws Exception { assertNotNull(element); String name = element.getTagName(); assertEquals("attribute", name); NodeList children = element.getChildNodes(); assertEquals(1, children.getLength()); Node node = children.item(0); element = assertInstanceOf(Element.class, node); name = element.getTagName(); assertEquals(expected, name); } protected void assertNoDependencies(ServiceMetaData metaData) throws Exception { List<ServiceDependencyMetaData> dependencies = metaData.getDependencies(); assertNotNull(dependencies); assertEquals(0, dependencies.size()); } protected void assertDependencies(ServiceMetaData metaData, ObjectName[] expected) throws Exception { List<ServiceDependencyMetaData> dependencies = metaData.getDependencies(); assertNotNull(dependencies); assertEquals(expected.length, dependencies.size()); HashSet<ObjectName> expectedSet = new HashSet<ObjectName>(); for (ObjectName expect : expected) expectedSet.add(expect); HashSet<ObjectName> actual = new HashSet<ObjectName>(); for (ServiceDependencyMetaData depends : dependencies) actual.add(depends.getIDependOnObjectName()); assertEquals(expectedSet, actual); } protected void assertNoXMBean(ServiceMetaData metaData) throws Exception { assertNull(metaData.getXMBeanDD()); assertEquals(ServiceMetaData.XMBEAN_CODE, metaData.getXMBeanCode()); assertNull(metaData.getXMBeanDescriptor()); } }