some minor fixes to keystone
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/05b9195b Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/05b9195b Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/05b9195b Branch: refs/heads/keystonev3 Commit: 05b9195b76e6ecf73ad3d3a1d6647e5b76011f24 Parents: f4250d1 Author: Andrea Turli <[email protected]> Authored: Tue Dec 19 15:04:10 2017 +0100 Committer: Andrea Turli <[email protected]> Committed: Tue Dec 19 15:04:10 2017 +0100 ---------------------------------------------------------------------- .../openstack/keystone/v3/domain/Auth.java | 2 +- .../keystone/v3/features/TokenApi.java | 11 +++- .../v3/auth/V3AuthenticationApiLiveTest.java | 68 ++++++++++++++++++++ .../keystone/v3/features/TokenApiLiveTest.java | 15 ++--- .../keystone/v3/features/TokenApiMockTest.java | 2 +- .../v3/internal/BaseV3KeystoneApiLiveTest.java | 12 +++- .../v3/internal/BaseV3KeystoneApiMockTest.java | 2 +- .../src/test/resources/logback-test.xml | 42 ------------ .../src/test/resources/logback.xml | 42 ++++++++++++ 9 files changed, 138 insertions(+), 58 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/05b9195b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/Auth.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/Auth.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/Auth.java index fb2caf5..e716d35 100644 --- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/Auth.java +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/Auth.java @@ -38,7 +38,7 @@ public abstract class Auth { public abstract List<String> methods(); @Nullable public abstract TokenAuth token(); - public abstract PasswordAuth password(); + @Nullable public abstract PasswordAuth password(); @SerializedNames({ "methods", "token", "password" }) public static Identity create(List<String> methods, TokenAuth token, PasswordAuth password) { http://git-wip-us.apache.org/repos/asf/jclouds/blob/05b9195b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/TokenApi.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/TokenApi.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/TokenApi.java index 75ade88..34d9b42 100644 --- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/TokenApi.java +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/TokenApi.java @@ -20,7 +20,11 @@ import java.util.List; import java.util.Set; import javax.inject.Named; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.HEAD; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; import javax.ws.rs.core.MediaType; import org.jclouds.Fallbacks.EmptyListOnNotFoundOr404; @@ -80,9 +84,10 @@ public interface TokenApi { * * @return true if the token is valid */ - @Named("token:valid") + @Named("token:check") @HEAD - @Path("/auth/tokens/{token}") + @Path("/auth/tokens") + @Headers( keys = "X-Subject-Token", values = "{token}") @Fallback(FalseOnNotFoundOr404.class) boolean isValid(@PathParam("token") String token); http://git-wip-us.apache.org/repos/asf/jclouds/blob/05b9195b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/auth/V3AuthenticationApiLiveTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/auth/V3AuthenticationApiLiveTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/auth/V3AuthenticationApiLiveTest.java new file mode 100644 index 0000000..55b4216 --- /dev/null +++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/auth/V3AuthenticationApiLiveTest.java @@ -0,0 +1,68 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.openstack.keystone.v3.auth; + +import static org.testng.Assert.assertNotNull; + +import org.jclouds.openstack.keystone.auth.AuthenticationApi; +import org.jclouds.openstack.keystone.auth.domain.PasswordCredentials; +import org.jclouds.openstack.keystone.auth.domain.TenantAndCredentials; +import org.jclouds.openstack.keystone.auth.domain.TokenCredentials; +import org.jclouds.openstack.keystone.auth.filters.AuthenticateRequest; +import org.jclouds.openstack.keystone.v3.KeystoneApi; +import org.jclouds.openstack.keystone.v3.internal.BaseV3KeystoneApiLiveTest; +import org.jclouds.rest.ApiContext; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import com.google.common.base.Splitter; +import com.google.common.collect.Iterables; +import com.google.common.reflect.TypeToken; + +@Test(groups = "live", testName = "V3AuthenticationApiLiveTest") +public class V3AuthenticationApiLiveTest extends BaseV3KeystoneApiLiveTest { + + private String tenant; + private String user; + private ApiContext<KeystoneApi> context; + + @BeforeClass + public void parseCredentials() { + tenant = Iterables.get(Splitter.on(":").split(identity), 0); + user = Iterables.get(Splitter.on(":").split(identity), 1); + context = newBuilder().modules(setupModules()).overrides(setupProperties()) + .build(new TypeToken<ApiContext<KeystoneApi>>() { + }); + + grabToken(context.utils().injector().getInstance(AuthenticateRequest.class)); + } + + public void testAuthenticatePassword() { + assertNotNull(api().authenticatePassword(TenantAndCredentials.<PasswordCredentials> builder().tenantName(tenant) + .credentials(PasswordCredentials.builder().username(user).password(credential).build()).build())); + } + + public void testAuthenticateToken() { + assertNotNull(api().authenticateToken(TenantAndCredentials.<TokenCredentials> builder().tenantName(tenant) + .credentials(TokenCredentials.builder().id(token).build()).build())); + } + + protected AuthenticationApi api() { + return context.utils().injector().getInstance(AuthenticationApi.class); + } + +} http://git-wip-us.apache.org/repos/asf/jclouds/blob/05b9195b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/TokenApiLiveTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/TokenApiLiveTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/TokenApiLiveTest.java index 8799efa..79e9647 100644 --- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/TokenApiLiveTest.java +++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/TokenApiLiveTest.java @@ -16,10 +16,8 @@ */ package org.jclouds.openstack.keystone.v3.features; -import com.google.common.collect.Iterables; import com.google.inject.Injector; import com.google.inject.Module; -import org.jclouds.http.HttpRequest; import org.jclouds.openstack.keystone.auth.filters.AuthenticateRequest; import org.jclouds.openstack.keystone.v3.KeystoneApi; import org.jclouds.openstack.keystone.v3.internal.BaseV3KeystoneApiLiveTest; @@ -27,11 +25,12 @@ import org.testng.annotations.Test; import java.util.Properties; +import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; + @Test(groups = "live", testName = "TokenApiLiveTest") public class TokenApiLiveTest extends BaseV3KeystoneApiLiveTest { - protected String token; - @Override protected KeystoneApi create(Properties props, Iterable<Module> modules) { Injector injector = newBuilder().modules(modules).overrides(props).buildInjector(); @@ -39,14 +38,12 @@ public class TokenApiLiveTest extends BaseV3KeystoneApiLiveTest { return injector.getInstance(KeystoneApi.class); } - // Get the token currently in use - private void grabToken(AuthenticateRequest ar) { - HttpRequest test = ar.filter(HttpRequest.builder().method("GET").endpoint(endpoint).build()); - token = Iterables.getOnlyElement(test.getHeaders().get("X-Auth-Token")); + public void testIsTokenValid() { + assertTrue(api().isValid(token)); } public void testGetToken() { - System.out.println(api().get(token)); + assertNotNull(api().get(token)); } private TokenApi api() { http://git-wip-us.apache.org/repos/asf/jclouds/blob/05b9195b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/TokenApiMockTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/TokenApiMockTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/TokenApiMockTest.java index ff64eb3..118b2fd 100644 --- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/TokenApiMockTest.java +++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/TokenApiMockTest.java @@ -54,7 +54,7 @@ public class TokenApiMockTest extends BaseV3KeystoneApiMockTest { } private Token tokenFromResource(String resource) { - return onlyObjectFromResource(resource, new TypeToken<Map<String, Token>>() { + return onlyObjectFromResource(resource, new TypeToken<Token>() { private static final long serialVersionUID = 1L; }); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/05b9195b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/internal/BaseV3KeystoneApiLiveTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/internal/BaseV3KeystoneApiLiveTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/internal/BaseV3KeystoneApiLiveTest.java index acde256..ac917a7 100644 --- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/internal/BaseV3KeystoneApiLiveTest.java +++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/internal/BaseV3KeystoneApiLiveTest.java @@ -18,12 +18,17 @@ package org.jclouds.openstack.keystone.v3.internal; import java.util.Properties; +import com.google.common.collect.Iterables; import org.jclouds.apis.BaseApiLiveTest; +import org.jclouds.http.HttpRequest; +import org.jclouds.openstack.keystone.auth.filters.AuthenticateRequest; import org.jclouds.openstack.keystone.config.KeystoneProperties; import org.jclouds.openstack.keystone.v3.KeystoneApi; public class BaseV3KeystoneApiLiveTest extends BaseApiLiveTest<KeystoneApi> { + protected String token; + public BaseV3KeystoneApiLiveTest() { provider = "openstack-keystone-3"; } @@ -31,9 +36,14 @@ public class BaseV3KeystoneApiLiveTest extends BaseApiLiveTest<KeystoneApi> { @Override protected Properties setupProperties() { Properties props = super.setupProperties(); - props.setProperty("jclouds.api-version", "v3"); setIfTestSystemPropertyPresent(props, KeystoneProperties.CREDENTIAL_TYPE); return props; } + // Get the token currently in use + protected void grabToken(AuthenticateRequest ar) { + HttpRequest test = ar.filter(HttpRequest.builder().method("GET").endpoint(endpoint).build()); + token = Iterables.getOnlyElement(test.getHeaders().get("X-Auth-Token")); + } + } http://git-wip-us.apache.org/repos/asf/jclouds/blob/05b9195b/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 1d134e0..1d87cf8 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 @@ -108,7 +108,7 @@ public class BaseV3KeystoneApiMockTest { } } - protected <T> T onlyObjectFromResource(String resourceName, TypeToken<Map<String, T>> type) { + protected <T> T onlyObjectFromResource(String resourceName, TypeToken<T> type) { // Assume JSON objects passed here will be in the form: { "entity": { ... } } String text = stringFromResource(resourceName); Map<String, T> object = json.fromJson(text, type.getType()); http://git-wip-us.apache.org/repos/asf/jclouds/blob/05b9195b/apis/openstack-keystone/src/test/resources/logback-test.xml ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/test/resources/logback-test.xml b/apis/openstack-keystone/src/test/resources/logback-test.xml deleted file mode 100644 index 4cac342..0000000 --- a/apis/openstack-keystone/src/test/resources/logback-test.xml +++ /dev/null @@ -1,42 +0,0 @@ -<?xml version="1.0"?> -<configuration scan="false"> - <appender name="FILE" class="ch.qos.logback.core.FileAppender"> - <file>target/test-data/jclouds.log</file> - <encoder> - <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern> - </encoder> - </appender> - <appender name="WIREFILE" class="ch.qos.logback.core.FileAppender"> - <file>target/test-data/jclouds-wire.log</file> - <encoder> - <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern> - </encoder> - </appender> - <appender name="COMPUTEFILE" class="ch.qos.logback.core.FileAppender"> - <file>target/jclouds-compute.log</file> - <encoder> - <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern> - </encoder> - </appender> - - <logger name="org.jclouds"> - <level value="DEBUG" /> - <appender-ref ref="FILE" /> - </logger> - <logger name="jclouds.compute"> - <level value="DEBUG" /> - <appender-ref ref="COMPUTEFILE" /> - </logger> - <logger name="jclouds.wire"> - <level value="DEBUG" /> - <appender-ref ref="WIREFILE" /> - </logger> - <logger name="jclouds.headers"> - <level value="DEBUG" /> - <appender-ref ref="WIREFILE" /> - </logger> - - <root> - <level value="INFO" /> - </root> -</configuration> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/jclouds/blob/05b9195b/apis/openstack-keystone/src/test/resources/logback.xml ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/test/resources/logback.xml b/apis/openstack-keystone/src/test/resources/logback.xml new file mode 100644 index 0000000..4cf5016 --- /dev/null +++ b/apis/openstack-keystone/src/test/resources/logback.xml @@ -0,0 +1,42 @@ +<?xml version="1.0"?> +<configuration scan="false"> + <appender name="FILE" class="ch.qos.logback.core.FileAppender"> + <file>target/test-data/jclouds.log</file> + <encoder> + <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern> + </encoder> + </appender> + <appender name="WIREFILE" class="ch.qos.logback.core.FileAppender"> + <file>target/test-data/jclouds-wire.log</file> + <encoder> + <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern> + </encoder> + </appender> + <appender name="COMPUTEFILE" class="ch.qos.logback.core.FileAppender"> + <file>target/jclouds-compute.log</file> + <encoder> + <Pattern>%d %-5p [%c] [%thread] %m%n</Pattern> + </encoder> + </appender> + + <logger name="org.jclouds"> + <level value="DEBUG" /> + <appender-ref ref="FILE" /> + </logger> + <logger name="jclouds.compute"> + <level value="DEBUG" /> + <appender-ref ref="COMPUTEFILE" /> + </logger> + <logger name="jclouds.wire"> + <level value="DEBUG" /> + <appender-ref ref="WIREFILE" /> + </logger> + <logger name="jclouds.headers"> + <level value="DEBUG" /> + <appender-ref ref="WIREFILE" /> + </logger> + + <root> + <level value="INFO" /> + </root> +</configuration> \ No newline at end of file
