Github user patricker commented on a diff in the pull request:
https://github.com/apache/nifi/pull/3133#discussion_r232065708
--- Diff:
nifi-nar-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-dbcp-service/src/test/java/org/apache/nifi/dbcp/DBCPServiceTest.java
---
@@ -93,6 +94,155 @@ public void testMaxWait() throws
InitializationException {
runner.assertValid(service);
}
+ /**
+ * Checks validity of idle limit and time settings including a default
+ */
+ @Test
+ public void testIdleConnectionsSettings() throws
InitializationException {
+ final TestRunner runner =
TestRunners.newTestRunner(TestProcessor.class);
+ final DBCPConnectionPool service = new DBCPConnectionPool();
+ runner.addControllerService("test-good1", service);
+
+ // remove previous test database, if any
+ final File dbLocation = new File(DB_LOCATION);
+ dbLocation.delete();
+
+ // set embedded Derby database connection url
+ runner.setProperty(service, DBCPConnectionPool.DATABASE_URL,
"jdbc:derby:" + DB_LOCATION + ";create=true");
+ runner.setProperty(service, DBCPConnectionPool.DB_USER, "tester");
+ runner.setProperty(service, DBCPConnectionPool.DB_PASSWORD,
"testerp");
+ runner.setProperty(service, DBCPConnectionPool.DB_DRIVERNAME,
"org.apache.derby.jdbc.EmbeddedDriver");
+ runner.setProperty(service, DBCPConnectionPool.MAX_WAIT_TIME,
"-1");
+ runner.setProperty(service, DBCPConnectionPool.MAX_IDLE, "2");
+ runner.setProperty(service, DBCPConnectionPool.MAX_CONN_LIFETIME,
"1 secs");
+ runner.setProperty(service,
DBCPConnectionPool.EVICTION_RUN_PERIOD, "1 secs");
+ runner.setProperty(service,
DBCPConnectionPool.MIN_EVICTABLE_IDLE_TIME, "1 secs");
+ runner.setProperty(service,
DBCPConnectionPool.SOFT_MIN_EVICTABLE_IDLE_TIME, "1 secs");
+
+ runner.enableControllerService(service);
+ runner.assertValid(service);
+ }
+
+ @Test
+ public void testMinIdleCannotBeNegative() throws
InitializationException {
+ final TestRunner runner =
TestRunners.newTestRunner(TestProcessor.class);
+ final DBCPConnectionPool service = new DBCPConnectionPool();
+ runner.addControllerService("test-good1", service);
+
+ // remove previous test database, if any
+ final File dbLocation = new File(DB_LOCATION);
+ dbLocation.delete();
+
+ // set embedded Derby database connection url
+ runner.setProperty(service, DBCPConnectionPool.DATABASE_URL,
"jdbc:derby:" + DB_LOCATION + ";create=true");
+ runner.setProperty(service, DBCPConnectionPool.DB_USER, "tester");
+ runner.setProperty(service, DBCPConnectionPool.DB_PASSWORD,
"testerp");
+ runner.setProperty(service, DBCPConnectionPool.DB_DRIVERNAME,
"org.apache.derby.jdbc.EmbeddedDriver");
+ runner.setProperty(service, DBCPConnectionPool.MAX_WAIT_TIME,
"-1");
+ runner.setProperty(service, DBCPConnectionPool.MIN_IDLE, "-1");
+
+ runner.assertNotValid(service);
+ }
+
+ /**
+ * Checks to ensure that settings have been passed down into the DBCP
+ */
+ @Test
+ public void testIdleSettingsAreSet() throws InitializationException,
SQLException {
+ final TestRunner runner =
TestRunners.newTestRunner(TestProcessor.class);
+ final DBCPConnectionPool service = new DBCPConnectionPool();
+ runner.addControllerService("test-good1", service);
+
+ // remove previous test database, if any
+ final File dbLocation = new File(DB_LOCATION);
+ dbLocation.delete();
+
+ // set embedded Derby database connection url
+ runner.setProperty(service, DBCPConnectionPool.DATABASE_URL,
"jdbc:derby:" + DB_LOCATION + ";create=true");
+ runner.setProperty(service, DBCPConnectionPool.DB_USER, "tester");
+ runner.setProperty(service, DBCPConnectionPool.DB_PASSWORD,
"testerp");
+ runner.setProperty(service, DBCPConnectionPool.DB_DRIVERNAME,
"org.apache.derby.jdbc.EmbeddedDriver");
+ runner.setProperty(service, DBCPConnectionPool.MAX_WAIT_TIME,
"-1");
+ runner.setProperty(service, DBCPConnectionPool.MAX_IDLE, "6");
+ runner.setProperty(service, DBCPConnectionPool.MIN_IDLE, "4");
+ runner.setProperty(service, DBCPConnectionPool.MAX_CONN_LIFETIME,
"1 secs");
+ runner.setProperty(service,
DBCPConnectionPool.EVICTION_RUN_PERIOD, "1 secs");
+ runner.setProperty(service,
DBCPConnectionPool.MIN_EVICTABLE_IDLE_TIME, "1 secs");
+ runner.setProperty(service,
DBCPConnectionPool.SOFT_MIN_EVICTABLE_IDLE_TIME, "1 secs");
+
+ runner.enableControllerService(service);
+
+ Assert.assertEquals(6, service.getDataSource().getMaxIdle());
+ Assert.assertEquals(4, service.getDataSource().getMinIdle());
+ Assert.assertEquals(1000,
service.getDataSource().getMaxConnLifetimeMillis());
+ Assert.assertEquals(1000,
service.getDataSource().getTimeBetweenEvictionRunsMillis());
+ Assert.assertEquals(1000,
service.getDataSource().getMinEvictableIdleTimeMillis());
+ Assert.assertEquals(1000,
service.getDataSource().getSoftMinEvictableIdleTimeMillis());
+
+ service.getDataSource().close();
+ }
+
+ /**
+ * Creates a few connections and step closes them to see what happens
+ */
+ @Test
+ public void testIdle() throws InitializationException, SQLException,
InterruptedException {
--- End diff --
Exactly what I was hoping to see in the tests. Thanks for making these!
I think we are getting close. After @mattyb149 's requested change,
probably a good time to squash your commit's.
---