diff options
author | Martin Polden <mpolden@mpolden.no> | 2018-02-26 14:03:21 +0100 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2018-02-26 14:57:54 +0100 |
commit | 61d6c3b9c64f64c72620b963a6dd5c029ee1fa6f (patch) | |
tree | ab953c10a856f55957ca61012f69da2c3251d243 /controller-server/src/test/java/com | |
parent | 48ff9e9a52610b4c60e3614e0e0fcfd713c8af0a (diff) |
Allow version confidence to be overridden
Diffstat (limited to 'controller-server/src/test/java/com')
2 files changed, 52 insertions, 7 deletions
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiTest.java index 984e184cdcf..e5f3af8c06a 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/ControllerApiTest.java @@ -47,26 +47,43 @@ public class ControllerApiTest extends ControllerContainerTest { // Get current configuration tester.assertResponse(authenticatedRequest("http://localhost:8080/controller/v1/jobs/upgrader", new byte[0], Request.Method.GET), - "{\"upgradesPerMinute\":0.5}", + "{\"upgradesPerMinute\":0.5,\"confidenceOverrides\":[]}", 200); // Set invalid configuration - ; tester.assertResponse( hostedOperatorRequest("http://localhost:8080/controller/v1/jobs/upgrader", "{\"upgradesPerMinute\":-1}", Request.Method.PATCH), "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Upgrades per minute must be >= 0\"}", 400); - // Unrecognized field + // Ignores unrecognized field tester.assertResponse( - hostedOperatorRequest("http://localhost:8080/controller/v1/jobs/upgrader","{\"foo\":bar}", Request.Method.PATCH), - "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Unable to configure upgrader with data in request: '{\\\"foo\\\":bar}'\"}", + hostedOperatorRequest("http://localhost:8080/controller/v1/jobs/upgrader","{\"foo\":\"bar\"}", Request.Method.PATCH), + "{\"error-code\":\"BAD_REQUEST\",\"message\":\"No such modifiable field(s)\"}", 400); - // Patch configuration + // Set upgrades per minute tester.assertResponse( hostedOperatorRequest("http://localhost:8080/controller/v1/jobs/upgrader", "{\"upgradesPerMinute\":42.0}", Request.Method.PATCH), - "{\"upgradesPerMinute\":42.0}", + "{\"upgradesPerMinute\":42.0,\"confidenceOverrides\":[]}", + 200); + + // Override confidence + tester.assertResponse( + hostedOperatorRequest("http://localhost:8080/controller/v1/jobs/upgrader/confidence/6.42", "broken", Request.Method.POST), + "{\"upgradesPerMinute\":42.0,\"confidenceOverrides\":[{\"6.42\":\"broken\"}]}", + 200); + + // Override confidence for another version + tester.assertResponse( + hostedOperatorRequest("http://localhost:8080/controller/v1/jobs/upgrader/confidence/6.43", "broken", Request.Method.POST), + "{\"upgradesPerMinute\":42.0,\"confidenceOverrides\":[{\"6.42\":\"broken\"},{\"6.43\":\"broken\"}]}", + 200); + + // Remove first override + tester.assertResponse( + hostedOperatorRequest("http://localhost:8080/controller/v1/jobs/upgrader/confidence/6.42", "", Request.Method.DELETE), + "{\"upgradesPerMinute\":42.0,\"confidenceOverrides\":[{\"6.43\":\"broken\"}]}", 200); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java index 5ccd1035037..27e26e3267a 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java @@ -242,6 +242,34 @@ public class VersionStatusTest { assertEquals("5.3", versions.get(2).versionNumber().toString()); } + @Test + public void testConfidenceOverride() { + DeploymentTester tester = new DeploymentTester(); + Version version0 = new Version("5.0"); + tester.upgradeSystem(version0); + + // Create and deploy application on current version + Application app = tester.createAndDeploy("app", 1, "canary"); + tester.updateVersionStatus(); + assertEquals(Confidence.high, confidence(tester.controller(), version0)); + + // Override confidence + tester.upgrader().overrideConfidence(version0, Confidence.broken); + tester.updateVersionStatus(); + assertEquals(Confidence.broken, confidence(tester.controller(), version0)); + + // New version is released and application upgrades + Version version1 = new Version("5.1"); + tester.upgradeSystem(version1); + tester.completeUpgrade(app, version1, "canary"); + tester.updateVersionStatus(); + assertEquals(Confidence.high, confidence(tester.controller(), version1)); + + // Stale override was removed + assertFalse("Stale override removed", tester.controller().curator().readConfidenceOverrides() + .keySet().contains(version0)); + } + private Confidence confidence(Controller controller, Version version) { return controller.versionStatus().versions().stream() .filter(v -> v.statistics().version().equals(version)) |