diff --git a/.gitignore b/.gitignore
index 1eb96eb..b88feb1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,5 @@ Servers
.gradle
_site
/bin
+.idea
+*.iml
diff --git a/README.md b/README.md
index 7064240..f5964e0 100644
--- a/README.md
+++ b/README.md
@@ -55,21 +55,21 @@ particular environment.
org.springframework.cloud
spring-cloud-localconfig-connector
- 1.1.0.RELEASE
+ 1.1.1.RELEASE
org.springframework.cloud
spring-cloud-cloudfoundry-connector
- 1.1.0.RELEASE
+ 1.1.1.RELEASE
org.springframework.cloud
spring-cloud-heroku-connector
- 1.1.0.RELEASE
+ 1.1.1.RELEASE
````
@@ -82,28 +82,28 @@ addition to your cloud connectors:
org.springframework.cloud
spring-cloud-spring-service-connector
- 1.1.0.RELEASE
+ 1.1.1.RELEASE
org.springframework.cloud
spring-cloud-localconfig-connector
- 1.1.0.RELEASE
+ 1.1.1.RELEASE
org.springframework.cloud
spring-cloud-cloudfoundry-connector
- 1.1.0.RELEASE
+ 1.1.1.RELEASE
org.springframework.cloud
spring-cloud-heroku-connector
- 1.1.0.RELEASE
+ 1.1.1.RELEASE
````
@@ -115,4 +115,5 @@ the `` namespace](spring-cloud-spring-service-connector).
The [`spring-cloud-core`](core) dependency is included by each cloud connector,
so simply include the connectors for the platforms you want.
-Then follow the [instructions](spring-cloud-core) on using the Spring Cloud API.
\ No newline at end of file
+Then follow the [instructions](spring-cloud-core) on using the Spring Cloud API.
+
diff --git a/build.gradle b/build.gradle
index 2598d51..ec520ba 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,43 +1,43 @@
apply plugin: 'base'
description = "Spring Cloud"
-
+
buildscript {
- repositories {
- maven { url 'http://repo.springsource.org/plugins-release' }
- }
- dependencies {
- classpath 'org.springframework.build.gradle:propdeps-plugin:0.0.5'
- classpath 'org.springframework.build.gradle:spring-io-plugin:0.0.3.RELEASE'
- }
+ repositories {
+ maven { url 'http://repo.springsource.org/plugins-release' }
+ }
+ dependencies {
+ classpath 'org.springframework.build.gradle:propdeps-plugin:0.0.5'
+ classpath 'org.springframework.build.gradle:spring-io-plugin:0.0.3.RELEASE'
+ }
}
ext {
- springVersion = "3.1.4.RELEASE"
- tomcatVersion = "7.0.53"
+ springVersion = "3.1.4.RELEASE"
+ tomcatVersion = "7.0.53"
- springAmqpVersion = "1.0.0.RELEASE"
- springDataRedisVersion = "1.1.1.RELEASE"
- springDataMongoVersion = "1.2.4.RELEASE"
-
- jedisVersion = "2.1.0"
+ springAmqpVersion = "1.1.1.RELEASE"
+ springDataRedisVersion = "1.1.1.RELEASE"
+ springDataMongoVersion = "1.2.4.RELEASE"
- commonDbcpVersion = "1.4"
- commonDbcp2Version = "2.0"
+ jedisVersion = "2.1.0"
- mysqlDriverVersion = "5.1.29"
- mariadbDriverVersion = "1.1.3"
- postgresDriverVersion = "9.0-801.jdbc4"
- javaxMailVersion = "1.4.7"
- cglibVersion = "3.1"
+ commonDbcpVersion = "1.4"
+ commonDbcp2Version = "2.0"
- jacksonVersion = "2.3.3"
+ mysqlDriverVersion = "5.1.29"
+ mariadbDriverVersion = "1.1.3"
+ postgresDriverVersion = "9.0-801.jdbc4"
+ javaxMailVersion = "1.4.7"
+ cglibVersion = "3.1"
- log4jVersion = "1.2.17"
+ jacksonVersion = "2.3.3"
+
+ junitVersion = "4.11"
+ mockitoVersion = "1.9.5"
+ eurekaClientVersion = "1.1.135"
+ hadoopCommonVersion = "2.2.0"
- junitVersion = "4.11"
- mockitoVersion = "1.9.5"
-
javadocLinks = [
'http://docs.oracle.com/javase/7/docs/api/',
'http://docs.oracle.com/javaee/6/api/',
@@ -45,70 +45,70 @@ ext {
'http://docs.spring.io/spring-amqp/docs/latest-ga/api/',
'http://docs.spring.io/spring-data/data-mongo/docs/current/api/',
'http://docs.spring.io/spring-data/data-redis/docs/current/api/'
- ] as String[]
+ ] as String[]
}
subprojects {
- apply plugin: 'java'
- apply plugin: 'maven'
- apply plugin: 'eclipse'
-
- apply plugin: 'propdeps'
- apply plugin: 'propdeps-maven'
- apply plugin: 'propdeps-idea'
- apply plugin: 'propdeps-eclipse'
+ apply plugin: 'java'
+ apply plugin: 'maven'
+ apply plugin: 'eclipse'
- apply from: "${rootProject.projectDir}/publish-maven.gradle"
+ apply plugin: 'propdeps'
+ apply plugin: 'propdeps-maven'
+ apply plugin: 'propdeps-idea'
+ apply plugin: 'propdeps-eclipse'
- if (project.hasProperty('platformVersion')) {
- apply plugin: 'spring-io'
+ apply from: "${rootProject.projectDir}/publish-maven.gradle"
- // necessary to resolve the Spring IO versions (which may include snapshots)
- repositories {
- maven { url "https://repo.spring.io/libs-snapshot" }
- }
+ if (project.hasProperty('platformVersion')) {
+ apply plugin: 'spring-io'
- dependencies {
- springIoVersions "io.spring.platform:platform-versions:${platformVersion}@properties"
- }
- }
+ // necessary to resolve the Spring IO versions (which may include snapshots)
+ repositories {
+ maven { url "https://repo.spring.io/libs-snapshot" }
+ }
- sourceCompatibility = 1.6
- targetCompatibility = 1.6
+ dependencies {
+ springIoVersions "io.spring.platform:platform-versions:${platformVersion}@properties"
+ }
+ }
+
+ sourceCompatibility = 1.6
+ targetCompatibility = 1.6
javadoc {
- options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
- options.author = true
- options.header = project.name
- }
-
- task packageSources(type: Jar) {
- classifier = 'sources'
- from sourceSets.main.allSource
- }
-
+ options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
+ options.author = true
+ options.header = project.name
+ }
+
+ task packageSources(type: Jar) {
+ classifier = 'sources'
+ from sourceSets.main.allSource
+ }
+
task javadocJar(type: Jar) {
- classifier = "javadoc"
- from javadoc
- }
+ classifier = "javadoc"
+ from javadoc
+ }
- artifacts {
- archives packageSources
- archives javadocJar
- }
+ artifacts {
+ archives packageSources
+ archives javadocJar
+ }
+
+ dependencies {
+ testCompile("junit:junit:$junitVersion")
+ testCompile("org.mockito:mockito-core:$mockitoVersion")
+ }
- dependencies {
- testCompile("junit:junit:$junitVersion")
- testCompile("org.mockito:mockito-core:$mockitoVersion")
- }
-
repositories {
- mavenLocal()
+ mavenLocal()
- maven { url "http://repo.spring.io/snapshot" }
- maven { url "http://repo.spring.io/milestone" }
- maven { url "http://repo.spring.io/libs-milestone" }
- maven { url "http://repo.maven.apache.org/maven2" }
+ maven { url "http://repo.spring.io/snapshot" }
+ maven { url "http://repo.spring.io/milestone" }
+ maven { url "http://repo.spring.io/libs-milestone" }
+ maven { url "http://repo.maven.apache.org/maven2" }
}
}
@@ -117,80 +117,80 @@ configure(rootProject) {
group = 'Distribution'
classifier = 'schema'
description = "Builds -${classifier} archive containing all " +
- "XSDs for deployment at static.springframework.org/schema."
-
+ "XSDs for deployment at static.springframework.org/schema."
+
subprojects.each { subproject ->
def Properties schemas = new Properties();
def shortName = subproject.name
-
+
subproject.sourceSets.main.resources.find {
it.path.endsWith('META-INF/spring.schemas')
}?.withInputStream { schemas.load(it) }
-
+
for (def key : schemas.keySet()) {
File xsdFile = subproject.sourceSets.main.resources.find {
it.path.endsWith(schemas.get(key))
}
assert xsdFile != null
- into ("cloud") {
+ into("cloud") {
from xsdFile.path
}
}
}
}
-
+
task api(type: Javadoc) {
- group = "Documentation"
- description = "Generates aggregated Javadoc API documentation."
- title = "${rootProject.description} ${version} API"
- options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
- options.author = true
- options.header = rootProject.description
- options.links(project.ext.javadocLinks)
+ group = "Documentation"
+ description = "Generates aggregated Javadoc API documentation."
+ title = "${rootProject.description} ${version} API"
+ options.memberLevel = org.gradle.external.javadoc.JavadocMemberLevel.PROTECTED
+ options.author = true
+ options.header = rootProject.description
+ options.links(project.ext.javadocLinks)
- source subprojects.collect { project ->
- project.sourceSets.main.allJava
- }
+ source subprojects.collect { project ->
+ project.sourceSets.main.allJava
+ }
- classpath = files(subprojects.collect { project ->
- project.sourceSets.main.compileClasspath
- })
+ classpath = files(subprojects.collect { project ->
+ project.sourceSets.main.compileClasspath
+ })
+
+ maxMemory = "1024m"
+ destinationDir = new File(buildDir, "api")
+ }
- maxMemory = "1024m"
- destinationDir = new File(buildDir, "api")
- }
-
task docsZip(type: Zip) {
group = 'Distribution'
classifier = 'docs'
description = "Builds -${classifier} archive containing api and reference " +
- "for deployment at docs.spring.io/spring-cloud/docs."
+ "for deployment at docs.spring.io/spring-cloud/docs."
- from (api) {
+ from(api) {
into 'api'
}
}
-
+
artifacts {
- archives docsZip
+ archives docsZip
archives schemaZip
}
}
ext {
matrix = [
- "mongo13" : [springDataMongoVersion : "1.3.5.RELEASE"],
- "mongo14" : [springDataMongoVersion : "1.4.2.RELEASE"],
- "mongo15" : [springDataMongoVersion : "1.5.0.RELEASE"],
- "jedis22-redis11" : [jedisVersion : "2.2.1", springDataRedisVersion : "1.1.1.RELEASE"],
- "jedis23-redis12" : [jedisVersion : "2.3.1", springDataRedisVersion : "1.2.1.RELEASE"],
- "jedis23-redis13" : [jedisVersion : "2.3.1", springDataRedisVersion : "1.3.0.RELEASE"],
- "jedis24-redis13" : [jedisVersion : "2.4.2", springDataRedisVersion : "1.3.0.RELEASE"],
- "amqp11" : [springAmqpVersion: "1.1.4.RELEASE"],
- "amqp12" : [springAmqpVersion: "1.2.2.RELEASE"],
- "amqp13" : [springAmqpVersion: "1.3.3.RELEASE"],
- "spring32": [springVersion : "3.2.9.RELEASE"],
- "spring40": [springVersion : "4.0.5.RELEASE"]
+ "mongo13" : [springDataMongoVersion: "1.3.5.RELEASE"],
+ "mongo14" : [springDataMongoVersion: "1.4.2.RELEASE"],
+ "mongo15" : [springDataMongoVersion: "1.5.0.RELEASE"],
+ "jedis22-redis11": [jedisVersion: "2.2.1", springDataRedisVersion: "1.1.1.RELEASE"],
+ "jedis23-redis12": [jedisVersion: "2.3.1", springDataRedisVersion: "1.2.1.RELEASE"],
+ "jedis23-redis13": [jedisVersion: "2.3.1", springDataRedisVersion: "1.3.0.RELEASE"],
+ "jedis24-redis13": [jedisVersion: "2.4.2", springDataRedisVersion: "1.3.0.RELEASE"],
+ "amqp11" : [springAmqpVersion: "1.1.4.RELEASE"],
+ "amqp12" : [springAmqpVersion: "1.2.2.RELEASE"],
+ "amqp13" : [springAmqpVersion: "1.3.6.RELEASE"],
+ "spring32" : [springVersion: "3.2.9.RELEASE"],
+ "spring40" : [springVersion: "4.0.5.RELEASE"]
]
}
@@ -198,15 +198,15 @@ task matrixTests
task defineMatrixTests {
def createTestTask = { name, props ->
- task "$name"(type: GradleBuild) {
- tasks = ['test']
- startParameter.projectProperties = props
- }
+ task "$name"(type: GradleBuild) {
+ tasks = ['test']
+ startParameter.projectProperties = props
+ }
}
matrix.each { sp ->
def testTask = createTestTask(sp.key, sp.value)
matrixTests.dependsOn(testTask.name)
- }
+ }
}
@@ -216,5 +216,5 @@ task dist(dependsOn: assemble) {
}
task wrapper(type: Wrapper) {
- gradleVersion = '1.12'
+ gradleVersion = '1.12'
}
diff --git a/gradle.properties b/gradle.properties
index 95ccaf8..1c405b7 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,2 +1,3 @@
-version=1.1.1.BUILD-SNAPSHOT
+version=1.1.2.BUILD-SNAPSHOT
group=org.springframework.cloud
+
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 77c676f..3587769 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Wed May 14 18:01:52 PDT 2014
+#Fri Oct 31 16:08:34 CDT 2014
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-bin.zip
+distributionUrl=http\://services.gradle.org/distributions/gradle-1.12-all.zip
diff --git a/publish-maven.gradle b/publish-maven.gradle
index 44c6719..2d1ac74 100644
--- a/publish-maven.gradle
+++ b/publish-maven.gradle
@@ -52,6 +52,11 @@ def customizePom(pom, gradleProject) {
name = 'Ramnivas Laddad'
email = 'rladdad@gopivotal.com'
}
+ developer {
+ id = 'cschaefer'
+ name = 'Chris Schaefer'
+ email = 'cschaefer@pivotal.io'
+ }
}
}
}
diff --git a/settings.gradle b/settings.gradle
index a4a8bc9..1eca68b 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -5,4 +5,4 @@ include "${rootProject.name}-cloudfoundry-connector"
include "${rootProject.name}-spring-service-connector"
include "${rootProject.name}-heroku-connector"
include "${rootProject.name}-localconfig-connector"
-include "${rootProject.name}-pcf-connector"
+
diff --git a/spring-cloud-cloudfoundry-connector/build.gradle b/spring-cloud-cloudfoundry-connector/build.gradle
index 7d8d955..c16f64a 100644
--- a/spring-cloud-cloudfoundry-connector/build.gradle
+++ b/spring-cloud-cloudfoundry-connector/build.gradle
@@ -46,11 +46,12 @@ configurations {
task testJar(type: Jar) {
classifier = 'tests'
- from sourceSets.test.output.classesDir
+ from sourceSets.test.output
}
build.dependsOn testJar
artifacts {
tests testJar
-}
\ No newline at end of file
+ archives testJar
+}
diff --git a/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/AmqpServiceInfoCreator.java b/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/AmqpServiceInfoCreator.java
index af68eee..b1d36a5 100644
--- a/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/AmqpServiceInfoCreator.java
+++ b/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/AmqpServiceInfoCreator.java
@@ -12,18 +12,18 @@ import org.springframework.cloud.service.common.AmqpServiceInfo;
public class AmqpServiceInfoCreator extends CloudFoundryServiceInfoCreator {
public AmqpServiceInfoCreator() {
- super(new Tags("rabbitmq"), AmqpServiceInfo.URI_SCHEME);
+ super(new Tags("rabbitmq"), AmqpServiceInfo.AMQP_SCHEME, AmqpServiceInfo.AMQPS_SCHEME);
}
public AmqpServiceInfo createServiceInfo(Map serviceData) {
- @SuppressWarnings("unchecked")
- Map credentials = (Map) serviceData.get("credentials");
+ Map credentials = getCredentials(serviceData);
String id = (String) serviceData.get("name");
- String uri = getStringFromCredentials(credentials, "uri", "url");
+ String uri = getUriFromCredentials(credentials);
+ String managementUri = getStringFromCredentials(credentials, "http_api_uri");
- return new AmqpServiceInfo(id, uri);
+ return new AmqpServiceInfo(id, uri, managementUri);
}
}
diff --git a/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/CloudFoundryServiceInfoCreator.java b/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/CloudFoundryServiceInfoCreator.java
index d2d95f2..ce8a834 100644
--- a/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/CloudFoundryServiceInfoCreator.java
+++ b/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/CloudFoundryServiceInfoCreator.java
@@ -1,5 +1,7 @@
package org.springframework.cloud.cloudfoundry;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -8,23 +10,21 @@ import org.springframework.cloud.service.ServiceInfo;
/**
* @author Ramnivas Laddad
+ * @author Scott Frederick
*/
public abstract class CloudFoundryServiceInfoCreator implements ServiceInfoCreator> {
private Tags tags;
- private String uriScheme;
+ private String[] uriSchemes;
- public CloudFoundryServiceInfoCreator(Tags tags, String uriScheme) {
+ public CloudFoundryServiceInfoCreator(Tags tags, String... uriSchemes) {
this.tags = tags;
- this.uriScheme = uriScheme;
- }
-
- public CloudFoundryServiceInfoCreator(Tags tags) {
- this(tags, null);
+ this.uriSchemes = uriSchemes;
}
public boolean accept(Map serviceData) {
- return tagsMatch(serviceData) || labelStartsWithTag(serviceData) || uriMatchesScheme(serviceData);
+ return tagsMatch(serviceData) || labelStartsWithTag(serviceData) ||
+ uriMatchesScheme(serviceData) || uriKeyMatchesScheme(serviceData);
}
@SuppressWarnings("unchecked")
@@ -39,24 +39,56 @@ public abstract class CloudFoundryServiceInfoCreator imp
}
protected boolean uriMatchesScheme(Map serviceData) {
- if (uriScheme == null) {
+ if (uriSchemes == null) {
return false;
}
- @SuppressWarnings("unchecked")
- Map credentials = (Map) serviceData.get("credentials");
- if (credentials != null) {
- String uri = credentials.get("uri");
- if (uri == null) {
- uri = credentials.get("url");
- }
- if (uri != null) {
- return uri.startsWith(uriScheme + "://");
+ String uri = getUriFromCredentials(getCredentials(serviceData));
+ if (uri != null) {
+ for (String uriScheme : uriSchemes) {
+ if (uri.startsWith(uriScheme + "://")) {
+ return true;
+ }
}
}
return false;
}
+ protected boolean uriKeyMatchesScheme(Map serviceData) {
+ if (uriSchemes == null) {
+ return false;
+ }
+
+ Map credentials = getCredentials(serviceData);
+
+ for (String uriScheme : uriSchemes) {
+ if (credentials.containsKey(uriScheme + "Uri") || credentials.containsKey(uriScheme + "uri") ||
+ credentials.containsKey(uriScheme + "Url") || credentials.containsKey(uriScheme + "url")) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @SuppressWarnings("unchecked")
+ protected Map getCredentials(Map serviceData) {
+ return (Map) serviceData.get("credentials");
+ }
+
+ protected String getUriFromCredentials(Map credentials) {
+ List keys = new ArrayList();
+ keys.addAll(Arrays.asList("uri", "url"));
+
+ for (String uriScheme : uriSchemes) {
+ keys.add(uriScheme + "Uri");
+ keys.add(uriScheme + "uri");
+ keys.add(uriScheme + "Url");
+ keys.add(uriScheme + "url");
+ }
+
+ return getStringFromCredentials(credentials, keys.toArray(new String[keys.size()]));
+ }
+
protected String getStringFromCredentials(Map credentials, String... keys) {
for (String key : keys) {
if (credentials.containsKey(key)) {
@@ -66,7 +98,21 @@ public abstract class CloudFoundryServiceInfoCreator imp
return null;
}
- public String getUriScheme() {
- return uriScheme;
+ protected int getIntFromCredentials(Map credentials, String... keys) {
+ for (String key : keys) {
+ if (credentials.containsKey(key)) {
+ // allows the value to be quoted as a String or native integer type
+ return Integer.parseInt(credentials.get(key).toString());
+ }
+ }
+ return -1;
+ }
+
+ public String[] getUriSchemes() {
+ return uriSchemes;
+ }
+
+ public String getDefaultUriScheme() {
+ return uriSchemes[0];
}
}
diff --git a/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/MongoServiceInfoCreator.java b/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/MongoServiceInfoCreator.java
index ac963c5..1749e77 100644
--- a/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/MongoServiceInfoCreator.java
+++ b/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/MongoServiceInfoCreator.java
@@ -12,17 +12,14 @@ import org.springframework.cloud.service.common.MongoServiceInfo;
public class MongoServiceInfoCreator extends CloudFoundryServiceInfoCreator {
public MongoServiceInfoCreator() {
- // the literal in the tag is CloudFoundry-specific
- super(new Tags("mongodb"), MongoServiceInfo.URI_SCHEME);
+ // the literal in the tag is CloudFoundry-specific
+ super(new Tags("mongodb"), MongoServiceInfo.MONGODB_SCHEME);
}
public MongoServiceInfo createServiceInfo(Map serviceData) {
- @SuppressWarnings("unchecked")
- Map credentials = (Map) serviceData.get("credentials");
-
String id = (String) serviceData.get("name");
- String uri = getStringFromCredentials(credentials, "uri", "url");
+ String uri = getUriFromCredentials(getCredentials(serviceData));
return new MongoServiceInfo(id, uri);
}
diff --git a/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/MysqlServiceInfoCreator.java b/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/MysqlServiceInfoCreator.java
index b5c6e15..fb64ddd 100644
--- a/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/MysqlServiceInfoCreator.java
+++ b/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/MysqlServiceInfoCreator.java
@@ -10,8 +10,8 @@ import org.springframework.cloud.service.common.MysqlServiceInfo;
public class MysqlServiceInfoCreator extends RelationalServiceInfoCreator {
public MysqlServiceInfoCreator() {
- // the literal in the tag is CloudFoundry-specific
- super(new Tags("mysql"), MysqlServiceInfo.URI_SCHEME);
+ // the literal in the tag is CloudFoundry-specific
+ super(new Tags("mysql"), MysqlServiceInfo.MYSQL_SCHEME);
}
@Override
diff --git a/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/OracleServiceInfoCreator.java b/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/OracleServiceInfoCreator.java
index 1d82ab3..85ee4ce 100644
--- a/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/OracleServiceInfoCreator.java
+++ b/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/OracleServiceInfoCreator.java
@@ -4,7 +4,7 @@ import org.springframework.cloud.service.common.OracleServiceInfo;
public class OracleServiceInfoCreator extends RelationalServiceInfoCreator {
public OracleServiceInfoCreator() {
- super(new Tags(), OracleServiceInfo.URI_SCHEME);
+ super(new Tags(), OracleServiceInfo.ORACLE_SCHEME);
}
@Override
diff --git a/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/PostgresqlServiceInfoCreator.java b/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/PostgresqlServiceInfoCreator.java
index abfbde1..6426f08 100644
--- a/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/PostgresqlServiceInfoCreator.java
+++ b/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/PostgresqlServiceInfoCreator.java
@@ -10,7 +10,7 @@ import org.springframework.cloud.service.common.PostgresqlServiceInfo;
public class PostgresqlServiceInfoCreator extends RelationalServiceInfoCreator {
public PostgresqlServiceInfoCreator() {
- super(new Tags("postgresql"), PostgresqlServiceInfo.URI_SCHEME);
+ super(new Tags("postgresql"), PostgresqlServiceInfo.POSTGRES_SCHEME);
}
@Override
diff --git a/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/RedisServiceInfoCreator.java b/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/RedisServiceInfoCreator.java
index f8fcfa3..d038cd3 100644
--- a/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/RedisServiceInfoCreator.java
+++ b/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/RedisServiceInfoCreator.java
@@ -12,21 +12,19 @@ import org.springframework.cloud.service.common.RedisServiceInfo;
public class RedisServiceInfoCreator extends CloudFoundryServiceInfoCreator {
public RedisServiceInfoCreator() {
- // the literal in the tag is CloudFoundry-specific
- super(new Tags("redis"), RedisServiceInfo.URI_SCHEME);
+ // the literal in the tag is CloudFoundry-specific
+ super(new Tags("redis"), RedisServiceInfo.REDIS_SCHEME);
}
public RedisServiceInfo createServiceInfo(Map serviceData) {
- @SuppressWarnings("unchecked")
- Map credentials = (Map) serviceData.get("credentials");
-
String id = (String) serviceData.get("name");
- String uri = getStringFromCredentials(credentials, "uri", "url");
+ Map credentials = getCredentials(serviceData);
+ String uri = getUriFromCredentials(credentials);
if (uri == null) {
String host = getStringFromCredentials(credentials, "hostname", "host");
- Integer port = Integer.parseInt(credentials.get("port").toString());
+ Integer port = getIntFromCredentials(credentials, "port");
String password = (String) credentials.get("password");
return new RedisServiceInfo(id, host, port, password);
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 d61fcfa..8a4247e 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
@@ -12,30 +12,28 @@ import org.springframework.cloud.util.UriInfo;
*/
public abstract class RelationalServiceInfoCreator extends CloudFoundryServiceInfoCreator {
- public RelationalServiceInfoCreator(Tags tags, String uriScheme) {
- super(tags, uriScheme);
+ public RelationalServiceInfoCreator(Tags tags, String... uriSchemes) {
+ super(tags, uriSchemes);
}
public abstract SI createServiceInfo(String id, String uri);
- public SI createServiceInfo(Map serviceData) {
- @SuppressWarnings("unchecked")
- Map credentials = (Map) serviceData.get("credentials");
-
+ public SI createServiceInfo(Map serviceData) {
String id = (String) serviceData.get("name");
- String uri = getStringFromCredentials(credentials, "uri", "url");
+ Map credentials = getCredentials(serviceData);
+ String uri = getUriFromCredentials(credentials);
if (uri == null) {
String host = getStringFromCredentials(credentials, "hostname", "host");
- int port = Integer.parseInt(credentials.get("port").toString()); // allows the port attribute to be quoted or plain
+ int port = getIntFromCredentials(credentials, "port");
String username = getStringFromCredentials(credentials, "user", "username");
String password = (String) credentials.get("password");
String database = (String) credentials.get("name");
- uri = new UriInfo(getUriScheme(), host, port, username, password, database).toString();
+ uri = new UriInfo(getDefaultUriScheme(), host, port, username, password, database).toString();
}
return createServiceInfo(id, uri);
diff --git a/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/SmtpServiceInfoCreator.java b/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/SmtpServiceInfoCreator.java
index 10bd6e5..36cbdf6 100644
--- a/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/SmtpServiceInfoCreator.java
+++ b/spring-cloud-cloudfoundry-connector/src/main/java/org/springframework/cloud/cloudfoundry/SmtpServiceInfoCreator.java
@@ -8,6 +8,7 @@ import org.springframework.cloud.util.UriInfo;
/**
*
* @author Ramnivas Laddad
+ * @author Scott Frederick
*
*/
public class SmtpServiceInfoCreator extends CloudFoundryServiceInfoCreator {
@@ -15,27 +16,30 @@ public class SmtpServiceInfoCreator extends CloudFoundryServiceInfoCreator serviceData) {
+ public SmtpServiceInfo createServiceInfo(Map serviceData) {
String id = (String) serviceData.get("name");
- @SuppressWarnings("unchecked")
- Map credentials = (Map) serviceData.get("credentials");
- String host = (String) credentials.get("hostname");
+ Map credentials = getCredentials(serviceData);
- int port = DEFAULT_SMTP_PORT;
- if (credentials.containsKey("port")) {
- port = Integer.parseInt(credentials.get("port").toString());
+ String uri = getUriFromCredentials(credentials);
+
+ if (uri == null) {
+ String host = getStringFromCredentials(credentials, "host", "hostname");
+
+ int port = getIntFromCredentials(credentials, "port");
+ if (port == -1) {
+ port = DEFAULT_SMTP_PORT;
+ }
+
+ String username = getStringFromCredentials(credentials, "user", "username");
+ String password = getStringFromCredentials(credentials, "password");
+
+ uri = new UriInfo(SmtpServiceInfo.SMTP_SCHEME, host, port, username, password).toString();
}
- String username = (String) credentials.get("username");
- String password = (String) credentials.get("password");
-
- String uri = new UriInfo(SmtpServiceInfo.URI_SCHEME, host, port, username, password).toString();
-
return new SmtpServiceInfo(id, uri);
}
diff --git a/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/AbstractCloudFoundryConnectorTest.java b/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/AbstractCloudFoundryConnectorTest.java
index 5bab776..5809a08 100644
--- a/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/AbstractCloudFoundryConnectorTest.java
+++ b/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/AbstractCloudFoundryConnectorTest.java
@@ -11,11 +11,15 @@ import java.util.Scanner;
import org.junit.Before;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
+import org.mockito.internal.matchers.InstanceOf;
import org.springframework.cloud.service.ServiceInfo;
import org.springframework.cloud.util.EnvironmentAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertThat;
+
/**
* Base test class that provides setup and utility methods to generate test payload
*
@@ -120,5 +124,14 @@ public abstract class AbstractCloudFoundryConnectorTest {
private static String quote(String str) {
return "\"" + str + "\"";
}
-
+
+ protected static void assertServiceFoundOfType(ServiceInfo serviceInfo, Class extends ServiceInfo> type) {
+ assertNotNull(serviceInfo);
+ assertThat(serviceInfo, new InstanceOf(type));
+ }
+
+ protected static void assertServiceFoundOfType(List serviceInfos, String serviceId, Class extends ServiceInfo> type) {
+ ServiceInfo serviceInfo = getServiceInfo(serviceInfos, serviceId);
+ assertServiceFoundOfType(serviceInfo, type);
+ }
}
diff --git a/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorAmqpServiceTest.java b/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorAmqpServiceTest.java
index 0478a7e..3421d06 100644
--- a/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorAmqpServiceTest.java
+++ b/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorAmqpServiceTest.java
@@ -1,12 +1,16 @@
package org.springframework.cloud.cloudfoundry;
-import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.mockito.Matchers.isNull;
import static org.mockito.Mockito.when;
import java.util.List;
import org.junit.Test;
+import org.mockito.internal.matchers.InstanceOf;
import org.springframework.cloud.service.ServiceInfo;
+import org.springframework.cloud.service.common.AmqpServiceInfo;
/**
*
@@ -22,8 +26,34 @@ public class CloudFoundryConnectorAmqpServiceTest extends AbstractCloudFoundryCo
getRabbitServicePayloadWithTags("rabbit-2", hostname, port, username, password, "q-2", "vhost2")));
List serviceInfos = testCloudConnector.getServiceInfos();
- assertNotNull(getServiceInfo(serviceInfos, "rabbit-1"));
- assertNotNull(getServiceInfo(serviceInfos, "rabbit-2"));
+ 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 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 serviceInfos = testCloudConnector.getServiceInfos();
+ assertServiceFoundOfType(serviceInfos, "rabbit-1", AmqpServiceInfo.class);
+ AmqpServiceInfo amqpServiceInfo = (AmqpServiceInfo) serviceInfos.get(0);
+ assertNull(amqpServiceInfo.getManagementUri());
}
@Test
@@ -34,20 +64,32 @@ public class CloudFoundryConnectorAmqpServiceTest extends AbstractCloudFoundryCo
getRabbitServicePayloadWithoutTags("rabbit-2", hostname, port, username, password, "q-2", "vhost2")));
List serviceInfos = testCloudConnector.getServiceInfos();
- assertNotNull(getServiceInfo(serviceInfos, "rabbit-1"));
- assertNotNull(getServiceInfo(serviceInfos, "rabbit-2"));
+ assertServiceFoundOfType(serviceInfos, "rabbit-1", AmqpServiceInfo.class);
+ assertServiceFoundOfType(serviceInfos, "rabbit-2", AmqpServiceInfo.class);
}
- @Test
- public void rabbitServiceCreationNoLabelNoTags() {
+ @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 serviceInfos = testCloudConnector.getServiceInfos();
- assertNotNull(getServiceInfo(serviceInfos, "rabbit-1"));
- assertNotNull(getServiceInfo(serviceInfos, "rabbit-2"));
+ 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 serviceInfos = testCloudConnector.getServiceInfos();
+ assertServiceFoundOfType(serviceInfos, "rabbit-1", AmqpServiceInfo.class);
+ assertServiceFoundOfType(serviceInfos, "rabbit-2", AmqpServiceInfo.class);
}
private String getRabbitServicePayloadWithoutTags(String serviceName,
@@ -66,6 +108,14 @@ public class CloudFoundryConnectorAmqpServiceTest extends AbstractCloudFoundryCo
hostname, port, user, password, name, vHost);
}
+ private String getRabbitServicePayloadNoLabelNoTagsSecure(String serviceName,
+ String hostname, int port,
+ String user, String password, String name,
+ String vHost) {
+ return getRabbitServicePayload("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,
diff --git a/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorMongodbServiceTest.java b/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorMongodbServiceTest.java
index b28987c..1b13919 100644
--- a/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorMongodbServiceTest.java
+++ b/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorMongodbServiceTest.java
@@ -1,68 +1,66 @@
package org.springframework.cloud.cloudfoundry;
-import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.when;
import java.util.List;
import org.junit.Test;
import org.springframework.cloud.service.ServiceInfo;
+import org.springframework.cloud.service.common.MongoServiceInfo;
/**
- *
* @author Ramnivas Laddad
- *
*/
public class CloudFoundryConnectorMongodbServiceTest extends AbstractCloudFoundryConnectorTest {
@Test
public void mongoServiceCreation() {
when(mockEnvironment.getEnvValue("VCAP_SERVICES"))
- .thenReturn(getServicesPayload(
- getMongoServicePayload("mongo-1", hostname, port, username, password, "inventory-1", "db"),
- getMongoServicePayload("mongo-2", hostname, port, username, password, "inventory-2", "db")));
+ .thenReturn(getServicesPayload(
+ getMongoServicePayload("mongo-1", hostname, port, username, password, "inventory-1", "db"),
+ getMongoServicePayload("mongo-2", hostname, port, username, password, "inventory-2", "db")));
List serviceInfos = testCloudConnector.getServiceInfos();
- assertNotNull(getServiceInfo(serviceInfos, "mongo-1"));
- assertNotNull(getServiceInfo(serviceInfos, "mongo-2"));
+ assertServiceFoundOfType(serviceInfos, "mongo-1", MongoServiceInfo.class);
+ assertServiceFoundOfType(serviceInfos, "mongo-2", MongoServiceInfo.class);
}
- @Test
- public void mongoServiceCreationNoLabelNoTags() {
+ @Test
+ public void mongoServiceCreationNoLabelNoTags() {
when(mockEnvironment.getEnvValue("VCAP_SERVICES"))
- .thenReturn(getServicesPayload(
- getMongoServicePayloadNoLabelNoTags("mongo-1", hostname, port, username, password, "inventory-1", "db"),
- getMongoServicePayloadNoLabelNoTags("mongo-2", hostname, port, username, password, "inventory-2", "db")));
+ .thenReturn(getServicesPayload(
+ getMongoServicePayloadNoLabelNoTags("mongo-1", hostname, port, username, password, "inventory-1", "db"),
+ getMongoServicePayloadNoLabelNoTags("mongo-2", hostname, port, username, password, "inventory-2", "db")));
+
+ List serviceInfos = testCloudConnector.getServiceInfos();
+ assertServiceFoundOfType(serviceInfos, "mongo-1", MongoServiceInfo.class);
+ assertServiceFoundOfType(serviceInfos, "mongo-2", MongoServiceInfo.class);
+ }
- List serviceInfos = testCloudConnector.getServiceInfos();
- assertNotNull(getServiceInfo(serviceInfos, "mongo-1"));
- assertNotNull(getServiceInfo(serviceInfos, "mongo-2"));
- }
-
private String getMongoServicePayload(String serviceName, String hostname, int port,
String username, String password, String db, String name) {
- return getMongoServicePayload("test-mongodb-info.json",
- serviceName, hostname, port, username, password, db, name);
+ return getMongoServicePayload("test-mongodb-info.json",
+ serviceName, hostname, port, username, password, db, name);
}
- private String getMongoServicePayloadNoLabelNoTags(String serviceName,
- String hostname, int port,
- String username, String password, String db, String name) {
- return getMongoServicePayload("test-mongodb-info-no-label-no-tags.json",
- serviceName, hostname, port, username, password, db, name);
- }
+ private String getMongoServicePayloadNoLabelNoTags(String serviceName,
+ String hostname, int port,
+ String username, String password, String db, String name) {
+ return getMongoServicePayload("test-mongodb-info-no-label-no-tags.json",
+ serviceName, hostname, port, username, password, db, name);
+ }
- private String getMongoServicePayload(String payloadFile, String serviceName,
- String hostname, int port,
- String username, String password, String db, String name) {
- String payload = readTestDataFile(payloadFile);
- payload = payload.replace("$serviceName", serviceName);
- payload = payload.replace("$hostname", hostname);
- payload = payload.replace("$port", Integer.toString(port));
- payload = payload.replace("$username", username);
- payload = payload.replace("$password", password);
- payload = payload.replace("$db", db);
- payload = payload.replace("$name", name);
-
- return payload;
- }
+ private String getMongoServicePayload(String payloadFile, String serviceName,
+ String hostname, int port,
+ String username, String password, String db, String name) {
+ String payload = readTestDataFile(payloadFile);
+ payload = payload.replace("$serviceName", serviceName);
+ payload = payload.replace("$hostname", hostname);
+ payload = payload.replace("$port", Integer.toString(port));
+ payload = payload.replace("$username", username);
+ payload = payload.replace("$password", password);
+ payload = payload.replace("$db", db);
+ payload = payload.replace("$name", name);
+
+ return payload;
+ }
}
diff --git a/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorMonitoringServiceTest.java b/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorMonitoringServiceTest.java
index 4962782..b0e8999 100644
--- a/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorMonitoringServiceTest.java
+++ b/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorMonitoringServiceTest.java
@@ -1,12 +1,12 @@
package org.springframework.cloud.cloudfoundry;
-import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.when;
import java.util.List;
import org.junit.Test;
import org.springframework.cloud.service.ServiceInfo;
+import org.springframework.cloud.service.common.MonitoringServiceInfo;
/**
*
@@ -21,7 +21,7 @@ public class CloudFoundryConnectorMonitoringServiceTest extends AbstractCloudFou
.thenReturn(getServicesPayload(getMonitoringServicePayload("monitoring-1")));
List serviceInfos = testCloudConnector.getServiceInfos();
- assertNotNull(getServiceInfo(serviceInfos, "monitoring-1"));
+ assertServiceFoundOfType(serviceInfos, "monitoring-1", MonitoringServiceInfo.class);
}
private String getMonitoringServicePayload(String serviceName) {
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 34cfd5c..a622097 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,7 +1,6 @@
package org.springframework.cloud.cloudfoundry;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.when;
import java.util.List;
@@ -28,8 +27,9 @@ public class CloudFoundryConnectorMysqlServiceTest extends AbstractCloudFoundryC
MysqlServiceInfo info1 = (MysqlServiceInfo) getServiceInfo(serviceInfos, "mysql-1");
MysqlServiceInfo info2 = (MysqlServiceInfo) getServiceInfo(serviceInfos, "mysql-2");
- assertNotNull(info1);
- assertNotNull(info2);
+
+ assertServiceFoundOfType(info1, MysqlServiceInfo.class);
+ assertServiceFoundOfType(info2, MysqlServiceInfo.class);
assertEquals(getJdbcUrl("mysql", name1), info1.getJdbcUrl());
assertEquals(getJdbcUrl("mysql", name2), info2.getJdbcUrl());
}
@@ -46,8 +46,8 @@ public class CloudFoundryConnectorMysqlServiceTest extends AbstractCloudFoundryC
MysqlServiceInfo info1 = (MysqlServiceInfo) getServiceInfo(serviceInfos, "mysql-1");
MysqlServiceInfo info2 = (MysqlServiceInfo) getServiceInfo(serviceInfos, "mysql-2");
- assertNotNull(info1);
- assertNotNull(info2);
+ assertServiceFoundOfType(info1, MysqlServiceInfo.class);
+ assertServiceFoundOfType(info2, MysqlServiceInfo.class);
assertEquals(getJdbcUrl("mysql", name1), info1.getJdbcUrl());
assertEquals(getJdbcUrl("mysql", name2), info2.getJdbcUrl());
}
@@ -64,8 +64,8 @@ public class CloudFoundryConnectorMysqlServiceTest extends AbstractCloudFoundryC
MysqlServiceInfo info1 = (MysqlServiceInfo) getServiceInfo(serviceInfos, "mysql-1");
MysqlServiceInfo info2 = (MysqlServiceInfo) getServiceInfo(serviceInfos, "mysql-2");
- assertNotNull(info1);
- assertNotNull(info2);
+ assertServiceFoundOfType(info1, MysqlServiceInfo.class);
+ assertServiceFoundOfType(info2, MysqlServiceInfo.class);
assertEquals(getJdbcUrl("mysql", name1), info1.getJdbcUrl());
assertEquals(getJdbcUrl("mysql", name2), info2.getJdbcUrl());
}
@@ -82,8 +82,8 @@ public class CloudFoundryConnectorMysqlServiceTest extends AbstractCloudFoundryC
MysqlServiceInfo info1 = (MysqlServiceInfo) getServiceInfo(serviceInfos, "mysql-1");
MysqlServiceInfo info2 = (MysqlServiceInfo) getServiceInfo(serviceInfos, "mysql-2");
- assertNotNull(info1);
- assertNotNull(info2);
+ assertServiceFoundOfType(info1, MysqlServiceInfo.class);
+ assertServiceFoundOfType(info2, MysqlServiceInfo.class);
assertEquals(getJdbcUrl("mysql", name1), info1.getJdbcUrl());
assertEquals(getJdbcUrl("mysql", name2), info2.getJdbcUrl());
}
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 d11ecf0..7a23916 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
@@ -27,7 +27,7 @@ public class CloudFoundryConnectorOracleServiceTest extends AbstractUserProvided
List serviceInfos = testCloudConnector.getServiceInfos();
OracleServiceInfo info = (OracleServiceInfo) getServiceInfo(serviceInfos, SERVICE_NAME);
- assertNotNull(info);
+ assertServiceFoundOfType(info, OracleServiceInfo.class);
assertEquals(getOracleJdbcUrl(INSTANCE_NAME), info.getJdbcUrl());
}
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 939fe5d..428b6b3 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,7 +1,6 @@
package org.springframework.cloud.cloudfoundry;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.when;
import java.util.List;
@@ -27,8 +26,9 @@ public class CloudFoundryConnectorPostgresqlServiceTest extends AbstractCloudFou
List serviceInfos = testCloudConnector.getServiceInfos();
PostgresqlServiceInfo info1 = (PostgresqlServiceInfo) getServiceInfo(serviceInfos, "postgresql-1");
PostgresqlServiceInfo info2 = (PostgresqlServiceInfo) getServiceInfo(serviceInfos, "postgresql-2");
- assertNotNull(info1);
- assertNotNull(info2);
+
+ assertServiceFoundOfType(info1, PostgresqlServiceInfo.class);
+ assertServiceFoundOfType(info2, PostgresqlServiceInfo.class);
assertEquals(getJdbcUrl("postgres", name1), info1.getJdbcUrl());
assertEquals(getJdbcUrl("postgres", name2), info2.getJdbcUrl());
}
@@ -45,8 +45,9 @@ public class CloudFoundryConnectorPostgresqlServiceTest extends AbstractCloudFou
List serviceInfos = testCloudConnector.getServiceInfos();
PostgresqlServiceInfo info1 = (PostgresqlServiceInfo) getServiceInfo(serviceInfos, "postgresql-1");
PostgresqlServiceInfo info2 = (PostgresqlServiceInfo) getServiceInfo(serviceInfos, "postgresql-2");
- assertNotNull(info1);
- assertNotNull(info2);
+
+ assertServiceFoundOfType(info1, PostgresqlServiceInfo.class);
+ assertServiceFoundOfType(info2, PostgresqlServiceInfo.class);
assertEquals(getJdbcUrl("postgres", name1), info1.getJdbcUrl());
assertEquals(getJdbcUrl("postgres", name2), info2.getJdbcUrl());
}
diff --git a/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorRedisServiceTest.java b/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorRedisServiceTest.java
index de2e8e1..1be5666 100644
--- a/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorRedisServiceTest.java
+++ b/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorRedisServiceTest.java
@@ -1,12 +1,12 @@
package org.springframework.cloud.cloudfoundry;
-import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.when;
import java.util.List;
import org.junit.Test;
import org.springframework.cloud.service.ServiceInfo;
+import org.springframework.cloud.service.common.RedisServiceInfo;
/**
*
@@ -22,8 +22,8 @@ public class CloudFoundryConnectorRedisServiceTest extends AbstractCloudFoundryC
getRedisServicePayload("redis-2", hostname, port, password, "redis-db")));
List serviceInfos = testCloudConnector.getServiceInfos();
- assertNotNull(getServiceInfo(serviceInfos, "redis-1"));
- assertNotNull(getServiceInfo(serviceInfos, "redis-2"));
+ assertServiceFoundOfType(serviceInfos, "redis-1", RedisServiceInfo.class);
+ assertServiceFoundOfType(serviceInfos, "redis-2", RedisServiceInfo.class);
}
@Test
@@ -34,8 +34,8 @@ public class CloudFoundryConnectorRedisServiceTest extends AbstractCloudFoundryC
getRedisServicePayloadNoLabelNoTags("redis-2", hostname, port, password, "redis-db")));
List serviceInfos = testCloudConnector.getServiceInfos();
- assertNotNull(getServiceInfo(serviceInfos, "redis-1"));
- assertNotNull(getServiceInfo(serviceInfos, "redis-2"));
+ assertServiceFoundOfType(serviceInfos, "redis-1", RedisServiceInfo.class);
+ assertServiceFoundOfType(serviceInfos, "redis-2", RedisServiceInfo.class);
}
private String getRedisServicePayload(String serviceName,
diff --git a/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorSmtpServiceTest.java b/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorSmtpServiceTest.java
index 261a540..a1ffba6 100644
--- a/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorSmtpServiceTest.java
+++ b/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryConnectorSmtpServiceTest.java
@@ -23,12 +23,26 @@ public class CloudFoundryConnectorSmtpServiceTest extends AbstractCloudFoundryCo
.thenReturn(getServicesPayload(getSmtpServicePayload("smtp-1", hostname, username, password)));
List serviceInfos = testCloudConnector.getServiceInfos();
- SmtpServiceInfo smptServiceInfo = (SmtpServiceInfo) getServiceInfo(serviceInfos, "smtp-1");
- assertNotNull(smptServiceInfo);
- assertEquals(hostname, smptServiceInfo.getHost());
- assertEquals(587, smptServiceInfo.getPort());
- assertEquals(username, smptServiceInfo.getUserName());
- assertEquals(password, smptServiceInfo.getPassword());
+ SmtpServiceInfo smtpServiceInfo = (SmtpServiceInfo) getServiceInfo(serviceInfos, "smtp-1");
+ assertNotNull(smtpServiceInfo);
+ assertEquals(hostname, smtpServiceInfo.getHost());
+ assertEquals(587, smtpServiceInfo.getPort());
+ assertEquals(username, smtpServiceInfo.getUserName());
+ assertEquals(password, smtpServiceInfo.getPassword());
+ }
+
+ @Test
+ public void smtpServiceCreationWithUri() {
+ when(mockEnvironment.getEnvValue("VCAP_SERVICES"))
+ .thenReturn(getServicesPayload(getSmtpServicePayloadWithUri("smtp-1", hostname, port, username, password)));
+
+ List serviceInfos = testCloudConnector.getServiceInfos();
+ SmtpServiceInfo smtpServiceInfo = (SmtpServiceInfo) getServiceInfo(serviceInfos, "smtp-1");
+ assertNotNull(smtpServiceInfo);
+ assertEquals(hostname, smtpServiceInfo.getHost());
+ assertEquals(port, smtpServiceInfo.getPort());
+ assertEquals(username, smtpServiceInfo.getUserName());
+ assertEquals(password, smtpServiceInfo.getPassword());
}
private String getSmtpServicePayload(String serviceName, String hostname,
@@ -41,4 +55,16 @@ public class CloudFoundryConnectorSmtpServiceTest extends AbstractCloudFoundryCo
return payload;
}
+
+ private String getSmtpServicePayloadWithUri(String serviceName, String hostname, int port,
+ String user, String password) {
+ String payload = readTestDataFile("test-smtp-info-uri.json");
+ payload = payload.replace("$serviceName", serviceName);
+ payload = payload.replace("$hostname", hostname);
+ payload = payload.replace("$port", String.valueOf(port));
+ payload = payload.replace("$username", user);
+ payload = payload.replace("$password", password);
+
+ return payload;
+ }
}
diff --git a/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryServiceInfoCreatorTest.java b/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryServiceInfoCreatorTest.java
new file mode 100644
index 0000000..8d88a9f
--- /dev/null
+++ b/spring-cloud-cloudfoundry-connector/src/test/java/org/springframework/cloud/cloudfoundry/CloudFoundryServiceInfoCreatorTest.java
@@ -0,0 +1,191 @@
+package org.springframework.cloud.cloudfoundry;
+
+import org.junit.Test;
+import org.springframework.cloud.service.BaseServiceInfo;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+import static org.junit.Assert.*;
+
+public class CloudFoundryServiceInfoCreatorTest {
+
+ @Test
+ public void tagsMatch() {
+ DummyServiceInfoCreator serviceInfoCreator = new DummyServiceInfoCreator(new Tags("firstTag", "secondTag"));
+
+ assertAcceptedWithTags(serviceInfoCreator, "firstTag", "noMatchTag");
+ assertAcceptedWithTags(serviceInfoCreator, "noMatchTag", "secondTag");
+ assertAcceptedWithTags(serviceInfoCreator, "firstTag", "secondTag");
+
+ assertNotAcceptedWithTags(serviceInfoCreator, "noMatchTag");
+ assertNotAcceptedWithTags(serviceInfoCreator);
+ }
+
+ @Test
+ public void labelMatches() {
+ DummyServiceInfoCreator serviceInfoCreator = new DummyServiceInfoCreator(new Tags("testTag"));
+
+ assertAcceptedWithLabel(serviceInfoCreator, "testTag");
+ assertAcceptedWithLabel(serviceInfoCreator, "testTagWithSuffix");
+
+ assertNotAcceptedWithLabel(serviceInfoCreator, "withPrefixTestTag");
+ assertNotAcceptedWithLabel(serviceInfoCreator, "noMatchTag");
+ }
+
+ @Test
+ public void uriSchemeMatches() {
+ DummyServiceInfoCreator serviceInfoCreator = new DummyServiceInfoCreator(new Tags(), "amqp", "amqps");
+
+ assertAcceptedWithCredentials(serviceInfoCreator, "uri", "amqp://example.com");
+ assertAcceptedWithCredentials(serviceInfoCreator, "uri", "amqps://example.com");
+ assertAcceptedWithCredentials(serviceInfoCreator, "url", "amqp://example.com");
+ assertAcceptedWithCredentials(serviceInfoCreator, "url", "amqps://example.com");
+
+ assertNotAcceptedWithCredentials(serviceInfoCreator, "uri", "http://example.com");
+ assertNotAcceptedWithCredentials(serviceInfoCreator, "url", "http://example.com");
+ assertNotAcceptedWithCredentials(serviceInfoCreator, "otherkey", "amqp://example.com");
+ assertNotAcceptedWithCredentials(serviceInfoCreator, "otherkey", "amqps://example.com");
+ }
+
+ @Test
+ public void uriKeyMatchesScheme() {
+ DummyServiceInfoCreator serviceInfoCreator = new DummyServiceInfoCreator(new Tags(), "amqp", "amqps");
+
+ assertAcceptedWithCredentials(serviceInfoCreator, "amqpUri", "http://example.com");
+ assertAcceptedWithCredentials(serviceInfoCreator, "amqpsUri", "http://example.com");
+ assertAcceptedWithCredentials(serviceInfoCreator, "amqpUrl", "http://example.com");
+ assertAcceptedWithCredentials(serviceInfoCreator, "amqpsUrl", "http://example.com");
+
+ assertAcceptedWithCredentials(serviceInfoCreator, "amqpuri", "http://example.com");
+ assertAcceptedWithCredentials(serviceInfoCreator, "amqpsuri", "http://example.com");
+ assertAcceptedWithCredentials(serviceInfoCreator, "amqpurl", "http://example.com");
+ assertAcceptedWithCredentials(serviceInfoCreator, "amqpsurl", "http://example.com");
+ }
+
+ @Test
+ public void uriFromCredentials() {
+ DummyServiceInfoCreator serviceInfoCreator = new DummyServiceInfoCreator(new Tags(), "amqp", "amqps");
+
+ assertUriRetrieved(serviceInfoCreator, "uri", "amqp://example.com");
+ assertUriRetrieved(serviceInfoCreator, "uri", "amqps://example.com");
+ assertUriRetrieved(serviceInfoCreator, "url", "amqp://example.com");
+ assertUriRetrieved(serviceInfoCreator, "url", "amqps://example.com");
+
+ assertUriRetrieved(serviceInfoCreator, "amqpUri", "http://example.com");
+ assertUriRetrieved(serviceInfoCreator, "amqpsUri", "http://example.com");
+ assertUriRetrieved(serviceInfoCreator, "amqpUrl", "http://example.com");
+ assertUriRetrieved(serviceInfoCreator, "amqpsUrl", "http://example.com");
+
+ assertUriRetrieved(serviceInfoCreator, "amqpuri", "http://example.com");
+ assertUriRetrieved(serviceInfoCreator, "amqpsuri", "http://example.com");
+ assertUriRetrieved(serviceInfoCreator, "amqpurl", "http://example.com");
+ assertUriRetrieved(serviceInfoCreator, "amqpsurl", "http://example.com");
+ }
+
+
+ @Test
+ public void uriFromCredentialsWithNoSchemes() {
+ DummyServiceInfoCreator serviceInfoCreator = new DummyServiceInfoCreator(new Tags());
+
+ assertUriRetrieved(serviceInfoCreator, "uri", "amqp://example.com");
+ assertUriRetrieved(serviceInfoCreator, "url", "amqp://example.com");
+ }
+
+ private void assertUriRetrieved(DummyServiceInfoCreator serviceInfoCreator, String key, String value) {
+ Map serviceData = new ServiceDataBuilder().withCredentials(key, value).build();
+
+ Map credentials = serviceInfoCreator.getCredentials(serviceData);
+ String uri = serviceInfoCreator.getUriFromCredentials(credentials);
+
+ assertEquals(value, uri);
+ }
+
+ private void assertAcceptedWithTags(DummyServiceInfoCreator serviceInfoCreator, String... tags) {
+ Map serviceData = new ServiceDataBuilder().withTags(tags).build();
+ assertTrue(serviceInfoCreator.accept(serviceData));
+ }
+
+ private void assertNotAcceptedWithTags(DummyServiceInfoCreator serviceInfoCreator, String... tags) {
+ Map serviceData = new ServiceDataBuilder().withTags(tags).build();
+ assertFalse(serviceInfoCreator.accept(serviceData));
+ }
+
+ private void assertAcceptedWithLabel(DummyServiceInfoCreator serviceInfoCreator, String label) {
+ Map serviceData = new ServiceDataBuilder().withLabel(label).build();
+ assertTrue(serviceInfoCreator.accept(serviceData));
+ }
+
+ private void assertNotAcceptedWithLabel(DummyServiceInfoCreator serviceInfoCreator, String label) {
+ Map serviceData = new ServiceDataBuilder().withLabel(label).build();
+ assertFalse(serviceInfoCreator.accept(serviceData));
+ }
+
+ private void assertAcceptedWithCredentials(DummyServiceInfoCreator serviceInfoCreator, String key, String value) {
+ Map serviceData = new ServiceDataBuilder().withCredentials(key, value).build();
+ assertTrue(serviceInfoCreator.accept(serviceData));
+ }
+
+ private void assertNotAcceptedWithCredentials(DummyServiceInfoCreator serviceInfoCreator, String key, String value) {
+ Map serviceData = new ServiceDataBuilder().withCredentials(key, value).build();
+ assertFalse(serviceInfoCreator.accept(serviceData));
+ }
+
+ private class ServiceDataBuilder {
+ private String[] tags = new String[0];
+ private String label = "";
+ private Map credentials = new HashMap();
+
+ public ServiceDataBuilder withTags(String... tags) {
+ this.tags = tags;
+ return this;
+ }
+
+ public ServiceDataBuilder withCredentials(String key, String value) {
+ credentials.put(key, value);
+ return this;
+ }
+
+ public ServiceDataBuilder withLabel(String label) {
+ this.label = label;
+ return this;
+ }
+
+ public Map build() {
+ Map serviceData = new HashMap();
+
+ serviceData.put("tags", Arrays.asList(tags));
+ serviceData.put("label", label);
+ serviceData.put("credentials", credentials);
+
+ return serviceData;
+ }
+ }
+
+ private class DummyServiceInfoCreator extends CloudFoundryServiceInfoCreator {
+ public DummyServiceInfoCreator(Tags tags) {
+ super(tags);
+ }
+
+ public DummyServiceInfoCreator(Tags tags, String... uriSchemes) {
+ super(tags, uriSchemes);
+ }
+
+ @Override
+ public DummyServiceInfo createServiceInfo(Map serviceData) {
+ return new DummyServiceInfo("test");
+ }
+ }
+
+ private class DummyServiceInfo extends BaseServiceInfo {
+ public DummyServiceInfo(String id) {
+ super(id);
+ }
+
+ @Override
+ public String getId() {
+ return null;
+ }
+ }
+}
\ No newline at end of file
diff --git a/spring-cloud-cloudfoundry-connector/src/test/resources/log4j.properties b/spring-cloud-cloudfoundry-connector/src/test/resources/log4j.properties
deleted file mode 100644
index 11492f1..0000000
--- a/spring-cloud-cloudfoundry-connector/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-log4j.rootCategory=INFO, stdout
-
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %40.40c:%4L - %m%n
-
diff --git a/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-rabbit-info-no-label-no-tags-secure.json b/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-rabbit-info-no-label-no-tags-secure.json
new file mode 100644
index 0000000..8b2742b
--- /dev/null
+++ b/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-rabbit-info-no-label-no-tags-secure.json
@@ -0,0 +1,6 @@
+{
+ "name":"$serviceName",
+ "credentials":{
+ "uri": "amqps://$username:$password@$hostname/$virtualHost"
+ }
+}
diff --git a/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-rabbit-info.json b/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-rabbit-info.json
index 16e3428..6e4f299 100644
--- a/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-rabbit-info.json
+++ b/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-rabbit-info.json
@@ -4,6 +4,7 @@
"plan":"free",
"tags":["amqp","rabbitmq"],
"credentials":{
- "uri": "amqp://$username:$password@$hostname/$virtualHost"
+ "uri": "amqp://$username:$password@$hostname/$virtualHost",
+ "http_api_uri": "http://$user:$pass@$hostname/api"
}
}
diff --git a/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-smtp-info-uri.json b/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-smtp-info-uri.json
new file mode 100644
index 0000000..c2f1c9c
--- /dev/null
+++ b/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-smtp-info-uri.json
@@ -0,0 +1,6 @@
+{
+ "name": "$serviceName",
+ "credentials": {
+ "uri": "smtp://$username:$password@$hostname:$port"
+ }
+}
diff --git a/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-smtp-info.json b/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-smtp-info.json
index 798e990..3694a92 100644
--- a/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-smtp-info.json
+++ b/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-smtp-info.json
@@ -1,11 +1,11 @@
{
- "name": "$serviceName",
- "label": "sendgrid",
- "plan": "free",
- "tags":["smtp"],
- "credentials": {
- "hostname" : "$hostname",
- "username" : "$username",
- "password" : "$password"
- }
+ "name": "$serviceName",
+ "label": "sendgrid",
+ "plan": "free",
+ "tags": ["smtp"],
+ "credentials": {
+ "hostname": "$hostname",
+ "username": "$username",
+ "password": "$password"
+ }
}
diff --git a/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-ups-info-no-uri.json b/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-ups-info-no-uri.json
index e868710..e27a0b2 100644
--- a/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-ups-info-no-uri.json
+++ b/spring-cloud-cloudfoundry-connector/src/test/resources/org/springframework/cloud/cloudfoundry/test-ups-info-no-uri.json
@@ -7,6 +7,7 @@
"port": "$port",
"username": "$user",
"password": "$password",
- "name": "$name"
+ "name": "$name",
+ "integer": 123
}
}
\ No newline at end of file
diff --git a/spring-cloud-core/src/main/java/org/springframework/cloud/service/UriBasedServiceInfo.java b/spring-cloud-core/src/main/java/org/springframework/cloud/service/UriBasedServiceInfo.java
index fda552c..698d495 100644
--- a/spring-cloud-core/src/main/java/org/springframework/cloud/service/UriBasedServiceInfo.java
+++ b/spring-cloud-core/src/main/java/org/springframework/cloud/service/UriBasedServiceInfo.java
@@ -11,91 +11,103 @@ import org.springframework.cloud.util.UriInfoFactory;
*
*/
public abstract class UriBasedServiceInfo extends BaseServiceInfo {
- private UriInfo uriInfo;
+ private UriInfo uriInfo;
- private static UriInfoFactory uriFactory = new StandardUriInfoFactory();
+ private static UriInfoFactory uriFactory = new StandardUriInfoFactory();
- public UriBasedServiceInfo(String id, String scheme, String host, int port, String username, String password, String path) {
- super(id);
- this.uriInfo = getUriInfoFactory().createUri(scheme, host, port, username, password, path);
- this.uriInfo = validateAndCleanUriInfo(uriInfo);
- }
+ public UriBasedServiceInfo(String id, String scheme, String host, int port, String username, String password, String path) {
+ super(id);
+ this.uriInfo = getUriInfoFactory().createUri(scheme, host, port, username, password, path);
+ this.uriInfo = validateAndCleanUriInfo(uriInfo);
+ }
- public UriBasedServiceInfo(String id, String uriString) {
- super(id);
- this.uriInfo = getUriInfoFactory().createUri(uriString);
- this.uriInfo = validateAndCleanUriInfo(uriInfo);
- }
+ public UriBasedServiceInfo(String id, String uriString) {
+ super(id);
+ this.uriInfo = getUriInfoFactory().createUri(uriString);
+ this.uriInfo = validateAndCleanUriInfo(uriInfo);
+ }
- /**
- * For URI-based (@link ServiceInfo}s which don't conform to the standard URI
- * format, override this method in your own ServiceInfo class to return a {@link UriInfoFactory} which will create the
- * appropriate URIs.
- *
- * @return your special UriInfoFactory
- */
- public UriInfoFactory getUriInfoFactory() {
- return uriFactory;
- }
+ /**
+ * For URI-based (@link ServiceInfo}s which don't conform to the standard URI
+ * format, override this method in your own ServiceInfo class to return a {@link UriInfoFactory} which will create the
+ * appropriate URIs.
+ *
+ * @return your special UriInfoFactory
+ */
+ public UriInfoFactory getUriInfoFactory() {
+ return uriFactory;
+ }
- @ServiceProperty(category = "connection")
- public String getUri() {
- return uriInfo.getUri().toString();
- }
+ @ServiceProperty(category = "connection")
+ public String getUri() {
+ // converting a URI string that contains multiple hosts, ports, etc won't parse correctly.
+ // first attempt to use the parsed URI from the UriInfo, otherwise return the raw URI string
+ // that will be passed to the underlying driver / properties.
+ //
+ // TODO: either simply use URI strings or provide better support for URI's containing multiple hosts, etc.
+ //
+ if (uriInfo.getHost() != null) {
+ return uriInfo.getUri().toString();
+ }
- @ServiceProperty(category = "connection")
- public String getUserName() {
- return uriInfo.getUserName();
- }
+ return uriInfo.getRawUriString();
+ }
- @ServiceProperty(category = "connection")
- public String getPassword() {
- return uriInfo.getPassword();
- }
+ @ServiceProperty(category = "connection")
+ public String getUserName() {
+ return uriInfo.getUserName();
+ }
- @ServiceProperty(category = "connection")
- public String getHost() {
- return uriInfo.getHost();
- }
+ @ServiceProperty(category = "connection")
+ public String getPassword() {
+ return uriInfo.getPassword();
+ }
- @ServiceProperty(category = "connection")
- public int getPort() {
- return uriInfo.getPort();
- }
+ @ServiceProperty(category = "connection")
+ public String getHost() {
+ return uriInfo.getHost();
+ }
- @ServiceProperty(category = "connection")
- public String getPath() {
- return uriInfo.getPath();
- }
+ @ServiceProperty(category = "connection")
+ public int getPort() {
+ return uriInfo.getPort();
+ }
- @ServiceProperty(category = "connection")
- public String getQuery() {
- return uriInfo.getQuery();
- }
+ @ServiceProperty(category = "connection")
+ public String getPath() {
+ return uriInfo.getPath();
+ }
- @ServiceProperty(category = "connection")
- public String getScheme() {
- return uriInfo.getScheme();
- }
+ @ServiceProperty(category = "connection")
+ public String getQuery() {
+ return uriInfo.getQuery();
+ }
- /**
- * Validate the URI and clean it up by using defaults for any missing information, if possible.
- *
- * @param uriInfo
- * uri info based on parsed payload
- * @return cleaned up uri info
- */
- protected UriInfo validateAndCleanUriInfo(UriInfo uriInfo) {
- return uriInfo;
- }
+ @ServiceProperty(category = "connection")
+ public String getScheme() {
+ return uriInfo.getScheme();
+ }
- protected UriInfo getUriInfo() {
- return uriInfo;
- }
+ /**
+ * Validate the URI and clean it up by using defaults for any missing information, if possible.
+ *
+ * @param uriInfo
+ * uri info based on parsed payload
+ * @return cleaned up uri info
+ */
+ protected UriInfo validateAndCleanUriInfo(UriInfo uriInfo) {
+ return uriInfo;
+ }
- @Override
- public String toString() {
- return getClass().getSimpleName() + "[" + getScheme() + "://" + getUserName() + ":****@" + getHost() + ":" + getPort()
- + "/" + getPath() + "]";
- }
+ protected UriInfo getUriInfo() {
+ return uriInfo;
+ }
+
+ @Override
+ public String toString() {
+ // TODO: when using a simple URI string (see comments in getUri), the result of uriInfo.getRawUriString()
+ // would display the password which does not seem ideal.
+ return getClass().getSimpleName() + "[" + getScheme() + "://" + getUserName() + ":****@" + getHost() + ":" + getPort()
+ + "/" + getPath() + "]";
+ }
}
diff --git a/spring-cloud-core/src/main/java/org/springframework/cloud/service/UriBasedServiceInfoCreator.java b/spring-cloud-core/src/main/java/org/springframework/cloud/service/UriBasedServiceInfoCreator.java
index a76ab3b..9741b1f 100644
--- a/spring-cloud-core/src/main/java/org/springframework/cloud/service/UriBasedServiceInfoCreator.java
+++ b/spring-cloud-core/src/main/java/org/springframework/cloud/service/UriBasedServiceInfoCreator.java
@@ -2,24 +2,30 @@ package org.springframework.cloud.service;
import org.springframework.cloud.ServiceInfoCreator;
-public abstract class UriBasedServiceInfoCreator implements
- ServiceInfoCreator {
+public abstract class UriBasedServiceInfoCreator
+ implements ServiceInfoCreator {
- private final String uriScheme;
+ private final String[] uriSchemes;
- public UriBasedServiceInfoCreator(String uriScheme) {
- this.uriScheme = uriScheme;
- }
+ public UriBasedServiceInfoCreator(String... uriSchemes) {
+ this.uriSchemes = uriSchemes;
+ }
- @Override
- public boolean accept(UriBasedServiceData serviceData) {
- return serviceData.getUri().toString().startsWith(uriScheme + "://");
- }
+ @Override
+ public boolean accept(UriBasedServiceData serviceData) {
+ String uriString = serviceData.getUri();
+ for (String uriScheme : uriSchemes) {
+ if (uriString.startsWith(uriScheme + "://")) {
+ return true;
+ }
+ }
+ return false;
+ }
- public abstract SI createServiceInfo(String id, String uri);
+ public abstract SI createServiceInfo(String id, String uri);
- @Override
- public SI createServiceInfo(UriBasedServiceData serviceData) {
- return createServiceInfo(serviceData.getKey(), serviceData.getUri());
- }
+ @Override
+ public SI createServiceInfo(UriBasedServiceData serviceData) {
+ return createServiceInfo(serviceData.getKey(), serviceData.getUri());
+ }
}
diff --git a/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/AmqpServiceInfo.java b/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/AmqpServiceInfo.java
index aa7bb98..81feb83 100644
--- a/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/AmqpServiceInfo.java
+++ b/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/AmqpServiceInfo.java
@@ -9,19 +9,33 @@ import org.springframework.cloud.util.UriInfo;
* Information to access RabbitMQ service.
*
* @author Ramnivas Laddad
+ * @author Scott Frederick
*
*/
@ServiceLabel("rabbitmq")
public class AmqpServiceInfo extends UriBasedServiceInfo {
- public static final String URI_SCHEME = "amqp";
+ public static final String AMQP_SCHEME = "amqp";
+ public static final String AMQPS_SCHEME = "amqps";
+
+ private String managementUri;
public AmqpServiceInfo(String id, String host, int port, String username, String password, String virtualHost) {
- super(id, URI_SCHEME, host, port, username, password, virtualHost);
+ this(id, host, port, username, password, virtualHost, null);
}
- public AmqpServiceInfo(String id, String uri) throws CloudException {
+ public AmqpServiceInfo(String id, String host, int port, String username, String password, String virtualHost, String managementUri) {
+ super(id, AMQP_SCHEME, host, port, username, password, virtualHost);
+ this.managementUri = managementUri;
+ }
+
+ public AmqpServiceInfo(String id, String uri) throws CloudException {
+ this(id, uri, null);
+ }
+
+ public AmqpServiceInfo(String id, String uri, String managementUri) throws CloudException {
super(id, uri);
+ this.managementUri = managementUri;
}
@ServiceProperty(category="connection")
@@ -29,39 +43,33 @@ public class AmqpServiceInfo extends UriBasedServiceInfo {
return getUriInfo().getPath();
}
+ @ServiceProperty(category="connection")
+ public String getManagementUri() { return managementUri; }
+
@Override
protected UriInfo validateAndCleanUriInfo(UriInfo uriInfo) {
- if (!URI_SCHEME.equals(uriInfo.getScheme())) {
- throw new IllegalArgumentException("wrong scheme in amqp URI: " + uriInfo);
+ if (uriInfo.getScheme() == null) {
+ throw new IllegalArgumentException("Missing scheme in amqp URI: " + uriInfo);
}
if (uriInfo.getHost() == null) {
- throw new IllegalArgumentException("missing authority in amqp URI: " + uriInfo);
+ throw new IllegalArgumentException("Missing authority in amqp URI: " + uriInfo);
}
- int port = uriInfo.getPort();
- if (port == -1) {
- port = 5672;
- }
-
- String userName = uriInfo.getUserName();
- String password = uriInfo.getPassword();
-
- if (userName == null || password == null) {
- throw new IllegalArgumentException("missing userinfo in amqp URI: " + uriInfo);
+ if (uriInfo.getUserName() == null || uriInfo.getPassword() == null) {
+ throw new IllegalArgumentException("Missing userinfo in amqp URI: " + uriInfo);
}
String path = uriInfo.getPath();
if (path == null) {
- // The RabbitMQ default vhost
- path = "/";
+ throw new IllegalArgumentException("Missing virtual host in amqp URI: " + uriInfo);
} else {
// Check that the path only has a single segment. As we have an authority component
// in the URI, paths always begin with a slash.
if (path.indexOf('/') != -1) {
- throw new IllegalArgumentException("multiple segments in path of amqp URI: " + uriInfo);
+ throw new IllegalArgumentException("Multiple segments in path of amqp URI: " + uriInfo);
}
}
- return new UriInfo(uriInfo.getScheme(), uriInfo.getHost(), port, uriInfo.getUserName(), uriInfo.getPassword(), path);
+ return uriInfo;
}
}
diff --git a/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/MongoServiceInfo.java b/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/MongoServiceInfo.java
index a332b65..7bc4369 100644
--- a/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/MongoServiceInfo.java
+++ b/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/MongoServiceInfo.java
@@ -11,10 +11,10 @@ import org.springframework.cloud.service.ServiceInfo.ServiceLabel;
@ServiceLabel("mongo")
public class MongoServiceInfo extends UriBasedServiceInfo {
- public static final String URI_SCHEME = "mongodb";
+ public static final String MONGODB_SCHEME = "mongodb";
public MongoServiceInfo(String id, String host, int port, String username, String password, String db) {
- super(id, URI_SCHEME, host, port, username, password, db);
+ super(id, MONGODB_SCHEME, host, port, username, password, db);
}
public MongoServiceInfo(String id, String uri) {
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 f4609eb..289d503 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
@@ -10,11 +10,11 @@ import org.springframework.cloud.service.ServiceInfo.ServiceLabel;
@ServiceLabel("mysql")
public class MysqlServiceInfo extends RelationalServiceInfo {
- public static final String JDBC_URL_TYPE = "mysql";
+ private static final String JDBC_URL_TYPE = "mysql";
- public static final String URI_SCHEME = JDBC_URL_TYPE;
+ public static final String MYSQL_SCHEME = JDBC_URL_TYPE;
public MysqlServiceInfo(String id, String url) {
- super(id, url, URI_SCHEME);
+ super(id, url, 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 6d2289d..a73d107 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
@@ -5,9 +5,9 @@ import org.springframework.cloud.service.ServiceInfo;
@ServiceInfo.ServiceLabel("oracle")
public class OracleServiceInfo extends RelationalServiceInfo {
- public static final String JDBC_URL_TYPE = "oracle";
+ private static final String JDBC_URL_TYPE = "oracle";
- public static final String URI_SCHEME = JDBC_URL_TYPE;
+ public static final String ORACLE_SCHEME = JDBC_URL_TYPE;
public OracleServiceInfo(String id, String url) {
super(id, url, JDBC_URL_TYPE);
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 edcace5..ed168ca 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
@@ -11,9 +11,9 @@ import org.springframework.cloud.service.ServiceInfo.ServiceLabel;
@ServiceLabel("postgresql")
public class PostgresqlServiceInfo extends RelationalServiceInfo {
- public static final String JDBC_URL_TYPE = "postgresql";
+ private static final String JDBC_URL_TYPE = "postgresql";
- public static final String URI_SCHEME = "postgres";
+ public static final String POSTGRES_SCHEME = "postgres";
public PostgresqlServiceInfo(String id, String url) {
super(id, url, JDBC_URL_TYPE);
diff --git a/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/RedisServiceInfo.java b/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/RedisServiceInfo.java
index ab35a8e..485e300 100644
--- a/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/RedisServiceInfo.java
+++ b/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/RedisServiceInfo.java
@@ -11,10 +11,10 @@ import org.springframework.cloud.service.ServiceInfo.ServiceLabel;
@ServiceLabel("redis")
public class RedisServiceInfo extends UriBasedServiceInfo {
- public static final String URI_SCHEME = "redis";
+ public static final String REDIS_SCHEME = "redis";
public RedisServiceInfo(String id, String host, int port, String password) {
- super(id, URI_SCHEME, host, port, null, password, null);
+ super(id, REDIS_SCHEME, host, port, null, password, null);
}
public RedisServiceInfo(String id, String uri) {
diff --git a/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/SmtpServiceInfo.java b/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/SmtpServiceInfo.java
index f973626..52ca165 100644
--- a/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/SmtpServiceInfo.java
+++ b/spring-cloud-core/src/main/java/org/springframework/cloud/service/common/SmtpServiceInfo.java
@@ -4,10 +4,10 @@ import org.springframework.cloud.service.UriBasedServiceInfo;
public class SmtpServiceInfo extends UriBasedServiceInfo {
- public static final String URI_SCHEME = "smtp";
+ public static final String SMTP_SCHEME = "smtp";
public SmtpServiceInfo(String id, String host, int port, String username, String password) {
- super(id, URI_SCHEME, host, port, username, password, "");
+ super(id, SMTP_SCHEME, host, port, username, password, "");
}
public SmtpServiceInfo(String id, String url) {
diff --git a/spring-cloud-core/src/main/java/org/springframework/cloud/util/StandardUriInfoFactory.java b/spring-cloud-core/src/main/java/org/springframework/cloud/util/StandardUriInfoFactory.java
index 8032b55..c5e89ba 100644
--- a/spring-cloud-core/src/main/java/org/springframework/cloud/util/StandardUriInfoFactory.java
+++ b/spring-cloud-core/src/main/java/org/springframework/cloud/util/StandardUriInfoFactory.java
@@ -30,8 +30,7 @@ public class StandardUriInfoFactory implements UriInfoFactory {
String password = uriDecode(userInfo[1]);
return new UriInfo(tmpUri.getScheme(), tmpUri.getHost(), tmpUri.getPort(),
- userName, password,
- parsePath(tmpUri), tmpUri.getRawQuery());
+ userName, password, parsePath(tmpUri), tmpUri.getRawQuery(), uriString);
}
private URI createTmpUri(String uriString) {
diff --git a/spring-cloud-core/src/main/java/org/springframework/cloud/util/UriInfo.java b/spring-cloud-core/src/main/java/org/springframework/cloud/util/UriInfo.java
index 0a0310b..26f6c35 100644
--- a/spring-cloud-core/src/main/java/org/springframework/cloud/util/UriInfo.java
+++ b/spring-cloud-core/src/main/java/org/springframework/cloud/util/UriInfo.java
@@ -18,16 +18,20 @@ public class UriInfo {
private String path;
private URI uri;
private String query;
+ private String rawUriString;
public UriInfo(String scheme, String host, int port, String username, String password) {
- this(scheme, host, port, username, password, "");
+ this(scheme, host, port, username, password,
+ String.format("%s://%s:%s@%s:%s/", scheme, username, password, host, port));
}
public UriInfo(String scheme, String host, int port, String username, String password, String path) {
- this(scheme, host, port, username, password, path, null);
+ this(scheme, host, port, username, password, path, null,
+ String.format("%s://%s:%s@%s:%s/%s", scheme, username, password, host, port, path));
}
- public UriInfo(String scheme, String host, int port, String username, String password, String path, String query) {
+ public UriInfo(String scheme, String host, int port, String username, String password, String path,
+ String query, String rawUriString) {
this.scheme = scheme;
this.host = host;
this.port = port;
@@ -35,6 +39,7 @@ public class UriInfo {
this.password = password;
this.path = path;
this.query = query;
+ this.rawUriString = rawUriString;
this.uri = buildUri();
}
@@ -71,6 +76,10 @@ public class UriInfo {
return uri;
}
+ public String getRawUriString() {
+ return rawUriString;
+ }
+
private URI buildUri() {
String userInfo = null;
diff --git a/spring-cloud-core/src/test/resources/log4j.properties b/spring-cloud-core/src/test/resources/log4j.properties
deleted file mode 100644
index 89c2a13..0000000
--- a/spring-cloud-core/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-log4j.rootCategory=ERROR, stdout
-
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %40.40c:%4L - %m%n
-
diff --git a/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/AmqpServiceInfoCreator.java b/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/AmqpServiceInfoCreator.java
index 86621f8..303639e 100644
--- a/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/AmqpServiceInfoCreator.java
+++ b/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/AmqpServiceInfoCreator.java
@@ -10,7 +10,7 @@ import org.springframework.cloud.service.common.AmqpServiceInfo;
public class AmqpServiceInfoCreator extends HerokuServiceInfoCreator {
public AmqpServiceInfoCreator() {
- super(AmqpServiceInfo.URI_SCHEME);
+ super(AmqpServiceInfo.AMQP_SCHEME, AmqpServiceInfo.AMQPS_SCHEME);
}
@Override
diff --git a/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/HerokuServiceInfoCreator.java b/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/HerokuServiceInfoCreator.java
index 81094eb..20c65c8 100644
--- a/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/HerokuServiceInfoCreator.java
+++ b/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/HerokuServiceInfoCreator.java
@@ -10,8 +10,8 @@ import org.springframework.cloud.service.UriBasedServiceInfoCreator;
*/
public abstract class HerokuServiceInfoCreator extends UriBasedServiceInfoCreator {
- public HerokuServiceInfoCreator(String uriScheme) {
- super(uriScheme);
+ public HerokuServiceInfoCreator(String... uriSchemes) {
+ super(uriSchemes);
}
/**
diff --git a/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/MongoServiceInfoCreator.java b/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/MongoServiceInfoCreator.java
index d75299e..8694216 100644
--- a/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/MongoServiceInfoCreator.java
+++ b/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/MongoServiceInfoCreator.java
@@ -10,7 +10,7 @@ import org.springframework.cloud.service.common.MongoServiceInfo;
public class MongoServiceInfoCreator extends HerokuServiceInfoCreator {
public MongoServiceInfoCreator() {
- super(MongoServiceInfo.URI_SCHEME);
+ super(MongoServiceInfo.MONGODB_SCHEME);
}
@Override
diff --git a/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/MysqlServiceInfoCreator.java b/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/MysqlServiceInfoCreator.java
index 73bb8eb..19646bb 100644
--- a/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/MysqlServiceInfoCreator.java
+++ b/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/MysqlServiceInfoCreator.java
@@ -10,7 +10,7 @@ import org.springframework.cloud.service.common.MysqlServiceInfo;
public class MysqlServiceInfoCreator extends RelationalServiceInfoCreator {
public MysqlServiceInfoCreator() {
- super(MysqlServiceInfo.URI_SCHEME);
+ super(MysqlServiceInfo.MYSQL_SCHEME);
}
@Override
diff --git a/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/PostgresqlServiceInfoCreator.java b/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/PostgresqlServiceInfoCreator.java
index 70f47de..837f0fe 100644
--- a/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/PostgresqlServiceInfoCreator.java
+++ b/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/PostgresqlServiceInfoCreator.java
@@ -10,7 +10,7 @@ import org.springframework.cloud.service.common.PostgresqlServiceInfo;
public class PostgresqlServiceInfoCreator extends RelationalServiceInfoCreator {
public PostgresqlServiceInfoCreator() {
- super(PostgresqlServiceInfo.URI_SCHEME);
+ super(PostgresqlServiceInfo.POSTGRES_SCHEME);
}
@Override
diff --git a/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/RedisServiceInfoCreator.java b/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/RedisServiceInfoCreator.java
index 1757bd7..1f4bd51 100644
--- a/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/RedisServiceInfoCreator.java
+++ b/spring-cloud-heroku-connector/src/main/java/org/springframework/cloud/heroku/RedisServiceInfoCreator.java
@@ -10,7 +10,7 @@ import org.springframework.cloud.service.common.RedisServiceInfo;
public class RedisServiceInfoCreator extends HerokuServiceInfoCreator {
public RedisServiceInfoCreator() {
- super(RedisServiceInfo.URI_SCHEME);
+ super(RedisServiceInfo.REDIS_SCHEME);
}
@Override
diff --git a/spring-cloud-heroku-connector/src/test/java/org/springframework/cloud/heroku/HerokuConnectorMysqlServiceTest.java b/spring-cloud-heroku-connector/src/test/java/org/springframework/cloud/heroku/HerokuConnectorMysqlServiceTest.java
index 439a854..c8c94ed 100644
--- a/spring-cloud-heroku-connector/src/test/java/org/springframework/cloud/heroku/HerokuConnectorMysqlServiceTest.java
+++ b/spring-cloud-heroku-connector/src/test/java/org/springframework/cloud/heroku/HerokuConnectorMysqlServiceTest.java
@@ -19,7 +19,7 @@ import org.springframework.cloud.service.common.MysqlServiceInfo;
*/
public class HerokuConnectorMysqlServiceTest extends AbstractHerokuConnectorRelationalServiceTest {
public HerokuConnectorMysqlServiceTest() {
- super(MysqlServiceInfo.URI_SCHEME);
+ super(MysqlServiceInfo.MYSQL_SCHEME);
}
@Test
diff --git a/spring-cloud-heroku-connector/src/test/java/org/springframework/cloud/heroku/HerokuConnectorPostgresqlServiceTest.java b/spring-cloud-heroku-connector/src/test/java/org/springframework/cloud/heroku/HerokuConnectorPostgresqlServiceTest.java
index 52d7398..2e03a14 100644
--- a/spring-cloud-heroku-connector/src/test/java/org/springframework/cloud/heroku/HerokuConnectorPostgresqlServiceTest.java
+++ b/spring-cloud-heroku-connector/src/test/java/org/springframework/cloud/heroku/HerokuConnectorPostgresqlServiceTest.java
@@ -19,7 +19,7 @@ import org.springframework.cloud.service.common.PostgresqlServiceInfo;
*/
public class HerokuConnectorPostgresqlServiceTest extends AbstractHerokuConnectorRelationalServiceTest {
public HerokuConnectorPostgresqlServiceTest() {
- super(PostgresqlServiceInfo.URI_SCHEME);
+ super(PostgresqlServiceInfo.POSTGRES_SCHEME);
}
@Test
diff --git a/spring-cloud-heroku-connector/src/test/resources/log4j.properties b/spring-cloud-heroku-connector/src/test/resources/log4j.properties
deleted file mode 100644
index 11492f1..0000000
--- a/spring-cloud-heroku-connector/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-log4j.rootCategory=INFO, stdout
-
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %40.40c:%4L - %m%n
-
diff --git a/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/AmqpServiceInfoCreator.java b/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/AmqpServiceInfoCreator.java
index b9dc631..3ce1495 100644
--- a/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/AmqpServiceInfoCreator.java
+++ b/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/AmqpServiceInfoCreator.java
@@ -10,7 +10,7 @@ import org.springframework.cloud.service.common.AmqpServiceInfo;
public class AmqpServiceInfoCreator extends LocalConfigServiceInfoCreator{
public AmqpServiceInfoCreator() {
- super(AmqpServiceInfo.URI_SCHEME);
+ super(AmqpServiceInfo.AMQP_SCHEME, AmqpServiceInfo.AMQPS_SCHEME);
}
@Override
diff --git a/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/LocalConfigServiceInfoCreator.java b/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/LocalConfigServiceInfoCreator.java
index 98a8669..184ca46 100644
--- a/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/LocalConfigServiceInfoCreator.java
+++ b/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/LocalConfigServiceInfoCreator.java
@@ -5,7 +5,7 @@ import org.springframework.cloud.service.UriBasedServiceInfoCreator;
public abstract class LocalConfigServiceInfoCreator extends UriBasedServiceInfoCreator {
- protected LocalConfigServiceInfoCreator(String uriScheme) {
- super(uriScheme);
+ protected LocalConfigServiceInfoCreator(String... uriSchemes) {
+ super(uriSchemes);
}
}
diff --git a/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/MongoServiceInfoCreator.java b/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/MongoServiceInfoCreator.java
index 68671ac..411443d 100644
--- a/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/MongoServiceInfoCreator.java
+++ b/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/MongoServiceInfoCreator.java
@@ -10,7 +10,7 @@ import org.springframework.cloud.service.common.MongoServiceInfo;
public class MongoServiceInfoCreator extends LocalConfigServiceInfoCreator{
public MongoServiceInfoCreator() {
- super(MongoServiceInfo.URI_SCHEME);
+ super(MongoServiceInfo.MONGODB_SCHEME);
}
@Override
diff --git a/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/MysqlServiceInfoCreator.java b/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/MysqlServiceInfoCreator.java
index 0d39262..4978a15 100644
--- a/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/MysqlServiceInfoCreator.java
+++ b/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/MysqlServiceInfoCreator.java
@@ -10,7 +10,7 @@ import org.springframework.cloud.service.common.MysqlServiceInfo;
public class MysqlServiceInfoCreator extends LocalConfigServiceInfoCreator{
public MysqlServiceInfoCreator() {
- super(MysqlServiceInfo.URI_SCHEME);
+ super(MysqlServiceInfo.MYSQL_SCHEME);
}
@Override
diff --git a/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/PostgresqlServiceInfoCreator.java b/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/PostgresqlServiceInfoCreator.java
index 282da2f..7192404 100644
--- a/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/PostgresqlServiceInfoCreator.java
+++ b/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/PostgresqlServiceInfoCreator.java
@@ -10,7 +10,7 @@ import org.springframework.cloud.service.common.PostgresqlServiceInfo;
public class PostgresqlServiceInfoCreator extends LocalConfigServiceInfoCreator{
public PostgresqlServiceInfoCreator() {
- super(PostgresqlServiceInfo.URI_SCHEME);
+ super(PostgresqlServiceInfo.POSTGRES_SCHEME);
}
@Override
diff --git a/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/RedisServiceInfoCreator.java b/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/RedisServiceInfoCreator.java
index 7a9e06f..cef97a2 100644
--- a/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/RedisServiceInfoCreator.java
+++ b/spring-cloud-localconfig-connector/src/main/java/org/springframework/cloud/localconfig/RedisServiceInfoCreator.java
@@ -10,7 +10,7 @@ import org.springframework.cloud.service.common.RedisServiceInfo;
public class RedisServiceInfoCreator extends LocalConfigServiceInfoCreator{
public RedisServiceInfoCreator() {
- super(RedisServiceInfo.URI_SCHEME);
+ super(RedisServiceInfo.REDIS_SCHEME);
}
@Override
diff --git a/spring-cloud-pcf-connector/.gitignore b/spring-cloud-pcf-connector/.gitignore
deleted file mode 100644
index bd39306..0000000
--- a/spring-cloud-pcf-connector/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-dependency-reduced-pom.xml
-/bin
diff --git a/spring-cloud-pcf-connector/README.md b/spring-cloud-pcf-connector/README.md
deleted file mode 100644
index 6990824..0000000
--- a/spring-cloud-pcf-connector/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-#Spring Cloud PCF extension
-
-Currently supports the Hadoop service on Pivotal Cloud Foundry
\ No newline at end of file
diff --git a/spring-cloud-pcf-connector/build.gradle b/spring-cloud-pcf-connector/build.gradle
deleted file mode 100644
index 90c4307..0000000
--- a/spring-cloud-pcf-connector/build.gradle
+++ /dev/null
@@ -1,9 +0,0 @@
-description = 'Spring-Cloud Support for Pivotal CF'
-
-dependencies {
- compile project(':spring-cloud-cloudfoundry-connector')
- compile project(':spring-cloud-spring-service-connector')
- optional("org.apache.hadoop:hadoop-common:2.2.0")
-
- testCompile project(path: ':spring-cloud-cloudfoundry-connector', configuration: 'tests')
-}
diff --git a/spring-cloud-pcf-connector/publish-maven.gradle b/spring-cloud-pcf-connector/publish-maven.gradle
deleted file mode 100644
index 632359e..0000000
--- a/spring-cloud-pcf-connector/publish-maven.gradle
+++ /dev/null
@@ -1,65 +0,0 @@
-apply plugin: "maven"
-
-ext.optionalDeps = []
-ext.providedDeps = []
-
-ext.optional = { optionalDeps << it }
-ext.provided = { providedDeps << it }
-
-install {
- repositories.mavenInstaller {
- customizePom(pom, project)
- }
-}
-
-def customizePom(pom, gradleProject) {
- pom.whenConfigured { generatedPom ->
- // respect "optional" and "provided" dependencies
- gradleProject.optionalDeps.each { dep ->
- generatedPom.dependencies.findAll { it.artifactId == dep.name }*.optional = true
- }
- gradleProject.providedDeps.each { dep ->
- generatedPom.dependencies.findAll { it.artifactId == dep.name }*.scope = "provided"
- }
-
- // eliminate test-scoped dependencies (no need in maven central poms)
- generatedPom.dependencies.removeAll { dep ->
- dep.scope == "test"
- }
-
- // Remove jackson dependencies, since we shade them in
- generatedPom.dependencies.removeAll { dep ->
- dep.groupId == "com.fasterxml.jackson.core"
- }
-
- // add all items necessary for maven central publication
- generatedPom.project {
- name = gradleProject.description
- description = gradleProject.description
- url = "https://github.com/spring-projects/spring-cloud"
- organization {
- name = "Spring IO"
- url = "http://projects.spring.io/spring-cloud"
- }
- licenses {
- license {
- name "The Apache Software License, Version 2.0"
- url "http://www.apache.org/licenses/LICENSE-2.0.txt"
- distribution "repo"
- }
- }
- scm {
- url = "https://github.com/spring-projects/spring-cloud"
- connection = "scm:git:git://github.com/spring-projects/spring-cloud"
- developerConnection = "scm:git:git://github.com/spring-projects/spring-cloud"
- }
- developers {
- developer {
- id = "ramnivas"
- name = "Ramnivas Laddad"
- email = ""
- }
- }
- }
- }
-}
\ No newline at end of file
diff --git a/spring-cloud-pcf-connector/src/main/java/org/springframework/cloud/pcf/gemfire/GemfireXDDataSourceCreator.java b/spring-cloud-pcf-connector/src/main/java/org/springframework/cloud/pcf/gemfire/GemfireXDDataSourceCreator.java
deleted file mode 100644
index 5116cbb..0000000
--- a/spring-cloud-pcf-connector/src/main/java/org/springframework/cloud/pcf/gemfire/GemfireXDDataSourceCreator.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.springframework.cloud.pcf.gemfire;
-
-import org.springframework.cloud.service.relational.DataSourceCreator;
-
-
-
-/**
- *
- * @author Ramnivas Laddad
- *
- */
-public class GemfireXDDataSourceCreator extends DataSourceCreator {
-
- private static final String[] DRIVERS = new String[]{"com.pivotal.gemfirexd.internal.jdbc.ClientConnectionPoolDataSource"};
- private static final String VALIDATION_QUERY = null;
-
- public GemfireXDDataSourceCreator() {
- super("spring-cloud.gemfirexd.driver", DRIVERS, VALIDATION_QUERY);
- }
-}
diff --git a/spring-cloud-pcf-connector/src/main/java/org/springframework/cloud/pcf/gemfire/GemfireXDServiceInfo.java b/spring-cloud-pcf-connector/src/main/java/org/springframework/cloud/pcf/gemfire/GemfireXDServiceInfo.java
deleted file mode 100644
index 02bb1de..0000000
--- a/spring-cloud-pcf-connector/src/main/java/org/springframework/cloud/pcf/gemfire/GemfireXDServiceInfo.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.springframework.cloud.pcf.gemfire;
-
-import org.springframework.cloud.service.ServiceInfo.ServiceLabel;
-import org.springframework.cloud.service.common.RelationalServiceInfo;
-
-
-/**
- *
- * @author Ramnivas Laddad
- *
- */
-@ServiceLabel("gemfirexd")
-public class GemfireXDServiceInfo extends RelationalServiceInfo {
-
- public static final String JDBC_URL_TYPE = "gemfirexd";
-
- public GemfireXDServiceInfo(String id, String url) {
- super(id, url, JDBC_URL_TYPE);
- }
-}
diff --git a/spring-cloud-pcf-connector/src/main/java/org/springframework/cloud/pcf/hadoop/HadoopConfigurationCreator.java b/spring-cloud-pcf-connector/src/main/java/org/springframework/cloud/pcf/hadoop/HadoopConfigurationCreator.java
deleted file mode 100644
index 7fe6c30..0000000
--- a/spring-cloud-pcf-connector/src/main/java/org/springframework/cloud/pcf/hadoop/HadoopConfigurationCreator.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.springframework.cloud.pcf.hadoop;
-
-import org.apache.hadoop.conf.Configuration;
-import org.springframework.cloud.service.AbstractServiceConnectorCreator;
-import org.springframework.cloud.service.ServiceConnectorConfig;
-
-/**
- *
- * @author Ramnivas Laddad
- *
- */
-public class HadoopConfigurationCreator extends AbstractServiceConnectorCreator {
-
- @Override
- public Configuration create(HadoopServiceInfo hadoopServiceInfo, ServiceConnectorConfig serviceConnectorConfig) {
- Configuration configuration = new Configuration();
- configuration.set("fs.defaultFS", hadoopServiceInfo.getDefaultFS());
- configuration.set("yarn.resourcemanager.address", hadoopServiceInfo.getYarnResourceManagerAddress());
- configuration.set("yarn.resourcemanager.scheduler.address", hadoopServiceInfo.getYarnResourceManagerSchedulerAddress());
-
- return configuration;
- }
-
-
-}
diff --git a/spring-cloud-pcf-connector/src/main/java/org/springframework/cloud/pcf/hadoop/HadoopServiceInfo.java b/spring-cloud-pcf-connector/src/main/java/org/springframework/cloud/pcf/hadoop/HadoopServiceInfo.java
deleted file mode 100644
index 5db42db..0000000
--- a/spring-cloud-pcf-connector/src/main/java/org/springframework/cloud/pcf/hadoop/HadoopServiceInfo.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package org.springframework.cloud.pcf.hadoop;
-
-import org.springframework.cloud.service.BaseServiceInfo;
-import org.springframework.cloud.service.ServiceInfo;
-
-/**
- * Hadoop service info (also considers yarn properties).
- *
- * @author Ramnivas Laddad
- *
- */
-public class HadoopServiceInfo extends BaseServiceInfo {
-
- private String defaultHdfsUri;
- private String yarnResourceManagerAddress;
- private String yarnResourceManagerSchedulerAddress;
-
- public HadoopServiceInfo(String id, String defaultHdfsUri,
- String yarnResourceManagerAddress, String yarnResourceManagerSchedulerAddress) {
- super(id);
- this.defaultHdfsUri = defaultHdfsUri;
- this.yarnResourceManagerAddress = yarnResourceManagerAddress;
- this.yarnResourceManagerSchedulerAddress = yarnResourceManagerSchedulerAddress;
- }
-
-
- @ServiceInfo.ServiceProperty(category = "connection")
- public String getDefaultFS() {
- return defaultHdfsUri;
- }
-
- @ServiceInfo.ServiceProperty(category = "connection")
- public String getYarnResourceManagerAddress() {
- return yarnResourceManagerAddress;
- }
-
- @ServiceInfo.ServiceProperty(category = "connection")
- public String getYarnResourceManagerSchedulerAddress() {
- return yarnResourceManagerSchedulerAddress;
- }
-
-}
diff --git a/spring-cloud-pcf-connector/src/main/java/org/springframework/cloud/pcf/phd/PhdServiceInfoCreator.java b/spring-cloud-pcf-connector/src/main/java/org/springframework/cloud/pcf/phd/PhdServiceInfoCreator.java
deleted file mode 100644
index 9672f6d..0000000
--- a/spring-cloud-pcf-connector/src/main/java/org/springframework/cloud/pcf/phd/PhdServiceInfoCreator.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package org.springframework.cloud.pcf.phd;
-
-import java.util.Map;
-
-import org.springframework.cloud.cloudfoundry.CloudFoundryServiceInfoCreator;
-import org.springframework.cloud.cloudfoundry.Tags;
-import org.springframework.cloud.pcf.gemfire.GemfireXDServiceInfo;
-import org.springframework.cloud.pcf.hadoop.HadoopServiceInfo;
-import org.springframework.cloud.service.BaseCompositeServiceInfo;
-import org.springframework.cloud.service.ServiceInfo;
-import org.springframework.cloud.service.common.PostgresqlServiceInfo;
-import org.springframework.cloud.service.common.RelationalServiceInfo;
-
-/**
- *
- * @author Ramnivas Laddad
- *
- */
-public class PhdServiceInfoCreator extends CloudFoundryServiceInfoCreator {
-
- public PhdServiceInfoCreator() {
- super(new Tags("p-hd"));
- }
-
- @SuppressWarnings("unchecked")
- public BaseCompositeServiceInfo createServiceInfo(Map serviceData) {
- String id = (String) serviceData.get("name");
-
- Map credentials = (Map) serviceData.get("credentials");
-
- ServiceInfo hadoopServiceInfo = createHadoopServiceInfo(id, credentials);
- ServiceInfo hawqServiceInfo = createHawqServiceInfo(id, credentials);
- ServiceInfo gemfirexdServiceInfo = createGemfireXDServiceInfo(id, credentials);
-
- return new BaseCompositeServiceInfo(id, hadoopServiceInfo, hawqServiceInfo, gemfirexdServiceInfo);
- }
-
- @SuppressWarnings("unchecked")
- private HadoopServiceInfo createHadoopServiceInfo(String id, Map credentials) {
- Map hdfs = (Map) credentials.get("hdfs");
- Map hdfsConfig = (Map) hdfs.get("configuration");
- String defaultHdfsUri = (String) hdfsConfig.get("fs.defaultFS");
-
- Map yarn = (Map) credentials.get("yarn");
- Map yarnConfig = (Map) yarn.get("configuration");
- String yarnResourceManagerAddress = (String) yarnConfig.get("yarn.resourcemanager.address");
- String yarnResourceManagerSchedulerAddress = (String) yarnConfig.get("yarn.resourcemanager.scheduler.address");
-
- return new HadoopServiceInfo(id + "/hadoop", defaultHdfsUri,
- yarnResourceManagerAddress, yarnResourceManagerSchedulerAddress);
- }
-
- private RelationalServiceInfo createHawqServiceInfo(String id, Map credentials) {
- String key = "hawq";
-
- return new PostgresqlServiceInfo(id + "/" + key, extractDataSourceUri(id, key, credentials));
- }
-
- private RelationalServiceInfo createGemfireXDServiceInfo(String id, Map credentials) {
- String key = "gemfirexd";
-
- return new GemfireXDServiceInfo(id + "/" + key, extractDataSourceUri(id, key, credentials));
- }
-
- private String extractDataSourceUri(String id, String key, Map credentials) {
- @SuppressWarnings("unchecked")
- Map hawq = (Map) credentials.get(key);
-
- String uri = (String) hawq.get("uri");
-
- String jdbcUriPrefix = "jdbc:";
-
- if (uri.startsWith(jdbcUriPrefix)) {
- uri.substring(jdbcUriPrefix.length());
- }
-
- return uri;
- }
-}
diff --git a/spring-cloud-pcf-connector/src/main/resources/META-INF/services/org.springframework.cloud.cloudfoundry.CloudFoundryServiceInfoCreator b/spring-cloud-pcf-connector/src/main/resources/META-INF/services/org.springframework.cloud.cloudfoundry.CloudFoundryServiceInfoCreator
deleted file mode 100644
index 304d95f..0000000
--- a/spring-cloud-pcf-connector/src/main/resources/META-INF/services/org.springframework.cloud.cloudfoundry.CloudFoundryServiceInfoCreator
+++ /dev/null
@@ -1 +0,0 @@
-org.springframework.cloud.pcf.phd.PhdServiceInfoCreator
diff --git a/spring-cloud-pcf-connector/src/main/resources/META-INF/services/org.springframework.cloud.service.ServiceConnectorCreator b/spring-cloud-pcf-connector/src/main/resources/META-INF/services/org.springframework.cloud.service.ServiceConnectorCreator
deleted file mode 100644
index e99f33c..0000000
--- a/spring-cloud-pcf-connector/src/main/resources/META-INF/services/org.springframework.cloud.service.ServiceConnectorCreator
+++ /dev/null
@@ -1,2 +0,0 @@
-org.springframework.cloud.pcf.hadoop.HadoopConfigurationCreator
-org.springframework.cloud.pcf.gemfire.GemfireXDDataSourceCreator
\ No newline at end of file
diff --git a/spring-cloud-pcf-connector/src/test/java/org/springframework/cloud/hadoop/HadoopConfigurationCreatorTest.java b/spring-cloud-pcf-connector/src/test/java/org/springframework/cloud/hadoop/HadoopConfigurationCreatorTest.java
deleted file mode 100644
index 2a78595..0000000
--- a/spring-cloud-pcf-connector/src/test/java/org/springframework/cloud/hadoop/HadoopConfigurationCreatorTest.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.springframework.cloud.hadoop;
-
-import static org.junit.Assert.*;
-
-import org.apache.hadoop.conf.Configuration;
-import org.junit.Test;
-import org.springframework.cloud.pcf.hadoop.HadoopConfigurationCreator;
-import org.springframework.cloud.pcf.hadoop.HadoopServiceInfo;
-
-/**
- *
- * @author Ramnivas Laddad
- *
- */
-public class HadoopConfigurationCreatorTest {
- private HadoopConfigurationCreator creator = new HadoopConfigurationCreator();
-
- @Test
- public void hadoopConfigurationCreation() {
- HadoopServiceInfo serviceInfo = new HadoopServiceInfo("phd-hadoop", "hdfs://hdfshost:1234", "yrm:2345", "yrsm:3456");
- Configuration configuration = creator.create(serviceInfo, null);
- assertEquals("hdfs://hdfshost:1234", configuration.get("fs.defaultFS"));
- assertEquals("yrm:2345", configuration.get("yarn.resourcemanager.address"));
- assertEquals("yrsm:3456", configuration.get("yarn.resourcemanager.scheduler.address"));
- }
-}
diff --git a/spring-cloud-pcf-connector/src/test/java/org/springframework/cloud/pcf/PhdServiceInfoCreatorTest.java b/spring-cloud-pcf-connector/src/test/java/org/springframework/cloud/pcf/PhdServiceInfoCreatorTest.java
deleted file mode 100644
index 99ed062..0000000
--- a/spring-cloud-pcf-connector/src/test/java/org/springframework/cloud/pcf/PhdServiceInfoCreatorTest.java
+++ /dev/null
@@ -1,142 +0,0 @@
-package org.springframework.cloud.pcf;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.mockito.Mockito.when;
-
-import java.util.List;
-
-import org.junit.Test;
-import org.springframework.cloud.cloudfoundry.AbstractCloudFoundryConnectorTest;
-import org.springframework.cloud.pcf.gemfire.GemfireXDServiceInfo;
-import org.springframework.cloud.pcf.hadoop.HadoopServiceInfo;
-import org.springframework.cloud.service.BaseCompositeServiceInfo;
-import org.springframework.cloud.service.ServiceInfo;
-import org.springframework.cloud.service.common.PostgresqlServiceInfo;
-
-/**
- *
- * @author Ramnivas Laddad
- *
- */
-public class PhdServiceInfoCreatorTest extends AbstractCloudFoundryConnectorTest {
- @Test
- public void phdServiceCreation() {
- String hadoopUsername = "hadoop-user";
- String hadoopHost = "hadoop-host";
- int hadoopPort = 6000;
- String hadoopDirectory = "hadoop-dir";
- String yarnResourceHost = "yark-resource-host";
- int yarnResourcePort = 7000;
- String yarnResourceSchedulerHost = "yarn-resource-scheduler-host";
- int yarnResourceSchedulerPort = 8000;
- String yarnMapReduceDir = "yarn-map-reduce-dir";
- String yarnStagingDir = "yarn-staging-dir";
- String hawkHost = "hawk-host";
- int hawkPort = 9000;
- String hawkUsername = "hawk-user";
- String hawkPassword = "hawk-pass";
- String gemHost = "gem-host";
- int gemPort = 10000;
- String gemUsername = "gem-user";
- String gemPassword = "gem-pass";
- String gemWorkingDir = "gem-working-dir";
-
- when(mockEnvironment.getEnvValue("VCAP_SERVICES")).thenReturn(
- getServicesPayload(
- getPhdServicePayload("phd-1", hadoopUsername, hadoopHost, hadoopPort, hadoopDirectory,
- yarnResourceHost, yarnResourcePort,
- yarnResourceSchedulerHost, yarnResourceSchedulerPort, yarnMapReduceDir, yarnStagingDir,
- hawkHost, hawkPort, hawkUsername, hawkPassword,
- gemHost, gemPort, gemUsername, gemPassword, gemWorkingDir)));
-
- List serviceInfos = testCloudConnector.getServiceInfos();
- BaseCompositeServiceInfo phdServiceInfo = (BaseCompositeServiceInfo) getServiceInfo(serviceInfos, "phd-1");
- assertNotNull(phdServiceInfo);
- assertEquals(3, phdServiceInfo.getServiceInfos().size());
-
- HadoopServiceInfo hadoopServiceInfo = extractServiceInfo(phdServiceInfo.getServiceInfos(), HadoopServiceInfo.class);
- assertNotNull(hadoopServiceInfo);
- assertHadoopServiceInfo("phd-1/hadoop", hadoopHost, hadoopPort,
- yarnResourceHost, yarnResourcePort, yarnResourceSchedulerHost, yarnResourceSchedulerPort, hadoopServiceInfo);
-
- PostgresqlServiceInfo hawqServiceInfo = extractServiceInfo(phdServiceInfo.getServiceInfos(), PostgresqlServiceInfo.class);
- assertEquals("phd-1/hawq", hawqServiceInfo.getId());
- assertNotNull(hawqServiceInfo);
-
- GemfireXDServiceInfo gemfireXDServiceInfo = extractServiceInfo(phdServiceInfo.getServiceInfos(), GemfireXDServiceInfo.class);
- assertNotNull(gemfireXDServiceInfo);
- assertEquals("phd-1/gemfirexd", gemfireXDServiceInfo.getId());
- }
-
- private void assertHadoopServiceInfo(String serviceId, String hadoopHost, int hadoopPort,
- String yarnResourceHost, int yarnResourcePort,
- String yarnResourceSchedulerHost, int yarnResourceSchedulerPort,
- HadoopServiceInfo serviceInfo) {
- assertEquals(serviceId, serviceInfo.getId());
- assertEquals(String.format("hdfs://%s:%s", hadoopHost, hadoopPort), serviceInfo.getDefaultFS());
- assertEquals(String.format("%s:%s", yarnResourceHost, yarnResourcePort), serviceInfo.getYarnResourceManagerAddress());
- assertEquals(String.format("%s:%s", yarnResourceSchedulerHost, yarnResourceSchedulerPort), serviceInfo.getYarnResourceManagerSchedulerAddress());
- }
-
- @SuppressWarnings("unchecked")
- private T extractServiceInfo(List serviceInfos, Class typeToSearch) {
- for (ServiceInfo serviceInfo: serviceInfos) {
- if (serviceInfo.getClass().equals(typeToSearch)) {
- return (T)serviceInfo;
- }
- }
- return null;
- }
-
- private String getPhdServicePayload(String serviceName,
- String hadoopUsername, String hadoopHost, int hadoopPort, String hadoopDirectory,
- String yarnResourceHost, int yarnResourcePort,
- String yarnResourceSchedulerHost, int yarnResourceSchedulerPort,
- String yarnMapReduceDir, String yarnStagingDir,
- String hawkHost, int hawkPort, String hawkUsername, String hawkPassword,
- String gemHost, int gemPort, String gemUsername, String gemPassword, String gemWorkingDir) {
- return getPhdServicePayload("test-phd-info.json", serviceName, hadoopUsername, hadoopHost, hadoopPort, hadoopDirectory,
- yarnResourceHost, yarnResourcePort,
- yarnResourceSchedulerHost, yarnResourceSchedulerPort,
- yarnMapReduceDir, yarnStagingDir,
- hawkHost, hawkPort, hawkUsername, hawkPassword,
- gemHost, gemPort, gemUsername, gemPassword, gemWorkingDir);
- }
-
- private String getPhdServicePayload(String filename, String serviceName,
- String hadoopUsername, String hadoopHost, int hadoopPort, String hadoopDirectory,
- String yarnResourceHost, int yarnResourcePort,
- String yarnResourceSchedulerHost, int yarnResourceSchedulerPort,
- String yarnMapReduceDir, String yarnStagingDir,
- String hawkHost, int hawkPort, String hawkUsername, String hawkPassword,
- String gemHost, int gemPort, String gemUsername, String gemPassword, String gemWorkingDir) {
- String payload = readTestDataFile(filename);
- payload = payload.replace("$serviceName", serviceName);
-
- payload = payload.replace("$hadoop-username", hadoopUsername);
- payload = payload.replace("$hdfs-host", hadoopHost);
- payload = payload.replace("$hdfs-port", Integer.toString(hadoopPort));
- payload = payload.replace("$hdfs-directory", hadoopDirectory);
-
- payload = payload.replace("$yarn-resource-host", yarnResourceHost);
- payload = payload.replace("$yarn-resource-port", Integer.toString(yarnResourcePort));
- payload = payload.replace("$yarn-resource-scheduler-host", yarnResourceSchedulerHost);
- payload = payload.replace("$yarn-resource-scheduler-port", Integer.toString(yarnResourceSchedulerPort));
- payload = payload.replace("$yarn-map-reduce-dir", yarnMapReduceDir);
- payload = payload.replace("$yarn-staging-dir", yarnStagingDir);
-
- payload = payload.replace("$hawk-host", hawkHost);
- payload = payload.replace("$hawk-port", Integer.toString(hawkPort));
- payload = payload.replace("$hawk-username", hawkUsername);
- payload = payload.replace("$hawk-password", hawkPassword);
-
- payload = payload.replace("$gem-host", gemHost);
- payload = payload.replace("$gem-port", Integer.toString(gemPort));
- payload = payload.replace("$gem-username", gemUsername);
- payload = payload.replace("$gem-password", gemPassword);
- payload = payload.replace("$gem-working-dir", gemWorkingDir);
-
- return payload;
- }
-}
diff --git a/spring-cloud-pcf-connector/src/test/resources/log4j.properties b/spring-cloud-pcf-connector/src/test/resources/log4j.properties
deleted file mode 100644
index 11492f1..0000000
--- a/spring-cloud-pcf-connector/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-log4j.rootCategory=INFO, stdout
-
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %40.40c:%4L - %m%n
-
diff --git a/spring-cloud-pcf-connector/src/test/resources/org/springframework/cloud/pcf/test-phd-info.json b/spring-cloud-pcf-connector/src/test/resources/org/springframework/cloud/pcf/test-phd-info.json
deleted file mode 100644
index a922f08..0000000
--- a/spring-cloud-pcf-connector/src/test/resources/org/springframework/cloud/pcf/test-phd-info.json
+++ /dev/null
@@ -1,31 +0,0 @@
-{
- "name":"$serviceName",
- "label":"p-hd",
- "tags":[],
- "plan":"Standard",
- "credentials":{
- "hadoop_username":"$hadoop-username",
- "hdfs":{
- "configuration":{
- "fs.defaultFS":"hdfs://$hdfs-host:$hdfs-port"
- },
- "directory":"$hdfs-directory"
- },
- "yarn":{
- "configuration":{
- "yarn.resourcemanager.address":"$yarn-resource-host:$yarn-resource-port",
- "mapreduce.framework.name":"yarn",
- "yarn.resourcemanager.scheduler.address":"$yarn-resource-scheduler-host:$yarn-resource-scheduler-port",
- "mapreduce.job.working.dir":"$yarn-map-reduce-dir",
- "yarn.app.mapreduce.am.staging-dir":"$yarn-staging-dir"
- }
- },
- "hawq":{
- "uri":"jdbc:postgresql://$hawk-host:$hawk-port/postgres?user=$hawk-username&password=$hawk-password"
- },
- "gemfirexd":{
- "uri":"jdbc:gemfirexd://$gem-host:$gem-port/;user=$gem-username;password=$gem-password",
- "working.dir":"$gem-working-dir"
- }
- }
-}
\ No newline at end of file
diff --git a/spring-cloud-spring-service-connector/build.gradle b/spring-cloud-spring-service-connector/build.gradle
index 732cd20..ca7d8a3 100644
--- a/spring-cloud-spring-service-connector/build.gradle
+++ b/spring-cloud-spring-service-connector/build.gradle
@@ -5,7 +5,6 @@ dependencies {
compile project(':spring-cloud-core')
compile("org.springframework:spring-context:$springVersion")
- compile("log4j:log4j:$log4jVersion")
testCompile("org.springframework:spring-test:$springVersion")
testCompile("mysql:mysql-connector-java:$mysqlDriverVersion")
diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/java/AbstractCloudConfig.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/java/AbstractCloudConfig.java
index 7156a59..8a1e5f3 100644
--- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/java/AbstractCloudConfig.java
+++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/config/java/AbstractCloudConfig.java
@@ -14,6 +14,7 @@ import org.springframework.cloud.Cloud;
import org.springframework.cloud.CloudException;
import org.springframework.cloud.CloudFactory;
import org.springframework.cloud.service.PooledServiceConnectorConfig;
+import org.springframework.cloud.service.ServiceConnectorConfig;
import org.springframework.cloud.service.document.MongoDbFactoryConfig;
import org.springframework.cloud.service.messaging.RabbitConnectionFactoryConfig;
import org.springframework.cloud.service.relational.DataSourceConfig;
@@ -419,5 +420,9 @@ public abstract class AbstractCloudConfig implements BeanFactoryAware {
public T service(String serviceId, Class serviceConnectorType) {
return cloud.getServiceConnector(serviceId, serviceConnectorType, null);
}
+
+ public T service(String serviceId, Class serviceConnectorType, ServiceConnectorConfig serviceConnectorConfig){
+ return cloud.getServiceConnector(serviceId, serviceConnectorType, serviceConnectorConfig);
+ }
}
}
diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/document/MongoDbFactoryCreator.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/document/MongoDbFactoryCreator.java
index ef301c8..850a13c 100644
--- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/document/MongoDbFactoryCreator.java
+++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/document/MongoDbFactoryCreator.java
@@ -4,7 +4,10 @@ import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.List;
+import com.mongodb.MongoClientURI;
import org.springframework.cloud.service.AbstractServiceConnectorCreator;
import org.springframework.cloud.service.ServiceConnectorConfig;
import org.springframework.cloud.service.ServiceConnectorCreationException;
@@ -27,22 +30,21 @@ import com.mongodb.WriteConcern;
*
* @author Ramnivas Laddad
* @author Thomas Risberg
- *
+ * @author Chris Schaefer
*/
public class MongoDbFactoryCreator extends AbstractServiceConnectorCreator {
@Override
public MongoDbFactory create(MongoServiceInfo serviceInfo, ServiceConnectorConfig config) {
try {
MongoClientOptions mongoOptionsToUse = getMongoOptions((MongoDbFactoryConfig) config);
- ServerAddress serverAddress = null;
- if (serviceInfo.getPort() == -1) {
- serverAddress = new ServerAddress(serviceInfo.getHost());
- } else {
- serverAddress = new ServerAddress(serviceInfo.getHost(), serviceInfo.getPort());
- }
- MongoClient mongo = new MongoClient(serverAddress, mongoOptionsToUse);
- UserCredentials credentials = new UserCredentials(serviceInfo.getUserName(), serviceInfo.getPassword());
- SimpleMongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongo, serviceInfo.getDatabase(), credentials);
+
+ MongoClientURI mongoClientURI = new MongoClientURI(serviceInfo.getUri());
+ List serverAddressList = getServerAddresses(mongoClientURI);
+
+ MongoClient mongo = new MongoClient(serverAddressList, mongoOptionsToUse);
+ UserCredentials credentials = new UserCredentials(mongoClientURI.getUsername(), new String(mongoClientURI.getPassword()));
+ SimpleMongoDbFactory mongoDbFactory = new SimpleMongoDbFactory(mongo, mongoClientURI.getDatabase(), credentials);
+
return configure(mongoDbFactory, (MongoDbFactoryConfig) config);
} catch (UnknownHostException e) {
throw new ServiceConnectorCreationException(e);
@@ -51,43 +53,53 @@ public class MongoDbFactoryCreator extends AbstractServiceConnectorCreator getServerAddresses(MongoClientURI mongoClientURI) throws UnknownHostException {
+ List servers = mongoClientURI.getHosts();
+ List serverAddressList = new ArrayList();
+
+ for(String server : servers) {
+ serverAddressList.add(new ServerAddress(server));
+ }
+
+ return serverAddressList;
+ }
+
private MongoClientOptions getMongoOptions(MongoDbFactoryConfig config) {
- MongoClientOptions.Builder builder = null;
+ MongoClientOptions.Builder builder;
Method builderMethod = ClassUtils.getMethodIfAvailable(MongoClientOptions.class, "builder");
if (builderMethod != null) {
- builder = (Builder) ReflectionUtils.invokeMethod(builderMethod, null);
+ builder = (Builder) ReflectionUtils.invokeMethod(builderMethod, null);
} else {
- Constructor builderConstructor = ClassUtils.getConstructorIfAvailable(MongoClientOptions.Builder.class);
- try {
- builder = builderConstructor.newInstance(new Object[0]);
- } catch (InstantiationException e) {
- throw new IllegalStateException(e);
- } catch (IllegalAccessException e) {
- throw new IllegalStateException(e);
- } catch (IllegalArgumentException e) {
- throw new IllegalStateException(e);
- } catch (InvocationTargetException e) {
- throw new IllegalStateException(e);
- }
+ Constructor builderConstructor = ClassUtils.getConstructorIfAvailable(MongoClientOptions.Builder.class);
+ try {
+ builder = builderConstructor.newInstance(new Object[0]);
+ } catch (InstantiationException e) {
+ throw new IllegalStateException(e);
+ } catch (IllegalAccessException e) {
+ throw new IllegalStateException(e);
+ } catch (IllegalArgumentException e) {
+ throw new IllegalStateException(e);
+ } catch (InvocationTargetException e) {
+ throw new IllegalStateException(e);
+ }
}
if (config != null) {
- if (config.getConnectionsPerHost() != null) {
- builder.connectionsPerHost(config.getConnectionsPerHost());
- }
- if (config.getMaxWaitTime() != null) {
- builder.maxWaitTime(config.getMaxWaitTime());
- }
- if (config.getWriteConcern() != null) {
- builder.writeConcern(new WriteConcern(config.getWriteConcern()));
- }
- }
-
+ if (config.getConnectionsPerHost() != null) {
+ builder.connectionsPerHost(config.getConnectionsPerHost());
+ }
+ if (config.getMaxWaitTime() != null) {
+ builder.maxWaitTime(config.getMaxWaitTime());
+ }
+ if (config.getWriteConcern() != null) {
+ builder.writeConcern(new WriteConcern(config.getWriteConcern()));
+ }
+ }
+
return builder.build();
}
-
public SimpleMongoDbFactory configure(SimpleMongoDbFactory mongoDbFactory, MongoDbFactoryConfig config) {
if (config != null && config.getWriteConcern() != null) {
WriteConcern writeConcern = WriteConcern.valueOf(config.getWriteConcern());
@@ -97,5 +109,4 @@ public class MongoDbFactoryCreator extends AbstractServiceConnectorCreator {
+
@Override
public ConnectionFactory create(AmqpServiceInfo serviceInfo, ServiceConnectorConfig serviceConnectorConfiguration) {
- CachingConnectionFactory connectionFactory = new CachingConnectionFactory(serviceInfo.getHost());
- connectionFactory.setVirtualHost(serviceInfo.getVirtualHost());
- connectionFactory.setUsername(serviceInfo.getUserName());
- connectionFactory.setPassword(serviceInfo.getPassword());
- connectionFactory.setPort(serviceInfo.getPort());
-
- if (serviceConnectorConfiguration != null) {
- connectionFactory.setChannelCacheSize(((RabbitConnectionFactoryConfig)serviceConnectorConfiguration).getChannelCacheSize());
+ com.rabbitmq.client.ConnectionFactory connectionFactory = new com.rabbitmq.client.ConnectionFactory();
+ try {
+ connectionFactory.setUri(serviceInfo.getUri());
}
-
- return connectionFactory;
+ catch (Exception e) {
+ throw new IllegalArgumentException("failed to create ConnectionFactory", e);
+ }
+ CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory(connectionFactory);
+ if (serviceConnectorConfiguration != null) {
+ cachingConnectionFactory.setChannelCacheSize(((RabbitConnectionFactoryConfig)serviceConnectorConfiguration).getChannelCacheSize());
+ }
+ return cachingConnectionFactory;
}
+
}
diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/smtp/MailSenderCreator.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/smtp/MailSenderCreator.java
index dd34d31..e8fdc34 100644
--- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/smtp/MailSenderCreator.java
+++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/smtp/MailSenderCreator.java
@@ -3,25 +3,24 @@ package org.springframework.cloud.service.smtp;
import org.springframework.cloud.service.AbstractServiceConnectorCreator;
import org.springframework.cloud.service.ServiceConnectorConfig;
import org.springframework.cloud.service.common.SmtpServiceInfo;
-import org.springframework.mail.MailSender;
+import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
/**
* Simplified access to Spring MailSender.
*
* @author Ramnivas Laddad
- *
*/
-public class MailSenderCreator extends AbstractServiceConnectorCreator {
+public class MailSenderCreator extends AbstractServiceConnectorCreator {
@Override
- public MailSender create(SmtpServiceInfo serviceInfo, ServiceConnectorConfig config) {
+ public JavaMailSender create(SmtpServiceInfo serviceInfo, ServiceConnectorConfig config) {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
-
- mailSender.setHost(serviceInfo.getHost());
- mailSender.setPort(serviceInfo.getPort());
- mailSender.setUsername(serviceInfo.getUserName());
- mailSender.setPassword(serviceInfo.getPassword());
- return mailSender;
+ mailSender.setHost(serviceInfo.getHost());
+ mailSender.setPort(serviceInfo.getPort());
+ mailSender.setUsername(serviceInfo.getUserName());
+ mailSender.setPassword(serviceInfo.getPassword());
+
+ return mailSender;
}
}
diff --git a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/smtp/MailSenderFactory.java b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/smtp/MailSenderFactory.java
index ee4ab39..9e9ef13 100644
--- a/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/smtp/MailSenderFactory.java
+++ b/spring-cloud-spring-service-connector/src/main/java/org/springframework/cloud/service/smtp/MailSenderFactory.java
@@ -2,7 +2,7 @@ package org.springframework.cloud.service.smtp;
import org.springframework.cloud.service.AbstractCloudServiceConnectorFactory;
import org.springframework.cloud.service.ServiceConnectorConfig;
-import org.springframework.mail.MailSender;
+import org.springframework.mail.javamail.JavaMailSender;
/**
* Spring factory bean for SMTP service.
@@ -10,8 +10,8 @@ import org.springframework.mail.MailSender;
* @author Ramnivas Laddad
*
*/
-public class MailSenderFactory extends AbstractCloudServiceConnectorFactory {
+public class MailSenderFactory extends AbstractCloudServiceConnectorFactory {
public MailSenderFactory(String serviceId, ServiceConnectorConfig serviceConnectorConfiguration) {
- super(serviceId, MailSender.class, serviceConnectorConfiguration);
+ super(serviceId, JavaMailSender.class, serviceConnectorConfiguration);
}
}
diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/CloudTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/CloudTest.java
index 6cc91c7..aebd8c1 100644
--- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/CloudTest.java
+++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/CloudTest.java
@@ -25,12 +25,12 @@ import org.springframework.cloud.service.common.RelationalServiceInfo;
import org.springframework.cloud.service.relational.MysqlDataSourceCreator;
/**
- *
- * @author Ramnivas Laddad
+ * Test cases for service properties
*
+ * @author Ramnivas Laddad
+ * @author Chris Schaefer
*/
public class CloudTest extends StubCloudConnectorTest {
-
private List> serviceCreators;
@Before
@@ -74,7 +74,6 @@ public class CloudTest extends StubCloudConnectorTest {
assertNull(cloudProperties.get("cloud.services.mysql.connection.host"));
}
-
@Test
public void servicePropsOneServiceOfTheSameLabel() {
MysqlServiceInfo mysqlServiceInfo = createMysqlService("my-mysql");
@@ -101,7 +100,7 @@ public class CloudTest extends StubCloudConnectorTest {
assertBasicProps("cloud.services.my-redis", redisServiceInfo, cloudProperties);
assertBasicProps("cloud.services.redis", redisServiceInfo, cloudProperties);
}
-
+
@Test
public void servicePropsRabbit() {
String serviceId = "my-rabbit";
@@ -113,6 +112,28 @@ public class CloudTest extends StubCloudConnectorTest {
assertRabbitProps("cloud.services.my-rabbit", rabbitServiceInfo, cloudProperties);
assertRabbitProps("cloud.services.rabbitmq", rabbitServiceInfo, cloudProperties);
}
+
+ @Test
+ public void servicePropsMongoMultipleHostsUriString() {
+ String serviceId = "my-mongo-multiple-hosts-uri";
+ MongoServiceInfo mongoServiceInfo = createMongoServiceWithMultipleHostsByUri(serviceId);
+ CloudConnector stubCloudConnector = getTestCloudConnector(mongoServiceInfo);
+ Cloud testCloud = new Cloud(stubCloudConnector, serviceCreators);
+
+ Properties cloudProperties = testCloud.getCloudProperties();
+ assertMongoPropsWithMultipleHostsByUri("cloud.services.my-mongo-multiple-hosts-uri", mongoServiceInfo, cloudProperties);
+ assertMongoPropsWithMultipleHostsByUri("cloud.services.mongo", mongoServiceInfo, cloudProperties);
+ }
+
+ private void assertMongoPropsWithMultipleHostsByUri(String leadKey, MongoServiceInfo serviceInfo, Properties cloudProperties) {
+ assertEquals(serviceInfo.getId(), cloudProperties.get(leadKey + ".id"));
+ assertEquals(serviceInfo.getUri(), cloudProperties.get(leadKey + ".connection.uri"));
+ assertEquals(-1, cloudProperties.get(leadKey + ".connection.port"));
+
+ assertNull(cloudProperties.get(leadKey + ".connection.host"));
+ assertNull(cloudProperties.get(leadKey + ".connection.username"));
+ assertNull(cloudProperties.get(leadKey + ".connection.password"));
+ }
private void assertBasicProps(String leadKey, UriBasedServiceInfo serviceInfo, Properties cloudProperties) {
assertEquals(serviceInfo.getId(), cloudProperties.get(leadKey + ".id"));
diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/StubCloudConnectorTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/StubCloudConnectorTest.java
index 2c442e8..9a7eb20 100644
--- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/StubCloudConnectorTest.java
+++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/StubCloudConnectorTest.java
@@ -15,10 +15,9 @@ import org.springframework.context.support.ClassPathXmlApplicationContext;
* Base class for close-to-integration tests that use a stub {@link CloudConnector} to avoid the need for a real cloud environment.
*
* @author Ramnivas Laddad
- *
+ * @author Chris Schaefer
*/
abstract public class StubCloudConnectorTest {
-
private static final String MOCK_CLOUD_BEAN_NAME = "mockCloud";
protected ApplicationContext getTestApplicationContext(String fileName, ServiceInfo... serviceInfos) {
@@ -63,7 +62,11 @@ abstract public class StubCloudConnectorTest {
protected MongoServiceInfo createMongoService(String id) {
return new MongoServiceInfo(id, "10.20.30.40", 1234, "username", "password", "db");
}
-
+
+ protected MongoServiceInfo createMongoServiceWithMultipleHostsByUri(String id) {
+ return new MongoServiceInfo(id, "mongo://username:password@10.20.30.40,10.20.30.41,10.20.30.42:1234/db");
+ }
+
protected AmqpServiceInfo createRabbitService(String id) {
return new AmqpServiceInfo(id, "10.20.30.40", 1234, "username", "password", "vh");
}
diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/GenericServiceJavaConfigTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/GenericServiceJavaConfigTest.java
index f8b2a89..4037304 100644
--- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/GenericServiceJavaConfigTest.java
+++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/config/java/GenericServiceJavaConfigTest.java
@@ -5,7 +5,11 @@ import static org.junit.Assert.assertNotNull;
import javax.sql.DataSource;
import org.junit.Test;
+import org.springframework.cloud.service.ServiceConnectorConfig;
import org.springframework.cloud.service.ServiceInfo;
+import org.springframework.cloud.service.PooledServiceConnectorConfig.PoolConfig;
+import org.springframework.cloud.service.relational.DataSourceConfig;
+import org.springframework.cloud.service.relational.DataSourceConfig.ConnectionConfig;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
@@ -23,6 +27,7 @@ public class GenericServiceJavaConfigTest extends AbstractServiceJavaConfigTest<
return createMysqlService(id);
}
+
protected Class getConnectorType() {
return DataSource.class;
}
@@ -36,7 +41,9 @@ public class GenericServiceJavaConfigTest extends AbstractServiceJavaConfigTest<
testContext.getBean("myServiceWithTypeWithServiceName", DataSource.class));
assertNotNull("Getting service with connector type (unique service)",
- testContext.getBean("myServiceWithTypeWithoutServiceName", DataSource.class));
+ testContext.getBean("myServiceWithTypeWithoutServiceName", DataSource.class));
+ assertNotNull("Getting service with connector type (unique service)",
+ testContext.getBean("myServiceWithTypeWithServiceNameAndConfig", DataSource.class));
}
}
@@ -49,6 +56,10 @@ class GenericServiceWithId extends AbstractCloudConfig {
}
+class GenericServiceConnectorConfig implements ServiceConnectorConfig {
+
+}
+
class GenericServiceWithoutId extends AbstractCloudConfig {
@Bean(name="my-service")
public Object testService() {
@@ -66,4 +77,15 @@ class GenericServiceWithConnectorType extends AbstractCloudConfig {
public DataSource myServiceWithTypeWithoutServiceName() {
return connectionFactory().service(DataSource.class);
}
+
+ @Bean
+ public DataSource myServiceWithTypeWithServiceNameAndConfig(){
+ PoolConfig poolConfig = new PoolConfig(20, 200);
+ ConnectionConfig connectionConfig = new ConnectionConfig("sessionVariables=sql_mode='ANSI';characterEncoding=UTF-8");
+ DataSourceConfig serviceConfig = new DataSourceConfig(poolConfig, connectionConfig);
+
+ return connectionFactory().service("my-service",DataSource.class,serviceConfig);
+ }
}
+
+
diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/mongo/MongoServiceConnectorCreatorTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/mongo/MongoServiceConnectorCreatorTest.java
index 9b8a770..5169e7c 100644
--- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/mongo/MongoServiceConnectorCreatorTest.java
+++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/mongo/MongoServiceConnectorCreatorTest.java
@@ -14,53 +14,88 @@ import org.springframework.test.util.ReflectionTestUtils;
import com.mongodb.Mongo;
import com.mongodb.ServerAddress;
+import org.springframework.util.StringUtils;
/**
- *
- * @author Ramnivas Laddad
+ * Test cases for Mongo service connector creators.
*
+ * @author Ramnivas Laddad
+ * @author Chris Schaefer
*/
public class MongoServiceConnectorCreatorTest {
private static final String TEST_HOST = "10.20.30.40";
+ private static final String TEST_HOST_1 = "10.20.30.41";
+ private static final String TEST_HOST_2 = "10.20.30.42";
private static final int TEST_PORT = 1234;
+ private static final int TEST_PORT_DEFAULT = 27017;
private static final String TEST_USERNAME = "myuser";
private static final String TEST_PASSWORD = "mypass";
private static final String TEST_DB = "mydb";
+ private static final String MONGODB_SCHEME = "mongodb";
+ private static final String[] TEST_HOSTS = new String[] { TEST_HOST, TEST_HOST_1, TEST_HOST_2 };
-
private MongoDbFactoryCreator testCreator = new MongoDbFactoryCreator();
@Test
public void cloudMongoCreationNoConfig() throws Exception {
- MongoServiceInfo serviceInfo = createServiceInfo();
+ MongoServiceInfo serviceInfo = new MongoServiceInfo("id", TEST_HOST, TEST_PORT, TEST_USERNAME, TEST_PASSWORD, TEST_DB);
MongoDbFactory mongoDbFactory = testCreator.create(serviceInfo, null);
- assertConnectorProperties(serviceInfo, mongoDbFactory);
- }
+ assertNotNull(mongoDbFactory);
- public MongoServiceInfo createServiceInfo() {
- return new MongoServiceInfo("id", TEST_HOST, TEST_PORT, TEST_DB, TEST_USERNAME, TEST_PASSWORD);
- }
-
- private void assertConnectorProperties(MongoServiceInfo serviceInfo, MongoDbFactory connector) {
- assertNotNull(connector);
-
- Mongo mongo = (Mongo) ReflectionTestUtils.getField(connector, "mongo");
- UserCredentials credentials = (UserCredentials) ReflectionTestUtils.getField(connector, "credentials");
+ Mongo mongo = (Mongo) ReflectionTestUtils.getField(mongoDbFactory, "mongo");
+ UserCredentials credentials = (UserCredentials) ReflectionTestUtils.getField(mongoDbFactory, "credentials");
assertNotNull(mongo);
-
+
List addresses = mongo.getAllAddress();
assertEquals(1, addresses.size());
-
+
ServerAddress address = addresses.get(0);
-
+
assertEquals(serviceInfo.getHost(), address.getHost());
assertEquals(serviceInfo.getPort(), address.getPort());
assertEquals(serviceInfo.getUserName(), ReflectionTestUtils.getField(credentials, "username"));
assertEquals(serviceInfo.getPassword(), ReflectionTestUtils.getField(credentials, "password"));
-
+
// Don't do connector.getDatabase().getName() as that will try to initiate the connection
- assertEquals(serviceInfo.getDatabase(), ReflectionTestUtils.getField(connector, "databaseName"));
+ assertEquals(serviceInfo.getDatabase(), ReflectionTestUtils.getField(mongoDbFactory, "databaseName"));
+ }
+
+ @Test
+ public void cloudMongoCreationWithMultipleHostsByUri() throws Exception {
+ String uri = String.format("%s://%s:%s@%s:%s/%s", MONGODB_SCHEME, TEST_USERNAME, TEST_PASSWORD,
+ StringUtils.arrayToDelimitedString(TEST_HOSTS, ","), TEST_PORT, TEST_DB);
+
+ MongoServiceInfo serviceInfo = new MongoServiceInfo("id", uri);
+
+ MongoDbFactory mongoDbFactory = testCreator.create(serviceInfo, null);
+
+ assertNotNull(mongoDbFactory);
+
+ Mongo mongo = (Mongo) ReflectionTestUtils.getField(mongoDbFactory, "mongo");
+ UserCredentials credentials = (UserCredentials) ReflectionTestUtils.getField(mongoDbFactory, "credentials");
+ assertNotNull(mongo);
+
+ List addresses = mongo.getAllAddress();
+ assertEquals(3, addresses.size());
+
+ assertEquals(TEST_USERNAME, ReflectionTestUtils.getField(credentials, "username"));
+ assertEquals(TEST_PASSWORD, ReflectionTestUtils.getField(credentials, "password"));
+
+ // Don't do connector.getDatabase().getName() as that will try to initiate the connection
+ assertEquals(TEST_DB, ReflectionTestUtils.getField(mongoDbFactory, "databaseName"));
+
+ ServerAddress address1 = addresses.get(0);
+ assertEquals(TEST_HOST, address1.getHost());
+ assertEquals(TEST_PORT_DEFAULT, address1.getPort());
+
+ ServerAddress address2 = addresses.get(1);
+ assertEquals(TEST_HOST_1, address2.getHost());
+ assertEquals(TEST_PORT_DEFAULT, address2.getPort());
+
+ ServerAddress address3 = addresses.get(2);
+ assertEquals(TEST_HOST_2, address3.getHost());
+ assertEquals(TEST_PORT, address3.getPort());
}
}
diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/rabbit/RabbitServiceInfoTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/rabbit/RabbitServiceInfoTest.java
index f6d33e2..e106c4a 100644
--- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/rabbit/RabbitServiceInfoTest.java
+++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/rabbit/RabbitServiceInfoTest.java
@@ -13,7 +13,7 @@ import org.springframework.cloud.service.common.AmqpServiceInfo;
public class RabbitServiceInfoTest {
@Test
public void uriBasedParsing() {
- AmqpServiceInfo serviceInfo = new AmqpServiceInfo("id", "amqp://myuser:mypass@myhost:12345/myvhost");
+ AmqpServiceInfo serviceInfo = new AmqpServiceInfo("id", "amqp://myuser:mypass@myhost:12345/myvhost");
assertEquals("myhost", serviceInfo.getHost());
assertEquals(12345, serviceInfo.getPort());
@@ -21,10 +21,16 @@ public class RabbitServiceInfoTest {
assertEquals("mypass", serviceInfo.getPassword());
assertEquals("myvhost", serviceInfo.getVirtualHost());
}
-
+
@Test(expected=IllegalArgumentException.class)
- public void badProtocol() {
- new AmqpServiceInfo("id", "XX://myuser:mypass@myhost:12345/myvhost");
+ public void missingScheme() {
+ new AmqpServiceInfo("id", "://myuser:mypass@:12345/myvhost");
+ }
+
+ @Test
+ public void amqpsSchemeAccepted() {
+ AmqpServiceInfo serviceInfo = new AmqpServiceInfo("id", "amqps://myuser:mypass@myhost:12345/myvhost");
+ assertEquals("amqps", serviceInfo.getScheme());
}
@Test(expected=IllegalArgumentException.class)
@@ -32,12 +38,6 @@ public class RabbitServiceInfoTest {
new AmqpServiceInfo("id", "amqp://myuser:mypass@:12345/myvhost");
}
- @Test
- public void missingPort() {
- AmqpServiceInfo serviceInfo = new AmqpServiceInfo("id", "amqp://myuser:mypass@myhost/myvhost");
- assertEquals(5672, serviceInfo.getPort()); // the default port is 5672
- }
-
@Test(expected=IllegalArgumentException.class)
public void badUserInfo() {
new AmqpServiceInfo("id", "amqp://myuser@myhost/myvhost");
@@ -48,10 +48,9 @@ public class RabbitServiceInfoTest {
new AmqpServiceInfo("id", "amqp://myhost:12345/myvhost");
}
- @Test
+ @Test(expected=IllegalArgumentException.class)
public void missingVirtualHost() {
- AmqpServiceInfo serviceInfo = new AmqpServiceInfo("id", "amqp://myuser:mypass@myhost:12345");
- assertEquals("/", serviceInfo.getVirtualHost());
+ new AmqpServiceInfo("id", "amqp://myuser:mypass@myhost:12345");
}
@Test(expected=IllegalArgumentException.class)
diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/smtp/MailSenderFactoryTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/smtp/MailSenderFactoryTest.java
index 3b7a5ae..48de6ed 100644
--- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/smtp/MailSenderFactoryTest.java
+++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/smtp/MailSenderFactoryTest.java
@@ -4,25 +4,25 @@ import org.mockito.Mock;
import org.springframework.cloud.service.AbstractCloudServiceConnectorFactoryTest;
import org.springframework.cloud.service.ServiceConnectorConfig;
import org.springframework.cloud.service.common.SmtpServiceInfo;
-import org.springframework.mail.MailSender;
+import org.springframework.mail.javamail.JavaMailSender;
/**
*
* @author Ramnivas Laddad
*
*/
-public class MailSenderFactoryTest extends AbstractCloudServiceConnectorFactoryTest {
- @Mock MailSender mockConnector;
+public class MailSenderFactoryTest extends AbstractCloudServiceConnectorFactoryTest {
+ @Mock JavaMailSender mockConnector;
public MailSenderFactory createTestCloudServiceConnectorFactory(String id, ServiceConnectorConfig config) {
return new MailSenderFactory(id, config);
}
- public Class getConnectorType() {
- return MailSender.class;
+ public Class getConnectorType() {
+ return JavaMailSender.class;
}
- public MailSender getMockConnector() {
+ public JavaMailSender getMockConnector() {
return mockConnector;
}
diff --git a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/smtp/SmtpServiceConnectorCreatorTest.java b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/smtp/SmtpServiceConnectorCreatorTest.java
index e65c4fc..09d4794 100644
--- a/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/smtp/SmtpServiceConnectorCreatorTest.java
+++ b/spring-cloud-spring-service-connector/src/test/java/org/springframework/cloud/service/smtp/SmtpServiceConnectorCreatorTest.java
@@ -19,7 +19,6 @@ public class SmtpServiceConnectorCreatorTest {
private static final String TEST_USERNAME = "myuser";
private static final String TEST_PASSWORD = "mypass";
-
private MailSenderCreator testCreator = new MailSenderCreator();
@Test
diff --git a/spring-cloud-spring-service-connector/src/test/resources/log4j.properties b/spring-cloud-spring-service-connector/src/test/resources/log4j.properties
deleted file mode 100644
index 89c2a13..0000000
--- a/spring-cloud-spring-service-connector/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,6 +0,0 @@
-log4j.rootCategory=ERROR, stdout
-
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %40.40c:%4L - %m%n
-