package org.springframework.cloud.cloudfoundry; import static org.hamcrest.CoreMatchers.instanceOf; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; import org.junit.Test; import org.springframework.cloud.CloudException; import org.springframework.cloud.service.ServiceInfo; import org.springframework.cloud.service.common.MysqlServiceInfo; /** * * @author Ramnivas Laddad * @author Scott Frederick * */ public class CloudFoundryConnectorApplicationTest extends AbstractCloudFoundryConnectorTest { @Test public void isInMatchingEnvironment() { when(mockEnvironment.getEnvValue("VCAP_APPLICATION")).thenReturn(getApplicationInstanceInfo("myapp", "http://myapp.com")); assertTrue(testCloudConnector.isInMatchingCloud()); when(mockEnvironment.getEnvValue("VCAP_APPLICATION")).thenReturn(null); assertFalse(testCloudConnector.isInMatchingCloud()); } @Test public void applicationInstanceInfo() { when(mockEnvironment.getEnvValue("VCAP_APPLICATION")).thenReturn(getApplicationInstanceInfo("my-app", "foo.cf.com", "bar.cf.com")); assertEquals("my-app", testCloudConnector.getApplicationInstanceInfo().getAppId()); assertEquals(Arrays.asList("foo.cf.com", "bar.cf.com"), testCloudConnector.getApplicationInstanceInfo().getProperties().get("uris")); } private String getApplicationInstanceInfo(String name, String... uri) { String payload = readTestDataFile("test-application-info.json"); payload = payload.replace("$name", name); StringBuilder uris = new StringBuilder(); for (String u : uri) { if (uris.length() > 0) { uris.append(","); } uris.append("\""); uris.append(u); uris.append("\""); } payload = payload.replace("$uris", uris.toString()); return payload; } @Test public void servicesInfosWithNullServices() { when(mockEnvironment.getEnvValue("VCAP_SERVICES")).thenReturn(null); List<ServiceInfo> serviceInfos = testCloudConnector.getServiceInfos(); assertNotNull(serviceInfos); assertEquals(0, serviceInfos.size()); } @Test public void servicesInfosWithEmptyServices() { when(mockEnvironment.getEnvValue("VCAP_SERVICES")).thenReturn(""); List<ServiceInfo> serviceInfos = testCloudConnector.getServiceInfos(); assertNotNull(serviceInfos); assertEquals(0, serviceInfos.size()); } @Test(expected = CloudException.class) public void servicesInfosWithNonJsonServices() { when(mockEnvironment.getEnvValue("VCAP_SERVICES")).thenReturn("some value"); testCloudConnector.getServiceInfos(); } @Test public void serviceInfosWithMissingCredentials() { when(mockEnvironment.getEnvValue("VCAP_SERVICES")). thenReturn(getServicesPayload(readTestDataFile("test-credentials-missing.json"))); List<ServiceInfo> serviceInfos = testCloudConnector.getServiceInfos(); assertNotNull(serviceInfos); assertEquals(1, serviceInfos.size()); } @Test public void serviceInfosWithEmptyCredentials() { when(mockEnvironment.getEnvValue("VCAP_SERVICES")). thenReturn(getServicesPayload(readTestDataFile("test-credentials-empty.json"))); List<ServiceInfo> serviceInfos = testCloudConnector.getServiceInfos(); assertNotNull(serviceInfos); assertEquals(1, serviceInfos.size()); } @Test public void serviceInfosWithPostProcessedCredentials() { when(mockEnvironment.getEnvValue("VCAP_SERVICES")). thenReturn(getServicesPayload(readTestDataFile("test-credentials-post-processed.json"))); List<ServiceInfo> serviceInfos = testCloudConnector.getServiceInfos(); assertNotNull(serviceInfos); assertEquals(1, serviceInfos.size()); assertThat(serviceInfos.get(0), instanceOf(MysqlServiceInfo.class)); assertEquals(((MysqlServiceInfo) serviceInfos.get(0)).getUri(), "MYSQL://USERNAME:PASSWORD@DB.EXAMPLE.COM/DB"); } }