Complete mock tests for the V3 AuthApi
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/eb71cedd Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/eb71cedd Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/eb71cedd Branch: refs/heads/keystonev3 Commit: eb71cedd1108d2c97c4b1f7eb736a688e2a850d0 Parents: cf0c70d Author: Ignasi Barrera <[email protected]> Authored: Tue Jan 9 12:22:06 2018 +0100 Committer: Ignasi Barrera <[email protected]> Committed: Tue Jan 9 12:22:06 2018 +0100 ---------------------------------------------------------------------- .../openstack/keystone/v3/features/AuthApi.java | 3 +- .../keystone/v3/features/AuthApiMockTest.java | 55 ++++++++++++++++++++ .../v3/internal/BaseV3KeystoneApiMockTest.java | 21 ++++++-- 3 files changed, 73 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/eb71cedd/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/AuthApi.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/AuthApi.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/AuthApi.java index 50fe55c..845c738 100644 --- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/AuthApi.java +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/AuthApi.java @@ -64,9 +64,10 @@ public interface AuthApi { @Named("token:getuser") @GET @SelectJson("user") - @Path("/tokens/{token}") + @Path("/tokens") @Fallback(NullOnNotFoundOr404.class) @Nullable + @Headers(keys = "X-Subject-Token", values = "{token}") User getUserOfToken(@PathParam("token") String token); /** http://git-wip-us.apache.org/repos/asf/jclouds/blob/eb71cedd/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/AuthApiMockTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/AuthApiMockTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/AuthApiMockTest.java index 87ca0b3..a156fad 100644 --- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/AuthApiMockTest.java +++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/AuthApiMockTest.java @@ -17,9 +17,12 @@ package org.jclouds.openstack.keystone.v3.features; import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertNull; +import static org.testng.Assert.assertTrue; import org.jclouds.openstack.keystone.v3.domain.Token; +import org.jclouds.openstack.keystone.v3.domain.User; import org.jclouds.openstack.keystone.v3.internal.BaseV3KeystoneApiMockTest; import org.testng.annotations.Test; @@ -55,4 +58,56 @@ public class AuthApiMockTest extends BaseV3KeystoneApiMockTest { assertEquals(request.getHeader("X-Subject-Token"), "foo"); } + public void testIsValidToken() throws InterruptedException { + enqueueAuthentication(server); + server.enqueue(response204()); + + boolean valid = api.getAuthApi().isValid(authToken); + assertTrue(valid); + + assertEquals(server.getRequestCount(), 2); + assertAuthentication(server); + RecordedRequest request = assertSent(server, "HEAD", "/auth/tokens"); + assertEquals(request.getHeader("X-Subject-Token"), authToken); + } + + public void testIsValidTokenReturns404() throws InterruptedException { + enqueueAuthentication(server); + server.enqueue(response404()); + + boolean valid = api.getAuthApi().isValid("foo"); + assertFalse(valid); + + assertEquals(server.getRequestCount(), 2); + assertAuthentication(server); + RecordedRequest request = assertSent(server, "HEAD", "/auth/tokens"); + assertEquals(request.getHeader("X-Subject-Token"), "foo"); + } + + public void testGetUserOfToken() throws InterruptedException { + enqueueAuthentication(server); + server.enqueue(jsonResponse("/v3/token.json")); + + User user = api.getAuthApi().getUserOfToken(authToken); + + assertEquals(user, tokenFromResource("/v3/token.json").user()); + + assertEquals(server.getRequestCount(), 2); + assertAuthentication(server); + RecordedRequest request = assertSent(server, "GET", "/auth/tokens"); + assertEquals(request.getHeader("X-Subject-Token"), authToken); + } + + public void testGetUserOfTokenReturns404() throws InterruptedException { + enqueueAuthentication(server); + server.enqueue(response404()); + + User user = api.getAuthApi().getUserOfToken("foo"); + assertNull(user); + + assertEquals(server.getRequestCount(), 2); + assertAuthentication(server); + RecordedRequest request = assertSent(server, "GET", "/auth/tokens"); + assertEquals(request.getHeader("X-Subject-Token"), "foo"); + } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/eb71cedd/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/internal/BaseV3KeystoneApiMockTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/internal/BaseV3KeystoneApiMockTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/internal/BaseV3KeystoneApiMockTest.java index 60fdb41..914f760 100644 --- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/internal/BaseV3KeystoneApiMockTest.java +++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/internal/BaseV3KeystoneApiMockTest.java @@ -145,10 +145,11 @@ public class BaseV3KeystoneApiMockTest { } protected void assertAuthentication(MockWebServer server) throws InterruptedException { - assertSent(server, "POST", "/auth/tokens", stringFromResource("/v3/auth-password-scoped.json")); + RecordedRequest request = assertSentNoAuth(server, "POST", "/auth/tokens"); + assertBody(request, stringFromResource("/v3/auth-password-scoped.json")); } - - protected RecordedRequest assertSent(MockWebServer server, String method, String path) throws InterruptedException { + + private RecordedRequest assertSentNoAuth(MockWebServer server, String method, String path) throws InterruptedException { RecordedRequest request = server.takeRequest(); assertEquals(request.getMethod(), method); assertEquals(request.getPath(), path); @@ -156,13 +157,23 @@ public class BaseV3KeystoneApiMockTest { return request; } + protected RecordedRequest assertSent(MockWebServer server, String method, String path) throws InterruptedException { + RecordedRequest request = assertSentNoAuth(server, method, path); + assertEquals(request.getHeader("X-Auth-Token"), authToken); + return request; + } + protected RecordedRequest assertSent(MockWebServer server, String method, String path, String json) throws InterruptedException { RecordedRequest request = assertSent(server, method, path); - assertEquals(request.getHeader("Content-Type"), "application/json"); - assertEquals(parser.parse(new String(request.getBody(), Charsets.UTF_8)), parser.parse(json)); + assertBody(request, json); return request; } + + private void assertBody(RecordedRequest request, String body) { + assertEquals(request.getHeader("Content-Type"), "application/json"); + assertEquals(parser.parse(new String(request.getBody(), Charsets.UTF_8)), parser.parse(body)); + } protected Token tokenFromResource(String resource) { return onlyObjectFromResource(resource, new TypeToken<Map<String, Token>>() {
