summaryrefslogtreecommitdiffstats
path: root/config-provisioning
diff options
context:
space:
mode:
Diffstat (limited to 'config-provisioning')
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/security/DummyNodeIdentifierProvider.java31
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/security/NodeIdentifierException.java9
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/security/NodeIdentity.java23
-rw-r--r--config-provisioning/src/main/java/com/yahoo/config/provision/zone/ZoneId.java40
-rw-r--r--config-provisioning/src/test/java/com/yahoo/config/provision/ZoneIdTest.java57
5 files changed, 151 insertions, 9 deletions
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/security/DummyNodeIdentifierProvider.java b/config-provisioning/src/main/java/com/yahoo/config/provision/security/DummyNodeIdentifierProvider.java
new file mode 100644
index 00000000000..0ff0bcc26bb
--- /dev/null
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/security/DummyNodeIdentifierProvider.java
@@ -0,0 +1,31 @@
+// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.config.provision.security;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+import java.security.cert.X509Certificate;
+import java.util.List;
+
+/**
+ * @author bjorncs
+ */
+public class DummyNodeIdentifierProvider implements Provider<NodeIdentifier> {
+
+ private final ThrowingNodeIdentifier instance = new ThrowingNodeIdentifier();
+
+ @Inject
+ public DummyNodeIdentifierProvider() {}
+
+ @Override
+ public NodeIdentifier get() {
+ return instance;
+ }
+
+ private static class ThrowingNodeIdentifier implements NodeIdentifier {
+ @Override
+ public NodeIdentity identifyNode(List<X509Certificate> peerCertificateChain) {
+ throw new UnsupportedOperationException();
+ }
+ }
+}
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/security/NodeIdentifierException.java b/config-provisioning/src/main/java/com/yahoo/config/provision/security/NodeIdentifierException.java
index 795a4e8a1d2..6ceb956ccfa 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/security/NodeIdentifierException.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/security/NodeIdentifierException.java
@@ -5,7 +5,16 @@ package com.yahoo.config.provision.security;
* @author bjorncs
*/
public class NodeIdentifierException extends RuntimeException {
+
public NodeIdentifierException(String message) {
super(message);
}
+
+ public NodeIdentifierException(String message, Throwable cause) {
+ super(message, cause);
+ }
+
+ public NodeIdentifierException(Throwable cause) {
+ super(cause);
+ }
}
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/security/NodeIdentity.java b/config-provisioning/src/main/java/com/yahoo/config/provision/security/NodeIdentity.java
index ea78caaeba7..d323214297f 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/security/NodeIdentity.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/security/NodeIdentity.java
@@ -1,6 +1,7 @@
// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.config.provision.security;
+import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.HostName;
import com.yahoo.config.provision.NodeType;
@@ -17,11 +18,13 @@ public class NodeIdentity {
private final NodeType nodeType;
private final String identityName;
private final HostName hostname;
+ private final ApplicationId applicationId;
- private NodeIdentity(NodeType nodeType, String identityName, HostName hostname) {
+ private NodeIdentity(NodeType nodeType, String identityName, HostName hostname, ApplicationId applicationId) {
this.nodeType = nodeType;
this.identityName = identityName;
this.hostname = hostname;
+ this.applicationId = applicationId;
}
public NodeType nodeType() {
@@ -37,6 +40,10 @@ public class NodeIdentity {
return Optional.ofNullable(hostname);
}
+ public Optional<ApplicationId> applicationId() {
+ return Optional.ofNullable(applicationId);
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
@@ -44,12 +51,13 @@ public class NodeIdentity {
NodeIdentity that = (NodeIdentity) o;
return nodeType == that.nodeType &&
Objects.equals(identityName, that.identityName) &&
- Objects.equals(hostname, that.hostname);
+ Objects.equals(hostname, that.hostname) &&
+ Objects.equals(applicationId, that.applicationId);
}
@Override
public int hashCode() {
- return Objects.hash(nodeType, identityName, hostname);
+ return Objects.hash(nodeType, identityName, hostname, applicationId);
}
@Override
@@ -58,6 +66,7 @@ public class NodeIdentity {
"nodeType=" + nodeType +
", identityName='" + identityName + '\'' +
", hostname=" + hostname +
+ ", applicationId=" + applicationId +
'}';
}
@@ -65,6 +74,7 @@ public class NodeIdentity {
private final NodeType nodeType;
private String identityName;
private HostName hostname;
+ private ApplicationId applicationId;
public Builder(NodeType nodeType) {
this.nodeType = nodeType;
@@ -80,8 +90,13 @@ public class NodeIdentity {
return this;
}
+ public Builder applicationId(ApplicationId applicationId) {
+ this.applicationId = applicationId;
+ return this;
+ }
+
public NodeIdentity build() {
- return new NodeIdentity(nodeType, identityName, hostname);
+ return new NodeIdentity(nodeType, identityName, hostname, applicationId);
}
}
}
diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/zone/ZoneId.java b/config-provisioning/src/main/java/com/yahoo/config/provision/zone/ZoneId.java
index 7eeae10eeb8..be967c0cbfa 100644
--- a/config-provisioning/src/main/java/com/yahoo/config/provision/zone/ZoneId.java
+++ b/config-provisioning/src/main/java/com/yahoo/config/provision/zone/ZoneId.java
@@ -4,6 +4,7 @@ package com.yahoo.config.provision.zone;
import com.yahoo.config.provision.CloudName;
import com.yahoo.config.provision.Environment;
import com.yahoo.config.provision.RegionName;
+import com.yahoo.config.provision.SystemName;
import java.util.Objects;
@@ -17,24 +18,32 @@ import java.util.Objects;
public class ZoneId {
// TODO: Replace usages of environment + region with usages of this.
+ // TODO: Remove static factory methods not specifying cloud and system
+
private final Environment environment;
private final RegionName region;
private final CloudName cloud;
+ private final SystemName system;
- private ZoneId(Environment environment, RegionName region, CloudName cloud) {
+ private ZoneId(Environment environment, RegionName region, CloudName cloud, SystemName system) {
this.environment = Objects.requireNonNull(environment, "environment must be non-null");
this.region = Objects.requireNonNull(region, "region must be non-null");
this.cloud = Objects.requireNonNull(cloud, "cloud must be non-null");
+ this.system = Objects.requireNonNull(system, "system must be non-null");
}
private ZoneId(Environment environment, RegionName region) {
- this(environment, region, CloudName.defaultName());
+ this(environment, region, CloudName.defaultName(), SystemName.defaultSystem());
}
public static ZoneId from(Environment environment, RegionName region) {
return new ZoneId(environment, region);
}
+ public static ZoneId from(Environment environment, RegionName region, CloudName cloud, SystemName system) {
+ return new ZoneId(environment, region, cloud, system);
+ }
+
public static ZoneId from(String environment, String region) {
return from(Environment.from(environment), RegionName.from(region));
}
@@ -42,15 +51,26 @@ public class ZoneId {
/** Create from a serialised ZoneId. Inverse of {@code ZoneId.value()}. */
public static ZoneId from(String value) {
String[] parts = value.split("\\.");
- return from(parts[0], parts[1]);
+ switch (parts.length) {
+ case 2:
+ return from(parts[0], parts[1]);
+ case 4:
+ return from(parts[2], parts[3], parts[0], parts[1]);
+ default:
+ throw new IllegalArgumentException("Cannot deserialize zone id '" + value + "'");
+ }
}
public static ZoneId from(Environment environment, RegionName region, CloudName cloud) {
- return new ZoneId(environment, region, cloud);
+ return new ZoneId(environment, region, cloud, SystemName.defaultSystem());
}
public static ZoneId from(String environment, String region, String cloud) {
- return new ZoneId(Environment.from(environment), RegionName.from(region), CloudName.from(cloud));
+ return new ZoneId(Environment.from(environment), RegionName.from(region), CloudName.from(cloud), SystemName.defaultSystem());
+ }
+
+ public static ZoneId from(String environment, String region, String cloud, String system) {
+ return new ZoneId(Environment.from(environment), RegionName.from(region), CloudName.from(cloud), SystemName.from(system));
}
public Environment environment() {
@@ -65,17 +85,27 @@ public class ZoneId {
return cloud;
}
+ public SystemName system() {
+ return system;
+ }
+
/** Returns the serialised value of this. Inverse of {@code ZoneId.from(String value)}. */
public String value() {
return environment + "." + region;
+ // TODO: Change to the below when there only methods use constructor including cloud and system are used and
+ // all serialized values contain cloud and system
+ // return cloud + "." + system + "." + environment + "." + region;
}
@Override
public String toString() {
return "zone " + value() + " in " + cloud;
+ // TODO: Use the below (need to fix some use of toString() in tests first)
+ //return "zone " + cloud + "." + system + "." + environment + "." + region;
}
@Override
+ // TODO: Update to check cloud and system when everyone use methods that specify cloud and system
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
diff --git a/config-provisioning/src/test/java/com/yahoo/config/provision/ZoneIdTest.java b/config-provisioning/src/test/java/com/yahoo/config/provision/ZoneIdTest.java
new file mode 100644
index 00000000000..a546d429291
--- /dev/null
+++ b/config-provisioning/src/test/java/com/yahoo/config/provision/ZoneIdTest.java
@@ -0,0 +1,57 @@
+// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.config.provision;
+
+import com.yahoo.config.provision.zone.ZoneId;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * @author hmusum
+ */
+public class ZoneIdTest {
+
+ private static final Environment environment = Environment.prod;
+ private static final RegionName region = RegionName.from("moon-dark-side-1");
+ private static final CloudName cloud = CloudName.from("aws");
+ private static final SystemName system = SystemName.Public;
+
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
+ @Test
+ public void testCreatingZoneId() {
+ ZoneId zoneId = ZoneId.from(environment, region);
+ assertEquals(region, zoneId.region());
+ assertEquals(environment, zoneId.environment());
+ assertEquals(CloudName.defaultName(), zoneId.cloud());
+ assertEquals(SystemName.defaultSystem(), zoneId.system());
+
+ ZoneId zoneIdWithCloudAndSystem = ZoneId.from(environment, region, cloud, system);
+ assertEquals(region, zoneIdWithCloudAndSystem.region());
+ assertEquals(environment, zoneIdWithCloudAndSystem.environment());
+ assertEquals(cloud, zoneIdWithCloudAndSystem.cloud());
+ assertEquals(system, zoneIdWithCloudAndSystem.system());
+ }
+
+ @Test
+ public void testSerializingAndDeserializing() {
+ ZoneId zoneId = ZoneId.from(environment, region);
+ assertEquals(environment.value() + "." + region.value(), zoneId.value());
+ assertEquals(ZoneId.from(zoneId.value()), zoneId);
+
+ ZoneId zoneIdWithCloudAndSystem = ZoneId.from(environment, region, cloud, system);
+ assertEquals(environment.value() + "." + region.value(), zoneIdWithCloudAndSystem.value());
+ assertEquals(ZoneId.from(zoneIdWithCloudAndSystem.value()), zoneIdWithCloudAndSystem);
+ // TODO: Expect cloud and system to be part of deserialized value when the new format is supported everywhere
+ //assertEquals(cloud.value() + "." + system.name() + "." + environment.value() + "." + region.value() , zoneId.value());
+
+ String serializedZoneId = "some.illegal.value";
+ expectedException.expect(IllegalArgumentException.class);
+ expectedException.expectMessage("Cannot deserialize zone id '" + serializedZoneId + "'");
+ ZoneId.from(serializedZoneId);
+ }
+
+}