aboutsummaryrefslogtreecommitdiffstats
path: root/controller-api/src/test
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2019-11-07 11:20:43 +0100
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2019-11-07 11:20:43 +0100
commitc3c189e1d9836cd985eaae0549390323900472cc (patch)
treedcbf853fb2cf10df1f699d603fa236f803f214bd /controller-api/src/test
parentc4d93cc28d1f60c8b1c0da528a5c5be5fa73ec10 (diff)
Add type representing an archive of flag data files
Diffstat (limited to 'controller-api/src/test')
-rw-r--r--controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/SystemFlagsDataArchiveTest.java89
-rw-r--r--controller-api/src/test/resources/system-flags/flags/my-test-flag/default.json8
-rw-r--r--controller-api/src/test/resources/system-flags/flags/my-test-flag/main.controller.json8
-rw-r--r--controller-api/src/test/resources/system-flags/flags/my-test-flag/main.json8
-rw-r--r--controller-api/src/test/resources/system-flags/flags/my-test-flag/main.prod.json8
-rw-r--r--controller-api/src/test/resources/system-flags/flags/my-test-flag/main.prod.us-west-1.json8
6 files changed, 129 insertions, 0 deletions
diff --git a/controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/SystemFlagsDataArchiveTest.java b/controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/SystemFlagsDataArchiveTest.java
new file mode 100644
index 00000000000..eb0e90f8ca1
--- /dev/null
+++ b/controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/SystemFlagsDataArchiveTest.java
@@ -0,0 +1,89 @@
+// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+package com.yahoo.vespa.hosted.controller.api.systemflags.v1;
+
+import com.yahoo.config.provision.Environment;
+import com.yahoo.config.provision.RegionName;
+import com.yahoo.config.provision.SystemName;
+import com.yahoo.config.provision.zone.ZoneId;
+import com.yahoo.vespa.athenz.api.AthenzService;
+import com.yahoo.vespa.flags.FetchVector;
+import com.yahoo.vespa.flags.RawFlag;
+import com.yahoo.vespa.flags.json.FlagData;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URI;
+import java.nio.file.Paths;
+import java.util.Map;
+import java.util.Set;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * @author bjorncs
+ */
+public class SystemFlagsDataArchiveTest {
+
+ private static final SystemName SYSTEM = SystemName.main;
+
+ @Rule
+ public final TemporaryFolder temporaryFolder = new TemporaryFolder();
+
+ private static FlagsTarget mainControllerTarget = FlagsTarget.forController(SYSTEM);
+ private static FlagsTarget prodUsWestCfgTarget = createConfigserverTarget(Environment.prod, "us-west-1");
+ private static FlagsTarget prodUsEast3CfgTarget = createConfigserverTarget(Environment.prod, "us-east-3");
+ private static FlagsTarget devUsEast1CfgTarget = createConfigserverTarget(Environment.dev, "us-east-1");
+
+ private static FlagsTarget createConfigserverTarget(Environment environment, String region) {
+ return new ConfigserverFlagsTarget(
+ SYSTEM,
+ ZoneId.from(environment, RegionName.from(region)),
+ URI.create("https://cfg-" + region),
+ new AthenzService("vespa.cfg-" + region));
+ }
+
+ @Test
+ public void can_serialize_and_deserialize_archive() throws IOException {
+ File tempFile = temporaryFolder.newFile("serialized-flags-archive");
+ try (OutputStream out = new BufferedOutputStream(new FileOutputStream(tempFile))) {
+ var archive = SystemFlagsDataArchive.fromDirectory(Paths.get("src/test/resources/system-flags/"));
+ archive.toZip(out);
+ }
+ try (InputStream in = new BufferedInputStream(new FileInputStream(tempFile))) {
+ SystemFlagsDataArchive archive = SystemFlagsDataArchive.fromZip(in);
+ assertArchiveReturnsCorrectDataForTarget(archive);
+ }
+ }
+
+ @Test
+ public void retrieves_correct_flag_data_for_target() {
+ var archive = SystemFlagsDataArchive.fromDirectory(Paths.get("src/test/resources/system-flags/"));
+ assertArchiveReturnsCorrectDataForTarget(archive);
+ }
+
+ private static void assertArchiveReturnsCorrectDataForTarget(SystemFlagsDataArchive archive) {
+ assertFlagDataHasValue(archive, mainControllerTarget, "main.controller");
+ assertFlagDataHasValue(archive, prodUsWestCfgTarget, "main.prod.us-west-1.json");
+ assertFlagDataHasValue(archive, prodUsEast3CfgTarget, "main.prod");
+ assertFlagDataHasValue(archive, devUsEast1CfgTarget, "main");
+ }
+
+ private static void assertFlagDataHasValue(SystemFlagsDataArchive archive, FlagsTarget target, String value) {
+ Set<FlagData> data = archive.flagData(target);
+ assertThat(data).hasSize(1);
+ FlagData flagData = data.iterator().next();
+ RawFlag rawFlag = flagData.resolve(FetchVector.fromMap(Map.of())).get();
+ assertThat(rawFlag.asJson()).isEqualTo(String.format("\"%s\"", value));
+ }
+
+} \ No newline at end of file
diff --git a/controller-api/src/test/resources/system-flags/flags/my-test-flag/default.json b/controller-api/src/test/resources/system-flags/flags/my-test-flag/default.json
new file mode 100644
index 00000000000..5924eb860c0
--- /dev/null
+++ b/controller-api/src/test/resources/system-flags/flags/my-test-flag/default.json
@@ -0,0 +1,8 @@
+{
+ "id" : "my-test-flag",
+ "rules" : [
+ {
+ "value" : "default"
+ }
+ ]
+} \ No newline at end of file
diff --git a/controller-api/src/test/resources/system-flags/flags/my-test-flag/main.controller.json b/controller-api/src/test/resources/system-flags/flags/my-test-flag/main.controller.json
new file mode 100644
index 00000000000..2860c833533
--- /dev/null
+++ b/controller-api/src/test/resources/system-flags/flags/my-test-flag/main.controller.json
@@ -0,0 +1,8 @@
+{
+ "id" : "my-test-flag",
+ "rules" : [
+ {
+ "value" : "main.controller"
+ }
+ ]
+} \ No newline at end of file
diff --git a/controller-api/src/test/resources/system-flags/flags/my-test-flag/main.json b/controller-api/src/test/resources/system-flags/flags/my-test-flag/main.json
new file mode 100644
index 00000000000..d94390cd2a4
--- /dev/null
+++ b/controller-api/src/test/resources/system-flags/flags/my-test-flag/main.json
@@ -0,0 +1,8 @@
+{
+ "id" : "my-test-flag",
+ "rules" : [
+ {
+ "value" : "main"
+ }
+ ]
+} \ No newline at end of file
diff --git a/controller-api/src/test/resources/system-flags/flags/my-test-flag/main.prod.json b/controller-api/src/test/resources/system-flags/flags/my-test-flag/main.prod.json
new file mode 100644
index 00000000000..28d2f068160
--- /dev/null
+++ b/controller-api/src/test/resources/system-flags/flags/my-test-flag/main.prod.json
@@ -0,0 +1,8 @@
+{
+ "id" : "my-test-flag",
+ "rules" : [
+ {
+ "value" : "main.prod"
+ }
+ ]
+} \ No newline at end of file
diff --git a/controller-api/src/test/resources/system-flags/flags/my-test-flag/main.prod.us-west-1.json b/controller-api/src/test/resources/system-flags/flags/my-test-flag/main.prod.us-west-1.json
new file mode 100644
index 00000000000..87b435cdab1
--- /dev/null
+++ b/controller-api/src/test/resources/system-flags/flags/my-test-flag/main.prod.us-west-1.json
@@ -0,0 +1,8 @@
+{
+ "id" : "my-test-flag",
+ "rules" : [
+ {
+ "value" : "main.prod.us-west-1.json"
+ }
+ ]
+} \ No newline at end of file