You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2018/01/09 10:59:33 UTC
jclouds git commit: Proper configuration for Mock and Live tests
Repository: jclouds
Updated Branches:
refs/heads/apache-keystone3 930c0fe84 -> cf0c70df2
Proper configuration for Mock and Live tests
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/cf0c70df
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/cf0c70df
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/cf0c70df
Branch: refs/heads/apache-keystone3
Commit: cf0c70df2d3a697fe942c6bfbabd4e17d2b49543
Parents: 930c0fe
Author: Ignasi Barrera <na...@apache.org>
Authored: Tue Jan 9 11:59:11 2018 +0100
Committer: Ignasi Barrera <na...@apache.org>
Committed: Tue Jan 9 11:59:11 2018 +0100
----------------------------------------------------------------------
.../catalog/config/KeystoneAdminURLModule.java | 9 +++-
.../keystone/v3/KeystoneApiMetadata.java | 6 +--
.../openstack/keystone/v3/features/AuthApi.java | 2 +-
.../v2_0/extensions/RoleAdminApiLiveTest.java | 2 +-
.../extensions/ServiceAdminApiLiveTest.java | 2 +-
.../v2_0/extensions/TenantAdminApiLiveTest.java | 2 +-
.../v2_0/extensions/UserAdminApiLiveTest.java | 2 +-
.../v3/auth/V3AuthenticationApiLiveTest.java | 34 ++++--------
.../v3/auth/V3AuthenticationApiMockTest.java | 57 ++++++++++++++++----
.../keystone/v3/features/AuthApiLiveTest.java | 20 ++-----
.../keystone/v3/features/AuthApiMockTest.java | 22 ++++----
.../v3/features/CatalogApiLiveTest.java | 9 ----
.../v3/features/CatalogApiMockTest.java | 25 +++++----
.../v3/internal/BaseV3KeystoneApiLiveTest.java | 40 +++++++++-----
.../v3/internal/BaseV3KeystoneApiMockTest.java | 33 +++++++++---
.../src/test/resources/logback.xml | 2 +-
.../test/resources/v3/auth-password-scoped.json | 23 ++++++++
.../src/test/resources/v3/auth-password.json | 18 +++++++
.../test/resources/v3/auth-token-scoped.json | 17 ++++++
.../src/test/resources/v3/auth-token.json | 12 +++++
.../src/test/resources/v3/token.json | 12 ++++-
21 files changed, 235 insertions(+), 114 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/cf0c70df/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/catalog/config/KeystoneAdminURLModule.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/catalog/config/KeystoneAdminURLModule.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/catalog/config/KeystoneAdminURLModule.java
index 6f357c0..391f14d 100644
--- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/catalog/config/KeystoneAdminURLModule.java
+++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/catalog/config/KeystoneAdminURLModule.java
@@ -53,8 +53,13 @@ public class KeystoneAdminURLModule extends AbstractModule {
@Identity
protected final Supplier<URI> provideIdentityAdminUrl(final RegionIdToAdminURISupplier.Factory factory,
@ApiVersion final String version, @Provider final Supplier<URI> providerURI) {
- Supplier<URI> identityServiceForVersion = getLastValueInMap(factory.createForApiTypeAndVersion(
- ServiceType.IDENTITY, version));
+ // There is a convention to use service types such as "identityv3" for specific endpoints. let's look first for
+ // those endpoints, and fallback to the default "identity" one or the project URL.
+ Supplier<URI> identityServiceForSpecificVersionInType = getLastValueInMap(factory.createForApiTypeAndVersion(
+ ServiceType.IDENTITY + "v" + version, version));
+ Supplier<URI> identityServiceForVersion = Suppliers2.onThrowable(identityServiceForSpecificVersionInType,
+ NoSuchElementException.class,
+ getLastValueInMap(factory.createForApiTypeAndVersion(ServiceType.IDENTITY, version)));
Supplier<URI> whenIdentityServiceIsntListedFallbackToProviderURI = Suppliers2.onThrowable(
identityServiceForVersion, NoSuchElementException.class, providerURI);
Supplier<URI> whenIdentityServiceHasNoAdminURLFallbackToProviderURI = Suppliers2.or(
http://git-wip-us.apache.org/repos/asf/jclouds/blob/cf0c70df/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/KeystoneApiMetadata.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/KeystoneApiMetadata.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/KeystoneApiMetadata.java
index 37da75a..dc360d9 100644
--- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/KeystoneApiMetadata.java
+++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/KeystoneApiMetadata.java
@@ -67,12 +67,12 @@ public class KeystoneApiMetadata extends BaseHttpApiMetadata<KeystoneApi> {
protected Builder() {
id("openstack-keystone-3")
.name("OpenStack Keystone 3.x API")
- .identityName("${tenantName}:${userName} or ${userName}, if your keystone supports a default tenant")
+ .identityName("${projectName}:${userName} or ${userName}, if your keystone supports a default project")
.credentialName("${password}")
- .endpointName("Keystone base url ending in /v${jclouds.api-version}/")
+ .endpointName("Keystone V3 base URL")
.documentation(URI.create("http://api.openstack.org/"))
.version("3")
- .defaultEndpoint("http://localhost:5000/v${jclouds.api-version}/")
+ .defaultEndpoint("http://localhost/identity/v3")
.defaultProperties(KeystoneApiMetadata.defaultProperties())
.defaultModules(ImmutableSet.<Class<? extends Module>>builder()
.add(AuthenticationModule.class)
http://git-wip-us.apache.org/repos/asf/jclouds/blob/cf0c70df/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 c9896f7..50fe55c 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
@@ -76,7 +76,7 @@ public interface AuthApi {
@Named("token:check")
@HEAD
@Path("/tokens")
- @Headers( keys = "X-Subject-Token", values = "{token}")
+ @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/cf0c70df/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/RoleAdminApiLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/RoleAdminApiLiveTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/RoleAdminApiLiveTest.java
index accdf9b..01b7f8d 100644
--- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/RoleAdminApiLiveTest.java
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/RoleAdminApiLiveTest.java
@@ -59,7 +59,7 @@ public class RoleAdminApiLiveTest extends BaseKeystoneApiLiveTest {
protected void tearDown() {
if (testRole != null) {
final String roleId = testRole.getId();
- boolean success = roleAdminOption.get().delete(roleId);
+ assertTrue(roleAdminOption.get().delete(roleId));
assertTrue(retry(new Predicate<RoleAdminApi>() {
public boolean apply(RoleAdminApi roleApi) {
return roleApi.get(roleId) == null;
http://git-wip-us.apache.org/repos/asf/jclouds/blob/cf0c70df/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/ServiceAdminApiLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/ServiceAdminApiLiveTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/ServiceAdminApiLiveTest.java
index e999816..a83bed1 100644
--- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/ServiceAdminApiLiveTest.java
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/ServiceAdminApiLiveTest.java
@@ -59,7 +59,7 @@ public class ServiceAdminApiLiveTest extends BaseKeystoneApiLiveTest {
protected void tearDown() {
if (testService != null) {
final String serviceId = testService.getId();
- boolean success = serviceAdminOption.get().delete(serviceId);
+ assertTrue(serviceAdminOption.get().delete(serviceId));
assertTrue(retry(new Predicate<ServiceAdminApi>() {
public boolean apply(ServiceAdminApi serviceApi) {
return serviceApi.get(serviceId) == null;
http://git-wip-us.apache.org/repos/asf/jclouds/blob/cf0c70df/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/TenantAdminApiLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/TenantAdminApiLiveTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/TenantAdminApiLiveTest.java
index b679579..cc7f8eb 100644
--- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/TenantAdminApiLiveTest.java
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/TenantAdminApiLiveTest.java
@@ -61,7 +61,7 @@ public class TenantAdminApiLiveTest extends BaseKeystoneApiLiveTest {
protected void tearDown() {
if (testTenant != null) {
final String tenantId = testTenant.getId();
- boolean success = tenantAdminOption.get().delete(tenantId);
+ assertTrue(tenantAdminOption.get().delete(tenantId));
assertTrue(retry(new Predicate<TenantApi>() {
public boolean apply(TenantApi tenantApi) {
return tenantApi.get(tenantId) == null;
http://git-wip-us.apache.org/repos/asf/jclouds/blob/cf0c70df/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/UserAdminApiLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/UserAdminApiLiveTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/UserAdminApiLiveTest.java
index 152cc92..3859bdf 100644
--- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/UserAdminApiLiveTest.java
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/UserAdminApiLiveTest.java
@@ -60,7 +60,7 @@ public class UserAdminApiLiveTest extends BaseKeystoneApiLiveTest {
protected void tearDown() {
if (testUser != null) {
final String userId = testUser.getId();
- boolean success = userAdminOption.get().delete(userId);
+ assertTrue(userAdminOption.get().delete(userId));
assertTrue(retry(new Predicate<UserApi>() {
public boolean apply(UserApi userApi) {
return userApi.get(userId) == null;
http://git-wip-us.apache.org/repos/asf/jclouds/blob/cf0c70df/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
index d8a137e..605134d 100644
--- 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
@@ -18,52 +18,40 @@ package org.jclouds.openstack.keystone.v3.auth;
import static org.testng.Assert.assertNotNull;
-import org.jclouds.openstack.keystone.auth.AuthenticationApi;
+import java.util.Properties;
+
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() {
+ @Override
+ protected Properties setupProperties() {
+ Properties properties = super.setupProperties();
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>>() {
- private static final long serialVersionUID = 1L;
- });
-
- grabToken(context.utils().injector().getInstance(AuthenticateRequest.class));
+ return properties;
}
public void testAuthenticatePassword() {
- assertNotNull(api().authenticatePassword(TenantAndCredentials.<PasswordCredentials> builder().tenantName(tenant)
- .credentials(PasswordCredentials.builder().username(user).password(credential).build()).build()));
+ assertNotNull(authenticationApi.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);
+ assertNotNull(authenticationApi.authenticateToken(TenantAndCredentials.<TokenCredentials> builder()
+ .tenantName(tenant).credentials(TokenCredentials.builder().id(token.get()).build()).build()));
}
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/cf0c70df/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/auth/V3AuthenticationApiMockTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/auth/V3AuthenticationApiMockTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/auth/V3AuthenticationApiMockTest.java
index 4f7f2cd..c355e28 100644
--- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/auth/V3AuthenticationApiMockTest.java
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/auth/V3AuthenticationApiMockTest.java
@@ -17,7 +17,6 @@
package org.jclouds.openstack.keystone.v3.auth;
import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
import org.jclouds.openstack.keystone.auth.domain.AuthInfo;
@@ -28,35 +27,73 @@ import org.jclouds.openstack.keystone.v3.domain.Token;
import org.jclouds.openstack.keystone.v3.internal.BaseV3KeystoneApiMockTest;
import org.testng.annotations.Test;
-import com.google.common.reflect.TypeToken;
-
-import java.util.Map;
-
-@Test(groups = "unit", testName = "TokenApiMockTest", singleThreaded = true)
+@Test(groups = "unit", testName = "V3AuthenticationApiMockTest", singleThreaded = true)
public class V3AuthenticationApiMockTest extends BaseV3KeystoneApiMockTest {
public void testAuthenticatePassword() throws InterruptedException {
server.enqueue(jsonResponse("/v3/token.json"));
- AuthInfo authInfo = authenticationApi.authenticatePassword(TenantAndCredentials.<PasswordCredentials>builder().credentials(PasswordCredentials.builder().username("user").password("pwd").build()).build());
+ TenantAndCredentials<PasswordCredentials> credentials = TenantAndCredentials.<PasswordCredentials> builder()
+ .tenantName("project")
+ .credentials(PasswordCredentials.builder().username("identity").password("credential").build()).build();
+
+ AuthInfo authInfo = authenticationApi.authenticatePassword(credentials);
+
+ assertTrue(authInfo instanceof Token);
+ assertEquals(authInfo, tokenFromResource("/v3/token.json"));
+
+ assertEquals(server.getRequestCount(), 1);
+ assertSent(server, "POST", "/auth/tokens", stringFromResource("/v3/auth-password.json"));
+ }
+
+ public void testAuthenticatePasswordScoped() throws InterruptedException {
+ server.enqueue(jsonResponse("/v3/token.json"));
+
+ TenantAndCredentials<PasswordCredentials> credentials = TenantAndCredentials.<PasswordCredentials> builder()
+ .tenantName("project")
+ .scope("project:1234567890")
+ .credentials(PasswordCredentials.builder().username("identity").password("credential").build()).build();
+
+ AuthInfo authInfo = authenticationApi.authenticatePassword(credentials);
assertTrue(authInfo instanceof Token);
assertEquals(authInfo, tokenFromResource("/v3/token.json"));
assertEquals(server.getRequestCount(), 1);
- assertSent(server, "POST", "/auth/tokens");
+ assertSent(server, "POST", "/auth/tokens", stringFromResource("/v3/auth-password-scoped.json"));
}
public void testAuthenticateToken() throws InterruptedException {
server.enqueue(jsonResponse("/v3/token.json"));
- AuthInfo authInfo = authenticationApi.authenticateToken(TenantAndCredentials.<TokenCredentials>builder().credentials(TokenCredentials.builder().id("token").build()).build());
+ TenantAndCredentials<TokenCredentials> credentials = TenantAndCredentials.<TokenCredentials> builder()
+ .tenantName("project")
+ .credentials(TokenCredentials.builder().id("token").build()).build();
+
+ AuthInfo authInfo = authenticationApi.authenticateToken(credentials);
+
+ assertTrue(authInfo instanceof Token);
+ assertEquals(authInfo, tokenFromResource("/v3/token.json"));
+
+ assertEquals(server.getRequestCount(), 1);
+ assertSent(server, "POST", "/auth/tokens", stringFromResource("/v3/auth-token.json"));
+ }
+
+ public void testAuthenticateTokenScoped() throws InterruptedException {
+ server.enqueue(jsonResponse("/v3/token.json"));
+
+ TenantAndCredentials<TokenCredentials> credentials = TenantAndCredentials.<TokenCredentials> builder()
+ .tenantName("project")
+ .scope("domain:mydomain")
+ .credentials(TokenCredentials.builder().id("token").build()).build();
+
+ AuthInfo authInfo = authenticationApi.authenticateToken(credentials);
assertTrue(authInfo instanceof Token);
assertEquals(authInfo, tokenFromResource("/v3/token.json"));
assertEquals(server.getRequestCount(), 1);
- assertSent(server, "POST", "/auth/tokens");
+ assertSent(server, "POST", "/auth/tokens", stringFromResource("/v3/auth-token-scoped.json"));
}
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/cf0c70df/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/AuthApiLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/AuthApiLiveTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/AuthApiLiveTest.java
index 325c0ae..2cfef51 100644
--- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/AuthApiLiveTest.java
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/AuthApiLiveTest.java
@@ -19,32 +19,18 @@ package org.jclouds.openstack.keystone.v3.features;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
-import java.util.Properties;
-
-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.testng.annotations.Test;
-import com.google.inject.Injector;
-import com.google.inject.Module;
-
-@Test(groups = "live", testName = "TokenApiLiveTest")
+@Test(groups = "live", testName = "AuthApiLiveTest")
public class AuthApiLiveTest extends BaseV3KeystoneApiLiveTest {
- @Override
- protected KeystoneApi create(Properties props, Iterable<Module> modules) {
- Injector injector = newBuilder().modules(modules).overrides(props).buildInjector();
- grabToken(injector.getInstance(AuthenticateRequest.class));
- return injector.getInstance(KeystoneApi.class);
- }
-
public void testIsTokenValid() {
- assertTrue(api().isValid(token));
+ assertTrue(api().isValid(token.get()));
}
public void testGetToken() {
- assertNotNull(api().get(token));
+ assertNotNull(api().get(token.get()));
}
private AuthApi api() {
http://git-wip-us.apache.org/repos/asf/jclouds/blob/cf0c70df/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 216df80..87ca0b3 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
@@ -23,32 +23,36 @@ import org.jclouds.openstack.keystone.v3.domain.Token;
import org.jclouds.openstack.keystone.v3.internal.BaseV3KeystoneApiMockTest;
import org.testng.annotations.Test;
-import com.google.common.reflect.TypeToken;
+import com.squareup.okhttp.mockwebserver.RecordedRequest;
@Test(groups = "unit", testName = "AuthApiMockTest", singleThreaded = true)
public class AuthApiMockTest extends BaseV3KeystoneApiMockTest {
public void testGetToken() throws InterruptedException {
- server.enqueue(jsonResponse("/v3/token.json").addHeader("X-Subject-Token", "bf583aefb74e45108346b4c1c8527a10"));
+ enqueueAuthentication(server);
+ server.enqueue(jsonResponse("/v3/token.json"));
- Token token = api.getAuthApi().get("bf583aefb74e45108346b4c1c8527a10");
+ Token token = api.getAuthApi().get(authToken);
assertEquals(token, tokenFromResource("/v3/token.json"));
- assertEquals(server.getRequestCount(), 1);
- assertSent(server, "GET", "/token/bf583aefb74e45108346b4c1c8527a10");
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ RecordedRequest request = assertSent(server, "GET", "/auth/tokens");
+ assertEquals(request.getHeader("X-Subject-Token"), authToken);
}
public void testGetTokenReturns404() throws InterruptedException {
+ enqueueAuthentication(server);
server.enqueue(response404());
- Token token = api.getAuthApi().get("bf583aefb74e45108346b4c1c8527a10");
-
+ Token token = api.getAuthApi().get("foo");
assertNull(token);
assertEquals(server.getRequestCount(), 2);
- assertSent(server, "POST", "/auth/tokens");
- assertSent(server, "GET", "/token/bf583aefb74e45108346b4c1c8527a10");
+ 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/cf0c70df/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/CatalogApiLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/CatalogApiLiveTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/CatalogApiLiveTest.java
index 3a74a75..63cd98c 100644
--- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/CatalogApiLiveTest.java
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/CatalogApiLiveTest.java
@@ -18,22 +18,13 @@ package org.jclouds.openstack.keystone.v3.features;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
import java.util.List;
-import java.util.Properties;
-import java.util.Set;
-import org.jclouds.openstack.keystone.auth.filters.AuthenticateRequest;
-import org.jclouds.openstack.keystone.v2_0.domain.Tenant;
-import org.jclouds.openstack.keystone.v3.KeystoneApi;
import org.jclouds.openstack.keystone.v3.domain.Endpoint;
import org.jclouds.openstack.keystone.v3.internal.BaseV3KeystoneApiLiveTest;
import org.testng.annotations.Test;
-import com.google.inject.Injector;
-import com.google.inject.Module;
-
@Test(groups = "live", testName = "CatalogApiLiveTest")
public class CatalogApiLiveTest extends BaseV3KeystoneApiLiveTest {
http://git-wip-us.apache.org/repos/asf/jclouds/blob/cf0c70df/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/CatalogApiMockTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/CatalogApiMockTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/CatalogApiMockTest.java
index 9e43f1f..a8d8bf4 100644
--- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/CatalogApiMockTest.java
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/CatalogApiMockTest.java
@@ -18,39 +18,38 @@ package org.jclouds.openstack.keystone.v3.features;
import static com.google.common.collect.Iterables.size;
import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNull;
+
+import java.util.List;
import org.jclouds.openstack.keystone.v3.domain.Endpoint;
-import org.jclouds.openstack.keystone.v3.domain.Token;
import org.jclouds.openstack.keystone.v3.internal.BaseV3KeystoneApiMockTest;
import org.testng.annotations.Test;
-import java.util.List;
-
@Test(groups = "unit", testName = "CatalogApiMockTest", singleThreaded = true)
public class CatalogApiMockTest extends BaseV3KeystoneApiMockTest {
public void testListEndpoints() throws InterruptedException {
+ enqueueAuthentication(server);
server.enqueue(jsonResponse("/v3/endpoints.json"));
List<Endpoint> endpoints = api.getCatalogApi().endpoints();
-
assertEquals(size(endpoints), 8);
+
assertEquals(server.getRequestCount(), 2);
-
+ assertAuthentication(server);
assertSent(server, "GET", "/endpoints");
}
- public void testGetTokenReturns404() throws InterruptedException {
+ public void testListEndpointsReturns404() throws InterruptedException {
+ enqueueAuthentication(server);
server.enqueue(response404());
- Token token = api.getAuthApi().get("bf583aefb74e45108346b4c1c8527a10");
-
- assertNull(token);
-
+ List<Endpoint> endpoints = api.getCatalogApi().endpoints();
+ assertEquals(endpoints.size(), 0);
+
assertEquals(server.getRequestCount(), 2);
- assertSent(server, "POST", "/auth/tokens");
- assertSent(server, "GET", "/token/bf583aefb74e45108346b4c1c8527a10");
+ assertAuthentication(server);
+ assertSent(server, "GET", "/endpoints");
}
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/cf0c70df/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 f3a718a..d73c3cf 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
@@ -16,37 +16,49 @@
*/
package org.jclouds.openstack.keystone.v3.internal;
+import static org.jclouds.openstack.keystone.config.KeystoneProperties.CREDENTIAL_TYPE;
+import static org.jclouds.openstack.keystone.config.KeystoneProperties.SERVICE_TYPE;
+
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.auth.AuthenticationApi;
+import org.jclouds.openstack.keystone.auth.config.Authentication;
import org.jclouds.openstack.keystone.v3.KeystoneApi;
+import org.jclouds.rest.ApiContext;
-import static org.jclouds.openstack.keystone.config.KeystoneProperties.SERVICE_TYPE;
+import com.google.common.base.Supplier;
+import com.google.inject.Key;
+import com.google.inject.Module;
+import com.google.inject.TypeLiteral;
public class BaseV3KeystoneApiLiveTest extends BaseApiLiveTest<KeystoneApi> {
- protected String token;
+ protected Supplier<String> token;
+ protected AuthenticationApi authenticationApi;
public BaseV3KeystoneApiLiveTest() {
provider = "openstack-keystone-3";
}
@Override
+ protected KeystoneApi create(Properties props, Iterable<Module> modules) {
+ ApiContext<KeystoneApi> ctx = newBuilder().modules(modules).overrides(props).build();
+ authenticationApi = ctx.utils().injector().getInstance(AuthenticationApi.class);
+ token = ctx.utils().injector().getInstance(Key.get(new TypeLiteral<Supplier<String>>() {
+ }, Authentication.class));
+ return ctx.getApi();
+ }
+
+ @Override
protected Properties setupProperties() {
Properties props = super.setupProperties();
- setIfTestSystemPropertyPresent(props, KeystoneProperties.CREDENTIAL_TYPE);
- props.setProperty(SERVICE_TYPE, "identityv3");
+ setIfTestSystemPropertyPresent(props, CREDENTIAL_TYPE);
+ String customServiceType = setIfTestSystemPropertyPresent(props, SERVICE_TYPE);
+ if (customServiceType == null) {
+ props.setProperty(SERVICE_TYPE, "identityv3");
+ }
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/cf0c70df/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 599a0e8..60fdb41 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
@@ -25,12 +25,14 @@ import java.io.IOException;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
+import java.util.UUID;
import org.jclouds.ContextBuilder;
import org.jclouds.concurrent.config.ExecutorServiceModule;
import org.jclouds.json.Json;
+import org.jclouds.logging.slf4j.config.SLF4JLoggingModule;
import org.jclouds.openstack.keystone.auth.AuthenticationApi;
-import org.jclouds.openstack.keystone.auth.filters.AuthenticateRequest;
+import org.jclouds.openstack.keystone.config.KeystoneProperties;
import org.jclouds.openstack.keystone.v3.KeystoneApi;
import org.jclouds.openstack.keystone.v3.KeystoneApiMetadata;
import org.jclouds.openstack.keystone.v3.domain.Token;
@@ -53,11 +55,10 @@ public class BaseV3KeystoneApiMockTest {
private static final String DEFAULT_ENDPOINT = new KeystoneApiMetadata().getDefaultEndpoint().orNull();
- private final Set<Module> modules = ImmutableSet.<Module> of(new ExecutorServiceModule(newDirectExecutorService()));
-
protected MockWebServer server;
protected KeystoneApi api;
protected AuthenticationApi authenticationApi;
+ protected String authToken;
private Json json;
// So that we can ignore formatting.
@@ -67,10 +68,11 @@ public class BaseV3KeystoneApiMockTest {
public void start() throws IOException {
server = new MockWebServer();
server.play();
+
ApiContext<KeystoneApi> ctx = ContextBuilder.newBuilder("openstack-keystone-3")
- .credentials("identity", "credential")
+ .credentials("project:identity", "credential")
.endpoint(url(""))
- .modules(modules)
+ .modules(modules())
.overrides(overrides())
.build();
json = ctx.utils().injector().getInstance(Json.class);
@@ -85,12 +87,27 @@ public class BaseV3KeystoneApiMockTest {
}
protected Properties overrides() {
- return new Properties();
+ Properties overrides = new Properties();
+ overrides.setProperty(KeystoneProperties.SCOPE, "project:1234567890");
+ overrides.setProperty(KeystoneProperties.SERVICE_TYPE, "identityv3");
+ return overrides;
+ }
+
+ protected Set<Module> modules() {
+ ImmutableSet.Builder<Module> modules = ImmutableSet.builder();
+ modules.add(new ExecutorServiceModule(newDirectExecutorService()));
+ modules.add(new SLF4JLoggingModule());
+ return modules.build();
}
protected String url(String path) {
return server.getUrl(path).toString();
}
+
+ protected void enqueueAuthentication(MockWebServer server) {
+ authToken = UUID.randomUUID().toString();
+ server.enqueue(jsonResponse("/v3/token.json").addHeader("X-Subject-Token", authToken));
+ }
protected MockResponse jsonResponse(String resource) {
return new MockResponse().addHeader("Content-Type", "application/json").setBody(stringFromResource(resource));
@@ -126,6 +143,10 @@ public class BaseV3KeystoneApiMockTest {
String text = stringFromResource(resourceName);
return json.fromJson(text, type);
}
+
+ protected void assertAuthentication(MockWebServer server) throws InterruptedException {
+ assertSent(server, "POST", "/auth/tokens", stringFromResource("/v3/auth-password-scoped.json"));
+ }
protected RecordedRequest assertSent(MockWebServer server, String method, String path) throws InterruptedException {
RecordedRequest request = server.takeRequest();
http://git-wip-us.apache.org/repos/asf/jclouds/blob/cf0c70df/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
index 4cf5016..5c37355 100644
--- a/apis/openstack-keystone/src/test/resources/logback.xml
+++ b/apis/openstack-keystone/src/test/resources/logback.xml
@@ -13,7 +13,7 @@
</encoder>
</appender>
<appender name="COMPUTEFILE" class="ch.qos.logback.core.FileAppender">
- <file>target/jclouds-compute.log</file>
+ <file>target/test-data/jclouds-compute.log</file>
<encoder>
<Pattern>%d %-5p [%c] [%thread] %m%n</Pattern>
</encoder>
http://git-wip-us.apache.org/repos/asf/jclouds/blob/cf0c70df/apis/openstack-keystone/src/test/resources/v3/auth-password-scoped.json
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/resources/v3/auth-password-scoped.json b/apis/openstack-keystone/src/test/resources/v3/auth-password-scoped.json
new file mode 100644
index 0000000..48bfc9d
--- /dev/null
+++ b/apis/openstack-keystone/src/test/resources/v3/auth-password-scoped.json
@@ -0,0 +1,23 @@
+{
+ "auth": {
+ "identity": {
+ "methods": [
+ "password"
+ ],
+ "password": {
+ "user": {
+ "name": "identity",
+ "domain": {
+ "name": "project"
+ },
+ "password": "credential"
+ }
+ }
+ },
+ "scope": {
+ "project": {
+ "id": "1234567890"
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/cf0c70df/apis/openstack-keystone/src/test/resources/v3/auth-password.json
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/resources/v3/auth-password.json b/apis/openstack-keystone/src/test/resources/v3/auth-password.json
new file mode 100644
index 0000000..6cb05a3
--- /dev/null
+++ b/apis/openstack-keystone/src/test/resources/v3/auth-password.json
@@ -0,0 +1,18 @@
+{
+ "auth": {
+ "identity": {
+ "methods": [
+ "password"
+ ],
+ "password": {
+ "user": {
+ "name": "identity",
+ "domain": {
+ "name": "project"
+ },
+ "password": "credential"
+ }
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/cf0c70df/apis/openstack-keystone/src/test/resources/v3/auth-token-scoped.json
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/resources/v3/auth-token-scoped.json b/apis/openstack-keystone/src/test/resources/v3/auth-token-scoped.json
new file mode 100644
index 0000000..a1938a7
--- /dev/null
+++ b/apis/openstack-keystone/src/test/resources/v3/auth-token-scoped.json
@@ -0,0 +1,17 @@
+{
+ "auth": {
+ "identity": {
+ "methods": [
+ "token"
+ ],
+ "token": {
+ "id": "token"
+ }
+ },
+ "scope": {
+ "domain": {
+ "name": "mydomain"
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/cf0c70df/apis/openstack-keystone/src/test/resources/v3/auth-token.json
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/resources/v3/auth-token.json b/apis/openstack-keystone/src/test/resources/v3/auth-token.json
new file mode 100644
index 0000000..36096a2
--- /dev/null
+++ b/apis/openstack-keystone/src/test/resources/v3/auth-token.json
@@ -0,0 +1,12 @@
+{
+ "auth": {
+ "identity": {
+ "methods": [
+ "token"
+ ],
+ "token": {
+ "id": "token"
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/cf0c70df/apis/openstack-keystone/src/test/resources/v3/token.json
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/resources/v3/token.json b/apis/openstack-keystone/src/test/resources/v3/token.json
index 20734d5..b7fa677 100644
--- a/apis/openstack-keystone/src/test/resources/v3/token.json
+++ b/apis/openstack-keystone/src/test/resources/v3/token.json
@@ -298,7 +298,7 @@
"endpoints": [
{
"region_id": "uk-1",
- "url": "http://localhost/v3",
+ "url": "http://localhost/identity/v3",
"region": "uk-1",
"interface": "admin",
"id": "db15a7126d4a4f1f81903bb4d56be32b",
@@ -382,11 +382,19 @@
"endpoints": [
{
"region_id": "uk-1",
- "url": "https://identity.myprovider.com/v3",
+ "url": "http://localhost/identity/v3",
"region": "uk-1",
"interface": "public",
"id": "27dc2bba1c5d4a14b68657fc8fdd4e3e",
"name": "identityv3"
+ },
+ {
+ "region_id": "uk-1",
+ "url": "http://localhost/identity/v3",
+ "region": "uk-1",
+ "interface": "admin",
+ "id": "27dc2bba1c5d4a14b68657fc8fdd4e3e",
+ "name": "identityv3"
}
],
"type": "identityv3",