Skip to content

Commit 9deba31

Browse files
committed
WIP
1 parent da6dc8f commit 9deba31

File tree

2 files changed

+49
-18
lines changed

2 files changed

+49
-18
lines changed

services-api/src/main/java/io/scalecube/services/api/DynamicQualifier.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public final class DynamicQualifier {
1414
private final String qualifier;
1515
private final Pattern pattern;
1616
private final List<String> pathVariables;
17+
private final int size;
1718

1819
public DynamicQualifier(String qualifier) {
1920
if (!qualifier.contains(":")) {
@@ -34,9 +35,10 @@ public DynamicQualifier(String qualifier) {
3435
}
3536
sb.setLength(sb.length() - 1);
3637

37-
this.pattern = Pattern.compile(sb.toString());
3838
this.qualifier = qualifier;
39+
this.pattern = Pattern.compile(sb.toString());
3940
this.pathVariables = Collections.unmodifiableList(pathVariables);
41+
this.size = sizeOf(qualifier);
4042
}
4143

4244
public String qualifier() {
@@ -51,7 +53,15 @@ public List<String> pathVariables() {
5153
return pathVariables;
5254
}
5355

56+
public int size() {
57+
return size;
58+
}
59+
5460
public Map<String, String> matchQualifier(String input) {
61+
if (size != sizeOf(input)) {
62+
return null;
63+
}
64+
5565
final var matcher = pattern.matcher(input);
5666
if (!matcher.matches()) {
5767
return null;
@@ -68,6 +78,16 @@ public Map<String, String> matchQualifier(String input) {
6878
return map;
6979
}
7080

81+
private static int sizeOf(String value) {
82+
int count = 0;
83+
for (int i = 0, length = value.length(); i < length; i++) {
84+
if (value.charAt(i) == '/') {
85+
count++;
86+
}
87+
}
88+
return count;
89+
}
90+
7191
@Override
7292
public boolean equals(Object o) {
7393
if (this == o) {
@@ -90,6 +110,7 @@ public String toString() {
90110
.add("qualifier='" + qualifier + "'")
91111
.add("pattern=" + pattern)
92112
.add("pathVariables=" + pathVariables)
113+
.add("size=" + size)
93114
.toString();
94115
}
95116
}
Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,58 @@
11
package io.scalecube.services.api;
22

3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertNotNull;
5+
import static org.junit.jupiter.api.Assertions.assertNull;
6+
import static org.junit.jupiter.api.Assertions.assertThrows;
7+
38
import java.util.UUID;
4-
import org.junit.jupiter.api.Assertions;
59
import org.junit.jupiter.api.Test;
610

711
class DynamicQualifierTest {
812

13+
@Test
14+
void testIllegalArgument() {
15+
assertThrows(IllegalArgumentException.class, () -> new DynamicQualifier("v1/foo/bar"));
16+
}
17+
918
@Test
1019
void testNoMatches() {
1120
final var qualifier = new DynamicQualifier("v1/foo/:foo/bar/:bar");
12-
Assertions.assertNull(qualifier.matchQualifier("v1/foo/bar"));
21+
assertNull(qualifier.matchQualifier("v1/foo/bar"));
1322
}
1423

1524
@Test
16-
void testIllegalArgument() {
17-
Assertions.assertThrows(
18-
IllegalArgumentException.class, () -> new DynamicQualifier("v1/foo/bar"));
25+
void testStrictMatching() {
26+
final var qualifier = new DynamicQualifier("v1/foo/:foo");
27+
assertNotNull(qualifier.matchQualifier("v1/foo/123"));
28+
assertNull(qualifier.matchQualifier("v1/foo/123/bar/456/baz/678"));
1929
}
2030

2131
@Test
22-
void testQualifierEquality() {
32+
void testEquality() {
2333
final var qualifier1 = new DynamicQualifier("v1/foo/:foo/bar/:bar");
2434
final var qualifier2 = new DynamicQualifier("v1/foo/:foo/bar/:bar");
25-
Assertions.assertEquals(qualifier1, qualifier2);
35+
assertEquals(qualifier1, qualifier2);
2636
}
2737

2838
@Test
29-
void testMatchQualifierSinglePathVariable() {
39+
void testMatchSinglePathVariable() {
3040
final var userName = UUID.randomUUID().toString();
3141
final var qualifier = new DynamicQualifier("v1/foo/bar/:userName");
3242
final var map = qualifier.matchQualifier("v1/foo/bar/" + userName);
33-
Assertions.assertNotNull(map);
34-
Assertions.assertEquals(1, map.size());
35-
Assertions.assertEquals(userName, map.get("userName"));
43+
assertNotNull(map);
44+
assertEquals(1, map.size());
45+
assertEquals(userName, map.get("userName"));
3646
}
3747

3848
@Test
39-
void testMatchQualifierMultiplePathVariables() {
49+
void testMatchMultiplePathVariables() {
4050
final var qualifier = new DynamicQualifier("v1/foo/:foo/bar/:bar/baz/:baz");
4151
final var map = qualifier.matchQualifier("v1/foo/123/bar/456/baz/678");
42-
Assertions.assertNotNull(map);
43-
Assertions.assertEquals(3, map.size());
44-
Assertions.assertEquals("123", map.get("foo"));
45-
Assertions.assertEquals("456", map.get("bar"));
46-
Assertions.assertEquals("678", map.get("baz"));
52+
assertNotNull(map);
53+
assertEquals(3, map.size());
54+
assertEquals("123", map.get("foo"));
55+
assertEquals("456", map.get("bar"));
56+
assertEquals("678", map.get("baz"));
4757
}
4858
}

0 commit comments

Comments
 (0)