diff --git a/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/DB2ServiceInfoCreator.java b/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/DB2ServiceInfoCreator.java index 66d458a..f87ad16 100644 --- a/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/DB2ServiceInfoCreator.java +++ b/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/DB2ServiceInfoCreator.java @@ -8,7 +8,7 @@ public class DB2ServiceInfoCreator extends RelationalServiceInfoCreator { public PostgresqlServiceInfoCreator() { - super(new Tags("postgresql"), PostgresqlServiceInfo.POSTGRES_SCHEME); + super(new Tags("postgresql"), POSTGRES_SCHEME, POSTGRES_JDBC_SCHEME); } @Override - public PostgresqlServiceInfo createServiceInfo(String id, String url) { - return new PostgresqlServiceInfo(id, url); + public PostgresqlServiceInfo createServiceInfo(String id, String url, String jdbcUrl) { + return new PostgresqlServiceInfo(id, url, jdbcUrl); } } diff --git a/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/RelationalServiceInfoCreator.java b/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/RelationalServiceInfoCreator.java index 37fae6f..063ce42 100644 --- a/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/RelationalServiceInfoCreator.java +++ b/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/RelationalServiceInfoCreator.java @@ -42,18 +42,16 @@ public abstract class RelationalServiceInfoCreator serviceData) { String id = getId(serviceData); Map credentials = getCredentials(serviceData); - String uri = getStringFromCredentials(credentials, "jdbcUrl"); + String jdbcUrl = getStringFromCredentials(credentials, "jdbcUrl"); - if (uri == null) { - uri = getUriFromCredentials(credentials); - } + String uri = getUriFromCredentials(credentials); if (uri == null) { String host = getStringFromCredentials(credentials, "hostname", "host"); @@ -63,10 +61,10 @@ public abstract class RelationalServiceInfoCreator serviceInfos = testCloudConnector.getServiceInfos(); - DB2ServiceInfo info = (DB2ServiceInfo) getServiceInfo(serviceInfos, SERVICE_NAME); + ServiceInfo info = getServiceInfo(serviceInfos, SERVICE_NAME); assertServiceFoundOfType(info, DB2ServiceInfo.class); - assertEquals(getDB2JdbcUrl(INSTANCE_NAME), info.getJdbcUrl()); + assertJdbcUrlEqual(info, DB2_SCHEME, INSTANCE_NAME); + assertUriBasedServiceInfoFields(info, DB2_SCHEME, hostname, port, username, password, INSTANCE_NAME); } @Test @@ -37,9 +36,10 @@ public class CloudFoundryConnectorDB2ServiceTest extends AbstractUserProvidedSer when(mockEnvironment.getEnvValue("VCAP_SERVICES")) .thenReturn(getServicesPayload( getUserProvidedServicePayloadWithNoUri(SERVICE_NAME, hostname, port, username, password, INSTANCE_NAME))); - List serviceInfos = testCloudConnector.getServiceInfos(); - BaseServiceInfo info = (BaseServiceInfo) getServiceInfo(serviceInfos, SERVICE_NAME); + List serviceInfos = testCloudConnector.getServiceInfos(); + ServiceInfo info = getServiceInfo(serviceInfos, SERVICE_NAME); + assertNotNull(info); assertFalse(MysqlServiceInfo.class.isAssignableFrom(info.getClass())); // service was not detected as MySQL assertNotNull(info); } @@ -48,12 +48,13 @@ public class CloudFoundryConnectorDB2ServiceTest extends AbstractUserProvidedSer public void dServiceCreationWithJdbcUrl() { when(mockEnvironment.getEnvValue("VCAP_SERVICES")) .thenReturn(getServicesPayload( - getDB2ServicePayloadWithJdbcurl(SERVICE_NAME, hostname, port, username, password, INSTANCE_NAME, DB2_SCHEME))); + getDB2ServicePayloadWithJdbcurl(SERVICE_NAME, hostname, port, username, password, INSTANCE_NAME, DB2_SCHEME + ":"))); List serviceInfos = testCloudConnector.getServiceInfos(); - DB2ServiceInfo info = (DB2ServiceInfo) getServiceInfo(serviceInfos, SERVICE_NAME); + ServiceInfo info = getServiceInfo(serviceInfos, SERVICE_NAME); assertServiceFoundOfType(info, DB2ServiceInfo.class); - assertEquals(RelationalServiceInfo.JDBC_PREFIX + "db2:rawjdbcurl", info.getJdbcUrl()); + assertJdbcUrlEqual(info, DB2_SCHEME, INSTANCE_NAME); + assertUriBasedServiceInfoFields(info, DB2_SCHEME, hostname, port, username, password, INSTANCE_NAME); } protected String getDB2ServicePayloadWithJdbcurl(String serviceName, String hostname, int port, @@ -63,7 +64,7 @@ public class CloudFoundryConnectorDB2ServiceTest extends AbstractUserProvidedSer return payload.replace("$scheme", scheme); } - private String getDB2JdbcUrl(String name) { - return String.format("jdbc:db2://%s:%d/%s:user=%s;password=%s;", hostname, port, name, username, password); + protected String getJdbcUrl(String scheme, String name) { + return String.format("%s%s://%s:%d/%s:user=%s;password=%s;", JDBC_PREFIX, scheme, hostname, port, name, username, password); } } diff --git a/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorMysqlServiceTest.java b/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorMysqlServiceTest.java index 2d7ef97..1faf066 100644 --- a/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorMysqlServiceTest.java +++ b/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorMysqlServiceTest.java @@ -1,8 +1,7 @@ package org.springframework.cloud.cloudfoundry; -import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.when; -import static org.springframework.cloud.service.common.RelationalServiceInfo.JDBC_PREFIX; +import static org.springframework.cloud.service.common.MysqlServiceInfo.MYSQL_SCHEME; import java.util.List; @@ -25,14 +24,15 @@ public class CloudFoundryConnectorMysqlServiceTest extends AbstractCloudFoundryC getMysqlServicePayload("mysql-1", hostname, port, username, password, name1), getMysqlServicePayload("mysql-2", hostname, port, username, password, name2))); List serviceInfos = testCloudConnector.getServiceInfos(); - - MysqlServiceInfo info1 = (MysqlServiceInfo) getServiceInfo(serviceInfos, "mysql-1"); - MysqlServiceInfo info2 = (MysqlServiceInfo) getServiceInfo(serviceInfos, "mysql-2"); + + ServiceInfo info1 = getServiceInfo(serviceInfos, "mysql-1"); + ServiceInfo info2 = getServiceInfo(serviceInfos, "mysql-2"); assertServiceFoundOfType(info1, MysqlServiceInfo.class); assertServiceFoundOfType(info2, MysqlServiceInfo.class); - assertEquals(getJdbcUrl("mysql", name1), info1.getJdbcUrl()); - assertEquals(getJdbcUrl("mysql", name2), info2.getJdbcUrl()); + + assertJdbcUrlEqual(info1, MYSQL_SCHEME, name1); + assertJdbcUrlEqual(info2, MYSQL_SCHEME, name2); } @Test @@ -44,13 +44,18 @@ public class CloudFoundryConnectorMysqlServiceTest extends AbstractCloudFoundryC getMysqlServicePayloadWithLabelNoTags("mysql-1", hostname, port, username, password, name1), getMysqlServicePayloadWithLabelNoTags("mysql-2", hostname, port, username, password, name2))); List serviceInfos = testCloudConnector.getServiceInfos(); - - MysqlServiceInfo info1 = (MysqlServiceInfo) getServiceInfo(serviceInfos, "mysql-1"); - MysqlServiceInfo info2 = (MysqlServiceInfo) getServiceInfo(serviceInfos, "mysql-2"); + + ServiceInfo info1 = getServiceInfo(serviceInfos, "mysql-1"); + ServiceInfo info2 = getServiceInfo(serviceInfos, "mysql-2"); + assertServiceFoundOfType(info1, MysqlServiceInfo.class); assertServiceFoundOfType(info2, MysqlServiceInfo.class); - assertEquals(getJdbcUrl("mysql", name1), info1.getJdbcUrl()); - assertEquals(getJdbcUrl("mysql", name2), info2.getJdbcUrl()); + + 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 @@ -63,12 +68,17 @@ public class CloudFoundryConnectorMysqlServiceTest extends AbstractCloudFoundryC getMysqlServicePayloadNoLabelNoTags("mysql-2", hostname, port, username, password, name2))); List serviceInfos = testCloudConnector.getServiceInfos(); - MysqlServiceInfo info1 = (MysqlServiceInfo) getServiceInfo(serviceInfos, "mysql-1"); - MysqlServiceInfo info2 = (MysqlServiceInfo) getServiceInfo(serviceInfos, "mysql-2"); + ServiceInfo info1 = getServiceInfo(serviceInfos, "mysql-1"); + ServiceInfo info2 = getServiceInfo(serviceInfos, "mysql-2"); + assertServiceFoundOfType(info1, MysqlServiceInfo.class); assertServiceFoundOfType(info2, MysqlServiceInfo.class); - assertEquals(getJdbcUrl("mysql", name1), info1.getJdbcUrl()); - assertEquals(getJdbcUrl("mysql", name2), info2.getJdbcUrl()); + + 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 @@ -80,13 +90,18 @@ public class CloudFoundryConnectorMysqlServiceTest extends AbstractCloudFoundryC getMysqlServicePayloadWithLabelNoUri("mysql-1", hostname, port, username, password, name1), getMysqlServicePayloadWithLabelNoUri("mysql-2", hostname, port, username, password, name2))); List serviceInfos = testCloudConnector.getServiceInfos(); - - MysqlServiceInfo info1 = (MysqlServiceInfo) getServiceInfo(serviceInfos, "mysql-1"); - MysqlServiceInfo info2 = (MysqlServiceInfo) getServiceInfo(serviceInfos, "mysql-2"); + + ServiceInfo info1 = getServiceInfo(serviceInfos, "mysql-1"); + ServiceInfo info2 = getServiceInfo(serviceInfos, "mysql-2"); + assertServiceFoundOfType(info1, MysqlServiceInfo.class); assertServiceFoundOfType(info2, MysqlServiceInfo.class); - assertEquals(getJdbcUrl("mysql", name1), info1.getJdbcUrl()); - assertEquals(getJdbcUrl("mysql", name2), info2.getJdbcUrl()); + + 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 @@ -99,12 +114,17 @@ public class CloudFoundryConnectorMysqlServiceTest extends AbstractCloudFoundryC getMysqlServicePayloadWithJdbcUrl("mysql-2", hostname, port, username, password, name2))); List serviceInfos = testCloudConnector.getServiceInfos(); - MysqlServiceInfo info1 = (MysqlServiceInfo) getServiceInfo(serviceInfos, "mysql-1"); - MysqlServiceInfo info2 = (MysqlServiceInfo) getServiceInfo(serviceInfos, "mysql-2"); + ServiceInfo info1 = getServiceInfo(serviceInfos, "mysql-1"); + ServiceInfo info2 = getServiceInfo(serviceInfos, "mysql-2"); + assertServiceFoundOfType(info1, MysqlServiceInfo.class); assertServiceFoundOfType(info2, MysqlServiceInfo.class); - assertEquals(JDBC_PREFIX + "mysql://rawjdbcurl", info1.getJdbcUrl()); - assertEquals(JDBC_PREFIX + "mysql://rawjdbcurl", info2.getJdbcUrl()); + + 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); } private String getMysqlServicePayload(String serviceName, diff --git a/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorOracleServiceTest.java b/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorOracleServiceTest.java index 317ebb5..1a66360 100644 --- a/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorOracleServiceTest.java +++ b/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorOracleServiceTest.java @@ -1,35 +1,34 @@ package org.springframework.cloud.cloudfoundry; import org.junit.Test; -import org.springframework.cloud.service.BaseServiceInfo; import org.springframework.cloud.service.ServiceInfo; import org.springframework.cloud.service.common.MysqlServiceInfo; import org.springframework.cloud.service.common.OracleServiceInfo; -import org.springframework.cloud.service.common.RelationalServiceInfo; import java.util.List; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.when; +import static org.springframework.cloud.service.common.OracleServiceInfo.ORACLE_SCHEME; +import static org.springframework.cloud.service.common.RelationalServiceInfo.JDBC_PREFIX; public class CloudFoundryConnectorOracleServiceTest extends AbstractUserProvidedServiceInfoCreatorTest { private static final String INSTANCE_NAME = "database"; - private static final String ORACLE_SCHEME = "oracle:"; private static final String SERVICE_NAME = "oracle-ups"; @Test public void oracleServiceCreation() { when(mockEnvironment.getEnvValue("VCAP_SERVICES")) .thenReturn(getServicesPayload( - getUserProvidedServicePayload(SERVICE_NAME, hostname, port, username, password, INSTANCE_NAME, ORACLE_SCHEME))); + getUserProvidedServicePayload(SERVICE_NAME, hostname, port, username, password, INSTANCE_NAME, ORACLE_SCHEME + ":"))); List serviceInfos = testCloudConnector.getServiceInfos(); - OracleServiceInfo info = (OracleServiceInfo) getServiceInfo(serviceInfos, SERVICE_NAME); + ServiceInfo info = getServiceInfo(serviceInfos, SERVICE_NAME); assertServiceFoundOfType(info, OracleServiceInfo.class); - assertEquals(getOracleJdbcUrl(INSTANCE_NAME), info.getJdbcUrl()); + assertJdbcUrlEqual(info, ORACLE_SCHEME, INSTANCE_NAME); + assertUriBasedServiceInfoFields(info, ORACLE_SCHEME, hostname, port, username, password, INSTANCE_NAME); } @Test @@ -39,7 +38,8 @@ public class CloudFoundryConnectorOracleServiceTest extends AbstractUserProvided getUserProvidedServicePayloadWithNoUri(SERVICE_NAME, hostname, port, username, password, INSTANCE_NAME))); List serviceInfos = testCloudConnector.getServiceInfos(); - BaseServiceInfo info = (BaseServiceInfo) getServiceInfo(serviceInfos, SERVICE_NAME); + ServiceInfo info = getServiceInfo(serviceInfos, SERVICE_NAME); + assertNotNull(info); assertFalse(MysqlServiceInfo.class.isAssignableFrom(info.getClass())); // service was not detected as MySQL assertNotNull(info); } @@ -48,12 +48,13 @@ public class CloudFoundryConnectorOracleServiceTest extends AbstractUserProvided public void oracleServiceCreationWithJdbcUrl() { when(mockEnvironment.getEnvValue("VCAP_SERVICES")) .thenReturn(getServicesPayload( - getOracleServicePayloadWithJdbcurl(SERVICE_NAME, hostname, port, username, password, INSTANCE_NAME, ORACLE_SCHEME))); + getOracleServicePayloadWithJdbcurl(SERVICE_NAME, hostname, port, username, password, INSTANCE_NAME, ORACLE_SCHEME + ":"))); List serviceInfos = testCloudConnector.getServiceInfos(); - OracleServiceInfo info = (OracleServiceInfo) getServiceInfo(serviceInfos, SERVICE_NAME); + ServiceInfo info = getServiceInfo(serviceInfos, SERVICE_NAME); assertServiceFoundOfType(info, OracleServiceInfo.class); - assertEquals(RelationalServiceInfo.JDBC_PREFIX + "oracle:rawjdbcurl", info.getJdbcUrl()); + assertJdbcUrlEqual(info, ORACLE_SCHEME, INSTANCE_NAME); + assertUriBasedServiceInfoFields(info, ORACLE_SCHEME, hostname, port, username, password, INSTANCE_NAME); } protected String getOracleServicePayloadWithJdbcurl(String serviceName, String hostname, int port, @@ -63,7 +64,7 @@ public class CloudFoundryConnectorOracleServiceTest extends AbstractUserProvided return payload.replace("$scheme", scheme); } - private String getOracleJdbcUrl(String name) { - return "jdbc:oracle:thin:" + username + "/" + password + "@" + hostname + ":" + port + "/" + name; + protected String getJdbcUrl(String scheme, String name) { + return String.format("%s%s:thin:%s/%s@%s:%d/%s", JDBC_PREFIX, scheme, username, password, hostname, port, name); } } diff --git a/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorPostgresqlServiceTest.java b/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorPostgresqlServiceTest.java index 89de6fd..f336ee4 100644 --- a/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorPostgresqlServiceTest.java +++ b/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorPostgresqlServiceTest.java @@ -1,8 +1,7 @@ package org.springframework.cloud.cloudfoundry; -import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.when; -import static org.springframework.cloud.service.common.RelationalServiceInfo.JDBC_PREFIX; +import static org.springframework.cloud.service.common.PostgresqlServiceInfo.POSTGRES_SCHEME; import java.util.List; @@ -25,13 +24,17 @@ public class CloudFoundryConnectorPostgresqlServiceTest extends AbstractCloudFou getPostgresqlServicePayload("postgresql-2", hostname, port, username, password, name2))); List serviceInfos = testCloudConnector.getServiceInfos(); - PostgresqlServiceInfo info1 = (PostgresqlServiceInfo) getServiceInfo(serviceInfos, "postgresql-1"); - PostgresqlServiceInfo info2 = (PostgresqlServiceInfo) getServiceInfo(serviceInfos, "postgresql-2"); + ServiceInfo info1 = getServiceInfo(serviceInfos, "postgresql-1"); + ServiceInfo info2 = getServiceInfo(serviceInfos, "postgresql-2"); assertServiceFoundOfType(info1, PostgresqlServiceInfo.class); assertServiceFoundOfType(info2, PostgresqlServiceInfo.class); - assertEquals(getJdbcUrl("postgres", name1), info1.getJdbcUrl()); - assertEquals(getJdbcUrl("postgres", name2), info2.getJdbcUrl()); + + assertJdbcUrlEqual(info1, POSTGRES_SCHEME, name1); + assertJdbcUrlEqual(info2, POSTGRES_SCHEME, name2); + + assertUriBasedServiceInfoFields(info1, POSTGRES_SCHEME, hostname, port, username, password, name1); + assertUriBasedServiceInfoFields(info2, POSTGRES_SCHEME, hostname, port, username, password, name2); } @Test @@ -44,13 +47,17 @@ public class CloudFoundryConnectorPostgresqlServiceTest extends AbstractCloudFou getPostgresqlServicePayloadNoLabelNoTags("postgresql-2", hostname, port, username, password, name2))); List serviceInfos = testCloudConnector.getServiceInfos(); - PostgresqlServiceInfo info1 = (PostgresqlServiceInfo) getServiceInfo(serviceInfos, "postgresql-1"); - PostgresqlServiceInfo info2 = (PostgresqlServiceInfo) getServiceInfo(serviceInfos, "postgresql-2"); + ServiceInfo info1 = getServiceInfo(serviceInfos, "postgresql-1"); + ServiceInfo info2 = getServiceInfo(serviceInfos, "postgresql-2"); assertServiceFoundOfType(info1, PostgresqlServiceInfo.class); assertServiceFoundOfType(info2, PostgresqlServiceInfo.class); - assertEquals(getJdbcUrl("postgres", name1), info1.getJdbcUrl()); - assertEquals(getJdbcUrl("postgres", name2), info2.getJdbcUrl()); + + assertJdbcUrlEqual(info1, POSTGRES_SCHEME, name1); + assertJdbcUrlEqual(info2, POSTGRES_SCHEME, name2); + + assertUriBasedServiceInfoFields(info1, POSTGRES_SCHEME, hostname, port, username, password, name1); + assertUriBasedServiceInfoFields(info2, POSTGRES_SCHEME, hostname, port, username, password, name2); } @Test @@ -63,13 +70,17 @@ public class CloudFoundryConnectorPostgresqlServiceTest extends AbstractCloudFou getPostgresqlServicePayloadWithJdbcUrl("postgresql-2", hostname, port, username, password, name2))); List serviceInfos = testCloudConnector.getServiceInfos(); - PostgresqlServiceInfo info1 = (PostgresqlServiceInfo) getServiceInfo(serviceInfos, "postgresql-1"); - PostgresqlServiceInfo info2 = (PostgresqlServiceInfo) getServiceInfo(serviceInfos, "postgresql-2"); + ServiceInfo info1 = getServiceInfo(serviceInfos, "postgresql-1"); + ServiceInfo info2 = getServiceInfo(serviceInfos, "postgresql-2"); assertServiceFoundOfType(info1, PostgresqlServiceInfo.class); assertServiceFoundOfType(info2, PostgresqlServiceInfo.class); - assertEquals(JDBC_PREFIX + "postgres://rawjdbcurl", info1.getJdbcUrl()); - assertEquals(JDBC_PREFIX + "postgres://rawjdbcurl", info2.getJdbcUrl()); + + assertJdbcUrlEqual(info1, POSTGRES_SCHEME, name1); + assertJdbcUrlEqual(info2, POSTGRES_SCHEME, name2); + + assertUriBasedServiceInfoFields(info1, POSTGRES_SCHEME, hostname, port, username, password, name1); + assertUriBasedServiceInfoFields(info2, POSTGRES_SCHEME, hostname, port, username, password, name2); } private String getPostgresqlServicePayload(String serviceName, diff --git a/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorSqlServerServiceTest.java b/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorSqlServerServiceTest.java index 8207ab6..de3d99e 100644 --- a/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorSqlServerServiceTest.java +++ b/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorSqlServerServiceTest.java @@ -1,34 +1,33 @@ package org.springframework.cloud.cloudfoundry; import org.junit.Test; -import org.springframework.cloud.service.BaseServiceInfo; import org.springframework.cloud.service.ServiceInfo; -import org.springframework.cloud.service.common.RelationalServiceInfo; import org.springframework.cloud.service.common.SqlServerServiceInfo; import java.util.List; -import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.when; +import static org.springframework.cloud.service.common.RelationalServiceInfo.JDBC_PREFIX; +import static org.springframework.cloud.service.common.SqlServerServiceInfo.SQLSERVER_SCHEME; public class CloudFoundryConnectorSqlServerServiceTest extends AbstractUserProvidedServiceInfoCreatorTest { private static final String INSTANCE_NAME = "database"; - private static final String SQLSERVER_SCHEME = "sqlserver:"; private static final String SERVICE_NAME = "sqlserver-ups"; @Test public void sqlServerServiceCreation() { when(mockEnvironment.getEnvValue("VCAP_SERVICES")) .thenReturn(getServicesPayload( - getUserProvidedServicePayload(SERVICE_NAME, hostname, port, username, password, INSTANCE_NAME, SQLSERVER_SCHEME))); + getUserProvidedServicePayload(SERVICE_NAME, hostname, port, username, password, INSTANCE_NAME, SQLSERVER_SCHEME + ":"))); List serviceInfos = testCloudConnector.getServiceInfos(); - SqlServerServiceInfo info = (SqlServerServiceInfo) getServiceInfo(serviceInfos, SERVICE_NAME); + ServiceInfo info = getServiceInfo(serviceInfos, SERVICE_NAME); assertServiceFoundOfType(info, SqlServerServiceInfo.class); - assertEquals(getSqlServerJdbcUrl(INSTANCE_NAME), info.getJdbcUrl()); + assertJdbcUrlEqual(info, SQLSERVER_SCHEME, INSTANCE_NAME); + assertUriBasedServiceInfoFields(info, SQLSERVER_SCHEME, hostname, port, username, password, INSTANCE_NAME); } @Test @@ -38,21 +37,22 @@ public class CloudFoundryConnectorSqlServerServiceTest extends AbstractUserProvi getUserProvidedServicePayloadWithNoUri(SERVICE_NAME, hostname, port, username, password, INSTANCE_NAME))); List serviceInfos = testCloudConnector.getServiceInfos(); - BaseServiceInfo info = (BaseServiceInfo) getServiceInfo(serviceInfos, SERVICE_NAME); - assertFalse(SqlServerServiceInfo.class.isAssignableFrom(info.getClass())); // service was not detected as SQL-Server + ServiceInfo info = getServiceInfo(serviceInfos, SERVICE_NAME); assertNotNull(info); + assertFalse(SqlServerServiceInfo.class.isAssignableFrom(info.getClass())); // service was not detected as SQL-Server } @Test public void sqlServerServiceCreationWithJdbcUrl() { when(mockEnvironment.getEnvValue("VCAP_SERVICES")) .thenReturn(getServicesPayload( - getSqlServerServicePayloadWithJdbcurl(SERVICE_NAME, hostname, port, username, password, INSTANCE_NAME, SQLSERVER_SCHEME))); + getSqlServerServicePayloadWithJdbcurl(SERVICE_NAME, hostname, port, username, password, INSTANCE_NAME, SQLSERVER_SCHEME + ":"))); List serviceInfos = testCloudConnector.getServiceInfos(); - SqlServerServiceInfo info = (SqlServerServiceInfo) getServiceInfo(serviceInfos, SERVICE_NAME); + ServiceInfo info = getServiceInfo(serviceInfos, SERVICE_NAME); assertServiceFoundOfType(info, SqlServerServiceInfo.class); - assertEquals(RelationalServiceInfo.JDBC_PREFIX + "sqlserver:rawjdbcurl", info.getJdbcUrl()); + assertJdbcUrlEqual(info, SQLSERVER_SCHEME, INSTANCE_NAME); + assertUriBasedServiceInfoFields(info, SQLSERVER_SCHEME, hostname, port, username, password, INSTANCE_NAME); } protected String getSqlServerServicePayloadWithJdbcurl(String serviceName, String hostname, int port, @@ -62,7 +62,7 @@ public class CloudFoundryConnectorSqlServerServiceTest extends AbstractUserProvi return payload.replace("$scheme", scheme); } - private String getSqlServerJdbcUrl(String name) { - return "jdbc:sqlserver://" + hostname + ":" + port + ";database=" + name + ";user=" + username + ";password=" + password; + protected String getJdbcUrl(String scheme, String name) { + return String.format("%s%s://%s:%d;database=%s;user=%s;password=%s", JDBC_PREFIX, scheme, hostname, port, name, username, password); } } diff --git a/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-db2-info-jdbc-url.json b/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-db2-info-jdbc-url.json index da7ed52..051a4d5 100644 --- a/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-db2-info-jdbc-url.json +++ b/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-db2-info-jdbc-url.json @@ -1,7 +1,7 @@ { "name": "$serviceName", "credentials": { - "jdbcUrl": "jdbc:db2:rawjdbcurl", + "jdbcUrl": "jdbc:db2://$hostname:$port/$name:user=$user;password=$password;", "uri": "db2://$user:$password@$hostname:$port/$name" } } \ No newline at end of file diff --git a/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-mysql-info-jdbc-url.json b/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-mysql-info-jdbc-url.json index 2132c45..2466740 100644 --- a/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-mysql-info-jdbc-url.json +++ b/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-mysql-info-jdbc-url.json @@ -1,7 +1,7 @@ { "name": "$serviceName", "credentials": { - "jdbcUrl": "jdbc:mysql://rawjdbcurl", + "jdbcUrl": "jdbc:mysql://$hostname:$port/$name?user=$user&password=$password", "uri": "mysql://$user:$password@$hostname:$port/$name" } } \ No newline at end of file diff --git a/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-oracle-info-jdbc-url.json b/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-oracle-info-jdbc-url.json index 3c2bf5d..e9df40f 100644 --- a/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-oracle-info-jdbc-url.json +++ b/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-oracle-info-jdbc-url.json @@ -1,7 +1,7 @@ { "name": "$serviceName", "credentials": { - "jdbcUrl": "jdbc:oracle:rawjdbcurl", + "jdbcUrl": "jdbc:oracle:thin:$user/$password@$hostname:$port/$name", "uri": "oracle://$user:$password@$hostname:$port/$name" } } \ No newline at end of file diff --git a/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-postgresql-info-jdbc-url.json b/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-postgresql-info-jdbc-url.json index d93a3d5..a7049af 100644 --- a/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-postgresql-info-jdbc-url.json +++ b/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-postgresql-info-jdbc-url.json @@ -1,7 +1,7 @@ { "name": "$serviceName", "credentials": { - "jdbcUrl": "jdbc:postgres://rawjdbcurl", + "jdbcUrl": "jdbc:postgresql://$hostname:$port/$name?user=$user&password=$password", "uri": "postgres://$user:$password@$hostname:$port/$name" } } \ No newline at end of file diff --git a/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-sqlserver-info-jdbc-url.json b/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-sqlserver-info-jdbc-url.json index a460924..e4ea273 100644 --- a/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-sqlserver-info-jdbc-url.json +++ b/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-sqlserver-info-jdbc-url.json @@ -1,7 +1,7 @@ { "name": "$serviceName", "credentials": { - "jdbcUrl": "jdbc:sqlserver:rawjdbcurl", + "jdbcUrl": "jdbc:sqlserver://$hostname:$port;database=$name;user=$user;password=$password", "uri": "sqlserver://$user:$password@$hostname:$port/$name" } } \ No newline at end of file diff --git a/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/DB2ServiceInfo.java b/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/DB2ServiceInfo.java index 601e31a..d91a6eb 100644 --- a/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/DB2ServiceInfo.java +++ b/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/DB2ServiceInfo.java @@ -4,25 +4,20 @@ import org.springframework.cloud.service.ServiceInfo; @ServiceInfo.ServiceLabel("db2") public class DB2ServiceInfo extends RelationalServiceInfo { + public static final String DB2_SCHEME = "db2"; - private static final String JDBC_URL_TYPE = "db2"; - - public static final String DB2_SCHEME = JDBC_URL_TYPE; - - public DB2ServiceInfo(String id, String url) { - super(id, url, JDBC_URL_TYPE); + public DB2ServiceInfo(String id, String url) { + this(id, url, null); + } + + public DB2ServiceInfo(String id, String url, String jdbcUrl) { + super(id, url, jdbcUrl, DB2_SCHEME); } - @ServiceProperty(category = "connection") @Override - public String getJdbcUrl() { - if (getUriInfo().getUriString().startsWith(JDBC_PREFIX)) { - return getUriInfo().getUriString(); - } - + protected String buildJdbcUrl() { return String.format("jdbc:%s://%s:%d/%s:user=%s;password=%s;", - jdbcUrlDatabaseType, + jdbcUrlDatabaseType, getHost(), getPort(), getPath(), getUserName(), getPassword()); } - } diff --git a/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/MysqlServiceInfo.java b/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/MysqlServiceInfo.java index d00dae5..da10659 100644 --- a/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/MysqlServiceInfo.java +++ b/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/MysqlServiceInfo.java @@ -9,12 +9,13 @@ import org.springframework.cloud.service.ServiceInfo.ServiceLabel; */ @ServiceLabel("mysql") public class MysqlServiceInfo extends RelationalServiceInfo { - - private static final String JDBC_URL_TYPE = "mysql"; - - public static final String MYSQL_SCHEME = JDBC_URL_TYPE; + public static final String MYSQL_SCHEME = "mysql"; public MysqlServiceInfo(String id, String url) { - super(id, url, MYSQL_SCHEME); + this(id, url, null); + } + + public MysqlServiceInfo(String id, String url, String jdbcUrl) { + super(id, url, jdbcUrl, MYSQL_SCHEME); } } diff --git a/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/OracleServiceInfo.java b/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/OracleServiceInfo.java index 789d957..4a8b067 100644 --- a/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/OracleServiceInfo.java +++ b/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/OracleServiceInfo.java @@ -4,24 +4,20 @@ import org.springframework.cloud.service.ServiceInfo; @ServiceInfo.ServiceLabel("oracle") public class OracleServiceInfo extends RelationalServiceInfo { - - private static final String JDBC_URL_TYPE = "oracle"; - - public static final String ORACLE_SCHEME = JDBC_URL_TYPE; + public static final String ORACLE_SCHEME = "oracle"; public OracleServiceInfo(String id, String url) { - super(id, url, JDBC_URL_TYPE); + this(id, url, null); + } + + public OracleServiceInfo(String id, String url, String jdbcUrl) { + super(id, url, jdbcUrl, ORACLE_SCHEME); } @Override - public String getJdbcUrl() { - if (getUriInfo().getUriString().startsWith(JDBC_PREFIX)) { - return getUriInfo().getUriString(); - } - + protected String buildJdbcUrl() { return String.format("jdbc:%s:thin:%s/%s@%s:%d/%s", jdbcUrlDatabaseType, getUserName(), getPassword(), getHost(), getPort(), getPath()); } - } diff --git a/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/PostgresqlServiceInfo.java b/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/PostgresqlServiceInfo.java index bfc888f..c3121dd 100644 --- a/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/PostgresqlServiceInfo.java +++ b/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/PostgresqlServiceInfo.java @@ -2,7 +2,6 @@ package org.springframework.cloud.service.common; import org.springframework.cloud.service.ServiceInfo.ServiceLabel; - /** * * @author Ramnivas Laddad @@ -10,12 +9,14 @@ import org.springframework.cloud.service.ServiceInfo.ServiceLabel; */ @ServiceLabel("postgresql") public class PostgresqlServiceInfo extends RelationalServiceInfo { - - private static final String JDBC_URL_TYPE = "postgresql"; - public static final String POSTGRES_SCHEME = "postgres"; + public static final String POSTGRES_JDBC_SCHEME = "postgresql"; public PostgresqlServiceInfo(String id, String url) { - super(id, url, JDBC_URL_TYPE); + this(id, url, null); + } + + public PostgresqlServiceInfo(String id, String url, String jdbcUrl) { + super(id, url, jdbcUrl, POSTGRES_JDBC_SCHEME); } } diff --git a/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/RelationalServiceInfo.java b/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/RelationalServiceInfo.java index d2a952d..2961d15 100644 --- a/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/RelationalServiceInfo.java +++ b/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/RelationalServiceInfo.java @@ -10,19 +10,21 @@ public abstract class RelationalServiceInfo extends UriBasedServiceInfo { public static final String JDBC_PREFIX = "jdbc:"; + protected final String jdbcUrl; protected final String jdbcUrlDatabaseType; - public RelationalServiceInfo(String id, String uriString, String jdbcUrlDatabaseType) { + public RelationalServiceInfo(String id, String uriString, String jdbcUrl, String jdbcUrlDatabaseType) { super(id, uriString); + this.jdbcUrl = jdbcUrl; this.jdbcUrlDatabaseType = jdbcUrlDatabaseType; } @ServiceProperty(category = "connection") public String getJdbcUrl() { - if (getUriInfo().getUriString().startsWith(JDBC_PREFIX)) { - return getUriInfo().getUriString(); - } + return jdbcUrl == null ? buildJdbcUrl() : jdbcUrl; + } + protected String buildJdbcUrl() { return String.format("%s%s://%s%s/%s%s%s", JDBC_PREFIX, jdbcUrlDatabaseType, getHost(), formatPort(), getPath(), formatUserinfo(), formatQuery()); } diff --git a/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/SqlServerServiceInfo.java b/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/SqlServerServiceInfo.java index d6fd8ee..e0344b5 100644 --- a/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/SqlServerServiceInfo.java +++ b/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/SqlServerServiceInfo.java @@ -4,20 +4,18 @@ import org.springframework.cloud.service.ServiceInfo; @ServiceInfo.ServiceLabel("sqlserver") public class SqlServerServiceInfo extends RelationalServiceInfo { - private static final String JDBC_URL_TYPE = "sqlserver"; - - public static final String SQLSERVER_SCHEME = JDBC_URL_TYPE; + public static final String SQLSERVER_SCHEME = "sqlserver"; public SqlServerServiceInfo(String id, String url) { - super(id, url, JDBC_URL_TYPE); + this(id, url, null); + } + + public SqlServerServiceInfo(String id, String url, String jdbcUrl) { + super(id, url, jdbcUrl, SQLSERVER_SCHEME); } @Override - public String getJdbcUrl() { - if (getUriInfo().getUriString().startsWith(JDBC_PREFIX)) { - return getUriInfo().getUriString(); - } - + protected String buildJdbcUrl() { return String.format("jdbc:%s://%s:%d;database=%s;user=%s;password=%s", jdbcUrlDatabaseType, getHost(), getPort(), getPath(), getUserName(), getPassword()); diff --git a/spring-cloud-core/src/test/java/org/springframework/cloud/service/common/RelationalServiceInfoTest.java b/spring-cloud-core/src/test/java/org/springframework/cloud/service/common/RelationalServiceInfoTest.java index 41532a0..75a8a66 100644 --- a/spring-cloud-core/src/test/java/org/springframework/cloud/service/common/RelationalServiceInfoTest.java +++ b/spring-cloud-core/src/test/java/org/springframework/cloud/service/common/RelationalServiceInfoTest.java @@ -6,6 +6,14 @@ import static org.junit.Assert.assertEquals; public class RelationalServiceInfoTest { + @Test + public void jdbcUrl() { + RelationalServiceInfo serviceInfo = createServiceInfoWithJdbcUrl("bad://bad:bad@bad:1234/bad", + "jdbc:jdbcdbtype://hostname:1234/database?user=username&password=password"); + + assertEquals("jdbc:jdbcdbtype://hostname:1234/database?user=username&password=password", serviceInfo.getJdbcUrl()); + } + @Test public void jdbcFullUrl() { RelationalServiceInfo serviceInfo = createServiceInfo("dbtype://username:password@hostname:1234/database"); @@ -47,7 +55,12 @@ public class RelationalServiceInfoTest { } private RelationalServiceInfo createServiceInfo(final String uri) { - return new RelationalServiceInfo("test", uri, "jdbcdbtype") { + return new RelationalServiceInfo("test", uri, null, "jdbcdbtype") { + }; + } + + private RelationalServiceInfo createServiceInfoWithJdbcUrl(final String uri, final String jdbcUrl) { + return new RelationalServiceInfo("test", uri, jdbcUrl, "jdbcdbtype") { }; }