001 // jademx - JADE management using JMX
002 // Copyright 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.mbean;
019
020 import javax.management.Attribute;
021 import javax.management.AttributeList;
022 import javax.management.MBeanException;
023 import javax.management.MBeanNotificationInfo;
024 import javax.management.MBeanServer;
025 import javax.management.ObjectName;
026 import javax.management.ReflectionException;
027
028 import jade.jademx.JadeMXSuiteTest;
029 import jade.jademx.server.JadeMXServer;
030 import jade.jademx.server.JadeMXServerFactory;
031 import junit.framework.Test;
032 import junit.framework.TestCase;
033 import junit.framework.TestSuite;
034
035 /**
036 * JadeAgent MBean test
037 * @author David Bernstein, <a href="http://www.caboodlenetworks.com"
038 * >Caboodle Networks, Inc.</a>
039 */
040 public class JadeBaseTest extends TestCase {
041
042 ///** test(suite) name */
043 //private static String name =
044 // JadeMXSuiteTest.nameWithClass(
045 // JadePlatformTest.class,
046 // "testing JadeBase: JADE base MBean class");
047
048
049 /** jadeMXServer we're using */
050 private JadeMXServer jadeMXServer = null;
051
052 /** ... */
053 private MBeanServer mBeanServer = null;
054
055 // /** runtime for test use */
056 // private JadeRuntime jadeRuntime = null;
057 //
058 // /** mbean for platform under test */
059 // JadePlatform platformMBean = null;
060
061 ///** resource name for configuration of one empty platform */
062 //private static final String EMPTY_PLATFORM_CONFIG_RESOURCE =
063 // "jade/jademx/config/one-empty-platform.xml";
064 ///** resource name for configuration of two ping agents */
065 //private static final String TWO_PING_CONFIG_RESOURCE =
066 // "jade/jademx/config/two-ping-agents.xml";
067 ///** name for 1st ping agent */
068 //private static final String AGENT_LOCAL_NAME_PINGER1 = "pinger1";
069 ///** name for 2nd ping agent */
070 //private static final String AGENT_LOCAL_NAME_PINGER2 = "pinger2";
071
072 /** instantiated version of JadeBase */
073 private JadeNil jadeNil = null;
074
075 //
076
077 /**
078 * a class for testing bare JadeBAse
079 */
080 private class JadeNil extends JadeBase {
081
082 /**
083 * make a JadeNil
084 * @param jadeFactory jade factory to use
085 * @param name name for MBean
086 */
087 public JadeNil(JadeFactory jadeFactory, String name) {
088 super(jadeFactory, "nil", name);
089 }
090
091 /**
092 * call <code>setNotificationInfo(null)</code>
093 */
094 public void setNullNotificationInfo() {
095 setNotificationInfo(null);
096 }
097 /**
098 * call <code>setNotificationInfo()</code> with empty array
099 */
100 public void setEmptyNotificationInfo() {
101 setNotificationInfo( new MBeanNotificationInfo[0]);
102 }
103 /**
104 * call <code>addNotificationInfo()</code> twice
105 */
106 public void addNullNotificationInfoTwice() {
107 addNotificationInfo( null );
108 addNotificationInfo( null );
109 }
110 }
111
112
113 // tests
114
115
116 /* (non-Javadoc)
117 * @see junit.framework.TestCase#setUp()
118 */
119 protected void setUp() throws Exception {
120 // first get JadeMXServer
121 jadeMXServer = JadeMXServerFactory.jadeMXServerBySysProp();
122 // now get a factory to use
123 JadeFactory jadeFactory =
124 new JadeFactory( jadeMXServer );
125 mBeanServer = jadeMXServer.getMBeanServer();
126 jadeNil = new JadeNil( jadeFactory, "naught");
127 // jadeRuntime = (JadeRuntime)jadeFactory.runtimeInstance();
128 // //JadeMXSuiteTest.listMBeans(mBeanServer, "at end of setUp()");
129 // JadePlatform platformMBeans[] =
130 // jadeRuntime.platformsFromConfigResource(
131 // TWO_PING_CONFIG_RESOURCE );
132 // platformMBean = platformMBeans[0];
133
134 }
135
136
137
138 /* (non-Javadoc)
139 * @see junit.framework.TestCase#tearDown()
140 */
141 protected void tearDown() throws Exception {
142 //JadeMXSuiteTest.listMBeans(mBeanServer,
143 //"at start of JadePlatformTest.tearDown()");
144 // if ( null != jadeRuntime ) {
145 // jadeRuntime.shutdown();
146 // }
147 //JadeMXSuiteTest.listMBeans(mBeanServer,
148 //"at end of JadePlatformTest.tearDown()");
149 }
150
151
152 /**
153 * test <code>JadeBase.preRegister()</code>
154 * @throws JademxException unexpected problems with jademx
155 */
156 public void testJadeBasePreRegister() throws Exception {
157 ObjectName on = jadeNil.preRegister( mBeanServer, null );
158 assertNotNull("null ObjectName from JadeBase.preRegister()",on);
159 }
160
161 /**
162 * exercise <code>JadeBase.setNotificationInfo(null)</code>
163 */
164 public void testJadeBaseSetNullNotificationInfo() {
165 jadeNil.setNullNotificationInfo();
166 }
167
168 /**
169 * exercise <code>JadeBase.setNotificationInfo(null)</code>
170 */
171 public void testJadeBaseSetEmptyNotificationInfo() {
172 jadeNil.setNullNotificationInfo();
173 }
174
175 /**
176 * exercise <code>JadeBase.addNotificationInfo()</code>
177 */
178 public void testJadeBaseAddNullNotificationInfoTwice() {
179 jadeNil.addNullNotificationInfoTwice();
180 }
181
182 /**
183 * try to get non-existent attributes
184 */
185 public void testJadeBaseGetBadAttributes() {
186 try {
187 jadeNil.getAttributes( new String[] {"NoSuchAttr"});
188 fail("didn't get exception looking for non-existent attribute");
189 }
190 catch ( RuntimeException re ) {
191 assertTrue(true);
192 }
193 try {
194 jadeNil.getAttributes(
195 new String[] {JadeBaseMBean.ATTR_TYPE,"NoSuchAttr"});
196 fail("didn't get exception looking for non-existent "+
197 "attribute after existing attribute");
198 }
199 catch ( RuntimeException re ) {
200 assertTrue(true);
201 }
202 }
203
204 /**
205 * test getting mbean name when not registered
206 */
207 public void testJadeBaseUnregisteredToString() {
208 String expectedS = "unregistered jademx nil "+
209 "naught(jade.jademx.mbean.JadeFactory"+
210 "[objectNameDomain=jade,threadGroupName=JADE runtime,"+
211 "runtimeName=default])";
212 String s = jadeNil.toString();
213 assertEquals( "unexpected result from JadeBase.toString(), expected \""+
214 expectedS+"\" but got \""+s+"\"",
215 expectedS, s );
216 }
217
218 /**
219 * try getting empty attribute list
220 */
221 public void testJadeBaseGetNoAttributes() {
222 AttributeList aList = jadeNil.getAttributes( new String[0]);
223 assertEquals("expected no attributes but got "+aList.size(),
224 0,aList.size());
225 }
226
227 /**
228 * try to set non-existent attributes
229 */
230 public void testJadeBaseSetBadAttributes() {
231 try {
232 AttributeList aList = new AttributeList( 1 );
233 aList.add( new Attribute("foo","bar"));
234 jadeNil.setAttributes( aList );
235 fail("didn't get exception trying to set non-existent attribute");
236 }
237 catch ( RuntimeException re ) {
238 assertTrue(true);
239 }
240 }
241
242 /**
243 * exercise <code>JadeBase.invoke()</code>
244 */
245 public void testJadeBaseInvoke() throws MBeanException {
246 try {
247 jadeNil.invoke("noSuchAction",new Object[0],new String[0]);
248 fail("didn't get exception invoking non-existent operation");
249 }
250 catch (ReflectionException e) {
251 assertTrue(true);
252 }
253 }
254
255 // suite
256
257 /**
258 * return the implicit suite of tests
259 * @return the implicit suite of tests
260 */
261 public static Test suite() {
262 return new TestSuite(
263 JadeBaseTest.class,
264 JadeMXSuiteTest.nameWithClass( JadeBaseTest.class,
265 "testing JadeBase: JADE base MBean class") );
266 }
267
268
269
270 }