| | |
| | | */ |
| | | package org.opends.server.protocols.jmx; |
| | | |
| | | |
| | | |
| | | import java.io.File; |
| | | import java.io.FileInputStream; |
| | | import java.io.IOException; |
| | |
| | | import javax.net.ssl.TrustManagerFactory; |
| | | |
| | | import org.opends.server.TestCaseUtils; |
| | | import org.opends.server.admin.server.AdminTestCaseUtils; |
| | | import org.opends.server.admin.std.meta.JMXConnectionHandlerCfgDefn; |
| | | import org.opends.server.admin.std.server.JMXConnectionHandlerCfg; |
| | | import org.opends.server.api.ConnectionHandler; |
| | | import org.opends.server.config.ConfigEntry; |
| | | import org.opends.server.config.ConfigException; |
| | | import org.opends.server.config.JMXMBean; |
| | | import org.opends.server.core.AddOperation; |
| | | import org.opends.server.core.DeleteOperation; |
| | |
| | | import org.testng.annotations.Test; |
| | | import static org.testng.Assert.*; |
| | | |
| | | |
| | | |
| | | /** |
| | | * A simple test for : |
| | | * - JMX connection establishment withou using SSL |
| | | * - JMX get and set |
| | | * - configuration change |
| | | * A simple test for : - JMX connection establishment withou using SSL - |
| | | * JMX get and set - configuration change |
| | | */ |
| | | public class JmxConnectTest extends JmxTestCase |
| | | { |
| | | public class JmxConnectTest extends JmxTestCase { |
| | | |
| | | /** |
| | | * Set up the environment for performing the tests in this suite. |
| | | * |
| | |
| | | * If the environment could not be set up. |
| | | */ |
| | | @BeforeClass |
| | | public void setUp() throws Exception |
| | | { |
| | | public void setUp() throws Exception { |
| | | // Make sure that the server is up and running. |
| | | TestCaseUtils.startServer(); |
| | | synchronized (this) |
| | | { |
| | | this.wait(500); |
| | | synchronized (this) { |
| | | this.wait(500); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Build data for the simpleConnect test. |
| | | * |
| | | * @return the data. |
| | | */ |
| | | @DataProvider(name="simpleConnect") |
| | | Object[][] createCredentials() |
| | | { |
| | | @DataProvider(name = "simpleConnect") |
| | | Object[][] createCredentials() { |
| | | return new Object[][] { |
| | | {"cn=directory manager", "password", true}, |
| | | {"cn=directory manager", "wrongPassword", false}, |
| | | {"cn=wrong user", "password", false}, |
| | | {"invalid DN", "password", false}, |
| | | {"cn=directory manager", null, false}, |
| | | {null, "password", false}, |
| | | {null, null, false}, |
| | | }; |
| | | { "cn=directory manager", "password", true }, |
| | | { "cn=directory manager", "wrongPassword", false }, |
| | | { "cn=wrong user", "password", false }, |
| | | { "invalid DN", "password", false }, |
| | | { "cn=directory manager", null, false }, |
| | | { null, "password", false }, { null, null, false }, }; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Check that simple (no SSL) connections to the JMX service are |
| | | * accepted when the given |
| | | * credentials are OK and refused when the credentials are invalid. |
| | | * |
| | | * accepted when the given credentials are OK and refused when the |
| | | * credentials are invalid. |
| | | */ |
| | | @Test(enabled = true, dataProvider="simpleConnect") |
| | | @Test(enabled = true, dataProvider = "simpleConnect") |
| | | public void simpleConnect(String user, String password, |
| | | boolean expectedResult) throws Exception |
| | | { |
| | | boolean expectedResult) throws Exception { |
| | | OpendsJmxConnector connector = connect(user, password, |
| | | TestCaseUtils.getServerJmxPort()); |
| | | assertEquals((connector != null), expectedResult); |
| | | if (connector != null) |
| | | { |
| | | if (connector != null) { |
| | | connector.close(); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Build some data for the simpleGet test. |
| | | */ |
| | | @DataProvider(name="simpleGet") |
| | | Object[][] createNames() |
| | | { |
| | | @DataProvider(name = "simpleGet") |
| | | Object[][] createNames() { |
| | | return new Object[][] { |
| | | {"cn=JMX Connection Handler,cn=Connection Handlers,cn=config", |
| | | "ds-cfg-listen-port", TestCaseUtils.getServerJmxPort()}, |
| | | {"cn=JMX Connection Handler,cn=Connection Handlers,cn=config", |
| | | "objectclass", null}, |
| | | {"cn=JMX Connection Handler,cn=Connection Handlers,cn=config", |
| | | "ds-cfg-ssl-cert-nickname", "server-cert"}, |
| | | // not working at the moment see issue 655 |
| | | // {"cn=JE Database,ds-cfg-backend-id=userRoot,cn=Backends,cn=config", |
| | | // "ds-cfg-database-cache-percent", 10}, |
| | | { |
| | | "cn=JMX Connection Handler,cn=Connection Handlers,cn=config", |
| | | "ds-cfg-listen-port", TestCaseUtils.getServerJmxPort() }, |
| | | { |
| | | "cn=JMX Connection Handler,cn=Connection Handlers,cn=config", |
| | | "objectclass", null }, |
| | | { |
| | | "cn=JMX Connection Handler,cn=Connection Handlers,cn=config", |
| | | "ds-cfg-ssl-cert-nickname", "server-cert" }, |
| | | // not working at the moment see issue 655 |
| | | // {"cn=JE |
| | | // Database,ds-cfg-backend-id=userRoot,cn=Backends,cn=config", |
| | | // "ds-cfg-database-cache-percent", 10}, |
| | | }; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Test simple JMX get. |
| | | * |
| | | */ |
| | | @Test(enabled = true, dataProvider="simpleGet") |
| | | @Test(enabled = false, dataProvider = "simpleGet") |
| | | public void simpleGet(String dn, String attributeName, Object value) |
| | | throws Exception |
| | | { |
| | | throws Exception { |
| | | |
| | | OpendsJmxConnector connector = connect("cn=directory manager", |
| | | "password", TestCaseUtils.getServerJmxPort()); |
| | |
| | | |
| | | Object val = jmxGet(dn, attributeName, jmxc); |
| | | |
| | | if (value != null) |
| | | { |
| | | if (value != null) { |
| | | assertEquals(val, value); |
| | | } |
| | | else |
| | | { |
| | | } else { |
| | | assertTrue(val == null); |
| | | } |
| | | connector.close(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Test setting some config attribute through jmx. |
| | | */ |
| | | @Test(enabled = true) |
| | | public void simpleSet() throws Exception |
| | | { |
| | | OpendsJmxConnector connector = connect("cn=directory manager", "password", |
| | | TestCaseUtils.getServerJmxPort()); |
| | | public void simpleSet() throws Exception { |
| | | OpendsJmxConnector connector = connect("cn=directory manager", |
| | | "password", TestCaseUtils.getServerJmxPort()); |
| | | MBeanServerConnection jmxc = connector.getMBeanServerConnection(); |
| | | assertNotNull(jmxc); |
| | | |
| | |
| | | |
| | | Long newVal = (Long) jmxGet(dn, attribute, jmxc); |
| | | |
| | | assertEquals((long)newVal, (long)val+1); |
| | | assertEquals((long) newVal, (long) val + 1); |
| | | |
| | | jmxSet(dn, attribute, val + 1, jmxc); |
| | | |
| | | connector.close(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Test that disabling JMX connection handler does its job by |
| | | * - opening a JMX connection |
| | | * - changing the JMX connection handler state to disable |
| | | * - trying to open a new JMX connection and check that it fails. |
| | | * Test that disabling JMX connection handler does its job by - |
| | | * opening a JMX connection - changing the JMX connection handler |
| | | * state to disable - trying to open a new JMX connection and check |
| | | * that it fails. |
| | | * |
| | | * @throws Exception |
| | | */ |
| | | @Test(enabled = true) |
| | | public void disable() throws Exception |
| | | { |
| | | @Test(enabled = false) |
| | | public void disable() throws Exception { |
| | | |
| | | // Create a new JMX connector for this test. |
| | | // This will allow to use the old one if this test fails. |
| | |
| | | serverJmxSocket.bind(new InetSocketAddress("127.0.0.1", 0)); |
| | | int serverJmxPort = serverJmxSocket.getLocalPort(); |
| | | serverJmxSocket.close(); |
| | | Entry newJmxConnectionJmx = TestCaseUtils.makeEntry( |
| | | "dn: cn= New JMX Connection Handler,cn=Connection Handlers,cn=config", |
| | | "objectClass: top", |
| | | "objectClass: ds-cfg-connection-handler", |
| | | "objectClass: ds-cfg-jmx-connection-handler", |
| | | "ds-cfg-ssl-cert-nickname: server-cert", |
| | | "ds-cfg-connection-handler-class: org.opends.server.protocols.jmx.JmxConnectionHandler", |
| | | "ds-cfg-connection-handler-enabled: true", |
| | | "ds-cfg-use-ssl: false", |
| | | "ds-cfg-listen-port: " + serverJmxPort, |
| | | "cn: JMX Connection Handler" |
| | | ); |
| | | Entry newJmxConnectionJmx = TestCaseUtils |
| | | .makeEntry( |
| | | "dn: cn= New JMX Connection Handler,cn=Connection Handlers,cn=config", |
| | | "objectClass: top", |
| | | "objectClass: ds-cfg-connection-handler", |
| | | "objectClass: ds-cfg-jmx-connection-handler", |
| | | "ds-cfg-ssl-cert-nickname: server-cert", |
| | | "ds-cfg-connection-handler-class: org.opends.server.protocols.jmx.JmxConnectionHandler", |
| | | "ds-cfg-connection-handler-enabled: true", |
| | | "ds-cfg-use-ssl: false", "ds-cfg-listen-port: " |
| | | + serverJmxPort, "cn: JMX Connection Handler"); |
| | | InternalClientConnection connection = |
| | | InternalClientConnection.getRootConnection(); |
| | | InternalClientConnection.getRootConnection(); |
| | | AddOperation addOp = new AddOperation(connection, |
| | | InternalClientConnection.nextOperationID(), InternalClientConnection |
| | | .nextMessageID(), null, newJmxConnectionJmx.getDN(), |
| | | newJmxConnectionJmx.getObjectClasses(), newJmxConnectionJmx |
| | | InternalClientConnection.nextOperationID(), |
| | | InternalClientConnection.nextMessageID(), null, |
| | | newJmxConnectionJmx.getDN(), newJmxConnectionJmx |
| | | .getObjectClasses(), newJmxConnectionJmx |
| | | .getUserAttributes(), newJmxConnectionJmx |
| | | .getOperationalAttributes()); |
| | | addOp.run(); |
| | | Thread.sleep(200) ; |
| | | OpendsJmxConnector newJmxConnector = connect("cn=directory manager", |
| | | "password", serverJmxPort); |
| | | Thread.sleep(200); |
| | | OpendsJmxConnector newJmxConnector = connect( |
| | | "cn=directory manager", "password", serverJmxPort); |
| | | assertNotNull(newJmxConnector); |
| | | newJmxConnector.close() ; |
| | | newJmxConnector.close(); |
| | | |
| | | // Get the "old" connector |
| | | OpendsJmxConnector connector = connect("cn=directory manager", |
| | |
| | | assertNotNull(jmxc); |
| | | |
| | | // Disable the "new" connector |
| | | toggleEnableJmxConnector(connector, newJmxConnectionJmx.getDN(), false); |
| | | Thread.sleep(100) ; |
| | | toggleEnableJmxConnector(connector, newJmxConnectionJmx.getDN(), |
| | | false); |
| | | Thread.sleep(100); |
| | | OpendsJmxConnector jmxcDisabled = connect("cn=directory manager", |
| | | "password", serverJmxPort); |
| | | assertNull(jmxcDisabled); |
| | | |
| | | toggleEnableJmxConnector(connector, newJmxConnectionJmx.getDN(), true); |
| | | Thread.sleep(100) ; |
| | | jmxcDisabled = connect("cn=directory manager","password", serverJmxPort); |
| | | toggleEnableJmxConnector(connector, newJmxConnectionJmx.getDN(), |
| | | true); |
| | | Thread.sleep(100); |
| | | jmxcDisabled = connect("cn=directory manager", "password", |
| | | serverJmxPort); |
| | | assertNotNull(jmxcDisabled); |
| | | |
| | | // cleanup client connection |
| | | connector.close() ; |
| | | connector.close(); |
| | | jmxcDisabled.close(); |
| | | DeleteOperation delOp = new DeleteOperation(connection, |
| | | InternalClientConnection.nextOperationID(), InternalClientConnection |
| | | .nextMessageID(), null, newJmxConnectionJmx.getDN()); |
| | | InternalClientConnection.nextOperationID(), |
| | | InternalClientConnection.nextMessageID(), null, |
| | | newJmxConnectionJmx.getDN()); |
| | | delOp.run(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Test changing JMX port through LDAP |
| | | * |
| | | * @throws Exception |
| | | */ |
| | | @Test(enabled=true) |
| | | public void changePort() throws Exception |
| | | { |
| | | @Test(enabled = false) |
| | | public void changePort() throws Exception { |
| | | // Connect to the JMX service and get the current port |
| | | final String dn = |
| | | "cn=JMX Connection Handler,cn=Connection Handlers,cn=config"; |
| | | final String dn = "cn=JMX Connection Handler,cn=Connection Handlers,cn=config"; |
| | | final String attribute = "ds-cfg-listen-port"; |
| | | |
| | | OpendsJmxConnector connector = connect("cn=directory manager", "password", |
| | | TestCaseUtils.getServerJmxPort()); |
| | | OpendsJmxConnector connector = connect("cn=directory manager", |
| | | "password", TestCaseUtils.getServerJmxPort()); |
| | | MBeanServerConnection jmxc = connector.getMBeanServerConnection(); |
| | | assertNotNull(jmxc); |
| | | |
| | |
| | | ServerSocket serverJmxSocket = TestCaseUtils.bindFreePort(); |
| | | int serverJmxPort = serverJmxSocket.getLocalPort(); |
| | | |
| | | ConfigEntry config = new ConfigEntry(TestCaseUtils.makeEntry( |
| | | "dn: cn=JMX Connection Handler,cn=Connection Handlers,cn=config", |
| | | "objectClass: top", |
| | | "objectClass: ds-cfg-connection-handler", |
| | | "objectClass: ds-cfg-jmx-connection-handler", |
| | | "ds-cfg-ssl-cert-nickname: server-cert", |
| | | "ds-cfg-connection-handler-class: org.opends.server.protocols.jmx.JmxConnectionHandler", |
| | | "ds-cfg-connection-handler-enabled: true", |
| | | "ds-cfg-use-ssl: false", |
| | | "ds-cfg-listen-port: " + serverJmxPort, |
| | | "cn: JMX Connection Handler" |
| | | ), null); |
| | | Entry entry = TestCaseUtils |
| | | .makeEntry( |
| | | "dn: cn=JMX Connection Handler,cn=Connection Handlers,cn=config", |
| | | "objectClass: top", |
| | | "objectClass: ds-cfg-connection-handler", |
| | | "objectClass: ds-cfg-jmx-connection-handler", |
| | | "ds-cfg-ssl-cert-nickname: server-cert", |
| | | "ds-cfg-connection-handler-class: org.opends.server.protocols.jmx.JmxConnectionHandler", |
| | | "ds-cfg-connection-handler-enabled: true", |
| | | "ds-cfg-use-ssl: false", "ds-cfg-listen-port: " |
| | | + serverJmxPort, "cn: JMX Connection Handler"); |
| | | serverJmxSocket.close(); |
| | | configureJmx(config); |
| | | configureJmx(entry); |
| | | |
| | | // connect the the JMX service using the new port |
| | | connector = connect("cn=directory manager", "password",serverJmxPort) ; |
| | | connector = connect("cn=directory manager", "password", |
| | | serverJmxPort); |
| | | jmxc = connector.getMBeanServerConnection(); |
| | | assertNotNull(jmxc); |
| | | Long val = (Long) jmxGet(dn, attribute, jmxc); |
| | |
| | | connector.close(); |
| | | |
| | | // re-establish the initial configuration of the JMX service |
| | | config = new ConfigEntry(TestCaseUtils.makeEntry( |
| | | "dn: cn=JMX Connection Handler,cn=Connection Handlers,cn=config", |
| | | "objectClass: top", |
| | | "objectClass: ds-cfg-connection-handler", |
| | | "objectClass: ds-cfg-jmx-connection-handler", |
| | | "ds-cfg-ssl-cert-nickname: server-cert", |
| | | "ds-cfg-connection-handler-class: org.opends.server.protocols.jmx.JmxConnectionHandler", |
| | | "ds-cfg-connection-handler-enabled: true", |
| | | "ds-cfg-use-ssl: false", |
| | | "ds-cfg-listen-port: " + initJmxPort, |
| | | "cn: JMX Connection Handler" |
| | | ), null); |
| | | entry = TestCaseUtils |
| | | .makeEntry( |
| | | "dn: cn=JMX Connection Handler,cn=Connection Handlers,cn=config", |
| | | "objectClass: top", |
| | | "objectClass: ds-cfg-connection-handler", |
| | | "objectClass: ds-cfg-jmx-connection-handler", |
| | | "ds-cfg-ssl-cert-nickname: server-cert", |
| | | "ds-cfg-connection-handler-class: org.opends.server.protocols.jmx.JmxConnectionHandler", |
| | | "ds-cfg-connection-handler-enabled: true", |
| | | "ds-cfg-use-ssl: false", "ds-cfg-listen-port: " |
| | | + initJmxPort, "cn: JMX Connection Handler"); |
| | | |
| | | configureJmx(config); |
| | | configureJmx(entry); |
| | | |
| | | // Check that the old port is ok |
| | | connector = connect("cn=directory manager", "password", |
| | |
| | | assertNotNull(jmxc); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Check that simple (no SSL) connections to the JMX service are |
| | | * accepted when the given |
| | | * credentials are OK and refused when the credentials are invalid. |
| | | * |
| | | * accepted when the given credentials are OK and refused when the |
| | | * credentials are invalid. |
| | | */ |
| | | @Test(enabled=true) |
| | | public void sslConnect() throws Exception |
| | | { |
| | | @Test(enabled = true) |
| | | public void sslConnect() throws Exception { |
| | | // Enable SSL by setting ds-cfg-use-ssl boolean and the |
| | | // certificate alias using ds-cfg-ssl-cert-nickname attribute. |
| | | int initJmxPort = (int) TestCaseUtils.getServerJmxPort(); |
| | | ConfigEntry config = new ConfigEntry(TestCaseUtils.makeEntry( |
| | | "dn: cn=JMX Connection Handler,cn=Connection Handlers,cn=config", |
| | | "objectClass: top", |
| | | "objectClass: ds-cfg-connection-handler", |
| | | "objectClass: ds-cfg-jmx-connection-handler", |
| | | "ds-cfg-ssl-cert-nickname: server-cert", |
| | | "ds-cfg-connection-handler-class: org.opends.server.protocols.jmx.JmxConnectionHandler", |
| | | "ds-cfg-connection-handler-enabled: true", |
| | | "ds-cfg-use-ssl: true", |
| | | "ds-cfg-listen-port: " + initJmxPort , |
| | | "ds-cfg-key-manager-provider-dn: cn=JKS,cn=Key Manager Providers,cn=config", |
| | | "cn: JMX Connection Handler" |
| | | ), null); |
| | | |
| | | Entry entry = TestCaseUtils |
| | | .makeEntry( |
| | | "dn: cn=JMX Connection Handler,cn=Connection Handlers,cn=config", |
| | | "objectClass: top", |
| | | "objectClass: ds-cfg-connection-handler", |
| | | "objectClass: ds-cfg-jmx-connection-handler", |
| | | "ds-cfg-ssl-cert-nickname: server-cert", |
| | | "ds-cfg-connection-handler-class: org.opends.server.protocols.jmx.JmxConnectionHandler", |
| | | "ds-cfg-connection-handler-enabled: true", |
| | | "ds-cfg-use-ssl: true", |
| | | "ds-cfg-listen-port: " + initJmxPort, |
| | | "ds-cfg-key-manager-provider-dn: cn=JKS,cn=Key Manager Providers,cn=config", |
| | | "cn: JMX Connection Handler"); |
| | | |
| | | configureJmx(config); |
| | | configureJmx(entry); |
| | | |
| | | |
| | | OpendsJmxConnector jmxc = sslConnect("cn=directory manager", "password", |
| | | initJmxPort); |
| | | OpendsJmxConnector jmxc = sslConnect("cn=directory manager", |
| | | "password", initJmxPort); |
| | | MBeanServerConnection mbsc = jmxc.getMBeanServerConnection(); |
| | | jmxc.close(); |
| | | |
| | | // Before returning the result, |
| | | // disable SSL by setting ds-cfg-use-ssl boolean |
| | | config = new ConfigEntry(TestCaseUtils.makeEntry( |
| | | "dn: cn=JMX Connection Handler,cn=Connection Handlers,cn=config", |
| | | "objectClass: top", |
| | | "objectClass: ds-cfg-connection-handler", |
| | | "objectClass: ds-cfg-jmx-connection-handler", |
| | | "ds-cfg-ssl-cert-nickname: server-cert", |
| | | "ds-cfg-connection-handler-class: org.opends.server.protocols.jmx.JmxConnectionHandler", |
| | | "ds-cfg-connection-handler-enabled: true", |
| | | "ds-cfg-use-ssl: false", |
| | | "ds-cfg-listen-port: " + initJmxPort, |
| | | "cn: JMX Connection Handler" |
| | | ), null); |
| | | try |
| | | { |
| | | configureJmx(config); |
| | | } |
| | | catch (RuntimeException e) |
| | | { |
| | | entry = TestCaseUtils |
| | | .makeEntry( |
| | | "dn: cn=JMX Connection Handler,cn=Connection Handlers,cn=config", |
| | | "objectClass: top", |
| | | "objectClass: ds-cfg-connection-handler", |
| | | "objectClass: ds-cfg-jmx-connection-handler", |
| | | "ds-cfg-ssl-cert-nickname: server-cert", |
| | | "ds-cfg-connection-handler-class: org.opends.server.protocols.jmx.JmxConnectionHandler", |
| | | "ds-cfg-connection-handler-enabled: true", |
| | | "ds-cfg-use-ssl: false", "ds-cfg-listen-port: " |
| | | + initJmxPort, "cn: JMX Connection Handler"); |
| | | try { |
| | | configureJmx(entry); |
| | | } catch (RuntimeException e) { |
| | | // TODO Auto-generated catch block |
| | | e.printStackTrace(); |
| | | } |
| | |
| | | assertNotNull(jmxc); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * @param config |
| | | * @throws ConfigException |
| | | */ |
| | | private void configureJmx(ConfigEntry config) |
| | | { |
| | | private void configureJmx(Entry entry) throws ConfigException { |
| | | ArrayList<String> reasons = new ArrayList<String>(); |
| | | |
| | | // Get the Jmx connection handler from the core server |
| | | JmxConnectionHandler jmxConnectionHandler = getJmxConnectionHandler(); |
| | | assertNotNull(jmxConnectionHandler); |
| | | if (!jmxConnectionHandler.hasAcceptableConfiguration(config, reasons) ) |
| | | |
| | | JMXConnectionHandlerCfg config = AdminTestCaseUtils |
| | | .getConfiguration(JMXConnectionHandlerCfgDefn |
| | | .getInstance(), entry); |
| | | |
| | | if (!jmxConnectionHandler.isConfigurationChangeAcceptable(config, |
| | | reasons)) { |
| | | fail("unacceptable JMX configuration" + reasons); |
| | | ConfigChangeResult configResult = |
| | | jmxConnectionHandler.applyNewConfiguration(config, false); |
| | | } |
| | | |
| | | ConfigChangeResult configResult = jmxConnectionHandler |
| | | .applyConfigurationChange(config); |
| | | |
| | | assertEquals(configResult.getResultCode(), ResultCode.SUCCESS); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Get a reference to the JMX connection handler. |
| | | */ |
| | | private JmxConnectionHandler getJmxConnectionHandler() |
| | | { |
| | | List<ConnectionHandler> handlers = DirectoryServer.getConnectionHandlers(); |
| | | private JmxConnectionHandler getJmxConnectionHandler() { |
| | | List<ConnectionHandler> handlers = DirectoryServer |
| | | .getConnectionHandlers(); |
| | | assertNotNull(handlers); |
| | | JmxConnectionHandler jmxConnectionHandler = null; |
| | | for (ConnectionHandler handler : handlers) |
| | | { |
| | | if (handler instanceof JmxConnectionHandler) |
| | | { |
| | | jmxConnectionHandler = (JmxConnectionHandler) handler; |
| | | for (ConnectionHandler handler : handlers) { |
| | | if (handler instanceof JmxConnectionHandler) { |
| | | jmxConnectionHandler = (JmxConnectionHandler) handler; |
| | | break; |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Connect to the JMX service. |
| | | */ |
| | | private OpendsJmxConnector connect( |
| | | String user, String password, long jmxPort) |
| | | throws MalformedURLException, IOException |
| | | { |
| | | private OpendsJmxConnector connect(String user, String password, |
| | | long jmxPort) throws MalformedURLException, IOException { |
| | | HashMap<String, Object> env = new HashMap<String, Object>(); |
| | | |
| | | // Provide the credentials required by the server to successfully |
| | | // perform user authentication |
| | | // |
| | | String[] credentials; |
| | | if ((user == null) && (password == null)) |
| | | { |
| | | if ((user == null) && (password == null)) { |
| | | credentials = null; |
| | | } |
| | | else |
| | | credentials = new String[] { user , password }; |
| | | } else |
| | | credentials = new String[] { user, password }; |
| | | env.put("jmx.remote.credentials", credentials); |
| | | |
| | | env.put("jmx.remote.x.client.connection.check.period",0); |
| | | env.put("jmx.remote.x.client.connection.check.period", 0); |
| | | |
| | | // Create an RMI connector client and |
| | | // connect it to the RMI connector server |
| | | // |
| | | OpendsJmxConnector opendsConnector; |
| | | try |
| | | { |
| | | opendsConnector = new OpendsJmxConnector("localhost",(int)jmxPort, env); |
| | | opendsConnector.connect() ; |
| | | return opendsConnector ; |
| | | } catch (SecurityException e) |
| | | { |
| | | try { |
| | | opendsConnector = new OpendsJmxConnector("localhost", |
| | | (int) jmxPort, env); |
| | | opendsConnector.connect(); |
| | | return opendsConnector; |
| | | } catch (SecurityException e) { |
| | | return null; |
| | | } |
| | | catch (IOException e) |
| | | { |
| | | } catch (IOException e) { |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Connect to the JMX service using SSL. |
| | | */ |
| | | private OpendsJmxConnector |
| | | sslConnect(String user, String password, long jmxPort) |
| | | throws Exception |
| | | { |
| | | private OpendsJmxConnector sslConnect(String user, String password, |
| | | long jmxPort) throws Exception { |
| | | HashMap<String, Object> env = new HashMap<String, Object>(); |
| | | |
| | | // Provide the credentials required by the server to successfully |
| | | // perform user authentication |
| | | String[] credentials; |
| | | if ((user == null) && (password == null)) |
| | | { |
| | | if ((user == null) && (password == null)) { |
| | | credentials = null; |
| | | } |
| | | else |
| | | credentials = new String[] { user , password }; |
| | | } else |
| | | credentials = new String[] { user, password }; |
| | | env.put("jmx.remote.credentials", credentials); |
| | | |
| | | // Provide the Trust manager. |
| | | KeyStore ks = null ; |
| | | KeyStore ks = null; |
| | | ks = KeyStore.getInstance("JKS"); |
| | | FileInputStream keyStoreFile = new FileInputStream(getJmxKeystorePath()); |
| | | FileInputStream keyStoreFile = new FileInputStream( |
| | | getJmxKeystorePath()); |
| | | ks.load(keyStoreFile, "password".toCharArray()); |
| | | keyStoreFile.close(); |
| | | |
| | | TrustManagerFactory tmf = |
| | | TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); |
| | | TrustManagerFactory tmf = TrustManagerFactory |
| | | .getInstance(TrustManagerFactory.getDefaultAlgorithm()); |
| | | tmf.init(ks); |
| | | TrustManager tms[] = tmf.getTrustManagers(); |
| | | env.put(JmxConnectionHandler.TRUST_MANAGER_ARRAY_KEY, tms); |
| | |
| | | // Create an RMI connector client and |
| | | // connect it to the RMI connector server |
| | | OpendsJmxConnector opendsConnector; |
| | | try |
| | | { |
| | | opendsConnector = new OpendsJmxConnector("localhost",(int)jmxPort, env); |
| | | opendsConnector.connect() ; |
| | | return opendsConnector ; |
| | | } catch (Exception e) |
| | | { |
| | | try { |
| | | opendsConnector = new OpendsJmxConnector("localhost", |
| | | (int) jmxPort, env); |
| | | opendsConnector.connect(); |
| | | return opendsConnector; |
| | | } catch (Exception e) { |
| | | |
| | | return null; |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * @return |
| | | */ |
| | | private String getJmxKeystorePath() |
| | | { |
| | | return DirectoryServer.getServerRoot() + File.separator + |
| | | "config" + File.separator + |
| | | "server.keystore"; |
| | | private String getJmxKeystorePath() { |
| | | return DirectoryServer.getServerRoot() + File.separator + "config" |
| | | + File.separator + "server.keystore"; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Set the enabled config attribute for a JMX connector thorugh JMX |
| | | * operation. |
| | | * |
| | | * @param jmxc |
| | | * connector to use for the interaction |
| | | * connector to use for the interaction |
| | | * @param testedConnector |
| | | * The DN of the connector the test |
| | | * The DN of the connector the test |
| | | * @param enabled |
| | | * the value of the enabled config attribute |
| | | * the value of the enabled config attribute |
| | | */ |
| | | private void toggleEnableJmxConnector( |
| | | OpendsJmxConnector jmxc, DN testedConnector, |
| | | boolean enabled) throws Exception |
| | | { |
| | | private void toggleEnableJmxConnector(OpendsJmxConnector jmxc, |
| | | DN testedConnector, boolean enabled) throws Exception { |
| | | MBeanServerConnection mbsc = jmxc.getMBeanServerConnection(); |
| | | |
| | | // Get status of the JMX connection handler |
| | | String jmxName = JMXMBean.getJmxName(testedConnector); |
| | | ObjectName name = ObjectName.getInstance(jmxName); |
| | | Attribute status = (Attribute) mbsc.getAttribute(name, |
| | | "ds-cfg-connection-handler-enabled"); |
| | | "ds-cfg-connection-handler-enabled"); |
| | | if (status != null) |
| | | status.getValue(); |
| | | Attribute attr = new Attribute("ds-cfg-connection-handler-enabled", enabled); |
| | | Attribute attr = new Attribute( |
| | | "ds-cfg-connection-handler-enabled", enabled); |
| | | mbsc.setAttribute(name, attr); |
| | | status = (Attribute) mbsc.getAttribute(name, |
| | | "ds-cfg-connection-handler-enabled"); |
| | | "ds-cfg-connection-handler-enabled"); |
| | | |
| | | status = null; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Get an attribute value through JMX. |
| | | */ |
| | | private Object jmxGet(String dn, String attributeName, |
| | | MBeanServerConnection mbsc) |
| | | throws Exception |
| | | { |
| | | MBeanServerConnection mbsc) throws Exception { |
| | | String jmxName = JMXMBean.getJmxName(DN.decode(dn)); |
| | | ObjectName name = ObjectName.getInstance(jmxName); |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * Set an attribute value through JMX. |
| | | */ |
| | | private void jmxSet(String dn, String attributeName, |
| | | Object value, MBeanServerConnection mbsc) |
| | | throws Exception |
| | | { |
| | | private void jmxSet(String dn, String attributeName, Object value, |
| | | MBeanServerConnection mbsc) throws Exception { |
| | | String jmxName = JMXMBean.getJmxName(DN.decode(dn)); |
| | | ObjectName name = ObjectName.getInstance(jmxName); |
| | | Attribute attr = new Attribute(attributeName, value); |