diff options
author | Valerij Fredriksen <valerijf@verizonmedia.com> | 2019-10-31 23:43:35 +0100 |
---|---|---|
committer | Valerij Fredriksen <valerijf@verizonmedia.com> | 2019-10-31 23:46:22 +0100 |
commit | 232caa29debc866d83ddc31ca46533b81fe4cab0 (patch) | |
tree | 95cc033062cdf0674a5bb82e82dbe66c194ababc /controller-server | |
parent | cbd6fe217c031ab04f12f2aa70bb3e924b19790d (diff) |
Add operatorRequest() to ControllerContainerTest
Diffstat (limited to 'controller-server')
4 files changed, 50 insertions, 66 deletions
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java index 3aa46b90c01..07da3807f91 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ControllerContainerTest.java @@ -34,12 +34,16 @@ import static org.junit.Assert.assertEquals; */ public class ControllerContainerTest { + private static final AthenzUser hostedOperator = AthenzUser.fromUserId("alice"); private static final AthenzUser defaultUser = AthenzUser.fromUserId("bob"); protected JDisc container; @Before - public void startContainer() { container = JDisc.fromServicesXml(controllerServicesXml(), Networking.disable); } + public void startContainer() { + container = JDisc.fromServicesXml(controllerServicesXml(), Networking.disable); + addUserToHostedOperatorRole(hostedOperator); + } @After public void stopContainer() { container.close(); } @@ -151,10 +155,18 @@ public class ControllerContainerTest { return addIdentityToRequest(new Request(uri), defaultUser); } - protected static Request authenticatedRequest(String uri, byte[] body, Request.Method method) { + protected static Request authenticatedRequest(String uri, String body, Request.Method method) { return addIdentityToRequest(new Request(uri, body, method), defaultUser); } + protected static Request operatorRequest(String uri) { + return addIdentityToRequest(new Request(uri), hostedOperator); + } + + protected static Request operatorRequest(String uri, String body, Request.Method method) { + return addIdentityToRequest(new Request(uri, body, method), hostedOperator); + } + protected static Request addIdentityToRequest(Request request, AthenzIdentity identity) { request.getHeaders().put(IDENTITY_HEADER_NAME, identity.getFullName()); return request; diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/configserver/ConfigServerApiHandlerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/configserver/ConfigServerApiHandlerTest.java index 6d99ea4a5d2..00e90114200 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/configserver/ConfigServerApiHandlerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/configserver/ConfigServerApiHandlerTest.java @@ -5,9 +5,6 @@ import com.yahoo.application.container.handler.Request; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.zone.ZoneApi; -import com.yahoo.text.Utf8; -import com.yahoo.vespa.athenz.api.AthenzIdentity; -import com.yahoo.vespa.athenz.api.AthenzUser; import com.yahoo.vespa.hosted.controller.integration.ConfigServerProxyMock; import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock; import com.yahoo.vespa.hosted.controller.integration.ZoneRegistryMock; @@ -29,7 +26,6 @@ import static org.junit.Assert.assertFalse; */ public class ConfigServerApiHandlerTest extends ControllerContainerTest { - private static final AthenzIdentity HOSTED_VESPA_OPERATOR = AthenzUser.fromUserId("johnoperator"); private static final String responseFiles = "src/test/java/com/yahoo/vespa/hosted/controller/restapi/configserver/responses/"; private static final List<ZoneApi> zones = List.of( ZoneApiMock.fromId("prod.us-north-1"), @@ -48,7 +44,6 @@ public class ConfigServerApiHandlerTest extends ControllerContainerTest { .setZones(zones); this.tester = new ContainerControllerTester(container, responseFiles); this.proxy = (ConfigServerProxyMock) container.components().getComponent(ConfigServerProxyMock.class.getName()); - addUserToHostedOperatorRole(HOSTED_VESPA_OPERATOR); } @Test @@ -63,23 +58,23 @@ public class ConfigServerApiHandlerTest extends ControllerContainerTest { assertLastRequest("https://cfg.prod.us-north-1.test.vip:4443/", "GET"); // POST /configserver/v1/dev/us-north-2/nodes/v2/command/restart?hostname=node1 - tester.containerTester().assertResponse(hostedOperatorRequest("http://localhost:8080/configserver/v1/dev/aws-us-north-2/nodes/v2/command/restart?hostname=node1", - new byte[0], Request.Method.POST), + tester.containerTester().assertResponse(operatorRequest("http://localhost:8080/configserver/v1/dev/aws-us-north-2/nodes/v2/command/restart?hostname=node1", + "", Request.Method.POST), "ok"); // PUT /configserver/v1/prod/us-north-1/nodes/v2/state/dirty/node1 - tester.containerTester().assertResponse(hostedOperatorRequest("http://localhost:8080/configserver/v1/prod/us-north-1/nodes/v2/state/dirty/node1", - new byte[0], Request.Method.PUT), "ok"); + tester.containerTester().assertResponse(operatorRequest("http://localhost:8080/configserver/v1/prod/us-north-1/nodes/v2/state/dirty/node1", + "", Request.Method.PUT), "ok"); assertLastRequest("https://cfg.prod.us-north-1.test.vip:4443/", "PUT"); // DELETE /configserver/v1/prod/us-north-1/nodes/v2/node/node1 - tester.containerTester().assertResponse(hostedOperatorRequest("http://localhost:8080/configserver/v1/prod/controller/nodes/v2/node/node1", - new byte[0], Request.Method.DELETE), "ok"); + tester.containerTester().assertResponse(operatorRequest("http://localhost:8080/configserver/v1/prod/controller/nodes/v2/node/node1", + "", Request.Method.DELETE), "ok"); assertLastRequest("https://api.tld:4443/", "DELETE"); // PATCH /configserver/v1/prod/us-north-1/nodes/v2/node/node1 - tester.containerTester().assertResponse(hostedOperatorRequest("http://localhost:8080/configserver/v1/dev/aws-us-north-2/nodes/v2/node/node1", - Utf8.toBytes("{\"currentRestartGeneration\": 1}"), + tester.containerTester().assertResponse(operatorRequest("http://localhost:8080/configserver/v1/dev/aws-us-north-2/nodes/v2/node/node1", + "{\"currentRestartGeneration\": 1}", Request.Method.PATCH), "ok"); assertLastRequest("https://cfg.dev.aws-us-north-2.test.vip:4443/", "PATCH"); assertEquals("{\"currentRestartGeneration\": 1}", proxy.lastRequestBody().get()); @@ -102,8 +97,8 @@ public class ConfigServerApiHandlerTest extends ControllerContainerTest { @Test public void test_invalid_requests() { // POST /configserver/v1/prod/us-north-34/nodes/v2 - tester.containerTester().assertResponse(() -> hostedOperatorRequest("http://localhost:8080/configserver/v1/prod/us-north-42/nodes/v2", - new byte[0], Request.Method.POST), + tester.containerTester().assertResponse(() -> operatorRequest("http://localhost:8080/configserver/v1/prod/us-north-42/nodes/v2", + "", Request.Method.POST), "{\"error-code\":\"BAD_REQUEST\",\"message\":\"No such zone: prod.us-north-42\"}", 400); assertFalse(proxy.lastReceived().isPresent()); } @@ -113,9 +108,4 @@ public class ConfigServerApiHandlerTest extends ControllerContainerTest { assertEquals(List.of(URI.create(target)), last.getTargets()); assertEquals(com.yahoo.jdisc.http.HttpRequest.Method.valueOf(method), last.getMethod()); } - - private static Request hostedOperatorRequest(String uri, byte[] body, Request.Method method) { - return addIdentityToRequest(new Request(uri, body, method), HOSTED_VESPA_OPERATOR); - } - }
\ No newline at end of file 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 74d637499bd..13e82e5132e 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 @@ -4,8 +4,6 @@ package com.yahoo.vespa.hosted.controller.restapi.controller; import com.yahoo.application.container.handler.Request; import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.test.ManualClock; -import com.yahoo.vespa.athenz.api.AthenzIdentity; -import com.yahoo.vespa.athenz.api.AthenzUser; import com.yahoo.vespa.hosted.controller.auditlog.AuditLogger; import com.yahoo.vespa.hosted.controller.restapi.ContainerControllerTester; import com.yahoo.vespa.hosted.controller.restapi.ControllerContainerTest; @@ -27,48 +25,46 @@ import static org.junit.Assert.assertFalse; public class ControllerApiTest extends ControllerContainerTest { private static final String responseFiles = "src/test/java/com/yahoo/vespa/hosted/controller/restapi/controller/responses/"; - private static final AthenzIdentity HOSTED_VESPA_OPERATOR = AthenzUser.fromUserId("johnoperator"); private ContainerControllerTester tester; @Before public void before() { - addUserToHostedOperatorRole(HOSTED_VESPA_OPERATOR); tester = new ContainerControllerTester(container, responseFiles); } @Test public void testControllerApi() { - tester.assertResponse(authenticatedRequest("http://localhost:8080/controller/v1/", new byte[0], Request.Method.GET), new File("root.json")); + tester.assertResponse(authenticatedRequest("http://localhost:8080/controller/v1/", "", Request.Method.GET), new File("root.json")); // POST deactivates a maintenance job - tester.assertResponse(hostedOperatorRequest("http://localhost:8080/controller/v1/maintenance/inactive/DeploymentExpirer", + tester.assertResponse(operatorRequest("http://localhost:8080/controller/v1/maintenance/inactive/DeploymentExpirer", "", Request.Method.POST), "{\"message\":\"Deactivated job 'DeploymentExpirer'\"}", 200); // GET a list of all maintenance jobs - tester.assertResponse(authenticatedRequest("http://localhost:8080/controller/v1/maintenance/", new byte[0], Request.Method.GET), + tester.assertResponse(authenticatedRequest("http://localhost:8080/controller/v1/maintenance/", "", Request.Method.GET), new File("maintenance.json")); // DELETE activates maintenance job - tester.assertResponse(hostedOperatorRequest("http://localhost:8080/controller/v1/maintenance/inactive/DeploymentExpirer", + tester.assertResponse(operatorRequest("http://localhost:8080/controller/v1/maintenance/inactive/DeploymentExpirer", "", Request.Method.DELETE), "{\"message\":\"Re-activated job 'DeploymentExpirer'\"}", 200); // DELETE fails to activate unknown maintenance job - tester.assertResponse(hostedOperatorRequest("http://localhost:8080/controller/v1/maintenance/inactive/foo", + tester.assertResponse(operatorRequest("http://localhost:8080/controller/v1/maintenance/inactive/foo", "", Request.Method.DELETE), "{\"error-code\":\"NOT_FOUND\",\"message\":\"No job named 'foo'\"}", 404); // DELETE clears inactive flag for maintenance job that has been removed from the code base tester.controller().curator().writeInactiveJobs(Set.of("bar")); - tester.assertResponse(hostedOperatorRequest("http://localhost:8080/controller/v1/maintenance/inactive/bar", + tester.assertResponse(operatorRequest("http://localhost:8080/controller/v1/maintenance/inactive/bar", "", Request.Method.DELETE), "{\"message\":\"Re-activated job 'bar'\"}", 200); - tester.assertResponse(hostedOperatorRequest("http://localhost:8080/controller/v1/maintenance/inactive/bar", + tester.assertResponse(operatorRequest("http://localhost:8080/controller/v1/maintenance/inactive/bar", "", Request.Method.DELETE), "{\"error-code\":\"NOT_FOUND\",\"message\":\"No job named 'bar'\"}", 404); @@ -79,55 +75,55 @@ public class ControllerApiTest extends ControllerContainerTest { @Test public void testUpgraderApi() { // Get current configuration - tester.assertResponse(authenticatedRequest("http://localhost:8080/controller/v1/jobs/upgrader", new byte[0], Request.Method.GET), + tester.assertResponse(authenticatedRequest("http://localhost:8080/controller/v1/jobs/upgrader", "", Request.Method.GET), "{\"upgradesPerMinute\":100.0,\"confidenceOverrides\":[]}", 200); // Set invalid configuration tester.assertResponse( - hostedOperatorRequest("http://localhost:8080/controller/v1/jobs/upgrader", "{\"upgradesPerMinute\":-1}", Request.Method.PATCH), + operatorRequest("http://localhost:8080/controller/v1/jobs/upgrader", "{\"upgradesPerMinute\":-1}", Request.Method.PATCH), "{\"error-code\":\"BAD_REQUEST\",\"message\":\"Upgrades per minute must be >= 0, got -1.0\"}", 400); // Ignores unrecognized field tester.assertResponse( - hostedOperatorRequest("http://localhost:8080/controller/v1/jobs/upgrader","{\"foo\":\"bar\"}", Request.Method.PATCH), + operatorRequest("http://localhost:8080/controller/v1/jobs/upgrader", "{\"foo\":\"bar\"}", Request.Method.PATCH), "{\"error-code\":\"BAD_REQUEST\",\"message\":\"No such modifiable field(s)\"}", 400); // Set upgrades per minute tester.assertResponse( - hostedOperatorRequest("http://localhost:8080/controller/v1/jobs/upgrader", "{\"upgradesPerMinute\":42.0}", Request.Method.PATCH), + operatorRequest("http://localhost:8080/controller/v1/jobs/upgrader", "{\"upgradesPerMinute\":42.0}", Request.Method.PATCH), "{\"upgradesPerMinute\":42.0,\"confidenceOverrides\":[]}", 200); // Set target major version tester.assertResponse( - hostedOperatorRequest("http://localhost:8080/controller/v1/jobs/upgrader", "{\"targetMajorVersion\":6}", Request.Method.PATCH), + operatorRequest("http://localhost:8080/controller/v1/jobs/upgrader", "{\"targetMajorVersion\":6}", Request.Method.PATCH), "{\"upgradesPerMinute\":42.0,\"targetMajorVersion\":6,\"confidenceOverrides\":[]}", 200); // Clear target major version tester.assertResponse( - hostedOperatorRequest("http://localhost:8080/controller/v1/jobs/upgrader", "{\"targetMajorVersion\":null}", Request.Method.PATCH), + operatorRequest("http://localhost:8080/controller/v1/jobs/upgrader", "{\"targetMajorVersion\":null}", Request.Method.PATCH), "{\"upgradesPerMinute\":42.0,\"confidenceOverrides\":[]}", 200); // Override confidence tester.assertResponse( - hostedOperatorRequest("http://localhost:8080/controller/v1/jobs/upgrader/confidence/6.42", "broken", Request.Method.POST), + operatorRequest("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), + operatorRequest("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), + operatorRequest("http://localhost:8080/controller/v1/jobs/upgrader/confidence/6.42", "", Request.Method.DELETE), "{\"upgradesPerMinute\":42.0,\"confidenceOverrides\":[{\"6.43\":\"broken\"}]}", 200); @@ -160,8 +156,4 @@ public class ControllerApiTest extends ControllerContainerTest { tester.assertResponse(authenticatedRequest("http://localhost:8080/controller/v1/auditlog/"), new File("auditlog.json")); } - private static Request hostedOperatorRequest(String uri, String body, Request.Method method) { - return addIdentityToRequest(new Request(uri, body, method), HOSTED_VESPA_OPERATOR); - } - } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/zone/v2/ZoneApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/zone/v2/ZoneApiTest.java index bd0460d50b1..40562ba493e 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/zone/v2/ZoneApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/zone/v2/ZoneApiTest.java @@ -1,15 +1,11 @@ // Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.restapi.zone.v2; -import com.yahoo.application.container.handler.Request; import com.yahoo.application.container.handler.Request.Method; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.zone.ZoneApi; import com.yahoo.config.provision.zone.ZoneId; -import com.yahoo.text.Utf8; -import com.yahoo.vespa.athenz.api.AthenzIdentity; -import com.yahoo.vespa.athenz.api.AthenzUser; import com.yahoo.vespa.hosted.controller.integration.ConfigServerProxyMock; import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock; import com.yahoo.vespa.hosted.controller.integration.ZoneRegistryMock; @@ -31,7 +27,6 @@ import static org.junit.Assert.assertTrue; */ public class ZoneApiTest extends ControllerContainerTest { - private static final AthenzIdentity HOSTED_VESPA_OPERATOR = AthenzUser.fromUserId("johnoperator"); private static final String responseFiles = "src/test/java/com/yahoo/vespa/hosted/controller/restapi/zone/v2/responses/"; private static final List<ZoneApi> zones = List.of( ZoneApiMock.fromId("prod.us-north-1"), @@ -50,7 +45,6 @@ public class ZoneApiTest extends ControllerContainerTest { .setZones(zones); this.tester = new ContainerControllerTester(container, responseFiles); this.proxy = (ConfigServerProxyMock) container.components().getComponent(ConfigServerProxyMock.class.getName()); - addUserToHostedOperatorRole(HOSTED_VESPA_OPERATOR); } @Test @@ -71,23 +65,23 @@ public class ZoneApiTest extends ControllerContainerTest { assertLastRequest(ZoneId.from("prod", "us-north-1"), 2, "GET"); // POST /zone/v2/dev/us-north-2/nodes/v2/command/restart?hostname=node1 - tester.containerTester().assertResponse(hostedOperatorRequest("http://localhost:8080/zone/v2/dev/aws-us-north-2/nodes/v2/command/restart?hostname=node1", - new byte[0], Method.POST), + tester.containerTester().assertResponse(operatorRequest("http://localhost:8080/zone/v2/dev/aws-us-north-2/nodes/v2/command/restart?hostname=node1", + "", Method.POST), "ok"); // PUT /zone/v2/prod/us-north-1/nodes/v2/state/dirty/node1 - tester.containerTester().assertResponse(hostedOperatorRequest("http://localhost:8080/zone/v2/prod/us-north-1/nodes/v2/state/dirty/node1", - new byte[0], Method.PUT), "ok"); + tester.containerTester().assertResponse(operatorRequest("http://localhost:8080/zone/v2/prod/us-north-1/nodes/v2/state/dirty/node1", + "", Method.PUT), "ok"); assertLastRequest(ZoneId.from("prod", "us-north-1"), 2, "PUT"); // DELETE /zone/v2/prod/us-north-1/nodes/v2/node/node1 - tester.containerTester().assertResponse(hostedOperatorRequest("http://localhost:8080/zone/v2/prod/us-north-1/nodes/v2/node/node1", - new byte[0], Method.DELETE), "ok"); + tester.containerTester().assertResponse(operatorRequest("http://localhost:8080/zone/v2/prod/us-north-1/nodes/v2/node/node1", + "", Method.DELETE), "ok"); assertLastRequest(ZoneId.from("prod", "us-north-1"), 2, "DELETE"); // PATCH /zone/v2/prod/us-north-1/nodes/v2/node/node1 - tester.containerTester().assertResponse(hostedOperatorRequest("http://localhost:8080/zone/v2/dev/aws-us-north-2/nodes/v2/node/node1", - Utf8.toBytes("{\"currentRestartGeneration\": 1}"), + tester.containerTester().assertResponse(operatorRequest("http://localhost:8080/zone/v2/dev/aws-us-north-2/nodes/v2/node/node1", + "{\"currentRestartGeneration\": 1}", Method.PATCH), "ok"); assertLastRequest(ZoneId.from("dev", "aws-us-north-2"), 1, "PATCH"); assertEquals("{\"currentRestartGeneration\": 1}", proxy.lastRequestBody().get()); @@ -98,8 +92,8 @@ public class ZoneApiTest extends ControllerContainerTest { @Test public void test_invalid_requests() { // POST /zone/v2/prod/us-north-34/nodes/v2 - tester.containerTester().assertResponse(hostedOperatorRequest("http://localhost:8080/zone/v2/prod/us-north-42/nodes/v2", - new byte[0], Method.POST), + tester.containerTester().assertResponse(operatorRequest("http://localhost:8080/zone/v2/prod/us-north-42/nodes/v2", + "", Method.POST), new File("unknown-zone.json"), 400); assertFalse(proxy.lastReceived().isPresent()); } @@ -111,8 +105,4 @@ public class ZoneApiTest extends ControllerContainerTest { assertEquals(com.yahoo.jdisc.http.HttpRequest.Method.valueOf(method), last.getMethod()); } - private static Request hostedOperatorRequest(String uri, byte[] body, Request.Method method) { - return addIdentityToRequest(new Request(uri, body, method), HOSTED_VESPA_OPERATOR); - } - } |