From 6b7903e88a489195effd041b744ffc9a83994966 Mon Sep 17 00:00:00 2001 From: Emily Casey Date: Tue, 28 Apr 2020 16:43:11 -0400 Subject: [PATCH] Adds more jdbc kinds * db2, oracle, postgres, sqlserver Signed-off-by: Emily Casey --- .../cloud/cnb/jdbc/DB2JdbcKind.java | 39 +++++++++ .../cloud/cnb/jdbc/OracleJdbcKind.java | 39 +++++++++ .../cloud/cnb/jdbc/PostgresJdbcKind.java | 42 ++++++++++ .../cloud/cnb/jdbc/SqlServerJdbcKind.java | 39 +++++++++ ...rg.springframework.cloud.cnb.jdbc.JdbcKind | 6 +- .../cloud/cnb/jdbc/JdbcUrlCreatorTest.java | 79 ++++++++++++++++--- 6 files changed, 231 insertions(+), 13 deletions(-) create mode 100644 cnb-bindings-jdbc/src/main/java/org/springframework/cloud/cnb/jdbc/DB2JdbcKind.java create mode 100644 cnb-bindings-jdbc/src/main/java/org/springframework/cloud/cnb/jdbc/OracleJdbcKind.java create mode 100644 cnb-bindings-jdbc/src/main/java/org/springframework/cloud/cnb/jdbc/PostgresJdbcKind.java create mode 100644 cnb-bindings-jdbc/src/main/java/org/springframework/cloud/cnb/jdbc/SqlServerJdbcKind.java diff --git a/cnb-bindings-jdbc/src/main/java/org/springframework/cloud/cnb/jdbc/DB2JdbcKind.java b/cnb-bindings-jdbc/src/main/java/org/springframework/cloud/cnb/jdbc/DB2JdbcKind.java new file mode 100644 index 0000000..f607b2e --- /dev/null +++ b/cnb-bindings-jdbc/src/main/java/org/springframework/cloud/cnb/jdbc/DB2JdbcKind.java @@ -0,0 +1,39 @@ +/* + * Copyright 2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.cloud.cnb.jdbc; + +import org.springframework.cloud.cnb.core.CnbBinding; + +public class DB2JdbcKind implements JdbcKind{ + + public static final String DB2_KIND = "db2"; + public static final String DB2_SCHEME = "db2"; + + @Override + public boolean forBinding(CnbBinding binding) { + return binding.getKind().equals(DB2_KIND); + } + + @Override + public String getScheme() { + return DB2_SCHEME; + } + + @Override + public String getDriverClassName() { + return "com.ibm.db2.jcc.DB2Driver"; + } +} diff --git a/cnb-bindings-jdbc/src/main/java/org/springframework/cloud/cnb/jdbc/OracleJdbcKind.java b/cnb-bindings-jdbc/src/main/java/org/springframework/cloud/cnb/jdbc/OracleJdbcKind.java new file mode 100644 index 0000000..9342000 --- /dev/null +++ b/cnb-bindings-jdbc/src/main/java/org/springframework/cloud/cnb/jdbc/OracleJdbcKind.java @@ -0,0 +1,39 @@ +/* + * Copyright 2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.cloud.cnb.jdbc; + +import org.springframework.cloud.cnb.core.CnbBinding; + +public class OracleJdbcKind implements JdbcKind{ + + public static final String ORACLE_KIND = "oracle"; + public static final String ORACLE_SCHEME = "oracle"; + + @Override + public boolean forBinding(CnbBinding binding) { + return binding.getKind().equals(ORACLE_KIND); + } + + @Override + public String getScheme() { + return ORACLE_SCHEME; + } + + @Override + public String getDriverClassName() { + return "oracle.jdbc.OracleDriver"; + } +} diff --git a/cnb-bindings-jdbc/src/main/java/org/springframework/cloud/cnb/jdbc/PostgresJdbcKind.java b/cnb-bindings-jdbc/src/main/java/org/springframework/cloud/cnb/jdbc/PostgresJdbcKind.java new file mode 100644 index 0000000..fca8079 --- /dev/null +++ b/cnb-bindings-jdbc/src/main/java/org/springframework/cloud/cnb/jdbc/PostgresJdbcKind.java @@ -0,0 +1,42 @@ +/* + * Copyright 2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.cloud.cnb.jdbc; + +import org.springframework.cloud.cnb.core.CnbBinding; + +import java.util.Arrays; +import java.util.List; + +public class PostgresJdbcKind implements JdbcKind{ + + public static final List POSTGRES_KINDS = Arrays.asList("postgres", "postgresql"); + public static final String POSTGRES_SCHEME = "postgres"; + + @Override + public boolean forBinding(CnbBinding binding) { + return POSTGRES_KINDS.contains(binding.getKind()); + } + + @Override + public String getScheme() { + return POSTGRES_SCHEME; + } + + @Override + public String getDriverClassName() { + return "org.postgresql.Driver"; + } +} diff --git a/cnb-bindings-jdbc/src/main/java/org/springframework/cloud/cnb/jdbc/SqlServerJdbcKind.java b/cnb-bindings-jdbc/src/main/java/org/springframework/cloud/cnb/jdbc/SqlServerJdbcKind.java new file mode 100644 index 0000000..b27a4ac --- /dev/null +++ b/cnb-bindings-jdbc/src/main/java/org/springframework/cloud/cnb/jdbc/SqlServerJdbcKind.java @@ -0,0 +1,39 @@ +/* + * Copyright 2019 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.springframework.cloud.cnb.jdbc; + +import org.springframework.cloud.cnb.core.CnbBinding; + +public class SqlServerJdbcKind implements JdbcKind{ + + public static final String SQLSERVER_KIND = "sqlserver"; + public static final String SQLSERVER_SCHEME = "sqlserver"; + + @Override + public boolean forBinding(CnbBinding binding) { + return binding.getKind().equals(SQLSERVER_KIND); + } + + @Override + public String getScheme() { + return SQLSERVER_SCHEME; + } + + @Override + public String getDriverClassName() { + return "com.microsoft.sqlserver.jdbc.SQLServerDriver"; + } +} diff --git a/cnb-bindings-jdbc/src/main/resources/META-INF/services/org.springframework.cloud.cnb.jdbc.JdbcKind b/cnb-bindings-jdbc/src/main/resources/META-INF/services/org.springframework.cloud.cnb.jdbc.JdbcKind index b9eeac1..a2b9069 100644 --- a/cnb-bindings-jdbc/src/main/resources/META-INF/services/org.springframework.cloud.cnb.jdbc.JdbcKind +++ b/cnb-bindings-jdbc/src/main/resources/META-INF/services/org.springframework.cloud.cnb.jdbc.JdbcKind @@ -1 +1,5 @@ -org.springframework.cloud.cnb.jdbc.MysqlJdbcKind \ No newline at end of file +org.springframework.cloud.cnb.jdbc.MysqlJdbcKind +org.springframework.cloud.cnb.jdbc.DB2JdbcKind +org.springframework.cloud.cnb.jdbc.OracleJdbcKind +org.springframework.cloud.cnb.jdbc.PostgresJdbcKind +org.springframework.cloud.cnb.jdbc.SqlServerJdbcKind \ No newline at end of file diff --git a/cnb-bindings-jdbc/src/test/java/org/springframework/cloud/cnb/jdbc/JdbcUrlCreatorTest.java b/cnb-bindings-jdbc/src/test/java/org/springframework/cloud/cnb/jdbc/JdbcUrlCreatorTest.java index 6d3426a..3ef6d0c 100644 --- a/cnb-bindings-jdbc/src/test/java/org/springframework/cloud/cnb/jdbc/JdbcUrlCreatorTest.java +++ b/cnb-bindings-jdbc/src/test/java/org/springframework/cloud/cnb/jdbc/JdbcUrlCreatorTest.java @@ -28,18 +28,73 @@ import static org.assertj.core.api.Assertions.assertThat; public class JdbcUrlCreatorTest { @Test - public void testJdbcUrlCreator() { - Map mysqlMetadata = new HashMap(); - mysqlMetadata.put("kind", "mysql"); - Map mysqlSecret = new HashMap(); - mysqlSecret.put("hostname", "10.0.4.35"); - mysqlSecret.put("port", "3306"); - mysqlSecret.put("db", "some-db"); - mysqlSecret.put("username", "some-username"); - mysqlSecret.put("password", "some-password"); - CnbBinding mysqlBinding = new CnbBinding(mysqlMetadata, mysqlSecret); + public void testJdbcUrlCreator_mysql() { + CnbBinding mysqlBinding = bindingWithKind("mysql"); JdbcUrlCreator jdbcUrlCreator = new JdbcUrlCreator(mysqlBinding); - String url = jdbcUrlCreator.getJdbcUrl(); - assertThat(url).isEqualTo("jdbc:mysql://10.0.4.35:3306/some-db?user=some-username&password=some-password"); + assertThat(jdbcUrlCreator.getJdbcUrl()). + isEqualTo("jdbc:mysql://10.0.4.35:3306/some-db?user=some-username&password=some-password"); + } + + @Test + public void testJdbcUrlCreator_db2() { + CnbBinding db2Binding = bindingWithKind("db2"); + JdbcUrlCreator jdbcUrlCreator = new JdbcUrlCreator(db2Binding); + + assertThat(jdbcUrlCreator.getJdbcUrl()). + isEqualTo("jdbc:db2://10.0.4.35:3306/some-db?user=some-username&password=some-password"); + assertThat(jdbcUrlCreator.getDriverClassName()). + isEqualTo("com.ibm.db2.jcc.DB2Driver"); + } + + @Test + public void testJdbcUrlCreator_oracle() { + CnbBinding oracleBinding = bindingWithKind("oracle"); + JdbcUrlCreator jdbcUrlCreator = new JdbcUrlCreator(oracleBinding); + assertThat(jdbcUrlCreator.getJdbcUrl()) + .isEqualTo("jdbc:oracle://10.0.4.35:3306/some-db?user=some-username&password=some-password"); + assertThat(jdbcUrlCreator.getDriverClassName()). + isEqualTo("oracle.jdbc.OracleDriver"); + } + + @Test + public void testJdbcUrlCreator_postgres() { + CnbBinding oracleBinding = bindingWithKind("postgres"); + JdbcUrlCreator jdbcUrlCreator = new JdbcUrlCreator(oracleBinding); + assertThat(jdbcUrlCreator.getJdbcUrl()) + .isEqualTo("jdbc:postgres://10.0.4.35:3306/some-db?user=some-username&password=some-password"); + assertThat(jdbcUrlCreator.getDriverClassName()). + isEqualTo("org.postgresql.Driver"); + } + + @Test + public void testJdbcUrlCreator_postgresql() { + CnbBinding oracleBinding = bindingWithKind("postgresql"); + JdbcUrlCreator jdbcUrlCreator = new JdbcUrlCreator(oracleBinding); + assertThat(jdbcUrlCreator.getJdbcUrl()) + .isEqualTo("jdbc:postgres://10.0.4.35:3306/some-db?user=some-username&password=some-password"); + assertThat(jdbcUrlCreator.getDriverClassName()). + isEqualTo("org.postgresql.Driver"); + } + + @Test + public void testJdbcUrlCreator_sqlserver() { + CnbBinding oracleBinding = bindingWithKind("sqlserver"); + JdbcUrlCreator jdbcUrlCreator = new JdbcUrlCreator(oracleBinding); + assertThat(jdbcUrlCreator.getJdbcUrl()) + .isEqualTo("jdbc:sqlserver://10.0.4.35:3306/some-db?user=some-username&password=some-password"); + assertThat(jdbcUrlCreator.getDriverClassName()). + isEqualTo("com.microsoft.sqlserver.jdbc.SQLServerDriver"); + } + + public CnbBinding bindingWithKind(String kind) { + Map metadata = new HashMap(); + metadata.put("kind", kind); + Map secret = new HashMap(); + secret.put("hostname", "10.0.4.35"); + secret.put("port", "3306"); + secret.put("db", "some-db"); + secret.put("username", "some-username"); + secret.put("password", "some-password"); + return new CnbBinding(metadata, secret); } }