package org.springframework.cloud.cloudfoundry; import static org.mockito.Mockito.when; import static org.springframework.cloud.service.common.MysqlServiceInfo.MYSQL_SCHEME; import java.util.List; import org.junit.Test; import org.springframework.cloud.service.ServiceInfo; import org.springframework.cloud.service.common.MysqlServiceInfo; /** * * @author Ramnivas Laddad * */ public class CloudFoundryConnectorMysqlServiceTest extends AbstractCloudFoundryConnectorRelationalServiceTest { @Test public void mysqlServiceCreation() { String name1 = "database-1"; String name2 = "database-2"; when(mockEnvironment.getEnvValue("VCAP_SERVICES")) .thenReturn(getServicesPayload( getMysqlServicePayload("mysql-1", hostname, port, username, password, name1), getMysqlServicePayload("mysql-2", hostname, port, username, password, name2))); List<ServiceInfo> serviceInfos = testCloudConnector.getServiceInfos(); ServiceInfo info1 = getServiceInfo(serviceInfos, "mysql-1"); ServiceInfo info2 = getServiceInfo(serviceInfos, "mysql-2"); assertServiceFoundOfType(info1, MysqlServiceInfo.class); assertServiceFoundOfType(info2, MysqlServiceInfo.class); assertJdbcUrlEqual(info1, MYSQL_SCHEME, name1); assertJdbcUrlEqual(info2, MYSQL_SCHEME, name2); } @Test public void mysqlServiceCreationWithLabelNoTags() { String name1 = "database-1"; String name2 = "database-2"; when(mockEnvironment.getEnvValue("VCAP_SERVICES")) .thenReturn(getServicesPayload( getMysqlServicePayloadWithLabelNoTags("mysql-1", hostname, port, username, password, name1), getMysqlServicePayloadWithLabelNoTags("mysql-2", hostname, port, username, password, name2))); List<ServiceInfo> serviceInfos = testCloudConnector.getServiceInfos(); ServiceInfo info1 = getServiceInfo(serviceInfos, "mysql-1"); ServiceInfo info2 = getServiceInfo(serviceInfos, "mysql-2"); assertServiceFoundOfType(info1, MysqlServiceInfo.class); assertServiceFoundOfType(info2, MysqlServiceInfo.class); assertJdbcUrlEqual(info1, MYSQL_SCHEME, name1); assertJdbcUrlEqual(info2, MYSQL_SCHEME, name2); assertUriBasedServiceInfoFields(info1, MYSQL_SCHEME, hostname, port, username, password, name1); assertUriBasedServiceInfoFields(info2, MYSQL_SCHEME, hostname, port, username, password, name2); } @Test public void mysqlServiceCreationNoLabelNoTags() { String name1 = "database-1"; String name2 = "database-2"; when(mockEnvironment.getEnvValue("VCAP_SERVICES")) .thenReturn(getServicesPayload( getMysqlServicePayloadNoLabelNoTags("mysql-1", hostname, port, username, password, name1), getMysqlServicePayloadNoLabelNoTags("mysql-2", hostname, port, username, password, name2))); List<ServiceInfo> serviceInfos = testCloudConnector.getServiceInfos(); ServiceInfo info1 = getServiceInfo(serviceInfos, "mysql-1"); ServiceInfo info2 = getServiceInfo(serviceInfos, "mysql-2"); assertServiceFoundOfType(info1, MysqlServiceInfo.class); assertServiceFoundOfType(info2, MysqlServiceInfo.class); assertJdbcUrlEqual(info1, MYSQL_SCHEME, name1); assertJdbcUrlEqual(info2, MYSQL_SCHEME, name2); assertUriBasedServiceInfoFields(info1, MYSQL_SCHEME, hostname, port, username, password, name1); assertUriBasedServiceInfoFields(info2, MYSQL_SCHEME, hostname, port, username, password, name2); } @Test public void mysqlServiceCreationWithLabelNoUri() { String name1 = "database-1"; String name2 = "database-2"; when(mockEnvironment.getEnvValue("VCAP_SERVICES")) .thenReturn(getServicesPayload( getMysqlServicePayloadWithLabelNoUri("mysql-1", hostname, port, username, password, name1), getMysqlServicePayloadWithLabelNoUri("mysql-2", hostname, port, username, password, name2))); List<ServiceInfo> serviceInfos = testCloudConnector.getServiceInfos(); ServiceInfo info1 = getServiceInfo(serviceInfos, "mysql-1"); ServiceInfo info2 = getServiceInfo(serviceInfos, "mysql-2"); assertServiceFoundOfType(info1, MysqlServiceInfo.class); assertServiceFoundOfType(info2, MysqlServiceInfo.class); assertJdbcUrlEqual(info1, MYSQL_SCHEME, name1); assertJdbcUrlEqual(info2, MYSQL_SCHEME, name2); assertUriBasedServiceInfoFields(info1, MYSQL_SCHEME, hostname, port, username, password, name1); assertUriBasedServiceInfoFields(info2, MYSQL_SCHEME, hostname, port, username, password, name2); } @Test public void mysqlServiceCreationWithJdbcUrl() { String name1 = "database-1"; String name2 = "database-2"; when(mockEnvironment.getEnvValue("VCAP_SERVICES")) .thenReturn(getServicesPayload( getMysqlServicePayloadWithJdbcUrl("mysql-1", hostname, port, username, password, name1), getMysqlServicePayloadWithJdbcUrl("mysql-2", hostname, port, username, password, name2))); List<ServiceInfo> serviceInfos = testCloudConnector.getServiceInfos(); ServiceInfo info1 = getServiceInfo(serviceInfos, "mysql-1"); ServiceInfo info2 = getServiceInfo(serviceInfos, "mysql-2"); assertServiceFoundOfType(info1, MysqlServiceInfo.class); assertServiceFoundOfType(info2, MysqlServiceInfo.class); assertJdbcUrlEqual(info1, MYSQL_SCHEME, name1); assertJdbcUrlEqual(info2, MYSQL_SCHEME, name2); assertUriBasedServiceInfoFields(info1, MYSQL_SCHEME, hostname, port, username, password, name1); assertUriBasedServiceInfoFields(info2, MYSQL_SCHEME, hostname, port, username, password, name2); } @Test public void mysqlServiceCreationWithJdbcUrlOnly() { String name1 = "database-1"; String name2 = "database-2"; when(mockEnvironment.getEnvValue("VCAP_SERVICES")) .thenReturn(getServicesPayload( getMysqlServicePayloadWithJdbcUrlOnly("mysql-1", hostname, port, username, password, name1), getMysqlServicePayloadWithJdbcUrlOnly("mysql-2", hostname, port, username, password, name2))); List<ServiceInfo> serviceInfos = testCloudConnector.getServiceInfos(); ServiceInfo info1 = getServiceInfo(serviceInfos, "mysql-1"); ServiceInfo info2 = getServiceInfo(serviceInfos, "mysql-2"); assertServiceFoundOfType(info1, MysqlServiceInfo.class); assertServiceFoundOfType(info2, MysqlServiceInfo.class); assertJdbcUrlEqual(info1, MYSQL_SCHEME, name1); assertJdbcUrlEqual(info2, MYSQL_SCHEME, name2); assertUriBasedServiceInfoFields(info1, "jdbc", null, -1, null, null, null); assertUriBasedServiceInfoFields(info2, "jdbc", null, -1, null, null, null); assertJdbcShemeSpecificPartEqual(info1, MYSQL_SCHEME, name1); assertJdbcShemeSpecificPartEqual(info2, MYSQL_SCHEME, name2); } private String getMysqlServicePayload(String serviceName, String hostname, int port, String user, String password, String name) { return getRelationalPayload("test-mysql-info.json", serviceName, hostname, port, user, password, name); } private String getMysqlServicePayloadWithLabelNoTags(String serviceName, String hostname, int port, String user, String password, String name) { return getRelationalPayload("test-mysql-info-with-label-no-tags.json", serviceName, hostname, port, user, password, name); } private String getMysqlServicePayloadNoLabelNoTags(String serviceName, String hostname, int port, String user, String password, String name) { return getRelationalPayload("test-mysql-info-no-label-no-tags.json", serviceName, hostname, port, user, password, name); } private String getMysqlServicePayloadWithLabelNoUri(String serviceName, String hostname, int port, String user, String password, String name) { return getRelationalPayload("test-mysql-info-with-label-no-uri.json", serviceName, hostname, port, user, password, name); } private String getMysqlServicePayloadWithJdbcUrl(String serviceName, String hostname, int port, String user, String password, String name) { return getRelationalPayload("test-mysql-info-jdbc-url.json", serviceName, hostname, port, user, password, name); } private String getMysqlServicePayloadWithJdbcUrlOnly(String serviceName, String hostname, int port, String user, String password, String name) { return getRelationalPayload("test-mysql-info-jdbc-url-only.json", serviceName, hostname, port, user, password, name); } }