TLSTM: Connection using Agent certificate subject Alternative name

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();
}