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 2014/03/14 10:03:37 UTC
[2/3] JCLOUDS-453. Add OpenStack Keystone v2.0 OS-KSADM Admin
Extension support for Keystone.
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b68f1b6e/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
new file mode 100644
index 0000000..d196295
--- /dev/null
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/RoleAdminApiLiveTest.java
@@ -0,0 +1,105 @@
+/*
+ * 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.v2_0.extensions;
+
+import static org.jclouds.util.Predicates2.retry;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+
+import java.util.Set;
+
+import org.jclouds.openstack.keystone.v2_0.domain.Role;
+import org.jclouds.openstack.keystone.v2_0.internal.BaseKeystoneApiLiveTest;
+import org.testng.SkipException;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
+
+/**
+ * Tests behavior of RoleAdminApi
+ *
+ * @author Pedro Navarro
+ */
+@Test(groups = "live", testName = "RoleAdminApiLiveTest", singleThreaded = true)
+public class RoleAdminApiLiveTest extends BaseKeystoneApiLiveTest {
+
+ private Optional<? extends RoleAdminApi> roleAdminOption;
+
+ private Role testRole;
+
+ @BeforeClass(groups = { "integration", "live" })
+ @Override
+ public void setup() {
+ super.setup();
+ roleAdminOption = api.getRoleAdminApi();
+ if (!roleAdminOption.isPresent()) {
+ throw new SkipException("The tests are skipped since OS-KSADM extension is not exposed through the Keystone API");
+ }
+ }
+
+ @AfterClass(groups = { "integration", "live" })
+ @Override
+ protected void tearDown() {
+ if (testRole != null) {
+ final String roleId = testRole.getId();
+ boolean success = roleAdminOption.get().delete(roleId);
+ assertTrue(retry(new Predicate<RoleAdminApi>() {
+ public boolean apply(RoleAdminApi roleApi) {
+ return roleApi.get(roleId) == null;
+ }
+ }, 5 * 1000L).apply(roleAdminOption.get()));
+ }
+ super.tearDown();
+ }
+
+ public void testCreateRole() {
+ testRole = roleAdminOption.get().create("jclouds-test-role");
+ assertTrue(retry(new Predicate<RoleAdminApi>() {
+ public boolean apply(RoleAdminApi roleApi) {
+ return roleApi.get(testRole.getId()) != null;
+ }
+ }, 180 * 1000L).apply(roleAdminOption.get()));
+
+ assertEquals(roleAdminOption.get().get(testRole.getId()).getName(), "jclouds-test-role");
+ }
+
+ public void testListRoles() {
+ RoleAdminApi roleApi = roleAdminOption.get();
+ Set<? extends Role> roles = roleApi.list().toSet();
+ assertNotNull(roles);
+ assertFalse(roles.isEmpty());
+ for (Role role : roles) {
+ Role aRole = roleApi.get(role.getId());
+ assertEquals(aRole, role);
+ }
+
+ }
+
+ @Test(dependsOnMethods = { "testCreateRole" })
+ public void testGetRole() {
+
+ Role testGetRole = roleAdminOption.get().get(testRole.getId());
+ assertNotNull(testGetRole);
+ assertEquals(testGetRole.getName(), "jclouds-test-role");
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b68f1b6e/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/RoleAdminApiMockTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/RoleAdminApiMockTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/RoleAdminApiMockTest.java
new file mode 100644
index 0000000..1b67614
--- /dev/null
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/RoleAdminApiMockTest.java
@@ -0,0 +1,249 @@
+/*
+ * 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.v2_0.extensions;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+
+import java.util.Set;
+
+import org.jclouds.openstack.keystone.v2_0.KeystoneApi;
+import org.jclouds.openstack.keystone.v2_0.domain.Role;
+import org.jclouds.openstack.v2_0.internal.BaseOpenStackMockTest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.FluentIterable;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.squareup.okhttp.mockwebserver.MockResponse;
+import com.squareup.okhttp.mockwebserver.MockWebServer;
+import com.squareup.okhttp.mockwebserver.RecordedRequest;
+
+/**
+ * Tests RoleApi Guice wiring and parsing
+ *
+ * @author Pedro Navarro
+ */
+@Test(groups = "unit", testName = "RoleAdminApiMockTest")
+public class RoleAdminApiMockTest extends BaseOpenStackMockTest<KeystoneApi> {
+
+ Set<Role> expectedRoles = ImmutableSet.of(
+ Role.builder().id("22529316b2384072b2e8946af5e8cfb6").name("admin").build(),
+ Role.builder().id("9fe2ff9ee4384b1894a90878d3e92bab").name("_member_")
+ .description("Default role for project membership").build());
+
+ public void listRoles() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(
+ stringFromResource("/role_list_response.json"))));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ RoleAdminApi roleAdminApi = keystoneApi.getRoleAdminApi().get();
+ FluentIterable<? extends Role> roles = roleAdminApi.list();
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateRoleRequest = server.takeRequest();
+ assertEquals(updateRoleRequest.getRequestLine(), "GET /OS-KSADM/roles HTTP/1.1");
+
+ assertEquals(roles.size(), 2);
+ assertEquals(roles.toSet(), expectedRoles);
+
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void listZeroRoles() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ RoleAdminApi roleAdminApi = keystoneApi.getRoleAdminApi().get();
+ FluentIterable<? extends Role> roles = roleAdminApi.list();
+
+ ImmutableList<? extends Role> roleList = roles.toList();
+
+ assertTrue(roleList.isEmpty());
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateRoleRequest = server.takeRequest();
+ assertEquals(updateRoleRequest.getRequestLine(), "GET /OS-KSADM/roles HTTP/1.1");
+
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void createRole() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(201).setBody(
+ stringFromResource("/role_create_response.json"))));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ RoleAdminApi roleAdminApi = keystoneApi.getRoleAdminApi().get();
+ Role testRole = roleAdminApi.create("jclouds-role");
+
+ assertNotNull(testRole);
+ assertEquals(testRole.getId(), "r1000");
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest createRoleRequest = server.takeRequest();
+ assertEquals(createRoleRequest.getRequestLine(), "POST /OS-KSADM/roles HTTP/1.1");
+ assertEquals(new String(createRoleRequest.getBody()), "{\"role\":{\"name\":\"jclouds-role\"}}");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void createRoleFail() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404).setBody(
+ stringFromResource("/role_create_response.json"))));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ RoleAdminApi roleAdminApi = keystoneApi.getRoleAdminApi().get();
+ Role testRole = roleAdminApi.create("jclouds-role");
+
+ assertNull(testRole);
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest createRoleRequest = server.takeRequest();
+ assertEquals(createRoleRequest.getRequestLine(), "POST /OS-KSADM/roles HTTP/1.1");
+ assertEquals(new String(createRoleRequest.getBody()), "{\"role\":{\"name\":\"jclouds-role\"}}");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void getRole() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(
+ stringFromResource("/role_create_response.json"))));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ RoleAdminApi roleAdminApi = keystoneApi.getRoleAdminApi().get();
+ Role role = roleAdminApi.get("r1000");
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateRoleRequest = server.takeRequest();
+ assertEquals(updateRoleRequest.getRequestLine(), "GET /OS-KSADM/roles/r1000 HTTP/1.1");
+
+ /*
+ * Check response
+ */
+ assertEquals(role.getId(), "r1000");
+ assertEquals(role.getName(), "jclouds-role");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void getRoleFail() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ RoleAdminApi roleAdminApi = keystoneApi.getRoleAdminApi().get();
+ Role role = roleAdminApi.get("r1000");
+
+ assertNull(role);
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateRoleRequest = server.takeRequest();
+ assertEquals(updateRoleRequest.getRequestLine(), "GET /OS-KSADM/roles/r1000 HTTP/1.1");
+
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void deleteRole() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(204)));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ RoleAdminApi roleAdminApi = keystoneApi.getRoleAdminApi().get();
+ boolean success = roleAdminApi.delete("r1000");
+
+ assertTrue(success);
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateRoleRequest = server.takeRequest();
+ assertEquals(updateRoleRequest.getRequestLine(), "DELETE /OS-KSADM/roles/r1000 HTTP/1.1");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void deleteRoleFail() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ RoleAdminApi roleAdminApi = keystoneApi.getRoleAdminApi().get();
+ boolean success = roleAdminApi.delete("r1000");
+
+ assertFalse(success);
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateRoleRequest = server.takeRequest();
+ assertEquals(updateRoleRequest.getRequestLine(), "DELETE /OS-KSADM/roles/r1000 HTTP/1.1");
+ } finally {
+ server.shutdown();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b68f1b6e/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
new file mode 100644
index 0000000..97d9e05
--- /dev/null
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/ServiceAdminApiLiveTest.java
@@ -0,0 +1,106 @@
+/*
+ * 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.v2_0.extensions;
+
+import static org.jclouds.util.Predicates2.retry;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+
+import java.util.Set;
+
+import org.jclouds.openstack.keystone.v2_0.domain.Service;
+import org.jclouds.openstack.keystone.v2_0.internal.BaseKeystoneApiLiveTest;
+import org.testng.SkipException;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
+
+/**
+ * Tests behavior of ServiceAdminApi
+ *
+ * @author Pedro Navarro
+ */
+@Test(groups = "live", testName = "ServiceAdminApiLiveTest", singleThreaded = true)
+public class ServiceAdminApiLiveTest extends BaseKeystoneApiLiveTest {
+
+ private Optional<? extends ServiceAdminApi> serviceAdminOption;
+
+ private Service testService;
+
+ @BeforeClass(groups = { "integration", "live" })
+ @Override
+ public void setup() {
+ super.setup();
+ serviceAdminOption = api.getServiceAdminApi();
+ if (!serviceAdminOption.isPresent()) {
+ throw new SkipException("The tests are skipped since OS-KSADM extension is not exposed through the Keystone API");
+ }
+ }
+
+ @AfterClass(groups = { "integration", "live" })
+ @Override
+ protected void tearDown() {
+ if (testService != null) {
+ final String serviceId = testService.getId();
+ boolean success = serviceAdminOption.get().delete(serviceId);
+ assertTrue(retry(new Predicate<ServiceAdminApi>() {
+ public boolean apply(ServiceAdminApi serviceApi) {
+ return serviceApi.get(serviceId) == null;
+ }
+ }, 5 * 1000L).apply(serviceAdminOption.get()));
+ }
+ super.tearDown();
+ }
+
+ public void testListServices() {
+ ServiceAdminApi serviceApi = serviceAdminOption.get();
+ Set<? extends Service> services = serviceApi.list().concat().toSet();
+ assertNotNull(services);
+ assertFalse(services.isEmpty());
+ for (Service service : services) {
+ Service aService = serviceApi.get(service.getId());
+ assertEquals(aService, service);
+ }
+
+ }
+
+ @Test
+ public void testCreateService() {
+ testService = serviceAdminOption.get().create("jclouds-test-service", "jclouds-service-type",
+ "jclouds-service-description");
+ assertTrue(retry(new Predicate<ServiceAdminApi>() {
+ public boolean apply(ServiceAdminApi serviceApi) {
+ return serviceApi.get(testService.getId()) != null;
+ }
+ }, 180 * 1000L).apply(serviceAdminOption.get()));
+
+ assertEquals(serviceAdminOption.get().get(testService.getId()).getName(), "jclouds-test-service");
+ }
+
+ @Test(dependsOnMethods = { "testCreateService" })
+ public void testGetService() {
+ Service testGetService = serviceAdminOption.get().get(testService.getId());
+ assertNotNull(testGetService);
+ assertEquals(testGetService.getName(), "jclouds-test-service");
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b68f1b6e/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/ServiceAdminApiMockTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/ServiceAdminApiMockTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/ServiceAdminApiMockTest.java
new file mode 100644
index 0000000..e58329d
--- /dev/null
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/ServiceAdminApiMockTest.java
@@ -0,0 +1,285 @@
+/*
+ * 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.v2_0.extensions;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+
+import java.util.Set;
+
+import org.jclouds.collect.PagedIterable;
+import org.jclouds.openstack.keystone.v2_0.KeystoneApi;
+import org.jclouds.openstack.keystone.v2_0.domain.Service;
+import org.jclouds.openstack.v2_0.domain.PaginatedCollection;
+import org.jclouds.openstack.v2_0.internal.BaseOpenStackMockTest;
+import org.jclouds.openstack.v2_0.options.PaginationOptions;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.squareup.okhttp.mockwebserver.MockResponse;
+import com.squareup.okhttp.mockwebserver.MockWebServer;
+import com.squareup.okhttp.mockwebserver.RecordedRequest;
+
+/**
+ * Tests ServiceApi Guice wiring and parsing
+ *
+ * @author Pedro Navarro
+ */
+@Test(groups = "unit", testName = "ServiceAdminApiMockTest")
+public class ServiceAdminApiMockTest extends BaseOpenStackMockTest<KeystoneApi> {
+
+ Set<Service> expectedServices = ImmutableSet.of(
+ Service.builder().name("neutron").type("network").id("150a35a1e24547fdb4122b7fc90929b0")
+ .description("Network Service").build(),
+ Service.builder().name("cinder").type("volume").id("313b229fcede4a148f5bd11199264f8e")
+ .description("OpenStack Volume Service").build());
+
+ public void listServices() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(
+ stringFromResource("/service_list_response.json"))));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ ServiceAdminApi serviceAdminApi = keystoneApi.getServiceAdminApi().get();
+ PagedIterable<? extends Service> services = serviceAdminApi.list();
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateServiceRequest = server.takeRequest();
+ assertEquals(updateServiceRequest.getRequestLine(), "GET /OS-KSADM/services HTTP/1.1");
+
+ assertEquals(services.concat().size(), 2);
+ assertEquals(services.concat().toSet(), expectedServices);
+
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void listZeroServices() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ ServiceAdminApi serviceAdminApi = keystoneApi.getServiceAdminApi().get();
+ PagedIterable<? extends Service> services = serviceAdminApi.list();
+
+ ImmutableList<? extends Service> servicesList = services.concat().toList();
+ assertTrue(servicesList.isEmpty());
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateServiceRequest = server.takeRequest();
+ assertEquals(updateServiceRequest.getRequestLine(), "GET /OS-KSADM/services HTTP/1.1");
+
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void listServicesPage() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(
+ stringFromResource("/service_list_response.json"))));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ ServiceAdminApi serviceAdminApi = keystoneApi.getServiceAdminApi().get();
+ PaginatedCollection<? extends Service> services = serviceAdminApi.list(new PaginationOptions());
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateServiceRequest = server.takeRequest();
+ assertEquals(updateServiceRequest.getRequestLine(), "GET /OS-KSADM/services HTTP/1.1");
+
+ assertEquals(services.size(), 2);
+ assertEquals(services.toSet(), expectedServices);
+
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void createService() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(201).setBody(
+ stringFromResource("/service_create_response.json"))));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ ServiceAdminApi serviceAdminApi = keystoneApi.getServiceAdminApi().get();
+ Service testService = serviceAdminApi.create("jclouds-service-test", "jclouds-service-type",
+ "jclouds-service-description");
+
+ assertNotNull(testService);
+ assertEquals(testService.getId(), "s1000");
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest createServiceRequest = server.takeRequest();
+ assertEquals(createServiceRequest.getRequestLine(), "POST /OS-KSADM/services HTTP/1.1");
+ String bodyRequest = new String(createServiceRequest.getBody());
+ assertEquals(
+ bodyRequest,
+ "{\"OS-KSADM:service\":{\"name\":\"jclouds-service-test\",\"type\":\"jclouds-service-type\",\"description\":\"jclouds-service-description\"}}");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void createServiceFail() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ ServiceAdminApi serviceAdminApi = keystoneApi.getServiceAdminApi().get();
+ Service testService = serviceAdminApi.create("jclouds-service-test", "jclouds-service-type",
+ "jclouds-service-description");
+
+ assertNull(testService);
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest createServiceRequest = server.takeRequest();
+ assertEquals(createServiceRequest.getRequestLine(), "POST /OS-KSADM/services HTTP/1.1");
+ String bodyRequest = new String(createServiceRequest.getBody());
+ assertEquals(
+ bodyRequest,
+ "{\"OS-KSADM:service\":{\"name\":\"jclouds-service-test\",\"type\":\"jclouds-service-type\",\"description\":\"jclouds-service-description\"}}");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void getService() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(
+ stringFromResource("/service_create_response.json"))));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ ServiceAdminApi serviceAdminApi = keystoneApi.getServiceAdminApi().get();
+ Service service = serviceAdminApi.get("s1000");
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateServiceRequest = server.takeRequest();
+ assertEquals(updateServiceRequest.getRequestLine(), "GET /OS-KSADM/services/s1000 HTTP/1.1");
+
+ /*
+ * Check response
+ */
+ assertEquals(service.getId(), "s1000");
+ assertEquals(service.getName(), "jclouds-service-test");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void getServiceFail() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ ServiceAdminApi serviceAdminApi = keystoneApi.getServiceAdminApi().get();
+ Service service = serviceAdminApi.get("s1000");
+
+ assertNull(service);
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateServiceRequest = server.takeRequest();
+ assertEquals(updateServiceRequest.getRequestLine(), "GET /OS-KSADM/services/s1000 HTTP/1.1");
+
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void deleteService() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(204)));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ ServiceAdminApi serviceAdminApi = keystoneApi.getServiceAdminApi().get();
+ serviceAdminApi.delete("s1000");
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateServiceRequest = server.takeRequest();
+ assertEquals(updateServiceRequest.getRequestLine(), "DELETE /OS-KSADM/services/s1000 HTTP/1.1");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void deleteServiceFail() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ ServiceAdminApi serviceAdminApi = keystoneApi.getServiceAdminApi().get();
+ boolean success = serviceAdminApi.delete("s1000");
+
+ assertFalse(success);
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateServiceRequest = server.takeRequest();
+ assertEquals(updateServiceRequest.getRequestLine(), "DELETE /OS-KSADM/services/s1000 HTTP/1.1");
+ } finally {
+ server.shutdown();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b68f1b6e/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
new file mode 100644
index 0000000..266ca6b
--- /dev/null
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/TenantAdminApiLiveTest.java
@@ -0,0 +1,101 @@
+/*
+ * 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.v2_0.extensions;
+
+import static org.jclouds.util.Predicates2.retry;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import org.jclouds.openstack.keystone.v2_0.domain.Tenant;
+import org.jclouds.openstack.keystone.v2_0.features.TenantApi;
+import org.jclouds.openstack.keystone.v2_0.internal.BaseKeystoneApiLiveTest;
+import org.jclouds.openstack.keystone.v2_0.options.CreateTenantOptions;
+import org.jclouds.openstack.keystone.v2_0.options.UpdateTenantOptions;
+import org.testng.SkipException;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
+
+/**
+ * Tests behavior of TenantAdminApi
+ *
+ * @author Pedro Navarro
+ */
+@Test(groups = "live", testName = "TenantAdminApiLiveTest", singleThreaded = true)
+public class TenantAdminApiLiveTest extends BaseKeystoneApiLiveTest {
+
+ private Optional<? extends TenantAdminApi> tenantAdminOption;
+ private Optional<? extends TenantApi> tenantApi;
+
+ private Tenant testTenant;
+
+ @BeforeClass(groups = { "integration", "live" })
+ @Override
+ public void setup() {
+ super.setup();
+ tenantAdminOption = api.getTenantAdminApi();
+ if (!tenantAdminOption.isPresent()) {
+ throw new SkipException(
+ "The tests are skipped since OS-KSADM extension is not exposed through the Keystone API");
+ }
+ tenantApi = api.getTenantApi();
+ }
+
+ @AfterClass(groups = { "integration", "live" })
+ @Override
+ protected void tearDown() {
+ if (testTenant != null) {
+ final String tenantId = testTenant.getId();
+ boolean success = tenantAdminOption.get().delete(tenantId);
+ assertTrue(retry(new Predicate<TenantApi>() {
+ public boolean apply(TenantApi tenantApi) {
+ return tenantApi.get(tenantId) == null;
+ }
+ }, 5 * 1000L).apply(tenantApi.get()));
+ }
+ super.tearDown();
+ }
+
+ public void testCreateTenant() {
+ testTenant = tenantAdminOption.get().create("jclouds-test-tenant",
+ CreateTenantOptions.Builder.enabled(true).description("jclouds-test-description"));
+ assertTrue(retry(new Predicate<TenantApi>() {
+ public boolean apply(TenantApi tenantApi) {
+ return tenantApi.get(testTenant.getId()) != null;
+ }
+ }, 180 * 1000L).apply(tenantApi.get()));
+
+ assertEquals(tenantApi.get().get(testTenant.getId()).getName(), "jclouds-test-tenant");
+ assertEquals(tenantApi.get().get(testTenant.getId()).getDescription(), "jclouds-test-description");
+ assertEquals(tenantApi.get().get(testTenant.getId()).isEnabled(), true);
+ }
+
+ public void testUpdateTenant() {
+ testTenant = tenantAdminOption.get().update(
+ testTenant.getId(),
+ UpdateTenantOptions.Builder.description("jclouds-test-description-modified").enabled(false)
+ .name("jclouds-test-tenant-modified"));
+
+ assertEquals(tenantApi.get().get(testTenant.getId()).getName(), "jclouds-test-tenant-modified");
+ assertEquals(tenantApi.get().get(testTenant.getId()).getDescription(), "jclouds-test-description-modified");
+ assertEquals(tenantApi.get().get(testTenant.getId()).isEnabled(), false);
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b68f1b6e/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/TenantAdminApiMockTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/TenantAdminApiMockTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/TenantAdminApiMockTest.java
new file mode 100644
index 0000000..b6342f9
--- /dev/null
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/TenantAdminApiMockTest.java
@@ -0,0 +1,292 @@
+/*
+ * 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.v2_0.extensions;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
+
+import org.jclouds.openstack.keystone.v2_0.KeystoneApi;
+import org.jclouds.openstack.keystone.v2_0.domain.Tenant;
+import org.jclouds.openstack.keystone.v2_0.options.CreateTenantOptions;
+import org.jclouds.openstack.keystone.v2_0.options.UpdateTenantOptions;
+import org.jclouds.openstack.v2_0.internal.BaseOpenStackMockTest;
+import org.testng.annotations.Test;
+
+import com.squareup.okhttp.mockwebserver.MockResponse;
+import com.squareup.okhttp.mockwebserver.MockWebServer;
+import com.squareup.okhttp.mockwebserver.RecordedRequest;
+
+/**
+ * Tests TenantApi Guice wiring and parsing
+ *
+ * @author Pedro Navarro
+ */
+@Test(groups = "unit", testName = "TenantAdminApiMockTest")
+public class TenantAdminApiMockTest extends BaseOpenStackMockTest<KeystoneApi> {
+
+ public void createTenant() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(201).setBody(
+ stringFromResource("/tenant_create_response.json"))));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ TenantAdminApi tenantAdminApi = keystoneApi.getTenantAdminApi().get();
+ CreateTenantOptions createTenantOptions = CreateTenantOptions.Builder.description("jclouds-description")
+ .enabled(true);
+ Tenant testTenant = tenantAdminApi.create("jclouds-tenant", createTenantOptions);
+
+ assertNotNull(testTenant);
+ assertEquals(testTenant.getId(), "t1000");
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest createTenantRequest = server.takeRequest();
+ assertEquals(createTenantRequest.getRequestLine(), "POST /tenants HTTP/1.1");
+ assertEquals(new String(createTenantRequest.getBody()),
+ "{\"tenant\":{\"name\":\"jclouds-tenant\",\"description\":\"jclouds-description\",\"enabled\":true}}");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void createTenantFail() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ TenantAdminApi tenantAdminApi = keystoneApi.getTenantAdminApi().get();
+ CreateTenantOptions createTenantOptions = CreateTenantOptions.Builder.description("jclouds-description")
+ .enabled(true);
+ Tenant testTenant = tenantAdminApi.create("jclouds-tenant", createTenantOptions);
+
+ assertNull(testTenant);
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest createTenantRequest = server.takeRequest();
+ assertEquals(createTenantRequest.getRequestLine(), "POST /tenants HTTP/1.1");
+ assertEquals(new String(createTenantRequest.getBody()),
+ "{\"tenant\":{\"name\":\"jclouds-tenant\",\"description\":\"jclouds-description\",\"enabled\":true}}");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void updateTenant() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(
+ stringFromResource("/tenant_update_response.json"))));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ TenantAdminApi tenantAdminApi = keystoneApi.getTenantAdminApi().get();
+ UpdateTenantOptions updateTenantOptions = UpdateTenantOptions.Builder
+ .description("jclouds-description-modified").enabled(false).name("jclouds-tenant-modified");
+ Tenant updatedTenant = tenantAdminApi.update("t1000", updateTenantOptions);
+
+ assertNotNull(updatedTenant);
+ assertEquals(updatedTenant.getId(), "t1000");
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateTenantRequest = server.takeRequest();
+ assertEquals(updateTenantRequest.getRequestLine(), "PUT /tenants/t1000 HTTP/1.1");
+ assertEquals(
+ new String(updateTenantRequest.getBody()),
+ "{\"tenant\":{\"name\":\"jclouds-tenant-modified\",\"description\":\"jclouds-description-modified\",\"enabled\":false}}");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void updateTenantFail() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ TenantAdminApi tenantAdminApi = keystoneApi.getTenantAdminApi().get();
+ UpdateTenantOptions updateTenantOptions = UpdateTenantOptions.Builder
+ .description("jclouds-description-modified").enabled(false).name("jclouds-tenant-modified");
+ Tenant updatedTenant = tenantAdminApi.update("t1000", updateTenantOptions);
+
+ assertNull(updatedTenant);
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateTenantRequest = server.takeRequest();
+ assertEquals(updateTenantRequest.getRequestLine(), "PUT /tenants/t1000 HTTP/1.1");
+ assertEquals(
+ new String(updateTenantRequest.getBody()),
+ "{\"tenant\":{\"name\":\"jclouds-tenant-modified\",\"description\":\"jclouds-description-modified\",\"enabled\":false}}");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void deleteTenant() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(204)));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ TenantAdminApi tenantAdminApi = keystoneApi.getTenantAdminApi().get();
+ tenantAdminApi.delete("t1000");
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateTenantRequest = server.takeRequest();
+ assertEquals(updateTenantRequest.getRequestLine(), "DELETE /tenants/t1000 HTTP/1.1");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void deleteTenantFail() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ TenantAdminApi tenantAdminApi = keystoneApi.getTenantAdminApi().get();
+ boolean success = tenantAdminApi.delete("t1000");
+
+ assertFalse(success);
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateTenantRequest = server.takeRequest();
+ assertEquals(updateTenantRequest.getRequestLine(), "DELETE /tenants/t1000 HTTP/1.1");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void addRoleOnTenant() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(201)));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ TenantAdminApi tenantAdminApi = keystoneApi.getTenantAdminApi().get();
+ tenantAdminApi.addRoleOnTenant("u1000", "t1000", "r1000");
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateTenantRequest = server.takeRequest();
+ assertEquals(updateTenantRequest.getRequestLine(),
+ "PUT /tenants/u1000/users/t1000/roles/OS-KSADM/r1000 HTTP/1.1");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void addRoleOnTenantFail() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ TenantAdminApi tenantAdminApi = keystoneApi.getTenantAdminApi().get();
+ boolean success = tenantAdminApi.addRoleOnTenant("u1000", "t1000", "r1000");
+
+ assertFalse(success);
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateTenantRequest = server.takeRequest();
+ assertEquals(updateTenantRequest.getRequestLine(),
+ "PUT /tenants/u1000/users/t1000/roles/OS-KSADM/r1000 HTTP/1.1");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void deleteRoleOnTenant() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(204)));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ TenantAdminApi tenantAdminApi = keystoneApi.getTenantAdminApi().get();
+ tenantAdminApi.deleteRoleOnTenant("t1000", "u1000", "r1000");
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateTenantRequest = server.takeRequest();
+ assertEquals(updateTenantRequest.getRequestLine(),
+ "DELETE /tenants/t1000/users/u1000/roles/OS-KSADM/r1000 HTTP/1.1");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void deleteRoleOnTenantFail() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ TenantAdminApi tenantAdminApi = keystoneApi.getTenantAdminApi().get();
+ boolean success = tenantAdminApi.deleteRoleOnTenant("t1000", "u1000", "r1000");
+
+ assertFalse(success);
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateTenantRequest = server.takeRequest();
+ assertEquals(updateTenantRequest.getRequestLine(),
+ "DELETE /tenants/t1000/users/u1000/roles/OS-KSADM/r1000 HTTP/1.1");
+ } finally {
+ server.shutdown();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b68f1b6e/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
new file mode 100644
index 0000000..63cf258
--- /dev/null
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/UserAdminApiLiveTest.java
@@ -0,0 +1,102 @@
+/*
+ * 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.v2_0.extensions;
+
+import static org.jclouds.util.Predicates2.retry;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import org.jclouds.openstack.keystone.v2_0.domain.User;
+import org.jclouds.openstack.keystone.v2_0.features.UserApi;
+import org.jclouds.openstack.keystone.v2_0.internal.BaseKeystoneApiLiveTest;
+import org.jclouds.openstack.keystone.v2_0.options.CreateUserOptions;
+import org.jclouds.openstack.keystone.v2_0.options.UpdateUserOptions;
+import org.testng.SkipException;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Optional;
+import com.google.common.base.Predicate;
+
+/**
+ * Tests behavior of UserAdminApi
+ *
+ * @author Pedro Navarro
+ */
+@Test(groups = "live", testName = "UserAdminApiLiveTest", singleThreaded = true)
+public class UserAdminApiLiveTest extends BaseKeystoneApiLiveTest {
+
+ private Optional<? extends UserAdminApi> userAdminOption;
+ private Optional<? extends UserApi> userApi;
+
+ private User testUser;
+
+ @BeforeClass(groups = { "integration", "live" })
+ @Override
+ public void setup() {
+ super.setup();
+ userAdminOption = api.getUserAdminApi();
+ if (!userAdminOption.isPresent()) {
+ throw new SkipException("The tests are skipped since OS-KSADM extension is not exposed through the Keystone API");
+ }
+ userApi = api.getUserApi();
+ }
+
+ @AfterClass(groups = { "integration", "live" })
+ @Override
+ protected void tearDown() {
+ if (testUser != null) {
+ final String userId = testUser.getId();
+ boolean success = userAdminOption.get().delete(userId);
+ assertTrue(retry(new Predicate<UserApi>() {
+ public boolean apply(UserApi userApi) {
+ return userApi.get(userId) == null;
+ }
+ }, 5 * 1000L).apply(userApi.get()));
+ }
+ super.tearDown();
+ }
+
+ @Test
+ public void testCreateUser() {
+ testUser = userAdminOption.get().create("jclouds-test-user", "jclouds-test-password",
+ CreateUserOptions.Builder.email("jclouds-test@jclouds.org").enabled(true));
+ assertTrue(retry(new Predicate<UserApi>() {
+ public boolean apply(UserApi userApi) {
+ return userApi.get(testUser.getId()) != null;
+ }
+ }, 180 * 1000L).apply(userApi.get()));
+
+ assertEquals(userApi.get().get(testUser.getId()).getName(), "jclouds-test-user");
+ assertEquals(userApi.get().get(testUser.getId()).getEmail(), "jclouds-test@jclouds.org");
+ assertEquals(userApi.get().get(testUser.getId()).isEnabled(), true);
+ }
+
+ @Test(dependsOnMethods = { "testCreateUser" })
+ public void testUpdateUser() {
+ testUser = userAdminOption.get().update(
+ testUser.getId(),
+ UpdateUserOptions.Builder.email("jclouds-test.modified@jclouds.org").enabled(false)
+ .name("jclouds-test-user-modified").password("jclouds-test-password-modified"));
+
+ assertEquals(userApi.get().get(testUser.getId()).getName(), "jclouds-test-user-modified");
+ assertEquals(userApi.get().get(testUser.getId()).getEmail(), "jclouds-test.modified@jclouds.org");
+ assertEquals(userApi.get().get(testUser.getId()).isEnabled(), false);
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b68f1b6e/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/UserAdminApiMockTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/UserAdminApiMockTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/UserAdminApiMockTest.java
new file mode 100644
index 0000000..5b6daf3
--- /dev/null
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/extensions/UserAdminApiMockTest.java
@@ -0,0 +1,200 @@
+/*
+ * 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.v2_0.extensions;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
+
+import org.jclouds.openstack.keystone.v2_0.KeystoneApi;
+import org.jclouds.openstack.keystone.v2_0.domain.User;
+import org.jclouds.openstack.keystone.v2_0.options.CreateUserOptions;
+import org.jclouds.openstack.keystone.v2_0.options.UpdateUserOptions;
+import org.jclouds.openstack.v2_0.internal.BaseOpenStackMockTest;
+import org.testng.annotations.Test;
+
+import com.squareup.okhttp.mockwebserver.MockResponse;
+import com.squareup.okhttp.mockwebserver.MockWebServer;
+import com.squareup.okhttp.mockwebserver.RecordedRequest;
+
+/**
+ * Tests UserApi Guice wiring and parsing
+ *
+ * @author Pedro Navarro
+ */
+@Test(groups = "unit", testName = "UserAdminApiMockTest")
+public class UserAdminApiMockTest extends BaseOpenStackMockTest<KeystoneApi> {
+
+ public void createUser() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(201).setBody(
+ stringFromResource("/user_create_response.json"))));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ UserAdminApi userAdminApi = keystoneApi.getUserAdminApi().get();
+ CreateUserOptions createUserOptions = CreateUserOptions.Builder.email("john.smith@example.org").enabled(true);
+ User testUser = userAdminApi.create("jqsmith", "jclouds-password", createUserOptions);
+
+ assertNotNull(testUser);
+ assertEquals(testUser.getId(), "u1000");
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest createUserRequest = server.takeRequest();
+ assertEquals(createUserRequest.getRequestLine(), "POST /users HTTP/1.1");
+ assertEquals(
+ new String(createUserRequest.getBody()),
+ "{\"user\":{\"name\":\"jqsmith\",\"password\":\"jclouds-password\",\"email\":\"john.smith@example.org\",\"enabled\":true}}");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void createUserFail() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ UserAdminApi userAdminApi = keystoneApi.getUserAdminApi().get();
+ CreateUserOptions createUserOptions = CreateUserOptions.Builder.email("john.smith@example.org").enabled(true);
+ User testUser = userAdminApi.create("jqsmith", "jclouds-password", createUserOptions);
+
+ assertNull(testUser);
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest createUserRequest = server.takeRequest();
+ assertEquals(createUserRequest.getRequestLine(), "POST /users HTTP/1.1");
+ assertEquals(
+ new String(createUserRequest.getBody()),
+ "{\"user\":{\"name\":\"jqsmith\",\"password\":\"jclouds-password\",\"email\":\"john.smith@example.org\",\"enabled\":true}}");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void updateUser() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(200).setBody(
+ stringFromResource("/user_update_response.json"))));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ UserAdminApi userAdminApi = keystoneApi.getUserAdminApi().get();
+ UpdateUserOptions updateUserOptions = UpdateUserOptions.Builder.email("john.smith.renamed@example.org")
+ .enabled(false).name("jqsmith-renamed").password("jclouds-password");
+ User updatedUser = userAdminApi.update("u1000", updateUserOptions);
+
+ assertNotNull(updatedUser);
+ assertEquals(updatedUser.getId(), "u1000");
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateUserRequest = server.takeRequest();
+ assertEquals(updateUserRequest.getRequestLine(), "PUT /users/u1000 HTTP/1.1");
+ assertEquals(
+ new String(updateUserRequest.getBody()),
+ "{\"user\":{\"name\":\"jqsmith-renamed\",\"email\":\"john.smith.renamed@example.org\",\"password\":\"jclouds-password\",\"enabled\":false}}");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void updateUserFail() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ UserAdminApi userAdminApi = keystoneApi.getUserAdminApi().get();
+ UpdateUserOptions updateUserOptions = UpdateUserOptions.Builder.email("john.smith.renamed@example.org")
+ .enabled(false).name("jqsmith-renamed").password("jclouds-password");
+ User updatedUser = userAdminApi.update("u1000", updateUserOptions);
+
+ assertNull(updatedUser);
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateUserRequest = server.takeRequest();
+ assertEquals(updateUserRequest.getRequestLine(), "PUT /users/u1000 HTTP/1.1");
+ assertEquals(
+ new String(updateUserRequest.getBody()),
+ "{\"user\":{\"name\":\"jqsmith-renamed\",\"email\":\"john.smith.renamed@example.org\",\"password\":\"jclouds-password\",\"enabled\":false}}");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void deleteUser() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(204)));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ UserAdminApi userAdminApi = keystoneApi.getUserAdminApi().get();
+ userAdminApi.delete("u1000");
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateUserRequest = server.takeRequest();
+ assertEquals(updateUserRequest.getRequestLine(), "DELETE /users/u1000 HTTP/1.1");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void deleteUserFail() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access_version_uids.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/admin_extensions.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ KeystoneApi keystoneApi = api(server.getUrl("/").toString(), "openstack-keystone");
+ UserAdminApi userAdminApi = keystoneApi.getUserAdminApi().get();
+ boolean success = userAdminApi.delete("u1000");
+
+ assertFalse(success);
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertExtensions(server);
+ RecordedRequest updateUserRequest = server.takeRequest();
+ assertEquals(updateUserRequest.getRequestLine(), "DELETE /users/u1000 HTTP/1.1");
+ } finally {
+ server.shutdown();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b68f1b6e/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/features/ServiceApiExpectTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/features/ServiceApiExpectTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/features/ServiceApiExpectTest.java
index 4a47e84..fcd9964 100644
--- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/features/ServiceApiExpectTest.java
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/features/ServiceApiExpectTest.java
@@ -53,7 +53,8 @@ public class ServiceApiExpectTest extends BaseKeystoneRestApiExpectTest<Keystone
assertFalse(tenants.isEmpty());
Set<Tenant> expected = ImmutableSet.of(Tenant.builder().name("demo").id("05d1dc7af71646deba64cfc17b81bec0")
- .build(), Tenant.builder().name("admin").id("7aa2e17ec29f44d193c48feaba0852cc").build());
+ .enabled(true).build(), Tenant.builder().name("admin").id("7aa2e17ec29f44d193c48feaba0852cc")
+ .enabled(true).build());
assertEquals(tenants, expected);
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b68f1b6e/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/features/TenantApiExpectTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/features/TenantApiExpectTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/features/TenantApiExpectTest.java
index 51e61e4..3546222 100644
--- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/features/TenantApiExpectTest.java
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/features/TenantApiExpectTest.java
@@ -48,7 +48,8 @@ public class TenantApiExpectTest extends BaseKeystoneRestApiExpectTest<KeystoneA
}
Set<Tenant> expectedTenants = ImmutableSet.of(Tenant.builder().name("demo").id("05d1dc7af71646deba64cfc17b81bec0")
- .build(), Tenant.builder().name("admin").id("7aa2e17ec29f44d193c48feaba0852cc").build());
+ .enabled(true).build(), Tenant.builder().name("admin").id("7aa2e17ec29f44d193c48feaba0852cc").enabled(true)
+ .build());
public void testListTenants() {
TenantApi api = requestsSendResponses(
@@ -114,7 +115,8 @@ public class TenantApiExpectTest extends BaseKeystoneRestApiExpectTest<KeystoneA
.getTenantApi().get();
Tenant tenant = api.get("013ba41150a14830bec85ffe93353bcc");
assertNotNull(tenant);
- assertEquals(tenant, Tenant.builder().id("013ba41150a14830bec85ffe93353bcc").name("admin").build());
+ assertEquals(tenant, Tenant.builder().id("013ba41150a14830bec85ffe93353bcc").name("admin").enabled(true).
+ build());
}
@Test(expectedExceptions = AuthorizationException.class)
@@ -135,7 +137,8 @@ public class TenantApiExpectTest extends BaseKeystoneRestApiExpectTest<KeystoneA
.getTenantApi().get();
Tenant tenant = api.getByName("admin");
assertNotNull(tenant);
- assertEquals(tenant, Tenant.builder().id("013ba41150a14830bec85ffe93353bcc").name("admin").build());
+ assertEquals(tenant, Tenant.builder().id("013ba41150a14830bec85ffe93353bcc").name("admin").enabled(true).
+ build());
}
public void testGetTenantByNameFailNotFound() {
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b68f1b6e/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/features/TokenApiExpectTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/features/TokenApiExpectTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/features/TokenApiExpectTest.java
index 7924677..dd6e603 100644
--- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/features/TokenApiExpectTest.java
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/features/TokenApiExpectTest.java
@@ -66,7 +66,7 @@ public class TokenApiExpectTest extends BaseKeystoneRestApiExpectTest<KeystoneAp
assertNotNull(token);
assertEquals(token,
Token.builder().id("167eccdc790946969ced473732e8109b").expires(dateService.iso8601SecondsDateParse("2012-04-28T12:42:50Z"))
- .tenant(Tenant.builder().id("4cea93f5464b4f1c921fb3e0461d72b5").name("demo").build()).build());
+ .tenant(Tenant.builder().id("4cea93f5464b4f1c921fb3e0461d72b5").name("demo").enabled(true).build()).build());
}
public void testGetTokenFailNotFound() {
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b68f1b6e/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/features/UserApiExpectTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/features/UserApiExpectTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/features/UserApiExpectTest.java
index 59e65db..9228b9b 100644
--- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/features/UserApiExpectTest.java
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/features/UserApiExpectTest.java
@@ -51,11 +51,14 @@ public class UserApiExpectTest extends BaseKeystoneRestApiExpectTest<KeystoneApi
}
Set<User> expectedUsers = ImmutableSet.of(
- User.builder().name("nova").id("e021dfd758eb44a89f1c57c8ef3be8e2").build(),
- User.builder().name("glance").id("3f6c1c9ba993495ead7d2eb2192e284f").build(),
- User.builder().name("demo").id("667b2e1420604df8b67cd8ea57d4ee64").build(),
- User.builder().name("admin").id("2b9b606181634ae9ac86fd95a8bc2cde").build()
- );
+ User.builder().name("nova").id("e021dfd758eb44a89f1c57c8ef3be8e2").email("nova@example.com").enabled(true).
+ tenantId("ab1da202f5774cceb5da2aeff1f0aa87").build(),
+ User.builder().name("glance").id("3f6c1c9ba993495ead7d2eb2192e284f").email("glance@example.com").enabled(true).
+ tenantId("ab1da202f5774cceb5da2aeff1f0aa87").build(),
+ User.builder().name("demo").id("667b2e1420604df8b67cd8ea57d4ee64").email("demo@example.com").enabled(true).
+ tenantId(null).build(),
+ User.builder().name("admin").id("2b9b606181634ae9ac86fd95a8bc2cde").email("admin@example.com").enabled(true).
+ tenantId(null).build());
public void testListUsers() {
UserApi api = requestsSendResponses(
@@ -106,7 +109,8 @@ public class UserApiExpectTest extends BaseKeystoneRestApiExpectTest<KeystoneApi
.getUserApi().get();
User user = api.get("e021dfd758eb44a89f1c57c8ef3be8e2");
assertNotNull(user);
- assertEquals(user, User.builder().name("nova").id("e021dfd758eb44a89f1c57c8ef3be8e2").build());
+ assertEquals(user, User.builder().name("nova").id("e021dfd758eb44a89f1c57c8ef3be8e2").email("nova@example.com").enabled(true).
+ tenantId("ab1da202f5774cceb5da2aeff1f0aa87").build());
}
public void testGetUserFailNotFound() {
@@ -125,7 +129,8 @@ public class UserApiExpectTest extends BaseKeystoneRestApiExpectTest<KeystoneApi
.getUserApi().get();
User user = api.getByName("nova");
assertNotNull(user);
- assertEquals(user, User.builder().name("nova").id("e021dfd758eb44a89f1c57c8ef3be8e2").build());
+ assertEquals(user, User.builder().name("nova").id("e021dfd758eb44a89f1c57c8ef3be8e2").email("nova@example.com").enabled(true).
+ tenantId("ab1da202f5774cceb5da2aeff1f0aa87").build());
}
public void testGetUserByNameFailNotFound() {
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b68f1b6e/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/functions/internal/ParseUsersTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/functions/internal/ParseUsersTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/functions/internal/ParseUsersTest.java
index 9e01690..d01d63b 100644
--- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/functions/internal/ParseUsersTest.java
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/functions/internal/ParseUsersTest.java
@@ -49,10 +49,14 @@ public class ParseUsersTest {
}.getType();
Set<User> expectedUsers = ImmutableSet.of(
- User.builder().name("nova").id("e021dfd758eb44a89f1c57c8ef3be8e2").build(),
- User.builder().name("glance").id("3f6c1c9ba993495ead7d2eb2192e284f").build(),
- User.builder().name("demo").id("667b2e1420604df8b67cd8ea57d4ee64").build(),
- User.builder().name("admin").id("2b9b606181634ae9ac86fd95a8bc2cde").build());
+ User.builder().name("nova").id("e021dfd758eb44a89f1c57c8ef3be8e2").email("nova@example.com").enabled(true).
+ tenantId("ab1da202f5774cceb5da2aeff1f0aa87").build(),
+ User.builder().name("glance").id("3f6c1c9ba993495ead7d2eb2192e284f").email("glance@example.com").enabled(true).
+ tenantId("ab1da202f5774cceb5da2aeff1f0aa87").build(),
+ User.builder().name("demo").id("667b2e1420604df8b67cd8ea57d4ee64").email("demo@example.com").enabled(true).
+ tenantId(null).build(),
+ User.builder().name("admin").id("2b9b606181634ae9ac86fd95a8bc2cde").email("admin@example.com").enabled(true).
+ tenantId(null).build());
public void testParseUsersInMap() throws JsonSyntaxException, IOException {
String json = Strings2.toStringAndClose(getClass().getResourceAsStream("/user_list.json"));
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b68f1b6e/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/parse/ParseAdminAccessTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/parse/ParseAdminAccessTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/parse/ParseAdminAccessTest.java
index 01468da..b05627d 100644
--- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/parse/ParseAdminAccessTest.java
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/parse/ParseAdminAccessTest.java
@@ -50,7 +50,8 @@ public class ParseAdminAccessTest extends BaseItemParserTest<Access> {
.token(Token.builder()
.expires(new SimpleDateFormatDateService().iso8601SecondsDateParse("2012-08-01T13:08:52Z"))
.id("946b8ad1ede4422f87ab21dcba27896d")
- .tenant(Tenant.builder().id("2fdc88ae152948c690b97ba307acae9b").name("admin").build()).build())
+ .tenant(Tenant.builder().id("2fdc88ae152948c690b97ba307acae9b").name("admin")
+ .enabled(true).build()).build())
.user(User.builder()
.id("b4d134cfe3cf43ad8ba0c2fc5b5d8f91")
.name("admin")
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b68f1b6e/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/parse/ParseRandomEndpointVersionAccessTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/parse/ParseRandomEndpointVersionAccessTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/parse/ParseRandomEndpointVersionAccessTest.java
index 44da840..96512d4 100644
--- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/parse/ParseRandomEndpointVersionAccessTest.java
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v2_0/parse/ParseRandomEndpointVersionAccessTest.java
@@ -53,7 +53,7 @@ public class ParseRandomEndpointVersionAccessTest extends BaseItemParserTest<Acc
.tenant(Tenant.builder()
// "enabled": true,
.id("82d8d2f865484776a1daf1e2245d3317")
- .name("demo").build()).build())
+ .name("demo").enabled(true).build()).build())
.service(Service.builder().type("compute").name("nova")
.endpoint(Endpoint.builder()
.adminURL("http://10.10.10.10:8774/v2/82d8d2f865484776a1daf1e2245d3317")
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b68f1b6e/apis/openstack-keystone/src/test/java/org/jclouds/openstack/v2_0/internal/BaseOpenStackMockTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/v2_0/internal/BaseOpenStackMockTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/v2_0/internal/BaseOpenStackMockTest.java
index ecc8b2b..dc2d660 100644
--- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/v2_0/internal/BaseOpenStackMockTest.java
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/v2_0/internal/BaseOpenStackMockTest.java
@@ -150,6 +150,18 @@ public class BaseOpenStackMockTest<A extends Closeable> {
Throwables.propagate(e);
}
}
+
+ /**
+ * Ensures server received authentication request.
+ */
+ public void assertExtensions(MockWebServer server) {
+ assertTrue(server.getRequestCount() >= 1);
+ try {
+ assertEquals(server.takeRequest().getRequestLine(), "GET /extensions HTTP/1.1");
+ } catch (InterruptedException e) {
+ Throwables.propagate(e);
+ }
+ }
/**
* Ensures the request has a json header.
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b68f1b6e/apis/openstack-keystone/src/test/resources/admin_extensions.json
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/resources/admin_extensions.json b/apis/openstack-keystone/src/test/resources/admin_extensions.json
new file mode 100644
index 0000000..65eae4a
--- /dev/null
+++ b/apis/openstack-keystone/src/test/resources/admin_extensions.json
@@ -0,0 +1 @@
+{"extensions":[{"name":"OS-KSADM","alias":"OS-KSADM","namespace":"http://docs.openstack.org/identity/api/ext/OS-KSADM/v1.0","updated":"2011-08-08T00:00:00+00:00","description":"Keystone Administration Extension"}]}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b68f1b6e/apis/openstack-keystone/src/test/resources/role_create_response.json
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/resources/role_create_response.json b/apis/openstack-keystone/src/test/resources/role_create_response.json
new file mode 100644
index 0000000..0826512
--- /dev/null
+++ b/apis/openstack-keystone/src/test/resources/role_create_response.json
@@ -0,0 +1 @@
+{"role":{"id":"r1000","name":"jclouds-role"}}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b68f1b6e/apis/openstack-keystone/src/test/resources/role_list_response.json
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/resources/role_list_response.json b/apis/openstack-keystone/src/test/resources/role_list_response.json
new file mode 100644
index 0000000..3cf9f8f
--- /dev/null
+++ b/apis/openstack-keystone/src/test/resources/role_list_response.json
@@ -0,0 +1 @@
+{"roles": [{"id": "22529316b2384072b2e8946af5e8cfb6", "name": "admin"}, {"enabled": "True", "description": "Default role for project membership", "name": "_member_", "id": "9fe2ff9ee4384b1894a90878d3e92bab"}]}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b68f1b6e/apis/openstack-keystone/src/test/resources/service_create_response.json
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/resources/service_create_response.json b/apis/openstack-keystone/src/test/resources/service_create_response.json
new file mode 100644
index 0000000..d80d5bd
--- /dev/null
+++ b/apis/openstack-keystone/src/test/resources/service_create_response.json
@@ -0,0 +1 @@
+{"OS-KSADM:service": {"id": "s1000", "type": "jclouds-service-type", "name": "jclouds-service-test", "description": "jclouds-service-description"}}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b68f1b6e/apis/openstack-keystone/src/test/resources/service_list_response.json
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/resources/service_list_response.json b/apis/openstack-keystone/src/test/resources/service_list_response.json
new file mode 100644
index 0000000..3d7d52e
--- /dev/null
+++ b/apis/openstack-keystone/src/test/resources/service_list_response.json
@@ -0,0 +1 @@
+{"OS-KSADM:services": [{"id": "150a35a1e24547fdb4122b7fc90929b0", "type": "network", "name": "neutron", "description": "Network Service"}, {"id": "313b229fcede4a148f5bd11199264f8e", "type": "volume", "name": "cinder", "description": "OpenStack Volume Service"}]}
\ No newline at end of file