diff options
author | jonmv <venstad@gmail.com> | 2022-04-19 13:58:41 +0200 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2022-04-19 13:58:41 +0200 |
commit | 9c488f426774739e758182d5eb3e2a362a127155 (patch) | |
tree | f5f8ef46a33a8ea178265f6a5b6d0c8100368d2c /config-provisioning | |
parent | 31a41c024454641b46f21d97b18babaad14e8f79 (diff) |
Add patterns for region and cloud names
Diffstat (limited to 'config-provisioning')
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")))); } + } |