aboutsummaryrefslogtreecommitdiffstats
path: root/controller-api
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2021-12-14 11:27:42 +0100
committerBjørn Christian Seime <bjorncs@verizonmedia.com>2021-12-14 11:27:42 +0100
commit531511661fcd6ed393436ff906c3d65dc5a09ad2 (patch)
tree6384c73407e574f3da4f25a1965f8c67db57a712 /controller-api
parent5f2e6960cad8a3f673b726c3869a0b058fb2512f (diff)
Fail if filename refers to unknown zone or region
Diffstat (limited to 'controller-api')
-rw-r--r--controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/SystemFlagsDataArchive.java12
-rw-r--r--controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/systemflags/v1/SystemFlagsDataArchiveTest.java9
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(