Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
* Database Connection URL Validator supports system attribute expressions and evaluates URL formatting
*/
public class ConnectionUrlValidator implements Validator {
private static final String JDBC_URL_PREFIX = "jdbc:";
private static final Set<String> UNSUPPORTED_SCHEMES = Collections.singleton("jdbc:h2");

@Override
Expand All @@ -42,6 +43,9 @@ public ValidationResult validate(final String subject, final String input, final
if (isUrlUnsupported(url)) {
builder.valid(false);
builder.explanation(String.format("Connection URL contains an unsupported scheme %s", UNSUPPORTED_SCHEMES));
} else if (!isJdbcUrl(url)) {
builder.valid(false);
builder.explanation("Connection URL must start with '%s'".formatted(JDBC_URL_PREFIX));
} else {
builder.valid(true);
builder.explanation("Connection URL is valid");
Expand All @@ -51,6 +55,10 @@ public ValidationResult validate(final String subject, final String input, final
return builder.build();
}

private boolean isJdbcUrl(final String url) {
return url.regionMatches(true, 0, JDBC_URL_PREFIX, 0, JDBC_URL_PREFIX.length());
}

private boolean isUrlUnsupported(final String url) {
boolean unsupported = false;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,12 @@ class ConnectionUrlValidatorTest {

private static final String VENDOR_URL = "jdbc:vendor";

private static final String NON_JDBC_URL = "http://localhost:3306/database";

private static final String NON_JDBC_PLAIN_STRING = "not-a-jdbc-url";

private static final String UPPERCASE_JDBC_URL = "JDBC:VENDOR://localhost:5432/db";

private ValidationContext validationContext;

private ConnectionUrlValidator validator;
Expand All @@ -63,6 +69,14 @@ void testValidateEmpty() {
assertFalse(result.isValid());
}

@Test
void testValidateNull() {
final ValidationResult result = validator.validate(SUBJECT, null, validationContext);

assertNotNull(result);
assertFalse(result.isValid());
}

@Test
void testValidateUnsupportedUrl() {
final ValidationResult result = validator.validate(SUBJECT, UNSUPPORTED_URL, validationContext);
Expand Down Expand Up @@ -94,4 +108,28 @@ void testValidateSupportedUrl() {
assertNotNull(result);
assertTrue(result.isValid());
}

@Test
void testValidateNonJdbcUrl() {
final ValidationResult result = validator.validate(SUBJECT, NON_JDBC_URL, validationContext);

assertNotNull(result);
assertFalse(result.isValid());
}

@Test
void testValidateNonJdbcPlainString() {
final ValidationResult result = validator.validate(SUBJECT, NON_JDBC_PLAIN_STRING, validationContext);

assertNotNull(result);
assertFalse(result.isValid());
}

@Test
void testValidateUppercaseJdbcUrl() {
final ValidationResult result = validator.validate(SUBJECT, UPPERCASE_JDBC_URL, validationContext);

assertNotNull(result);
assertTrue(result.isValid());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ public class DBCPServiceTest {

private static final String INVALID_CONNECTION_URL = "jdbc:h2";

private static final String NON_JDBC_URL = "http://localhost:3306/database";

private static final String DRIVER_CLASS = "org.hsqldb.jdbc.JDBCDriver";
private static final String CONNECTION_URL_FORMAT = "jdbc:hsqldb:file:%s";

Expand Down Expand Up @@ -97,6 +99,14 @@ public void testConnectionUrlInvalid() {
runner.assertNotValid(service);
}

@Test
public void testConnectionUrlNonJdbc() {
runner.assertValid(service);

runner.setProperty(service, DBCPProperties.DATABASE_URL, NON_JDBC_URL);
runner.assertNotValid(service);
}

@Test
public void testNotValidWithNegativeMinIdleProperty() {
runner.setProperty(service, DBCPProperties.MIN_IDLE, "-1");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ public class HikariCPConnectionPoolTest {

private static final String INVALID_CONNECTION_URL = "jdbc:h2";

private static final String NON_JDBC_URL = "http://localhost:3306/database";

private static final String DB_DRIVERNAME_VALUE = "jdbc:mock";

private static final String MAX_WAIT_TIME_VALUE = "5 s";
Expand All @@ -72,6 +74,18 @@ public void testConnectionUrlInvalid() throws InitializationException {
runner.assertNotValid(service);
}

@Test
public void testConnectionUrlNonJdbc() throws InitializationException {
final HikariCPConnectionPool service = new HikariCPConnectionPool();

runner.addControllerService(SERVICE_ID, service);
setDatabaseProperties(service);
runner.assertValid(service);

runner.setProperty(service, HikariCPConnectionPool.DATABASE_URL, NON_JDBC_URL);
runner.assertNotValid(service);
}

@Test
public void testMissingPropertyValues() throws InitializationException {
final HikariCPConnectionPool service = new HikariCPConnectionPool();
Expand Down
Loading