1
2
3
4
5
6
7 package org.mule.management.config;
8
9 import org.mule.tck.junit4.FunctionalTestCase;
10 import org.mule.tck.junit4.rule.DynamicPort;
11
12 import java.io.IOException;
13 import java.net.MalformedURLException;
14 import java.util.Collections;
15 import java.util.Map;
16
17 import javax.management.MBeanServerConnection;
18 import javax.management.ObjectInstance;
19 import javax.management.ObjectName;
20 import javax.management.remote.JMXConnector;
21 import javax.management.remote.JMXConnectorFactory;
22 import javax.management.remote.JMXServiceURL;
23
24 import org.junit.Rule;
25 import org.junit.Test;
26
27 import static org.junit.Assert.assertNotNull;
28
29 public class JmxAgentAuthenticationTestCase extends FunctionalTestCase
30 {
31
32 @Rule
33 public DynamicPort dynamicPort = new DynamicPort("port1");
34
35 @Override
36 protected String getConfigResources()
37 {
38 return "jmx-authentication-config.xml";
39 }
40
41 @Test(expected = SecurityException.class)
42 public void testAccessJmxServerWithoutCredentials() throws Exception
43 {
44 JMXServiceURL serviceUrl = createServiceUrl();
45 JMXConnectorFactory.connect(serviceUrl);
46 }
47
48 @Test
49 public void testAccessJmxServerWithValidCredentials() throws Exception
50 {
51 JMXConnector connector = connectToJmx("jsmith", "foo");
52
53
54 MBeanServerConnection connection = connector.getMBeanServerConnection();
55 ObjectName name = new ObjectName("java.lang:type=Runtime");
56 ObjectInstance instance = connection.getObjectInstance(name);
57 assertNotNull(instance);
58 }
59
60 @Test(expected = SecurityException.class)
61 public void testAccessJmxServerWithInvalidCredentials() throws Exception
62 {
63 connectToJmx("invalid", "user");
64 }
65
66 private JMXConnector connectToJmx(String user, String password) throws IOException
67 {
68 JMXServiceURL serviceUrl = createServiceUrl();
69
70 String[] authToken = new String[] {user, password};
71 Map<String, ?> environment = Collections.singletonMap(JMXConnector.CREDENTIALS, authToken);
72
73 return JMXConnectorFactory.connect(serviceUrl, environment);
74 }
75
76 private JMXServiceURL createServiceUrl() throws MalformedURLException
77 {
78 String url = String.format("service:jmx:rmi:///jndi/rmi://localhost:%d/server",
79 dynamicPort.getNumber());
80 return new JMXServiceURL(url);
81 }
82 }