You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2024/06/18 22:54:59 UTC
(activemq-artemis) branch main updated: NO-JIRA Adding test on WildcardAddressManagerUnitTest.java
This is an automated email from the ASF dual-hosted git repository.
clebertsuconic pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git
The following commit(s) were added to refs/heads/main by this push:
new ee9d016f6c NO-JIRA Adding test on WildcardAddressManagerUnitTest.java
ee9d016f6c is described below
commit ee9d016f6c970b518cccce261da0da9dd2b9a8b5
Author: Clebert Suconic <cl...@apache.org>
AuthorDate: Tue Jun 18 18:45:31 2024 -0400
NO-JIRA Adding test on WildcardAddressManagerUnitTest.java
No semantic changes here. Just keeping a test I wrote to verif something against PR #4972
---
.../impl/WildcardAddressManagerUnitTest.java | 85 ++++++++++++++++++++++
1 file changed, 85 insertions(+)
diff --git a/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/postoffice/impl/WildcardAddressManagerUnitTest.java b/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/postoffice/impl/WildcardAddressManagerUnitTest.java
index 109197e446..faf089829c 100644
--- a/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/postoffice/impl/WildcardAddressManagerUnitTest.java
+++ b/tests/unit-tests/src/test/java/org/apache/activemq/artemis/tests/unit/core/postoffice/impl/WildcardAddressManagerUnitTest.java
@@ -22,10 +22,14 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.util.Collection;
+import java.util.HashSet;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import org.apache.activemq.artemis.api.core.ActiveMQQueueExistsException;
@@ -34,6 +38,7 @@ import org.apache.activemq.artemis.api.core.RoutingType;
import org.apache.activemq.artemis.api.core.SimpleString;
import org.apache.activemq.artemis.core.config.WildcardConfiguration;
import org.apache.activemq.artemis.core.filter.Filter;
+import org.apache.activemq.artemis.core.persistence.impl.nullpm.NullStorageManager;
import org.apache.activemq.artemis.core.postoffice.Binding;
import org.apache.activemq.artemis.core.postoffice.BindingType;
import org.apache.activemq.artemis.core.postoffice.Bindings;
@@ -46,6 +51,7 @@ import org.apache.activemq.artemis.core.server.RoutingContext;
import org.apache.activemq.artemis.core.server.cluster.impl.MessageLoadBalancingType;
import org.apache.activemq.artemis.core.server.impl.AddressInfo;
import org.apache.activemq.artemis.tests.util.ActiveMQTestBase;
+import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -380,6 +386,85 @@ public class WildcardAddressManagerUnitTest extends ActiveMQTestBase {
assertNull(oops.get(), "no exceptions");
}
+
+ @Test
+ public void testConcurrentCalls2() throws Exception {
+ WildcardAddressManager simpleAddressManager = new WildcardAddressManager(new BindingFactoryFake(), new NullStorageManager(), null);
+
+ final int threads = 20;
+ final int adds = 1_000;
+ final int keep = 100;
+
+ String address = "TheAddress";
+ SimpleString addressSimpleString = SimpleString.of(address);
+
+ simpleAddressManager.addAddressInfo(new AddressInfo(address).addRoutingType(RoutingType.MULTICAST));
+
+ ExecutorService executor = Executors.newFixedThreadPool(threads + 1);
+ runAfter(executor::shutdownNow);
+
+
+ CountDownLatch latch = new CountDownLatch(threads);
+
+ AtomicInteger errors = new AtomicInteger(0);
+ AtomicBoolean running = new AtomicBoolean(true);
+ runAfter(() -> running.set(false));
+
+ executor.execute(() -> {
+ try {
+ while (running.get()) {
+ // just to make things worse
+ simpleAddressManager.getDirectBindings(addressSimpleString);
+ }
+ } catch (Exception e) {
+ logger.warn(e.getMessage(), e);
+ errors.incrementAndGet();
+ }
+ });
+
+ for (int thread = 0; thread < threads; thread++) {
+
+ final int threadID = thread;
+
+ executor.execute(() -> {
+ try {
+ for (int add = 0; add < adds; add++) {
+ simpleAddressManager.addBinding(new BindingFake(address, "t" + threadID + "_" + add));
+ }
+
+ for (int remove = keep; remove < adds; remove++) {
+ simpleAddressManager.removeBinding(SimpleString.of("t" + threadID + "_" + remove), null);
+ }
+ } catch (Exception e) {
+ logger.warn(e.getMessage(), e);
+ errors.incrementAndGet();
+ } finally {
+ latch.countDown();
+ }
+ });
+ }
+
+ Assertions.assertTrue(latch.await(1, TimeUnit.MINUTES));
+
+ running.set(false);
+
+ Assertions.assertEquals(0, errors.get());
+
+ Collection<Binding> bindings = simpleAddressManager.getDirectBindings(SimpleString.of(address));
+
+ HashSet<String> result = new HashSet<>();
+
+ bindings.forEach(b -> result.add(b.getUniqueName().toString()));
+
+ Assertions.assertEquals(threads * keep, result.size());
+
+ for (int thread = 0; thread < threads; thread++) {
+ for (int add = 0; add < keep; add++) {
+ Assertions.assertTrue(result.contains("t" + thread + "_" + add));
+ }
+ }
+ }
+
static class BindingFactoryFake implements BindingsFactory {
@Override
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@activemq.apache.org
For additional commands, e-mail: commits-help@activemq.apache.org
For further information, visit: https://activemq.apache.org/contact