View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
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          // to test the connection, access an MBean that is present by default
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  }