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/11/23 23:00:46 UTC

[05/50] [abbrv] jclouds git commit: JCLOUDS-285: Add name field in CookbookDefinition domain

JCLOUDS-285: Add name field in CookbookDefinition domain


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

Branch: refs/heads/1.8.x
Commit: 996a47783a04051118b3e8c92554f32eab671de6
Parents: 18a3b77
Author: Noorul Islam K M <no...@noorul.com>
Authored: Tue Sep 17 23:03:50 2013 +0530
Committer: Ignasi Barrera <na...@apache.org>
Committed: Thu Sep 19 15:13:25 2013 +0200

----------------------------------------------------------------------
 .../jclouds/chef/domain/CookbookDefinition.java | 33 +++++++++++++++++---
 .../ParseCookbookDefinitionFromJsonv10.java     |  8 ++++-
 .../ParseCookbookDefinitionListFromJsonv10.java | 17 ++++++++--
 .../org/jclouds/chef/ChefApiExpectTest.java     | 15 +++++++++
 .../ParseCookbookDefinitionFromJsonv10Test.java |  2 +-
 ...seCookbookDefinitionListFromJsonv10Test.java |  6 ++--
 .../chef/internal/BaseChefApiLiveTest.java      | 14 +++++++++
 apis/chef/src/test/resources/env_cookbooks.json | 20 ++++++++++++
 8 files changed, 104 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/996a4778/apis/chef/src/main/java/org/jclouds/chef/domain/CookbookDefinition.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/main/java/org/jclouds/chef/domain/CookbookDefinition.java b/apis/chef/src/main/java/org/jclouds/chef/domain/CookbookDefinition.java
index 6531f03..b2f071a 100644
--- a/apis/chef/src/main/java/org/jclouds/chef/domain/CookbookDefinition.java
+++ b/apis/chef/src/main/java/org/jclouds/chef/domain/CookbookDefinition.java
@@ -38,9 +38,15 @@ public class CookbookDefinition {
    }
 
    public static class Builder {
+      private String name;
       private URI url;
       private ImmutableSet.Builder<Version> versions = ImmutableSet.builder();
 
+      public Builder name(String name) {
+         this.name = checkNotNull(name, "name");
+         return this;
+      }
+
       public Builder url(URI url) {
          this.url = checkNotNull(url, "url");
          return this;
@@ -56,20 +62,33 @@ public class CookbookDefinition {
          return this;
       }
 
+      public Builder from(CookbookDefinition def) {
+         this.url = checkNotNull(def.getUrl(), "url");
+         this.versions.addAll(checkNotNull(def.getVersions(), "versions"));
+         this.name = def.getName();
+         return this;
+      }
+
       public CookbookDefinition build() {
-         return new CookbookDefinition(url, versions.build());
+         return new CookbookDefinition(name, url, versions.build());
       }
    }
 
+   private final String name;
    private final URI url;
    private final Set<Version> versions;
 
-   @ConstructorProperties({ "url", "versions" })
-   protected CookbookDefinition(URI url, @Nullable Set<Version> versions) {
+   @ConstructorProperties({"name", "url", "versions" })
+   protected CookbookDefinition(String name, URI url, @Nullable Set<Version> versions) {
+      this.name = name;
       this.url = url;
       this.versions = copyOfOrEmpty(versions);
    }
 
+   public String getName() {
+      return name;
+   }
+
    public URI getUrl() {
       return url;
    }
@@ -82,6 +101,7 @@ public class CookbookDefinition {
    public int hashCode() {
       final int prime = 31;
       int result = 1;
+      result = prime * result + ((name == null) ? 0 : name.hashCode());
       result = prime * result + ((url == null) ? 0 : url.hashCode());
       result = prime * result + ((versions == null) ? 0 : versions.hashCode());
       return result;
@@ -96,6 +116,11 @@ public class CookbookDefinition {
       if (getClass() != obj.getClass())
          return false;
       CookbookDefinition other = (CookbookDefinition) obj;
+      if (name == null) {
+         if (other.name != null)
+            return false;
+      } else if (!name.equals(other.name))
+         return false;
       if (url == null) {
          if (other.url != null)
             return false;
@@ -111,7 +136,7 @@ public class CookbookDefinition {
 
    @Override
    public String toString() {
-      return "CookbookDefinition [url=" + url + ", versions=" + versions + "]";
+      return "CookbookDefinition [name=" + name + ", url=" + url + ", versions=" + versions + "]";
    }
 
    public static class Version {

http://git-wip-us.apache.org/repos/asf/jclouds/blob/996a4778/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookDefinitionFromJsonv10.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookDefinitionFromJsonv10.java b/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookDefinitionFromJsonv10.java
index 562a00a..80ba9af 100644
--- a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookDefinitionFromJsonv10.java
+++ b/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookDefinitionFromJsonv10.java
@@ -43,6 +43,12 @@ public class ParseCookbookDefinitionFromJsonv10 implements Function<HttpResponse
 
    @Override
    public CookbookDefinition apply(HttpResponse response) {
-      return parser.apply(response).values().iterator().next();
+      Map<String, CookbookDefinition> result = parser.apply(response);
+      String cookbookName = result.keySet().iterator().next();
+      CookbookDefinition def = result.values().iterator().next();
+      return CookbookDefinition.builder() //
+             .from(def) //
+             .name(cookbookName) //
+             .build();
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/996a4778/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookDefinitionListFromJsonv10.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookDefinitionListFromJsonv10.java b/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookDefinitionListFromJsonv10.java
index 311e44b..019ed0d 100644
--- a/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookDefinitionListFromJsonv10.java
+++ b/apis/chef/src/main/java/org/jclouds/chef/functions/ParseCookbookDefinitionListFromJsonv10.java
@@ -17,7 +17,6 @@
 package org.jclouds.chef.functions;
 
 import com.google.common.base.Function;
-import com.google.common.collect.Sets;
 import org.jclouds.chef.domain.CookbookDefinition;
 import org.jclouds.http.HttpResponse;
 import org.jclouds.http.functions.ParseJson;
@@ -27,6 +26,9 @@ import javax.inject.Singleton;
 import java.util.Map;
 import java.util.Set;
 
+import static com.google.common.collect.Iterables.transform;
+import static com.google.common.collect.Sets.newLinkedHashSet;
+
 /**
  * Parses the cookbook versions in a Chef Server >= 0.10.8.
  *
@@ -47,6 +49,17 @@ public class ParseCookbookDefinitionListFromJsonv10 implements Function<HttpResp
 
    @Override
    public Set<CookbookDefinition> apply(HttpResponse response) {
-      return Sets.newLinkedHashSet(parser.apply(response).values());
+      Set<Map.Entry<String, CookbookDefinition>> result = parser.apply(response).entrySet();
+      return newLinkedHashSet(transform(result, new Function<Map.Entry<String, CookbookDefinition>, CookbookDefinition>() {
+         @Override
+         public CookbookDefinition apply(Map.Entry<String, CookbookDefinition> input) {
+            String cookbookName = input.getKey();
+            CookbookDefinition def = input.getValue();
+            return CookbookDefinition.builder() //
+                   .from(def) //              
+                   .name(cookbookName) //
+                   .build();
+         }
+      }));
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/996a4778/apis/chef/src/test/java/org/jclouds/chef/ChefApiExpectTest.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/test/java/org/jclouds/chef/ChefApiExpectTest.java b/apis/chef/src/test/java/org/jclouds/chef/ChefApiExpectTest.java
index 7706609..65344ef 100644
--- a/apis/chef/src/test/java/org/jclouds/chef/ChefApiExpectTest.java
+++ b/apis/chef/src/test/java/org/jclouds/chef/ChefApiExpectTest.java
@@ -24,6 +24,7 @@ import java.util.Set;
 import javax.ws.rs.core.MediaType;
 
 import org.jclouds.chef.config.ChefHttpApiModule;
+import org.jclouds.chef.domain.CookbookDefinition;
 import org.jclouds.date.TimeStamp;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.http.HttpResponse;
@@ -156,6 +157,20 @@ public class ChefApiExpectTest extends BaseChefApiExpectTest<ChefApi> {
       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()), //
+            HttpResponse.builder().statusCode(200)
+                  .payload(payloadFromResourceWithContentType("/env_cookbooks.json", MediaType.APPLICATION_JSON)) //
+                  .build());
+      Set<CookbookDefinition> cookbooks = api.listCookbooksInEnvironment("dev");
+      assertEquals(cookbooks.size(), 2);
+   }
+
    @Override
    protected Module createModule() {
       return new TestChefRestClientModule();

http://git-wip-us.apache.org/repos/asf/jclouds/blob/996a4778/apis/chef/src/test/java/org/jclouds/chef/functions/ParseCookbookDefinitionFromJsonv10Test.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/test/java/org/jclouds/chef/functions/ParseCookbookDefinitionFromJsonv10Test.java b/apis/chef/src/test/java/org/jclouds/chef/functions/ParseCookbookDefinitionFromJsonv10Test.java
index 0df9d64..b5d8a8b 100644
--- a/apis/chef/src/test/java/org/jclouds/chef/functions/ParseCookbookDefinitionFromJsonv10Test.java
+++ b/apis/chef/src/test/java/org/jclouds/chef/functions/ParseCookbookDefinitionFromJsonv10Test.java
@@ -58,7 +58,7 @@ public class ParseCookbookDefinitionFromJsonv10Test {
       CookbookDefinition.Version v420 = CookbookDefinition.Version.builder()
             .url(new URI("http://localhost:4000/cookbooks/apache2/4.2.0")).version("4.2.0").build();
       CookbookDefinition definition = CookbookDefinition.builder()
-            .url(new URI("http://localhost:4000/cookbooks/apache2")).version(v510).version(v420).build();
+            .name("apache2").url(new URI("http://localhost:4000/cookbooks/apache2")).version(v510).version(v420).build();
 
       assertEquals(handler.apply(HttpResponse
             .builder()

http://git-wip-us.apache.org/repos/asf/jclouds/blob/996a4778/apis/chef/src/test/java/org/jclouds/chef/functions/ParseCookbookDefinitionListFromJsonv10Test.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/test/java/org/jclouds/chef/functions/ParseCookbookDefinitionListFromJsonv10Test.java b/apis/chef/src/test/java/org/jclouds/chef/functions/ParseCookbookDefinitionListFromJsonv10Test.java
index b39343d..04f8e35 100644
--- a/apis/chef/src/test/java/org/jclouds/chef/functions/ParseCookbookDefinitionListFromJsonv10Test.java
+++ b/apis/chef/src/test/java/org/jclouds/chef/functions/ParseCookbookDefinitionListFromJsonv10Test.java
@@ -59,14 +59,14 @@ public class ParseCookbookDefinitionListFromJsonv10Test {
       CookbookDefinition.Version v420 = CookbookDefinition.Version.builder()
             .url(new URI("http://localhost:4000/cookbooks/apache2/4.2.0")).version("4.2.0").build();
       CookbookDefinition apache2 = CookbookDefinition.builder()
-            .url(new URI("http://localhost:4000/cookbooks/apache2")).version(v510).version(v420).build();
+            .name("apache2").url(new URI("http://localhost:4000/cookbooks/apache2")).version(v510).version(v420).build();
       
       CookbookDefinition.Version v100 = CookbookDefinition.Version.builder()
             .url(new URI("http://localhost:4000/cookbooks/nginx/1.0.0")).version("1.0.0").build();
-      CookbookDefinition.Version v130 = CookbookDefinition.Version.builder()
+      CookbookDefinition.Version v030 = CookbookDefinition.Version.builder()
             .url(new URI("http://localhost:4000/cookbooks/nginx/0.3.0")).version("0.3.0").build();
       CookbookDefinition nginx = CookbookDefinition.builder()
-            .url(new URI("http://localhost:4000/cookbooks/nginx")).version(v100).version(v130).build();
+            .name("nginx").url(new URI("http://localhost:4000/cookbooks/nginx")).version(v100).version(v030).build();
       
       assertEquals(handler.apply(HttpResponse
             .builder()

http://git-wip-us.apache.org/repos/asf/jclouds/blob/996a4778/apis/chef/src/test/java/org/jclouds/chef/internal/BaseChefApiLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/chef/src/test/java/org/jclouds/chef/internal/BaseChefApiLiveTest.java b/apis/chef/src/test/java/org/jclouds/chef/internal/BaseChefApiLiveTest.java
index a742bd1..6d5f075 100644
--- a/apis/chef/src/test/java/org/jclouds/chef/internal/BaseChefApiLiveTest.java
+++ b/apis/chef/src/test/java/org/jclouds/chef/internal/BaseChefApiLiveTest.java
@@ -39,6 +39,7 @@ import java.util.Set;
 import org.jclouds.chef.ChefApi;
 import org.jclouds.chef.domain.ChecksumStatus;
 import org.jclouds.chef.domain.Client;
+import org.jclouds.chef.domain.CookbookDefinition;
 import org.jclouds.chef.domain.CookbookVersion;
 import org.jclouds.chef.domain.DatabagItem;
 import org.jclouds.chef.domain.Environment;
@@ -64,6 +65,9 @@ import com.google.common.collect.ImmutableSet;
 import com.google.common.io.Closeables;
 import com.google.common.primitives.Bytes;
 
+import static com.google.common.collect.Iterables.any;
+import static com.google.common.collect.Iterables.all;
+
 /**
  * Tests behavior of {@code ChefApi}
  * 
@@ -483,6 +487,16 @@ public abstract class BaseChefApiLiveTest<A extends ChefApi> extends BaseChefLiv
       assertTrue(!nodeList.isEmpty());
    }
 
+   @Test(dependsOnMethods = "testCreateNewCookbook")
+   public void testListCookbooksInEnvironment() throws Exception {
+      Set<CookbookDefinition> cookbooks = api.listCookbooksInEnvironment("_default");
+      assertTrue(any(cookbooks, new Predicate<CookbookDefinition>() {
+         @Override
+         public boolean apply(CookbookDefinition input) {
+            return PREFIX.equals(input.getName());
+         }}), String.format("Cookbook %s not in %s", PREFIX, cookbooks));
+   }
+
    @AfterClass(groups = { "live", "integration" })
    @Override
    public void tearDown() {

http://git-wip-us.apache.org/repos/asf/jclouds/blob/996a4778/apis/chef/src/test/resources/env_cookbooks.json
----------------------------------------------------------------------
diff --git a/apis/chef/src/test/resources/env_cookbooks.json b/apis/chef/src/test/resources/env_cookbooks.json
new file mode 100644
index 0000000..ee7114f
--- /dev/null
+++ b/apis/chef/src/test/resources/env_cookbooks.json
@@ -0,0 +1,20 @@
+{
+  "apache2" => {
+    "url" => "http://localhost:4000/cookbooks/apache2",
+    "versions" => [
+      {"url" => "http://localhost:4000/cookbooks/apache2/5.1.0",
+       "version" => "5.1.0"},
+      {"url" => "http://localhost:4000/cookbooks/apache2/4.2.0",
+       "version" => "4.2.0"}
+    ]
+  },
+  "nginx" => {
+    "url" => "http://localhost:4000/cookbooks/nginx",
+    "versions" => [
+      {"url" => "http://localhost:4000/cookbooks/nginx/1.0.0",
+       "version" => "1.0.0"},
+      {"url" => "http://localhost:4000/cookbooks/nginx/0.3.0",
+       "version" => "0.3.0"}
+    ]
+  }
+}