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 15:41:29 UTC

[46/50] [abbrv] jclouds git commit: Completed the RegionApi

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/98a85843
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/98a85843
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/98a85843

Branch: refs/heads/keystonev3
Commit: 98a85843137372326099615bc761162241123e8c
Parents: 1f84b60
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 16:21:31 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/98a85843/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/98a85843/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/98a85843/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/98a85843/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/98a85843/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/98a85843/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/98a85843/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/98a85843/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/98a85843/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"
+  }
+}