package org.springframework.cloud.service.rabbit; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import com.rabbitmq.client.Address; import org.junit.Test; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.cloud.service.common.AmqpServiceInfo; import org.springframework.cloud.service.messaging.RabbitConnectionFactoryCreator; import org.springframework.test.util.ReflectionTestUtils; import java.net.URI; import java.util.Arrays; import java.util.List; /** * * @author Ramnivas Laddad * @author Scott Frederick * */ public class RabbitConnectionFactoryCreatorTest { private static final String TEST_HOST = "10.20.30.40"; private static final String TEST_HOST2 = "11.21.31.41"; private static final int TEST_PORT = 1234; private static final int TEST_PORT2 = 5678; private static final String TEST_USERNAME = "myuser"; private static final String TEST_PASSWORD = "mypass"; private static final String TEST_VH = "myVirtualHost"; private RabbitConnectionFactoryCreator testCreator = new RabbitConnectionFactoryCreator(); @Test public void cloudRabbitCreationNoUri() throws Exception { AmqpServiceInfo serviceInfo = new AmqpServiceInfo("id", TEST_HOST, TEST_PORT, TEST_USERNAME, TEST_PASSWORD, TEST_VH); ConnectionFactory connector = testCreator.create(serviceInfo, null); assertConnectorPropertiesMatchUri(connector, serviceInfo.getUri()); } @Test public void cloudRabbitCreationWithUri() throws Exception { String userinfo = String.format("%s:%s", TEST_USERNAME, TEST_PASSWORD); URI uri = new URI("amqp", userinfo, TEST_HOST, TEST_PORT, "/" + TEST_VH, null, null); AmqpServiceInfo serviceInfo = new AmqpServiceInfo("id", uri.toString()); ConnectionFactory connector = testCreator.create(serviceInfo, null); assertConnectorPropertiesMatchUri(connector, serviceInfo.getUri()); } @Test public void cloudRabbitCreationWithUris() throws Exception { String userinfo = String.format("%s:%s", TEST_USERNAME, TEST_PASSWORD); URI uri = new URI("amqp", userinfo, "0.0.0.0", 0, "/" + TEST_VH, null, null); URI uri1 = new URI("amqp", userinfo, TEST_HOST, TEST_PORT, "/" + TEST_VH, null, null); URI uri2 = new URI("amqp", userinfo, TEST_HOST2, TEST_PORT2, "/" + TEST_VH, null, null); List<String> uris = Arrays.asList(uri1.toString(), uri2.toString()); AmqpServiceInfo serviceInfo = new AmqpServiceInfo("id", uri.toString(), null, uris, null); ConnectionFactory connector = testCreator.create(serviceInfo, null); assertConnectorPropertiesMatchUri(connector, uri1.toString()); assertConnectorPropertiesMatchHosts(connector, uris); } private void assertConnectorPropertiesMatchUri(ConnectionFactory connector, String uriString) throws Exception { assertNotNull(connector); URI uri = new URI(uriString); assertEquals(uri.getHost(), connector.getHost()); assertEquals(uri.getPort(), connector.getPort()); com.rabbitmq.client.ConnectionFactory rabbitConnectionFactory = (com.rabbitmq.client.ConnectionFactory) ReflectionTestUtils.getField(connector, "rabbitConnectionFactory"); String[] userInfo = uri.getRawUserInfo().split(":"); assertEquals(userInfo[0], ReflectionTestUtils.getField(rabbitConnectionFactory, "username")); assertEquals(userInfo[1], ReflectionTestUtils.getField(rabbitConnectionFactory, "password")); assertTrue(uri.getPath().endsWith(connector.getVirtualHost())); } private void assertConnectorPropertiesMatchHosts(ConnectionFactory connector, List<String> uriStrings) throws Exception { Address[] addresses = (Address[]) ReflectionTestUtils.getField(connector, "addresses"); assertNotNull(addresses); assertEquals(uriStrings.size(), addresses.length); for (int i = 0; i < uriStrings.size(); i++) { URI uri = new URI(uriStrings.get(i)); assertEquals(uri.getHost(), addresses[i].getHost()); assertEquals(uri.getPort(), addresses[i].getPort()); } } }