/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.activemq.security; import java.net.URL; import java.util.Collection; import java.util.List; import org.apache.activemq.broker.BrokerService; import org.apache.activemq.network.NetworkBridge; import org.apache.activemq.network.NetworkConnector; import org.apache.xbean.spring.context.ClassPathXmlApplicationContext; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Unit test for https://issues.apache.org/jira/browse/AMQ-5943. * Creates a network bridge to a broker that is configured for * JaasDualAuthenticationPlugin. * The broker that creates the network bridge does not set a * username/password on the nc configuration but expects to be * authenticated via its SSL certificate. * This test uses these external configuration files from * src/test/resources/ * - org/apache/activemq/security/JaasDualAuthenticationNetworkBridgeTest.xml * - login-JaasDualAuthenticationNetworkBridgeTest.config * - users-JaasDualAuthenticationNetworkBridgeTest.properties * - groups-JaasDualAuthenticationNetworkBridgeTest.properties * - ssl-domain-JaasDualAuthenticationNetworkBridgeTest.properties */ public class JaasDualAuthenticationNetworkBridgeTest { protected String CONFIG_FILE="org/apache/activemq/security/JaasDualAuthenticationNetworkBridge.xml"; protected static Logger LOG = LoggerFactory.getLogger(JaasDualAuthenticationNetworkBridgeTest.class); private BrokerService broker1 = null; private BrokerService broker2 = null; /** * @throws java.lang.Exception */ @Before public void setUp() throws Exception { LOG.info("Starting up"); String path = null; URL resource = JaasDualAuthenticationNetworkBridgeTest.class.getClassLoader().getResource("login-JaasDualAuthenticationNetworkBridge.config"); if (resource != null) { path = resource.getFile(); System.setProperty("java.security.auth.login.config", path); } LOG.info("Path to login config: " + path); try { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(CONFIG_FILE); broker1 = (BrokerService)context.getBean("broker1"); broker2 = (BrokerService)context.getBean("broker2"); } catch(Exception e) { LOG.error("Error: " + e.getMessage()); throw e; } broker2.start(); broker1.start(); } /** * @throws java.lang.Exception */ @After public void tearDown() throws Exception { LOG.info("Shutting down"); if (broker1 != null && broker1.isStarted()) { LOG.info("Broker still running, stopping it now."); broker1.stop(); } else { LOG.info("Broker1 not running, nothing to shutdown."); } if (broker2 != null && broker2.isStarted()) { LOG.info("Broker still running, stopping it now."); broker2.stop(); } else { LOG.info("Broker2 not running, nothing to shutdown."); } } /** * Waits 5 seconds for the network bridge between broker 1 and 2 to be * established, then checks if the bridge exists, by querying broker1. * * @throws Exception is network bridge does not exist between both * broker instances. */ @Test public void testNetworkBridgeUsingJaasDualAuthenticationPlugin() throws Exception { LOG.info("testNetworkBridgeUsingJaasDualAuthenticationPlugin() called."); try { // give 5 seconds for broker instances to establish network bridge Thread.sleep(5000); // verify that network bridge is established Assert.assertNotNull(broker1); List<NetworkConnector> ncs = broker1.getNetworkConnectors(); Assert.assertNotNull("Network Connector not found.", ncs); Assert.assertFalse("Network Connector not found.", ncs.isEmpty()); NetworkConnector nc =(NetworkConnector)ncs.get(0); Collection<NetworkBridge> bridges = nc.activeBridges(); Assert.assertFalse("Network bridge not established to broker 2", bridges.isEmpty()); Assert.assertTrue("Network bridge not established to broker 2", bridges.size() == 1); for (NetworkBridge nb : bridges) { Assert.assertTrue(nb.getRemoteBrokerId() != null); } LOG.info("Network bridge is correctly established."); } catch (java.lang.InterruptedException ex) { LOG.warn(ex.getMessage()); } } }