ARTEMIS-2471 JdbcNodeManager doesn't use jdbc-user and jdbc-password tags

This commit is contained in:
Francesco Nigro 2019-09-04 18:32:06 +02:00 committed by Justin Bertram
parent 0106329816
commit a9ce90f97a
3 changed files with 151 additions and 0 deletions

View File

@ -88,6 +88,8 @@ public final class JdbcNodeManager extends NodeManager {
configuration.getJdbcLockRenewPeriodMillis(),
configuration.getJdbcLockAcquisitionTimeoutMillis(),
configuration.getJdbcConnectionUrl(),
configuration.getJdbcUser(),
configuration.getJdbcPassword(),
configuration.getJdbcDriverClassName(),
sqlProvider,
scheduledExecutorService,
@ -126,6 +128,8 @@ public final class JdbcNodeManager extends NodeManager {
long lockRenewPeriodMillis,
long lockAcquisitionTimeoutMillis,
String jdbcUrl,
String user,
String password,
String driverClass,
SQLProvider provider,
ScheduledExecutorService scheduledExecutorService,
@ -137,6 +141,8 @@ public final class JdbcNodeManager extends NodeManager {
executorFactory == null ? null : executorFactory.getExecutor(),
lockExpirationMillis,
jdbcUrl,
user,
password,
driverClass,
provider),
lockRenewPeriodMillis,

View File

@ -76,6 +76,26 @@ final class JdbcSharedStateManager extends AbstractJDBCDriver implements SharedS
null,
locksExpirationMillis,
jdbcConnectionUrl,
null,
null,
jdbcDriverClass,
provider);
}
public static JdbcSharedStateManager usingConnectionUrl(String holderId,
long locksExpirationMillis,
String jdbcConnectionUrl,
String user,
String password,
String jdbcDriverClass,
SQLProvider provider) {
return JdbcSharedStateManager.usingConnectionUrl(holderId,
-1,
null,
locksExpirationMillis,
jdbcConnectionUrl,
user,
password,
jdbcDriverClass,
provider);
}
@ -85,6 +105,8 @@ final class JdbcSharedStateManager extends AbstractJDBCDriver implements SharedS
Executor networkTimeoutExecutor,
long locksExpirationMillis,
String jdbcConnectionUrl,
String user,
String password,
String jdbcDriverClass,
SQLProvider provider) {
final JdbcSharedStateManager sharedStateManager = new JdbcSharedStateManager(holderId, locksExpirationMillis);
@ -92,6 +114,8 @@ final class JdbcSharedStateManager extends AbstractJDBCDriver implements SharedS
sharedStateManager.setJdbcConnectionUrl(jdbcConnectionUrl);
sharedStateManager.setJdbcDriverClass(jdbcDriverClass);
sharedStateManager.setSqlProvider(provider);
sharedStateManager.setUser(user);
sharedStateManager.setPassword(password);
try {
sharedStateManager.start();
return sharedStateManager;

View File

@ -0,0 +1,121 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.artemis.core.server.impl.jdbc;
import java.sql.DriverManager;
import java.util.Arrays;
import java.util.Collection;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
import org.apache.activemq.artemis.core.config.storage.DatabaseStorageConfiguration;
import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
@RunWith(Parameterized.class)
public class JdbcNodeManagerTest extends ActiveMQTestBase {
@Parameterized.Parameter
public boolean useAuthentication;
private DatabaseStorageConfiguration dbConf;
private ScheduledExecutorService leaseLockExecutor;
@Parameterized.Parameters(name = "authentication = {0}")
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][]{{false}, {true}});
}
@Before
public void configure() {
if (useAuthentication) {
System.setProperty("derby.connection.requireAuthentication", "true");
System.setProperty("derby.user." + getJdbcUser(), getJdbcPassword());
}
dbConf = createDefaultDatabaseStorageConfiguration();
dbConf.setJdbcUser(getJdbcUser());
dbConf.setJdbcPassword(getJdbcPassword());
leaseLockExecutor = Executors.newSingleThreadScheduledExecutor();
}
@After
public void shutdownExecutors() throws InterruptedException {
try {
final CountDownLatch latch = new CountDownLatch(1);
leaseLockExecutor.execute(latch::countDown);
Assert.assertTrue("the scheduler of the lease lock has some pending task in ", latch.await(10, TimeUnit.SECONDS));
} finally {
leaseLockExecutor.shutdownNow();
}
}
@After
@Override
public void shutdownDerby() {
try {
if (useAuthentication) {
DriverManager.getConnection("jdbc:derby:;shutdown=true", getJdbcUser(), getJdbcPassword());
} else {
DriverManager.getConnection("jdbc:derby:;shutdown=true");
}
} catch (Exception ignored) {
}
if (useAuthentication) {
System.clearProperty("derby.connection.requireAuthentication");
System.clearProperty("derby.user." + getJdbcUser());
}
}
protected String getJdbcUser() {
if (useAuthentication) {
return System.getProperty("jdbc.user", "testuser");
} else {
return null;
}
}
protected String getJdbcPassword() {
if (useAuthentication) {
return System.getProperty("jdbc.password", "testpassword");
} else {
return null;
}
}
@Test
public void shouldStartAndStopGracefullyTest() throws Exception {
final AtomicReference<String> criticalError = new AtomicReference<>();
final JdbcNodeManager nodeManager = JdbcNodeManager.with(dbConf, leaseLockExecutor, null, (code, message, file) -> criticalError.lazySet(message));
try {
nodeManager.start();
} finally {
nodeManager.stop();
final String error = criticalError.get();
if (error != null) {
Assert.fail(error);
}
}
}
}