This is an automated email from the ASF dual-hosted git repository.
jchen21 pushed a commit to branch feature/GEODE-6511
in repository https://gitbox.apache.org/repos/asf/geode.git
The following commit(s) were added to refs/heads/feature/GEODE-6511 by this
push:
new 82da1b8 Add more tests
82da1b8 is described below
commit 82da1b8baef8e7701c787411b6704c768272c9c6
Author: Ben Ross <[email protected]>
AuthorDate: Tue Mar 12 16:20:43 2019 -0700
Add more tests
Co-authored-by: Ben Ross <[email protected]>
Co-authored-by: Jianxia Chen <[email protected]>
---
.../cli/DestroyDataSourceCommandDUnitTest.java | 90 +++++++++++++++++++++-
.../cli/ListDataSourceCommandDUnitTest.java | 12 +++
.../apache/geode/internal/jndi/JNDIInvoker.java | 11 +--
3 files changed, 106 insertions(+), 7 deletions(-)
diff --git
a/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyDataSourceCommandDUnitTest.java
b/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyDataSourceCommandDUnitTest.java
index 6615c06..c482405 100644
---
a/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyDataSourceCommandDUnitTest.java
+++
b/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/DestroyDataSourceCommandDUnitTest.java
@@ -62,7 +62,7 @@ public class DestroyDataSourceCommandDUnitTest {
gfsh.connectAndVerify(locator);
gfsh.execute(
- "create data-source --name=datasource1
--url=\"jdbc:derby:memory:newDB;create=true\" --pooled=false");
+ "create data-source --name=datasource1
--url=\"jdbc:derby:memory:newDB;create=true\"");
}
@Test
@@ -72,7 +72,7 @@ public class DestroyDataSourceCommandDUnitTest {
.invokeInEveryMember(
() ->
assertThat(JNDIInvoker.getBindingNamesRecursively(JNDIInvoker.getJNDIContext()))
.containsKey("java:datasource1").containsValue(
-
"org.apache.geode.internal.datasource.GemFireBasicDataSource"),
+ "com.zaxxer.hikari.HikariDataSource"),
server1, server2);
gfsh.executeAndAssertThat("destroy data-source
--name=datasource1").statusIsSuccess()
@@ -120,6 +120,69 @@ public class DestroyDataSourceCommandDUnitTest {
});
}
+ @Test
+ public void testDestroySimpleDataSource() throws Exception {
+ // drop the default pooled data source
+ gfsh.executeAndAssertThat("destroy data-source
--name=datasource1").statusIsSuccess();
+
+ // create a simple data source, i.e. non-pooled data source
+ gfsh.execute(
+ "create data-source --name=datasource2
--url=\"jdbc:derby:memory:newDB;create=true\" --pooled=false");
+
+ // assert that there is a datasource
+ VMProvider
+ .invokeInEveryMember(
+ () ->
assertThat(JNDIInvoker.getBindingNamesRecursively(JNDIInvoker.getJNDIContext()))
+ .containsKey("java:datasource2").containsValue(
+
"org.apache.geode.internal.datasource.GemFireBasicDataSource"),
+ server1, server2);
+
+
+ gfsh.executeAndAssertThat("destroy data-source
--name=datasource2").statusIsSuccess()
+ .tableHasColumnOnlyWithValues("Member", "server-1", "server-2")
+ .tableHasColumnOnlyWithValues("Message",
+ "Data source \"datasource2\" destroyed on \"server-1\"",
+ "Data source \"datasource2\" destroyed on \"server-2\"");
+
+ // verify cluster config is updated
+ locator.invoke(() -> {
+ InternalLocator internalLocator = ClusterStartupRule.getLocator();
+ AssertionsForClassTypes.assertThat(internalLocator).isNotNull();
+ InternalConfigurationPersistenceService ccService =
+ internalLocator.getConfigurationPersistenceService();
+ Configuration configuration = ccService.getConfiguration("cluster");
+ Document document =
XmlUtils.createDocumentFromXml(configuration.getCacheXmlContent());
+ NodeList jndiBindings = document.getElementsByTagName("jndi-binding");
+
+
AssertionsForClassTypes.assertThat(jndiBindings.getLength()).isEqualTo(0);
+
+ boolean found = false;
+ for (int i = 0; i < jndiBindings.getLength(); i++) {
+ Element eachBinding = (Element) jndiBindings.item(i);
+ if (eachBinding.getAttribute("jndi-name").equals("datasource2")) {
+ found = true;
+ break;
+ }
+ }
+ AssertionsForClassTypes.assertThat(found).isFalse();
+ });
+
+ // verify datasource does not exists
+ VMProvider.invokeInEveryMember(
+ () ->
AssertionsForClassTypes.assertThat(JNDIInvoker.getNoOfAvailableDataSources())
+ .isEqualTo(0),
+ server1, server2);
+
+ // bounce server1 and assert that there is still no datasource received
from cluster config
+ server1.stop(false);
+ server1 = cluster.startServerVM(1, locator.getPort());
+
+ // verify no datasource from cluster config
+ server1.invoke(() -> {
+
AssertionsForClassTypes.assertThat(JNDIInvoker.getNoOfAvailableDataSources()).isEqualTo(0);
+ });
+ }
+
private void createTable() {
executeSql("create table mySchema.myRegion (id varchar(10) primary key,
name varchar(10))");
}
@@ -196,4 +259,27 @@ public class DestroyDataSourceCommandDUnitTest {
dropTable();
}
}
+
+ @Test
+ public void destroySimpleDataSourceFailsIfInUseByJdbcMapping() throws
Exception {
+ // create a simple data source, i.e. non-pooled data source
+ gfsh.execute(
+ "create data-source --name=datasource2
--url=\"jdbc:derby:memory:newDB;create=true\" --pooled=false");
+
+ gfsh.executeAndAssertThat("create region --name=myRegion
--type=REPLICATE").statusIsSuccess();
+ createTable();
+ try {
+ gfsh.executeAndAssertThat(
+ "create jdbc-mapping --data-source=datasource2 --pdx-name=" +
IdAndName.class.getName()
+ + " --region=myRegion --schema=mySchema")
+ .statusIsSuccess();
+
+ gfsh.executeAndAssertThat("destroy data-source
--name=datasource2").statusIsError()
+ .containsOutput(
+ "Data source named \"datasource2\" is still being used by region
\"myRegion\"."
+ + " Use destroy jdbc-mapping --region=myRegion and then try
again.");
+ } finally {
+ dropTable();
+ }
+ }
}
diff --git
a/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/ListDataSourceCommandDUnitTest.java
b/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/ListDataSourceCommandDUnitTest.java
index 66b589a..ca3df16 100644
---
a/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/ListDataSourceCommandDUnitTest.java
+++
b/geode-connectors/src/distributedTest/java/org/apache/geode/connectors/jdbc/internal/cli/ListDataSourceCommandDUnitTest.java
@@ -163,6 +163,18 @@ public class ListDataSourceCommandDUnitTest {
}
@Test
+ public void listDataSourceForPooledDataSourceByDefault() {
+ gfsh.executeAndAssertThat(
+ "create data-source --name=pooledDataSource
--url=\"jdbc:derby:memory:newDB;create=true\"
--pooled-data-source-factory-class=org.apache.geode.internal.jta.CacheJTAPooledDataSourceFactory
--pool-properties={'name':'prop1','value':'value1'},{'name':'pool.prop2','value':'value2'}")
+ .statusIsSuccess().tableHasColumnOnlyWithValues("Member", "server-1");
+
+ gfsh.executeAndAssertThat("list data-source").statusIsSuccess()
+ .tableHasRowWithValues("name", "pooled", "in use", "url",
"pooledDataSource", "true",
+ "false",
+ "jdbc:derby:memory:newDB;create=true");
+ }
+
+ @Test
public void listDataSourceWithMultipleDataSourcesListsAll() {
gfsh.executeAndAssertThat(
"create data-source --name=simple --pooled=false
--url=\"jdbc:derby:memory:newDB;create=true\" --username=joe
--password=myPassword")
diff --git
a/geode-core/src/main/java/org/apache/geode/internal/jndi/JNDIInvoker.java
b/geode-core/src/main/java/org/apache/geode/internal/jndi/JNDIInvoker.java
index 5c050d3..944673e 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/jndi/JNDIInvoker.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/jndi/JNDIInvoker.java
@@ -48,8 +48,7 @@ import
org.apache.geode.internal.datasource.ClientConnectionFactoryWrapper;
import org.apache.geode.internal.datasource.ConfigProperty;
import org.apache.geode.internal.datasource.DataSourceCreateException;
import org.apache.geode.internal.datasource.DataSourceFactory;
-import org.apache.geode.internal.datasource.GemFireBasicDataSource;
-import org.apache.geode.internal.datasource.GemFireConnPooledDataSource;
+import org.apache.geode.internal.datasource.GemFireTransactionDataSource;
import org.apache.geode.internal.jta.TransactionManagerImpl;
import org.apache.geode.internal.jta.TransactionUtils;
import org.apache.geode.internal.jta.UserTransactionImpl;
@@ -409,9 +408,11 @@ public class JNDIInvoker {
public static boolean checkForInvalidDataSource(String name) {
Object dataSource = dataSourceMap.get(name);
- if (dataSource == null || dataSource instanceof GemFireBasicDataSource
- || dataSource instanceof GemFireConnPooledDataSource) {
- return false;
+ if (dataSource != null) {
+ if (dataSource instanceof DataSource
+ && !(dataSource instanceof GemFireTransactionDataSource)) {
+ return false;
+ }
}
return true;
}