Skip to content

Commit feee49c

Browse files
committed
namespaces: allow '=' and ';' in names
Signed-off-by: Maciej Obuchowski <[email protected]>
1 parent b583633 commit feee49c

File tree

2 files changed

+40
-3
lines changed

2 files changed

+40
-3
lines changed

api/src/main/java/marquez/common/models/NamespaceName.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,16 @@ public final class NamespaceName {
2121
private static final int MIN_SIZE = 1;
2222
private static final int MAX_SIZE = 1024;
2323
private static final Pattern PATTERN =
24-
Pattern.compile(String.format("^[a-zA-Z:/0-9_\\-\\.]{%d,%d}$", MIN_SIZE, MAX_SIZE));
24+
Pattern.compile(String.format("^[a-zA-Z:;=/0-9_\\-\\.]{%d,%d}$", MIN_SIZE, MAX_SIZE));
2525

2626
@Getter private final String value;
2727

2828
public NamespaceName(@NonNull final String value) {
2929
checkArgument(
3030
PATTERN.matcher(value).matches(),
3131
"namespace '%s' must contain only letters (a-z, A-Z), numbers (0-9), "
32-
+ "underscores (_), dashes (-), colons (:), slashes (/) or dots (.) with a maximum "
33-
+ "length of %s characters.",
32+
+ "underscores (_), dashes (-), colons (:), equals (=), semicolons (;), slashes (/) "
33+
+ "or dots (.) with a maximum length of %s characters.",
3434
value,
3535
MAX_SIZE);
3636
this.value = value;
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package marquez.common.models;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import org.junit.jupiter.api.Assertions;
6+
import org.junit.jupiter.api.Test;
7+
import org.junit.jupiter.params.ParameterizedTest;
8+
import org.junit.jupiter.params.provider.ValueSource;
9+
10+
@org.junit.jupiter.api.Tag("UnitTests")
11+
public class NamespaceNameTest {
12+
13+
@ParameterizedTest
14+
@ValueSource(strings = {
15+
"DEFAULT",
16+
"database://localhost:1234",
17+
"s3://bucket",
18+
"bigquery:",
19+
"sqlserver://synapse-test-test001.sql.azuresynapse.net;databaseName=TESTPOOL1;",
20+
"\u003D"
21+
})
22+
void testValidNamespaceName(String name) {
23+
assertThat(NamespaceName.of(name).getValue()).isEqualTo(name);
24+
}
25+
26+
@ParameterizedTest
27+
@ValueSource(strings = {
28+
"@@@",
29+
"\uD83D\uDE02",
30+
"!",
31+
""
32+
})
33+
void testInvalidNamespaceName(String name) {
34+
Assertions.assertThrows(IllegalArgumentException.class, () -> NamespaceName.of(name));
35+
}
36+
37+
}

0 commit comments

Comments
 (0)