| | |
| | | */ |
| | | package org.opends.server.snmp; |
| | | |
| | | |
| | | |
| | | import com.sun.management.snmp.SnmpEngine; |
| | | import com.sun.management.snmp.SnmpOid; |
| | | import com.sun.management.snmp.SnmpOidTableSupport; |
| | |
| | | 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(); |
| | | } |
| | | } |