summaryrefslogtreecommitdiffstats
path: root/config-provisioning
diff options
context:
space:
mode:
authorValerij Fredriksen <valerijf@yahooinc.com>2023-05-30 16:31:05 +0200
committerValerij Fredriksen <valerijf@yahooinc.com>2023-05-30 16:31:45 +0200
commit8e3d49401f0a8d24690cd29522eca1414f659263 (patch)
tree6a3f3af46236a1dd3e90517edc5d8c9e503c05d0 /config-provisioning
parent35e6dd6e6bb9785d2e701cd9312d90203ca6370b (diff)
Create singleton CloudNames for known clouds
Diffstat (limited to 'config-provisioning')
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/CloudName.java17
-rw-r--r--config-provisioning/src/test/java/com/yahoo/config/provision/CloudNameTest.java22
2 files changed, 33 insertions, 6 deletions
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 ba262136abe..e1d7afdc9f0 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
@@ -3,7 +3,6 @@ package com.yahoo.config.provision;
import ai.vespa.validation.PatternedStringWrapper;
-import java.util.Objects;
import java.util.regex.Pattern;
/**
@@ -14,17 +13,23 @@ import java.util.regex.Pattern;
public class CloudName extends PatternedStringWrapper<CloudName> {
private static final Pattern pattern = Pattern.compile("[a-z]([a-z0-9-]*[a-z0-9])*");
- public static final CloudName AWS = from("aws");
- public static final CloudName GCP = from("gcp");
- public static final CloudName DEFAULT = from("default");
- public static final CloudName YAHOO = from("yahoo");
+ public static final CloudName AWS = new CloudName("aws");
+ public static final CloudName GCP = new CloudName("gcp");
+ public static final CloudName DEFAULT = new CloudName("default");
+ public static final CloudName YAHOO = new CloudName("yahoo");
private CloudName(String cloud) {
super(cloud, pattern, "cloud name");
}
public static CloudName from(String cloud) {
- return new CloudName(cloud);
+ return switch (cloud) {
+ case "aws" -> AWS;
+ case "gcp" -> GCP;
+ case "default" -> DEFAULT;
+ case "yahoo" -> YAHOO;
+ default -> new CloudName(cloud);
+ };
}
}
diff --git a/config-provisioning/src/test/java/com/yahoo/config/provision/CloudNameTest.java b/config-provisioning/src/test/java/com/yahoo/config/provision/CloudNameTest.java
new file mode 100644
index 00000000000..b030233d459
--- /dev/null
+++ b/config-provisioning/src/test/java/com/yahoo/config/provision/CloudNameTest.java
@@ -0,0 +1,22 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.config.provision;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+/**
+ * @author freva
+ */
+class CloudNameTest {
+
+ @Test
+ void returns_same_instance_for_known_clouds() {
+ assertSame(CloudName.from("aws"), CloudName.AWS);
+ assertSame(CloudName.from("gcp"), CloudName.GCP);
+ assertSame(CloudName.from("default"), CloudName.DEFAULT);
+ assertSame(CloudName.from("yahoo"), CloudName.YAHOO);
+ assertThrows(IllegalArgumentException.class, () -> CloudName.from("aWs")); // Must be lower case
+ }
+}