This is the whole unit test which works as part of TLSTMTest
:
@Test
public void sendMessageWithPDUDnsCertPathVerification() throws Exception {
tlstmCR.listen();
final boolean[] messageReceived = { false, false, false };
CertifiedTarget<TlsAddress> certifiedTarget = new CertifiedTarget<>(new TlsAddress(tlstmCR.getListenAddress()),
new OctetString("localhost"), new OctetString(), CLIENT_FINGER_PRINT);
certifiedTarget.setTimeout(3000);
certifiedTarget.setRetries(0);
final CommandResponder commandResponder = new CommandResponder() {
public synchronized <A extends Address> void processPdu(CommandResponderEvent<A> event) {
messageReceived[event.getPDU().getVariableBindings().size()-2] = true;
if (messageReceived[2]) {
notify();
}
event.setProcessed(true);
}
};
DefaultTlsTmSecurityCallback securityCallback = new DefaultTlsTmSecurityCallback();
securityCallback.addAcceptedIssuerDN("CN=www.snmp4j.org, OU=Unit-Test, O=AGENTPP, L=Stuttgart, ST=Baden-Wuerttemberg, C=DE");
securityCallback.addSecurityNameMapping(
new OctetString(),
SecurityNameMapping.CertMappingType.SANDNSName,
new OctetString("localhost"), new OctetString("localhost"));
tlstmCR.setSecurityCallback(securityCallback);
Snmp snmpAgent = new Snmp(tlstmCR);
snmpAgent.addCommandResponder(commandResponder);
ScopedPDU scopedPDU = new ScopedPDU();
UnsignedInteger32 value1 = new UnsignedInteger32(91589156l);
OctetString value2 = new OctetString("peWadfnagnergrDFAAHAräöß394");
scopedPDU.add(new VariableBinding(SnmpConstants.snmp4jStatsRequestRetries, value1));
scopedPDU.add(new VariableBinding(SnmpConstants.snmpTrapCommunity, value2));
OctetString localEngineID = new OctetString(MPv3.createLocalEngineID());
Snmp snmp = new Snmp(tlstmCS);
((MPv3)snmp.getMessageDispatcher().getMessageProcessingModel(MPv3.ID)).setSecurityModels(
new SecurityModels().addSecurityModel(new TSM()));
((MPv3)snmpAgent.getMessageDispatcher().getMessageProcessingModel(MPv3.ID)).setSecurityModels(
new SecurityModels().addSecurityModel(new TSM(localEngineID, false)));
scopedPDU.setContextEngineID(localEngineID);
snmp.listen();
snmpAgent.setLocalEngine(localEngineID.getValue(), 1, 1);
snmpAgent.listen();
synchronized (commandResponder) {
snmp.send(scopedPDU, certifiedTarget);
ScopedPDU scopedPDU1 = (ScopedPDU) scopedPDU.clone();
scopedPDU1.add(new VariableBinding(SnmpConstants.sysServices, new Integer32(42)));
snmp.send(scopedPDU1, certifiedTarget);
ScopedPDU scopedPDU2 = (ScopedPDU) scopedPDU.clone();
scopedPDU1.add(new VariableBinding(SnmpConstants.sysContact, new OctetString("me")));
snmp.send(scopedPDU2, certifiedTarget);
commandResponder.wait(3000);
}
assertTrue(messageReceived[0]);
snmp.close();
snmpAgent.close();
}