Updated Branches:
  refs/heads/master 009aa2842 -> c5fb676a9

Make listCookbooksInEnvironment return an empty set on 404

Added tests to validate above.
Also factored out some duplicate code in test.


Project: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-chef/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-chef/commit/c5fb676a
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-chef/tree/c5fb676a
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-jclouds-chef/diff/c5fb676a

Branch: refs/heads/master
Commit: c5fb676a97b8d456ece28f845cf447cfff7c4848
Parents: 009aa28
Author: Noorul Islam K M <[email protected]>
Authored: Thu Sep 19 17:16:30 2013 +0530
Committer: Ignasi Barrera <[email protected]>
Committed: Thu Sep 19 15:48:05 2013 +0200

----------------------------------------------------------------------
 .../src/main/java/org/jclouds/chef/ChefApi.java | 11 +--
 .../org/jclouds/chef/ChefApiExpectTest.java     | 93 ++++++++------------
 2 files changed, 45 insertions(+), 59 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-jclouds-chef/blob/c5fb676a/core/src/main/java/org/jclouds/chef/ChefApi.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/chef/ChefApi.java 
b/core/src/main/java/org/jclouds/chef/ChefApi.java
index b8b4513..5601022 100644
--- a/core/src/main/java/org/jclouds/chef/ChefApi.java
+++ b/core/src/main/java/org/jclouds/chef/ChefApi.java
@@ -192,7 +192,7 @@ public interface ChefApi extends Closeable {
     * 
     * @param environmentname The name of the environment to get the cookbooks
     *        from.
-    * @return The definitions of the cookbooks (URL and versions) available in
+    * @return The definitions of the cookbooks (name, URL and versions) 
available in
     *         the given environment.
     */
    @SinceApiVersion("0.10.0")
@@ -200,17 +200,18 @@ public interface ChefApi extends Closeable {
    @GET
    @ResponseParser(ParseCookbookDefinitionListFromJsonv10.class)
    @Path("/environments/{environmentname}/cookbooks")
-   @Fallback(NullOnNotFoundOr404.class)
+   @Fallback(EmptySetOnNotFoundOr404.class)
    Set<CookbookDefinition> 
listCookbooksInEnvironment(@PathParam("environmentname") String 
environmentName);
 
    /**
     * Lists the cookbooks that are available in the given environment, limiting
     * the number of versions returned for each cookbook.
     * 
-    * @param environmentname The name of the environment.
+    * @param environmentname The name of the environment to get the cookbooks
+    *        from.
     * @param numversions The number of cookbook versions to include in the
     *        response, where n is the number of cookbook versions.
-    * @return The definitions of the cookbooks (URL and versions) available in
+    * @return The definitions of the cookbooks (name, URL and versions) 
available in
     *         the given environment.
     */
    @SinceApiVersion("0.10.0")
@@ -218,7 +219,7 @@ public interface ChefApi extends Closeable {
    @GET
    @ResponseParser(ParseCookbookDefinitionListFromJsonv10.class)
    
@Path("/environments/{environmentname}/cookbooks?num_versions={numversions}")
-   @Fallback(NullOnNotFoundOr404.class)
+   @Fallback(EmptySetOnNotFoundOr404.class)
    Set<CookbookDefinition> 
listCookbooksInEnvironment(@PathParam("environmentname") String environmentName,
          @PathParam("numversions") String numVersions);
 

http://git-wip-us.apache.org/repos/asf/incubator-jclouds-chef/blob/c5fb676a/core/src/test/java/org/jclouds/chef/ChefApiExpectTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/jclouds/chef/ChefApiExpectTest.java 
b/core/src/test/java/org/jclouds/chef/ChefApiExpectTest.java
index 65344ef..634c5da 100644
--- a/core/src/test/java/org/jclouds/chef/ChefApiExpectTest.java
+++ b/core/src/test/java/org/jclouds/chef/ChefApiExpectTest.java
@@ -45,16 +45,20 @@ public class ChefApiExpectTest extends 
BaseChefApiExpectTest<ChefApi> {
      provider = "chef";
    }
 
+   private HttpRequest.Builder getHttpRequestBuilder(String method, String 
endPoint) {
+      return HttpRequest.builder() //
+                  .method(method) //
+                  .endpoint("http://localhost:4000"; + endPoint) //
+                  .addHeader("X-Chef-Version", 
ChefApiMetadata.DEFAULT_API_VERSION) //
+                  .addHeader("Accept", MediaType.APPLICATION_JSON);
+   }
+
    public void testListClientsReturns2xx() {
       ChefApi api = requestSendsResponse(
-            signed(HttpRequest.builder() //
-                  .method("GET") //
-                  .endpoint("http://localhost:4000/clients";) //
-                  .addHeader("X-Chef-Version", 
ChefApiMetadata.DEFAULT_API_VERSION) //
-                  .addHeader("Accept", MediaType.APPLICATION_JSON).build()), //
-            HttpResponse.builder().statusCode(200)
-                  
.payload(payloadFromResourceWithContentType("/clients_list.json", 
MediaType.APPLICATION_JSON)) //
-                  .build());
+            signed(getHttpRequestBuilder("GET", "/clients").build()),
+            HttpResponse.builder().statusCode(200) //
+                        
.payload(payloadFromResourceWithContentType("/clients_list.json", 
MediaType.APPLICATION_JSON)) //
+                        .build());
       Set<String> nodes = api.listClients();
       assertEquals(nodes.size(), 3);
       assertTrue(nodes.contains("adam"), String.format("Expected nodes to 
contain 'adam' but was: %s", nodes));
@@ -62,11 +66,7 @@ public class ChefApiExpectTest extends 
BaseChefApiExpectTest<ChefApi> {
 
    public void testListClientsReturns404() {
       ChefApi api = requestSendsResponse(
-            signed(HttpRequest.builder() //
-                  .method("GET") //
-                  .endpoint("http://localhost:4000/clients";) //
-                  .addHeader("X-Chef-Version", 
ChefApiMetadata.DEFAULT_API_VERSION) //
-                  .addHeader("Accept", MediaType.APPLICATION_JSON).build()), //
+            signed(getHttpRequestBuilder("GET", "/clients").build()),
             HttpResponse.builder().statusCode(404)
                   .build());
       Set<String> clients = api.listClients();
@@ -75,11 +75,7 @@ public class ChefApiExpectTest extends 
BaseChefApiExpectTest<ChefApi> {
 
    public void testListNodesReturns2xx() {
       ChefApi api = requestSendsResponse(
-            signed(HttpRequest.builder() //
-                  .method("GET") //
-                  .endpoint("http://localhost:4000/nodes";) //
-                  .addHeader("X-Chef-Version", 
ChefApiMetadata.DEFAULT_API_VERSION) //
-                  .addHeader("Accept", MediaType.APPLICATION_JSON).build()), //
+            signed(getHttpRequestBuilder("GET", "/nodes").build()),
             HttpResponse.builder().statusCode(200)
                   
.payload(payloadFromResourceWithContentType("/nodes_list.json", 
MediaType.APPLICATION_JSON)) //
                   .build());
@@ -90,24 +86,15 @@ public class ChefApiExpectTest extends 
BaseChefApiExpectTest<ChefApi> {
 
    public void testListNodesReturns404() {
       ChefApi api = requestSendsResponse(
-            signed(HttpRequest.builder() //
-                  .method("GET") //
-                  .endpoint("http://localhost:4000/nodes";) //
-                  .addHeader("X-Chef-Version", 
ChefApiMetadata.DEFAULT_API_VERSION) //
-                  .addHeader("Accept", MediaType.APPLICATION_JSON).build()), //
-            HttpResponse.builder().statusCode(404)
-                  .build());
+            signed(getHttpRequestBuilder("GET", "/nodes").build()),
+            HttpResponse.builder().statusCode(404).build());
       Set<String> nodes = api.listNodes();
       assertTrue(nodes.isEmpty(), String.format("Expected nodes to be empty 
but was: %s", nodes));
    }
    
    public void testListRecipesInEnvironmentReturns2xx() {
       ChefApi api = requestSendsResponse(
-            signed(HttpRequest.builder() //
-                  .method("GET") //
-                  .endpoint("http://localhost:4000/environments/dev/recipes";) 
//
-                  .addHeader("X-Chef-Version", 
ChefApiMetadata.DEFAULT_API_VERSION) //
-                  .addHeader("Accept", MediaType.APPLICATION_JSON).build()), //
+            signed(getHttpRequestBuilder("GET", 
"/environments/dev/recipes").build()),
             HttpResponse.builder().statusCode(200)
                   
.payload(payloadFromResourceWithContentType("/environment_recipes.json", 
MediaType.APPLICATION_JSON)) //
                   .build());
@@ -118,24 +105,15 @@ public class ChefApiExpectTest extends 
BaseChefApiExpectTest<ChefApi> {
 
    public void testListRecipesInEnvironmentReturns404() {
       ChefApi api = requestSendsResponse(
-            signed(HttpRequest.builder() //
-                  .method("GET") //
-                  .endpoint("http://localhost:4000/environments/dev/recipes";) 
//
-                  .addHeader("X-Chef-Version", 
ChefApiMetadata.DEFAULT_API_VERSION) //
-                  .addHeader("Accept", MediaType.APPLICATION_JSON).build()), //
-            HttpResponse.builder().statusCode(404)
-                  .build());
+            signed(getHttpRequestBuilder("GET", 
"/environments/dev/recipes").build()),
+            HttpResponse.builder().statusCode(404).build());
       Set<String> recipes = api.listRecipesInEnvironment("dev");
       assertTrue(recipes.isEmpty(), String.format("Expected recipes to be 
empty but was: %s", recipes));
    }
 
    public void testListNodesInEnvironmentReturns2xx() {
       ChefApi api = requestSendsResponse(
-            signed(HttpRequest.builder() //
-                  .method("GET") //
-                  .endpoint("http://localhost:4000/environments/dev/nodes";) //
-                  .addHeader("X-Chef-Version", 
ChefApiMetadata.DEFAULT_API_VERSION) //
-                  .addHeader("Accept", MediaType.APPLICATION_JSON).build()), //
+            signed(getHttpRequestBuilder("GET", 
"/environments/dev/nodes").build()),
             HttpResponse.builder().statusCode(200)
                   
.payload(payloadFromResourceWithContentType("/nodes_list.json", 
MediaType.APPLICATION_JSON)) //
                   .build());
@@ -146,24 +124,15 @@ public class ChefApiExpectTest extends 
BaseChefApiExpectTest<ChefApi> {
 
    public void testListNodesInEnvironmentReturns404() {
       ChefApi api = requestSendsResponse(
-            signed(HttpRequest.builder() //
-                  .method("GET") //
-                  .endpoint("http://localhost:4000/environments/dev/nodes";) //
-                  .addHeader("X-Chef-Version", 
ChefApiMetadata.DEFAULT_API_VERSION) //
-                  .addHeader("Accept", MediaType.APPLICATION_JSON).build()), //
-            HttpResponse.builder().statusCode(404)
-                  .build());
+            signed(getHttpRequestBuilder("GET", 
"/environments/dev/nodes").build()),
+            HttpResponse.builder().statusCode(404).build());
       Set<String> nodes = api.listNodesInEnvironment("dev");
       assertTrue(nodes.isEmpty(), String.format("Expected nodes to be empty 
but was: %s", nodes));
    }
 
    public void testListCookbooksInEnvironmentReturnsValidSet() {
       ChefApi api = requestSendsResponse(
-            signed(HttpRequest.builder() //
-                  .method("GET") //
-                  
.endpoint("http://localhost:4000/environments/dev/cookbooks";) //
-                  .addHeader("X-Chef-Version", 
ChefApiMetadata.DEFAULT_API_VERSION) //
-                  .addHeader("Accept", MediaType.APPLICATION_JSON).build()), //
+            signed(getHttpRequestBuilder("GET", 
"/environments/dev/cookbooks").build()),
             HttpResponse.builder().statusCode(200)
                   
.payload(payloadFromResourceWithContentType("/env_cookbooks.json", 
MediaType.APPLICATION_JSON)) //
                   .build());
@@ -171,6 +140,22 @@ public class ChefApiExpectTest extends 
BaseChefApiExpectTest<ChefApi> {
       assertEquals(cookbooks.size(), 2);
    }
 
+   public void testListCookbooksInEnvironmentReturnsEmptySetOn404() {
+      ChefApi api = requestSendsResponse(
+            signed(getHttpRequestBuilder("GET", 
"/environments/dev/cookbooks").build()),
+            HttpResponse.builder().statusCode(404).build());
+      Set<CookbookDefinition> cookbooks = 
api.listCookbooksInEnvironment("dev");
+      assertTrue(cookbooks.isEmpty(), String.format("Expected cookbooks to be 
empty but was: %s", cookbooks));
+   }
+
+   public void 
testListCookbooksInEnvironmentWithNumVersionReturnsEmptySetOn404() {
+      ChefApi api = requestSendsResponse(
+            signed(getHttpRequestBuilder("GET", 
"/environments/dev/cookbooks").addQueryParam("num_versions", "2").build()),
+            HttpResponse.builder().statusCode(404).build());
+      Set<CookbookDefinition> cookbooks = 
api.listCookbooksInEnvironment("dev", "2");
+      assertTrue(cookbooks.isEmpty(), String.format("Expected cookbooks to be 
empty but was: %s", cookbooks));
+   }
+
    @Override
    protected Module createModule() {
       return new TestChefRestClientModule();

Reply via email to