/* * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved. * * The contents of this file are subject to the terms of either the GNU * General Public License Version 2 only ("GPL") or the Common Development * and Distribution License("CDDL") (collectively, the "License"). You * may not use this file except in compliance with the License. You can * obtain a copy of the License at * https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html * or packager/legal/LICENSE.txt. See the License for the specific * language governing permissions and limitations under the License. * * When distributing the software, include this License Header Notice in each * file and include the License file at packager/legal/LICENSE.txt. * * GPL Classpath Exception: * Oracle designates this particular file as subject to the "Classpath" * exception as provided by Oracle in the GPL Version 2 section of the License * file that accompanied this code. * * Modifications: * If applicable, add the following below the License Header, with the fields * enclosed by brackets [] replaced by your own identifying information: * "Portions Copyright [year] [name of copyright owner]" * * Contributor(s): * If you wish your version of this file to be governed by only the CDDL or * only the GPL Version 2, indicate your decision by adding "[Contributor] * elects to include this software in this distribution under the [CDDL or GPL * Version 2] license." If you don't indicate a single choice of license, a * recipient has the option to distribute your version of this file under * either the CDDL, the GPL Version 2 or to extend the choice of license to * its licensees as provided above. However, if you add GPL Version 2 code * and therefore, elected the GPL Version 2 license, then the option applies * only if the new code is made subject to such option by the copyright * holder. */ package org.glassfish.admin.amxtest; import com.sun.appserv.management.util.jmx.JMXUtil; import com.sun.appserv.management.util.misc.CollectionUtil; import com.sun.appserv.management.util.misc.StringUtil; import com.sun.appserv.management.util.stringifier.SmartStringifier; import javax.management.InstanceAlreadyExistsException; import javax.management.MBeanRegistrationException; import javax.management.MBeanServer; import javax.management.MBeanServerFactory; import javax.management.MBeanServerConnection; import javax.management.MBeanServerInvocationHandler; import javax.management.MalformedObjectNameException; import javax.management.NotCompliantMBeanException; import javax.management.ObjectName; import java.util.Collection; import java.util.HashMap; import java.util.Map; /** Base class for AMX unit tests. */ public class JMXTestBase extends junit.framework.TestCase { private static MBeanServerConnection _GlobalMBeanServerConnection; private static Map<String, Object> sEnv; protected final String NEWLINE; private static final MBeanServer TEST_MBEAN_SERVER = MBeanServerFactory.newMBeanServer("JMXTestBase_temp"); /** Get an in-JVM MBeanServer for testing. */ protected MBeanServer getTestMBeanServer() { return TEST_MBEAN_SERVER; } /** Set the global MBeanServerConnection. This is to support testing to a remote host. */ public static synchronized void setGlobalConnection(final MBeanServerConnection conn) { _GlobalMBeanServerConnection = conn; } public static synchronized MBeanServerConnection getGlobalMBeanServerConnection() { return _GlobalMBeanServerConnection; } public static MBeanServerConnection getMBeanServerConnection() { return getGlobalMBeanServerConnection(); } protected <T> T newProxy( final ObjectName target, final Class<T> interfaceClass) { try { assert getGlobalMBeanServerConnection().isRegistered(target); } catch (java.io.IOException e) { throw new RuntimeException(e); } return interfaceClass.cast(MBeanServerInvocationHandler.newProxyInstance( getGlobalMBeanServerConnection(), target, interfaceClass, true)); } public static synchronized Object getEnvValue(final String key) { return (sEnv == null ? null : sEnv.get(key)); } public static Integer getEnvInteger( final String key, Integer defaultValue) { final String s = getEnvString(key, null); Integer result = defaultValue; if (s != null) { result = new Integer(s.trim()); } return (result); } public static String getEnvString( final String key, final String defaultValue) { final String s = (String) getEnvValue(key); return (s == null ? defaultValue : s); } public static Boolean getEnvBoolean( final String key, final Boolean defaultValue) { Boolean result = defaultValue; final String s = getEnvString(key, null); if (s != null) { result = Boolean.valueOf(s); } return (result); } private static synchronized void initEnv() { if (sEnv == null) { sEnv = new HashMap<String, Object>(); } } public static synchronized void setEnvValue( final String key, final Object value) { initEnv(); sEnv.put(key, value); } public static synchronized void setEnvValues(final Map<String, Object> m) { initEnv(); sEnv.putAll(m); } public JMXTestBase() { super("JMXTestBase"); NEWLINE = StringUtil.NEWLINE(); checkAssertsOn(); } public JMXTestBase(String name) { super(name); NEWLINE = StringUtil.NEWLINE(); checkAssertsOn(); } protected String toString(final ObjectName objectName) { return JMXUtil.toString(objectName); } protected String toString(final Object o) { String result = null; if (o instanceof Collection) { result = CollectionUtil.toString((Collection) o, "\n"); } else { result = SmartStringifier.toString(o); } return (result); } protected static void trace(final Object o) { System.out.println(SmartStringifier.toString(o)); } protected void println(final Object o) { System.out.println(SmartStringifier.toString(o)); } protected long now() { return (System.currentTimeMillis()); } protected final void printElapsed( final String msg, final long start) { printVerbose(msg + ": " + (now() - start) + "ms"); } protected final void printElapsedIter( final String msg, final long start, final long iterations) { printVerbose(msg + "(" + iterations + " iterations): " + (now() - start) + "ms"); } protected final void printElapsed( final String msg, final int numItems, final long start) { printVerbose(msg + ", " + numItems + " MBeans: " + (now() - start) + "ms"); } protected final String quote(final Object o) { return (StringUtil.quote(SmartStringifier.toString(o))); } protected boolean getVerbose() { /* final String value = (String) getEnvValue(PropertyKeys.VERBOSE_KEY); return (value != null && Boolean.valueOf(value).booleanValue()); */ return false; } protected void printVerbose(final Object o) { if (getVerbose()) { trace(o); } } protected void warning(final String msg) { trace("\nWARNING: " + msg + "\n"); } protected void failure(final String msg) { trace("\nFAILURE: " + msg + "\n"); assert (false) : msg; throw new Error(msg); } protected void checkAssertsOn() { try { assert (false); throw new Error("Assertions must be enabled for unit tests"); } catch (AssertionError a) { } } protected void registerMBean( Object mbean, String name) throws MalformedObjectNameException, InstanceAlreadyExistsException, NotCompliantMBeanException, MBeanRegistrationException { getTestMBeanServer().registerMBean(mbean, new ObjectName(name)); } };