package org.springframework.cloud.cloudfoundry; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.when; import java.net.URI; import java.util.List; import org.junit.Test; import org.springframework.cloud.service.ServiceInfo; import org.springframework.cloud.service.common.AmqpServiceInfo; /** * * @author Ramnivas Laddad * */ public class CloudFoundryConnectorAmqpServiceTest extends AbstractCloudFoundryConnectorTest { protected static final String hostname2 = "11.21.31.41"; @Test public void rabbitServiceCreationWithTags() { when(mockEnvironment.getEnvValue("VCAP_SERVICES")) .thenReturn(getServicesPayload( getRabbitServicePayloadWithTags("rabbit-1", hostname, port, username, password, "q-1", "vhost1"), getRabbitServicePayloadWithTags("rabbit-2", hostname, port, username, password, "q-2", "vhost2"))); List<ServiceInfo> serviceInfos = testCloudConnector.getServiceInfos(); assertServiceFoundOfType(serviceInfos, "rabbit-1", AmqpServiceInfo.class); assertServiceFoundOfType(serviceInfos, "rabbit-2", AmqpServiceInfo.class); } @Test public void rabbitServiceCreationWithManagementUri() { when(mockEnvironment.getEnvValue("VCAP_SERVICES")) .thenReturn(getServicesPayload( getRabbitServicePayloadWithTags("rabbit-1", hostname, port, username, password, "q-1", "vhost1"))); String expectedManagementUri = "http://" + username + ":" + password + "@" + hostname + "/api"; List<ServiceInfo> serviceInfos = testCloudConnector.getServiceInfos(); assertServiceFoundOfType(serviceInfos, "rabbit-1", AmqpServiceInfo.class); AmqpServiceInfo amqpServiceInfo = (AmqpServiceInfo) serviceInfos.get(0); assertEquals(amqpServiceInfo.getManagementUri(), expectedManagementUri); } @Test public void rabbitServiceCreationWithoutManagementUri() { when(mockEnvironment.getEnvValue("VCAP_SERVICES")) .thenReturn(getServicesPayload( getRabbitServicePayloadNoLabelNoTags("rabbit-1", hostname, port, username, password, "q-1", "vhost1"))); List<ServiceInfo> serviceInfos = testCloudConnector.getServiceInfos(); assertServiceFoundOfType(serviceInfos, "rabbit-1", AmqpServiceInfo.class); AmqpServiceInfo amqpServiceInfo = (AmqpServiceInfo) serviceInfos.get(0); assertNull(amqpServiceInfo.getManagementUri()); } @Test public void rabbitServiceCreationWithoutTags() { when(mockEnvironment.getEnvValue("VCAP_SERVICES")) .thenReturn(getServicesPayload( getRabbitServicePayloadWithoutTags("rabbit-1", hostname, port, username, password, "q-1", "vhost1"), getRabbitServicePayloadWithoutTags("rabbit-2", hostname, port, username, password, "q-2", "vhost2"))); List<ServiceInfo> serviceInfos = testCloudConnector.getServiceInfos(); assertServiceFoundOfType(serviceInfos, "rabbit-1", AmqpServiceInfo.class); assertServiceFoundOfType(serviceInfos, "rabbit-2", AmqpServiceInfo.class); } @Test public void rabbitServiceCreationMultipleUris() { when(mockEnvironment.getEnvValue("VCAP_SERVICES")) .thenReturn(getServicesPayload( getRabbitServicePayloadMultipleUris("rabbit-1", hostname, hostname2, port, username, password, "q-1", "vhost1"), getRabbitServicePayloadMultipleUris("rabbit-2", hostname, hostname2, port, username, password, "q-2", "vhost2"))); List<ServiceInfo> serviceInfos = testCloudConnector.getServiceInfos(); assertServiceFoundOfType(serviceInfos, "rabbit-1", AmqpServiceInfo.class); assertServiceFoundOfType(serviceInfos, "rabbit-2", AmqpServiceInfo.class); AmqpServiceInfo amqpServiceInfo = (AmqpServiceInfo) serviceInfos.get(0); assertNotNull(amqpServiceInfo.getUri()); assertTrue(amqpServiceInfo.getUri().contains(hostname)); assertNotNull(amqpServiceInfo.getManagementUri()); assertTrue(amqpServiceInfo.getManagementUri().contains(hostname)); assertNotNull(amqpServiceInfo.getUris()); assertEquals(2, amqpServiceInfo.getUris().size()); assertTrue(amqpServiceInfo.getUris().get(0).contains(hostname)); assertTrue(amqpServiceInfo.getUris().get(1).contains(hostname2)); assertNotNull(amqpServiceInfo.getManagementUris()); assertEquals(2, amqpServiceInfo.getManagementUris().size()); assertTrue(amqpServiceInfo.getManagementUris().get(0).contains(hostname)); assertTrue(amqpServiceInfo.getManagementUris().get(1).contains(hostname2)); } @Test public void rabbitServiceCreationNoLabelNoTags() { when(mockEnvironment.getEnvValue("VCAP_SERVICES")) .thenReturn(getServicesPayload( getRabbitServicePayloadNoLabelNoTags("rabbit-1", hostname, port, username, password, "q-1", "vhost1"), getRabbitServicePayloadNoLabelNoTags("rabbit-2", hostname, port, username, password, "q-2", "vhost2"))); List<ServiceInfo> serviceInfos = testCloudConnector.getServiceInfos(); assertServiceFoundOfType(serviceInfos, "rabbit-1", AmqpServiceInfo.class); assertServiceFoundOfType(serviceInfos, "rabbit-2", AmqpServiceInfo.class); } @Test public void rabbitServiceCreationNoLabelNoTagsSecure() { when(mockEnvironment.getEnvValue("VCAP_SERVICES")) .thenReturn(getServicesPayload( getRabbitServicePayloadNoLabelNoTagsSecure("rabbit-1", hostname, port, username, password, "q-1", "vhost1"), getRabbitServicePayloadNoLabelNoTagsSecure("rabbit-2", hostname, port, username, password, "q-2", "vhost2"))); List<ServiceInfo> serviceInfos = testCloudConnector.getServiceInfos(); assertServiceFoundOfType(serviceInfos, "rabbit-1", AmqpServiceInfo.class); assertServiceFoundOfType(serviceInfos, "rabbit-2", AmqpServiceInfo.class); } @Test public void qpidServiceCreationNoLabelNoTags() throws Exception { when(mockEnvironment.getEnvValue("VCAP_SERVICES")) .thenReturn(getServicesPayload( getQpidServicePayloadNoLabelNoTags("qpid-1", hostname, port, username, password, "q-1", "vhost1"), getQpidServicePayloadNoLabelNoTags("qpid-2", hostname, port, username, password, "q-2", "vhost2"))); List<ServiceInfo> serviceInfos = testCloudConnector.getServiceInfos(); assertServiceFoundOfType(serviceInfos, "qpid-1", AmqpServiceInfo.class); assertServiceFoundOfType(serviceInfos, "qpid-2", AmqpServiceInfo.class); AmqpServiceInfo serviceInfo = (AmqpServiceInfo) getServiceInfo(serviceInfos, "qpid-1"); assertNotNull(serviceInfo); assertEquals(username, serviceInfo.getUserName()); assertEquals(password, serviceInfo.getPassword()); assertEquals("vhost1", serviceInfo.getVirtualHost()); URI uri = new URI(serviceInfo.getUri()); assertTrue(uri.getQuery().contains("tcp://" + hostname + ":" + port)); } private String getRabbitServicePayloadWithoutTags(String serviceName, String hostname, int port, String user, String password, String name, String vHost) { return getAmqpServicePayload("test-rabbit-info-with-label-no-tags.json", serviceName, hostname, port, user, password, name, vHost); } private String getRabbitServicePayloadNoLabelNoTags(String serviceName, String hostname, int port, String user, String password, String name, String vHost) { return getAmqpServicePayload("test-rabbit-info-no-label-no-tags.json", serviceName, hostname, port, user, password, name, vHost); } private String getRabbitServicePayloadNoLabelNoTagsSecure(String serviceName, String hostname, int port, String user, String password, String name, String vHost) { return getAmqpServicePayload("test-rabbit-info-no-label-no-tags-secure.json", serviceName, hostname, port, user, password, name, vHost); } private String getRabbitServicePayloadWithTags(String serviceName, String hostname, int port, String user, String password, String name, String vHost) { return getAmqpServicePayload("test-rabbit-info.json", serviceName, hostname, port, user, password, name, vHost); } private String getRabbitServicePayloadMultipleUris(String serviceName, String hostname, String hostname2, int port, String user, String password, String name, String vHost) { String payload = getAmqpServicePayload("test-rabbit-info-multiple-uris.json", serviceName, hostname, port, user, password, name, vHost); payload = payload.replace("$host1", hostname); payload = payload.replace("$host2", hostname2); return payload; } private String getQpidServicePayloadNoLabelNoTags(String serviceName, String hostname, int port, String user, String password, String name, String vHost) { return getAmqpServicePayload("test-qpid-info.json", serviceName, hostname, port, user, password, name, vHost); } private String getAmqpServicePayload(String filename, String serviceName, String hostname, int port, String user, String password, String name, String vHost) { String payload = readTestDataFile(filename); payload = payload.replace("$serviceName", serviceName); payload = payload.replace("$hostname", hostname); payload = payload.replace("$port", Integer.toString(port)); payload = payload.replace("$user", user); payload = payload.replace("$pass", password); payload = payload.replace("$name", name); payload = payload.replace("$virtualHost", vHost); return payload; } }