Skip to content

Commit

Permalink
ARTEMIS-4526 Moving ShutdownOnCriticalIOErrorMoveNextTest into integr…
Browse files Browse the repository at this point in the history
…ation-tests-isolated

ShutdownOnCriticalIOErrorMoveNextTest was actually my "inspiration" to have created the isolated tests module in the first place, so it would be reasonable to move it there as well.
the issue comes down to the test simulating a server failure where the server would go down abruptly causing the VM to drop / exit. In this test the nature of failure is leaving a partial shutdown where server executors are still hanging around causing a cascade leak of server pools still running.
So it is completely expected to have these threads "leaking". Hence this test should be moved into the isolated-tests.
there is no semantic / server change as part of this task. It's just moving a test to a better place.
  • Loading branch information
clebertsuconic committed Dec 5, 2023
1 parent ed929fb commit ffaa057
Showing 1 changed file with 18 additions and 42 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,14 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.activemq.artemis.tests.integration.critical;
package org.apache.activemq.artemis.tests.integration.isolated.critical;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import java.io.File;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;

import org.apache.activemq.artemis.api.core.Message;
Expand All @@ -40,59 +39,37 @@
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.util.ActiveMQTestBase;
import org.apache.activemq.artemis.tests.util.Wait;
import org.apache.activemq.artemis.utils.SpawnedVMSupport;
import org.apache.activemq.artemis.utils.Wait;
import org.junit.Assert;
import org.junit.Test;

public class ShutdownOnCriticalIOErrorMoveNextTest extends ActiveMQTestBase {

private static final int OK = 3;

public static void main(String[] arg) {
ShutdownOnCriticalIOErrorMoveNextTest testInst = new ShutdownOnCriticalIOErrorMoveNextTest();
// some methods are not static, so we need an instance
testInst.testSimplyDownAfterErrorSpawned();
}

@Test
public void testSimplyDownAfterError() throws Exception {
Process process = SpawnedVMSupport.spawnVM(ShutdownOnCriticalIOErrorMoveNextTest.class.getName());
runAfter(process::destroyForcibly);
Assert.assertTrue(process.waitFor(10, TimeUnit.SECONDS));
Assert.assertEquals(OK, process.exitValue());
}

public void testSimplyDownAfterErrorSpawned() {
try {
deleteDirectory(new File("./target/server"));
ActiveMQServer server = createServer("./target/server");
disableCheckThread();
deleteDirectory(new File("./target/server"));
ActiveMQServer server = createServer("./target/server");

server.start();
server.start();

ConnectionFactory factory = new ActiveMQConnectionFactory();
Connection connection = factory.createConnection();
ConnectionFactory factory = new ActiveMQConnectionFactory();
Connection connection = factory.createConnection();

Session session = connection.createSession();
Session session = connection.createSession();

MessageProducer producer = session.createProducer(session.createQueue("queue"));
MessageProducer producer = session.createProducer(session.createQueue("queue"));

try {
for (int i = 0; i < 500; i++) {
producer.send(session.createTextMessage("text"));
}
} catch (JMSException expected) {
try {
for (int i = 0; i < 500; i++) {
producer.send(session.createTextMessage("text"));
}

Wait.waitFor(() -> !server.isStarted());

Assert.assertFalse(server.isStarted());
System.exit(OK);
} catch (Throwable e) {
e.printStackTrace(System.out);
System.exit(-1);
} catch (JMSException expected) {
}

Wait.waitFor(() -> !server.isStarted());

Assert.assertFalse(server.isStarted());
}

ActiveMQServer createServer(String folder) throws Exception {
Expand Down Expand Up @@ -144,8 +121,7 @@ public void storeMessage(Message message) throws Exception {
Configuration createConfig(String folder) throws Exception {

Configuration configuration = createDefaultConfig(true);
configuration.setSecurityEnabled(false).setJournalMinFiles(2).setJournalFileSize(100 * 1024).setJournalType(getDefaultJournalType()).setJournalDirectory(folder + "/journal").setBindingsDirectory(folder + "/bindings").setPagingDirectory(folder + "/paging").
setLargeMessagesDirectory(folder + "/largemessage").setJournalCompactMinFiles(0).setJournalCompactPercentage(0).setClusterPassword(CLUSTER_PASSWORD).setJournalDatasync(false);
configuration.setSecurityEnabled(false).setJournalMinFiles(2).setJournalFileSize(100 * 1024).setJournalType(getDefaultJournalType()).setJournalDirectory(folder + "/journal").setBindingsDirectory(folder + "/bindings").setPagingDirectory(folder + "/paging").setLargeMessagesDirectory(folder + "/largemessage").setJournalCompactMinFiles(0).setJournalCompactPercentage(0).setClusterPassword(CLUSTER_PASSWORD).setJournalDatasync(false);
configuration.setSecurityEnabled(false);
configuration.setPersistenceEnabled(true);

Expand Down

0 comments on commit ffaa057

Please sign in to comment.