001 // jademx - JADE management using JMX
002 // Copyright 2004-2005 Caboodle Networks, Inc.
003 //
004 // This library is free software; you can redistribute it and/or
005 // modify it under the terms of the GNU Lesser General Public
006 // License as published by the Free Software Foundation; either
007 // version 2.1 of the License, or (at your option) any later version.
008 //
009 // This library is distributed in the hope that it will be useful,
010 // but WITHOUT ANY WARRANTY; without even the implied warranty of
011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012 // Lesser General Public License for more details.
013 //
014 // You should have received a copy of the GNU Lesser General Public
015 // License along with this library; if not, write to the Free Software
016 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
017
018 package jade.jademx.util;
019
020 import java.util.Arrays;
021
022 import javax.management.MBeanAttributeInfo;
023 import javax.management.MBeanConstructorInfo;
024 import javax.management.MBeanInfo;
025 import javax.management.MBeanNotificationInfo;
026 import javax.management.MBeanOperationInfo;
027 import javax.management.MBeanParameterInfo;
028 import javax.management.Notification;
029
030 import jade.jademx.JadeMXSuiteTest;
031 import junit.framework.Test;
032 import junit.framework.TestCase;
033 import junit.framework.TestSuite;
034
035 /**
036 * test jade.jademx.util.ThrowableUtil
037 * @author David Bernstein, <a href="http://www.caboodlenetworks.com"
038 * >Caboodle Networks, Inc.</a>
039 */
040 public class MBeanUtilTest extends TestCase {
041
042 // attributes
043 /** arguments attribute name */
044 public static final String ATTR_ARGUMENTS = "Arguments";
045 MBeanAttributeInfo aI[] = new MBeanAttributeInfo[] {
046 new MBeanAttributeInfo(
047 ATTR_ARGUMENTS,
048 Object[].class.getName(),
049 "agent startup arguments",
050 true, false, false )
051 };
052
053 // constructors
054 MBeanConstructorInfo cI[] = new MBeanConstructorInfo[0];
055
056 // operations
057 /** shutdown operation name */
058 public static final String OPER_FOO_NAME = "foo";
059 /** unitTestInject operation description */
060 private final static String OPER_FOO_DESC =
061 "kill this agent";
062 /** signature for a kill operation */
063 public final static String OPER_FOO_SIGNATURE[] = {
064 "bar",
065 "baz"
066 };
067 /** return type for unitTestInject operation */
068 public final static String OPER_FOO_TYPE =
069 void.class.getName();
070 MBeanParameterInfo pIKill[] = new MBeanParameterInfo[] {
071 new MBeanParameterInfo("a", "bar", "desc1"),
072 new MBeanParameterInfo("b", "baz", "desc2")
073 };
074
075 MBeanOperationInfo oI[] = new MBeanOperationInfo[] {
076 new MBeanOperationInfo( OPER_FOO_NAME,
077 OPER_FOO_DESC,
078 pIKill,
079 OPER_FOO_TYPE,
080 MBeanOperationInfo.ACTION )//,
081 };
082
083 // notifications
084
085 /** notification that unit test failed */
086 public final static String NOTIF_UNIT_TEST_FAILURE_NAME =
087 "unitTestFailure";
088 /** notification that unit test succeeded */
089 public final static String NOTIF_UNIT_TEST_SUCCESS_NAME =
090 "unitTestSuccess";
091 String notifications[] = {
092 NOTIF_UNIT_TEST_FAILURE_NAME,
093 NOTIF_UNIT_TEST_SUCCESS_NAME
094 };
095
096 String myClassName = getClass().getName();
097 /** expected notification description */
098 String NOTIF_INFO_DESCRIPTION =
099 "notification set for " + myClassName;
100 /** expected notifications */
101 MBeanNotificationInfo nI[] = new MBeanNotificationInfo[] {
102 new MBeanNotificationInfo(
103 notifications,
104 Notification.class.getName(),
105 NOTIF_INFO_DESCRIPTION )
106 };
107
108 /** expected MBeanInfo */
109 private MBeanInfo mbix =
110 new MBeanInfo( "classname", "description", aI, cI, oI, nI );
111
112 /**
113 * test signaturesEqual()
114 */
115 public void testSignaturesEqual() {
116 final String sig1[] = new String[] { "a", "b" };
117 final String sig2[] = new String[] { "a", "c" };
118
119 assertTrue( MBeanUtil.signaturesEqual( null, null ) );
120 assertFalse( MBeanUtil.signaturesEqual( sig1, null ) );
121 assertFalse( MBeanUtil.signaturesEqual( null, sig1 ) );
122 assertTrue( MBeanUtil.signaturesEqual( sig1, sig1 ) );
123 assertFalse( MBeanUtil.signaturesEqual( sig1, sig2 ) );
124
125 }
126
127 /**
128 * test mergeMBeanInfo()
129 */
130 public void testMergeMBeanInfo() {
131 final String CLASSNAME = "c";
132 final String DESCRIPTION = "d";
133
134 MBeanInfo mbi;
135
136 mbi = MBeanUtil.mergeMBeanInfo( CLASSNAME, DESCRIPTION, null, null );
137 assertEquals( CLASSNAME, mbi.getClassName() );
138 assertEquals( DESCRIPTION, mbi.getDescription() );
139 assertEquals( 0, mbi.getAttributes().length );
140 assertEquals( 0, mbi.getConstructors().length );
141 assertEquals( 0, mbi.getOperations().length );
142 assertEquals( 0, mbi.getNotifications().length );
143
144 mbi = MBeanUtil.mergeMBeanInfo( CLASSNAME, DESCRIPTION, null, mbix );
145 assertEquals( CLASSNAME, mbi.getClassName() );
146 assertEquals( DESCRIPTION, mbi.getDescription() );
147 assertTrue( Arrays.equals( mbi.getAttributes(), mbix.getAttributes() ) );
148 assertTrue( Arrays.equals( mbi.getConstructors(), mbix.getConstructors() ) );
149 assertTrue( Arrays.equals( mbi.getOperations(), mbix.getOperations() ) );
150 assertTrue( Arrays.equals( mbi.getNotifications(), mbix.getNotifications() ) );
151
152 mbi = MBeanUtil.mergeMBeanInfo( CLASSNAME, DESCRIPTION, mbix, null );
153 assertEquals( CLASSNAME, mbi.getClassName() );
154 assertEquals( DESCRIPTION, mbi.getDescription() );
155 assertTrue( Arrays.equals( mbi.getAttributes(), mbix.getAttributes() ) );
156 assertTrue( Arrays.equals( mbi.getConstructors(), mbix.getConstructors() ) );
157 assertTrue( Arrays.equals( mbi.getOperations(), mbix.getOperations() ) );
158 assertTrue( Arrays.equals( mbi.getNotifications(), mbix.getNotifications() ) );
159
160 }
161
162 /**
163 * test MBeanUtil.mBeanHasOper()
164 */
165 public void testMBeanHasOper() {
166 final String sig[] = new String[] { "bar", "quux" };
167 assertFalse( MBeanUtil.mBeanHasOper( mbix, OPER_FOO_NAME, sig ) );
168 }
169
170 // suite
171
172 /**
173 * return the implicit suite of tests
174 * @return the implicit suite of tests
175 */
176 public static Test suite() {
177 return new TestSuite(
178 MBeanUtilTest.class,
179 JadeMXSuiteTest.nameWithClass( MBeanUtilTest.class,
180 "testing MBeanUtil: MBean utilities") );
181 }
182
183
184 }