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 2021/02/03 18:12:45 UTC
[activemq-artemis] branch master updated: ARTEMIS-3068 Fix
HierarchicalRepository matcher comparator
This is an automated email from the ASF dual-hosted git repository.
clebertsuconic pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git
The following commit(s) were added to refs/heads/master by this push:
new 69fb226 ARTEMIS-3068 Fix HierarchicalRepository matcher comparator
new 89aca1f This closes #3408
69fb226 is described below
commit 69fb22605405bb20d3c64853cf5e37781a2e74dc
Author: Marcos Singermann <ma...@mulesoft.com>
AuthorDate: Tue Jan 19 09:38:23 2021 -0300
ARTEMIS-3068 Fix HierarchicalRepository matcher comparator
---
.../impl/HierarchicalObjectRepository.java | 14 +++++++------
.../artemis/core/settings/RepositoryTest.java | 23 ++++++++++++++++++++++
2 files changed, 31 insertions(+), 6 deletions(-)
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/HierarchicalObjectRepository.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/HierarchicalObjectRepository.java
index c8eff01..573f40c 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/HierarchicalObjectRepository.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/settings/impl/HierarchicalObjectRepository.java
@@ -487,13 +487,15 @@ public class HierarchicalObjectRepository<T> implements HierarchicalRepository<T
String[] leftSplits = o1.split(quotedDelimiter);
String[] rightSplits = o2.split(quotedDelimiter);
for (int i = 0; i < leftSplits.length; i++) {
+ if (i >= rightSplits.length) {
+ return -1;
+ }
String left = leftSplits[i];
- if (left.equals(singleWord)) {
- if (rightSplits.length < i || !rightSplits[i].equals(singleWord)) {
- return -1;
- } else {
- return +1;
- }
+ String right = rightSplits[i];
+ if (left.equals(singleWord) && !right.equals(singleWord)) {
+ return +1;
+ } else if (!left.equals(singleWord) && right.equals(singleWord)) {
+ return -1;
}
}
}
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 7770472..e293d2b 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
@@ -76,6 +76,29 @@ public class RepositoryTest extends ActiveMQTestBase {
Assert.assertEquals("leaf", repo.getMatch("b"));
}
+ @Test
+ public void testMultipleMatchesHasRightOrder() {
+ HierarchicalRepository<String> repository = new HierarchicalObjectRepository<>();
+ repository.addMatch("a.b.c.d.e.f", "a.b.c.d.e.f");//1
+ repository.addMatch("a.b.c.d.e.*", "a.b.c.d.e.*");//2
+ repository.addMatch("a.*.*.*.*.*", "a.*.*.*.*.*");//3
+ repository.addMatch("*.b.c.d.*.f", "*.b.c.d.*.f");//4
+ repository.addMatch("*.b.*.d.*.f", "*.b.*.d.*.f");//5
+ repository.addMatch("a.b.c.d.e.#", "a.b.c.d.e.#");//6
+
+ String val = repository.getMatch("a.b.c.d.e.f");//matches all
+ Assert.assertEquals("a.b.c.d.e.f", val);
+ val = repository.getMatch("a.b.c.d.e.x");//matches 2,3,6
+ Assert.assertEquals("a.b.c.d.e.*", val);
+ val = repository.getMatch("a.b.x.d.x.f");//matches 3,5
+ Assert.assertEquals("a.*.*.*.*.*", val);
+ val = repository.getMatch("x.b.c.d.e.f");//matches 4,5
+ Assert.assertEquals("*.b.c.d.*.f", val);
+ val = repository.getMatch("x.b.x.d.e.f");//matches 5
+ Assert.assertEquals("*.b.*.d.*.f", val);
+ val = repository.getMatch("a.b.c.d.e.f.g");//matches 6
+ Assert.assertEquals("a.b.c.d.e.#", val);
+ }
@Test
public void testMatchingDocsCustomUnderscorDelimiter() throws Throwable {