KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > test > javax > management > remote > JMXConnectorInvocationTestCase


1 /*
2  * Copyright (C) The MX4J Contributors.
3  * All rights reserved.
4  *
5  * This software is distributed under the terms of the MX4J License version 1.0.
6  * See the terms of the MX4J License in the documentation provided with this software.
7  */

8
9 package test.javax.management.remote;
10
11 import java.io.IOException JavaDoc;
12 import java.net.MalformedURLException JavaDoc;
13 import java.security.AccessController JavaDoc;
14 import java.util.Collections JavaDoc;
15 import java.util.HashSet JavaDoc;
16 import java.util.Map JavaDoc;
17 import java.util.Set JavaDoc;
18 import javax.management.Attribute JavaDoc;
19 import javax.management.AttributeList JavaDoc;
20 import javax.management.AttributeNotFoundException JavaDoc;
21 import javax.management.InstanceNotFoundException JavaDoc;
22 import javax.management.MBeanException JavaDoc;
23 import javax.management.MBeanInfo JavaDoc;
24 import javax.management.MBeanServer JavaDoc;
25 import javax.management.MBeanServerConnection JavaDoc;
26 import javax.management.MBeanServerFactory JavaDoc;
27 import javax.management.ObjectInstance JavaDoc;
28 import javax.management.ObjectName JavaDoc;
29 import javax.management.RuntimeMBeanException JavaDoc;
30 import javax.management.remote.JMXAuthenticator JavaDoc;
31 import javax.management.remote.JMXConnector JavaDoc;
32 import javax.management.remote.JMXConnectorFactory JavaDoc;
33 import javax.management.remote.JMXConnectorServer JavaDoc;
34 import javax.management.remote.JMXConnectorServerFactory JavaDoc;
35 import javax.management.remote.JMXPrincipal JavaDoc;
36 import javax.management.remote.JMXServiceURL JavaDoc;
37 import javax.security.auth.Subject JavaDoc;
38
39 import test.MX4JTestCase;
40
41 /**
42  * @version $Revision: 1.7 $
43  */

44 public abstract class JMXConnectorInvocationTestCase extends MX4JTestCase
45 {
46    private JMXConnectorServer JavaDoc connectorServer;
47
48    public JMXConnectorInvocationTestCase(String JavaDoc name)
49    {
50       super(name);
51    }
52
53    public abstract JMXServiceURL JavaDoc createJMXConnectorServerAddress() throws MalformedURLException JavaDoc;
54
55    public abstract Map JavaDoc getEnvironment();
56
57    private MBeanServerConnection JavaDoc getMBeanServerConnection(MBeanServer JavaDoc server) throws IOException JavaDoc
58    {
59       JMXServiceURL JavaDoc url = createJMXConnectorServerAddress();
60       connectorServer = JMXConnectorServerFactory.newJMXConnectorServer(url, getEnvironment(), server);
61       connectorServer.start();
62       sleep(5000);
63       JMXConnector JavaDoc connector = JMXConnectorFactory.connect(connectorServer.getAddress(), getEnvironment());
64       return connector.getMBeanServerConnection();
65    }
66
67    protected void tearDown() throws Exception JavaDoc
68    {
69       if (connectorServer != null) connectorServer.stop();
70       sleep(5000);
71    }
72
73    public void testCallToMBeanServerWithAttributeNotFoundException() throws Exception JavaDoc
74    {
75       MBeanServerConnection JavaDoc mbsc = getMBeanServerConnection(newMBeanServer());
76       try
77       {
78          // The attribute does not exist
79
mbsc.getAttribute(new ObjectName JavaDoc("JMImplementation:type=MBeanServerDelegate"), "dummy");
80          fail();
81       }
82       catch (AttributeNotFoundException JavaDoc e)
83       {
84       }
85    }
86
87    public void testCallToMBeanServerWithInstanceNotFoundException() throws Exception JavaDoc
88    {
89       MBeanServerConnection JavaDoc mbsc = getMBeanServerConnection(newMBeanServer());
90       try
91       {
92          // The mbean does not exist
93
mbsc.getAttribute(new ObjectName JavaDoc(":type=dummy"), "ImplementationVersion");
94          fail();
95       }
96       catch (InstanceNotFoundException JavaDoc x)
97       {
98       }
99    }
100
101    public void testCreateMBeanWith3Params() throws Exception JavaDoc
102    {
103       MBeanServerConnection JavaDoc mbsc = getMBeanServerConnection(newMBeanServer());
104       ObjectName JavaDoc name = ObjectName.getInstance("", "test", "invocation");
105       ObjectInstance JavaDoc instance = mbsc.createMBean(Support.class.getName(), name, null);
106       assertNotNull(instance);
107    }
108
109    public void testCreateMBeanWith5Params() throws Exception JavaDoc
110    {
111       MBeanServerConnection JavaDoc mbsc = getMBeanServerConnection(newMBeanServer());
112       String JavaDoc value = "mx4j";
113       ObjectName JavaDoc name = ObjectName.getInstance("", "test", "invocation");
114       ObjectInstance JavaDoc instance = mbsc.createMBean(Support.class.getName(), name, null, new Object JavaDoc[]{value}, new String JavaDoc[]{String JavaDoc.class.getName()});
115       assertNotNull(instance);
116
117       // Be sure the argument arrived to the MBean
118
String JavaDoc result = (String JavaDoc)mbsc.getAttribute(name, "Name");
119       assertEquals(result, value);
120    }
121
122    public void testGetAttribute() throws Exception JavaDoc
123    {
124       MBeanServerConnection JavaDoc mbsc = getMBeanServerConnection(newMBeanServer());
125       String JavaDoc value = "mx4j";
126       ObjectName JavaDoc name = ObjectName.getInstance("", "test", "invocation");
127       ObjectInstance JavaDoc instance = mbsc.createMBean(Support.class.getName(), name, null, new Object JavaDoc[]{value}, new String JavaDoc[]{String JavaDoc.class.getName()});
128       assertNotNull(instance);
129
130       // Be sure the argument arrived to the MBean
131
String JavaDoc result = (String JavaDoc)mbsc.getAttribute(name, "Name");
132       assertEquals(result, value);
133    }
134
135    public void testGetAttributes() throws Exception JavaDoc
136    {
137       MBeanServerConnection JavaDoc mbsc = getMBeanServerConnection(newMBeanServer());
138       String JavaDoc value = "mx4j";
139       ObjectName JavaDoc name = ObjectName.getInstance("", "test", "invocation");
140       ObjectInstance JavaDoc instance = mbsc.createMBean(Support.class.getName(), name, null, new Object JavaDoc[]{value}, new String JavaDoc[]{String JavaDoc.class.getName()});
141       assertNotNull(instance);
142
143       // Be sure the argument arrived to the MBean
144
String JavaDoc attribute = "Name";
145       String JavaDoc[] attributes = new String JavaDoc[]{attribute};
146       AttributeList JavaDoc result = mbsc.getAttributes(name, attributes);
147       assertNotNull(result);
148       assertEquals(result.size(), attributes.length);
149       assertEquals(((Attribute JavaDoc)result.get(0)).getName(), attribute);
150       assertEquals(((Attribute JavaDoc)result.get(0)).getValue(), value);
151    }
152
153    public void testGetDefaultDomain() throws Exception JavaDoc
154    {
155       String JavaDoc domain = "DOMAIN";
156       MBeanServer JavaDoc server = MBeanServerFactory.newMBeanServer(domain);
157       MBeanServerConnection JavaDoc mbsc = getMBeanServerConnection(server);
158
159       String JavaDoc defaultDomain = mbsc.getDefaultDomain();
160       assertEquals(defaultDomain, domain);
161    }
162
163    public void testGetDomains() throws Exception JavaDoc
164    {
165       MBeanServerConnection JavaDoc mbsc = getMBeanServerConnection(newMBeanServer());
166
167       String JavaDoc[] domains = mbsc.getDomains();
168       if (domains.length < 1) fail();
169    }
170
171    public void testGetMBeanCount() throws Exception JavaDoc
172    {
173       MBeanServerConnection JavaDoc mbsc = getMBeanServerConnection(newMBeanServer());
174
175       Integer JavaDoc count = mbsc.getMBeanCount();
176       if (count.intValue() < 1) fail();
177    }
178
179    public void testGetMBeanInfo() throws Exception JavaDoc
180    {
181       MBeanServerConnection JavaDoc mbsc = getMBeanServerConnection(newMBeanServer());
182
183       ObjectName JavaDoc name = ObjectName.getInstance("JMImplementation", "type", "MBeanServerDelegate");
184       MBeanInfo JavaDoc info = mbsc.getMBeanInfo(name);
185       assertNotNull(info);
186       if (info.getAttributes().length < 1) fail();
187    }
188
189    public void testGetObjectInstance() throws Exception JavaDoc
190    {
191       MBeanServerConnection JavaDoc mbsc = getMBeanServerConnection(newMBeanServer());
192       ObjectName JavaDoc name = ObjectName.getInstance("", "test", "invocation");
193       ObjectInstance JavaDoc instance = mbsc.createMBean(Support.class.getName(), name, null);
194       assertNotNull(instance);
195
196       ObjectInstance JavaDoc result = mbsc.getObjectInstance(name);
197       assertNotNull(result);
198       assertEquals(result, instance);
199    }
200
201    public void testInvoke() throws Exception JavaDoc
202    {
203       MBeanServerConnection JavaDoc mbsc = getMBeanServerConnection(newMBeanServer());
204       ObjectName JavaDoc name = ObjectName.getInstance("", "test", "invocation");
205       ObjectInstance JavaDoc instance = mbsc.createMBean(Support.class.getName(), name, null);
206       assertNotNull(instance);
207
208       String JavaDoc value = "value";
209       String JavaDoc result = (String JavaDoc)mbsc.invoke(name, "echo", new Object JavaDoc[]{value}, new String JavaDoc[]{String JavaDoc.class.getName()});
210       assertNotNull(result);
211       assertEquals(result, value);
212    }
213
214    public void testInvokeThrowsCustomException() throws Exception JavaDoc
215    {
216       MBeanServerConnection JavaDoc mbsc = getMBeanServerConnection(newMBeanServer());
217       ObjectName JavaDoc name = ObjectName.getInstance("", "test", "invocation");
218       ObjectInstance JavaDoc instance = mbsc.createMBean(Support.class.getName(), name, null);
219       assertNotNull(instance);
220
221       try
222       {
223          mbsc.invoke(name, "throwCustomException", null, null);
224       }
225       catch (MBeanException JavaDoc x)
226       {
227          Exception JavaDoc xx = x.getTargetException();
228          if (xx != null && xx.getClass() != SupportException.class) fail();
229       }
230    }
231
232    public void testInvokeThrowsRuntimeException() throws Exception JavaDoc
233    {
234       MBeanServerConnection JavaDoc mbsc = getMBeanServerConnection(newMBeanServer());
235       ObjectName JavaDoc name = ObjectName.getInstance("", "test", "invocation");
236       ObjectInstance JavaDoc instance = mbsc.createMBean(Support.class.getName(), name, null);
237       assertNotNull(instance);
238
239       try
240       {
241          mbsc.invoke(name, "throwRuntimeException", null, null);
242       }
243       catch (RuntimeMBeanException JavaDoc x)
244       {
245          Exception JavaDoc xx = x.getTargetException();
246          if (xx != null && xx.getClass() != IllegalArgumentException JavaDoc.class) fail();
247       }
248    }
249
250    public void testIsInstanceOf() throws Exception JavaDoc
251    {
252       MBeanServerConnection JavaDoc mbsc = getMBeanServerConnection(newMBeanServer());
253       ObjectName JavaDoc name = ObjectName.getInstance("", "test", "invocation");
254       ObjectInstance JavaDoc instance = mbsc.createMBean(Support.class.getName(), name, null);
255       assertNotNull(instance);
256
257       boolean isInstanceOf = mbsc.isInstanceOf(name, Support.class.getName());
258       if (!isInstanceOf) fail("Class");
259
260       isInstanceOf = mbsc.isInstanceOf(name, SupportMBean.class.getName());
261       if (!isInstanceOf) fail("Interface");
262    }
263
264    public void testIsRegistered() throws Exception JavaDoc
265    {
266       MBeanServerConnection JavaDoc mbsc = getMBeanServerConnection(newMBeanServer());
267       ObjectName JavaDoc name = ObjectName.getInstance("", "test", "invocation");
268       ObjectInstance JavaDoc instance = mbsc.createMBean(Support.class.getName(), name, null);
269       assertNotNull(instance);
270
271       boolean isRegistered = mbsc.isRegistered(name);
272       if (!isRegistered) fail();
273    }
274
275    public void testQueryMBeansNullNull() throws Exception JavaDoc
276    {
277       MBeanServerConnection JavaDoc mbsc = getMBeanServerConnection(newMBeanServer());
278
279       Set JavaDoc mbeans = mbsc.queryMBeans(null, null);
280       assertNotNull(mbeans);
281       if (mbeans.size() < 1) fail();
282    }
283
284    public void testQueryMBeansObjectNameNull() throws Exception JavaDoc
285    {
286       MBeanServerConnection JavaDoc mbsc = getMBeanServerConnection(newMBeanServer());
287
288       Set JavaDoc mbeans = mbsc.queryMBeans(ObjectName.getInstance("JMImplementation:*"), null);
289       assertNotNull(mbeans);
290       if (mbeans.size() < 1) fail();
291    }
292
293    public void testQueryMBeansObjectNameQueryExp() throws Exception JavaDoc
294    {
295       MBeanServerConnection JavaDoc mbsc = getMBeanServerConnection(newMBeanServer());
296
297       Set JavaDoc mbeans = mbsc.queryMBeans(ObjectName.getInstance("JMImplementation:*"), new ObjectName JavaDoc("*:type=MBeanServerDelegate"));
298       assertNotNull(mbeans);
299       if (mbeans.size() != 1) fail();
300    }
301
302    public void testSetAttribute() throws Exception JavaDoc
303    {
304       MBeanServerConnection JavaDoc mbsc = getMBeanServerConnection(newMBeanServer());
305       ObjectName JavaDoc name = ObjectName.getInstance("", "test", "invocation");
306       ObjectInstance JavaDoc instance = mbsc.createMBean(Support.class.getName(), name, null);
307       assertNotNull(instance);
308
309       String JavaDoc attribute = "Name";
310       String JavaDoc value = "mx4j";
311       mbsc.setAttribute(name, new Attribute JavaDoc(attribute, value));
312
313       String JavaDoc result = (String JavaDoc)mbsc.getAttribute(name, attribute);
314       assertEquals(result, value);
315    }
316
317    public void testSetAttributes() throws Exception JavaDoc
318    {
319       MBeanServerConnection JavaDoc mbsc = getMBeanServerConnection(newMBeanServer());
320       ObjectName JavaDoc name = ObjectName.getInstance("", "test", "invocation");
321       ObjectInstance JavaDoc instance = mbsc.createMBean(Support.class.getName(), name, null);
322       assertNotNull(instance);
323
324       String JavaDoc attribute = "Name";
325       String JavaDoc value = "mx4j";
326       AttributeList JavaDoc attributes = new AttributeList JavaDoc();
327       attributes.add(new Attribute JavaDoc(attribute, value));
328       AttributeList JavaDoc result = mbsc.setAttributes(name, attributes);
329       assertNotNull(result);
330       assertEquals(result, attributes);
331    }
332
333    public void testUnregisterMBean() throws Exception JavaDoc
334    {
335       MBeanServerConnection JavaDoc mbsc = getMBeanServerConnection(newMBeanServer());
336       ObjectName JavaDoc name = ObjectName.getInstance("", "test", "invocation");
337       ObjectInstance JavaDoc instance = mbsc.createMBean(Support.class.getName(), name, null);
338       assertNotNull(instance);
339
340       mbsc.unregisterMBean(name);
341       if (mbsc.isRegistered(name)) fail();
342    }
343
344    public void testAuthenticatedInvoke() throws Exception JavaDoc
345    {
346       final String JavaDoc principalName = "authenticatedPrincipal";
347
348       JMXServiceURL JavaDoc url = createJMXConnectorServerAddress();
349       Map JavaDoc serverEnv = getEnvironment();
350       serverEnv.put(JMXConnectorServer.AUTHENTICATOR, new JMXAuthenticator JavaDoc()
351       {
352          public Subject JavaDoc authenticate(Object JavaDoc credentials) throws SecurityException JavaDoc
353          {
354             Set JavaDoc principals = new HashSet JavaDoc();
355             principals.add(new JMXPrincipal JavaDoc(principalName));
356             return new Subject JavaDoc(true, principals, Collections.EMPTY_SET, Collections.EMPTY_SET);
357          }
358       });
359
360       JMXConnectorServer JavaDoc cntorServer = null;
361       try
362       {
363          cntorServer = JMXConnectorServerFactory.newJMXConnectorServer(url, serverEnv, newMBeanServer());
364          cntorServer.start();
365
366          Map JavaDoc clientEnv = getEnvironment();
367          clientEnv.put(JMXConnector.CREDENTIALS, new String JavaDoc[0]);
368
369          JMXConnector JavaDoc cntor = JMXConnectorFactory.connect(cntorServer.getAddress(), clientEnv);
370          MBeanServerConnection JavaDoc mbsc = cntor.getMBeanServerConnection();
371
372          ObjectName JavaDoc name = ObjectName.getInstance("", "test", "invocation");
373          ObjectInstance JavaDoc instance = mbsc.createMBean(Support.class.getName(), name, null);
374          assertNotNull(instance);
375
376          Boolean JavaDoc result = (Boolean JavaDoc)mbsc.invoke(name, "authenticated", new Object JavaDoc[]{principalName}, new String JavaDoc[]{String JavaDoc.class.getName()});
377          assertTrue(result.booleanValue());
378       }
379       finally
380       {
381          if (cntorServer != null) cntorServer.stop();
382       }
383    }
384
385    public void testDelegatedInvoke() throws Exception JavaDoc
386    {
387       JMXServiceURL JavaDoc url = createJMXConnectorServerAddress();
388       Map JavaDoc serverEnv = getEnvironment();
389       serverEnv.put(JMXConnectorServer.AUTHENTICATOR, new JMXAuthenticator JavaDoc()
390       {
391          public Subject JavaDoc authenticate(Object JavaDoc credentials) throws SecurityException JavaDoc
392          {
393             Set JavaDoc principals = new HashSet JavaDoc();
394             principals.add(new JMXPrincipal JavaDoc("authenticatedPrincipal"));
395             return new Subject JavaDoc(true, principals, Collections.EMPTY_SET, Collections.EMPTY_SET);
396          }
397       });
398       JMXConnectorServer JavaDoc cntorServer = null;
399       try
400       {
401          cntorServer = JMXConnectorServerFactory.newJMXConnectorServer(url, serverEnv, newMBeanServer());
402          cntorServer.start();
403
404          Map JavaDoc clientEnv = getEnvironment();
405          clientEnv.put(JMXConnector.CREDENTIALS, new String JavaDoc[0]);
406
407          JMXConnector JavaDoc cntor = JMXConnectorFactory.connect(cntorServer.getAddress(), clientEnv);
408          Set JavaDoc principals = new HashSet JavaDoc();
409          String JavaDoc delegatedName = "delegatedPrincipal";
410          principals.add(new JMXPrincipal JavaDoc(delegatedName));
411          Subject JavaDoc delegate = new Subject JavaDoc(true, principals, Collections.EMPTY_SET, Collections.EMPTY_SET);
412          MBeanServerConnection JavaDoc mbsc = cntor.getMBeanServerConnection(delegate);
413
414          ObjectName JavaDoc name = ObjectName.getInstance("", "test", "invocation");
415          ObjectInstance JavaDoc instance = mbsc.createMBean(Support.class.getName(), name, null);
416          assertNotNull(instance);
417
418          Boolean JavaDoc result = (Boolean JavaDoc)mbsc.invoke(name, "delegated", new Object JavaDoc[]{delegatedName}, new String JavaDoc[]{String JavaDoc.class.getName()});
419          assertTrue(result.booleanValue());
420       }
421       finally
422       {
423          if (cntorServer != null) cntorServer.stop();
424       }
425    }
426
427    public static class SupportException extends Exception JavaDoc
428    {
429    }
430
431    public interface SupportMBean
432    {
433       public String JavaDoc getName();
434
435       public void setName(String JavaDoc name);
436
437       public void throwCustomException() throws SupportException;
438
439       public void throwRuntimeException() throws IllegalArgumentException JavaDoc;
440
441       public String JavaDoc echo(String JavaDoc argument);
442
443       public boolean authenticated(String JavaDoc name);
444
445       public boolean delegated(String JavaDoc name);
446    }
447
448    public static class Support implements SupportMBean
449    {
450       private String JavaDoc name;
451
452       public Support()
453       {
454       }
455
456       public Support(String JavaDoc name)
457       {
458          this.name = name;
459       }
460
461       public String JavaDoc getName()
462       {
463          return name;
464       }
465
466       public void setName(String JavaDoc name)
467       {
468          this.name = name;
469       }
470
471       public void throwCustomException() throws SupportException
472       {
473          throw new SupportException();
474       }
475
476       public void throwRuntimeException() throws IllegalArgumentException JavaDoc
477       {
478          throw new IllegalArgumentException JavaDoc();
479       }
480
481       public String JavaDoc echo(String JavaDoc argument)
482       {
483          return argument;
484       }
485
486       public boolean authenticated(String JavaDoc name)
487       {
488          Subject JavaDoc subject = Subject.getSubject(AccessController.getContext());
489          if (subject == null) return false;
490          Set JavaDoc principals = subject.getPrincipals();
491          return principals.contains(new JMXPrincipal JavaDoc(name));
492       }
493
494       public boolean delegated(String JavaDoc name)
495       {
496          Subject JavaDoc subject = Subject.getSubject(AccessController.getContext());
497          if (subject == null) return false;
498          Set JavaDoc principals = subject.getPrincipals();
499          return principals.contains(new JMXPrincipal JavaDoc(name));
500       }
501    }
502 }
503
Popular Tags