diff options
author | jonmv <venstad@gmail.com> | 2023-09-29 14:51:40 +0200 |
---|---|---|
committer | jonmv <venstad@gmail.com> | 2023-10-02 09:51:22 +0200 |
commit | d50f5c10b14bd482a6fbd994106e6bfaa99cc9ef (patch) | |
tree | e3092f01cf23666386e30ff21738cfd4801120ec /controller-server/src/test/java | |
parent | 5c869389c7f5e600a39a8fe1ff6688bb42a19fc2 (diff) |
Test updated responses for token API
Diffstat (limited to 'controller-server/src/test/java')
2 files changed, 86 insertions, 8 deletions
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerTester.java index 4194131e7fb..83f528f5092 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerTester.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/ContainerTester.java @@ -143,6 +143,13 @@ public class ContainerTester { assertResponse(() -> request, expectedResponse, expectedStatusCode); } + public void assertJsonResponse(Supplier<Request> request, String expectedResponse, int expectedStatusCode) { + assertResponse(request, + (response) -> assertEquals(SlimeUtils.toJson(SlimeUtils.jsonToSlimeOrThrow(expectedResponse).get(), false), + SlimeUtils.toJson(SlimeUtils.jsonToSlimeOrThrow(response.getBodyAsString()).get(), false)), + expectedStatusCode); + } + public void assertResponse(Supplier<Request> request, String expectedResponse, int expectedStatusCode) { assertResponse(request, (response) -> assertEquals(expectedResponse, new String(response.getBody(), UTF_8)), diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java index 3b74fea2b9c..44cf216c131 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiCloudTest.java @@ -6,14 +6,19 @@ import com.yahoo.component.Version; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ApplicationName; import com.yahoo.config.provision.CloudAccount; +import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.InstanceName; import com.yahoo.config.provision.TenantName; import com.yahoo.restapi.RestApiException; +import com.yahoo.slime.Cursor; +import com.yahoo.slime.SlimeUtils; import com.yahoo.vespa.flags.InMemoryFlagSource; import com.yahoo.vespa.flags.PermanentFlags; import com.yahoo.vespa.hosted.controller.ControllerTester; import com.yahoo.vespa.hosted.controller.LockedTenant; import com.yahoo.vespa.hosted.controller.api.integration.billing.PlanId; +import com.yahoo.vespa.hosted.controller.api.integration.dataplanetoken.FingerPrint; +import com.yahoo.vespa.hosted.controller.api.integration.dataplanetoken.TokenId; import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationVersion; import com.yahoo.vespa.hosted.controller.api.integration.deployment.JobType; import com.yahoo.vespa.hosted.controller.api.integration.secrets.TenantSecretStore; @@ -35,8 +40,10 @@ import org.junit.jupiter.api.Test; import java.io.File; import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.concurrent.atomic.AtomicReference; import static com.yahoo.application.container.handler.Request.Method.DELETE; import static com.yahoo.application.container.handler.Request.Method.GET; @@ -470,17 +477,81 @@ public class ApplicationApiCloudTest extends ControllerContainerCloudTest { .roles(Role.developer(tenantName)), "{\"tokens\":[]}", 200); - String regexGenerateToken = "\\{\"id\":\"myTokenId\",\"token\":\"vespa_cloud_.*\",\"fingerprint\":\".*\"}"; + AtomicReference<String> tokenValue = new AtomicReference<>(); + AtomicReference<String> fingerprint = new AtomicReference<>(); tester.assertResponse(request("/application/v4/tenant/scoober/token/myTokenId", POST).roles(Role.developer(tenantName)), - (response) -> assertTrue(new String(response.getBody(), UTF_8).matches(regexGenerateToken)), - 200); - - String regexListTokens = "\\{\"tokens\":\\[\\{\"id\":\"myTokenId\",\"versions\":\\[\\{\"fingerprint\":\".*\",\"created\":\".*\",\"author\":\"user@test\",\"expiration\":\".*\"}]}]}"; - tester.assertResponse(request("/application/v4/tenant/scoober/token", GET) - .roles(Role.developer(tenantName)), - (response) -> assertTrue(new String(response.getBody(), UTF_8).matches(regexListTokens)), + (response) -> { + Cursor root = SlimeUtils.jsonToSlimeOrThrow(response.getBody()).get(); + tokenValue.set(root.field("token").asString()); + fingerprint.set(root.field("fingerprint").asString()); + assertEquals(""" + { + "id": "myTokenId", + "token": "%s", + "fingerprint": "%s", + "expiration": "2020-10-13T12:26:40Z" + } + """.formatted(tokenValue.get(), fingerprint.get()), + SlimeUtils.toJson(root, false)); + }, 200); + tester.assertJsonResponse(request("/application/v4/tenant/scoober/token", GET) + .roles(Role.developer(tenantName)), + """ + { + "tokens": [ + { + "id": "myTokenId", + "versions": [ + { + "fingerprint": "%s", + "created": "2020-09-13T12:26:40Z", + "author": "user@test", + "expiration": "2020-10-13T12:26:40Z", + "state": "deploying" + } + ] + } + ] + } + """.formatted(fingerprint.get()), + 200); + + ControllerTester wrapped = new ControllerTester(tester); + wrapped.upgradeSystem(Version.fromString("7.1")); + new DeploymentTester(wrapped).newDeploymentContext(ApplicationId.from(tenantName, applicationName, InstanceName.defaultName())) + .submit() + .deploy(); + wrapped.serviceRegistry().configServer().activeTokenFingerprints(null) + .put(HostName.of("host1"), Map.of(TokenId.of("myTokenId"), List.of(FingerPrint.of(fingerprint.get()), FingerPrint.of("ff:01")))); + + tester.assertJsonResponse(request("/application/v4/tenant/scoober/token", GET) + .roles(Role.developer(tenantName)), + """ + { + "tokens": [ + { + "id": "myTokenId", + "versions": [ + { + "fingerprint": "%s", + "created": "2020-09-13T12:26:40Z", + "author": "user@test", + "expiration": "2020-10-13T12:26:40Z", + "state": "active" + }, + { + "fingerprint": "ff:01", + "state": "deactivating" + } + ] + } + ] + } + """.formatted(fingerprint.get()), + 200); + // Rejects invalid tokenIds on create tester.assertResponse(request("/application/v4/tenant/scoober/token/foo+bar", POST).roles(Role.developer(tenantName)), "{\"error-code\":\"BAD_REQUEST\",\"message\":\"tokenId must match '[A-Za-z][A-Za-z0-9_-]{0,59}', but got: 'foo bar'\"}", |