SNMP 4 Jのテストコード
基本機能のテストでは、Snmpクラスのパッケージが少し変で、ソースコードを見ないと書き間違えます.
import java.io.IOException;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.snmp4j.CommandResponder;
import org.snmp4j.CommandResponderEvent;
import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.event.ResponseListener;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.UdpAddress;
import org.snmp4j.smi.VariableBinding;
import org.snmp4j.transport.DefaultUdpTransportMapping;
public class SnmpTest {
private final static Logger LOG = LoggerFactory.getLogger(SnmpTest.class);
private static Snmp snmp;
private static CommunityTarget target1;
private static CommunityTarget target2;
@BeforeClass
public static void init() throws IOException {
// SNMP echo agent at port 50162
// snmpListen = new Snmp(new DefaultUdpTransportMapping(new
// UdpAddress(50162), true));
snmp = new Snmp(new DefaultUdpTransportMapping());
snmp.listen();
CommandResponder listener = new CommandResponder() {
@Override
public void processPdu(CommandResponderEvent event) {
LOG.info(event.getTransportMapping().getListenAddress() + " Get request: {}", event.getPDU());
PDU pdu = new PDU(event.getPDU()); // echo
pdu.setType(PDU.RESPONSE);
pdu.setRequestID(event.getPDU().getRequestID());
CommunityTarget respTarget = new CommunityTarget(event.getPeerAddress(), new OctetString("public"));
// respTarget.setRetries(2);
// respTarget.setTimeout(1500);
// respTarget.setVersion(SnmpConstants.version2c);
try { // send an empty response PDU
snmp.send(pdu, respTarget);
} catch (IOException e) {
LOG.error(null, e);
}
}
};
snmp.addNotificationListener(new UdpAddress(50162), listener);
snmp.addNotificationListener(new UdpAddress(50168), listener);
// session to send
target1 = new CommunityTarget(UdpAddress.parse("localhost/50162"), new OctetString("public"));
// target.setRetries(2);
// target.setTimeout(1500);
target1.setVersion(SnmpConstants.version2c); // support getBulk
target2 = new CommunityTarget(UdpAddress.parse("localhost/50168"), new OctetString("public"));
}
@AfterClass
public static void destroy() throws IOException {
snmp.close();
}
@Test
public void testSnmpSend() throws InterruptedException, IOException {
PDU pdu = new PDU();
pdu.add(new VariableBinding(new OID(new int[] { 1, 3, 6, 1, 2, 1, 1, 1 })));
checkResponse(snmp.get(pdu, target1));
checkResponse(snmp.getNext(pdu, target1));
checkResponse(snmp.getBulk(pdu, target1));
checkResponse(snmp.set(pdu, target1));
checkResponse(snmp.inform(pdu, target1));
pdu.setType(PDU.TRAP);
snmp.send(pdu, target1);
}
@Test
public void testSnmpSendAsync() throws Exception {
// creating PDU
final PDU pdu = new PDU();
pdu.add(new VariableBinding(new OID(new int[] { 1, 3, 6, 1, 2, 1, 1, 1 })));
pdu.add(new VariableBinding(new OID(new int[] { 1, 3, 6, 1, 2, 1, 1, 2 })));
pdu.setType(PDU.GETNEXT);
// sending request
final ResponseListener listener = new ResponseListener() {
public void onResponse(ResponseEvent event) {
// important!!!
((Snmp) event.getSource()).cancel(event.getRequest(), this);
checkResponse(event);
synchronized (pdu) {
pdu.notifyAll();
}
}
};
snmp.getNext(pdu, target2, null, listener);
synchronized (pdu) {
pdu.wait(5000);
}
}
private void checkResponse(ResponseEvent event) {
if (event == null) {
Assert.fail("response timeout");
} else if (event.getError() != null) {
LOG.error("Get response error", event.getError());
Assert.fail("failed: " + event.getError().getLocalizedMessage());
} else if (event.getResponse() == null) {
Assert.fail("response timeout");
} else
LOG.info("Get response {}: {}", Thread.currentThread(), event.getResponse());
}
@Test
public void testTable() {
// TableUtils util = new TableUtils(snmp,new DefaultPDUFactory());
// OID oidIndex;
// OID oidStatus;
// VariableBinding[] values;
// util.createRow(target1, oidStatus, oidIndex, values);
// util.destroyRow(target1, oidIndex, oidIndex);
// OID[] columnOIDs;
// util.getTable(target1, columnOIDs, null, oidIndex);
}
}