/******************************************************************************* * This file is part of OpenNMS(R). * * Copyright (C) 2009-2011 The OpenNMS Group, Inc. * OpenNMS(R) is Copyright (C) 1999-2011 The OpenNMS Group, Inc. * * OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc. * * OpenNMS(R) 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, either version 3 of the License, * or (at your option) any later version. * * OpenNMS(R) 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 OpenNMS(R). If not, see: * http://www.gnu.org/licenses/ * * For more information contact: * OpenNMS(R) Licensing <license@opennms.org> * http://www.opennms.org/ * http://www.opennms.com/ *******************************************************************************/ package org.opennms.netmgt.vmmgr; import java.io.StringReader; import java.util.ArrayList; import java.util.List; import javax.management.MBeanServer; import javax.management.MBeanServerFactory; import javax.management.ObjectInstance; import javax.management.ObjectName; import org.apache.commons.lang.builder.ToStringBuilder; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.opennms.netmgt.config.service.Service; import org.opennms.netmgt.config.service.types.InvokeAtType; import org.opennms.netmgt.dao.db.OpenNMSConfigurationExecutionListener; import org.springframework.test.context.TestExecutionListeners; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.DirtiesContextTestExecutionListener; @RunWith(SpringJUnit4ClassRunner.class) @TestExecutionListeners({ OpenNMSConfigurationExecutionListener.class, DirtiesContextTestExecutionListener.class }) public class InvokerTest { private List<InvokerService> m_services = null; private MBeanServer m_server; @Before public void setUp() throws Throwable { m_server = MBeanServerFactory.createMBeanServer("OpenNMS"); m_services = InvokerService.createServiceList(getServiceList()); Invoker invoker = new Invoker(); invoker.setServer(m_server); invoker.setAtType(InvokeAtType.START); invoker.setServices(m_services); invoker.instantiateClasses(); invokeMethods(invoker); Thread.sleep(1000); } @Test public void tryStatus() throws Throwable { Invoker invoker = new Invoker(); invoker.setServer(m_server); invoker.setAtType(InvokeAtType.STATUS); invoker.setFailFast(false); invoker.setServices(m_services); invoker.getObjectInstances(); invokeMethods(invoker); } @After public void tearDown() throws Throwable { Invoker invoker = new Invoker(); invoker.setServer(m_server); invoker.setAtType(InvokeAtType.STOP); invoker.setReverse(true); invoker.setFailFast(false); invoker.setServices(m_services); invoker.getObjectInstances(); invokeMethods(invoker); } private static void invokeMethods(Invoker invoker) throws Throwable { for (InvokerService iservice : invoker.getServices()) { Service service = iservice.getService(); ObjectName name = new ObjectName(service.getName()); System.err.println("object instance = " + getObjectInstanceString(invoker.getServer().getObjectInstance(name))); } List<InvokerResult> results = invoker.invokeMethods(); System.err.println(invoker.getAtType().toString() + ": got " + results.size() + " results"); for (InvokerResult result : results) { System.err.println(invoker.getAtType().toString() + ": result = " + getResultString(result)); if (result.getThrowable() != null) { throw result.getThrowable(); } } } private static String getObjectInstanceString(ObjectInstance objectInstance) { return new ToStringBuilder(objectInstance) .append("class", objectInstance.getClassName()) .append("object", objectInstance.getObjectName()) .toString(); } private static Service[] getServiceList() throws Exception { List<Service> serviceList = new ArrayList<Service>(); serviceList.add(Service.unmarshal(new StringReader(" <service>\n" + " <name>:Name=XSLTProcessor</name>\n" + " <class-name>mx4j.tools.adaptor.http.XSLTProcessor</class-name>\n" + " </service>\n" + ""))); serviceList.add(Service.unmarshal(new StringReader(" <service>\n" + " <name>:Name=HttpAdaptor</name>\n" + " <class-name>mx4j.tools.adaptor.http.HttpAdaptor</class-name>\n" + " <attribute>\n" + " <name>Port</name>\n" + " <value type=\"java.lang.Integer\">58180</value>\n" + " </attribute>\n" + " <attribute>\n" + " <name>Host</name>\n" + " <value type=\"java.lang.String\">127.0.0.1</value>\n" + " </attribute>\n" + " <attribute>\n" + " <name>ProcessorName</name>\n" + " <value type=\"javax.management.ObjectName\">:Name=XSLTProcessor</value>\n" + " </attribute>\n" + " <attribute>\n" + " <name>AuthenticationMethod</name>\n" + " <value type=\"java.lang.String\">basic</value>\n" + " </attribute>\n" + " <invoke at=\"start\" pass=\"0\" method=\"addAuthorization\">\n" + " <argument type=\"java.lang.String\">admin</argument>\n" + " <argument type=\"java.lang.String\">admin</argument>\n" + " </invoke>\n" + " <invoke at=\"start\" pass=\"0\" method=\"start\"/>\n" + " </service>\n" + ""))); serviceList.add(Service.unmarshal(new StringReader(" <service>\n" + " <name>:Name=HttpAdaptorMgmt</name>\n" + " <class-name>mx4j.tools.adaptor.http.HttpAdaptor</class-name>\n" + " <attribute>\n" + " <name>Port</name>\n" + " <value type=\"java.lang.Integer\">58181</value>\n" + " </attribute>\n" + " <attribute>\n" + " <name>Host</name>\n" + " <value type=\"java.lang.String\">127.0.0.1</value>\n" + " </attribute>\n" + " <attribute>\n" + " <name>AuthenticationMethod</name>\n" + " <value type=\"java.lang.String\">basic</value>\n" + " </attribute>\n" + " <invoke at=\"start\" pass=\"0\" method=\"addAuthorization\">\n" + " <argument type=\"java.lang.String\">manager</argument>\n" + " <argument type=\"java.lang.String\">manager</argument>\n" + " </invoke>\n" + " <invoke at=\"start\" pass=\"0\" method=\"start\"/>\n" + " </service>\n" + ""))); return serviceList.toArray(new Service[0]); } private static String getResultString(InvokerResult result) { return new ToStringBuilder(result) .append("result", result.getResult()) .append("mbean", result.getMbean()) .append("service", getServiceString(result.getService())) .append("throwable", result.getThrowable()) .toString(); } private static String getServiceString(Service service) { return new ToStringBuilder(service) .append("name", service.getName()) .append("class", service.getClassName()) .append("attributes", service.getAttributeCollection()) .append("invoke", service.getInvokeCollection()) .toString(); } }