use of org.apache.qpid.jms.sasl.ExternalMechanism in project activemq-artemis by apache.
the class JMSSaslExternalTest method testOutbound.
@Test
public void testOutbound() throws Exception {
final Map<String, Object> config = new LinkedHashMap<>();
config.put(TransportConstants.HOST_PROP_NAME, "localhost");
config.put(TransportConstants.PORT_PROP_NAME, String.valueOf(61616));
config.put(TransportConstants.KEYSTORE_PATH_PROP_NAME, "client_not_revoked.jks");
config.put(TransportConstants.KEYSTORE_PASSWORD_PROP_NAME, "changeit");
config.put(TransportConstants.TRUSTSTORE_PATH_PROP_NAME, "truststore.jks");
config.put(TransportConstants.TRUSTSTORE_PASSWORD_PROP_NAME, "changeit");
config.put(TransportConstants.NEED_CLIENT_AUTH_PROP_NAME, true);
config.put(TransportConstants.SSL_ENABLED_PROP_NAME, true);
final AtomicBoolean connectionOpened = new AtomicBoolean();
final AtomicBoolean authFailed = new AtomicBoolean();
EventHandler eventHandler = new EventHandler() {
@Override
public void onRemoteOpen(org.apache.qpid.proton.engine.Connection connection) throws Exception {
connectionOpened.set(true);
}
@Override
public void onAuthFailed(ProtonHandler protonHandler, org.apache.qpid.proton.engine.Connection connection) {
authFailed.set(true);
}
};
final ClientSASLFactory clientSASLFactory = new ClientSASLFactory() {
@Override
public ClientSASL chooseMechanism(String[] availableMechanims) {
ExternalMechanism externalMechanism = new ExternalMechanism();
return new ClientSASL() {
@Override
public String getName() {
return externalMechanism.getName();
}
@Override
public byte[] getInitialResponse() {
return externalMechanism.getInitialResponse();
}
@Override
public byte[] getResponse(byte[] challenge) {
return new byte[0];
}
};
}
};
ProtonClientConnectionManager lifeCycleListener = new ProtonClientConnectionManager(new AMQPClientConnectionFactory(server, "myid", Collections.singletonMap(Symbol.getSymbol("myprop"), "propvalue"), 5000), Optional.of(eventHandler), clientSASLFactory);
ProtonClientProtocolManager protocolManager = new ProtonClientProtocolManager(new ProtonProtocolManagerFactory(), server);
NettyConnector connector = new NettyConnector(config, lifeCycleListener, lifeCycleListener, server.getExecutorFactory().getExecutor(), server.getExecutorFactory().getExecutor(), server.getScheduledPool(), protocolManager);
connector.start();
connector.createConnection();
try {
Wait.assertEquals(1, server::getConnectionCount);
Wait.assertTrue(connectionOpened::get);
Wait.assertFalse(authFailed::get);
lifeCycleListener.stop();
Wait.assertEquals(0, server::getConnectionCount);
} finally {
lifeCycleListener.stop();
}
}
Aggregations