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/12/08 23:32:03 UTC

[2/2] jclouds-labs-google git commit: Updates to Address, Disk, Image, Operations + others

Updates to Address, Disk, Image, Operations + others


Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/commit/70af0477
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/tree/70af0477
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/diff/70af0477

Branch: refs/heads/master
Commit: 70af04770fce742c05e918a680c29ad192b58442
Parents: 3e1d027
Author: Daniel Broudy <br...@google.com>
Authored: Tue Dec 2 15:34:58 2014 -0800
Committer: Ignasi Barrera <na...@apache.org>
Committed: Mon Dec 8 23:25:59 2014 +0100

----------------------------------------------------------------------
 .../binders/DiskCreationBinder.java             |   4 +-
 .../compute/predicates/AtomicOperationDone.java |   2 +-
 .../googlecomputeengine/domain/Address.java     |  18 ++-
 .../domain/BackendService.java                  |   7 +-
 .../googlecomputeengine/domain/Disk.java        |  34 +++++-
 .../googlecomputeengine/domain/DiskType.java    |   9 +-
 .../googlecomputeengine/domain/Firewall.java    |   9 +-
 .../googlecomputeengine/domain/Image.java       |  35 +++++-
 .../googlecomputeengine/domain/Operation.java   |  89 +++++++++++---
 .../features/AddressApi.java                    |   8 ++
 .../googlecomputeengine/features/DiskApi.java   |  20 +++-
 .../googlecomputeengine/features/ImageApi.java  |   8 ++
 .../options/AddressCreationOptions.java         |  62 ++++++++++
 .../options/BackendServiceOptions.java          |  10 ++
 .../options/DiskCreationOptions.java            |  45 +++++--
 .../options/FirewallOptions.java                |  16 +++
 .../options/ImageCreationOptions.java           |  87 ++++++++++++++
 .../binders/DiskCreationBinderTest.java         |  11 +-
 .../functions/FirewallToIpPermissionTest.java   |   2 +
 .../GoogleComputeEngineImageToImageTest.java    |  12 +-
 .../features/AddressApiMockTest.java            |  13 ++
 .../features/DiskApiLiveTest.java               |  13 +-
 .../features/DiskApiMockTest.java               |  30 +++--
 .../features/FirewallApiExpectTest.java         |   1 +
 .../features/ImageApiLiveTest.java              |   4 +-
 .../features/ImageApiMockTest.java              |  20 +++-
 .../features/InstanceApiLiveTest.java           |   7 +-
 .../features/SnapshotApiLiveTest.java           |   4 +-
 .../BaseGoogleComputeEngineApiLiveTest.java     |   2 +-
 .../parse/ParseAddressListTest.java             |   6 +-
 .../parse/ParseAddressTest.java                 |   8 +-
 .../parse/ParseBackendServiceListTest.java      |   3 +-
 .../parse/ParseBackendServiceTest.java          |   3 +-
 .../parse/ParseDiskTest.java                    |  11 +-
 .../parse/ParseDiskTypeListTest.java            |   3 +-
 .../parse/ParseDiskTypeTest.java                |   3 +-
 .../parse/ParseFirewallListTest.java            |   1 +
 .../parse/ParseFirewallTest.java                |   1 +
 .../parse/ParseGlobalOperationTest.java         |   2 +
 .../parse/ParseImageTest.java                   |  14 ++-
 .../parse/ParseOperationTest.java               |  18 ++-
 .../parse/ParseRegionOperationTest.java         |   2 +
 .../parse/ParseZoneOperationTest.java           |   2 +
 .../NetworkFirewallPredicatesTest.java          |   3 +
 .../src/test/resources/address_get.json         |  21 ++--
 .../src/test/resources/address_list.json        |  59 ++++-----
 .../aggregated_global_operation_list.json       |   1 +
 .../test/resources/disk_insert_sourceImage.json |   1 -
 .../src/test/resources/global_operation.json    |   1 +
 .../test/resources/global_operation_list.json   |   1 +
 .../src/test/resources/image_get.json           |  40 ++++---
 .../src/test/resources/image_list.json          |  54 +++++----
 .../test/resources/image_list_single_page.json  | 119 +++++++++++--------
 .../src/test/resources/operation.json           |  53 ++++++---
 .../src/test/resources/region_operation.json    |   1 +
 .../test/resources/region_operation_list.json   |   1 +
 .../src/test/resources/zone_operation.json      |   1 +
 .../src/test/resources/zone_operation_list.json |   1 +
 58 files changed, 772 insertions(+), 244 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/binders/DiskCreationBinder.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/binders/DiskCreationBinder.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/binders/DiskCreationBinder.java
index 16825e5..b91671d 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/binders/DiskCreationBinder.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/binders/DiskCreationBinder.java
@@ -37,11 +37,11 @@ public final class DiskCreationBinder implements MapBinder {
       try {
          json.beginObject();
          json.name("name").value(postParams.get("name").toString());
-         json.name("sizeGb").value((Integer) postParams.get("sizeGb"));
+         json.name("sizeGb").value(options.sizeGb());
          json.name("type").value(options.type() != null ? options.type().toString() : null);
-         json.name("sourceImage").value(options.sourceImage() != null ? options.sourceImage().toString() : null);
          json.name("sourceSnapshot")
                .value(options.sourceSnapshot() != null ? options.sourceSnapshot().toString() : null);
+         json.name("description").value(options.description());
          json.endObject();
          json.close();
       } catch (IOException e) {

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/predicates/AtomicOperationDone.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/predicates/AtomicOperationDone.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/predicates/AtomicOperationDone.java
index 1f917ae..2bf1c80 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/predicates/AtomicOperationDone.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/predicates/AtomicOperationDone.java
@@ -40,7 +40,7 @@ public final class AtomicOperationDone implements Predicate<AtomicReference<Oper
       checkNotNull(input.get(), "operation");
       Operation current = resources.operation(input.get().selfLink());
       input.set(current);
-      checkState(current.errors().isEmpty(), "Task ended in error %s", current); // ISE will break the loop.
+      checkState(current.error().errors().isEmpty(), "Task ended in error %s", current); // ISE will break the loop.
       switch (current.status()) {
          case DONE:
             return true;

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Address.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Address.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Address.java
index 1dea66f..ff7226d 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Address.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Address.java
@@ -17,6 +17,8 @@
 package org.jclouds.googlecomputeengine.domain;
 
 import java.net.URI;
+import java.util.Date;
+import java.util.List;
 
 import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.json.SerializedNames;
@@ -26,12 +28,18 @@ import com.google.auto.value.AutoValue;
 @AutoValue
 public abstract class Address {
 
+   public enum Status{
+      RESERVED,
+      IN_USE;
+   }
    public abstract String id();
 
    public abstract URI selfLink();
 
    public abstract String name();
 
+   public abstract Date creationTimestamp();
+
    @Nullable public abstract String description();
 
    /**
@@ -39,10 +47,10 @@ public abstract class Address {
     * A reserved address is currently available to the project and can be
     * used by a resource. An in-use address is currently being used by a resource.
     */
-   public abstract String status(); // TODO: enum
+   public abstract Status status();
 
    /** URL of the resource currently using this address. */
-   @Nullable public abstract URI user();
+   @Nullable public abstract List<URI> users();
 
    /** URL of the region where the address resides. */
    public abstract URI region();
@@ -50,10 +58,10 @@ public abstract class Address {
    /** The IP address represented by this resource. */
    public abstract String address();
 
-   @SerializedNames({ "id", "selfLink", "name", "description", "status", "user", "region", "address" })
-   public static Address create(String id, URI selfLink, String name, String description, String status, URI user,
+   @SerializedNames({ "id", "selfLink", "name", "creationTimestamp", "description", "status", "users", "region", "address" })
+   public static Address create(String id, URI selfLink, String name, Date creationTimestamp, String description, Status status, List<URI> users,
          URI region, String address) {
-      return new AutoValue_Address(id, selfLink, name, description, status, user, region, address);
+      return new AutoValue_Address(id, selfLink, name, creationTimestamp, description, status, users, region, address);
    }
 
    Address() {

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/BackendService.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/BackendService.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/BackendService.java
index 8b90a4f..f4b15c2 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/BackendService.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/BackendService.java
@@ -76,6 +76,7 @@ public abstract class BackendService {
    @Nullable public abstract int port();
    @Nullable public abstract String protocol();
    @Nullable public abstract String fingerprint();
+   @Nullable public abstract String portName();
 
    /**
     * @param timeoutSec Defaults to 30 when null.
@@ -83,18 +84,18 @@ public abstract class BackendService {
     */
    @SerializedNames({ "id", "creationTimestamp", "selfLink", "name", "description",
       "backends", "healthChecks", "timeoutSec", "port", "protocol",
-      "fingerprint"})
+      "fingerprint", "portName"})
    public static BackendService create(String id, Date creationTimestamp, URI selfLink,
                           String name, @Nullable String description,
                           @Nullable List<Backend> backends, List<URI> healthChecks,
                           @Nullable Integer timeoutSec, @Nullable Integer port,
                           @Nullable String protocol,
-                          @Nullable String fingerprint){
+                          @Nullable String fingerprint, String portName){
       return new AutoValue_BackendService(id, creationTimestamp, selfLink, name, description,
                             backends, healthChecks,
                             timeoutSec != null ? timeoutSec : 30,
                             port != null ? port : 80,
-                            protocol, fingerprint);
+                            protocol, fingerprint, portName);
    }
 
    BackendService(){

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Disk.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Disk.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Disk.java
index 140f47a..88becb4 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Disk.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Disk.java
@@ -17,6 +17,8 @@
 package org.jclouds.googlecomputeengine.domain;
 
 import java.net.URI;
+import java.util.Date;
+import java.util.List;
 
 import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.json.SerializedNames;
@@ -25,11 +27,21 @@ import com.google.auto.value.AutoValue;
 
 @AutoValue
 public abstract class Disk {
+
+   public enum Status {
+      CREATING,
+      FAILED,
+      READY,
+      RESTORING;
+   }
+
    public abstract String id();
 
+   public abstract Date creationTimestamp();
+
    public abstract URI zone();
 
-   public abstract String status(); // TODO: enum
+   public abstract Status status();
 
    public abstract String name();
 
@@ -37,15 +49,27 @@ public abstract class Disk {
 
    public abstract int sizeGb();
 
+   @Nullable public abstract String sourceSnapshot();
+
+   @Nullable public abstract String sourceSnapshotId();
+
    public abstract URI selfLink();
 
+   @Nullable public abstract String sourceImage();
+
+   @Nullable public abstract String sourceImageId();
+
    /** URL of the corresponding disk type resource. */
    @Nullable public abstract URI type();
 
-   @SerializedNames({ "id", "zone", "status", "name", "description", "sizeGb", "selfLink", "type" })
-   public static Disk create(String id, URI zone, String status, String name, String description, int sizeGb,
-         URI selfLink, URI type) {
-      return new AutoValue_Disk(id, zone, status, name, description, sizeGb, selfLink, type);
+   @Nullable public abstract List<String> licenses();
+
+   @SerializedNames({ "id", "creationTimestamp", "zone", "status", "name", "description", "sizeGb", "sourceSnapshot",
+      "sourceSnapshotId", "selfLink", "sourceImage", "sourceImageId", "type", "licenses" })
+   public static Disk create(String id, Date creationTimestamp, URI zone, Status status, String name, String description, int sizeGb,
+         String sourceSnapshot, String sourceSnapshotId, URI selfLink, String sourceImage, String sourceImageId, URI type, List<String> licenses) {
+      return new AutoValue_Disk(id, creationTimestamp, zone, status, name, description, sizeGb,
+            sourceSnapshot, sourceSnapshotId, selfLink, sourceImage, sourceImageId, type, licenses);
    }
 
    Disk(){

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/DiskType.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/DiskType.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/DiskType.java
index bab2d08..e1c3fc3 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/DiskType.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/DiskType.java
@@ -17,6 +17,7 @@
 package org.jclouds.googlecomputeengine.domain;
 
 import java.net.URI;
+import java.util.Date;
 
 import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.json.SerializedNames;
@@ -26,6 +27,8 @@ import com.google.auto.value.AutoValue;
 @AutoValue
 public abstract class DiskType {
 
+   public abstract Date creationTimestamp();
+
    public abstract String name();
 
    @Nullable public abstract String description();
@@ -42,10 +45,10 @@ public abstract class DiskType {
    /** Server defined default disk size in GB. */
    public abstract long defaultDiskSizeGb();
 
-   @SerializedNames({ "name", "description", "validDiskSize", "deprecated", "zone", "selfLink", "defaultDiskSizeGb" })
-   public static DiskType create(String name, String description, String validDiskSize, Deprecated deprecated, URI zone,
+   @SerializedNames({ "creationTimestamp", "name", "description", "validDiskSize", "deprecated", "zone", "selfLink", "defaultDiskSizeGb" })
+   public static DiskType create(Date creationTimestamp, String name, String description, String validDiskSize, Deprecated deprecated, URI zone,
          URI selfLink, long defaultDiskSizeGb) {
-      return new AutoValue_DiskType(name, description, validDiskSize, deprecated, zone, selfLink, defaultDiskSizeGb);
+      return new AutoValue_DiskType(creationTimestamp, name, description, validDiskSize, deprecated, zone, selfLink, defaultDiskSizeGb);
    }
 
    DiskType() {

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Firewall.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Firewall.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Firewall.java
index 25ac6eb..f8acf8d 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Firewall.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Firewall.java
@@ -19,6 +19,7 @@ package org.jclouds.googlecomputeengine.domain;
 import static org.jclouds.googlecloud.internal.NullSafeCopies.copyOf;
 
 import java.net.URI;
+import java.util.Date;
 import java.util.List;
 
 import org.jclouds.javax.annotation.Nullable;
@@ -55,6 +56,8 @@ public abstract class Firewall {
 
    public abstract URI selfLink();
 
+   public abstract Date creationTimestamp();
+
    public abstract String name();
 
    @Nullable public abstract String description();
@@ -94,10 +97,10 @@ public abstract class Firewall {
    public abstract List<Rule> allowed();
 
    @SerializedNames(
-         { "id", "selfLink", "name", "description", "network", "sourceRanges", "sourceTags", "targetTags", "allowed" })
-   public static Firewall create(String id, URI selfLink, String name, String description, URI network,
+         { "id", "selfLink", "creationTimestamp", "name", "description", "network", "sourceRanges", "sourceTags", "targetTags", "allowed" })
+   public static Firewall create(String id, URI selfLink, Date creationTimestamp, String name, String description, URI network,
          List<String> sourceRanges, List<String> sourceTags, List<String> targetTags, List<Rule> allowed) {
-      return new AutoValue_Firewall(id, selfLink, name, description, network, copyOf(sourceRanges), copyOf(sourceTags),
+      return new AutoValue_Firewall(id, selfLink, creationTimestamp, name, description, network, copyOf(sourceRanges), copyOf(sourceTags),
             copyOf(targetTags), copyOf(allowed));
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Image.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Image.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Image.java
index e70e92e..b055ee2 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Image.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Image.java
@@ -17,6 +17,8 @@
 package org.jclouds.googlecomputeengine.domain;
 
 import java.net.URI;
+import java.util.Date;
+import java.util.List;
 
 import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.json.SerializedNames;
@@ -26,6 +28,12 @@ import com.google.auto.value.AutoValue;
 @AutoValue
 public abstract class Image {
 
+   public enum Status {
+        FAILED,
+        PENDING,
+        READY;
+   }
+
    @AutoValue
    public abstract static class RawDisk {
       /**
@@ -58,22 +66,39 @@ public abstract class Image {
 
    public abstract URI selfLink();
 
+   public abstract Date creationTimestamp();
+
    public abstract String name();
 
    @Nullable public abstract String description();
 
    /** Must be RAW; provided by the client when the disk image is created. */
    // TODO: if this is true, why bother listing it?
-   public abstract String sourceType();
+   @Nullable public abstract String sourceType();
 
    @Nullable public abstract RawDisk rawDisk();
 
    @Nullable public abstract Deprecated deprecated();
 
-   @SerializedNames({ "id", "selfLink", "name", "description", "sourceType", "rawDisk", "deprecated" })
-   public static Image create(String id, URI selfLink, String name, String description, String sourceType,
-         RawDisk rawDisk, Deprecated deprecated) {
-      return new AutoValue_Image(id, selfLink, name, description, sourceType, rawDisk, deprecated);
+   public abstract Status status();
+
+   public abstract Long archiveSizeBytes();
+
+   public abstract Long diskSizeGb();
+
+   @Nullable public abstract String sourceDisk();
+
+   @Nullable public abstract String sourceDiskId();
+
+   @Nullable public abstract List<String> licenses();
+
+   @SerializedNames({ "id", "selfLink", "creationTimestamp", "name", "description", "sourceType", "rawDisk", "deprecated",
+      "status", "archiveSizeBytes", "diskSizeGb", "sourceDisk", "sourceDiskId", "licenses"})
+   public static Image create(String id, URI selfLink, Date creationTimestamp, String name, String description, String sourceType,
+         RawDisk rawDisk, Deprecated deprecated, Status status, Long archiveSizeBytes, Long diskSizeGb,
+         String sourceDisk, String sourceDiskId, List<String> licenses) {
+      return new AutoValue_Image(id, selfLink, creationTimestamp, name, description, sourceType, rawDisk, deprecated, status,
+            archiveSizeBytes, diskSizeGb, sourceDisk, sourceDiskId, licenses);
    }
 
    Image() {

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Operation.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Operation.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Operation.java
index 59bda21..0c99535 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Operation.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/domain/Operation.java
@@ -16,12 +16,12 @@
  */
 package org.jclouds.googlecomputeengine.domain;
 
-import static org.jclouds.googlecloud.internal.NullSafeCopies.copyOf;
-
 import java.net.URI;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
+import org.jclouds.googlecomputeengine.domain.Metadata.Entry;
 import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.json.SerializedNames;
 
@@ -32,20 +32,71 @@ public abstract class Operation {
 
    @AutoValue
    public abstract static class Error {
-      /** The error type identifier for this error. */
-      public abstract String code(); // TODO: enum?
 
-      /** The field in the request which caused the error. */
-      @Nullable public abstract String location();
+      @AutoValue
+      public abstract static class Entry {
+
+         /** The error type identifier for this error. */
+         public abstract String code(); // TODO: enum?
+
+         /** The field in the request which caused the error. */
+         @Nullable public abstract String location();
+
+         @Nullable public abstract String message();
+
+         @SerializedNames({ "code", "location", "message" })
+         public static Entry create(String code, String location, String message) {
+            return new AutoValue_Operation_Error_Entry(code, location, message);
+         }
+
+         Entry() {
+         }
+      }
+
+      public abstract List<Entry> errors();
+
+      @SerializedNames({ "errors" })
+      public static Error create(List<Entry> errors) {
+         return new AutoValue_Operation_Error(errors != null ? errors : new ArrayList<Entry>());
+      }
+
+      public static Error empty(){
+         return create(null);
+      }
+
+      Error(){
+      }
+   }
+
+   @AutoValue
+   public abstract static class Warning {
+
+      // TODO: combine this with Metadata.Entry
+      @AutoValue
+      public abstract static class Entry {
+         abstract String key();
 
+         abstract String value();
+
+         @SerializedNames({ "key", "value" })
+         public static Entry create(String key, String value) {
+            return new AutoValue_Operation_Warning_Entry(key, value);
+         }
+
+         Entry(){
+         }
+      }
+
+      public abstract String code();
       @Nullable public abstract String message();
+      public abstract List<Entry> data();
 
-      @SerializedNames({ "code", "location", "message" })
-      public static Error create(String code, String location, String message) {
-         return new AutoValue_Operation_Error(code, location, message);
+      @SerializedNames({"code", "message", "data"})
+      public static Warning create(String code, String message, List<Entry> data){
+         return new AutoValue_Operation_Warning(code, message, data);
       }
 
-      Error() {
+      Warning() {
       }
    }
 
@@ -57,6 +108,8 @@ public abstract class Operation {
 
    public abstract String id();
 
+   @Nullable public abstract Date creationTimestamp();
+
    public abstract URI selfLink();
 
    public abstract String name();
@@ -103,22 +156,24 @@ public abstract class Operation {
    /** Examples include insert, update, and delete. */
    public abstract String operationType(); // TODO: enum
 
-   public abstract List<Error> errors();
+   public abstract Error error();
+
+   @Nullable public abstract List<Warning> warnings();
 
    @Nullable public abstract URI region();
 
    @Nullable public abstract URI zone();
 
-   @SerializedNames({ "id", "selfLink", "name", "description", "targetLink", "targetId", "clientOperationId", "status",
+   @SerializedNames({ "id", "creationTimestamp", "selfLink", "name", "description", "targetLink", "targetId", "clientOperationId", "status",
          "statusMessage", "user", "progress", "insertTime", "startTime", "endTime", "httpErrorStatusCode",
-         "httpErrorMessage", "operationType", "errors", "region", "zone" })
-   public static Operation create(String id, URI selfLink, String name, String description, URI targetLink,
+         "httpErrorMessage", "operationType", "error", "warnings", "region", "zone" })
+   public static Operation create(String id, Date creationTimestamp, URI selfLink, String name, String description, URI targetLink,
          String targetId, String clientOperationId, Status status, String statusMessage, String user, Integer progress,
          Date insertTime, Date startTime, Date endTime, Integer httpErrorStatusCode, String httpErrorMessage,
-         String operationType, List<Error> errors, URI region, URI zone) {
-      return new AutoValue_Operation(id, selfLink, name, description, targetLink, targetId, clientOperationId, status,
+         String operationType, Error error, List<Warning> warnings, URI region, URI zone) {
+      return new AutoValue_Operation(id, creationTimestamp, selfLink, name, description, targetLink, targetId, clientOperationId, status,
             statusMessage, user, progress, insertTime, startTime, endTime, httpErrorStatusCode, httpErrorMessage,
-            operationType, copyOf(errors), region, zone);
+            operationType, error != null ? error : Error.empty(), warnings, region, zone);
    }
 
    Operation() {

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/AddressApi.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/AddressApi.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/AddressApi.java
index e4a6eb6..801fb41 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/AddressApi.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/AddressApi.java
@@ -37,9 +37,11 @@ import org.jclouds.googlecomputeengine.GoogleComputeEngineApi;
 import org.jclouds.googlecomputeengine.domain.Address;
 import org.jclouds.googlecomputeengine.domain.Operation;
 import org.jclouds.googlecomputeengine.internal.BaseCallerArg0ToIteratorOfListPage;
+import org.jclouds.googlecomputeengine.options.AddressCreationOptions;
 import org.jclouds.googlecomputeengine.options.ListOptions;
 import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.oauth.v2.filters.OAuthFilter;
+import org.jclouds.rest.annotations.BinderParam;
 import org.jclouds.rest.annotations.Fallback;
 import org.jclouds.rest.annotations.MapBinder;
 import org.jclouds.rest.annotations.PayloadParam;
@@ -77,6 +79,12 @@ public interface AddressApi {
    @MapBinder(BindToJsonPayload.class)
    Operation create(@PayloadParam("name") String address);
 
+   /** @see #create(String) */
+   @Named("Addresses:insert")
+   @POST
+   @Produces(APPLICATION_JSON)
+   Operation create(@BinderParam(BindToJsonPayload.class) AddressCreationOptions options);
+
    /** Deletes an address by name and returns the operation in progress, or null if not found. */
    @Named("Addresses:delete")
    @DELETE

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/DiskApi.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/DiskApi.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/DiskApi.java
index 433a7ac..ce826d0 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/DiskApi.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/DiskApi.java
@@ -67,24 +67,26 @@ public interface DiskApi {
    Disk get(@PathParam("disk") String disk);
 
    /**
-    * Creates a persistent disk resource in the specified project specifying the size of the disk.
+    * Creates a persistent disk resource, in the specified project, specifying the size of the disk and other options.
     *
     * @param diskName the name of disk.
     * @param sizeGb   the size of the disk
+    * @param options the options of the disk to create.
     * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to
     *         you, and look for the status field.
     */
    @Named("Disks:insert")
    @POST
    @Produces(APPLICATION_JSON)
-   @MapBinder(BindToJsonPayload.class)
-   Operation create(@PayloadParam("name") String diskName, @PayloadParam("sizeGb") int sizeGb);
+   @MapBinder(DiskCreationBinder.class)
+   Operation create(@PayloadParam("name") String diskName,
+                    @PayloadParam("options") DiskCreationOptions options);
 
    /**
     * Creates a persistent disk resource, in the specified project, specifying the size of the disk and other options.
     *
     * @param diskName the name of disk.
-    * @param sizeGb   the size of the disk
+    * @param sourceImage Fully-qualified URL of the source image to apply to the disk.
     * @param options the options of the disk to create.
     * @return an Operation resource. To check on the status of an operation, poll the Operations resource returned to
     *         you, and look for the status field.
@@ -94,7 +96,7 @@ public interface DiskApi {
    @Produces(APPLICATION_JSON)
    @MapBinder(DiskCreationBinder.class)
    Operation create(@PayloadParam("name") String diskName,
-                    @PayloadParam("sizeGb") int sizeGb,
+                    @QueryParam("sourceImage") String sourceImage,
                     @PayloadParam("options") DiskCreationOptions options);
 
    /** Deletes a persistent disk by name and returns the operation in progress, or null if not found. */
@@ -120,6 +122,14 @@ public interface DiskApi {
    @MapBinder(BindToJsonPayload.class)
    Operation createSnapshot(@PathParam("disk") String diskName, @PayloadParam("name") String snapshotName);
 
+   /** @see #createSnapshot(String, String) */
+   @Named("Disks:createSnapshot")
+   @POST
+   @Path("/{disk}/createSnapshot")
+   @MapBinder(BindToJsonPayload.class)
+   Operation createSnapshot(@PathParam("disk") String diskName, @PayloadParam("name") String snapshotName,
+         @PayloadParam("description") String description);
+
    /**
     * Retrieves the list of persistent disk resources available to the specified project.
     * By default the list as a maximum size of 100, if no options are provided or ListOptions#getMaxResults() has not

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/ImageApi.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/ImageApi.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/ImageApi.java
index e7c24e6..58d206e 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/ImageApi.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/features/ImageApi.java
@@ -41,6 +41,7 @@ import org.jclouds.googlecomputeengine.domain.Operation;
 import org.jclouds.googlecomputeengine.internal.BaseArg0ToIteratorOfListPage;
 import org.jclouds.googlecomputeengine.internal.BaseToIteratorOfListPage;
 import org.jclouds.googlecomputeengine.options.DeprecateOptions;
+import org.jclouds.googlecomputeengine.options.ImageCreationOptions;
 import org.jclouds.googlecomputeengine.options.ListOptions;
 import org.jclouds.javax.annotation.Nullable;
 import org.jclouds.oauth.v2.filters.OAuthFilter;
@@ -103,6 +104,13 @@ public interface ImageApi {
    @MapBinder(BindToJsonPayload.class)
    Operation createFromDisk(@PayloadParam("name") String image, @PayloadParam("sourceDisk") String sourceDisk);
 
+   @Named("Images:insert")
+   @POST
+   @Endpoint(CurrentProject.class)
+   @Path("/global/images")
+   @Produces(APPLICATION_JSON)
+   Operation create(@BinderParam(BindToJsonPayload.class) ImageCreationOptions options);
+
    /**
     * Sets the deprecation status of an image. If no message body is given, clears the deprecation status instead.
     *

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/AddressCreationOptions.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/AddressCreationOptions.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/AddressCreationOptions.java
new file mode 100644
index 0000000..413a61d
--- /dev/null
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/AddressCreationOptions.java
@@ -0,0 +1,62 @@
+/*
+ * 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.googlecomputeengine.options;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+
+import com.google.auto.value.AutoValue;
+
+@AutoValue
+public abstract class AddressCreationOptions {
+
+   public abstract String name();
+   @Nullable public abstract String address();
+   @Nullable public abstract String description();
+
+   @SerializedNames({"name", "address", "description"})
+   static AddressCreationOptions create(String name, String address, String description){
+      return new AutoValue_AddressCreationOptions(name, address, description);
+   }
+
+   public static class Builder {
+      private String name;
+      private String address;
+      private String description;
+
+      public Builder(String name) {
+         this.name = name;
+      }
+
+      public Builder address(String address) {
+         this.address = address;
+         return this;
+      }
+
+      public Builder description(String description) {
+         this.description = description;
+         return this;
+      }
+
+      public AddressCreationOptions build() {
+         checkNotNull(name, "AddressCreationOptions name cannot be null");
+         return create(name, address, description);
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/BackendServiceOptions.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/BackendServiceOptions.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/BackendServiceOptions.java
index 6a2e82f..60f1e4f 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/BackendServiceOptions.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/BackendServiceOptions.java
@@ -32,6 +32,7 @@ public class BackendServiceOptions {
    private Integer port;
    private String protocol;
    private String fingerprint;
+   private String portName;
 
    /**
     * Name of the BackendService resource.
@@ -161,4 +162,13 @@ public class BackendServiceOptions {
       this.fingerprint = fingerprint;
       return this;
    }
+
+   public String getPortName() {
+      return portName;
+   }
+
+   public BackendServiceOptions portName(String portName) {
+      this.portName = portName;
+      return this;
+   }
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/DiskCreationOptions.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/DiskCreationOptions.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/DiskCreationOptions.java
index 2dd215c..166d021 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/DiskCreationOptions.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/DiskCreationOptions.java
@@ -21,25 +21,27 @@ import java.net.URI;
 public final class DiskCreationOptions {
 
    private URI type;
-   private URI sourceImage;
+   private Integer sizeGb;
    private URI sourceSnapshot;
+   private String description;
+
 
    /**
     * The disk type, fully qualified URL for the disk type.
     *
     * @return the disk type
     */
-   public URI type(){
+   public URI type() {
       return type;
    }
 
    /**
-    * The source image
-    *
-    * @return sourceImage, fully qualified URL for the image to be copied.
+    * Size of the persistent disk, specified in GB.
+    * You can also specify this when creating a persistent disk
+    * using the sourceImage or sourceSnapshot parameter.
     */
-   public URI sourceImage(){
-      return sourceImage;
+   public Integer sizeGb() {
+      return sizeGb;
    }
 
    /**
@@ -47,31 +49,48 @@ public final class DiskCreationOptions {
     *
     * @return sourceSnapshot, fully qualified URL for the snapshot to be copied.
     */
-   public URI sourceSnapshot(){
+   public URI sourceSnapshot() {
       return sourceSnapshot;
    }
 
    /**
+    * The description
+    *
+    * @return description, An optional textual description of the resource.
+    */
+   public String description() {
+      return description;
+   }
+
+   /**
     * @see DiskCreationOptions#type()
     */
-   public DiskCreationOptions type(URI type){
+   public DiskCreationOptions type(URI type) {
       this.type = type;
       return this;
    }
 
    /**
-    * @see DiskCreationOptions#sourceImage()
+    * @see DiskCreationOptions#sizeGb()
     */
-   public DiskCreationOptions sourceImage(URI sourceImage){
-      this.sourceImage = sourceImage;
+   public DiskCreationOptions sizeGb(Integer sizeGb) {
+      this.sizeGb = sizeGb;
       return this;
    }
 
    /**
     * @see DiskCreationOptions#sourceSnapshot()
     */
-   public DiskCreationOptions sourceSnapshot(URI sourceSnapshot){
+   public DiskCreationOptions sourceSnapshot(URI sourceSnapshot) {
       this.sourceSnapshot = sourceSnapshot;
       return this;
    }
+
+   /**
+    * @see DiskCreationOptions#description()
+    */
+   public DiskCreationOptions description(String description) {
+      this.description = description;
+      return this;
+   }
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/FirewallOptions.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/FirewallOptions.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/FirewallOptions.java
index 0762e96..eb4d4ce 100644
--- a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/FirewallOptions.java
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/FirewallOptions.java
@@ -32,6 +32,7 @@ public class FirewallOptions {
 
    private String name;
    private URI network;
+   private String description;
    private ImmutableList.Builder<String> sourceRanges = ImmutableList.builder();
    private ImmutableList.Builder<String> sourceTags = ImmutableList.builder();
    private ImmutableList.Builder<String> targetTags = ImmutableList.builder();
@@ -77,6 +78,21 @@ public class FirewallOptions {
    }
 
    /**
+    * @see org.jclouds.googlecomputeengine.domain.Firewall#description()
+    */
+   public FirewallOptions description(String description) {
+      this.description = description;
+      return this;
+   }
+
+   /**
+    * @see org.jclouds.googlecomputeengine.domain.Firewall#description()
+    */
+   public String description() {
+      return description;
+   }
+
+   /**
     * @see org.jclouds.googlecomputeengine.domain.Firewall#network()
     */
    public FirewallOptions network(URI network) {

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/ImageCreationOptions.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/ImageCreationOptions.java b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/ImageCreationOptions.java
new file mode 100644
index 0000000..cb75d1d
--- /dev/null
+++ b/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/options/ImageCreationOptions.java
@@ -0,0 +1,87 @@
+/*
+ * 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.googlecomputeengine.options;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+
+import org.jclouds.googlecomputeengine.domain.Image.RawDisk;
+import org.jclouds.googlecomputeengine.domain.NewTargetInstance.Builder;
+import org.jclouds.javax.annotation.Nullable;
+import org.jclouds.json.SerializedNames;
+import org.jclouds.googlecomputeengine.domain.Deprecated;
+
+import com.google.auto.value.AutoValue;
+
+@AutoValue
+public abstract class ImageCreationOptions {
+
+   public abstract String name();
+   @Nullable public abstract String description();
+   @Nullable public abstract String sourceType();
+   @Nullable public abstract RawDisk rawDisk();
+   @Nullable public abstract Deprecated deprecated();
+   @Nullable public abstract String sourceDisk();
+
+   @SerializedNames({"name", "description", "sourceType", "rawDisk", "deprecated", "sourceDisk"})
+   static ImageCreationOptions create(String name, String description, String sourceType,
+         RawDisk rawDisk, Deprecated deprecated, String sourceDisk){
+      return new AutoValue_ImageCreationOptions(name, description, sourceType, rawDisk, deprecated, sourceDisk);
+   }
+
+   public static class Builder{
+      public String name;
+      public String description;
+      public String sourceType;
+      public RawDisk rawDisk;
+      public Deprecated deprecated;
+      public String sourceDisk;
+
+      public Builder(String name) {
+         this.name = name;
+      }
+
+      public Builder description(String description) {
+         this.description = description;
+         return this;
+      }
+
+      public Builder sourceType(String sourceType) {
+         this.sourceType = sourceType;
+         return this;
+      }
+
+      public Builder rawDisk(RawDisk rawDisk) {
+         this.rawDisk = rawDisk;
+         return this;
+      }
+
+      public Builder deprecated(Deprecated deprecated) {
+         this.deprecated = deprecated;
+         return this;
+      }
+
+      public Builder sourceDisk(String sourceDisk) {
+         this.sourceDisk = sourceDisk;
+         return this;
+      }
+
+      public ImageCreationOptions build() {
+         checkNotNull(name, "ImageCreationOptions: name cannot be null");
+         return create(name, description, sourceType, rawDisk, deprecated, sourceDisk);
+      }
+   }
+}

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/binders/DiskCreationBinderTest.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/binders/DiskCreationBinderTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/binders/DiskCreationBinderTest.java
index 86ea1a0..3467ab4 100644
--- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/binders/DiskCreationBinderTest.java
+++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/binders/DiskCreationBinderTest.java
@@ -31,22 +31,23 @@ import com.google.common.collect.ImmutableMap;
 @Test(groups = "unit", testName = "DiskCreationBinderTest")
 public class DiskCreationBinderTest extends BaseGoogleComputeEngineExpectTest<Object>{
 
-   private static final String FAKE_SOURCE_IMAGE = "https://www.googleapis.com/compute/v1/projects/" +
+   private static final String FAKE_SOURCE_SNAPSHOT = "https://www.googleapis.com/compute/v1/projects/" +
                                        "debian-cloud/global/images/backports-debian-7-wheezy-v20141017";
 
    DiskCreationBinder binder = new DiskCreationBinder();
- 
+
    @Test
    public void testMap() throws SecurityException, NoSuchMethodException {
-      DiskCreationOptions diskCreationOptions = new DiskCreationOptions().sourceImage(URI.create(FAKE_SOURCE_IMAGE));
+      DiskCreationOptions diskCreationOptions = new DiskCreationOptions()
+         .sourceSnapshot(URI.create(FAKE_SOURCE_SNAPSHOT)).sizeGb(15).description(null);
 
       HttpRequest request = HttpRequest.builder().method("GET").endpoint("http://momma").build();
-      Map<String, Object> postParams = ImmutableMap.of("name", "testName", "sizeGb", 15, "options", diskCreationOptions);
+      Map<String, Object> postParams = ImmutableMap.of("name", "testName", "options", diskCreationOptions);
 
       request = binder.bindToRequest(request, postParams);
 
       assertEquals(request.getPayload().getRawContent(),
-            "{\"name\":\"testName\",\"sizeGb\":15,\"sourceImage\":\"" + FAKE_SOURCE_IMAGE + "\"}");
+            "{\"name\":\"testName\",\"sizeGb\":15,\"sourceSnapshot\":\"" + FAKE_SOURCE_SNAPSHOT + "\"}");
       assertEquals(request.getPayload().getContentMetadata().getContentType(), "application/json");
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/functions/FirewallToIpPermissionTest.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/functions/FirewallToIpPermissionTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/functions/FirewallToIpPermissionTest.java
index b8aee36..9c2f759 100644
--- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/functions/FirewallToIpPermissionTest.java
+++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/functions/FirewallToIpPermissionTest.java
@@ -21,6 +21,7 @@ import static org.testng.Assert.assertTrue;
 
 import java.net.URI;
 
+import org.jclouds.date.internal.SimpleDateFormatDateService;
 import org.jclouds.googlecomputeengine.domain.Firewall;
 import org.jclouds.net.domain.IpPermission;
 import org.jclouds.net.domain.IpProtocol;
@@ -56,6 +57,7 @@ public class FirewallToIpPermissionTest {
       return Firewall.create( //
             "abcd", // id
             URI.create(baseUrl + "/jclouds/global/firewalls/jclouds-test"), // selfLink
+            new SimpleDateFormatDateService().iso8601DateParse("2012-04-13T03:05:04.365"), // creationTimestamp
             "jclouds-test", // name
             null, // description
             URI.create(baseUrl + "/jclouds/global/networks/jclouds-test"), // network

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/functions/GoogleComputeEngineImageToImageTest.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/functions/GoogleComputeEngineImageToImageTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/functions/GoogleComputeEngineImageToImageTest.java
index 9414b98..3a4765d 100644
--- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/functions/GoogleComputeEngineImageToImageTest.java
+++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/compute/functions/GoogleComputeEngineImageToImageTest.java
@@ -23,11 +23,14 @@ import java.net.URI;
 
 import org.jclouds.compute.domain.Image.Status;
 import org.jclouds.compute.domain.OsFamily;
+import org.jclouds.date.internal.SimpleDateFormatDateService;
 import org.jclouds.googlecomputeengine.domain.Deprecated;
 import org.jclouds.googlecomputeengine.domain.Deprecated.State;
 import org.jclouds.googlecomputeengine.domain.Image;
 import org.testng.annotations.Test;
 
+import com.google.common.collect.ImmutableList;
+
 @Test(groups = "unit", testName = "GoogleComputeEngineImageToImageTest")
 public class GoogleComputeEngineImageToImageTest {
    public void testArbitraryImageName() {
@@ -86,11 +89,18 @@ public class GoogleComputeEngineImageToImageTest {
       return Image.create( //
             "1234", // id
             URI.create("http://test.com/1234"), // selfLink
+            new SimpleDateFormatDateService().iso8601DateParse("2012-07-16T22:16:13.468"), // creationTimestamp
             name, // name
             "", // description
             "RAW", // sourceType
             Image.RawDisk.create(URI.create("foo"), "TAR", null), // rawDisk
-            deprecated // deprecated
+            deprecated, // deprecated
+            Image.Status.READY, // status
+            Long.parseLong("881210631", 10), // archivedSizeBytes
+            Long.parseLong("8", 10), // diskSizeGb
+            "https://www.googleapis.com/compute/v1/projects/party/zones/us-central1-a/disk/disk", // sourceDisk
+            "9598530021316715047", // sourceDiskId
+            ImmutableList.of("https://www.googleapis.com/compute/v1/projects/suse-cloud/global/licenses/sles-12") // license
       );
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/AddressApiMockTest.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/AddressApiMockTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/AddressApiMockTest.java
index 3903048..0fdca5b 100644
--- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/AddressApiMockTest.java
+++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/AddressApiMockTest.java
@@ -21,6 +21,7 @@ import static org.testng.Assert.assertFalse;
 import static org.testng.AssertJUnit.assertNull;
 
 import org.jclouds.googlecomputeengine.internal.BaseGoogleComputeEngineApiMockTest;
+import org.jclouds.googlecomputeengine.options.AddressCreationOptions;
 import org.jclouds.googlecomputeengine.parse.ParseAddressListTest;
 import org.jclouds.googlecomputeengine.parse.ParseAddressTest;
 import org.jclouds.googlecomputeengine.parse.ParseRegionOperationTest;
@@ -52,6 +53,18 @@ public class AddressApiMockTest extends BaseGoogleComputeEngineApiMockTest {
             stringFromResource("/address_insert.json"));
    }
 
+   public void insert_options() throws Exception {
+      server.enqueue(jsonResponse("/region_operation.json"));
+
+      AddressCreationOptions options = new AddressCreationOptions.Builder("address-with-options")
+         .description("This is a test").address("1.1.1.1").build();
+      assertEquals(addressApi().create(options),
+            new ParseRegionOperationTest().expected(url("/projects")));
+
+      assertSent(server, "POST", "/projects/party/regions/us-central1/addresses",
+            "{\"name\": \"address-with-options\",\"description\":\"This is a test\",\"address\":\"1.1.1.1\"}");
+   }
+
    public void delete() throws Exception {
       server.enqueue(jsonResponse("/region_operation.json"));
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/DiskApiLiveTest.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/DiskApiLiveTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/DiskApiLiveTest.java
index b53761a..b071f20 100644
--- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/DiskApiLiveTest.java
+++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/DiskApiLiveTest.java
@@ -34,7 +34,7 @@ public class DiskApiLiveTest extends BaseGoogleComputeEngineApiLiveTest {
 
    public static final String DISK_NAME = "disk-api-live-test-disk";
    public static final String SSD_DISK_NAME = "disk-api-live-test-disk-ssd";
-   public static final int sizeGb = 1;
+   public static final int SIZE_GB = 1;
 
    private DiskApi api() {
       return api.disksInZone(DEFAULT_ZONE_NAME);
@@ -42,7 +42,8 @@ public class DiskApiLiveTest extends BaseGoogleComputeEngineApiLiveTest {
 
    @Test(groups = "live")
    public void testInsertDisk() {
-      assertOperationDoneSuccessfully(api().create(DISK_NAME, sizeGb));
+      DiskCreationOptions options = new DiskCreationOptions().sizeGb( SIZE_GB);
+      assertOperationDoneSuccessfully(api().create(DISK_NAME, options));
    }
 
    @Test(groups = "live", dependsOnMethods = "testInsertDisk")
@@ -70,15 +71,15 @@ public class DiskApiLiveTest extends BaseGoogleComputeEngineApiLiveTest {
 
    private void assertDiskEquals(Disk result) {
       assertEquals(result.name(), DISK_NAME);
-      assertEquals(result.sizeGb(), sizeGb);
+      assertEquals(result.sizeGb(), SIZE_GB);
       assertEquals(result.zone(), getDefaultZoneUrl());
    }
 
    @Test(groups = "live")
    public void testInsertSSDDisk() {
       URI diskType = getDiskTypeUrl(DEFAULT_ZONE_NAME, "pd-ssd");
-      DiskCreationOptions diskCreationOptions = new DiskCreationOptions().type(diskType);
-      assertOperationDoneSuccessfully(api().create(SSD_DISK_NAME, sizeGb, diskCreationOptions));
+      DiskCreationOptions diskCreationOptions = new DiskCreationOptions().type(diskType).sizeGb(SIZE_GB);
+      assertOperationDoneSuccessfully(api().create(SSD_DISK_NAME, diskCreationOptions));
    }
 
    @Test(groups = "live", dependsOnMethods = "testInsertSSDDisk")
@@ -95,7 +96,7 @@ public class DiskApiLiveTest extends BaseGoogleComputeEngineApiLiveTest {
 
    private void assertSSDDiskEquals(Disk result) {
       assertEquals(result.name(), SSD_DISK_NAME);
-      assertEquals(result.sizeGb(), sizeGb);
+      assertEquals(result.sizeGb(), SIZE_GB);
       assertEquals(result.zone(), getDefaultZoneUrl());
       assertEquals(result.type(), getDiskTypeUrl(DEFAULT_ZONE_NAME, "pd-ssd"));
    }

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/DiskApiMockTest.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/DiskApiMockTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/DiskApiMockTest.java
index 7633a03..9c5a1e6 100644
--- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/DiskApiMockTest.java
+++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/DiskApiMockTest.java
@@ -52,7 +52,8 @@ public class DiskApiMockTest extends BaseGoogleComputeEngineApiMockTest {
    public void insert() throws Exception {
       server.enqueue(jsonResponse("/zone_operation.json"));
 
-      assertEquals(diskApi().create("testimage1", 1),
+      DiskCreationOptions options = new DiskCreationOptions().sizeGb(1);
+      assertEquals(diskApi().create("testimage1", options),
             new ParseZoneOperationTest().expected(url("/projects")));
 
       assertSent(server, "POST", "/projects/party/zones/us-central1-a/disks",
@@ -62,20 +63,23 @@ public class DiskApiMockTest extends BaseGoogleComputeEngineApiMockTest {
    public void insertFromImage() throws Exception {
       server.enqueue(jsonResponse("/zone_operation.json"));
 
-      DiskCreationOptions diskCreationOptions = new DiskCreationOptions()
-         .sourceImage(URI.create(url(IMAGE_URL)));
-      assertEquals(diskApi().create("testimage1", 1, diskCreationOptions),
+      DiskCreationOptions diskCreationOptions = new DiskCreationOptions().sizeGb(1).description("testing 123");
+
+      assertEquals(diskApi().create("testimage1", url(IMAGE_URL), diskCreationOptions),
             new ParseZoneOperationTest().expected(url("/projects")));
 
-      assertSent(server, "POST", "/projects/party/zones/us-central1-a/disks",
-            stringFromResource("/disk_insert_sourceImage.json"));
+      assertSent(server, "POST", "/projects/party/zones/us-central1-a/disks?sourceImage="
+            + url("/projects/party/zones/us-central1-a/images/foo").replace(":", "%3A"), //TODO (broudy) clean this up.
+            "{\"name\":\"testimage1\",\"sizeGb\":1,\"description\":\"testing 123\"}");
    }
 
    public void insertFromSSD() throws Exception {
       server.enqueue(jsonResponse("/zone_operation.json"));
 
-      DiskCreationOptions diskCreationOptions = new DiskCreationOptions().type(URI.create(url(SSD_URL)));
-      assertEquals(diskApi().create("testimage1", 1, diskCreationOptions),
+      DiskCreationOptions diskCreationOptions = new DiskCreationOptions()
+         .type(URI.create(url(SSD_URL))).sizeGb(1);
+
+      assertEquals(diskApi().create("testimage1", diskCreationOptions),
             new ParseZoneOperationTest().expected(url("/projects")));
 
       assertSent(server, "POST", "/projects/party/zones/us-central1-a/disks",
@@ -92,6 +96,16 @@ public class DiskApiMockTest extends BaseGoogleComputeEngineApiMockTest {
             stringFromResource("/disk_create_snapshot.json"));
    }
 
+   public void creatSnapshot_description() throws Exception {
+      server.enqueue(jsonResponse("/zone_operation.json"));
+
+      assertEquals(diskApi().createSnapshot("testimage1", "test-snap", "This is a test"),
+            new ParseZoneOperationTest().expected(url("/projects")));
+
+      assertSent(server, "POST", "/projects/party/zones/us-central1-a/disks/testimage1/createSnapshot",
+            "{\"name\":\"test-snap\",\"description\":\"This is a test\"}");
+   }
+
    public void delete() throws Exception {
       server.enqueue(jsonResponse("/zone_operation.json"));
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/FirewallApiExpectTest.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/FirewallApiExpectTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/FirewallApiExpectTest.java
index cc92e23..b1ec4da 100644
--- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/FirewallApiExpectTest.java
+++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/FirewallApiExpectTest.java
@@ -83,6 +83,7 @@ public class FirewallApiExpectTest extends BaseGoogleComputeEngineExpectTest<Goo
       return payload;
    }
 
+   //TODO (broudy): convert to mock test and add description to test.
    public void testInsertFirewallResponseIs2xx() throws IOException {
 
       HttpRequest request = HttpRequest

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/ImageApiLiveTest.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/ImageApiLiveTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/ImageApiLiveTest.java
index 4d1afc7..486e701 100644
--- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/ImageApiLiveTest.java
+++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/ImageApiLiveTest.java
@@ -31,6 +31,7 @@ import org.jclouds.googlecomputeengine.domain.Image;
 import org.jclouds.googlecomputeengine.domain.Deprecated.State;
 import org.jclouds.googlecomputeengine.internal.BaseGoogleComputeEngineApiLiveTest;
 import org.jclouds.googlecomputeengine.options.DeprecateOptions;
+import org.jclouds.googlecomputeengine.options.DiskCreationOptions;
 import org.testng.annotations.Test;
 
 public class ImageApiLiveTest extends BaseGoogleComputeEngineApiLiveTest {
@@ -68,7 +69,8 @@ public class ImageApiLiveTest extends BaseGoogleComputeEngineApiLiveTest {
 
    @Test(groups = "live")
    public void testInsertDisk() {
-      assertOperationDoneSuccessfully(diskApi().create(DISK_NAME, sizeGb));
+      assertOperationDoneSuccessfully(diskApi().create(DISK_NAME,
+            new DiskCreationOptions().sizeGb(sizeGb)));
       Disk disk = diskApi().get(DISK_NAME);
       diskURI = disk.selfLink();
    }

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/ImageApiMockTest.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/ImageApiMockTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/ImageApiMockTest.java
index ccdc039..7d9e9c0 100644
--- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/ImageApiMockTest.java
+++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/ImageApiMockTest.java
@@ -23,9 +23,11 @@ import static org.testng.Assert.assertNull;
 import java.net.URI;
 
 import org.jclouds.date.internal.SimpleDateFormatDateService;
+import org.jclouds.googlecomputeengine.domain.Deprecated;
 import org.jclouds.googlecomputeengine.domain.Deprecated.State;
 import org.jclouds.googlecomputeengine.internal.BaseGoogleComputeEngineApiMockTest;
 import org.jclouds.googlecomputeengine.options.DeprecateOptions;
+import org.jclouds.googlecomputeengine.options.ImageCreationOptions;
 import org.jclouds.googlecomputeengine.parse.ParseImageListTest;
 import org.jclouds.googlecomputeengine.parse.ParseImageTest;
 import org.jclouds.googlecomputeengine.parse.ParseOperationTest;
@@ -106,7 +108,7 @@ public class ImageApiMockTest extends BaseGoogleComputeEngineApiMockTest {
       assertSent(server, "GET", "/projects/centos-cloud/global/images");
    }
 
-   public void createImageFromPd_2xx() throws Exception{
+   public void createImageFromPd_2xx() throws Exception {
       server.enqueue(jsonResponse("/operation.json"));
 
       assertEquals(imageApi().createFromDisk("my-image", url("/projects/party/zones/us-central1-a/disks/mydisk")),
@@ -114,6 +116,22 @@ public class ImageApiMockTest extends BaseGoogleComputeEngineApiMockTest {
       assertSent(server, "POST", "/projects/party/global/images", stringFromResource("/image_insert_from_pd.json"));
    }
 
+   public void createImage_options() throws Exception {
+      server.enqueue(jsonResponse("/operation.json"));
+
+      ImageCreationOptions options = new ImageCreationOptions.Builder("name")
+         .description("this is a test")
+         .sourceDisk("projects/project/zones/zone/disks/disks")
+         .deprecated(Deprecated.create(State.DEPRECATED, null, null, null, null)).build();
+      assertEquals(imageApi().create(options),
+            new ParseOperationTest().expected(url("/projects")));
+      assertSent(server, "POST", "/projects/party/global/images",
+            "{\"name\":\"name\",\"description\":\"this is a test\",\""
+            + "deprecated\":{\"state\":\"DEPRECATED\"},\"sourceDisk\":"
+            + "\"projects/project/zones/zone/disks/disks\"}");
+
+   }
+
    public void deprecateImage_2xx() throws Exception{
       String imageName = "test-image";
       server.enqueue(jsonResponse("/operation.json"));

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/InstanceApiLiveTest.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/InstanceApiLiveTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/InstanceApiLiveTest.java
index 1d643c5..fa5676e 100644
--- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/InstanceApiLiveTest.java
+++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/InstanceApiLiveTest.java
@@ -38,6 +38,7 @@ import org.jclouds.googlecomputeengine.domain.NewInstance;
 import org.jclouds.googlecomputeengine.domain.AttachDisk;
 import org.jclouds.googlecomputeengine.domain.Operation;
 import org.jclouds.googlecomputeengine.internal.BaseGoogleComputeEngineApiLiveTest;
+import org.jclouds.googlecomputeengine.options.DiskCreationOptions;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.Test;
 
@@ -108,7 +109,8 @@ public class InstanceApiLiveTest extends BaseGoogleComputeEngineApiLiveTest {
       assertOperationDoneSuccessfully(api.networks().createInIPv4Range
               (INSTANCE_NETWORK_NAME, IPV4_RANGE));
 
-      assertOperationDoneSuccessfully(diskApi().create(DISK_NAME, DEFAULT_DISK_SIZE_GB));
+      assertOperationDoneSuccessfully(diskApi().create(DISK_NAME,
+            new DiskCreationOptions().sizeGb(DEFAULT_DISK_SIZE_GB)));
       assertOperationDoneSuccessfully(api().create(instance));
    }
 
@@ -189,7 +191,8 @@ public class InstanceApiLiveTest extends BaseGoogleComputeEngineApiLiveTest {
 
    @Test(groups = "live", dependsOnMethods = "testSetMetadataForInstance")
    public void testAttachDiskToInstance() {
-      assertOperationDoneSuccessfully(diskApi().create(ATTACH_DISK_NAME, 1));
+      assertOperationDoneSuccessfully(diskApi().create(ATTACH_DISK_NAME,
+            new DiskCreationOptions().sizeGb(1)));
 
       Instance originalInstance = api().get(INSTANCE_NAME);
       assertOperationDoneSuccessfully(api().attachDisk(INSTANCE_NAME,

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/SnapshotApiLiveTest.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/SnapshotApiLiveTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/SnapshotApiLiveTest.java
index ec1f17a..cec6ffa 100644
--- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/SnapshotApiLiveTest.java
+++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/features/SnapshotApiLiveTest.java
@@ -26,6 +26,7 @@ import org.jclouds.googlecloud.domain.ListPage;
 import org.jclouds.googlecomputeengine.domain.Disk;
 import org.jclouds.googlecomputeengine.domain.Snapshot;
 import org.jclouds.googlecomputeengine.internal.BaseGoogleComputeEngineApiLiveTest;
+import org.jclouds.googlecomputeengine.options.DiskCreationOptions;
 import org.testng.annotations.Test;
 
 public class SnapshotApiLiveTest extends BaseGoogleComputeEngineApiLiveTest {
@@ -44,7 +45,8 @@ public class SnapshotApiLiveTest extends BaseGoogleComputeEngineApiLiveTest {
 
    @Test(groups = "live")
    public void testCreateSnapshot() {
-      assertOperationDoneSuccessfully(diskApi().create(DISK_NAME, 1));
+      assertOperationDoneSuccessfully(diskApi().create(DISK_NAME,
+            new DiskCreationOptions().sizeGb(1)));
       disk = diskApi().get(DISK_NAME);
 
       assertOperationDoneSuccessfully(diskApi().createSnapshot(DISK_NAME, SNAPSHOT_NAME));

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/internal/BaseGoogleComputeEngineApiLiveTest.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/internal/BaseGoogleComputeEngineApiLiveTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/internal/BaseGoogleComputeEngineApiLiveTest.java
index 1a62257..b61c840 100644
--- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/internal/BaseGoogleComputeEngineApiLiveTest.java
+++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/internal/BaseGoogleComputeEngineApiLiveTest.java
@@ -89,7 +89,7 @@ public class BaseGoogleComputeEngineApiLiveTest extends BaseApiLiveTest<GoogleCo
       AtomicReference<Operation> ref = Atomics.newReference(checkNotNull(operation, "operation"));
       checkState(operationDone.apply(ref), "Timeout waiting for operation: %s", operation);
       assertEquals(ref.get().status(), Operation.Status.DONE);
-      assertTrue(ref.get().errors().isEmpty());
+      assertTrue(ref.get().error().errors().isEmpty());
    }
 
    protected void waitOperationDone(@Nullable Operation operation) {

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseAddressListTest.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseAddressListTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseAddressListTest.java
index 5041211..50d58ed 100644
--- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseAddressListTest.java
+++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseAddressListTest.java
@@ -25,6 +25,7 @@ import javax.ws.rs.Consumes;
 import org.jclouds.googlecloud.domain.ForwardingListPage;
 import org.jclouds.googlecloud.domain.ListPage;
 import org.jclouds.googlecomputeengine.domain.Address;
+import org.jclouds.googlecomputeengine.domain.Address.Status;
 import org.jclouds.googlecomputeengine.internal.BaseGoogleComputeEngineParseTest;
 import org.testng.annotations.Test;
 
@@ -50,9 +51,10 @@ public class ParseAddressListTest extends BaseGoogleComputeEngineParseTest<ListP
             "4881363978908129158", // id
             URI.create(baseUrl + "/party/regions/us-central1/addresses/test-ip2"), // selfLink
             "test-ip2", // name
+            parse("2013-07-26T14:08:21.552-07:00"), //creationTimestamp
             "", // description
-            "RESERVED", // status
-            null, // user
+            Status.RESERVED, // status
+            null, // users
             URI.create(baseUrl + "/party/regions/us-central1"), // region
             "173.255.118.115" // address
       );

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseAddressTest.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseAddressTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseAddressTest.java
index 3dd748f..454822c 100644
--- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseAddressTest.java
+++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseAddressTest.java
@@ -23,9 +23,12 @@ import java.net.URI;
 import javax.ws.rs.Consumes;
 
 import org.jclouds.googlecomputeengine.domain.Address;
+import org.jclouds.googlecomputeengine.domain.Address.Status;
 import org.jclouds.googlecomputeengine.internal.BaseGoogleComputeEngineParseTest;
 import org.testng.annotations.Test;
 
+import com.google.common.collect.ImmutableList;
+
 @Test(groups = "unit", testName = "ParseAddressTest")
 public class ParseAddressTest extends BaseGoogleComputeEngineParseTest<Address> {
 
@@ -45,9 +48,10 @@ public class ParseAddressTest extends BaseGoogleComputeEngineParseTest<Address>
             "4439373783165447583", // id
             URI.create(baseUrl + "/party/regions/us-central1/addresses/test-ip1"), // selfLink
             "test-ip1", // name
+            parse("2013-07-26T13:57:20.204-07:00"), // creationTimestamp
             "", // description
-            "RESERVED", // status
-            null, // user
+            Status.IN_USE, // status
+            ImmutableList.of(URI.create(baseUrl + "/party/regions/us-central1-a/forwardingRules/test-forwarding-rule")), // users
             URI.create(baseUrl + "/party/regions/us-central1"), // region
             "173.255.115.190" // address
       );

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseBackendServiceListTest.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseBackendServiceListTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseBackendServiceListTest.java
index 7bd0b4a..992d446 100644
--- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseBackendServiceListTest.java
+++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseBackendServiceListTest.java
@@ -60,7 +60,8 @@ public class ParseBackendServiceListTest extends BaseGoogleComputeEngineParseTes
                         45, //timeoutSec,
                         80, //port,
                         "HTTP", //protocol,
-                        null) //fingerprint
+                        null, //fingerprint
+                        null) // portName
                   ),
             null
       );

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseBackendServiceTest.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseBackendServiceTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseBackendServiceTest.java
index 51a63f4..dc99239 100644
--- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseBackendServiceTest.java
+++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseBackendServiceTest.java
@@ -67,7 +67,8 @@ public class ParseBackendServiceTest extends BaseGoogleComputeEngineParseTest<Ba
             30, //timeoutSec
             80, //port
             "HTTP", //protocol
-            "I6n5NPSXn8g=" //fingerprint
+            "I6n5NPSXn8g=", //fingerprint
+            null // portName
             );
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseDiskTest.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseDiskTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseDiskTest.java
index 9ce7449..d7784bb 100644
--- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseDiskTest.java
+++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseDiskTest.java
@@ -23,6 +23,7 @@ import java.net.URI;
 import javax.ws.rs.Consumes;
 
 import org.jclouds.googlecomputeengine.domain.Disk;
+import org.jclouds.googlecomputeengine.domain.Disk.Status;
 import org.jclouds.googlecomputeengine.internal.BaseGoogleComputeEngineParseTest;
 import org.testng.annotations.Test;
 
@@ -43,13 +44,19 @@ public class ParseDiskTest extends BaseGoogleComputeEngineParseTest<Disk> {
    public Disk expected(String baseUrl){
       return Disk.create( //
             "13050421646334304115", // id
+            parse("2012-11-25T01:38:48.306"), // creationTimestamp
             URI.create(baseUrl + "/party/zones/us-central1-a"), // zone
-            "READY", // status
+            Status.READY, // status
             "testimage1", // name
             null, // description
             1, // sizeGb
+            null, // sourceSnapshot
+            null, // sourceSnapshotId
             URI.create(baseUrl + "/party/zones/us-central1-a/disks/testimage1"), // selfLink
-            URI.create(baseUrl + "/studied-point-720/zones/us-central1-a/diskTypes/pd-standard") // type
+            null, // sourceImage
+            null, // sourceImageId
+            URI.create(baseUrl + "/studied-point-720/zones/us-central1-a/diskTypes/pd-standard"), // type
+            null // license
       );
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseDiskTypeListTest.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseDiskTypeListTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseDiskTypeListTest.java
index edf1c73..b796186 100644
--- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseDiskTypeListTest.java
+++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseDiskTypeListTest.java
@@ -41,7 +41,8 @@ public class ParseDiskTypeListTest extends BaseGoogleComputeEngineParseTest<List
    @Override @Consumes(APPLICATION_JSON)
    public ListPage<DiskType> expected() {
       String contentBaseUrl = BASE_URL.replace("www", "content");
-      DiskType diskType1 = DiskType.create( //
+      DiskType diskType1 = DiskType.create(
+            parse("2014-06-02T11:07:28.530-07:00"), // creationTimestamp
             "pd-standard", // name
             "Standard Persistent Disk", // description
             "10GB-10TB", // validDiskSize

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseDiskTypeTest.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseDiskTypeTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseDiskTypeTest.java
index 6064067..564977e 100644
--- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseDiskTypeTest.java
+++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseDiskTypeTest.java
@@ -37,7 +37,8 @@ public class ParseDiskTypeTest extends BaseGoogleComputeEngineParseTest<DiskType
    @Override @Consumes(APPLICATION_JSON)
    public DiskType expected() {
       String contentBaseUrl = BASE_URL.replace("www", "content");
-      return DiskType.create( //
+      return DiskType.create(
+            parse("2014-06-02T11:07:28.529-07:00"), // creationTimestamp
             "pd-ssd", // name
             "SSD Persistent Disk", // description
             "10GB-1TB", // validDiskSize

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseFirewallListTest.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseFirewallListTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseFirewallListTest.java
index e6a7f00..0fa6737 100644
--- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseFirewallListTest.java
+++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseFirewallListTest.java
@@ -49,6 +49,7 @@ public class ParseFirewallListTest extends BaseGoogleComputeEngineParseTest<List
       Firewall firewall2 = Firewall.create( //
             "12862241067393040785", // id
             URI.create(baseUrl + "/google/global/firewalls/default-ssh"), // selfLink
+            parse("2012-04-13T03:05:04.365"), // creationTimestamp
             "default-ssh", // name
             "SSH allowed from anywhere", // description
             URI.create(baseUrl + "/google/global/networks/default"), // network

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseFirewallTest.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseFirewallTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseFirewallTest.java
index 4ac6bc1..4a20dc7 100644
--- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseFirewallTest.java
+++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseFirewallTest.java
@@ -47,6 +47,7 @@ public class ParseFirewallTest extends BaseGoogleComputeEngineParseTest<Firewall
       return Firewall.create( //
             "12862241031274216284", // id
             URI.create(base_url + "/party/global/firewalls/jclouds-test"), // selfLink
+            parse("2012-04-13T03:05:02.855"), // creationTimestamp
             "jclouds-test", // name
             "Internal traffic from default allowed", // description
             URI.create(base_url + "/party/global/networks/jclouds-test"), // network

http://git-wip-us.apache.org/repos/asf/jclouds-labs-google/blob/70af0477/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseGlobalOperationTest.java
----------------------------------------------------------------------
diff --git a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseGlobalOperationTest.java b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseGlobalOperationTest.java
index 78ebb5f..2d12ba9 100644
--- a/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseGlobalOperationTest.java
+++ b/google-compute-engine/src/test/java/org/jclouds/googlecomputeengine/parse/ParseGlobalOperationTest.java
@@ -43,6 +43,7 @@ public class ParseGlobalOperationTest extends BaseGoogleComputeEngineParseTest<O
    public Operation expected(String baseUrl) {
       return Operation.create( //
             "13053095055850848306", // id
+            parse("2013-07-26T13:57:20.204-07:00"), // creationTimestamp
             URI.create(baseUrl + "/party/global/operations/operation-1354084865060"),
             "operation-1354084865060", // name
             null, // description
@@ -60,6 +61,7 @@ public class ParseGlobalOperationTest extends BaseGoogleComputeEngineParseTest<O
             null, // httpErrorMessage
             "insert", // operationType
             null, // errors
+            null, // warnings
             null, // region
             null // zone
       );