diff --git a/artemis-server/pom.xml b/artemis-server/pom.xml
index 262558a756..bbfbce71dd 100644
--- a/artemis-server/pom.xml
+++ b/artemis-server/pom.xml
@@ -328,20 +328,4 @@
-
-
-
- org.apache.maven.plugins
- maven-jar-plugin
-
-
- test
-
- test-jar
-
-
-
-
-
-
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
index e0b1ded173..7f919af353 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationImplTest.java
@@ -75,7 +75,7 @@ import org.apache.activemq.artemis.core.settings.impl.DeletionPolicy;
import org.apache.activemq.artemis.core.settings.impl.ResourceLimitSettings;
import org.apache.activemq.artemis.logs.AssertionLoggerHandler;
import org.apache.activemq.artemis.core.settings.impl.SlowConsumerThresholdMeasurementUnit;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.apache.activemq.artemis.utils.RandomUtil;
import org.apache.activemq.artemis.utils.critical.CriticalAnalyzerPolicy;
import org.apache.commons.lang3.ClassUtils;
@@ -88,7 +88,7 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
-public class ConfigurationImplTest extends ActiveMQTestBase {
+public class ConfigurationImplTest extends ServerTestBase {
private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
diff --git a/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/config/impl/ConfigurationValidationTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationValidationTest.java
similarity index 98%
rename from tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/config/impl/ConfigurationValidationTest.java
rename to artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationValidationTest.java
index 675133a462..89b425953b 100644
--- a/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/config/impl/ConfigurationValidationTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/ConfigurationValidationTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.activemq.artemis.tests.unit.core.config.impl;
+package org.apache.activemq.artemis.core.config.impl;
import org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPBrokerConnectConfiguration;
@@ -22,14 +22,13 @@ import org.apache.activemq.artemis.core.config.FileDeploymentManager;
import org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPBrokerConnectionAddressType;
import org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPFederatedBrokerConnectionElement;
import org.apache.activemq.artemis.core.config.amqpBrokerConnectivity.AMQPMirrorBrokerConnectionElement;
-import org.apache.activemq.artemis.core.config.impl.FileConfiguration;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.apache.activemq.artemis.utils.XMLUtil;
import org.junit.Assert;
import org.junit.Test;
import org.w3c.dom.Element;
-public class ConfigurationValidationTest extends ActiveMQTestBase {
+public class ConfigurationValidationTest extends ServerTestBase {
static {
System.setProperty("a2Prop", "a2");
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/DatabaseStoreConfigurationTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/DatabaseStoreConfigurationTest.java
index c621528cde..54c5d6f2e1 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/DatabaseStoreConfigurationTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/DatabaseStoreConfigurationTest.java
@@ -23,12 +23,12 @@ import org.apache.activemq.artemis.core.config.storage.DatabaseStorageConfigurat
import org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl;
import org.apache.activemq.artemis.jdbc.store.sql.PropertySQLProvider;
import org.apache.activemq.artemis.jdbc.store.sql.SQLProvider;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.junit.Test;
import static org.apache.activemq.artemis.jdbc.store.sql.PropertySQLProvider.Factory.SQLDialect.ORACLE;
-public class DatabaseStoreConfigurationTest extends ActiveMQTestBase {
+public class DatabaseStoreConfigurationTest extends ServerTestBase {
@Test
public void databaseStoreConfigTest() throws Exception {
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationParserTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationParserTest.java
index 2a5a3ac2cf..56cb63700f 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationParserTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/FileConfigurationParserTest.java
@@ -37,7 +37,7 @@ import org.apache.activemq.artemis.core.config.ha.SharedStorePrimaryPolicyConfig
import org.apache.activemq.artemis.core.deployers.impl.FileConfigurationParser;
import org.apache.activemq.artemis.core.server.ActiveMQServer;
import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.apache.activemq.artemis.utils.ClassloadingUtil;
import org.apache.activemq.artemis.utils.DefaultSensitiveStringCodec;
import org.apache.activemq.artemis.utils.PasswordMaskingUtil;
@@ -45,7 +45,7 @@ import org.apache.activemq.artemis.utils.StringPrintStream;
import org.junit.Assert;
import org.junit.Test;
-public class FileConfigurationParserTest extends ActiveMQTestBase {
+public class FileConfigurationParserTest extends ServerTestBase {
/**
* These "InvalidConfigurationTest*.xml" files are modified copies of {@value
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/HAPolicyConfigurationTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/HAPolicyConfigurationTest.java
index b05b6f7a47..991d503814 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/HAPolicyConfigurationTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/HAPolicyConfigurationTest.java
@@ -50,11 +50,11 @@ import org.apache.activemq.artemis.quorum.DistributedLock;
import org.apache.activemq.artemis.quorum.DistributedPrimitiveManager;
import org.apache.activemq.artemis.quorum.MutableLong;
import org.apache.activemq.artemis.quorum.UnavailableStateException;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.junit.After;
import org.junit.Test;
-public class HAPolicyConfigurationTest extends ActiveMQTestBase {
+public class HAPolicyConfigurationTest extends ServerTestBase {
@Override
@After
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/WrongRoleFileConfigurationParserTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/WrongRoleFileConfigurationParserTest.java
index 04816abb34..413f48189d 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/WrongRoleFileConfigurationParserTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/WrongRoleFileConfigurationParserTest.java
@@ -21,14 +21,14 @@ import java.nio.charset.StandardCharsets;
import org.apache.activemq.artemis.core.deployers.impl.FileConfigurationParser;
import org.apache.activemq.artemis.logs.AssertionLoggerHandler;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.junit.Test;
/**
* When running this test from an IDE add this to the test command line so that the AssertionLoggerHandler works properly:
* -Dlog4j2.configurationFile=file:/tests/config/log4j2-tests-config.properties
*/
-public class WrongRoleFileConfigurationParserTest extends ActiveMQTestBase {
+public class WrongRoleFileConfigurationParserTest extends ServerTestBase {
@Test
public void testParsingDefaultServerConfig() throws Exception {
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/paging/cursor/impl/ConcurrentAckTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/paging/cursor/impl/ConcurrentAckTest.java
index 1054369b6e..1380d25f49 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/paging/cursor/impl/ConcurrentAckTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/paging/cursor/impl/ConcurrentAckTest.java
@@ -32,13 +32,13 @@ import org.apache.activemq.artemis.core.paging.PagingStoreFactory;
import org.apache.activemq.artemis.core.paging.impl.PagingStoreImpl;
import org.apache.activemq.artemis.core.persistence.impl.nullpm.NullStorageManager;
import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.apache.activemq.artemis.utils.actors.ArtemisExecutor;
import org.junit.Assert;
import org.junit.Test;
import org.mockito.Mockito;
-public class ConcurrentAckTest extends ActiveMQTestBase {
+public class ConcurrentAckTest extends ServerTestBase {
@Test
public void testConcurrentAddAckPaging() throws Throwable {
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/persistence/impl/journal/JournalStorageManagerTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/persistence/impl/journal/JournalStorageManagerTest.java
index dcbc3ff3f9..a84584823a 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/persistence/impl/journal/JournalStorageManagerTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/persistence/impl/journal/JournalStorageManagerTest.java
@@ -31,7 +31,7 @@ import org.apache.activemq.artemis.core.io.aio.AIOSequentialFileFactory;
import org.apache.activemq.artemis.core.postoffice.PostOffice;
import org.apache.activemq.artemis.core.server.JournalType;
import org.apache.activemq.artemis.core.server.impl.JournalLoader;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.apache.activemq.artemis.utils.ExecutorFactory;
import org.apache.activemq.artemis.utils.actors.OrderedExecutorFactory;
import org.junit.AfterClass;
@@ -49,7 +49,7 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
@RunWith(Parameterized.class)
-public class JournalStorageManagerTest extends ActiveMQTestBase {
+public class JournalStorageManagerTest extends ServerTestBase {
@Parameterized.Parameter
public JournalType journalType;
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/persistence/impl/journal/LargeServerMessageImplTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/persistence/impl/journal/LargeServerMessageImplTest.java
index d3023e2988..677e0ac316 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/persistence/impl/journal/LargeServerMessageImplTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/persistence/impl/journal/LargeServerMessageImplTest.java
@@ -21,11 +21,11 @@ import org.apache.activemq.artemis.api.core.ActiveMQBuffers;
import org.apache.activemq.artemis.core.io.SequentialFile;
import org.apache.activemq.artemis.core.io.nio.NIOSequentialFileFactory;
import org.apache.activemq.artemis.core.persistence.impl.nullpm.NullStorageManager;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.junit.Assert;
import org.junit.Test;
-public class LargeServerMessageImplTest extends ActiveMQTestBase {
+public class LargeServerMessageImplTest extends ServerTestBase {
@Test
public void testDeleteNoRecreateFile() throws Exception {
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/persistence/impl/journal/OperationContextUnitTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/persistence/impl/journal/OperationContextUnitTest.java
index 5b81a8153a..e2f9fcc873 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/persistence/impl/journal/OperationContextUnitTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/persistence/impl/journal/OperationContextUnitTest.java
@@ -25,14 +25,14 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.apache.activemq.artemis.api.core.ActiveMQExceptionType;
import org.apache.activemq.artemis.core.io.IOCallback;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.apache.activemq.artemis.utils.ActiveMQThreadFactory;
import org.apache.activemq.artemis.utils.Wait;
import org.apache.activemq.artemis.utils.actors.OrderedExecutor;
import org.junit.Assert;
import org.junit.Test;
-public class OperationContextUnitTest extends ActiveMQTestBase {
+public class OperationContextUnitTest extends ServerTestBase {
@Test
public void testCompleteTaskAfterPaging() throws Exception {
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/reload/ReloadManagerTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/reload/ReloadManagerTest.java
index 01ae7fba4e..6201aa8187 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/reload/ReloadManagerTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/reload/ReloadManagerTest.java
@@ -27,14 +27,14 @@ import java.util.concurrent.TimeUnit;
import org.apache.activemq.artemis.core.server.reload.ReloadCallback;
import org.apache.activemq.artemis.core.server.reload.ReloadManagerImpl;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.apache.activemq.artemis.utils.ReusableLatch;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
-public class ReloadManagerTest extends ActiveMQTestBase {
+public class ReloadManagerTest extends ServerTestBase {
private ScheduledExecutorService scheduledExecutorService;
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/security/jaas/StatusTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/security/jaas/StatusTest.java
index b84ed3ffa9..aec0ed09f3 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/security/jaas/StatusTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/security/jaas/StatusTest.java
@@ -24,7 +24,7 @@ import org.apache.activemq.artemis.core.server.ActiveMQServer;
import org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl;
import org.apache.activemq.artemis.core.server.impl.ServerStatus;
import org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoginModule;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.apache.activemq.artemis.utils.Wait;
import org.junit.After;
import org.junit.Before;
@@ -33,7 +33,7 @@ import org.junit.Test;
import static org.apache.activemq.artemis.core.server.impl.ServerStatus.JAAS_COMPONENT;
import static org.apache.activemq.artemis.spi.core.security.jaas.PropertiesLoader.LOGIN_CONFIG_SYS_PROP_NAME;
-public class StatusTest extends ActiveMQTestBase {
+public class StatusTest extends ServerTestBase {
private String existingPath = null;
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/cluster/impl/BroadcastGroupImplTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/cluster/impl/BroadcastGroupImplTest.java
index a373f4abc6..401367bfc7 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/cluster/impl/BroadcastGroupImplTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/cluster/impl/BroadcastGroupImplTest.java
@@ -22,13 +22,13 @@ import org.apache.activemq.artemis.api.core.BroadcastEndpoint;
import org.apache.activemq.artemis.api.core.BroadcastEndpointFactory;
import org.apache.activemq.artemis.api.core.TransportConfiguration;
import org.apache.activemq.artemis.core.server.impl.InVMNodeManager;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.junit.Test;
/**
* Test the {@link BroadcastGroupImpl}.
*/
-public class BroadcastGroupImplTest extends ActiveMQTestBase {
+public class BroadcastGroupImplTest extends ServerTestBase {
static class BroadcastEndpointFactoryImpl implements BroadcastEndpointFactory {
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionImplMockTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionImplMockTest.java
index 2b93ef2f77..c64c2816dd 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionImplMockTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/cluster/impl/ClusterConnectionImplMockTest.java
@@ -22,7 +22,7 @@ import org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants;
import org.apache.activemq.artemis.core.server.cluster.ClusterManager;
import org.apache.activemq.artemis.core.server.impl.Activation;
import org.apache.activemq.artemis.core.server.impl.ActiveMQServerImpl;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.apache.activemq.artemis.utils.ActiveMQThreadFactory;
import org.apache.activemq.artemis.utils.ExecutorFactory;
import org.apache.activemq.artemis.utils.actors.ArtemisExecutor;
@@ -31,7 +31,7 @@ import org.junit.Test;
import java.util.concurrent.Executors;
-public class ClusterConnectionImplMockTest extends ActiveMQTestBase {
+public class ClusterConnectionImplMockTest extends ServerTestBase {
/**
* Verification for the fix https://issues.apache.org/jira/browse/ARTEMIS-1946
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/files/FileStoreMonitorTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/files/FileStoreMonitorTest.java
index aceb624fae..372084dc80 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/files/FileStoreMonitorTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/files/FileStoreMonitorTest.java
@@ -27,7 +27,7 @@ import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.apache.activemq.artemis.utils.ReusableLatch;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -39,7 +39,7 @@ import org.junit.Test;
import static org.apache.activemq.artemis.core.server.files.FileStoreMonitor.FileStoreMonitorType.MaxDiskUsage;
-public class FileStoreMonitorTest extends ActiveMQTestBase {
+public class FileStoreMonitorTest extends ServerTestBase {
private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/group/impl/ClusteredResetMockTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/group/impl/ClusteredResetMockTest.java
index 85f596b374..24539d3926 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/group/impl/ClusteredResetMockTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/group/impl/ClusteredResetMockTest.java
@@ -58,7 +58,7 @@ import org.apache.activemq.artemis.core.settings.HierarchicalRepository;
import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
import org.apache.activemq.artemis.core.transaction.ResourceManager;
import org.apache.activemq.artemis.spi.core.remoting.Acceptor;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.apache.activemq.artemis.utils.ReusableLatch;
import org.apache.activemq.artemis.utils.collections.ConcurrentHashSet;
import org.junit.Assert;
@@ -69,7 +69,7 @@ import org.junit.Test;
* There is a small window where you could receive notifications wrongly
* this test will make sure the component would play well with that notification
*/
-public class ClusteredResetMockTest extends ActiveMQTestBase {
+public class ClusteredResetMockTest extends ServerTestBase {
public static final SimpleString ANYCLUSTER = SimpleString.toSimpleString("anycluster");
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImplTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImplTest.java
index 899b4e45bc..5171879b11 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImplTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerImplTest.java
@@ -22,11 +22,11 @@ import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import org.apache.activemq.artemis.core.server.ActiveMQServer;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.junit.Assert;
import org.junit.Test;
-public class ActiveMQServerImplTest extends ActiveMQTestBase {
+public class ActiveMQServerImplTest extends ServerTestBase {
@Test
public void testAddingAndStartingExternalComponent() throws Exception {
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerStartupTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerStartupTest.java
index 926fd244b8..8ed9203cd4 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerStartupTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/ActiveMQServerStartupTest.java
@@ -19,14 +19,14 @@ package org.apache.activemq.artemis.core.server.impl;
import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl;
import org.apache.activemq.artemis.core.server.ActiveMQServer;
import org.apache.activemq.artemis.logs.AssertionLoggerHandler;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.apache.activemq.artemis.utils.critical.CriticalAnalyzerAccessor;
import org.apache.activemq.artemis.utils.critical.CriticalAnalyzerPolicy;
import org.apache.activemq.artemis.utils.critical.CriticalComponentImpl;
import org.junit.Assert;
import org.junit.Test;
-public class ActiveMQServerStartupTest extends ActiveMQTestBase {
+public class ActiveMQServerStartupTest extends ServerTestBase {
@Test
public void testTooLongToStartHalt() throws Exception {
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/jdbc/JdbcLeaseLockTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/jdbc/JdbcLeaseLockTest.java
index 51c1edd1e0..cb0a9e044a 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/jdbc/JdbcLeaseLockTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/jdbc/JdbcLeaseLockTest.java
@@ -36,7 +36,7 @@ import org.apache.activemq.artemis.core.server.NodeManager.LockListener;
import org.apache.activemq.artemis.jdbc.store.drivers.JDBCUtils;
import org.apache.activemq.artemis.jdbc.store.sql.SQLProvider;
import org.apache.activemq.artemis.logs.AssertionLoggerHandler;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.apache.activemq.artemis.utils.Wait;
import org.apache.activemq.artemis.utils.actors.ArtemisExecutor;
import org.apache.activemq.artemis.utils.actors.OrderedExecutorFactory;
@@ -50,7 +50,7 @@ import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameter;
@RunWith(Parameterized.class)
-public class JdbcLeaseLockTest extends ActiveMQTestBase {
+public class JdbcLeaseLockTest extends ServerTestBase {
private JdbcSharedStateManager jdbcSharedStateManager;
private DatabaseStorageConfiguration dbConf;
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/jdbc/JdbcNodeManagerTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/jdbc/JdbcNodeManagerTest.java
index 4afb68ac92..536a7e4395 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/jdbc/JdbcNodeManagerTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/jdbc/JdbcNodeManagerTest.java
@@ -23,7 +23,7 @@ import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import org.apache.activemq.artemis.core.config.storage.DatabaseStorageConfiguration;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -32,7 +32,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@RunWith(Parameterized.class)
-public class JdbcNodeManagerTest extends ActiveMQTestBase {
+public class JdbcNodeManagerTest extends ServerTestBase {
private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/jdbc/JdbcSharedStateManagerTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/jdbc/JdbcSharedStateManagerTest.java
index 70646d52c5..4a0c4a154b 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/jdbc/JdbcSharedStateManagerTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/jdbc/JdbcSharedStateManagerTest.java
@@ -21,11 +21,11 @@ import java.util.UUID;
import org.apache.activemq.artemis.core.config.storage.DatabaseStorageConfiguration;
import org.apache.activemq.artemis.jdbc.store.drivers.JDBCUtils;
import org.apache.activemq.artemis.jdbc.store.sql.SQLProvider;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.junit.Before;
import org.junit.Test;
-public class JdbcSharedStateManagerTest extends ActiveMQTestBase {
+public class JdbcSharedStateManagerTest extends ServerTestBase {
private DatabaseStorageConfiguration dbConf;
private SQLProvider sqlProvider;
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/management/JMXRMIRegistryPortTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/management/JMXRMIRegistryPortTest.java
index ac2741728e..8d1e821197 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/management/JMXRMIRegistryPortTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/management/JMXRMIRegistryPortTest.java
@@ -17,7 +17,7 @@
package org.apache.activemq.artemis.core.server.management;
import org.apache.activemq.artemis.core.config.JMXConnectorConfiguration;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.junit.Assert;
import org.junit.Test;
@@ -25,7 +25,7 @@ import java.io.IOException;
import java.net.InetAddress;
import java.net.ServerSocket;
-public class JMXRMIRegistryPortTest extends ActiveMQTestBase {
+public class JMXRMIRegistryPortTest extends ServerTestBase {
@Test
public void explicitLocalhostRegistry() throws IOException {
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/settings/AddressSettingsTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/settings/AddressSettingsTest.java
index 30b4fe388c..94789060ca 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/settings/AddressSettingsTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/settings/AddressSettingsTest.java
@@ -23,13 +23,13 @@ import org.apache.activemq.artemis.api.core.SimpleString;
import org.apache.activemq.artemis.core.settings.impl.AddressFullMessagePolicy;
import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
import org.apache.activemq.artemis.core.settings.impl.DeletionPolicy;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class AddressSettingsTest extends ActiveMQTestBase {
+public class AddressSettingsTest extends ServerTestBase {
private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/settings/RepositoryTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/settings/RepositoryTest.java
index a161a5f81d..1e41ab9fe1 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/settings/RepositoryTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/settings/RepositoryTest.java
@@ -27,12 +27,12 @@ import org.apache.activemq.artemis.core.config.WildcardConfiguration;
import org.apache.activemq.artemis.core.security.Role;
import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
import org.apache.activemq.artemis.core.settings.impl.HierarchicalObjectRepository;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
-public class RepositoryTest extends ActiveMQTestBase {
+public class RepositoryTest extends ServerTestBase {
HierarchicalRepository> securityRepository;
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/transaction/impl/TransactionImplTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/transaction/impl/TransactionImplTest.java
index e201e65006..9864bcc373 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/transaction/impl/TransactionImplTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/transaction/impl/TransactionImplTest.java
@@ -68,15 +68,16 @@ import org.apache.activemq.artemis.core.server.impl.JournalLoader;
import org.apache.activemq.artemis.core.transaction.ResourceManager;
import org.apache.activemq.artemis.core.transaction.Transaction;
import org.apache.activemq.artemis.core.transaction.TransactionOperation;
-import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ServerTestBase;
import org.apache.activemq.artemis.utils.ArtemisCloseable;
+import org.apache.activemq.artemis.utils.UUIDGenerator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.invoke.MethodHandles;
import org.junit.Assert;
import org.junit.Test;
-public class TransactionImplTest extends ActiveMQTestBase {
+public class TransactionImplTest extends ServerTestBase {
private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
@Test
@@ -937,4 +938,8 @@ public class TransactionImplTest extends ActiveMQTestBase {
}
}
+
+ protected XidImpl newXID() {
+ return new XidImpl("xa1".getBytes(), 1, UUIDGenerator.getInstance().generateStringUUID().getBytes());
+ }
}
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/RemoveFolder.java b/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/RemoveFolder.java
index e1d0122ce0..764f563fca 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/RemoveFolder.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/RemoveFolder.java
@@ -19,6 +19,7 @@ package org.apache.activemq.artemis.tests.util;
import java.io.File;
+import org.apache.activemq.artemis.utils.FileUtil;
import org.junit.rules.ExternalResource;
/**
@@ -37,6 +38,6 @@ public class RemoveFolder extends ExternalResource {
*/
@Override
protected void after() {
- ActiveMQTestBase.deleteDirectory(new File(folderName));
+ FileUtil.deleteDirectory(new File(folderName));
}
}
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ServerTestBase.java b/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ServerTestBase.java
new file mode 100644
index 0000000000..67b36bb97d
--- /dev/null
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ServerTestBase.java
@@ -0,0 +1,706 @@
+/*
+ * 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.tests.util;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.activemq.artemis.api.config.ActiveMQDefaultConfiguration;
+import org.apache.activemq.artemis.api.core.TransportConfiguration;
+import org.apache.activemq.artemis.core.client.impl.ClientSessionFactoryImpl;
+import org.apache.activemq.artemis.core.client.impl.ServerLocatorImpl;
+import org.apache.activemq.artemis.core.config.Configuration;
+import org.apache.activemq.artemis.core.config.impl.ConfigurationImpl;
+import org.apache.activemq.artemis.core.config.storage.DatabaseStorageConfiguration;
+import org.apache.activemq.artemis.core.io.aio.AIOSequentialFileFactory;
+import org.apache.activemq.artemis.core.persistence.impl.journal.OperationContextImpl;
+import org.apache.activemq.artemis.core.remoting.impl.invm.InVMAcceptorFactory;
+import org.apache.activemq.artemis.core.remoting.impl.invm.InVMConnector;
+import org.apache.activemq.artemis.core.remoting.impl.invm.InVMRegistry;
+import org.apache.activemq.artemis.core.remoting.impl.netty.NettyAcceptorFactory;
+import org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnector;
+import org.apache.activemq.artemis.core.server.ActiveMQComponent;
+import org.apache.activemq.artemis.core.server.ActiveMQServer;
+import org.apache.activemq.artemis.core.server.ActiveMQServers;
+import org.apache.activemq.artemis.core.server.JournalType;
+import org.apache.activemq.artemis.core.server.cluster.ClusterConnection;
+import org.apache.activemq.artemis.core.server.cluster.ClusterManager;
+import org.apache.activemq.artemis.core.server.impl.PrimaryOnlyActivation;
+import org.apache.activemq.artemis.core.settings.impl.AddressFullMessagePolicy;
+import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
+import org.apache.activemq.artemis.core.settings.impl.PageFullMessagePolicy;
+import org.apache.activemq.artemis.tests.rules.LibaioContextCheck;
+import org.apache.activemq.artemis.utils.Env;
+import org.apache.activemq.artemis.utils.FileUtil;
+import org.apache.activemq.artemis.utils.PortCheckRule;
+import org.apache.activemq.artemis.utils.ThreadDumpUtil;
+import org.apache.activemq.artemis.utils.Wait;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import java.lang.invoke.MethodHandles;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.rules.TemporaryFolder;
+
+/**
+ * Base class with basic utilities on starting up a basic server
+ */
+public abstract class ServerTestBase extends ArtemisTestCase {
+
+ private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+ static {
+ Env.setTestEnv(true);
+ }
+
+ @ClassRule
+ public static PortCheckRule portCheckRule = new PortCheckRule(61616);
+
+ public static final String TARGET_TMP = "./target/tmp";
+ public static final String INVM_ACCEPTOR_FACTORY = InVMAcceptorFactory.class.getCanonicalName();
+ public static final String NETTY_ACCEPTOR_FACTORY = NettyAcceptorFactory.class.getCanonicalName();
+ public static final String CLUSTER_PASSWORD = "UnitTestsClusterPassword";
+
+ @ClassRule
+ public static LibaioContextCheck libaioContextRule = new LibaioContextCheck();
+
+ // There is a verification about thread leakages. We only fail a single thread when this happens
+ private static Set alreadyFailedThread = new HashSet<>();
+
+ protected void clearServers() {
+ servers.clear();
+ }
+
+ private final Collection servers = new ArrayList<>();
+
+ private String testDir;
+
+ @Rule
+ public TemporaryFolder temporaryFolder;
+
+ @Rule
+ // This Custom rule will remove any files under ./target/tmp
+ // including anything created previously by TemporaryFolder
+ public RemoveFolder folder = new RemoveFolder(TARGET_TMP);
+
+ public ServerTestBase() {
+ File parent = new File(TARGET_TMP);
+ parent.mkdirs();
+ File subParent = new File(parent, this.getClass().getSimpleName());
+ subParent.mkdirs();
+ temporaryFolder = new TemporaryFolder(subParent);
+ }
+
+ protected T serialClone(Object object) throws Exception {
+ logger.debug("object::{}", object);
+ ByteArrayOutputStream bout = new ByteArrayOutputStream();
+ ObjectOutputStream obOut = new ObjectOutputStream(bout);
+ obOut.writeObject(object);
+
+ ByteArrayInputStream binput = new ByteArrayInputStream(bout.toByteArray());
+ ObjectInputStream obinp = new ObjectInputStream(binput);
+ return (T) obinp.readObject();
+
+ }
+
+ @After
+ public void tearDown() throws Exception {
+ synchronized (servers) {
+ for (ActiveMQServer server : servers) {
+ if (server == null) {
+ continue;
+ }
+
+ // disable scaledown on tearDown, otherwise it takes a lot of time
+ try {
+ ((PrimaryOnlyActivation) server.getActivation()).getPrimaryOnlyPolicy().getScaleDownPolicy().setEnabled(false);
+ } catch (Throwable ignored) {
+ // don't care about anything here
+ // if can't find activation, primaryPolicy or no PrimaryOnlyActivation... don't care!!!
+ // all I care is f you have scaleDownPolicy, it should be set to false at this point
+ }
+
+ try {
+ final ClusterManager clusterManager = server.getClusterManager();
+ if (clusterManager != null) {
+ for (ClusterConnection cc : clusterManager.getClusterConnections()) {
+ stopComponent(cc);
+ }
+ }
+ } catch (Exception e) {
+ // no-op
+ }
+ stopComponentOutputExceptions(server);
+ }
+ clearServers();
+ }
+
+ List exceptions;
+ try {
+ exceptions = checkCsfStopped();
+ } finally {
+ cleanupPools();
+ }
+
+ InVMConnector.resetThreadPool();
+
+ //clean up pools before failing
+ if (!exceptions.isEmpty()) {
+ for (Exception exception : exceptions) {
+ exception.printStackTrace(System.out);
+ }
+ System.out.println(threadDump("Thread dump with reconnects happening"));
+ }
+ Map threadMap = Thread.getAllStackTraces();
+ for (Map.Entry entry : threadMap.entrySet()) {
+ Thread thread = entry.getKey();
+ StackTraceElement[] stack = entry.getValue();
+ for (StackTraceElement stackTraceElement : stack) {
+ if (stackTraceElement.getMethodName().contains("getConnectionWithRetry") && !alreadyFailedThread.contains(thread)) {
+ alreadyFailedThread.add(thread);
+ System.out.println(threadDump(this.getName() + " has left threads running. Look at thread " +
+ thread.getName() +
+ " id = " +
+ thread.getId() +
+ " has running locators on test " +
+ this.getName() +
+ " on this following dump"));
+ fail("test '" + getName() + "' left serverlocator running, this could effect other tests");
+ } else if (stackTraceElement.getMethodName().contains("BroadcastGroupImpl.run") && !alreadyFailedThread.contains(thread)) {
+ alreadyFailedThread.add(thread);
+ System.out.println(threadDump(this.getName() + " has left threads running. Look at thread " +
+ thread.getName() +
+ " id = " +
+ thread.getId() +
+ " is still broadcasting " +
+ this.getName() +
+ " on this following dump"));
+ fail("test left broadcastgroupimpl running, this could effect other tests");
+ }
+ }
+ }
+
+ if (Thread.currentThread().getContextClassLoader() == null) {
+ Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
+ fail("Thread Context ClassLoader was set to null at some point before this test. We will set to this.getClass().getClassLoader(), but you are supposed to fix your tests");
+ }
+
+ checkFilesUsage();
+
+ if (InVMRegistry.instance.size() > 0) {
+ fail("InVMREgistry size > 0");
+ }
+ }
+
+ @Before
+ public void setupTestDir() {
+ testDir = temporaryFolder.getRoot().getAbsolutePath();
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ clearDataRecreateServerDirs();
+ OperationContextImpl.clearContext();
+
+ InVMRegistry.instance.clear();
+ }
+
+ protected String getName() {
+ return name.getMethodName();
+ }
+
+ protected Configuration createDefaultInVMConfig() throws Exception {
+ return createDefaultConfig(0, false);
+ }
+
+ protected Configuration createDefaultConfig(final int serverID, final boolean netty) throws Exception {
+ ConfigurationImpl configuration = createBasicConfig(serverID).setJMXManagementEnabled(false).addAcceptorConfiguration(new TransportConfiguration(INVM_ACCEPTOR_FACTORY, generateInVMParams(serverID), "invm"));
+
+ if (netty) {
+ configuration.addAcceptorConfiguration(new TransportConfiguration(NETTY_ACCEPTOR_FACTORY, new HashMap(), "netty", new HashMap()));
+ } else {
+ // if we're in-vm it's a waste to resolve protocols since they'll never be used
+ configuration.setResolveProtocols(false);
+ }
+
+ return configuration;
+ }
+
+ /**
+ * @param serverID
+ * @return
+ * @throws Exception
+ */
+ protected ConfigurationImpl createBasicConfig(final int serverID) {
+ ConfigurationImpl configuration = new ConfigurationImpl().setSecurityEnabled(false).setJournalMinFiles(2).setJournalFileSize(100 * 1024).setJournalType(getDefaultJournalType()).setJournalDirectory(getJournalDir(serverID, false)).setBindingsDirectory(getBindingsDir(serverID, false)).setPagingDirectory(getPageDir(serverID, false)).setLargeMessagesDirectory(getLargeMessagesDir(serverID, false)).setJournalCompactMinFiles(0).setJournalCompactPercentage(0).setClusterPassword(CLUSTER_PASSWORD).setJournalDatasync(false);
+
+ // When it comes to the testsuite, we don't need any batching, I will leave some minimal batching to exercise the codebase
+ configuration.setJournalBufferTimeout_AIO(100).setJournalBufferTimeout_NIO(100);
+
+ return configuration;
+ }
+
+ private boolean derbyDropped = false;
+
+ protected void dropDerby() throws Exception {
+ DBSupportUtil.dropDerbyDatabase(getJDBCUser(), getJDBCPassword(), getEmbeddedDataBaseName());
+ }
+
+ protected void shutdownDerby() throws SQLException {
+ DBSupportUtil.shutdownDerby(getJDBCUser(), getJDBCPassword());
+ }
+
+ protected DatabaseStorageConfiguration createDefaultDatabaseStorageConfiguration() {
+ DatabaseStorageConfiguration dbStorageConfiguration = new DatabaseStorageConfiguration();
+ String connectionURI = getTestJDBCConnectionUrl();
+
+ /** The connectionURI could be passed into the testsuite as a system property (say you are testing against Oracle).
+ * So, we only schedule the drop on Derby if we are using a derby memory database */
+ if (connectionURI.contains("derby") && connectionURI.contains("memory") && !derbyDropped) {
+ // some tests will reinitialize the server and call this method more than one time
+ // and we should only schedule one task
+ derbyDropped = true;
+ runAfterEx(this::dropDerby);
+ runAfterEx(this::shutdownDerby);
+ }
+ dbStorageConfiguration.setJdbcConnectionUrl(connectionURI);
+ dbStorageConfiguration.setBindingsTableName("BINDINGS");
+ dbStorageConfiguration.setMessageTableName("MESSAGE");
+ dbStorageConfiguration.setLargeMessageTableName("LARGE_MESSAGE");
+ dbStorageConfiguration.setPageStoreTableName("PAGE_STORE");
+ dbStorageConfiguration.setJdbcPassword(getJDBCPassword());
+ dbStorageConfiguration.setJdbcUser(getJDBCUser());
+ dbStorageConfiguration.setJdbcDriverClassName(getJDBCClassName());
+ dbStorageConfiguration.setJdbcLockAcquisitionTimeoutMillis(getJdbcLockAcquisitionTimeoutMillis());
+ dbStorageConfiguration.setJdbcLockExpirationMillis(getJdbcLockExpirationMillis());
+ dbStorageConfiguration.setJdbcLockRenewPeriodMillis(getJdbcLockRenewPeriodMillis());
+ dbStorageConfiguration.setJdbcNetworkTimeout(-1);
+ dbStorageConfiguration.setJdbcAllowedTimeDiff(250L);
+ return dbStorageConfiguration;
+ }
+
+ protected long getJdbcLockAcquisitionTimeoutMillis() {
+ return Long.getLong("jdbc.lock.acquisition", ActiveMQDefaultConfiguration.getDefaultJdbcLockAcquisitionTimeoutMillis());
+ }
+
+ protected long getJdbcLockExpirationMillis() {
+ return Long.getLong("jdbc.lock.expiration", 4_000);
+ }
+
+ protected long getJdbcLockRenewPeriodMillis() {
+ return Long.getLong("jdbc.lock.renew", 200);
+ }
+
+ protected Map generateInVMParams(final int node) {
+ Map params = new HashMap<>();
+
+ params.put(org.apache.activemq.artemis.core.remoting.impl.invm.TransportConstants.SERVER_ID_PROP_NAME, node);
+
+ return params;
+ }
+
+ public static JournalType getDefaultJournalType() {
+ if (AIOSequentialFileFactory.isSupported()) {
+ return JournalType.ASYNCIO;
+ } else {
+ return JournalType.NIO;
+ }
+ }
+
+ public static String threadDump(final String msg) {
+ return ThreadDumpUtil.threadDump(msg);
+ }
+
+ /**
+ * @return the testDir
+ */
+ protected final String getTestDir() {
+ return testDir;
+ }
+
+ protected String getEmbeddedDataBaseName() {
+ return "memory:" + getTestDir();
+ }
+
+ protected String getTestJDBCConnectionUrl() {
+ return System.getProperty("jdbc.connection.url", "jdbc:derby:" + getEmbeddedDataBaseName() + ";create=true");
+ }
+
+ protected String getJDBCClassName() {
+ return System.getProperty("jdbc.driver.class", "org.apache.derby.jdbc.EmbeddedDriver");
+ }
+
+ protected String getJDBCUser() {
+ return System.getProperty("jdbc.user", null);
+ }
+
+ protected String getJDBCPassword() {
+ return System.getProperty("jdbc.password", null);
+ }
+
+ protected final File getTestDirfile() {
+ return new File(testDir);
+ }
+
+ protected final void clearDataRecreateServerDirs() {
+ clearDataRecreateServerDirs(0, false);
+ }
+
+ protected final void clearDataRecreateServerDirs(int index, boolean backup) {
+ clearDataRecreateServerDirs(getTestDir(), index, backup);
+ }
+
+ protected void clearDataRecreateServerDirs(final String testDir1, int index, boolean backup) {
+ // Need to delete the root
+
+ File file = new File(testDir1);
+ deleteDirectory(file);
+ file.mkdirs();
+
+ recreateDataDirectories(testDir1, index, backup);
+ }
+
+ protected void recreateDataDirectories(String testDir1, int index, boolean backup) {
+ recreateDirectory(getJournalDir(testDir1, index, backup));
+ recreateDirectory(getBindingsDir(testDir1, index, backup));
+ recreateDirectory(getPageDir(testDir1, index, backup));
+ recreateDirectory(getLargeMessagesDir(testDir1, index, backup));
+ recreateDirectory(getClientLargeMessagesDir(testDir1));
+ recreateDirectory(getTemporaryDir(testDir1));
+ }
+
+ /**
+ * @return the journalDir
+ */
+ public String getJournalDir() {
+ return getJournalDir(0, false);
+ }
+
+ protected static String getJournalDir(final String testDir1) {
+ return testDir1 + "/journal";
+ }
+
+ public String getJournalDir(final int index, final boolean backup) {
+ return getJournalDir(getTestDir(), index, backup);
+ }
+
+ public static String getJournalDir(final String testDir, final int index, final boolean backup) {
+ return getJournalDir(testDir) + directoryNameSuffix(index, backup);
+ }
+
+ /**
+ * @return the bindingsDir
+ */
+ protected String getBindingsDir() {
+ return getBindingsDir(0, false);
+ }
+
+ /**
+ * @return the bindingsDir
+ */
+ protected static String getBindingsDir(final String testDir1) {
+ return testDir1 + "/bindings";
+ }
+
+ /**
+ * @return the bindingsDir
+ */
+ protected String getBindingsDir(final int index, final boolean backup) {
+ return getBindingsDir(getTestDir(), index, backup);
+ }
+
+ public static String getBindingsDir(final String testDir, final int index, final boolean backup) {
+ return getBindingsDir(testDir) + directoryNameSuffix(index, backup);
+ }
+
+ /**
+ * @return the pageDir
+ */
+ protected String getPageDir() {
+ return getPageDir(0, false);
+ }
+
+ protected File getPageDirFile() {
+ return new File(getPageDir());
+
+ }
+
+ /**
+ * @return the pageDir
+ */
+ protected static String getPageDir(final String testDir1) {
+ return testDir1 + "/page";
+ }
+
+ protected String getPageDir(final int index, final boolean backup) {
+ return getPageDir(getTestDir(), index, backup);
+ }
+
+ public static String getPageDir(final String testDir, final int index, final boolean backup) {
+ return getPageDir(testDir) + directoryNameSuffix(index, backup);
+ }
+
+ /**
+ * @return the largeMessagesDir
+ */
+ protected String getLargeMessagesDir() {
+ return getLargeMessagesDir(0, false);
+ }
+
+ /**
+ * @return the largeMessagesDir
+ */
+ protected static String getLargeMessagesDir(final String testDir1) {
+ return testDir1 + "/large-msg";
+ }
+
+ protected String getLargeMessagesDir(final int index, final boolean backup) {
+ return getLargeMessagesDir(getTestDir(), index, backup);
+ }
+
+ public static String getLargeMessagesDir(final String testDir, final int index, final boolean backup) {
+ return getLargeMessagesDir(testDir) + directoryNameSuffix(index, backup);
+ }
+
+ private static String directoryNameSuffix(int index, boolean backup) {
+ if (index == -1)
+ return "";
+ return index + "-" + (backup ? "B" : "L");
+ }
+
+ /**
+ * @return the clientLargeMessagesDir
+ */
+ protected String getClientLargeMessagesDir(final String testDir1) {
+ return testDir1 + "/client-large-msg";
+ }
+
+ /**
+ * @return the temporaryDir
+ */
+ protected final String getTemporaryDir() {
+ return getTemporaryDir(getTestDir());
+ }
+
+ /**
+ * @return the temporaryDir
+ */
+ protected String getTemporaryDir(final String testDir1) {
+ return testDir1 + "/temp";
+ }
+
+ protected final ActiveMQServer createServer(final boolean realFiles,
+ final Configuration configuration,
+ final int pageSize,
+ final long maxAddressSize,
+ final int maxReadMessages,
+ final int maxReadBytes) {
+ return createServer(realFiles, configuration, pageSize, maxAddressSize, maxReadMessages, maxReadBytes, (Map) null);
+ }
+
+ protected final ActiveMQServer createServer(final boolean realFiles,
+ final Configuration configuration,
+ final int pageSize,
+ final long maxAddressSize,
+ final Map settings) {
+
+ return createServer(realFiles, configuration, pageSize, maxAddressSize, null, null, settings);
+ }
+
+ protected final ActiveMQServer createServer(final boolean realFiles,
+ final Configuration configuration,
+ final int pageSize,
+ final long maxAddressSize,
+ final Integer maxReadPageMessages,
+ final Integer maxReadPageBytes,
+ final Map settings) {
+ return createServer(realFiles, configuration, pageSize, maxAddressSize, maxReadPageMessages, maxReadPageBytes, null, null, null, settings);
+
+ }
+
+ protected final ActiveMQServer createServer(final boolean realFiles,
+ final Configuration configuration,
+ final int pageSize,
+ final long maxAddressSize,
+ final Integer maxReadPageMessages,
+ final Integer maxReadPageBytes,
+ final Long pageLimitBytes,
+ final Long pageLimitMessages,
+ final String pageLimitPolicy,
+ final Map settings) {
+ ActiveMQServer server = addServer(ActiveMQServers.newActiveMQServer(configuration, realFiles));
+
+ if (settings != null) {
+ for (Map.Entry setting : settings.entrySet()) {
+ if (maxReadPageBytes != null) {
+ setting.getValue().setMaxReadPageBytes(maxReadPageBytes.intValue());
+ }
+ if (maxReadPageMessages != null) {
+ setting.getValue().setMaxReadPageMessages(maxReadPageMessages.intValue());
+ }
+ if (pageLimitBytes != null) {
+ setting.getValue().setPageLimitBytes(pageLimitBytes);
+ }
+ if (pageLimitMessages != null) {
+ setting.getValue().setPageLimitMessages(pageLimitMessages);
+ }
+ if (pageLimitPolicy != null) {
+ setting.getValue().setPageFullMessagePolicy(PageFullMessagePolicy.valueOf(pageLimitPolicy));
+ }
+ server.getAddressSettingsRepository().addMatch(setting.getKey(), setting.getValue());
+ }
+ }
+
+ AddressSettings defaultSetting = new AddressSettings().setPageSizeBytes(pageSize).setMaxSizeBytes(maxAddressSize).setAddressFullMessagePolicy(AddressFullMessagePolicy.PAGE);
+ if (maxReadPageBytes != null) {
+ defaultSetting.setMaxReadPageBytes(maxReadPageBytes.intValue());
+ }
+ if (maxReadPageMessages != null) {
+ defaultSetting.setMaxReadPageMessages(maxReadPageMessages.intValue());
+ }
+ if (pageLimitBytes != null) {
+ defaultSetting.setPageLimitBytes(pageLimitBytes);
+ }
+ if (pageLimitMessages != null) {
+ defaultSetting.setPageLimitMessages(pageLimitMessages);
+ }
+ if (pageLimitPolicy != null) {
+ defaultSetting.setPageFullMessagePolicy(PageFullMessagePolicy.valueOf(pageLimitPolicy));
+ }
+
+ server.getAddressSettingsRepository().addMatch("#", defaultSetting);
+
+ applySettings(server, configuration, pageSize, maxAddressSize, maxReadPageMessages, maxReadPageBytes, settings);
+
+ return server;
+ }
+
+ protected void applySettings(ActiveMQServer server,
+ final Configuration configuration,
+ final int pageSize,
+ final long maxAddressSize,
+ final Integer maxReadPageMessages,
+ final Integer maxReadPageBytes,
+ final Map settings) {
+ }
+
+ protected final ActiveMQServer createServer(final boolean realFiles) throws Exception {
+ return createServer(realFiles, createDefaultConfig(0, false), AddressSettings.DEFAULT_PAGE_SIZE, AddressSettings.DEFAULT_MAX_SIZE_BYTES, -1, -1);
+ }
+
+ private List checkCsfStopped() throws Exception {
+ if (!Wait.waitFor(ClientSessionFactoryImpl.CLOSE_RUNNABLES::isEmpty, 5_000)) {
+ List closeRunnables = new ArrayList<>(ClientSessionFactoryImpl.CLOSE_RUNNABLES);
+ ArrayList exceptions = new ArrayList<>();
+
+ if (!closeRunnables.isEmpty()) {
+ for (ClientSessionFactoryImpl.CloseRunnable closeRunnable : closeRunnables) {
+ if (closeRunnable != null) {
+ exceptions.add(closeRunnable.stop().createTrace);
+ }
+ }
+ }
+ return exceptions;
+ }
+
+ return Collections.emptyList();
+ }
+
+
+ private void checkFilesUsage() throws Exception {
+ int invmSize = InVMRegistry.instance.size();
+ if (invmSize > 0) {
+ InVMRegistry.instance.clear();
+ logger.info(threadDump("Thread dump"));
+ fail("invm registry still had acceptors registered");
+ }
+ }
+
+ private void cleanupPools() {
+ OperationContextImpl.clearContext();
+
+ // We shutdown the global pools to give a better isolation between tests
+ try {
+ ServerLocatorImpl.clearThreadPools();
+ } catch (Throwable e) {
+ logger.info(threadDump(e.getMessage()));
+ System.err.println(threadDump(e.getMessage()));
+ }
+
+ try {
+ NettyConnector.clearThreadPools();
+ } catch (Exception e) {
+ logger.info(threadDump(e.getMessage()));
+ System.err.println(threadDump(e.getMessage()));
+ }
+ }
+
+ protected static final void recreateDirectory(final String directory) {
+ File file = new File(directory);
+ deleteDirectory(file);
+ file.mkdirs();
+ }
+
+ protected static final boolean deleteDirectory(final File directory) {
+ return FileUtil.deleteDirectory(directory);
+ }
+
+ protected static final void stopComponent(ActiveMQComponent component) {
+ if (component == null)
+ return;
+ try {
+ component.stop();
+ } catch (Exception e) {
+ // no-op
+ }
+ }
+
+ protected static final void stopComponentOutputExceptions(ActiveMQComponent component) {
+ if (component == null)
+ return;
+ try {
+ component.stop();
+ } catch (Exception e) {
+ System.err.println("Exception closing " + component);
+ e.printStackTrace();
+ }
+ }
+
+ protected final ActiveMQServer addServer(final ActiveMQServer server) {
+ if (server != null) {
+ synchronized (servers) {
+ servers.add(server);
+ }
+ }
+ return server;
+ }
+}
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/SimpleStringTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/SimpleStringTest.java
index ec081a67ff..3767d608e8 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/SimpleStringTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/SimpleStringTest.java
@@ -17,6 +17,7 @@
package org.apache.activemq.artemis.tests.util;
import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
@@ -383,7 +384,7 @@ public class SimpleStringTest extends Assert {
x[i].start();
}
- ActiveMQTestBase.waitForLatch(latch);
+ assertTrue("Latch has got to return within a minute", latch.await(1, TimeUnit.MINUTES));
start.countDown();
for (T t : x) {
diff --git a/artemis-unit-test-support/pom.xml b/artemis-unit-test-support/pom.xml
index a9e81b34f9..2f8083206c 100644
--- a/artemis-unit-test-support/pom.xml
+++ b/artemis-unit-test-support/pom.xml
@@ -36,6 +36,12 @@
junit
provided
+
+ org.apache.activemq
+ activemq-artemis-native
+ ${activemq-artemis-native-version}
+ provided
+
org.slf4j
slf4j-api
diff --git a/artemis-unit-test-support/src/main/java/org/apache/activemq/artemis/tests/rules/LibaioContextCheck.java b/artemis-unit-test-support/src/main/java/org/apache/activemq/artemis/tests/rules/LibaioContextCheck.java
new file mode 100644
index 0000000000..e1e2fd3cb0
--- /dev/null
+++ b/artemis-unit-test-support/src/main/java/org/apache/activemq/artemis/tests/rules/LibaioContextCheck.java
@@ -0,0 +1,107 @@
+/*
+ * 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.tests.rules;
+
+import static org.junit.Assert.fail;
+
+import java.lang.invoke.MethodHandles;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import org.apache.activemq.artemis.nativo.jlibaio.LibaioContext;
+import org.apache.activemq.artemis.utils.Wait;
+import org.junit.Assert;
+import org.junit.rules.TestWatcher;
+import org.junit.runner.Description;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This is useful to make sure you won't have LibaioContext between tests
+ */
+public class LibaioContextCheck extends TestWatcher {
+
+ private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+ private static final int INTERVAL = 100;
+ private static final int WAIT = 20_000;
+
+ private static String previouslyFailedTotalMaxIoMessage;
+
+ public LibaioContextCheck() {
+ }
+
+ @Override
+ protected void starting(Description description) {
+ checkLibaioBefore(description.getClassName());
+ }
+
+ @Override
+ protected void finished(Description description) {
+ checkLibaioAfter(description.getClassName());
+ }
+
+ public static void checkLibaioBefore(String testClassName) {
+ if (previouslyFailedTotalMaxIoMessage != null) {
+ // Fail immediately if this is already set.
+ fail(previouslyFailedTotalMaxIoMessage);
+ }
+
+ long totalMaxIO = LibaioContext.getTotalMaxIO();
+ if (totalMaxIO != 0) {
+ failDueToLibaioContextCheck("LibaioContext TotalMaxIO > 0 leak detected BEFORE class %s, TotalMaxIO=%s. Check prior test classes for issue (not possible to be sure of which here).", testClassName, totalMaxIO);
+ }
+ }
+
+ public static void checkLibaioAfter(String testClassName) {
+ if (previouslyFailedTotalMaxIoMessage != null) {
+ // Test class was already failed if this is set, nothing to do here.
+ return;
+ }
+
+ try {
+ if (!waitForLibaioContextTotalMaxIo(testClassName)) {
+ final long totalMaxIO = LibaioContext.getTotalMaxIO();
+ failDueToLibaioContextCheck("LibaioContext TotalMaxIO > 0 leak detected AFTER class %s, TotalMaxIO=%s.", testClassName, totalMaxIO);
+ }
+ } catch (Exception e) {
+ fail("Exception while checking Libaio after tests in class: " + testClassName);
+ }
+ }
+
+ private static boolean waitForLibaioContextTotalMaxIo(String testClassName) {
+ AtomicBoolean firstCheck = new AtomicBoolean();
+ return Wait.waitFor(() -> {
+ final boolean totalIsZero = LibaioContext.getTotalMaxIO() == 0;
+ if (!totalIsZero && firstCheck.compareAndSet(false, true)) {
+ logger.info("Waiting for LibaioContext TotalMaxIO to become 0 after class {}", testClassName);
+ }
+
+ return totalIsZero;
+ }, WAIT, INTERVAL);
+ }
+
+ private static void failDueToLibaioContextCheck(String currentFailureMessageFormat, String testClassName, long totalMaxIO) {
+ // Set message to immediately-fail subsequent tests with
+ previouslyFailedTotalMaxIoMessage = String.format("Aborting, LibaioContext TotalMaxIO > 0 issue previously detected by test class %s, see its output.", testClassName);
+
+ // Now fail this run
+ String message = String.format(currentFailureMessageFormat, testClassName, totalMaxIO);
+ logger.error(message);
+
+ Assert.fail(message);
+ }
+}
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/NoFilesBehind.java b/artemis-unit-test-support/src/main/java/org/apache/activemq/artemis/tests/rules/NoFilesBehind.java
similarity index 63%
rename from artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/NoFilesBehind.java
rename to artemis-unit-test-support/src/main/java/org/apache/activemq/artemis/tests/rules/NoFilesBehind.java
index 2ef8d6923d..f2f68562bc 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/NoFilesBehind.java
+++ b/artemis-unit-test-support/src/main/java/org/apache/activemq/artemis/tests/rules/NoFilesBehind.java
@@ -14,17 +14,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.activemq.artemis.tests.util;
+package org.apache.activemq.artemis.tests.rules;
import java.io.File;
-import org.apache.activemq.artemis.utils.FileUtil;
import org.junit.Assert;
import org.junit.rules.TestWatcher;
import org.junit.runner.Description;
/**
- * This is useful to make sure you won't have leaking threads between tests
+ * This is useful to make sure you won't have leaking directories between tests
*/
public class NoFilesBehind extends TestWatcher {
@@ -45,52 +44,19 @@ public class NoFilesBehind extends TestWatcher {
return null;
}
- /**
- * Override to set up your specific external resource.
- *
- * @throws if setup fails (which will disable {@code after}
- */
@Override
protected void starting(Description description) {
- // do nothing
-
File leaked = checkFiles();
-
if (leaked != null) {
Assert.fail("A previous test left a folder around:: " + leaked.getAbsolutePath());
}
-
}
-
- @Override
- protected void failed(Throwable e, Description description) {
- }
-
- @Override
- protected void succeeded(Description description) {
- }
-
- /**
- * Override to tear down your specific external resource.
- */
@Override
protected void finished(Description description) {
-
File leaked = checkFiles();
-
if (leaked != null) {
- try {
- Assert.fail(leaked.getAbsolutePath() + " is being left behind");
- } finally {
- try {
- FileUtil.deleteDirectory(leaked);
- } catch (Throwable almostIgnored) {
- // nothing we can do about it.. but we will log a stack trace for debugging
- almostIgnored.printStackTrace();
- }
- }
+ Assert.fail(leaked.getAbsolutePath() + "A directory is being left behind: " + leaked.getAbsolutePath());
}
}
-
}
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/NoProcessFilesBehind.java b/artemis-unit-test-support/src/main/java/org/apache/activemq/artemis/tests/rules/NoProcessFilesBehind.java
similarity index 74%
rename from artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/NoProcessFilesBehind.java
rename to artemis-unit-test-support/src/main/java/org/apache/activemq/artemis/tests/rules/NoProcessFilesBehind.java
index ee4c1ba7cf..86254a9cc1 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/NoProcessFilesBehind.java
+++ b/artemis-unit-test-support/src/main/java/org/apache/activemq/artemis/tests/rules/NoProcessFilesBehind.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.activemq.artemis.tests.util;
+package org.apache.activemq.artemis.tests.rules;
import java.io.BufferedReader;
import java.io.InputStreamReader;
@@ -26,38 +26,22 @@ import java.util.ArrayList;
import java.util.List;
import com.sun.management.UnixOperatingSystemMXBean;
-import org.apache.activemq.artemis.nativo.jlibaio.LibaioContext;
import org.apache.activemq.artemis.utils.Wait;
import org.junit.Assert;
import org.junit.rules.TestWatcher;
import org.junit.runner.Description;
/**
- * This is useful to make sure you won't have leaking threads between tests
+ * This is useful to make sure you won't have leaking process files between tests
*/
public class NoProcessFilesBehind extends TestWatcher {
+ private long maxFiles;
+
public NoProcessFilesBehind(long maxFiles) {
- this(-1, maxFiles);
- }
-
- /**
- * -1 on maxVariance means no check
- */
- public NoProcessFilesBehind(long variance, long maxFiles) {
-
this.maxFiles = maxFiles;
- if (variance < 0) {
- maxvariance = null;
- } else {
- this.maxvariance = variance;
- }
}
- long fdBefore;
- long maxFiles;
- Long maxvariance;
-
static OperatingSystemMXBean os = ManagementFactory.getOperatingSystemMXBean();
public static long getOpenFD() {
@@ -68,14 +52,6 @@ public class NoProcessFilesBehind extends TestWatcher {
}
}
- @Override
- protected void starting(Description description) {
- LibaioContext.isLoaded();
- if (maxvariance != null) {
- fdBefore = getOpenFD();
- }
- }
-
public static List getOpenFiles(boolean filtered) {
ArrayList openFiles = new ArrayList<>();
@@ -97,6 +73,7 @@ public class NoProcessFilesBehind extends TestWatcher {
return openFiles;
}
+
private static int getProcessId() throws ReflectiveOperationException {
java.lang.management.RuntimeMXBean runtime = java.lang.management.ManagementFactory.getRuntimeMXBean();
java.lang.reflect.Field jvmField = runtime.getClass().getDeclaredField("jvm");
@@ -107,37 +84,12 @@ public class NoProcessFilesBehind extends TestWatcher {
return (Integer) getProcessIdMethod.invoke(jvm);
}
-
- @Override
- protected void failed(Throwable e, Description description) {
- }
-
- @Override
- protected void succeeded(Description description) {
- }
-
- /**
- * Override to tear down your specific external resource.
- */
@Override
protected void finished(Description description) {
-
- Wait.waitFor(() -> getOpenFD() < maxFiles, 5000, 0);
-
- if (maxvariance != null) {
- long currentVariance = getOpenFD() - fdBefore;
-
- if (currentVariance > 0 && currentVariance > maxvariance) {
- Assert.fail("too many files were opened files on this test::" + getOpenList());
- }
-
- }
-
- if (!Wait.waitFor(() -> getOpenFD() < maxFiles, 5000, 0)) {
+ if (!Wait.waitFor(() -> getOpenFD() < maxFiles, 10000, 0)) {
String fileList = getOpenList();
Assert.fail("Too many files open (" + getOpenFD() + ">" + maxFiles + "). A possible list: " + fileList);
}
-
}
private String getOpenList() {
@@ -152,5 +104,4 @@ public class NoProcessFilesBehind extends TestWatcher {
}
return stringWriter.toString();
}
-
}
diff --git a/artemis-unit-test-support/src/main/java/org/apache/activemq/artemis/tests/util/ArtemisTestCase.java b/artemis-unit-test-support/src/main/java/org/apache/activemq/artemis/tests/util/ArtemisTestCase.java
new file mode 100644
index 0000000000..eb16d2a8b9
--- /dev/null
+++ b/artemis-unit-test-support/src/main/java/org/apache/activemq/artemis/tests/util/ArtemisTestCase.java
@@ -0,0 +1,169 @@
+/*
+ * 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.tests.util;
+
+import java.lang.invoke.MethodHandles;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.management.MBeanServer;
+import javax.management.MBeanServerFactory;
+
+import org.apache.activemq.artemis.tests.rules.NoFilesBehind;
+import org.apache.activemq.artemis.tests.rules.NoProcessFilesBehind;
+import org.apache.activemq.artemis.utils.CleanupSystemPropertiesRule;
+import org.apache.activemq.artemis.utils.ThreadLeakCheckRule;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.rules.TestName;
+import org.junit.rules.TestRule;
+import org.junit.rules.TestWatcher;
+import org.junit.runner.Description;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Parent class with basic utilities around creating unit etc test classes.
+ */
+public abstract class ArtemisTestCase extends Assert {
+
+ private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+ private static String testClassName = "not-yet-set";
+
+ /** This will make sure threads are not leaking between tests */
+ @ClassRule
+ public static ThreadLeakCheckRule leakCheckRule = new ThreadLeakCheckRule();
+
+ @ClassRule
+ public static NoProcessFilesBehind noProcessFilesBehind = new NoProcessFilesBehind(1000);
+
+ @ClassRule
+ public static TestRule classWatcher = new TestWatcher() {
+ @Override
+ protected void starting(Description description) {
+ testClassName = description.getClassName();
+ }
+ };
+
+ /** We should not under any circumstance create data outside of ./target
+ * if you have a test failing because because of this rule for any reason,
+ * even if you use afterClass events, move the test to ./target and always cleanup after
+ * your data even under ./target.
+ * Do not try to disable this rule! Fix your test! */
+ @Rule
+ public NoFilesBehind noFilesBehind = new NoFilesBehind("data", "null");
+
+ /** This will cleanup any system property changed inside tests */
+ @Rule
+ public CleanupSystemPropertiesRule propertiesRule = new CleanupSystemPropertiesRule();
+
+ @Rule
+ public TestName name = new TestName();
+
+ @Rule
+ public TestRule watcher = new TestWatcher() {
+ @Override
+ protected void starting(Description description) {
+ logger.info("**** start #test {}() ***", description.getMethodName());
+ }
+
+ @Override
+ protected void finished(Description description) {
+ logger.info("**** end #test {}() ***", description.getMethodName());
+ }
+ };
+
+ public interface TestCompletionTask {
+ void run() throws Exception;
+ }
+
+ private List runAfter;
+
+ /**
+ * Use this method to cleanup your resources by passing a TestCleanupTask.
+ *
+ * Exceptions thrown from your tasks will just be logged and not passed as failures.
+ *
+ * @param completionTask A TestCleanupTask that will be passed, possibly from a lambda
+ */
+ protected void runAfter(TestCompletionTask completionTask) {
+ Assert.assertNotNull(completionTask);
+ runAfterEx(() -> {
+ try {
+ completionTask.run();
+ } catch (Throwable e) {
+ logger.warn("Lambda {} is throwing an exception", completionTask.toString(), e);
+ }
+ });
+ }
+
+ /**
+ * Use this method to cleanup your resources and validating exceptional results by passing a TestCompletionTask.
+ *
+ * An exception thrown from a task will be thrown to JUnit. If more than one task is present, all tasks will be
+ * be executed, however only the exception of the first one will then be thrown the JUnit runner. All will be
+ * logged as they occur.
+ *
+ * @param completionTask A TestCompletionTask that will be passed, possibly from a lambda method
+ */
+ protected synchronized void runAfterEx(TestCompletionTask completionTask) {
+ Assert.assertNotNull(completionTask);
+ if (runAfter == null) {
+ runAfter = new ArrayList<>();
+ }
+ runAfter.add(completionTask);
+ }
+
+ @After
+ public synchronized void runAfter() throws Throwable {
+ ArrayList throwables = new ArrayList<>();
+ List localRunAfter = runAfter;
+ runAfter = null;
+ if (localRunAfter != null) {
+ localRunAfter.forEach((r) -> {
+ try {
+ r.run();
+ } catch (Throwable e) {
+ logger.warn(e.getMessage(), e);
+ throwables.add(e);
+ }
+ });
+ }
+
+ if (!throwables.isEmpty()) {
+ throw throwables.get(0);
+ }
+ }
+
+ public static void forceGC() {
+ ThreadLeakCheckRule.forceGC();
+ }
+
+ public MBeanServer createMBeanServer() {
+ MBeanServer mBeanServer = MBeanServerFactory.createMBeanServer();
+ runAfter(() -> MBeanServerFactory.releaseMBeanServer(mBeanServer));
+ return mBeanServer;
+ }
+
+ public static String getTestClassName() {
+ return testClassName;
+ }
+
+}
diff --git a/artemis-unit-test-support/src/main/java/org/apache/activemq/artemis/tests/util/DBSupportUtil.java b/artemis-unit-test-support/src/main/java/org/apache/activemq/artemis/tests/util/DBSupportUtil.java
new file mode 100644
index 0000000000..8de1ea79bf
--- /dev/null
+++ b/artemis-unit-test-support/src/main/java/org/apache/activemq/artemis/tests/util/DBSupportUtil.java
@@ -0,0 +1,64 @@
+/*
+ * 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.tests.util;
+
+import java.lang.invoke.MethodHandles;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class DBSupportUtil {
+ private static Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+ public static final String EXPECTED_DERBY_DROP_STATE = "08006";
+ public static final String EXPECTED_DERBY_SHUTDOWN_STATE = "XJ015";
+
+ public static void dropDerbyDatabase(String user, String password, String databaseName) throws SQLException {
+ try {
+ if (user == null) {
+ DriverManager.getConnection("jdbc:derby:" + databaseName + ";drop=true");
+ } else {
+ DriverManager.getConnection("jdbc:derby:" + databaseName + ";drop=true", user, password);
+ }
+ } catch (SQLException sqlE) {
+ if (!sqlE.getSQLState().equals(EXPECTED_DERBY_DROP_STATE)) {
+ logger.warn("{} / {}", sqlE.getMessage(), sqlE.getSQLState());
+ throw sqlE;
+ } else {
+ logger.info("{} / {}", sqlE.getMessage(), sqlE.getSQLState());
+ }
+ }
+ }
+
+ public static void shutdownDerby(String user, String password) throws SQLException {
+ try {
+ if (user == null) {
+ DriverManager.getConnection("jdbc:derby:;shutdown=true;deregister=false");
+ } else {
+ DriverManager.getConnection("jdbc:derby:;shutdown=true;deregister=false", user, password);
+ }
+ } catch (SQLException sqlE) {
+ logger.debug("{} / {}", sqlE.getMessage(), sqlE.getSQLState());
+ if (!sqlE.getSQLState().equals(EXPECTED_DERBY_SHUTDOWN_STATE)) {
+ throw sqlE;
+ }
+ }
+ }
+
+}
diff --git a/artemis-server/src/test/resources/test.ldif b/artemis-unit-test-support/src/main/resources/test.ldif
similarity index 100%
rename from artemis-server/src/test/resources/test.ldif
rename to artemis-unit-test-support/src/main/resources/test.ldif
diff --git a/tests/artemis-test-support/pom.xml b/tests/artemis-test-support/pom.xml
index 023239fbe6..f71852ec6f 100644
--- a/tests/artemis-test-support/pom.xml
+++ b/tests/artemis-test-support/pom.xml
@@ -24,7 +24,7 @@
artemis-test-support
jar
- ActiveMQ Artemis Test Support
+ ActiveMQ Artemis System Test Support
${project.basedir}/../..
@@ -120,7 +120,12 @@
junit
provided
-
+
+ org.apache.activemq
+ artemis-server
+ ${project.version}
+ provided
+
org.apache.activemq
artemis-stomp-protocol
@@ -128,12 +133,11 @@
provided
-
+
org.apache.activemq
- artemis-server
+ artemis-unit-test-support
${project.version}
- test-jar
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/paging/cursor/impl/PageCursorProviderAccessor.java b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/core/paging/cursor/impl/PageCursorProviderTestAccessor.java
similarity index 95%
rename from artemis-server/src/test/java/org/apache/activemq/artemis/core/paging/cursor/impl/PageCursorProviderAccessor.java
rename to tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/core/paging/cursor/impl/PageCursorProviderTestAccessor.java
index 6708f8a6b7..de62d89fa6 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/paging/cursor/impl/PageCursorProviderAccessor.java
+++ b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/core/paging/cursor/impl/PageCursorProviderTestAccessor.java
@@ -19,7 +19,7 @@ package org.apache.activemq.artemis.core.paging.cursor.impl;
import org.apache.activemq.artemis.core.paging.cursor.PageCursorProvider;
-public class PageCursorProviderAccessor {
+public class PageCursorProviderTestAccessor {
public static void cleanup(PageCursorProvider provider) {
((PageCursorProviderImpl)provider).cleanup();
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/paging/impl/PagingStoreTestAccessor.java b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/core/paging/impl/PagingStoreTestAccessor.java
similarity index 100%
rename from artemis-server/src/test/java/org/apache/activemq/artemis/core/paging/impl/PagingStoreTestAccessor.java
rename to tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/core/paging/impl/PagingStoreTestAccessor.java
diff --git a/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/rules/RemoveFolder.java b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/rules/RemoveFolder.java
new file mode 100644
index 0000000000..458e1f3f21
--- /dev/null
+++ b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/rules/RemoveFolder.java
@@ -0,0 +1,40 @@
+/*
+ * 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.tests.rules;
+
+import java.io.File;
+
+import org.apache.activemq.artemis.utils.FileUtil;
+import org.junit.rules.ExternalResource;
+
+/**
+ * This will remove a folder on a tearDown *
+ */
+public class RemoveFolder extends ExternalResource {
+
+ private final String folderName;
+
+ public RemoveFolder(String folderName) {
+ this.folderName = folderName;
+ }
+
+ @Override
+ protected void after() {
+ FileUtil.deleteDirectory(new File(folderName));
+ }
+}
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java
similarity index 92%
rename from artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java
rename to tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java
index a338feae8b..484705f648 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java
+++ b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/util/ActiveMQTestBase.java
@@ -16,8 +16,6 @@
*/
package org.apache.activemq.artemis.tests.util;
-import javax.management.MBeanServer;
-import javax.management.MBeanServerFactory;
import javax.naming.Context;
import javax.transaction.xa.XAException;
import javax.transaction.xa.Xid;
@@ -38,7 +36,6 @@ import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.lang.management.ManagementFactory;
import java.lang.ref.WeakReference;
-import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Arrays;
@@ -136,19 +133,17 @@ import org.apache.activemq.artemis.core.settings.impl.AddressSettings;
import org.apache.activemq.artemis.core.settings.impl.PageFullMessagePolicy;
import org.apache.activemq.artemis.core.transaction.impl.XidImpl;
import org.apache.activemq.artemis.json.JsonObject;
-import org.apache.activemq.artemis.nativo.jlibaio.LibaioContext;
import org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager;
import org.apache.activemq.artemis.spi.core.security.ActiveMQSecurityManager;
import org.apache.activemq.artemis.spi.core.security.jaas.InVMLoginModule;
+import org.apache.activemq.artemis.tests.rules.LibaioContextCheck;
+import org.apache.activemq.artemis.tests.rules.RemoveFolder;
import org.apache.activemq.artemis.utils.ActiveMQThreadFactory;
-import org.apache.activemq.artemis.utils.CleanupSystemPropertiesRule;
import org.apache.activemq.artemis.utils.Env;
import org.apache.activemq.artemis.utils.FileUtil;
import org.apache.activemq.artemis.utils.PortCheckRule;
import org.apache.activemq.artemis.utils.RandomUtil;
-import org.apache.activemq.artemis.utils.RunnableEx;
import org.apache.activemq.artemis.utils.ThreadDumpUtil;
-import org.apache.activemq.artemis.utils.ThreadLeakCheckRule;
import org.apache.activemq.artemis.utils.UUIDGenerator;
import org.apache.activemq.artemis.utils.Wait;
import org.apache.activemq.artemis.utils.actors.OrderedExecutorFactory;
@@ -157,22 +152,16 @@ import org.slf4j.LoggerFactory;
import java.lang.invoke.MethodHandles;
import org.junit.After;
-import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
-import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.rules.TemporaryFolder;
-import org.junit.rules.TestName;
-import org.junit.rules.TestRule;
-import org.junit.rules.TestWatcher;
-import org.junit.runner.Description;
/**
* Base class with basic utilities on starting up a basic server
*/
-public abstract class ActiveMQTestBase extends Assert {
+public abstract class ActiveMQTestBase extends ArtemisTestCase {
private static final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
@@ -180,25 +169,6 @@ public abstract class ActiveMQTestBase extends Assert {
Env.setTestEnv(true);
}
- /** This will make sure threads are not leaking between tests */
- @ClassRule
- public static ThreadLeakCheckRule leakCheckRule = new ThreadLeakCheckRule();
-
- @ClassRule
- public static NoProcessFilesBehind noProcessFilesBehind = new NoProcessFilesBehind(1000);
-
- /** We should not under any circunstance create data outside of ./target
- * if you have a test failing because because of this rule for any reason,
- * even if you use afterClass events, move the test to ./target and always cleanup after
- * your data even under ./target.
- * Do not try to disable this rule! Fix your test! */
- @Rule
- public NoFilesBehind noFilesBehind = new NoFilesBehind("data", "null");
-
- /** This will cleanup any system property changed inside tests */
- @Rule
- public CleanupSystemPropertiesRule propertiesRule = new CleanupSystemPropertiesRule();
-
@ClassRule
public static PortCheckRule portCheckRule = new PortCheckRule(61616);
@@ -219,71 +189,12 @@ public abstract class ActiveMQTestBase extends Assert {
protected static final long WAIT_TIMEOUT = 30000;
- private static String testClassName = "not-yet-set";
- private static String previouslyFailedTotalMaxIoMessage;
+ @ClassRule
+ public static LibaioContextCheck libaioContextRule = new LibaioContextCheck();
// There is a verification about thread leakages. We only fail a single thread when this happens
private static Set alreadyFailedThread = new HashSet<>();
- private List runAfter;
-
- /**
- * Use this method to cleanup your resources by passing lambdas.
- * Exceptions thrown from your lambdas will just be logged and not passed as failures.
- * @param lambda A RunnableEX instance that will be passed possibly from a lambda method
- */
- protected void runAfter(RunnableEx lambda) {
- runAfterEx(() -> {
- try {
- lambda.run();
- } catch (Throwable e) {
- logger.warn("Lambda {} is throwing an exception", lambda.toString(), e);
- }
- });
- }
-
- /**
- * Use this method to cleanup your resources and validating exceptional results by passing lambdas.
- * Exceptions thrown from your lambdas will be sent straight to JUNIT.
- * If more than one lambda threw an exception they will all be executed, however only the exception of the first one will
- * sent to the junit runner.
- * @param lambda A RunnableEX instance that will be passed possibly from a lambda method
- */
- protected synchronized void runAfterEx(RunnableEx lambda) {
- Assert.assertNotNull(lambda);
- if (runAfter == null) {
- runAfter = new ArrayList<>();
- }
- runAfter.add(lambda);
- }
-
- @After
- public synchronized void runAfter() throws Throwable {
- ArrayList throwables = new ArrayList<>();
- List localRunAfter = runAfter;
- runAfter = null;
- if (localRunAfter != null) {
- localRunAfter.forEach((r) -> {
- try {
- r.run();
- } catch (Throwable e) {
- logger.warn(e.getMessage(), e);
- throwables.add(e);
- }
- });
- }
-
- if (!throwables.isEmpty()) {
- throw throwables.get(0);
- }
- }
-
- public MBeanServer createMBeanServer() {
- MBeanServer mBeanServer = MBeanServerFactory.createMBeanServer();
- runAfter(() -> MBeanServerFactory.releaseMBeanServer(mBeanServer));
- return mBeanServer;
- }
-
protected void clearServers() {
servers.clear();
}
@@ -300,9 +211,6 @@ public abstract class ActiveMQTestBase extends Assert {
private String testDir;
private int sendMsgCount = 0;
- @Rule
- public TestName name = new TestName();
-
@Rule
public TemporaryFolder temporaryFolder;
@@ -311,73 +219,6 @@ public abstract class ActiveMQTestBase extends Assert {
// including anything created previously by TemporaryFolder
public RemoveFolder folder = new RemoveFolder(TARGET_TMP);
- @Rule
- public TestRule watcher = new TestWatcher() {
- @Override
- protected void starting(Description description) {
- logger.info("**** start #test {}() ***", description.getMethodName());
- }
-
- @Override
- protected void finished(Description description) {
- logger.info("**** end #test {}() ***", description.getMethodName());
- }
- };
-
- @ClassRule
- public static TestRule classWatcher = new TestWatcher() {
- @Override
- protected void starting(Description description) {
- testClassName = description.getClassName();
- }
- };
-
- // Static variable used by dropDerby
- private static final String EXPECTED_DERBY_DROP_STATE = "08006";
-
- // Static variable used by dropDerby
- private static final String EXPECTED_DERBY_SHUTDOWN_STATE = "XJ015";
-
- /** This method will be passed as a lambda into runAfter from createDefaultDatabaseStorageConfiguration */
- protected void dropDerby() throws Exception {
- String user = getJDBCUser();
- String password = getJDBCPassword();
- try {
- if (user == null) {
- DriverManager.getConnection("jdbc:derby:" + getEmbeddedDataBaseName() + ";drop=true");
- } else {
- DriverManager.getConnection("jdbc:derby:" + getEmbeddedDataBaseName() + ";drop=true", user, password);
- }
- } catch (SQLException sqlE) {
- if (!sqlE.getSQLState().equals(EXPECTED_DERBY_DROP_STATE)) {
- logger.warn("{} / {}", sqlE.getMessage(), sqlE.getSQLState());
- throw sqlE;
- } else {
- logger.info("{} / {}", sqlE.getMessage(), sqlE.getSQLState());
-
- }
- }
- }
-
- /** Some tests may be using file database as they share the database with a process.
- * these tests will call shutdown Derby only */
- protected void shutdownDerby() throws SQLException {
- String user = getJDBCUser();
- String password = getJDBCPassword();
- try {
- if (user == null) {
- DriverManager.getConnection("jdbc:derby:;shutdown=true;deregister=false");
- } else {
- DriverManager.getConnection("jdbc:derby:;shutdown=true;deregister=false", user, password);
- }
- } catch (SQLException sqlE) {
- logger.debug("{} / {}", sqlE.getMessage(), sqlE.getSQLState());
- if (!sqlE.getSQLState().equals(EXPECTED_DERBY_SHUTDOWN_STATE)) {
- throw sqlE;
- }
- }
- }
-
static {
Random random = new Random();
DEFAULT_UDP_PORT = 6000 + random.nextInt(1000);
@@ -527,11 +368,6 @@ public abstract class ActiveMQTestBase extends Assert {
}
}
- /**
- * @param str
- * @param sub
- * @return
- */
public static int countOccurrencesOf(String str, String sub) {
if (str == null || sub == null || str.length() == 0 || sub.length() == 0) {
return 0;
@@ -617,11 +453,6 @@ public abstract class ActiveMQTestBase extends Assert {
return createBasicConfig(-1);
}
- /**
- * @param serverID
- * @return
- * @throws Exception
- */
protected ConfigurationImpl createBasicConfig(final int serverID) {
ConfigurationImpl configuration = new ConfigurationImpl().setSecurityEnabled(false).setJournalMinFiles(2).setJournalFileSize(100 * 1024).setJournalType(getDefaultJournalType()).setJournalDirectory(getJournalDir(serverID, false)).setBindingsDirectory(getBindingsDir(serverID, false)).setPagingDirectory(getPageDir(serverID, false)).setLargeMessagesDirectory(getLargeMessagesDir(serverID, false)).setJournalCompactMinFiles(0).setJournalCompactPercentage(0).setClusterPassword(CLUSTER_PASSWORD).setJournalDatasync(false);
@@ -637,6 +468,14 @@ public abstract class ActiveMQTestBase extends Assert {
private boolean derbyDropped = false;
+ protected void dropDerby() throws Exception {
+ DBSupportUtil.dropDerbyDatabase(getJDBCUser(), getJDBCPassword(), getEmbeddedDataBaseName());
+ }
+
+ protected void shutdownDerby() throws SQLException {
+ DBSupportUtil.shutdownDerby(getJDBCUser(), getJDBCPassword());
+ }
+
protected DatabaseStorageConfiguration createDefaultDatabaseStorageConfiguration() {
DatabaseStorageConfiguration dbStorageConfiguration = new DatabaseStorageConfiguration();
String connectionURI = getTestJDBCConnectionUrl();
@@ -749,10 +588,6 @@ public abstract class ActiveMQTestBase extends Assert {
}
}
- public static void forceGC() {
- ThreadLeakCheckRule.forceGC();
- }
-
/**
* Verifies whether weak references are released after a few GCs.
*
@@ -1839,19 +1674,10 @@ public abstract class ActiveMQTestBase extends Assert {
return message;
}
- /**
- * @param i
- * @param message
- * @throws Exception
- */
protected void setBody(final int i, final ClientMessage message) {
message.getBodyBuffer().writeString("message" + i);
}
- /**
- * @param i
- * @param message
- */
protected void assertMessageBody(final int i, final ClientMessage message) {
Assert.assertEquals(message.toString(), "message" + i, message.getBodyBuffer().readString());
}
@@ -1902,12 +1728,8 @@ public abstract class ActiveMQTestBase extends Assert {
}
/**
- * Reads a journal system and returns a Map of recordTypes and the number of records per type,
+ * Reads a journal system and returns a Pair of List of RecordInfo,
* independent of being deleted or not
- *
- * @param config
- * @return
- * @throws Exception
*/
protected Pair, List> loadMessageJournal(Configuration config) throws Exception {
JournalImpl messagesJournal = null;
@@ -1935,7 +1757,7 @@ public abstract class ActiveMQTestBase extends Assert {
}
/**
- * Reads a journal system and returns a Map of recordTypes and the number of records per type,
+ * Reads a journal system and returns a {@literal Map} of recordTypes and the number of records per type,
* independent of being deleted or not
*
* @param config
@@ -1988,7 +1810,7 @@ public abstract class ActiveMQTestBase extends Assert {
* This method will load a journal and count the living records
*
* @param config
- * @param messageJournal if true -> MessageJournal, false -> BindingsJournal
+ * @param messageJournal if true counts MessageJournal, if false counts BindingsJournal
* @return
* @throws Exception
*/
@@ -2203,10 +2025,7 @@ public abstract class ActiveMQTestBase extends Assert {
return exceptions;
}
- return Collections.EMPTY_LIST;
-
-
-
+ return Collections.emptyList();
}
private void assertAllClientProducersAreClosed() {
@@ -2230,43 +2049,6 @@ public abstract class ActiveMQTestBase extends Assert {
}
}
- @BeforeClass
- public static void checkLibaioBeforeClass() throws Throwable {
- if (previouslyFailedTotalMaxIoMessage != null) {
- // Fail immediately if this is already set.
- fail(previouslyFailedTotalMaxIoMessage);
- }
-
- long totalMaxIO = LibaioContext.getTotalMaxIO();
- if (totalMaxIO != 0) {
- failDueToLibaioContextCheck("LibaioContext TotalMaxIO > 0 leak detected BEFORE class %s, TotalMaxIO=%s. Check prior test classes for issue (not possible to be sure of which here).", totalMaxIO);
- }
- }
-
- @AfterClass
- public static void checkLibaioAfterClass() throws Throwable {
- if (previouslyFailedTotalMaxIoMessage != null) {
- // Test class was already failed if this is set, nothing to do here.
- return;
- }
-
- if (!Wait.waitFor(() -> LibaioContext.getTotalMaxIO() == 0)) {
- long totalMaxIO = LibaioContext.getTotalMaxIO();
-
- failDueToLibaioContextCheck("LibaioContext TotalMaxIO > 0 leak detected AFTER class %s, TotalMaxIO=%s.", totalMaxIO);
- }
- }
-
- private static void failDueToLibaioContextCheck(String currentFailureMessageFormat, long totalMaxIO) {
- // Set message to immediately-fail subsequent tests with
- previouslyFailedTotalMaxIoMessage = String.format("Aborting, LibaioContext TotalMaxIO > 0 issue previously detected by test class %s, see its output.", testClassName);
-
- // Now fail this run
- String message = String.format(currentFailureMessageFormat, testClassName, totalMaxIO);
- logger.error(message);
- Assert.fail(message);
- }
-
private void checkFilesUsage() throws Exception {
int invmSize = InVMRegistry.instance.size();
if (invmSize > 0) {
@@ -2482,7 +2264,7 @@ public abstract class ActiveMQTestBase extends Assert {
* This is because we don't want it closed in certain tests where we are issuing failures
*
* @param isNetty
- * @return
+ * @return the locator
*/
public ServerLocator internalCreateNonHALocator(boolean isNetty) {
return isNetty ? ActiveMQClient.createServerLocatorWithoutHA(new TransportConfiguration(NETTY_CONNECTOR_FACTORY)) : ActiveMQClient.createServerLocatorWithoutHA(new TransportConfiguration(INVM_CONNECTOR_FACTORY));
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ColocatedActiveMQServer.java b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/util/ColocatedActiveMQServer.java
similarity index 100%
rename from artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/ColocatedActiveMQServer.java
rename to tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/util/ColocatedActiveMQServer.java
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/CountDownSessionFailureListener.java b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/util/CountDownSessionFailureListener.java
similarity index 100%
rename from artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/CountDownSessionFailureListener.java
rename to tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/util/CountDownSessionFailureListener.java
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/InVMNodeManagerServer.java b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/util/InVMNodeManagerServer.java
similarity index 100%
rename from artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/InVMNodeManagerServer.java
rename to tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/util/InVMNodeManagerServer.java
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/SingleServerTestBase.java b/tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/util/SingleServerTestBase.java
similarity index 100%
rename from artemis-server/src/test/java/org/apache/activemq/artemis/tests/util/SingleServerTestBase.java
rename to tests/artemis-test-support/src/main/java/org/apache/activemq/artemis/tests/util/SingleServerTestBase.java
diff --git a/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/PagingTest.java b/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/PagingTest.java
index 594920c742..5106038e15 100644
--- a/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/PagingTest.java
+++ b/tests/db-tests/src/test/java/org/apache/activemq/artemis/tests/db/paging/PagingTest.java
@@ -83,8 +83,8 @@ import org.apache.activemq.artemis.core.paging.PagingStoreFactory;
import org.apache.activemq.artemis.core.paging.cursor.PageCursorProvider;
import org.apache.activemq.artemis.core.paging.cursor.PageIterator;
import org.apache.activemq.artemis.core.paging.cursor.PageSubscription;
-import org.apache.activemq.artemis.core.paging.cursor.impl.PageCursorProviderAccessor;
import org.apache.activemq.artemis.core.paging.cursor.impl.PageCursorProviderImpl;
+import org.apache.activemq.artemis.core.paging.cursor.impl.PageCursorProviderTestAccessor;
import org.apache.activemq.artemis.core.paging.cursor.impl.PagePositionImpl;
import org.apache.activemq.artemis.core.paging.impl.PagingStoreFactoryDatabase;
import org.apache.activemq.artemis.core.paging.impl.PagingStoreFactoryNIO;
@@ -872,7 +872,7 @@ public class PagingTest extends ParameterDBTestBase {
Assert.assertEquals(10, queue.getPagingStore().getNumberOfPages());
- PageCursorProviderAccessor.cleanup(queue.getPagingStore().getCursorProvider());
+ PageCursorProviderTestAccessor.cleanup(queue.getPagingStore().getCursorProvider());
Assert.assertEquals(9, queue.getPagingStore().getNumberOfPages());
@@ -1000,7 +1000,7 @@ public class PagingTest extends ParameterDBTestBase {
session.commit();
consumer.close();
- PageCursorProviderAccessor.cleanup(queue.getPagingStore().getCursorProvider());
+ PageCursorProviderTestAccessor.cleanup(queue.getPagingStore().getCursorProvider());
Wait.assertFalse(queue.getPagingStore()::isPaging, 5000, 100);
}
@@ -1998,7 +1998,7 @@ public class PagingTest extends ParameterDBTestBase {
Wait.assertEquals(0, queue::getMessageCount);
- PageCursorProviderAccessor.cleanup(queue.getPagingStore().getCursorProvider());
+ PageCursorProviderTestAccessor.cleanup(queue.getPagingStore().getCursorProvider());
waitForNotPaging(queue);
}
@@ -2282,7 +2282,7 @@ public class PagingTest extends ParameterDBTestBase {
q2.getPageSubscription().cleanupEntries(false);
PageCursorProvider provider = q1.getPageSubscription().getPagingStore().getCursorProvider();
- PageCursorProviderAccessor.cleanup(provider);
+ PageCursorProviderTestAccessor.cleanup(provider);
waitForNotPaging(q1);
@@ -2480,7 +2480,7 @@ public class PagingTest extends ParameterDBTestBase {
session.commit();
PagingStore store = server.getPagingManager().getPageStore(ADDRESS);
- PageCursorProviderAccessor.cleanup(store.getCursorProvider());
+ PageCursorProviderTestAccessor.cleanup(store.getCursorProvider());
Wait.assertFalse(server.getPagingManager().getPageStore(ADDRESS)::isPaging, 5000, 100);
}
@@ -3623,7 +3623,7 @@ public class PagingTest extends ParameterDBTestBase {
queue.getPageSubscription().getPagingStore().disableCleanup();
- PageCursorProviderAccessor.cleanup(queue.getPagingStore().getCursorProvider());
+ PageCursorProviderTestAccessor.cleanup(queue.getPagingStore().getCursorProvider());
consumerSession.start();
ClientConsumer consumer = consumerSession.createConsumer(ADDRESS, SimpleString.toSimpleString("id > 0"));
@@ -3636,7 +3636,7 @@ public class PagingTest extends ParameterDBTestBase {
// The only reason I'm calling cleanup directly is that it would be easy to debug in case of bugs
// if you see an issue with cleanup here, enjoy debugging this method
- PageCursorProviderAccessor.cleanup(queue.getPagingStore().getCursorProvider());
+ PageCursorProviderTestAccessor.cleanup(queue.getPagingStore().getCursorProvider());
}
queue.getPageSubscription().getPagingStore().enableCleanup();
@@ -3780,7 +3780,7 @@ public class PagingTest extends ParameterDBTestBase {
queue = server.locateQueue(ADDRESS);
queue.getPageSubscription().cleanupEntries(false);
- PageCursorProviderAccessor.cleanup(queue.getPageSubscription().getPagingStore().getCursorProvider());
+ PageCursorProviderTestAccessor.cleanup(queue.getPageSubscription().getPagingStore().getCursorProvider());
ClientConsumer consumer = session.createConsumer(ADDRESS);
session.start();
@@ -4458,7 +4458,7 @@ public class PagingTest extends ParameterDBTestBase {
}
PagingStore store = server.getPagingManager().getPageStore(ADDRESS);
- PageCursorProviderAccessor.cleanup(store.getCursorProvider());
+ PageCursorProviderTestAccessor.cleanup(store.getCursorProvider());
long timeout = System.currentTimeMillis() + 5000;
while (store.isPaging() && timeout > System.currentTimeMillis()) {
@@ -4533,11 +4533,11 @@ public class PagingTest extends ParameterDBTestBase {
}
PagingStore store = server.getPagingManager().getPageStore(ADDRESS);
- PageCursorProviderAccessor.cleanup(store.getCursorProvider());
+ PageCursorProviderTestAccessor.cleanup(store.getCursorProvider());
Wait.waitFor(() -> !store.isPaging(), 5000);
- PageCursorProviderAccessor.cleanup(store.getCursorProvider());
+ PageCursorProviderTestAccessor.cleanup(store.getCursorProvider());
waitForNotPaging(server.locateQueue(PagingTest.ADDRESS.concat("=1")));
@@ -4610,7 +4610,7 @@ public class PagingTest extends ParameterDBTestBase {
session.commit();
session.close();
- PageCursorProviderAccessor.cleanup(store.getCursorProvider());
+ PageCursorProviderTestAccessor.cleanup(store.getCursorProvider());
waitForNotPaging(server.locateQueue(PagingTest.ADDRESS.concat("=1")));
@@ -4909,7 +4909,7 @@ public class PagingTest extends ParameterDBTestBase {
pgStoreAddress.getCursorProvider().getSubscription(serverQueue.getID()).cleanupEntries(false);
- PageCursorProviderAccessor.cleanup(pgStoreAddress.getCursorProvider());
+ PageCursorProviderTestAccessor.cleanup(pgStoreAddress.getCursorProvider());
Wait.assertFalse(pgStoreAddress::isPaging);
session.commit();
@@ -6265,7 +6265,7 @@ public class PagingTest extends ParameterDBTestBase {
consumer.close();
session.close();
- PageCursorProviderAccessor.cleanup(store.getCursorProvider());
+ PageCursorProviderTestAccessor.cleanup(store.getCursorProvider());
waitForNotPaging(server.locateQueue(PagingTest.ADDRESS.concat("=1")));
sf.close();
locator.close();
diff --git a/tests/integration-tests-isolated/pom.xml b/tests/integration-tests-isolated/pom.xml
index 90b99a260d..9f81833687 100644
--- a/tests/integration-tests-isolated/pom.xml
+++ b/tests/integration-tests-isolated/pom.xml
@@ -264,18 +264,6 @@
-
- org.apache.maven.plugins
- maven-jar-plugin
-
-
- test
-
- test-jar
-
-
-
-
org.apache.maven.plugins
maven-surefire-plugin
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/paging/impl/PagingManagerTestAccessor.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/core/paging/impl/PagingManagerTestAccessor.java
similarity index 100%
rename from artemis-server/src/test/java/org/apache/activemq/artemis/core/paging/impl/PagingManagerTestAccessor.java
rename to tests/integration-tests/src/test/java/org/apache/activemq/artemis/core/paging/impl/PagingManagerTestAccessor.java
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeTestAccessor.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeTestAccessor.java
similarity index 100%
rename from artemis-server/src/test/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeTestAccessor.java
rename to tests/integration-tests/src/test/java/org/apache/activemq/artemis/core/postoffice/impl/PostOfficeTestAccessor.java
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/cluster/impl/BridgeTestAccessor.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/core/server/cluster/impl/BridgeTestAccessor.java
similarity index 100%
rename from artemis-server/src/test/java/org/apache/activemq/artemis/core/server/cluster/impl/BridgeTestAccessor.java
rename to tests/integration-tests/src/test/java/org/apache/activemq/artemis/core/server/cluster/impl/BridgeTestAccessor.java
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/QueueImplTestAccessor.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/core/server/impl/QueueImplTestAccessor.java
similarity index 100%
rename from artemis-server/src/test/java/org/apache/activemq/artemis/core/server/impl/QueueImplTestAccessor.java
rename to tests/integration-tests/src/test/java/org/apache/activemq/artemis/core/server/impl/QueueImplTestAccessor.java
diff --git a/tests/integration-tests/src/test/resources/test.ldif b/tests/integration-tests/src/test/resources/test.ldif
deleted file mode 100644
index 6d6bd588ce..0000000000
--- a/tests/integration-tests/src/test/resources/test.ldif
+++ /dev/null
@@ -1,39 +0,0 @@
-## ---------------------------------------------------------------------------
-## 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.
-## ---------------------------------------------------------------------------
-
-dn: uid=first,ou=system
-uid: first
-userPassword: secret
-objectClass: account
-objectClass: simpleSecurityObject
-objectClass: top
-
-###################
-## Define groups ##
-###################
-
-dn: cn=admins,ou=system
-cn: admins
-member: uid=first,ou=system
-objectClass: groupOfNames
-objectClass: top
-
-dn: cn=users,ou=system
-cn: users
-member: cn=admins,ou=system
-objectClass: groupOfNames
-objectClass: top
\ No newline at end of file
diff --git a/tests/leak-tests/pom.xml b/tests/leak-tests/pom.xml
index bb69c65beb..1cf52496ba 100644
--- a/tests/leak-tests/pom.xml
+++ b/tests/leak-tests/pom.xml
@@ -35,17 +35,7 @@
-
-
- org.apache.activemq
- artemis-server
- ${project.version}
- test
- test-jar
-
-
-
+
org.apache.activemq
artemis-unit-test-support
@@ -53,11 +43,11 @@
test
-
org.apache.activemq.tests
artemis-test-support
${project.version}
+ test
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/message/impl/MessagePropertyTest.java b/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/message/impl/MessagePropertyTest.java
similarity index 98%
rename from artemis-server/src/test/java/org/apache/activemq/artemis/core/message/impl/MessagePropertyTest.java
rename to tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/message/impl/MessagePropertyTest.java
index 0f20b82e1a..d0e5d2417d 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/message/impl/MessagePropertyTest.java
+++ b/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/message/impl/MessagePropertyTest.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.activemq.artemis.core.message.impl;
+package org.apache.activemq.artemis.tests.unit.core.message.impl;
import org.apache.activemq.artemis.api.core.QueueConfiguration;
import org.apache.activemq.artemis.api.core.SimpleString;
diff --git a/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/paging/impl/PagingStoreImplTest.java b/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/paging/impl/PagingStoreImplTest.java
index f75fb75940..1272ccff42 100644
--- a/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/paging/impl/PagingStoreImplTest.java
+++ b/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/paging/impl/PagingStoreImplTest.java
@@ -48,8 +48,8 @@ import org.apache.activemq.artemis.core.paging.cursor.PageIterator;
import org.apache.activemq.artemis.core.paging.cursor.PageSubscription;
import org.apache.activemq.artemis.core.paging.cursor.PagedReference;
import org.apache.activemq.artemis.core.paging.cursor.PagedReferenceImpl;
-import org.apache.activemq.artemis.core.paging.cursor.impl.PageCursorProviderAccessor;
import org.apache.activemq.artemis.core.paging.cursor.impl.PageCursorProviderImpl;
+import org.apache.activemq.artemis.core.paging.cursor.impl.PageCursorProviderTestAccessor;
import org.apache.activemq.artemis.core.paging.impl.Page;
import org.apache.activemq.artemis.core.paging.impl.PageReadWriter;
import org.apache.activemq.artemis.core.paging.impl.PageTransactionInfoImpl;
@@ -323,7 +323,7 @@ public class PagingStoreImplTest extends ActiveMQTestBase {
debugPage(storeImpl, subscription, storeImpl.getFirstPage(), storeImpl.getCurrentWritingPage());
}
- PageCursorProviderAccessor.cleanup(storeImpl.getCursorProvider());
+ PageCursorProviderTestAccessor.cleanup(storeImpl.getCursorProvider());
Assert.assertTrue(storeImpl.isPaging());
@@ -350,7 +350,7 @@ public class PagingStoreImplTest extends ActiveMQTestBase {
Assert.assertEquals(3, storeImpl.getNumberOfPages());
- PageCursorProviderAccessor.cleanup(storeImpl.getCursorProvider());
+ PageCursorProviderTestAccessor.cleanup(storeImpl.getCursorProvider());
Assert.assertFalse(storeImpl.isPaging());
@@ -441,7 +441,7 @@ public class PagingStoreImplTest extends ActiveMQTestBase {
Assert.assertEquals(7, messagesRead);
- PageCursorProviderAccessor.cleanup(storeImpl.getCursorProvider());
+ PageCursorProviderTestAccessor.cleanup(storeImpl.getCursorProvider());
Assert.assertEquals(10, factory.listFiles("page").size());
@@ -451,7 +451,7 @@ public class PagingStoreImplTest extends ActiveMQTestBase {
Assert.assertEquals(11, factory.listFiles("page").size());
- PageCursorProviderAccessor.cleanup(storeImpl.getCursorProvider());
+ PageCursorProviderTestAccessor.cleanup(storeImpl.getCursorProvider());
Assert.assertEquals(10, factory.listFiles("page").size());
@@ -476,7 +476,7 @@ public class PagingStoreImplTest extends ActiveMQTestBase {
Assert.assertEquals(90, messagesRead);
- PageCursorProviderAccessor.cleanup(storeImpl.getCursorProvider());
+ PageCursorProviderTestAccessor.cleanup(storeImpl.getCursorProvider());
Assert.assertFalse(storeImpl.isPaging());
}
diff --git a/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/util/ObjectInputStreamWithClassLoaderTest.java b/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/util/ObjectInputStreamWithClassLoaderTest.java
index 03afdc7d86..f604a2b3c0 100644
--- a/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/util/ObjectInputStreamWithClassLoaderTest.java
+++ b/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/util/ObjectInputStreamWithClassLoaderTest.java
@@ -43,6 +43,7 @@ import org.apache.activemq.artemis.tests.unit.util.deserialization.pkg1.Enclosin
import org.apache.activemq.artemis.tests.unit.util.deserialization.pkg1.TestClass1;
import org.apache.activemq.artemis.tests.unit.util.deserialization.pkg1.TestClass2;
import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.apache.activemq.artemis.tests.util.ArtemisTestCase;
import org.apache.activemq.artemis.utils.ObjectInputStreamWithClassLoader;
import org.junit.Assert;
import org.junit.Test;
@@ -92,8 +93,8 @@ public class ObjectInputStreamWithClassLoaderTest extends ActiveMQTestBase {
//Class.isAnonymousClass() call used in ObjectInputStreamWithClassLoader
//need to access the enclosing class and its parent class of the obj
- //i.e. ActiveMQTestBase and Assert.
- ClassLoader testClassLoader = ObjectInputStreamWithClassLoaderTest.newClassLoader(obj.getClass(), ActiveMQTestBase.class, Assert.class);
+ //i.e. ActiveMQTestBase, ArtemisTestCase, and Assert.
+ ClassLoader testClassLoader = ObjectInputStreamWithClassLoaderTest.newClassLoader(obj.getClass(), ActiveMQTestBase.class, ArtemisTestCase.class, Assert.class);
Thread.currentThread().setContextClassLoader(testClassLoader);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
@@ -120,7 +121,7 @@ public class ObjectInputStreamWithClassLoaderTest extends ActiveMQTestBase {
originalProxy.setMyInt(100);
byte[] bytes = ObjectInputStreamWithClassLoaderTest.toBytes(originalProxy);
- ClassLoader testClassLoader = ObjectInputStreamWithClassLoaderTest.newClassLoader(this.getClass(), ActiveMQTestBase.class, Assert.class);
+ ClassLoader testClassLoader = ObjectInputStreamWithClassLoaderTest.newClassLoader(this.getClass(), ActiveMQTestBase.class, ArtemisTestCase.class, Assert.class);
Thread.currentThread().setContextClassLoader(testClassLoader);
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInputStreamWithClassLoader ois = new ObjectInputStreamWithClassLoader(bais);