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 new file mode 100644 index 0000000..8207ab6 --- /dev/null +++ b/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorSqlServerServiceTest.java @@ -0,0 +1,68 @@ +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; + +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))); + List serviceInfos = testCloudConnector.getServiceInfos(); + + SqlServerServiceInfo info = (SqlServerServiceInfo) getServiceInfo(serviceInfos, SERVICE_NAME); + assertServiceFoundOfType(info, SqlServerServiceInfo.class); + assertEquals(getSqlServerJdbcUrl(INSTANCE_NAME), info.getJdbcUrl()); + } + + @Test + public void sqlServerServiceCreationWithNoUri() { + 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); + assertFalse(SqlServerServiceInfo.class.isAssignableFrom(info.getClass())); // service was not detected as SQL-Server + assertNotNull(info); + } + + @Test + public void sqlServerServiceCreationWithJdbcUrl() { + when(mockEnvironment.getEnvValue("VCAP_SERVICES")) + .thenReturn(getServicesPayload( + getSqlServerServicePayloadWithJdbcurl(SERVICE_NAME, hostname, port, username, password, INSTANCE_NAME, SQLSERVER_SCHEME))); + List serviceInfos = testCloudConnector.getServiceInfos(); + + SqlServerServiceInfo info = (SqlServerServiceInfo) getServiceInfo(serviceInfos, SERVICE_NAME); + assertServiceFoundOfType(info, SqlServerServiceInfo.class); + assertEquals(RelationalServiceInfo.JDBC_PREFIX + "sqlserver:rawjdbcurl", info.getJdbcUrl()); + } + + protected String getSqlServerServicePayloadWithJdbcurl(String serviceName, String hostname, int port, + String user, String password, String name, String scheme) { + String payload = getRelationalPayload("test-sqlserver-info-jdbc-url.json", serviceName, + hostname, port, user, password, name); + return payload.replace("$scheme", scheme); + } + + private String getSqlServerJdbcUrl(String name) { + return "jdbc:sqlserver://" + hostname + ":" + port + ";database=" + name + ";user=" + username + ";password=" + password; + } +} 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 new file mode 100644 index 0000000..a460924 --- /dev/null +++ b/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-sqlserver-info-jdbc-url.json @@ -0,0 +1,7 @@ +{ + "name": "$serviceName", + "credentials": { + "jdbcUrl": "jdbc:sqlserver:rawjdbcurl", + "uri": "sqlserver://$user:$password@$hostname:$port/$name" + } +} \ No newline at end of file diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/SqlServerDataSourceFactoryTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/SqlServerDataSourceFactoryTest.java new file mode 100644 index 0000000..03b7823 --- /dev/null +++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/SqlServerDataSourceFactoryTest.java @@ -0,0 +1,9 @@ +package org.springframework.cloud.service.relational; + +import org.springframework.cloud.service.common.SqlServerServiceInfo; + +public class SqlServerDataSourceFactoryTest extends AbstractDataSourceFactoryTest { + public SqlServerServiceInfo getTestServiceInfo(String id) { + return new SqlServerServiceInfo(id, "sqlserver://username:pass@host:port/db"); + } +} diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/SqlServerServiceCreatorTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/SqlServerServiceCreatorTest.java new file mode 100644 index 0000000..92ebfa1 --- /dev/null +++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/relational/SqlServerServiceCreatorTest.java @@ -0,0 +1,41 @@ +package org.springframework.cloud.service.relational; + +import static org.mockito.Mockito.when; + +import org.junit.Before; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.cloud.service.common.SqlServerServiceInfo; + +public class SqlServerServiceCreatorTest extends AbstractDataSourceCreatorTest { + @Mock private SqlServerServiceInfo mockSqlServerServiceInfo; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + // set a dummy JDBC driver since we can't include a real SQL-Server driver in the project due to licensing restrictions + System.setProperty("spring-cloud.sqlserver.driver", "com.example.Driver"); + } + + @Override + public SqlServerServiceInfo createServiceInfo() { + when(mockSqlServerServiceInfo.getJdbcUrl()).thenReturn("sqlserver://myuser:mypassword@10.20.30.40:1433/database-123"); + + return mockSqlServerServiceInfo; + } + + @Override + public String getDriverName() { + return "com.example.Driver"; + } + + @Override + public SqlServerDataSourceCreator getCreator() { + return new SqlServerDataSourceCreator(); + } + + @Override + public String getValidationQueryStart() { + return "SELECT 1"; + } +}