mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

jcduff
23.04.2008 f73b655466092169abac34833fb628fce1fcdebe
opends/tests/unit-tests-testng/src/server/org/opends/server/snmp/SNMPConnectionManager.java
@@ -26,6 +26,8 @@
 */
package org.opends.server.snmp;
import com.sun.management.snmp.SnmpEngine;
import com.sun.management.snmp.SnmpOid;
import com.sun.management.snmp.SnmpOidTableSupport;
@@ -45,228 +47,267 @@
import org.opends.server.core.DirectoryServer;
import org.opends.server.core.ModifyOperationBasis;
import org.opends.server.protocols.internal.InternalClientConnection;
import org.opends.server.types.Attributes;
import org.opends.server.types.Control;
import org.opends.server.types.DN;
import org.opends.server.types.Modification;
import org.opends.server.types.ModificationType;
import org.testng.annotations.Test;
/**
 * An abstract class that all SNMP unit test should extend.
 */
@Test(enabled=true, groups = {"precommit", "snmp"}, sequential = true)
public abstract class SNMPConnectionManager extends DirectoryServerTestCase {
@Test(enabled = true, groups =
{
    "precommit", "snmp"
}, sequential = true)
public abstract class SNMPConnectionManager extends DirectoryServerTestCase
{
    /**
     * Snmp Port
     */
    private int snmpPort;
    /**
     * Snmp Trap Port
     */
    private int trapSnmpPort;
  /**
   * Snmp Port
   */
  private int snmpPort;
    /**
     * Set Up the Directory Server
     * @throws java.lang.Exception
     */
    protected void setUp() throws Exception {
        // Make sure that the server is up and running.
        TestCaseUtils.restartServer();
                synchronized (this) {
            this.wait(500);
  /**
   * Snmp Trap Port
   */
  private int trapSnmpPort;
  /**
   * Set Up the Directory Server
   *
   * @throws java.lang.Exception
   */
  protected void setUp() throws Exception
  {
    // Make sure that the server is up and running.
    TestCaseUtils.restartServer();
    synchronized (this)
    {
      this.wait(500);
    }
    SNMPConnectionHandler snmpHandler = getSNMPConnectionHandler();
    if (snmpHandler == null)
    {
      throw new Exception("Unable to get a SNMP connector");
    }
  }
  /**
   * Set Down the Directory Server.
   *
   * @throws java.lang.Exception
   */
  protected void setDown() throws Exception
  {
    TestCaseUtils.restartServer();
  }
  /**
   * Gets the Snmp port on which the Connection Handler is listening
   *
   * @return
   */
  protected int getSnmpPort()
  {
    return this.snmpPort;
  }
  /**
   * Gets the Snmp trap port on which the Connection Handler is
   * listening
   *
   * @return
   */
  protected int getTrapSnmpPort()
  {
    return this.trapSnmpPort;
  }
  /**
   * Gets an SNMP V3 peer agent (proxy)
   *
   * @param port
   * @return
   */
  protected SnmpUsmPeer getSnmpV3Peer(int port)
  {
    try
    {
      String host = InetAddress.getLocalHost().getCanonicalHostName();
      SnmpOidTableSupport oidTable = new DIRECTORY_SERVER_MIBOidTable();
      SnmpOid.setSnmpOidTable(oidTable);
      SnmpSession session = new SnmpSession("SyncManagerV3 session");
      SnmpEngine engine = session.getEngine();
      return new SnmpUsmPeer(engine, host, port);
    }
    catch (Exception ex)
    {
      return null;
    }
  }
  /**
   * Gets an SNMP V2 agent peer (proxy)
   *
   * @param port
   * @return
   */
  protected SnmpPeer getSnmpV2Peer(int port)
  {
    try
    {
      String host = InetAddress.getLocalHost().getCanonicalHostName();
      SnmpOidTableSupport oidTable = new DIRECTORY_SERVER_MIBOidTable();
      SnmpOid.setSnmpOidTable(oidTable);
      return new SnmpPeer(host, port);
    }
    catch (Exception ex)
    {
      return null;
    }
  }
  /**
   * Get a reference to the SNMP connection handler.
   *
   * @return an SNMP Connection handler
   * @throws an
   *           Exception is something went wrong.
   */
  protected SNMPConnectionHandler getSNMPConnectionHandler() throws Exception
  {
    List<ConnectionHandler> handlers = DirectoryServer.getConnectionHandlers();
    assertNotNull(handlers);
    SNMPConnectionHandler snmpConnectionHandler = null;
    for (ConnectionHandler handler : handlers)
    {
      if (handler instanceof SNMPConnectionHandler)
      {
        snmpConnectionHandler = (SNMPConnectionHandler) handler;
        break;
      }
    }
    if (snmpConnectionHandler == null)
    {
      enableSnmp();
      synchronized (this)
      {
        this.wait(500);
      }
      for (ConnectionHandler handler : handlers)
      {
        if (handler instanceof SNMPConnectionHandler)
        {
          snmpConnectionHandler = (SNMPConnectionHandler) handler;
          break;
        }
        SNMPConnectionHandler snmpHandler = getSNMPConnectionHandler();
        if (snmpHandler == null) {
            throw new Exception("Unable to get a SNMP connector");
        }
      }
    }
    /**
     * Set Down the Directory Server.
     * @throws java.lang.Exception
     */
    protected void setDown() throws Exception {
        TestCaseUtils.restartServer();
    }
    /**
     * Gets the Snmp port on which the Connection Handler is listening
     * @return
     */
    protected int getSnmpPort() {
        return this.snmpPort;
    }
    /**
     * Gets the Snmp trap port on which the Connection Handler is listening
     * @return
     */
    protected int getTrapSnmpPort() {
        return this.trapSnmpPort;
    }
    assertNotNull(snmpConnectionHandler);
    return snmpConnectionHandler;
  }
    /**
     * Gets an SNMP V3 peer agent (proxy)
     * @param port
     * @return
     */
    protected SnmpUsmPeer getSnmpV3Peer(int port) {
        try {
            String host = InetAddress.getLocalHost().getCanonicalHostName();
            SnmpOidTableSupport oidTable =
                    new DIRECTORY_SERVER_MIBOidTable();
            SnmpOid.setSnmpOidTable(oidTable);
  /**
   * Enable SNMP with the port chosen in TestCaseUtils.
   *
   * @throws Exception
   *           if the handler cannot be enabled.
   */
  protected void enableSnmp() throws Exception
  {
            SnmpSession session = new SnmpSession("SyncManagerV3 session");
            SnmpEngine engine = session.getEngine();
            return new SnmpUsmPeer(engine, host, port);
        } catch (Exception ex) {
            return null;
        }
    }
    // Get a free port
    this.snmpPort = TestCaseUtils.bindFreePort().getLocalPort();
    this.trapSnmpPort = TestCaseUtils.bindFreePort().getLocalPort();
    /**
     * Gets an SNMP V2 agent peer (proxy)
     * @param port
     * @return
     */
    protected SnmpPeer getSnmpV2Peer(int port) {
    ArrayList<Modification> mods = new ArrayList<Modification>();
        try {
            String host = InetAddress.getLocalHost().getCanonicalHostName();
            SnmpOidTableSupport oidTable = new DIRECTORY_SERVER_MIBOidTable();
            SnmpOid.setSnmpOidTable(oidTable);
            return new SnmpPeer(host, port);
        } catch (Exception ex) {
            return null;
        }
    }
    InternalClientConnection conn = InternalClientConnection
        .getRootConnection();
    /**
     * Get a reference to the SNMP connection handler.
     * @return an SNMP Connection handler
     * @throws an Exception is something went wrong.
     */
    protected SNMPConnectionHandler getSNMPConnectionHandler() throws Exception {
        List<ConnectionHandler> handlers =
                DirectoryServer.getConnectionHandlers();
        assertNotNull(handlers);
        SNMPConnectionHandler snmpConnectionHandler = null;
        for (ConnectionHandler handler : handlers) {
            if (handler instanceof SNMPConnectionHandler) {
                snmpConnectionHandler = (SNMPConnectionHandler) handler;
                break;
            }
        }
    mods.add(new Modification(ModificationType.REPLACE, Attributes.create(
        "ds-cfg-listen-port", String.valueOf(this.snmpPort))));
        if (snmpConnectionHandler == null) {
            enableSnmp();
            synchronized (this) {
                this.wait(500);
            }
            for (ConnectionHandler handler : handlers) {
                if (handler instanceof SNMPConnectionHandler) {
                    snmpConnectionHandler = (SNMPConnectionHandler) handler;
                    break;
                }
            }
        }
        assertNotNull(snmpConnectionHandler);
        return snmpConnectionHandler;
    }
    mods.add(new Modification(ModificationType.REPLACE, Attributes.create(
        "ds-cfg-trap-port", String.valueOf(this.trapSnmpPort))));
    /**
     * Enable SNMP with the port chosen in TestCaseUtils.
     *
     * @throws Exception
     *           if the handler cannot be enabled.
     */
    protected void enableSnmp() throws Exception {
    String hosts = InetAddress.getLocalHost().getCanonicalHostName();
        // Get a free port
        this.snmpPort = TestCaseUtils.bindFreePort().getLocalPort();
        this.trapSnmpPort = TestCaseUtils.bindFreePort().getLocalPort();
    mods.add(new Modification(ModificationType.ADD, Attributes.create(
        "ds-cfg-traps-destination", hosts)));
        ArrayList<Modification> mods = new ArrayList<Modification>();
    String jarFileLocation = System
        .getProperty("org.opends.server.snmp.opendmk");
        InternalClientConnection conn =
                InternalClientConnection.getRootConnection();
        mods.add(new Modification(ModificationType.REPLACE,
                new org.opends.server.types.Attribute(
                "ds-cfg-listen-port", String.valueOf(this.snmpPort))));
        mods.add(new Modification(ModificationType.REPLACE,
                new org.opends.server.types.Attribute(
                "ds-cfg-trap-port", String.valueOf(this.trapSnmpPort))));
       String hosts = InetAddress.getLocalHost().getCanonicalHostName();
       mods.add(new Modification(ModificationType.ADD,
                new org.opends.server.types.Attribute(
                "ds-cfg-traps-destination", hosts)));
    mods.add(new Modification(ModificationType.ADD, Attributes.create(
        "ds-cfg-opendmk-jarfile", jarFileLocation + File.separator
            + "jdmkrt.jar")));
       String jarFileLocation =
               System.getProperty("org.opends.server.snmp.opendmk");
       mods.add(new Modification(ModificationType.ADD,
                new org.opends.server.types.Attribute(
                "ds-cfg-opendmk-jarfile", jarFileLocation + File.separator +
                "jdmkrt.jar")));
       ModifyOperationBasis op = new ModifyOperationBasis(
                conn,
                conn.nextOperationID(),
                conn.nextMessageID(),
                new ArrayList<Control>(),
                DN.decode("cn=SNMP Connection Handler,cn=Connection Handlers,cn=config"),
                mods);
        op.run();
        mods.clear();
    ModifyOperationBasis op = new ModifyOperationBasis(conn, conn
        .nextOperationID(), conn.nextMessageID(), new ArrayList<Control>(), DN
        .decode("cn=SNMP Connection Handler,cn=Connection Handlers,cn=config"),
        mods);
    op.run();
        mods.add(new Modification(ModificationType.REPLACE,
                new org.opends.server.types.Attribute(
                "ds-cfg-enabled", "true")));
        op = new ModifyOperationBasis(
                conn,
                conn.nextOperationID(),
                conn.nextMessageID(),
                new ArrayList<Control>(),
                DN.decode("cn=SNMP Connection Handler,cn=Connection Handlers,cn=config"),
                mods);
        op.run();
    }
    mods.clear();
    /**
     * Enable JMX with the port chosen in TestCaseUtils.
     *
     * @throws Exception
     *           if the handler cannot be enabled.
     */
    protected void enableJmx() throws Exception {
        ArrayList<Modification> mods = new ArrayList<Modification>();
    mods.add(new Modification(ModificationType.REPLACE, Attributes
        .create("ds-cfg-enabled", "true")));
        InternalClientConnection conn = InternalClientConnection.getRootConnection();
        mods.add(new Modification(ModificationType.REPLACE,
                new org.opends.server.types.Attribute(
                "ds-cfg-enabled", "true")));
        ModifyOperationBasis op = new ModifyOperationBasis(
                conn,
                conn.nextOperationID(),
                conn.nextMessageID(),
                new ArrayList<Control>(),
                DN.decode("cn=JMX Connection Handler,cn=Connection Handlers,cn=config"),
                mods);
        op.run();
    }
    op = new ModifyOperationBasis(conn, conn.nextOperationID(), conn
        .nextMessageID(), new ArrayList<Control>(), DN
        .decode("cn=SNMP Connection Handler,cn=Connection Handlers,cn=config"),
        mods);
    op.run();
  }
  /**
   * Enable JMX with the port chosen in TestCaseUtils.
   *
   * @throws Exception
   *           if the handler cannot be enabled.
   */
  protected void enableJmx() throws Exception
  {
    ArrayList<Modification> mods = new ArrayList<Modification>();
    InternalClientConnection conn = InternalClientConnection
        .getRootConnection();
    mods.add(new Modification(ModificationType.REPLACE, Attributes.create(
        "ds-cfg-enabled", "true")));
    ModifyOperationBasis op = new ModifyOperationBasis(conn, conn
        .nextOperationID(), conn.nextMessageID(), new ArrayList<Control>(), DN
        .decode("cn=JMX Connection Handler,cn=Connection Handlers,cn=config"),
        mods);
    op.run();
  }
}