diff --git a/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/RabbitServiceInfoCreator.java b/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/AmqpServiceInfoCreator.java similarity index 59% rename from cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/RabbitServiceInfoCreator.java rename to cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/AmqpServiceInfoCreator.java index 65a5718..8c0d5c0 100644 --- a/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/RabbitServiceInfoCreator.java +++ b/cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/AmqpServiceInfoCreator.java @@ -2,20 +2,20 @@ package org.springframework.cloud.cloudfoundry; import java.util.Map; -import org.springframework.cloud.service.common.RabbitServiceInfo; +import org.springframework.cloud.service.common.AmqpServiceInfo; /** * * @author Ramnivas Laddad * */ -public class RabbitServiceInfoCreator extends CloudFoundryServiceInfoCreator { +public class AmqpServiceInfoCreator extends CloudFoundryServiceInfoCreator { - public RabbitServiceInfoCreator() { + public AmqpServiceInfoCreator() { super("rabbitmq"); } - public RabbitServiceInfo createServiceInfo(Map serviceData) { + public AmqpServiceInfo createServiceInfo(Map serviceData) { @SuppressWarnings("unchecked") Map credentials = (Map) serviceData.get("credentials"); @@ -26,7 +26,7 @@ public class RabbitServiceInfoCreator extends CloudFoundryServiceInfoCreator { +public class UserProvidedRabbitServiceInfoCreator extends UserProvidedServiceInfoCreator { public UserProvidedRabbitServiceInfoCreator() { super("amqp:"); } - public RabbitServiceInfo createServiceInfo(Map serviceData) { + public AmqpServiceInfo createServiceInfo(Map serviceData) { @SuppressWarnings("unchecked") Map credentials = (Map) serviceData.get("credentials"); @@ -18,7 +18,7 @@ public class UserProvidedRabbitServiceInfoCreator extends UserProvidedServiceInf String uri = (String) credentials.get("uri"); - return new RabbitServiceInfo(id, uri); + return new AmqpServiceInfo(id, uri); } } diff --git a/core/src/main/java/org/springframework/cloud/service/common/RabbitServiceInfo.java b/core/src/main/java/org/springframework/cloud/service/common/AmqpServiceInfo.java similarity index 87% rename from core/src/main/java/org/springframework/cloud/service/common/RabbitServiceInfo.java rename to core/src/main/java/org/springframework/cloud/service/common/AmqpServiceInfo.java index 6160342..5ae72bb 100644 --- a/core/src/main/java/org/springframework/cloud/service/common/RabbitServiceInfo.java +++ b/core/src/main/java/org/springframework/cloud/service/common/AmqpServiceInfo.java @@ -12,12 +12,12 @@ import org.springframework.cloud.util.UriInfo; * */ @ServiceLabel("rabbitmq") -public class RabbitServiceInfo extends UriBasedServiceInfo { - public RabbitServiceInfo(String id, String host, int port, String username, String password, String virtualHost) { +public class AmqpServiceInfo extends UriBasedServiceInfo { + public AmqpServiceInfo(String id, String host, int port, String username, String password, String virtualHost) { super(id, "amqp", host, port, username, password, virtualHost); } - public RabbitServiceInfo(String id, String uri) throws CloudException { + public AmqpServiceInfo(String id, String uri) throws CloudException { super(id, uri); } diff --git a/heroku-connector/src/main/java/org/springframework/cloud/heroku/AmqpServiceInfoCreator.java b/heroku-connector/src/main/java/org/springframework/cloud/heroku/AmqpServiceInfoCreator.java new file mode 100644 index 0000000..a139bd6 --- /dev/null +++ b/heroku-connector/src/main/java/org/springframework/cloud/heroku/AmqpServiceInfoCreator.java @@ -0,0 +1,25 @@ +package org.springframework.cloud.heroku; + +import org.springframework.cloud.service.common.AmqpServiceInfo; + +/** + * + * @author Ramnivas Laddad + * + */ +public class AmqpServiceInfoCreator extends HerokuServiceInfoCreator { + + public AmqpServiceInfoCreator() { + super("amqp"); + } + + @Override + public AmqpServiceInfo createServiceInfo(String id, String uri) { + return new AmqpServiceInfo(HerokuUtil.computeServiceName(id), uri); + } + + @Override + public String[] getEnvPrefixes() { + return new String[]{ "CLOUDAMQP_URL" }; + } +} diff --git a/heroku-connector/src/main/java/org/springframework/cloud/heroku/HerokuConnector.java b/heroku-connector/src/main/java/org/springframework/cloud/heroku/HerokuConnector.java index 624c72e..8149f12 100644 --- a/heroku-connector/src/main/java/org/springframework/cloud/heroku/HerokuConnector.java +++ b/heroku-connector/src/main/java/org/springframework/cloud/heroku/HerokuConnector.java @@ -2,7 +2,6 @@ package org.springframework.cloud.heroku; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.List; import java.util.Map; diff --git a/heroku-connector/src/main/resources/META-INF/services/org.springframework.cloud.heroku.HerokuServiceInfoCreator b/heroku-connector/src/main/resources/META-INF/services/org.springframework.cloud.heroku.HerokuServiceInfoCreator index f47d5cf..3743141 100644 --- a/heroku-connector/src/main/resources/META-INF/services/org.springframework.cloud.heroku.HerokuServiceInfoCreator +++ b/heroku-connector/src/main/resources/META-INF/services/org.springframework.cloud.heroku.HerokuServiceInfoCreator @@ -1,3 +1,4 @@ org.springframework.cloud.heroku.PostgresqlServiceInfoCreator org.springframework.cloud.heroku.MysqlServiceInfoCreator -org.springframework.cloud.heroku.MongoServiceInfoCreator \ No newline at end of file +org.springframework.cloud.heroku.MongoServiceInfoCreator +org.springframework.cloud.heroku.AmqpServiceInfoCreator \ No newline at end of file diff --git a/heroku-connector/src/test/java/org/springframework/cloud/heroku/HerokuConnectorAmqpServiceTest.java b/heroku-connector/src/test/java/org/springframework/cloud/heroku/HerokuConnectorAmqpServiceTest.java new file mode 100644 index 0000000..5b02de1 --- /dev/null +++ b/heroku-connector/src/test/java/org/springframework/cloud/heroku/HerokuConnectorAmqpServiceTest.java @@ -0,0 +1,56 @@ +package org.springframework.cloud.heroku; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.when; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.junit.Test; +import org.springframework.cloud.service.ServiceInfo; +import org.springframework.cloud.service.common.AmqpServiceInfo; + +/** + * + * @author Ramnivas Laddad + * + */ +public class HerokuConnectorAmqpServiceTest extends AbstractHerokuConnectorTest { + + + @Test + public void amqpServiceCreation() { + Map env = new HashMap(); + String amqpUrl = getAmqpServiceUrl("db"); + env.put("CLOUDAMQP_URL", amqpUrl); + when(mockEnvironment.getEnv()).thenReturn(env); + + List serviceInfos = testCloudConnector.getServiceInfos(); + ServiceInfo serviceInfo = getServiceInfo(serviceInfos, "CLOUDAMQP"); + assertNotNull(serviceInfo); + assertTrue(serviceInfo instanceof AmqpServiceInfo); + assertAmqpServiceInfo((AmqpServiceInfo)serviceInfo, "db"); + } + + private String getAmqpServiceUrl(String name) { + String template = "amqp://$username:$password@$hostname:$port/$virtualHost"; + + return template.replace("$username", username). + replace("$password", password). + replace("$hostname", hostname). + replace("$port", Integer.toString(port)). + replace("$virtualHost", name); + } + + protected void assertAmqpServiceInfo(AmqpServiceInfo serviceInfo, String virtualHost) { + assertEquals(hostname, serviceInfo.getHost()); + assertEquals(port, serviceInfo.getPort()); + assertEquals(username, serviceInfo.getUserName()); + assertEquals(password, serviceInfo.getPassword()); + assertEquals(virtualHost, serviceInfo.getPath()); + } + +} diff --git a/spring-service-connector/src/main/java/org/springframework/cloud/service/messaging/RabbitConnectionFactoryCreator.java b/spring-service-connector/src/main/java/org/springframework/cloud/service/messaging/RabbitConnectionFactoryCreator.java index 5bc707d..1ff8679 100644 --- a/spring-service-connector/src/main/java/org/springframework/cloud/service/messaging/RabbitConnectionFactoryCreator.java +++ b/spring-service-connector/src/main/java/org/springframework/cloud/service/messaging/RabbitConnectionFactoryCreator.java @@ -4,7 +4,7 @@ import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.cloud.service.AbstractServiceConnectorCreator; import org.springframework.cloud.service.ServiceConnectorConfig; -import org.springframework.cloud.service.common.RabbitServiceInfo; +import org.springframework.cloud.service.common.AmqpServiceInfo; /** * Simplified access to creating RabbitMQ service objects. @@ -15,9 +15,9 @@ import org.springframework.cloud.service.common.RabbitServiceInfo; * */ -public class RabbitConnectionFactoryCreator extends AbstractServiceConnectorCreator { +public class RabbitConnectionFactoryCreator extends AbstractServiceConnectorCreator { @Override - public ConnectionFactory create(RabbitServiceInfo serviceInfo, ServiceConnectorConfig serviceConnectorConfiguration) { + public ConnectionFactory create(AmqpServiceInfo serviceInfo, ServiceConnectorConfig serviceConnectorConfiguration) { CachingConnectionFactory connectionFactory = new CachingConnectionFactory(serviceInfo.getHost()); connectionFactory.setVirtualHost(serviceInfo.getVirtualHost()); connectionFactory.setUsername(serviceInfo.getUserName()); diff --git a/spring-service-connector/src/test/java/org/springframework/cloud/CloudTest.java b/spring-service-connector/src/test/java/org/springframework/cloud/CloudTest.java index 420d246..6cc91c7 100644 --- a/spring-service-connector/src/test/java/org/springframework/cloud/CloudTest.java +++ b/spring-service-connector/src/test/java/org/springframework/cloud/CloudTest.java @@ -19,7 +19,7 @@ import org.springframework.cloud.service.ServiceConnectorCreator; import org.springframework.cloud.service.ServiceInfo; import org.springframework.cloud.service.common.MongoServiceInfo; import org.springframework.cloud.service.common.MysqlServiceInfo; -import org.springframework.cloud.service.common.RabbitServiceInfo; +import org.springframework.cloud.service.common.AmqpServiceInfo; import org.springframework.cloud.service.common.RedisServiceInfo; import org.springframework.cloud.service.common.RelationalServiceInfo; import org.springframework.cloud.service.relational.MysqlDataSourceCreator; @@ -105,7 +105,7 @@ public class CloudTest extends StubCloudConnectorTest { @Test public void servicePropsRabbit() { String serviceId = "my-rabbit"; - RabbitServiceInfo rabbitServiceInfo = createRabbitService(serviceId); + AmqpServiceInfo rabbitServiceInfo = createRabbitService(serviceId); CloudConnector stubCloudConnector = getTestCloudConnector(rabbitServiceInfo); Cloud testCloud = new Cloud(stubCloudConnector, serviceCreators); @@ -134,7 +134,7 @@ public class CloudTest extends StubCloudConnectorTest { assertBasicProps(leadKey, serviceInfo, cloudProperties); } - private void assertRabbitProps(String leadKey, RabbitServiceInfo serviceInfo, Properties cloudProperties) { + private void assertRabbitProps(String leadKey, AmqpServiceInfo serviceInfo, Properties cloudProperties) { assertBasicProps(leadKey, serviceInfo, cloudProperties); } } diff --git a/spring-service-connector/src/test/java/org/springframework/cloud/StubCloudConnectorTest.java b/spring-service-connector/src/test/java/org/springframework/cloud/StubCloudConnectorTest.java index 0afe6e3..2c442e8 100644 --- a/spring-service-connector/src/test/java/org/springframework/cloud/StubCloudConnectorTest.java +++ b/spring-service-connector/src/test/java/org/springframework/cloud/StubCloudConnectorTest.java @@ -5,7 +5,7 @@ import org.springframework.cloud.service.ServiceInfo; import org.springframework.cloud.service.common.MongoServiceInfo; import org.springframework.cloud.service.common.MysqlServiceInfo; import org.springframework.cloud.service.common.PostgresqlServiceInfo; -import org.springframework.cloud.service.common.RabbitServiceInfo; +import org.springframework.cloud.service.common.AmqpServiceInfo; import org.springframework.cloud.service.common.RedisServiceInfo; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; @@ -64,8 +64,8 @@ abstract public class StubCloudConnectorTest { return new MongoServiceInfo(id, "10.20.30.40", 1234, "username", "password", "db"); } - protected RabbitServiceInfo createRabbitService(String id) { - return new RabbitServiceInfo(id, "10.20.30.40", 1234, "username", "password", "vh"); + protected AmqpServiceInfo createRabbitService(String id) { + return new AmqpServiceInfo(id, "10.20.30.40", 1234, "username", "password", "vh"); } protected RedisServiceInfo createRedisService(String id) { diff --git a/spring-service-connector/src/test/java/org/springframework/cloud/service/rabbit/RabbitConnectionFactoryCreatorTest.java b/spring-service-connector/src/test/java/org/springframework/cloud/service/rabbit/RabbitConnectionFactoryCreatorTest.java index f38f9b1..e085c23 100644 --- a/spring-service-connector/src/test/java/org/springframework/cloud/service/rabbit/RabbitConnectionFactoryCreatorTest.java +++ b/spring-service-connector/src/test/java/org/springframework/cloud/service/rabbit/RabbitConnectionFactoryCreatorTest.java @@ -5,7 +5,7 @@ import static org.junit.Assert.assertNotNull; import org.junit.Test; import org.springframework.amqp.rabbit.connection.ConnectionFactory; -import org.springframework.cloud.service.common.RabbitServiceInfo; +import org.springframework.cloud.service.common.AmqpServiceInfo; import org.springframework.cloud.service.messaging.RabbitConnectionFactoryCreator; import org.springframework.test.util.ReflectionTestUtils; @@ -26,18 +26,18 @@ public class RabbitConnectionFactoryCreatorTest { @Test public void cloudRabbitCreationNoConfig() throws Exception { - RabbitServiceInfo serviceInfo = createServiceInfo(); + AmqpServiceInfo serviceInfo = createServiceInfo(); ConnectionFactory connector = testCreator.create(serviceInfo, null); assertConnectorProperties(serviceInfo, connector); } - public RabbitServiceInfo createServiceInfo() { - return new RabbitServiceInfo("id", TEST_HOST, TEST_PORT, TEST_USERNAME, TEST_PASSWORD, TEST_VH); + public AmqpServiceInfo createServiceInfo() { + return new AmqpServiceInfo("id", TEST_HOST, TEST_PORT, TEST_USERNAME, TEST_PASSWORD, TEST_VH); } - private void assertConnectorProperties(RabbitServiceInfo serviceInfo, ConnectionFactory connector) { + private void assertConnectorProperties(AmqpServiceInfo serviceInfo, ConnectionFactory connector) { assertNotNull(connector); assertEquals(serviceInfo.getHost(), connector.getHost()); diff --git a/spring-service-connector/src/test/java/org/springframework/cloud/service/rabbit/RabbitConnectionFactoryFactoryTest.java b/spring-service-connector/src/test/java/org/springframework/cloud/service/rabbit/RabbitConnectionFactoryFactoryTest.java index a874da5..f863661 100644 --- a/spring-service-connector/src/test/java/org/springframework/cloud/service/rabbit/RabbitConnectionFactoryFactoryTest.java +++ b/spring-service-connector/src/test/java/org/springframework/cloud/service/rabbit/RabbitConnectionFactoryFactoryTest.java @@ -4,7 +4,7 @@ import org.mockito.Mock; import org.springframework.amqp.rabbit.connection.ConnectionFactory; import org.springframework.cloud.service.AbstractCloudServiceConnectorFactoryTest; import org.springframework.cloud.service.ServiceConnectorConfig; -import org.springframework.cloud.service.common.RabbitServiceInfo; +import org.springframework.cloud.service.common.AmqpServiceInfo; import org.springframework.cloud.service.messaging.RabbitConnectionFactoryFactory; /** @@ -12,7 +12,7 @@ import org.springframework.cloud.service.messaging.RabbitConnectionFactoryFactor * @author Ramnivas Laddad * */ -public class RabbitConnectionFactoryFactoryTest extends AbstractCloudServiceConnectorFactoryTest { +public class RabbitConnectionFactoryFactoryTest extends AbstractCloudServiceConnectorFactoryTest { @Mock ConnectionFactory mockConnector; public RabbitConnectionFactoryFactory createTestCloudServiceConnectorFactory(String id, ServiceConnectorConfig config) { @@ -27,7 +27,7 @@ public class RabbitConnectionFactoryFactoryTest extends AbstractCloudServiceConn return mockConnector; } - public RabbitServiceInfo getTestServiceInfo(String id) { - return new RabbitServiceInfo(id, "host", 0, "username", "password", "vh"); + public AmqpServiceInfo getTestServiceInfo(String id) { + return new AmqpServiceInfo(id, "host", 0, "username", "password", "vh"); } } diff --git a/spring-service-connector/src/test/java/org/springframework/cloud/service/rabbit/RabbitServiceInfoTest.java b/spring-service-connector/src/test/java/org/springframework/cloud/service/rabbit/RabbitServiceInfoTest.java index 51e676a..f6d33e2 100644 --- a/spring-service-connector/src/test/java/org/springframework/cloud/service/rabbit/RabbitServiceInfoTest.java +++ b/spring-service-connector/src/test/java/org/springframework/cloud/service/rabbit/RabbitServiceInfoTest.java @@ -3,7 +3,7 @@ package org.springframework.cloud.service.rabbit; import static org.junit.Assert.assertEquals; import org.junit.Test; -import org.springframework.cloud.service.common.RabbitServiceInfo; +import org.springframework.cloud.service.common.AmqpServiceInfo; /** * @@ -13,7 +13,7 @@ import org.springframework.cloud.service.common.RabbitServiceInfo; public class RabbitServiceInfoTest { @Test public void uriBasedParsing() { - RabbitServiceInfo serviceInfo = new RabbitServiceInfo("id", "amqp://myuser:mypass@myhost:12345/myvhost"); + AmqpServiceInfo serviceInfo = new AmqpServiceInfo("id", "amqp://myuser:mypass@myhost:12345/myvhost"); assertEquals("myhost", serviceInfo.getHost()); assertEquals(12345, serviceInfo.getPort()); @@ -24,38 +24,38 @@ public class RabbitServiceInfoTest { @Test(expected=IllegalArgumentException.class) public void badProtocol() { - new RabbitServiceInfo("id", "XX://myuser:mypass@myhost:12345/myvhost"); + new AmqpServiceInfo("id", "XX://myuser:mypass@myhost:12345/myvhost"); } @Test(expected=IllegalArgumentException.class) public void missingHost() { - new RabbitServiceInfo("id", "amqp://myuser:mypass@:12345/myvhost"); + new AmqpServiceInfo("id", "amqp://myuser:mypass@:12345/myvhost"); } @Test public void missingPort() { - RabbitServiceInfo serviceInfo = new RabbitServiceInfo("id", "amqp://myuser:mypass@myhost/myvhost"); + AmqpServiceInfo serviceInfo = new AmqpServiceInfo("id", "amqp://myuser:mypass@myhost/myvhost"); assertEquals(5672, serviceInfo.getPort()); // the default port is 5672 } @Test(expected=IllegalArgumentException.class) public void badUserInfo() { - new RabbitServiceInfo("id", "amqp://myuser@myhost/myvhost"); + new AmqpServiceInfo("id", "amqp://myuser@myhost/myvhost"); } @Test(expected=IllegalArgumentException.class) public void missingUserInfo() { - new RabbitServiceInfo("id", "amqp://myhost:12345/myvhost"); + new AmqpServiceInfo("id", "amqp://myhost:12345/myvhost"); } @Test public void missingVirtualHost() { - RabbitServiceInfo serviceInfo = new RabbitServiceInfo("id", "amqp://myuser:mypass@myhost:12345"); + AmqpServiceInfo serviceInfo = new AmqpServiceInfo("id", "amqp://myuser:mypass@myhost:12345"); assertEquals("/", serviceInfo.getVirtualHost()); } @Test(expected=IllegalArgumentException.class) public void badVirtualHost() { - new RabbitServiceInfo("id", "amqp://myuser:mypass@myhost:12345/a/b"); + new AmqpServiceInfo("id", "amqp://myuser:mypass@myhost:12345/a/b"); } }