diff options
author | Harald Musum <musum@yahooinc.com> | 2023-08-30 10:14:25 +0200 |
---|---|---|
committer | Harald Musum <musum@yahooinc.com> | 2023-08-30 10:14:25 +0200 |
commit | fc9568032a48bebe41578c15245858ca2781aa5e (patch) | |
tree | ae7acf46160c8de3bf68fe9c9e9ee7baeee5f96a /config-model-api/src | |
parent | 306dce28ed3cfa0d2f4679fd2519db3d1ac780c7 (diff) |
Rethrow RuntimeException as IllegalArgumentException if parsing validation overrides fails
Diffstat (limited to 'config-model-api/src')
2 files changed, 31 insertions, 7 deletions
diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/ValidationOverrides.java b/config-model-api/src/main/java/com/yahoo/config/application/api/ValidationOverrides.java index a07ef4b313a..f69cfa6d4c5 100644 --- a/config-model-api/src/main/java/com/yahoo/config/application/api/ValidationOverrides.java +++ b/config-model-api/src/main/java/com/yahoo/config/application/api/ValidationOverrides.java @@ -104,7 +104,7 @@ public class ValidationOverrides { try { return fromXml(IOUtils.readAll(reader)); } catch (IOException e) { - throw new IllegalArgumentException("Could not read deployment spec", e); + throw new IllegalArgumentException("Could not read validation-overrides", e); } } @@ -123,12 +123,16 @@ public class ValidationOverrides { Element root = XML.getDocument(xmlForm).getDocumentElement(); List<ValidationOverrides.Allow> overrides = new ArrayList<>(); for (Element allow : XML.getChildren(root, "allow")) { - Instant until = LocalDate.parse(allow.getAttribute("until"), DateTimeFormatter.ISO_DATE) - .atStartOfDay().atZone(ZoneOffset.UTC).toInstant() - .plus(Duration.ofDays(1)); // Make the override valid *on* the "until" date - Optional<ValidationId> validationId = ValidationId.from(XML.getValue(allow)); - // skip unknown ids as they may be valid for other model versions - validationId.ifPresent(id -> overrides.add(new Allow(id, until))); + try { + Instant until = LocalDate.parse(allow.getAttribute("until"), DateTimeFormatter.ISO_DATE) + .atStartOfDay().atZone(ZoneOffset.UTC).toInstant() + .plus(Duration.ofDays(1)); // Make the override valid *on* the "until" date + Optional<ValidationId> validationId = ValidationId.from(XML.getValue(allow)); + // skip unknown ids as they may be valid for other model versions + validationId.ifPresent(id -> overrides.add(new Allow(id, until))); + } catch (RuntimeException e) { + throw new IllegalArgumentException(e); + } } return new ValidationOverrides(overrides, xmlForm); } diff --git a/config-model-api/src/test/java/com/yahoo/config/application/api/ValidationOverrideTest.java b/config-model-api/src/test/java/com/yahoo/config/application/api/ValidationOverrideTest.java index bf71947a983..57f306bf989 100644 --- a/config-model-api/src/test/java/com/yahoo/config/application/api/ValidationOverrideTest.java +++ b/config-model-api/src/test/java/com/yahoo/config/application/api/ValidationOverrideTest.java @@ -69,6 +69,26 @@ public class ValidationOverrideTest { e.getMessage()); } } + + @Test + public void testInvalidDate() { + String validationOverrides = + "<validation-overrides>" + + " <allow until='2000-02-31'>indexing-change</allow>" + + "</validation-overrides>"; + + try { + ValidationOverrides overrides = ValidationOverrides.fromXml(new StringReader(validationOverrides)); + Instant now = ManualClock.at("2000-01-01T23:59:00"); + overrides.allows("indexing-change", now); + overrides.validate(now); + Assert.fail("Expected validation interval override validation validation failure"); + } + catch (IllegalArgumentException e) { + Assert.assertEquals("java.time.format.DateTimeParseException: Text '2000-02-31' could not be parsed: Invalid date 'FEBRUARY 31'", + e.getMessage()); + } + } @Test public void testEmpty() { |