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.agent; 019 020 import jade.jademx.JadeMXSuiteTest; 021 import jade.jademx.config.jademx.onto.ConfigAgentSpecifier; 022 import jade.jademx.config.jademx.onto.ConfigPlatform; 023 import jade.jademx.config.jademx.onto.ConfigRuntime; 024 import jade.jademx.config.jademx.onto.JademxConfig; 025 import jade.jademx.mbean.JadeFactory; 026 import jade.jademx.mbean.JadeRuntimeMBean; 027 import jade.jademx.server.JadeMXServer; 028 import jade.jademx.server.JadeMXServerFactory; 029 import jade.jademx.util.ThrowableUtil; 030 import jade.util.Logger; 031 032 import javax.management.MBeanServer; 033 import javax.management.ObjectName; 034 035 import junit.framework.Test; 036 import junit.framework.TestCase; 037 import junit.framework.TestSuite; 038 039 /** 040 * JademxAgentProxy test 041 * @author David Bernstein, <a href="http://www.caboodlenetworks.com" 042 * >Caboodle Networks, Inc.</a> 043 */ 044 public class JademxAgentProxyTest extends TestCase { 045 046 /** my logger */ 047 private final Logger logger = 048 Logger.getMyLogger(JademxAgentProxyTest.class.getName()); 049 050 // original inject message before AIDs localized 051 // "(REQUEST"+ 052 // " :sender ( agent-identifier :name pinger@diamond:1099/JADE )"+ 053 // " :receiver (set ( agent-identifier :name pingee@diamond:1099/JADE ) )"+ 054 // " :content \"((action (agent-identifier :name pingee@diamond:1099/JADE) (ping)))\" "+ 055 // " :reply-with ping1 :language fipa-sl :ontology ping :protocol fipa-request"+ 056 // " :conversation-id ping-conv-1127942689278-18131271 )"; 057 058 // /** reply-id used in message to inject */ 059 // private static final String INJECT_REPLY_ID = "pinger@diamond:1099/JADE1127942689278"; 060 // /** AID for pingee agent in message to inject */ 061 // private static final String PINGEE_INJECT_AID = "pingee@diamond:1099/JADE"; 062 // /** AID for pinger agent in message to inject */ 063 // private static final String PINGER_INJECT_AID = "pinger@diamond:1099/JADE"; 064 /** local name for pingee agent */ 065 private static final String PINGEE_LOCAL_NAME = "pingee"; 066 067 // /** message to inject */ 068 // private final static String injectMsg = 069 // "(REQUEST"+ 070 // " :sender ( agent-identifier :name pinger )"+ 071 // " :receiver (set ( agent-identifier :name pingee ) )"+ 072 // " :reply-to (set ( agent-identifier :name pinger ) )"+ 073 // " :content \"((action (agent-identifier :name pingee@diamond:1099/JADE) (ping)))\" "+ 074 // " :reply-with ping1 :language fipa-sl :ontology ping :protocol fipa-request"+ 075 // " :conversation-id ping-conv-1127942689278-18131271 )"; 076 // 077 // /** message to expect */ 078 // private final static String expectMsg = 079 // "(INFORM"+ 080 // " :sender ( agent-identifier :name pingee@diamond:1099/JADE )"+ 081 // " :receiver (set ( agent-identifier :name pinger@diamond:1099/JADE ) )"+ 082 // " :content \"((result (action (agent-identifier :name pingee@diamond:1099/JADE) (ping)) pong))\" "+ 083 // " :reply-with pinger@diamond:1099/JADE1127942689278 :in-reply-to ping1 "+ 084 // ":language fipa-sl :ontology ping :protocol fipa-request"+ 085 // " :conversation-id ping-conv-1127942689278-18131271 )"; 086 087 // SETUP/TEARDOWN 088 089 /** MBeanServer being used */ 090 private MBeanServer mBeanServer = null; 091 /** created JadeRuntimeMBean */ 092 private JadeRuntimeMBean runtime = null; 093 /** ObjectName for JadeRuntimeMBean */ 094 private ObjectName runtimeON = null; 095 096 097 /* (non-Javadoc) 098 * @see junit.framework.TestCase#setUp() 099 */ 100 protected void setUp() throws Exception { 101 // create a jademx config of one ping agent 102 JademxConfig jademxConfig = buildPingerPingeeAgentCfg(); 103 // start the configuration 104 // first get JadeMXServer 105 JadeMXServer jadeMXServer = null; 106 try { 107 jadeMXServer = JadeMXServerFactory.jadeMXServerBySysProp(); 108 } 109 catch (Exception e) { 110 fail(ThrowableUtil.errMsg("problem getting jademx server",e)); 111 } 112 mBeanServer = jadeMXServer.getMBeanServer(); 113 // now get a factory to use 114 JadeFactory jadeFactory = new JadeFactory( jadeMXServer ); 115 // instantiate the configuration 116 try { 117 runtime = jadeFactory.instantiateRuntime( jademxConfig ); 118 } 119 catch (Exception e) { 120 fail(ThrowableUtil.errMsg("problem instantiating configuration",e)); 121 } 122 // get ObjectName for runtime 123 runtimeON = runtime.getObjectName(); 124 logger.log( Logger.FINE,"runtimeON:"+runtimeON); 125 } 126 127 /* (non-Javadoc) 128 * @see junit.framework.TestCase#tearDown() 129 */ 130 protected void tearDown() throws Exception { 131 // shutdown the configuration 132 try { 133 mBeanServer.invoke( runtimeON, 134 JadeRuntimeMBean.OPER_SHUTDOWN, 135 new Object[]{}, 136 JadeRuntimeMBean.OPER_SHUTDOWN_SIGNATURE ); 137 } 138 catch ( Exception e ) { 139 fail(ThrowableUtil.errMsg("problem shutting down JADE runtime", e)); 140 } 141 } 142 143 /** 144 * make a configuration for testing use programmatically 145 */ 146 private JademxConfig buildPingerPingeeAgentCfg() { 147 JademxConfig jademxConfig = new JademxConfig(); 148 ConfigRuntime runtime = new ConfigRuntime(); 149 jademxConfig.addRuntime( runtime ); 150 ConfigPlatform platform = new ConfigPlatform(); 151 runtime.addPlatform( platform ); 152 platform.addOption( "port=1917" ); 153 platform.addOption( "nomtp=true" ); 154 ConfigAgentSpecifier agentSpecifier; 155 agentSpecifier = 156 new ConfigAgentSpecifier( 157 "pinger", 158 "jade.jademx.agent.JademxNopAgent" ); 159 platform.addAgentSpecifier( agentSpecifier ); 160 agentSpecifier = 161 new ConfigAgentSpecifier( 162 PINGEE_LOCAL_NAME, 163 "jade.jademx.agent.JademxPingAgent" ); 164 platform.addAgentSpecifier( agentSpecifier ); 165 logger.log( Logger.FINE,"jademxconfig:"+jademxConfig); 166 return jademxConfig; 167 } 168 169 // TESTS 170 171 /** 172 * test null ObjectName to constructor 173 */ 174 public void testConstructorNullObjectName() { 175 try { 176 new JademxPingAgentProxy( null, mBeanServer ); 177 fail("missed null object name to proxy constructor"); 178 } 179 catch ( IllegalArgumentException iae ) { 180 assertTrue(true); 181 } 182 } 183 184 185 /** 186 * test null MBeanServer to constructor 187 */ 188 public void testConstructorNullMBeanServer() { 189 ObjectName on = null; 190 try { 191 on = new ObjectName("x:foo=bar"); 192 } 193 catch ( Exception e ) { 194 fail(ThrowableUtil.errMsg("failed to create ObjectName", e )); 195 } 196 try { 197 new JademxPingAgentProxy( on, null ); 198 fail("missed null MBean server to proxy constructor"); 199 } 200 catch ( IllegalArgumentException iae ) { 201 assertTrue(true); 202 } 203 } 204 205 206 // suite 207 208 /** 209 * return the implicit suite of tests 210 * @return the implicit suite of tests 211 */ 212 public static Test suite() { 213 return new TestSuite( 214 JademxAgentProxyTest.class, 215 JadeMXSuiteTest.nameWithClass( JademxAgentProxyTest.class, 216 "testing JademxAgentProxy: proxy class for JademxAgent") ); 217 } 218 219 220 221 }