diff options
author | Øyvind Grønnesby <oyving@verizonmedia.com> | 2019-10-08 10:31:42 +0200 |
---|---|---|
committer | Øyvind Grønnesby <oyving@verizonmedia.com> | 2019-10-08 10:31:42 +0200 |
commit | 877e4a870a8876afb348700132ec2c0926a56b5f (patch) | |
tree | 80cbb659ab452b398fcef6dfaa023bd0d682f9fd /controller-server | |
parent | 5130579434ab08e66bf551ed7a7ba83b6f5e8a5c (diff) |
Don't expose day in API as we don't really care about it here
Diffstat (limited to 'controller-server')
2 files changed, 12 insertions, 10 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java index 6561d03e3d8..0a049d65061 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java @@ -113,6 +113,7 @@ import java.util.Scanner; import java.util.Set; import java.util.StringJoiner; import java.util.logging.Level; +import java.util.regex.Pattern; import java.util.stream.Collectors; import static com.yahoo.jdisc.Response.Status.BAD_REQUEST; @@ -380,14 +381,15 @@ public class ApplicationApiHandler extends LoggingRequestHandler { } private LocalDate tenantCostParseDate(String dateString) { - var formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); - - try { - // Always set the date to the first of the month as we only care about - // year and month in this API. - return LocalDate.parse(dateString, formatter).withDayOfMonth(1); - } catch (DateTimeParseException e) { - throw new IllegalArgumentException("Could not parse date parameter: " + Exceptions.toMessageString(e)); + var monthPattern = Pattern.compile("^(?<year>[0-9]{4})-(?<month>[0-9]{2})$"); + var matcher = monthPattern.matcher(dateString); + + if (matcher.matches()) { + var year = Integer.parseInt(matcher.group("year")); + var month = Integer.parseInt(matcher.group("month")); + return LocalDate.of(year, month, 1); + } else { + throw new IllegalArgumentException("Could not parse year-month '" + dateString + "'"); } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java index 7543d18ad21..3793749fee0 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java @@ -188,7 +188,7 @@ public class ApplicationApiTest extends ControllerContainerTest { "{\"months\":[]}"); // GET cost for a month for a tenant - tester.assertResponse(request("/application/v4/tenant/tenant1/cost/2018-01-01", GET).userIdentity(USER_ID).oktaAccessToken(OKTA_AT), + tester.assertResponse(request("/application/v4/tenant/tenant1/cost/2018-01", GET).userIdentity(USER_ID).oktaAccessToken(OKTA_AT), "{}"); // Add another Athens domain, so we can try to create more tenants @@ -1122,7 +1122,7 @@ public class ApplicationApiTest extends ControllerContainerTest { // GET cost with invalid date string tester.assertResponse(request("/application/v4/tenant/tenant1/cost/not-a-valid-date", GET).userIdentity(USER_ID).oktaAccessToken(OKTA_AT), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Could not parse month 'not-a-valid-date'\"}", 400); + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Could not parse year-month 'not-a-valid-date'\"}", 400); // DELETE tenant tester.assertResponse(request("/application/v4/tenant/tenant1", DELETE) |