summaryrefslogtreecommitdiffstats
path: root/config-provisioning
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2022-04-19 13:58:41 +0200
committerjonmv <venstad@gmail.com>2022-04-19 13:58:41 +0200
commit9c488f426774739e758182d5eb3e2a362a127155 (patch)
treef5f8ef46a33a8ea178265f6a5b6d0c8100368d2c /config-provisioning
parent31a41c024454641b46f21d97b18babaad14e8f79 (diff)
Add patterns for region and cloud names
Diffstat (limited to 'config-provisioning')
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/AthenzDomain.java41
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/CloudName.java41
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/RegionName.java45
-rw-r--r--config-provisioning/src/test/java/com/yahoo/config/provision/IdentifierTestBase.java14
4 files changed, 32 insertions, 109 deletions
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/AthenzDomain.java b/config-provisioning/src/main/java/com/yahoo/config/provision/AthenzDomain.java
index 7b60d22c810..16cb3c43814 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/AthenzDomain.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/AthenzDomain.java
@@ -1,54 +1,23 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.provision;
+import ai.vespa.validation.PatternedStringWrapper;
+
import java.util.regex.Pattern;
/**
* @author mortent
*/
-public class AthenzDomain {
-
- private static final Pattern PATTERN = Pattern.compile("[a-zA-Z0-9_][a-zA-Z0-9_\\-.]*[a-zA-Z0-9_]");
+public class AthenzDomain extends PatternedStringWrapper<AthenzDomain> {
- private final String name;
+ private static final Pattern PATTERN = Pattern.compile("[a-zA-Z0-9_][a-zA-Z0-9_.-]*[a-zA-Z0-9_]");
private AthenzDomain(String name) {
- // TODO bjorncs: Temporarily disable name validation
- // validateName(name);
- this.name = name;
- }
-
- private static void validateName(String name) {
- if (!PATTERN.matcher(name).matches()) {
- throw new IllegalArgumentException("Not a valid domain name: '" + name + "'");
- }
+ super(name, PATTERN, "Athenz domain");
}
public static AthenzDomain from(String value) {
return new AthenzDomain(value);
}
- public String value() { return name; }
-
- @Override
- public String toString() {
- return "AthenzDomain{" +
- "name='" + name + '\'' +
- '}';
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
-
- AthenzDomain that = (AthenzDomain) o;
-
- return name != null ? name.equals(that.name) : that.name == null;
- }
-
- @Override
- public int hashCode() {
- return name != null ? name.hashCode() : 0;
- }
}
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/CloudName.java b/config-provisioning/src/main/java/com/yahoo/config/provision/CloudName.java
index b4be3531f2a..417e381587e 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/CloudName.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/CloudName.java
@@ -1,29 +1,27 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.provision;
+import ai.vespa.validation.PatternedStringWrapper;
+
import java.util.Objects;
+import java.util.regex.Pattern;
/**
* Represents a cloud provider used in a hosted Vespa system.
*
* @author mpolden
*/
-public class CloudName implements Comparable<CloudName> {
-
- private final static CloudName defaultCloud = from("default");
+public class CloudName extends PatternedStringWrapper<CloudName> {
- private final String cloud;
+ private static final Pattern pattern = Pattern.compile("[a-z]([a-z0-9-]*[a-z0-9])*");
+ private static final CloudName defaultCloud = from("default");
private CloudName(String cloud) {
- this.cloud = cloud;
- }
-
- public String value() {
- return cloud;
+ super(cloud, pattern, "cloud name");
}
public boolean isDefault() {
- return defaultName().equals(this);
+ return equals(defaultCloud);
}
public static CloudName defaultName() {
@@ -34,27 +32,4 @@ public class CloudName implements Comparable<CloudName> {
return new CloudName(cloud);
}
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- CloudName cloudName = (CloudName) o;
- return Objects.equals(cloud, cloudName.cloud);
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(cloud);
- }
-
- @Override
- public String toString() {
- return cloud;
- }
-
- @Override
- public int compareTo(CloudName o) {
- return cloud.compareTo(o.cloud);
- }
-
}
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/RegionName.java b/config-provisioning/src/main/java/com/yahoo/config/provision/RegionName.java
index 73ad2181965..be431a5fd68 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/RegionName.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/RegionName.java
@@ -1,56 +1,35 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.provision;
-import java.util.Objects;
+import ai.vespa.validation.PatternedStringWrapper;
+
+import java.util.regex.Pattern;
/**
- * Represents an application's region, which may be any kind of string or default. This type is defined
- * in order to provide a type safe API for defining regions.
+ * A region in a hosted Vespa system.
+ * A region name must be all lowercase, start with a letter, and contain letters and digits, separated by dashes.
*
- * @author Ulf Lilleengen
- * @since 5.11
+ * @author jonmv
*/
-public class RegionName implements Comparable<RegionName> {
+public class RegionName extends PatternedStringWrapper<RegionName> {
- private final String region;
+ private static final Pattern pattern = Pattern.compile("[a-z]([a-z0-9-]*[a-z0-9])*");
+ private static final RegionName defaultName = from("default");
private RegionName(String region) {
- this.region = region;
- }
-
- @Override
- public int hashCode() {
- return region.hashCode();
- }
-
- @Override
- public boolean equals(Object obj) {
- if (!(obj instanceof RegionName)) return false;
- return Objects.equals(((RegionName) obj).region, region);
+ super(region, pattern, "region name");
}
- @Override
- public String toString() {
- return region;
- }
-
- // TODO: Add verification of region name.
public static RegionName from(String region) {
return new RegionName(region);
}
public static RegionName defaultName() {
- return new RegionName("default");
+ return defaultName;
}
public boolean isDefault() {
- return equals(RegionName.defaultName());
+ return equals(defaultName());
}
- public String value() { return region; }
-
- @Override
- public int compareTo(RegionName region) {
- return this.region.compareTo(region.region);
- }
}
diff --git a/config-provisioning/src/test/java/com/yahoo/config/provision/IdentifierTestBase.java b/config-provisioning/src/test/java/com/yahoo/config/provision/IdentifierTestBase.java
index d4edb7a14eb..fd1a9401b81 100644
--- a/config-provisioning/src/test/java/com/yahoo/config/provision/IdentifierTestBase.java
+++ b/config-provisioning/src/test/java/com/yahoo/config/provision/IdentifierTestBase.java
@@ -1,9 +1,12 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.provision;
-import com.google.common.testing.EqualsTester;
import org.junit.Test;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
@@ -12,7 +15,6 @@ import static org.junit.Assert.assertTrue;
/**
* Generic test for identifiers such as {@link Environment} and {@link RegionName}.
* @author Ulf Lilleengen
- * @since 5.23
*/
public abstract class IdentifierTestBase<ID_TYPE> {
@@ -34,10 +36,8 @@ public abstract class IdentifierTestBase<ID_TYPE> {
@Test
public void testEquals() {
- new EqualsTester()
- .addEqualityGroup(createInstance("foo"), createInstance("foo"))
- .addEqualityGroup(createInstance("bar"))
- .addEqualityGroup(createInstance("baz"))
- .testEquals();
+ assertEquals(Set.of(createInstance("foo"), createInstance("bar"), createInstance("baz")),
+ new HashSet<>(List.of(createInstance("foo"), createInstance("foo"), createInstance("bar"), createInstance("baz"))));
}
+
}