From fc9568032a48bebe41578c15245858ca2781aa5e Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Wed, 30 Aug 2023 10:14:25 +0200 Subject: Rethrow RuntimeException as IllegalArgumentException if parsing validation overrides fails --- .../config/application/api/ValidationOverrides.java | 18 +++++++++++------- .../application/api/ValidationOverrideTest.java | 20 ++++++++++++++++++++ 2 files changed, 31 insertions(+), 7 deletions(-) (limited to 'config-model-api/src') 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 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.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.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 = + "" + + " indexing-change" + + ""; + + 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() { -- cgit v1.2.3