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/11 14:20:55 UTC
jclouds git commit: Completed the RegionApi
Repository: jclouds
Updated Branches:
refs/heads/keystonev3 963a46a35 -> 22be342db
Completed the RegionApi
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/22be342d
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/22be342d
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/22be342d
Branch: refs/heads/keystonev3
Commit: 22be342db6d4ec5c1bbdfacb9686a65cf544655a
Parents: 963a46a
Author: Ignasi Barrera <na...@apache.org>
Authored: Thu Jan 11 15:20:42 2018 +0100
Committer: Ignasi Barrera <na...@apache.org>
Committed: Thu Jan 11 15:20:42 2018 +0100
----------------------------------------------------------------------
.../openstack/keystone/v3/domain/Region.java | 10 +--
.../keystone/v3/features/ProjectApi.java | 6 +-
.../keystone/v3/features/RegionApi.java | 37 +++++++++
.../openstack/keystone/v3/features/UserApi.java | 50 ++++++++++++
.../v3/features/ProjectApiLiveTest.java | 2 +-
.../v3/features/ProjectApiMockTest.java | 2 +-
.../keystone/v3/features/RegionApiLiveTest.java | 52 +++++++++++--
.../keystone/v3/features/RegionApiMockTest.java | 81 +++++++++++++++++++-
.../src/test/resources/v3/region.json | 10 +++
9 files changed, 231 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/22be342d/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/Region.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/Region.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/Region.java
index 0c1a189..70598fe 100644
--- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/Region.java
+++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/domain/Region.java
@@ -25,13 +25,13 @@ import com.google.auto.value.AutoValue;
public abstract class Region {
public abstract String id();
- public abstract String name();
- public abstract Link link();
+ public abstract String description();
+ @Nullable public abstract Link link();
@Nullable public abstract String parentRegionId();
@SerializedNames({ "id", "description", "links", "parent_region_id" })
- public static Region create(String id, String name, Link link, String parentRegionId) {
- return builder().id(id).name(name).link(link).parentRegionId(parentRegionId).build();
+ public static Region create(String id, String description, Link link, String parentRegionId) {
+ return builder().id(id).description(description).link(link).parentRegionId(parentRegionId).build();
}
Region() {
@@ -46,7 +46,7 @@ public abstract class Region {
@AutoValue.Builder
public abstract static class Builder {
public abstract Builder id(String id);
- public abstract Builder name(String name);
+ public abstract Builder description(String name);
public abstract Builder link(Link link);
public abstract Builder parentRegionId(String parentRegionId);
public abstract Region build();
http://git-wip-us.apache.org/repos/asf/jclouds/blob/22be342d/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/ProjectApi.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/ProjectApi.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/ProjectApi.java
index 14e8d97..494e851 100644
--- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/ProjectApi.java
+++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/ProjectApi.java
@@ -33,6 +33,7 @@ import javax.ws.rs.core.MediaType;
import org.jclouds.Fallbacks.EmptyListOnNotFoundOr404;
import org.jclouds.Fallbacks.FalseOnNotFoundOr404;
import org.jclouds.Fallbacks.NullOnNotFoundOr404;
+import org.jclouds.javax.annotation.Nullable;
import org.jclouds.openstack.keystone.auth.filters.AuthenticateRequest;
import org.jclouds.openstack.keystone.v3.domain.Project;
import org.jclouds.openstack.v2_0.services.Identity;
@@ -71,7 +72,10 @@ public interface ProjectApi {
@Named("projects:create")
@POST
@SelectJson("project")
- Project create(@WrapWith("project") Project project);
+ @WrapWith("project")
+ Project create(@PayloadParam("name") String name, @Nullable @PayloadParam("description") String description,
+ @PayloadParam("enabled") boolean enabled, @PayloadParam("is_domain") boolean isDomain,
+ @Nullable @PayloadParam("domain_id") String domainId, @Nullable @PayloadParam("parent_id") String parentId);
@Named("projects:update")
@PATCH
http://git-wip-us.apache.org/repos/asf/jclouds/blob/22be342d/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/RegionApi.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/RegionApi.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/RegionApi.java
index cc87040..c21716f 100644
--- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/RegionApi.java
+++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/RegionApi.java
@@ -20,18 +20,27 @@ import java.util.List;
import javax.inject.Named;
import javax.ws.rs.Consumes;
+import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
+import javax.ws.rs.POST;
import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
import javax.ws.rs.core.MediaType;
import org.jclouds.Fallbacks.EmptyListOnNotFoundOr404;
+import org.jclouds.Fallbacks.FalseOnNotFoundOr404;
+import org.jclouds.Fallbacks.NullOnNotFoundOr404;
+import org.jclouds.javax.annotation.Nullable;
import org.jclouds.openstack.keystone.auth.filters.AuthenticateRequest;
import org.jclouds.openstack.keystone.v3.domain.Region;
import org.jclouds.openstack.v2_0.services.Identity;
import org.jclouds.rest.annotations.Endpoint;
import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.PATCH;
+import org.jclouds.rest.annotations.PayloadParam;
import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.annotations.SelectJson;
+import org.jclouds.rest.annotations.WrapWith;
/**
* Provides access to the Keystone Region API.
@@ -47,4 +56,32 @@ public interface RegionApi {
@SelectJson("regions")
@Fallback(EmptyListOnNotFoundOr404.class)
List<Region> list();
+
+ @Named("regions:get")
+ @GET
+ @Path("/{id}")
+ @SelectJson("region")
+ @Fallback(NullOnNotFoundOr404.class)
+ Region get(@PathParam("id") String id);
+
+ @Named("regions:create")
+ @POST
+ @SelectJson("region")
+ @WrapWith("region")
+ Region create(@PayloadParam("id") String id, @Nullable @PayloadParam("description") String description,
+ @Nullable @PayloadParam("parent_region_id") String parentId);
+
+ @Named("regions:update")
+ @PATCH
+ @Path("/{id}")
+ @SelectJson("region")
+ @WrapWith("region")
+ Region update(@PathParam("id") String id, @Nullable @PayloadParam("description") String description,
+ @Nullable @PayloadParam("parent_region_id") String parentId);
+
+ @Named("regions:delete")
+ @DELETE
+ @Path("/{id}")
+ @Fallback(FalseOnNotFoundOr404.class)
+ boolean delete(@PathParam("id") String id);
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/22be342d/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/UserApi.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/UserApi.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/UserApi.java
new file mode 100644
index 0000000..1bb884d
--- /dev/null
+++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v3/features/UserApi.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.openstack.keystone.v3.features;
+
+import java.util.List;
+
+import javax.inject.Named;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.MediaType;
+
+import org.jclouds.Fallbacks.EmptyListOnNotFoundOr404;
+import org.jclouds.openstack.keystone.auth.filters.AuthenticateRequest;
+import org.jclouds.openstack.keystone.v3.domain.Region;
+import org.jclouds.openstack.v2_0.services.Identity;
+import org.jclouds.rest.annotations.Endpoint;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.SelectJson;
+
+/**
+ * Provides access to the Keystone Region API.
+ */
+@Consumes(MediaType.APPLICATION_JSON)
+@RequestFilters(AuthenticateRequest.class)
+@Endpoint(Identity.class)
+@Path("/regions")
+public interface UserApi {
+
+ @Named("regions:list")
+ @GET
+ @SelectJson("regions")
+ @Fallback(EmptyListOnNotFoundOr404.class)
+ List<Region> list();
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/22be342d/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/ProjectApiLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/ProjectApiLiveTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/ProjectApiLiveTest.java
index 2c2f20a..df0c0dd 100644
--- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/ProjectApiLiveTest.java
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/ProjectApiLiveTest.java
@@ -40,7 +40,7 @@ public class ProjectApiLiveTest extends BaseV3KeystoneApiLiveTest {
@BeforeClass
public void createTestProject() {
- project = api().create(Project.builder().name(getClass().getSimpleName()).build());
+ project = api().create(getClass().getSimpleName(), null, true, false, null, null);
assertNotNull(project.id());
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/22be342d/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/ProjectApiMockTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/ProjectApiMockTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/ProjectApiMockTest.java
index fc71a6e..b8a4542 100644
--- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/ProjectApiMockTest.java
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/ProjectApiMockTest.java
@@ -87,7 +87,7 @@ public class ProjectApiMockTest extends BaseV3KeystoneApiMockTest {
enqueueAuthentication(server);
server.enqueue(jsonResponse("/v3/project.json"));
- Project project = api.getProjectApi().create(Project.builder().name("foo").build());
+ Project project = api.getProjectApi().create("foo", null, true, false, null, null);
assertNotNull(project);
assertEquals(server.getRequestCount(), 2);
http://git-wip-us.apache.org/repos/asf/jclouds/blob/22be342d/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/RegionApiLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/RegionApiLiveTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/RegionApiLiveTest.java
index 3770d95..0e5bcfb 100644
--- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/RegionApiLiveTest.java
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/RegionApiLiveTest.java
@@ -16,22 +16,58 @@
*/
package org.jclouds.openstack.keystone.v3.features;
-import static org.testng.Assert.assertFalse;
+import static com.google.common.collect.Iterables.any;
+import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
-
-import java.util.List;
+import static org.testng.Assert.assertTrue;
import org.jclouds.openstack.keystone.v3.domain.Region;
import org.jclouds.openstack.keystone.v3.internal.BaseV3KeystoneApiLiveTest;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
-@Test(groups = "live", testName = "RegionApiLiveTest")
+import com.google.common.base.Predicate;
+
+@Test(groups = "live", testName = "RegionApiLiveTest", singleThreaded = true)
public class RegionApiLiveTest extends BaseV3KeystoneApiLiveTest {
+ private Region region;
+
+ @BeforeClass
+ public void createTestRegion() {
+ region = api().create(getClass().getSimpleName(), null, null);
+ assertEquals(region.id(), getClass().getSimpleName());
+ }
+
+ @Test
+ public void testListRegions() {
+ assertTrue(any(api().list(), new Predicate<Region>() {
+ @Override
+ public boolean apply(Region input) {
+ return input.id().equals(region.id());
+ }
+ }));
+ }
+
@Test
- public void testRegions() {
- List<Region> result = api.getRegionApi().list();
- assertNotNull(result);
- assertFalse(result.isEmpty());
+ public void testGetRegion() {
+ assertNotNull(api().get(region.id()));
+ }
+
+ @Test
+ public void testUpdateRegion() {
+ api().update(region.id(), "Updated", null);
+ region = api().get(region.id());
+ assertEquals(region.description(), "Updated");
+ }
+
+ @AfterClass(alwaysRun = true)
+ public void deleteRegion() {
+ assertTrue(api().delete(region.id()));
+ }
+
+ private RegionApi api() {
+ return api.getRegionApi();
}
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/22be342d/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/RegionApiMockTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/RegionApiMockTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/RegionApiMockTest.java
index f640140..2e68246 100644
--- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/RegionApiMockTest.java
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/keystone/v3/features/RegionApiMockTest.java
@@ -18,6 +18,8 @@ package org.jclouds.openstack.keystone.v3.features;
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.List;
@@ -35,7 +37,7 @@ public class RegionApiMockTest extends BaseV3KeystoneApiMockTest {
List<Region> regions = api.getRegionApi().list();
assertFalse(regions.isEmpty());
-
+
assertEquals(server.getRequestCount(), 2);
assertAuthentication(server);
assertSent(server, "GET", "/regions");
@@ -47,10 +49,83 @@ public class RegionApiMockTest extends BaseV3KeystoneApiMockTest {
List<Region> regions = api.getRegionApi().list();
assertTrue(regions.isEmpty());
-
+
assertEquals(server.getRequestCount(), 2);
assertAuthentication(server);
assertSent(server, "GET", "/regions");
}
-
+
+ public void testGetRegion() throws InterruptedException {
+ enqueueAuthentication(server);
+ server.enqueue(jsonResponse("/v3/region.json"));
+
+ Region region = api.getRegionApi().get("RegionOne");
+ assertNotNull(region);
+
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertSent(server, "GET", "/regions/RegionOne");
+ }
+
+ public void testGetRegionReturns404() throws InterruptedException {
+ enqueueAuthentication(server);
+ server.enqueue(response404());
+
+ Region region = api.getRegionApi().get("RegionOne");
+ assertNull(region);
+
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertSent(server, "GET", "/regions/RegionOne");
+ }
+
+ public void testCreateRegion() throws InterruptedException {
+ enqueueAuthentication(server);
+ server.enqueue(jsonResponse("/v3/region.json"));
+
+ Region region = api.getRegionApi().create("RegionOne", "Description", "12345");
+ assertNotNull(region);
+
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertSent(server, "POST", "/regions",
+ "{\"region\":{\"id\":\"RegionOne\",\"description\":\"Description\",\"parent_region_id\":\"12345\"}}");
+ }
+
+ public void testUpdateRegion() throws InterruptedException {
+ enqueueAuthentication(server);
+ server.enqueue(jsonResponse("/v3/region.json"));
+
+ Region region = api.getRegionApi().update("RegionOne", "Updated", null);
+ assertNotNull(region);
+
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertSent(server, "PATCH", "/regions/RegionOne", "{\"region\":{\"description\":\"Updated\"}}");
+ }
+
+ public void testDeleteRegion() throws InterruptedException {
+ enqueueAuthentication(server);
+ server.enqueue(response204());
+
+ boolean deleted = api.getRegionApi().delete("RegionOne");
+ assertTrue(deleted);
+
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertSent(server, "DELETE", "/regions/RegionOne");
+ }
+
+ public void testDeleteRegionReturns404() throws InterruptedException {
+ enqueueAuthentication(server);
+ server.enqueue(response404());
+
+ boolean deleted = api.getRegionApi().delete("RegionOne");
+ assertFalse(deleted);
+
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertSent(server, "DELETE", "/regions/RegionOne");
+ }
+
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/22be342d/apis/openstack-keystone/src/test/resources/v3/region.json
----------------------------------------------------------------------
diff --git a/apis/openstack-keystone/src/test/resources/v3/region.json b/apis/openstack-keystone/src/test/resources/v3/region.json
new file mode 100644
index 0000000..ee5eee8
--- /dev/null
+++ b/apis/openstack-keystone/src/test/resources/v3/region.json
@@ -0,0 +1,10 @@
+{
+ "region": {
+ "parent_region_id": null,
+ "id": "RegionOne",
+ "links": {
+ "self": "http://localhost/identity/v3/regions/RegionApiLiveTest"
+ },
+ "description": "Updated"
+ }
+}