@Test
  public void testFullConfiguration() throws Exception {
    DataSourceFactory ds = getDataSourceFactory("yaml/full_db_pool.yml");

    assertThat(ds.getDriverClass()).isEqualTo("org.postgresql.Driver");
    assertThat(ds.getUser()).isEqualTo("pg-user");
    assertThat(ds.getUrl()).isEqualTo("jdbc:postgresql://db.example.com/db-prod");
    assertThat(ds.getPassword()).isEqualTo("iAMs00perSecrEET");
    assertThat(ds.getProperties()).containsEntry("charSet", "UTF-8");
    assertThat(ds.getMaxWaitForConnection()).isEqualTo(Duration.seconds(1));
    assertThat(ds.getValidationQuery()).isEqualTo("/* MyService Health Check */ SELECT 1");
    assertThat(ds.getMinSize()).isEqualTo(8);
    assertThat(ds.getInitialSize()).isEqualTo(15);
    assertThat(ds.getMaxSize()).isEqualTo(32);
    assertThat(ds.getCheckConnectionWhileIdle()).isFalse();
    assertThat(ds.getEvictionInterval()).isEqualTo(Duration.seconds(10));
    assertThat(ds.getMinIdleTime()).isEqualTo(Duration.minutes(1));
    assertThat(ds.getValidationInterval()).isEqualTo(Duration.minutes(1));
    assertThat(ds.isAutoCommentsEnabled()).isFalse();
    assertThat(ds.getReadOnlyByDefault()).isFalse();
    assertThat(ds.isRemoveAbandoned()).isTrue();
    assertThat(ds.getRemoveAbandonedTimeout()).isEqualTo(Duration.seconds(15L));
    assertThat(ds.getAbandonWhenPercentageFull()).isEqualTo(75);
    assertThat(ds.isAlternateUsernamesAllowed()).isTrue();
    assertThat(ds.getCommitOnReturn()).isTrue();
    assertThat(ds.getRollbackOnReturn()).isTrue();
    assertThat(ds.getAutoCommitByDefault()).isFalse();
    assertThat(ds.getDefaultCatalog()).isEqualTo("test_catalog");
    assertThat(ds.getDefaultTransactionIsolation())
        .isEqualTo(DataSourceFactory.TransactionIsolation.READ_COMMITTED);
    assertThat(ds.getUseFairQueue()).isFalse();
    assertThat(ds.getInitializationQuery())
        .isEqualTo("insert into connections_log(ts) values (now())");
    assertThat(ds.getLogAbandonedConnections()).isEqualTo(true);
    assertThat(ds.getLogValidationErrors()).isEqualTo(true);
    assertThat(ds.getMaxConnectionAge()).isEqualTo(Optional.of(Duration.hours(1)));
    assertThat(ds.getCheckConnectionOnBorrow()).isEqualTo(true);
    assertThat(ds.getCheckConnectionOnConnect()).isEqualTo(false);
    assertThat(ds.getCheckConnectionOnReturn()).isEqualTo(true);
    assertThat(ds.getValidationQueryTimeout()).isEqualTo(Optional.of(Duration.seconds(3)));
    assertThat(ds.getValidatorClassName())
        .isEqualTo(Optional.of("io.dropwizard.db.CustomConnectionValidator"));
  }