/** * Copyright 2014-2017 Linagora, Université Joseph Fourier, Floralis * * The present code is developed in the scope of the joint LINAGORA - * Université Joseph Fourier - Floralis research program and is designated * as a "Result" pursuant to the terms and conditions of the LINAGORA * - Université Joseph Fourier - Floralis research program. Each copyright * holder of Results enumerated here above fully & independently holds complete * ownership of the complete Intellectual Property rights applicable to the whole * of said Results, and may freely exploit it in any manner which does not infringe * the moral rights of the other copyright holders. * * Licensed 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 net.roboconf.messaging.rabbitmq.internal; import static net.roboconf.messaging.rabbitmq.RabbitMqConstants.FACTORY_RABBITMQ; import static net.roboconf.messaging.rabbitmq.RabbitMqConstants.RABBITMQ_SERVER_IP; import static net.roboconf.messaging.rabbitmq.RabbitMqConstants.RABBITMQ_SERVER_PASSWORD; import static net.roboconf.messaging.rabbitmq.RabbitMqConstants.RABBITMQ_SERVER_USERNAME; import static net.roboconf.messaging.rabbitmq.RabbitMqConstants.RABBITMQ_SSL_AS_USER_DATA; import static net.roboconf.messaging.rabbitmq.RabbitMqConstants.RABBITMQ_SSL_KEY_MNGR_FACTORY; import static net.roboconf.messaging.rabbitmq.RabbitMqConstants.RABBITMQ_SSL_KEY_STORE_PASSPHRASE; import static net.roboconf.messaging.rabbitmq.RabbitMqConstants.RABBITMQ_SSL_KEY_STORE_PATH; import static net.roboconf.messaging.rabbitmq.RabbitMqConstants.RABBITMQ_SSL_KEY_STORE_TYPE; import static net.roboconf.messaging.rabbitmq.RabbitMqConstants.RABBITMQ_SSL_PROTOCOL; import static net.roboconf.messaging.rabbitmq.RabbitMqConstants.RABBITMQ_SSL_TRUST_MNGR_FACTORY; import static net.roboconf.messaging.rabbitmq.RabbitMqConstants.RABBITMQ_SSL_TRUST_STORE_PASSPHRASE; import static net.roboconf.messaging.rabbitmq.RabbitMqConstants.RABBITMQ_SSL_TRUST_STORE_PATH; import static net.roboconf.messaging.rabbitmq.RabbitMqConstants.RABBITMQ_SSL_TRUST_STORE_TYPE; import java.util.HashMap; import java.util.Map; import org.junit.Assert; import org.junit.Assume; import org.junit.BeforeClass; import org.junit.Test; import com.rabbitmq.client.Channel; import net.roboconf.core.model.beans.Application; import net.roboconf.core.model.beans.ApplicationTemplate; import net.roboconf.messaging.api.MessagingConstants; import net.roboconf.messaging.api.extensions.MessagingContext.RecipientKind; import net.roboconf.messaging.api.jmx.RoboconfMessageQueue; import net.roboconf.messaging.rabbitmq.RabbitMqConstants; import net.roboconf.messaging.rabbitmq.internal.utils.RabbitMqTestUtils; /** * @author Vincent Zurczak - Linagora */ public class RabbitMqClientTest { private static boolean rabbitMqIsRunning = false; @BeforeClass public static void checkRabbitMqIsRunning() throws Exception { rabbitMqIsRunning = RabbitMqTestUtils.checkRabbitMqIsRunning(); } @Test public void testConnectAndDisconnect() throws Exception { Assume.assumeTrue( rabbitMqIsRunning ); Map<String,String> configuration = new HashMap<> (); configuration.put( RABBITMQ_SERVER_IP, "localhost" ); configuration.put( RABBITMQ_SERVER_USERNAME, "guest" ); configuration.put( RABBITMQ_SERVER_PASSWORD, "guest" ); RabbitMqClient client = new RabbitMqClient( null, configuration, RecipientKind.DM ); client.setOwnerProperties( RecipientKind.DM, "domain", "app", "/root" ); Assert.assertEquals( RabbitMqConstants.FACTORY_RABBITMQ, client.getMessagingType()); Assert.assertFalse( client.isConnected()); Assert.assertNull( client.channel ); RoboconfMessageQueue messagesQueue = new RoboconfMessageQueue(); client.setMessageQueue( messagesQueue ); client.openConnection(); Assert.assertNotNull( client.channel ); Assert.assertNotNull( client.consumerTag ); Assert.assertTrue( client.isConnected()); // openConnection is idem-potent Channel oldChannel = client.channel; client.openConnection(); Assert.assertEquals( oldChannel, client.channel ); // Delete server artifacts client.deleteMessagingServerArtifacts( new Application( "app", new ApplicationTemplate())); client.closeConnection(); Assert.assertNull( client.channel ); Assert.assertNull( client.consumerTag ); // closeConnection is idem-potent client.closeConnection(); Assert.assertNull( client.channel ); } @Test public void testGetQueueName() throws Exception { Map<String,String> configuration = new HashMap<> (); configuration.put( RABBITMQ_SERVER_IP, "localhost" ); configuration.put( RABBITMQ_SERVER_USERNAME, "guest" ); configuration.put( RABBITMQ_SERVER_PASSWORD, "guest" ); RabbitMqClient client = new RabbitMqClient( null, configuration, RecipientKind.DM ); client.setOwnerProperties( RecipientKind.DM, "domain", "app", "/root" ); Assert.assertEquals( "domain.roboconf-dm", client.getQueueName()); client.setOwnerProperties( RecipientKind.AGENTS, "domain", "app", "/root" ); Assert.assertEquals( "domain.app.root", client.getQueueName()); client.setOwnerProperties( RecipientKind.AGENTS, "domain1", "app", "/root" ); Assert.assertEquals( "domain1.app.root", client.getQueueName()); } @Test public void testFilteringOfSslProperties() throws Exception { // No value for the "pass.as.user.data" Map<String,String> configuration = new HashMap<> (); configuration.put( RABBITMQ_SERVER_IP, "localhost" ); configuration.put( RABBITMQ_SERVER_USERNAME, "guest" ); configuration.put( RABBITMQ_SERVER_PASSWORD, "guest" ); configuration.put( RABBITMQ_SSL_KEY_STORE_PASSPHRASE, "1" ); configuration.put( RABBITMQ_SSL_KEY_STORE_TYPE, "2" ); configuration.put( RABBITMQ_SSL_KEY_STORE_PATH, "3" ); configuration.put( RABBITMQ_SSL_KEY_MNGR_FACTORY, "4" ); configuration.put( RABBITMQ_SSL_TRUST_MNGR_FACTORY, "5" ); configuration.put( RABBITMQ_SSL_TRUST_STORE_PASSPHRASE, "6" ); configuration.put( RABBITMQ_SSL_TRUST_STORE_PATH, "7" ); configuration.put( RABBITMQ_SSL_TRUST_STORE_TYPE, "8" ); configuration.put( RABBITMQ_SSL_PROTOCOL, "9" ); final int beforeCpt = configuration.size(); // Remember we add the messaging type as a new property. // We also set the value for "pass.as.user.data". RabbitMqClient client = new RabbitMqClient( null, configuration, RecipientKind.DM ); Assert.assertEquals( beforeCpt + 2, client.getConfiguration().size()); // "pass.as.user.data" is true => same behavior configuration.put( RABBITMQ_SSL_AS_USER_DATA, "true" ); client = new RabbitMqClient( null, configuration, RecipientKind.DM ); Assert.assertEquals( beforeCpt + 2, client.getConfiguration().size()); // "pass.as.user.data" is false => only the SSL protocol is kept configuration.put( RABBITMQ_SSL_AS_USER_DATA, "false" ); client = new RabbitMqClient( null, configuration, RecipientKind.DM ); Assert.assertEquals( 4 + 2, client.getConfiguration().size()); Assert.assertEquals( "localhost", client.getConfiguration().get( RABBITMQ_SERVER_IP )); Assert.assertEquals( "guest", client.getConfiguration().get( RABBITMQ_SERVER_USERNAME )); Assert.assertEquals( "guest", client.getConfiguration().get( RABBITMQ_SERVER_PASSWORD )); Assert.assertEquals( "9", client.getConfiguration().get( RABBITMQ_SSL_PROTOCOL )); Assert.assertEquals( FACTORY_RABBITMQ, client.getConfiguration().get( MessagingConstants.MESSAGING_TYPE_PROPERTY )); // "pass.as.user.data" has an invalid value => same as "true" configuration.put( RABBITMQ_SSL_AS_USER_DATA, "oops" ); client = new RabbitMqClient( null, configuration, RecipientKind.DM ); Assert.assertEquals( beforeCpt + 2, client.getConfiguration().size()); Assert.assertEquals( "true", client.getConfiguration().get( RABBITMQ_SSL_AS_USER_DATA )); } }