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.


---

Reply via email to