Search in sources :

Example 1 with GssapiMechanism

use of org.apache.qpid.jms.sasl.GssapiMechanism in project activemq-artemis by apache.

the class JMSSaslGssapiTest method testOutboundWithSlowMech.

@Test
public void testOutboundWithSlowMech() throws Exception {
    final Map<String, Object> config = new LinkedHashMap<>();
    config.put(TransportConstants.HOST_PROP_NAME, "localhost");
    config.put(TransportConstants.PORT_PROP_NAME, String.valueOf(AMQP_PORT));
    final ClientSASLFactory clientSASLFactory = new ClientSASLFactory() {

        @Override
        public ClientSASL chooseMechanism(String[] availableMechanims) {
            GssapiMechanism gssapiMechanism = new GssapiMechanism();
            return new ClientSASL() {

                @Override
                public String getName() {
                    return gssapiMechanism.getName();
                }

                @Override
                public byte[] getInitialResponse() {
                    gssapiMechanism.setUsername("client");
                    gssapiMechanism.setServerName("localhost");
                    try {
                        return gssapiMechanism.getInitialResponse();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    return new byte[0];
                }

                @Override
                public byte[] getResponse(byte[] challenge) {
                    try {
                        // simulate a slow client
                        TimeUnit.SECONDS.sleep(4);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    try {
                        return gssapiMechanism.getChallengeResponse(challenge);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    return new byte[0];
                }
            };
        }
    };
    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);
        }
    };
    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();
    }
}
Also used : ProtonProtocolManagerFactory(org.apache.activemq.artemis.protocol.amqp.broker.ProtonProtocolManagerFactory) Connection(javax.jms.Connection) EventHandler(org.apache.activemq.artemis.protocol.amqp.proton.handler.EventHandler) GssapiMechanism(org.apache.qpid.jms.sasl.GssapiMechanism) ProtonHandler(org.apache.activemq.artemis.protocol.amqp.proton.handler.ProtonHandler) ProtonClientProtocolManager(org.apache.activemq.artemis.protocol.amqp.client.ProtonClientProtocolManager) ProtonClientConnectionManager(org.apache.activemq.artemis.protocol.amqp.client.ProtonClientConnectionManager) NettyConnector(org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnector) JMSSecurityException(javax.jms.JMSSecurityException) LinkedHashMap(java.util.LinkedHashMap) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) ClientSASL(org.apache.activemq.artemis.protocol.amqp.sasl.ClientSASL) AMQPClientConnectionFactory(org.apache.activemq.artemis.protocol.amqp.client.AMQPClientConnectionFactory) ClientSASLFactory(org.apache.activemq.artemis.protocol.amqp.sasl.ClientSASLFactory) Test(org.junit.Test)

Aggregations

LinkedHashMap (java.util.LinkedHashMap)1 AtomicBoolean (java.util.concurrent.atomic.AtomicBoolean)1 Connection (javax.jms.Connection)1 JMSSecurityException (javax.jms.JMSSecurityException)1 NettyConnector (org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnector)1 ProtonProtocolManagerFactory (org.apache.activemq.artemis.protocol.amqp.broker.ProtonProtocolManagerFactory)1 AMQPClientConnectionFactory (org.apache.activemq.artemis.protocol.amqp.client.AMQPClientConnectionFactory)1 ProtonClientConnectionManager (org.apache.activemq.artemis.protocol.amqp.client.ProtonClientConnectionManager)1 ProtonClientProtocolManager (org.apache.activemq.artemis.protocol.amqp.client.ProtonClientProtocolManager)1 EventHandler (org.apache.activemq.artemis.protocol.amqp.proton.handler.EventHandler)1 ProtonHandler (org.apache.activemq.artemis.protocol.amqp.proton.handler.ProtonHandler)1 ClientSASL (org.apache.activemq.artemis.protocol.amqp.sasl.ClientSASL)1 ClientSASLFactory (org.apache.activemq.artemis.protocol.amqp.sasl.ClientSASLFactory)1 GssapiMechanism (org.apache.qpid.jms.sasl.GssapiMechanism)1 Test (org.junit.Test)1