diff options
author | andreer <andreer@verizonmedia.com> | 2020-02-05 17:55:44 +0100 |
---|---|---|
committer | andreer <andreer@verizonmedia.com> | 2020-02-05 17:59:37 +0100 |
commit | ff007f2c92962583c824d105c023e7fd918410fa (patch) | |
tree | ff9e02ca2995c5456ba2a778d533904dc4ed53e5 /controller-server | |
parent | fde5808fdecd1f08afbca417bcaccd65105f8e2f (diff) |
read request_id from cameo response and store in ZK (store SANs too)
Diffstat (limited to 'controller-server')
2 files changed, 82 insertions, 3 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/EndpointCertificateMetadataSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/EndpointCertificateMetadataSerializer.java index 702234b7634..8537118d309 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/EndpointCertificateMetadataSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/EndpointCertificateMetadataSerializer.java @@ -6,6 +6,11 @@ import com.yahoo.slime.Slime; import com.yahoo.vespa.config.SlimeUtils; import com.yahoo.vespa.hosted.controller.api.integration.certificates.EndpointCertificateMetadata; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + /** * (de)serializes endpoint certificate metadata * <p> @@ -26,6 +31,8 @@ public class EndpointCertificateMetadataSerializer { private final static String keyNameField = "keyName"; private final static String certNameField = "certName"; private final static String versionField = "version"; + private final static String requestIdField = "requestId"; + private final static String requestedDnsSansField = "requestedDnsSans"; public static Slime toSlime(EndpointCertificateMetadata metadata) { Slime slime = new Slime(); @@ -33,6 +40,13 @@ public class EndpointCertificateMetadataSerializer { object.setString(keyNameField, metadata.keyName()); object.setString(certNameField, metadata.certName()); object.setLong(versionField, metadata.version()); + + metadata.request_id().ifPresent(id -> object.setString(requestIdField, id)); + metadata.requestedDnsSans().ifPresent(sans -> { + Cursor cursor = object.setArray(requestedDnsSansField); + sans.forEach(cursor::addString); + }); + return slime; } @@ -44,12 +58,24 @@ public class EndpointCertificateMetadataSerializer { inspector.asString() + "-cert", 0 ); - case OBJECT: + case OBJECT: { + Optional<String> request_id = inspector.field(requestIdField).valid() ? + Optional.of(inspector.field(requestIdField).asString()) : + Optional.empty(); + + Optional<List<String>> requestedDnsSans = inspector.field(requestedDnsSansField).valid() ? + Optional.of(IntStream.range(0, inspector.field(requestedDnsSansField).entries()) + .mapToObj(i -> inspector.field(requestedDnsSansField).entry(i).asString()).collect(Collectors.toList())) : + Optional.empty(); + return new EndpointCertificateMetadata( inspector.field(keyNameField).asString(), inspector.field(certNameField).asString(), - Math.toIntExact(inspector.field(versionField).asLong()) + Math.toIntExact(inspector.field(versionField).asLong()), + request_id, + requestedDnsSans ); + } default: throw new IllegalArgumentException("Unknown format encountered for endpoint certificate metadata!"); @@ -61,7 +87,7 @@ public class EndpointCertificateMetadataSerializer { } public static EndpointCertificateMetadata fromJsonOrTlsSecretsKeysString(String zkdata) { - if(zkdata.strip().startsWith("{")) { + if (zkdata.strip().startsWith("{")) { return fromSlime(SlimeUtils.jsonToSlime(zkdata).get()); } else { return fromTlsSecretsKeysString(zkdata); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/EndpointCertificateMetadataSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/EndpointCertificateMetadataSerializerTest.java new file mode 100644 index 00000000000..7428b9901a2 --- /dev/null +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/EndpointCertificateMetadataSerializerTest.java @@ -0,0 +1,53 @@ +package com.yahoo.vespa.hosted.controller.persistence; + +import com.yahoo.vespa.hosted.controller.api.integration.certificates.EndpointCertificateMetadata; +import org.junit.Test; + +import java.util.List; + +import static org.junit.Assert.*; + +public class EndpointCertificateMetadataSerializerTest { + + private EndpointCertificateMetadata sample = + new EndpointCertificateMetadata("keyName", "certName", 1); + private EndpointCertificateMetadata sampleWithRequestMetadata = + new EndpointCertificateMetadata("keyName", "certName", 1, "requestId", List.of("SAN1", "SAN2")); + + @Test + public void serialize() { + assertEquals( + "{\"keyName\":\"keyName\",\"certName\":\"certName\",\"version\":1}", + EndpointCertificateMetadataSerializer.toSlime(sample).toString()); + } + + @Test + public void serializeWithRequestMetadata() { + assertEquals( + "{\"keyName\":\"keyName\",\"certName\":\"certName\",\"version\":1,\"requestId\":\"requestId\",\"requestedDnsSans\":[\"SAN1\",\"SAN2\"]}", + EndpointCertificateMetadataSerializer.toSlime(sampleWithRequestMetadata).toString()); + } + + @Test + public void deserializeFromString() { + assertEquals( + new EndpointCertificateMetadata("foo-key", "foo-cert", 0), + EndpointCertificateMetadataSerializer.fromJsonOrTlsSecretsKeysString("foo")); + } + + @Test + public void deserializeFromJson() { + assertEquals( + sample, + EndpointCertificateMetadataSerializer.fromJsonOrTlsSecretsKeysString( + "{\"keyName\":\"keyName\",\"certName\":\"certName\",\"version\":1}")); + } + + @Test + public void deserializeFromJsonWithRequestMetadata() { + assertEquals( + sampleWithRequestMetadata, + EndpointCertificateMetadataSerializer.fromJsonOrTlsSecretsKeysString( + "{\"keyName\":\"keyName\",\"certName\":\"certName\",\"version\":1,\"requestId\":\"requestId\",\"requestedDnsSans\":[\"SAN1\",\"SAN2\"]}")); + } +}
\ No newline at end of file |