diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2021-12-14 11:27:42 +0100 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2021-12-14 11:27:42 +0100 |
commit | 531511661fcd6ed393436ff906c3d65dc5a09ad2 (patch) | |
tree | 6384c73407e574f3da4f25a1965f8c67db57a712 /controller-api | |
parent | 5f2e6960cad8a3f673b726c3869a0b058fb2512f (diff) |
Fail if filename refers to unknown zone or region
Diffstat (limited to 'controller-api')
2 files changed, 17 insertions, 4 deletions
diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/SystemFlagsDataArchive.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/SystemFlagsDataArchive.java index f1e5f4ebd9d..a739a8e2b01 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/SystemFlagsDataArchive.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/SystemFlagsDataArchive.java @@ -25,7 +25,6 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Objects; @@ -73,7 +72,7 @@ public class SystemFlagsDataArchive { if (!entry.isDirectory() && name.startsWith("flags/")) { Path filePath = Paths.get(name); String rawData = new String(zipIn.readAllBytes(), StandardCharsets.UTF_8); - addFile(builder, rawData, filePath, Set.of()); + addFile(builder, rawData, filePath, Set.of(), null); } } return builder.build(); @@ -102,7 +101,7 @@ public class SystemFlagsDataArchive { if (!Files.isDirectory(absolutePath) && relativePath.startsWith("flags")) { String rawData = uncheck(() -> Files.readString(absolutePath, StandardCharsets.UTF_8)); - addFile(builder, rawData, relativePath, filenamesForSystem); + addFile(builder, rawData, relativePath, filenamesForSystem, systemDefinition); } }); return builder.build(); @@ -169,12 +168,17 @@ public class SystemFlagsDataArchive { .collect(Collectors.toSet()); } - private static void addFile(Builder builder, String rawData, Path filePath, Set<String> filenamesForSystem) { + private static void addFile(Builder builder, String rawData, Path filePath, Set<String> filenamesForSystem, + ZoneRegistry systemDefinition) { String filename = filePath.getFileName().toString(); if (filename.startsWith(".")) { return; // Ignore files starting with '.' } if (!filenamesForSystem.isEmpty() && !filenamesForSystem.contains(filename)) { + if (systemDefinition != null && filename.startsWith(systemDefinition.system().value() + '.')) { + throw new IllegalArgumentException(String.format( + "Environment or zone in filename '%s' is does not exist", filename)); + } return; // Ignore files irrelevant for system } if (!filename.endsWith(".json")) { 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 index 6564ddef81f..d1df9b095d5 100644 --- 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 @@ -130,6 +130,15 @@ public class SystemFlagsDataArchiveTest { } @Test + public void throws_exception_on_unknown_region() { + Path directory = Paths.get("src/test/resources/system-flags-with-unknown-file-name/"); + expectedException.expect(IllegalArgumentException.class); + expectedException.expectMessage( + "Environment or zone in filename 'main.prod.unknown-region.json' is does not exist"); + SystemFlagsDataArchive.fromDirectoryAndSystem(directory, createZoneRegistryMock()); + } + + @Test public void throws_on_unknown_field() { expectedException.expect(IllegalArgumentException.class); expectedException.expectMessage( |