summaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
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
commit877e4a870a8876afb348700132ec2c0926a56b5f (patch)
tree80cbb659ab452b398fcef6dfaa023bd0d682f9fd /controller-server
parent5130579434ab08e66bf551ed7a7ba83b6f5e8a5c (diff)
Don't expose day in API as we don't really care about it here
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java18
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java4
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)