From 3e1ebd9f1fc9d8bc8c8df423e6f31df085bbf199 Mon Sep 17 00:00:00 2001 From: Marco Ziccardi Date: Mon, 11 Apr 2016 00:01:09 +0200 Subject: [PATCH] Refactor Disk functional methods - Update compute dependency - Add resize method for disks - Udpate zone and remove MaintenanceWindow - make create(Snapshot) throw if disk is not found - Minor fixes to javadoc and tests --- gcloud-java-compute/pom.xml | 2 +- .../com/google/gcloud/compute/Compute.java | 23 ++- .../google/gcloud/compute/ComputeImpl.java | 17 +++ .../java/com/google/gcloud/compute/Disk.java | 19 ++- .../java/com/google/gcloud/compute/Zone.java | 138 ------------------ .../com/google/gcloud/spi/ComputeRpc.java | 12 +- .../google/gcloud/spi/DefaultComputeRpc.java | 15 +- .../gcloud/compute/ComputeImplTest.java | 41 +++++- .../com/google/gcloud/compute/DiskTest.java | 25 +++- .../gcloud/compute/SerializationTest.java | 9 -- .../com/google/gcloud/compute/ZoneTest.java | 15 -- .../gcloud/compute/it/ITComputeTest.java | 109 ++++++++------ 12 files changed, 194 insertions(+), 231 deletions(-) diff --git a/gcloud-java-compute/pom.xml b/gcloud-java-compute/pom.xml index 5bf336e01a2f..6fc456442024 100644 --- a/gcloud-java-compute/pom.xml +++ b/gcloud-java-compute/pom.xml @@ -24,7 +24,7 @@ com.google.apis google-api-services-compute - v1-rev97-1.21.0 + v1-rev103-1.21.0 compile diff --git a/gcloud-java-compute/src/main/java/com/google/gcloud/compute/Compute.java b/gcloud-java-compute/src/main/java/com/google/gcloud/compute/Compute.java index 3cf5a6594e5e..aaedbccf13bb 100644 --- a/gcloud-java-compute/src/main/java/com/google/gcloud/compute/Compute.java +++ b/gcloud-java-compute/src/main/java/com/google/gcloud/compute/Compute.java @@ -161,7 +161,6 @@ enum ZoneField { CREATION_TIMESTAMP("creationTimestamp"), DESCRIPTION("description"), ID("id"), - MAINTENANCE_WINDOWS("maintenanceWindows"), NAME("name"), REGION("region"), SELF_LINK("selfLink"), @@ -1648,8 +1647,9 @@ private DiskOption(ComputeRpc.Option option, Object value) { * Returns an option to specify the disk's fields to be returned by the RPC call. If this option * is not provided, all disk's fields are returned. {@code DiskOption.fields} can be used to * specify only the fields of interest. {@link Disk#diskId()}, - * {@link DiskConfiguration#diskType()} and {@link SnapshotDiskConfiguration#sourceSnapshot()} - * or {@link ImageDiskConfiguration#sourceImage()} are always returned, even if not specified. + * {@link DiskConfiguration#diskType()} and either + * {@link SnapshotDiskConfiguration#sourceSnapshot()} or + * {@link ImageDiskConfiguration#sourceImage()} are always returned, even if not specified. */ public static DiskOption fields(DiskField... fields) { return new DiskOption(ComputeRpc.Option.FIELDS, DiskField.selector(fields)); @@ -1693,8 +1693,9 @@ public static DiskListOption pageToken(String pageToken) { * Returns an option to specify the disk's fields to be returned by the RPC call. If this option * is not provided, all disk's fields are returned. {@code DiskListOption.fields} can be used to * specify only the fields of interest. {@link Disk#diskId()}, - * {@link DiskConfiguration#diskType()} and {@link SnapshotDiskConfiguration#sourceSnapshot()} - * or {@link ImageDiskConfiguration#sourceImage()} are always returned, even if not specified. + * {@link DiskConfiguration#diskType()} and either + * {@link SnapshotDiskConfiguration#sourceSnapshot()} or + * {@link ImageDiskConfiguration#sourceImage()} are always returned, even if not specified. */ public static DiskListOption fields(DiskField... fields) { StringBuilder builder = new StringBuilder(); @@ -1922,8 +1923,7 @@ public static DiskAggregatedListOption pageToken(String pageToken) { /** * Creates a new snapshot. * - * @return a zone operation if the create request was issued correctly, {@code null} if - * {@code snapshot.sourceDisk} was not found + * @return a zone operation for snapshot creation * @throws ComputeException upon failure */ Operation create(SnapshotInfo snapshot, OperationOption... options); @@ -2058,4 +2058,13 @@ Operation deprecate(ImageId image, DeprecationStatus deprecationStatus, * @throws ComputeException upon failure */ Operation delete(DiskId disk, OperationOption... options); + + /** + * Resizes the disk to the requested size. The new size must be larger than the previous one. + * + * @return a zone operation if the request was issued correctly, {@code null} if the disk was not + * found + * @throws ComputeException upon failure or if the new disk size is smaller than the previous one + */ + Operation resize(DiskId disk, long sizeGb, OperationOption... options); } diff --git a/gcloud-java-compute/src/main/java/com/google/gcloud/compute/ComputeImpl.java b/gcloud-java-compute/src/main/java/com/google/gcloud/compute/ComputeImpl.java index 458b7e1b840d..84e42d33fe10 100644 --- a/gcloud-java-compute/src/main/java/com/google/gcloud/compute/ComputeImpl.java +++ b/gcloud-java-compute/src/main/java/com/google/gcloud/compute/ComputeImpl.java @@ -1319,6 +1319,23 @@ public com.google.api.services.compute.model.Operation call() { } } + @Override + public Operation resize(final DiskId disk, final long sizeGb, OperationOption... options) { + final Map optionsMap = optionMap(options); + try { + com.google.api.services.compute.model.Operation answer = + runWithRetries(new Callable() { + @Override + public com.google.api.services.compute.model.Operation call() { + return computeRpc.resizeDisk(disk.zone(), disk.disk(), sizeGb, optionsMap); + } + }, options().retryParams(), EXCEPTION_HANDLER); + return answer == null ? null : Operation.fromPb(this, answer); + } catch (RetryHelper.RetryHelperException e) { + throw ComputeException.translateAndThrow(e); + } + } + private Map optionMap(Option... options) { Map optionMap = Maps.newEnumMap(ComputeRpc.Option.class); for (Option option : options) { diff --git a/gcloud-java-compute/src/main/java/com/google/gcloud/compute/Disk.java b/gcloud-java-compute/src/main/java/com/google/gcloud/compute/Disk.java index 8b1d180bbae3..265996a56af6 100644 --- a/gcloud-java-compute/src/main/java/com/google/gcloud/compute/Disk.java +++ b/gcloud-java-compute/src/main/java/com/google/gcloud/compute/Disk.java @@ -52,8 +52,6 @@ public static class Builder extends DiskInfo.Builder { Builder(Compute compute, DiskId diskId, DiskConfiguration diskConfiguration) { this.compute = compute; this.infoBuilder = new DiskInfo.BuilderImpl(diskId, diskConfiguration); - this.infoBuilder.diskId(diskId); - this.configuration(diskConfiguration); } Builder(Disk disk) { @@ -168,8 +166,7 @@ public Operation delete(OperationOption... options) { /** * Creates a snapshot for this disk given the snapshot's name. * - * @return a zone operation if the snapshot creation was successfully requested. {@code null} if - * the disk was not found + * @return a zone operation for snapshot creation * @throws ComputeException upon failure */ public Operation createSnapshot(String snapshot, OperationOption... options) { @@ -179,8 +176,7 @@ public Operation createSnapshot(String snapshot, OperationOption... options) { /** * Creates a snapshot for this disk given the snapshot's name and description. * - * @return a zone operation if the snapshot creation was successfully requested. {@code null} if - * this disk was not found + * @return a zone operation for snapshot creation * @throws ComputeException upon failure */ public Operation createSnapshot(String snapshot, String description, OperationOption... options) { @@ -214,6 +210,17 @@ public Operation createImage(String image, String description, OperationOption.. return compute.create(imageInfo, options); } + /** + * Resizes this disk to the requested size. The new size must be larger than the previous one. + * + * @return a zone operation if the resize request was issued correctly, {@code null} if this disk + * was not found + * @throws ComputeException upon failure or if the new disk size is smaller than the previous one + */ + public Operation resize(long sizeGb, OperationOption... options) { + return compute.resize(diskId(), sizeGb, options); + } + /** * Returns the disk's {@code Compute} object used to issue requests. */ diff --git a/gcloud-java-compute/src/main/java/com/google/gcloud/compute/Zone.java b/gcloud-java-compute/src/main/java/com/google/gcloud/compute/Zone.java index 7c766bef27c9..80a6c08f4db1 100644 --- a/gcloud-java-compute/src/main/java/com/google/gcloud/compute/Zone.java +++ b/gcloud-java-compute/src/main/java/com/google/gcloud/compute/Zone.java @@ -16,17 +16,14 @@ package com.google.gcloud.compute; -import com.google.api.services.compute.model.Zone.MaintenanceWindows; import com.google.common.base.Function; import com.google.common.base.MoreObjects; -import com.google.common.collect.Lists; import org.joda.time.format.DateTimeFormatter; import org.joda.time.format.ISODateTimeFormat; import java.io.Serializable; import java.math.BigInteger; -import java.util.List; import java.util.Objects; /** @@ -59,7 +56,6 @@ public com.google.api.services.compute.model.Zone apply(Zone region) { private final Long creationTimestamp; private final String description; private final Status status; - private final List maintenanceWindows; private final RegionId region; private final DeprecationStatus deprecationStatus; @@ -71,113 +67,6 @@ public enum Status { DOWN } - /** - * A scheduled maintenance windows for this zone. When a zone is in a maintenance window, all - * resources which reside in the zone will be unavailable. - * - * @see Maintenance - * Windows - */ - public static final class MaintenanceWindow implements Serializable { - - static final Function FROM_PB_FUNCTION = - new Function() { - @Override - public MaintenanceWindow apply(MaintenanceWindows pb) { - return MaintenanceWindow.fromPb(pb); - } - }; - static final Function TO_PB_FUNCTION = - new Function() { - @Override - public MaintenanceWindows apply(MaintenanceWindow maintenanceWindow) { - return maintenanceWindow.toPb(); - } - }; - - private static final long serialVersionUID = 2270641266683329963L; - - private final String name; - private final String description; - private final Long beginTime; - private final Long endTime; - - /** - * Returns a zone maintenance window object. - */ - MaintenanceWindow(String name, String description, Long beginTime, Long endTime) { - this.name = name; - this.description = description; - this.beginTime = beginTime; - this.endTime = endTime; - } - - /** - * Returns the name of the maintenance window. - */ - public String name() { - return name; - } - - /** - * Returns a textual description of the maintenance window. - */ - public String description() { - return description; - } - - /** - * Returns the starting time of the maintenance window in milliseconds since epoch. - */ - public Long beginTime() { - return beginTime; - } - - /** - * Returns the ending time of the maintenance window in milliseconds since epoch. - */ - public Long endTime() { - return endTime; - } - - @Override - public String toString() { - return MoreObjects.toStringHelper(this) - .add("disk", name) - .add("description", description) - .add("beginTime", beginTime) - .add("endTime", endTime) - .toString(); - } - - @Override - public int hashCode() { - return Objects.hash(name, description, beginTime, endTime); - } - - @Override - public boolean equals(Object obj) { - return obj instanceof MaintenanceWindow - && Objects.equals(toPb(), ((MaintenanceWindow) obj).toPb()); - } - - MaintenanceWindows toPb() { - return new MaintenanceWindows() - .setName(name) - .setDescription(description) - .setBeginTime(beginTime != null ? TIMESTAMP_FORMATTER.print(beginTime) : null) - .setEndTime(endTime != null ? TIMESTAMP_FORMATTER.print(endTime) : null); - } - - static MaintenanceWindow fromPb(MaintenanceWindows windowPb) { - return new MaintenanceWindow(windowPb.getName(), windowPb.getDescription(), - windowPb.getBeginTime() != null - ? TIMESTAMP_FORMATTER.parseMillis(windowPb.getBeginTime()) : null, - windowPb.getEndTime() != null - ? TIMESTAMP_FORMATTER.parseMillis(windowPb.getEndTime()) : null); - } - } - static final class Builder { private ZoneId zoneId; @@ -186,7 +75,6 @@ static final class Builder { private String description; private Status status; - private List maintenanceWindows; private RegionId region; private DeprecationStatus deprecationStatus; @@ -217,11 +105,6 @@ Builder status(Status status) { return this; } - Builder maintenanceWindows(List maintenanceWindows) { - this.maintenanceWindows = maintenanceWindows; - return this; - } - Builder region(RegionId region) { this.region = region; return this; @@ -243,7 +126,6 @@ private Zone(Builder builder) { this.creationTimestamp = builder.creationTimestamp; this.description = builder.description; this.status = builder.status; - this.maintenanceWindows = builder.maintenanceWindows; this.region = builder.region; this.deprecationStatus = builder.deprecationStatus; } @@ -283,17 +165,6 @@ public Status status() { return status; } - /** - * Returns the scheduled maintenance windows for this zone, if any. When the zone is in a - * maintenance window, all resources which reside in the zone will be unavailable. - * - * @see Maintenance - * Windows - */ - public List maintenanceWindows() { - return maintenanceWindows; - } - /** * Returns the identity of the region that hosts the zone. */ @@ -318,7 +189,6 @@ public String toString() { .add("creationTimestamp", creationTimestamp) .add("description", description) .add("status", status) - .add("maintenanceWindows", maintenanceWindows) .add("region", region) .add("deprecationStatus", deprecationStatus) .toString(); @@ -349,10 +219,6 @@ com.google.api.services.compute.model.Zone toPb() { if (status != null) { zonePb.setStatus(status.name()); } - if (maintenanceWindows != null) { - zonePb.setMaintenanceWindows( - Lists.transform(maintenanceWindows, MaintenanceWindow.TO_PB_FUNCTION)); - } if (region != null) { zonePb.setRegion(region.selfLink()); } @@ -379,10 +245,6 @@ static Zone fromPb(com.google.api.services.compute.model.Zone zonePb) { if (zonePb.getStatus() != null) { builder.status(Status.valueOf(zonePb.getStatus())); } - if (zonePb.getMaintenanceWindows() != null) { - builder.maintenanceWindows( - Lists.transform(zonePb.getMaintenanceWindows(), MaintenanceWindow.FROM_PB_FUNCTION)); - } if (zonePb.getRegion() != null) { builder.region(RegionId.fromUrl(zonePb.getRegion())); } diff --git a/gcloud-java-compute/src/main/java/com/google/gcloud/spi/ComputeRpc.java b/gcloud-java-compute/src/main/java/com/google/gcloud/spi/ComputeRpc.java index 6203c61a5a37..1066124e0638 100644 --- a/gcloud-java-compute/src/main/java/com/google/gcloud/spi/ComputeRpc.java +++ b/gcloud-java-compute/src/main/java/com/google/gcloud/spi/ComputeRpc.java @@ -306,8 +306,7 @@ public Y y() { /** * Creates a snapshot for the specified disk. * - * @return a zone operation if the create request was issued correctly, {@code null} if the disk - * was not found + * @return a zone operation for snapshot creation * @throws ComputeException upon failure */ Operation createSnapshot(String zone, String disk, String snapshot, String description, @@ -416,4 +415,13 @@ Operation deprecateImage(String project, String image, DeprecationStatus depreca * @throws ComputeException upon failure */ Operation deleteDisk(String zone, String disk, Map options); + + /** + * Resizes the disk to the requested size. The new size must be larger than the previous one. + * + * @return a zone operation if the request was issued correctly, {@code null} if the disk was not + * found + * @throws ComputeException upon failure or if the new disk size is smaller than the previous one + */ + Operation resizeDisk(String zone, String disk, long sizeGb, Map options); } diff --git a/gcloud-java-compute/src/main/java/com/google/gcloud/spi/DefaultComputeRpc.java b/gcloud-java-compute/src/main/java/com/google/gcloud/spi/DefaultComputeRpc.java index 600e6c2b8c8b..4899ab9c8445 100644 --- a/gcloud-java-compute/src/main/java/com/google/gcloud/spi/DefaultComputeRpc.java +++ b/gcloud-java-compute/src/main/java/com/google/gcloud/spi/DefaultComputeRpc.java @@ -38,6 +38,7 @@ import com.google.api.services.compute.model.DiskTypeAggregatedList; import com.google.api.services.compute.model.DiskTypeList; import com.google.api.services.compute.model.DiskTypesScopedList; +import com.google.api.services.compute.model.DisksResizeRequest; import com.google.api.services.compute.model.DisksScopedList; import com.google.api.services.compute.model.Image; import com.google.api.services.compute.model.ImageList; @@ -526,7 +527,7 @@ public Operation createSnapshot(String zone, String disk, String snapshot, Strin .setFields(FIELDS.getString(options)) .execute(); } catch (IOException ex) { - return nullForNotFound(ex); + throw translate(ex); } } @@ -717,6 +718,18 @@ public Operation deleteDisk(String zone, String disk, Map options) { } } + @Override + public Operation resizeDisk(String zone, String disk, long sizeGb, Map options) { + try { + DisksResizeRequest resizeRequest = new DisksResizeRequest().setSizeGb(sizeGb); + return compute.disks().resize(this.options.projectId(), zone, disk, resizeRequest) + .setFields(FIELDS.getString(options)) + .execute(); + } catch (IOException ex) { + return nullForNotFound(ex); + } + } + /** * This method returns {@code null} if the error code of {@code exception} was 404, re-throws the * exception otherwise. diff --git a/gcloud-java-compute/src/test/java/com/google/gcloud/compute/ComputeImplTest.java b/gcloud-java-compute/src/test/java/com/google/gcloud/compute/ComputeImplTest.java index 95ad76c0359d..277f8826b421 100644 --- a/gcloud-java-compute/src/test/java/com/google/gcloud/compute/ComputeImplTest.java +++ b/gcloud-java-compute/src/test/java/com/google/gcloud/compute/ComputeImplTest.java @@ -71,7 +71,6 @@ import com.google.gcloud.compute.Operation.OperationError; import com.google.gcloud.compute.Operation.OperationWarning; import com.google.gcloud.compute.Operation.Status; -import com.google.gcloud.compute.Zone.MaintenanceWindow; import com.google.gcloud.spi.ComputeRpc; import com.google.gcloud.spi.ComputeRpc.Tuple; import com.google.gcloud.spi.ComputeRpcFactory; @@ -142,18 +141,12 @@ public class ComputeImplTest { .build(); private static final ZoneId ZONE_ID = ZoneId.of("project", "zone"); private static final Zone.Status ZONE_STATUS = Zone.Status.DOWN; - private static final MaintenanceWindow WINDOW1 = new MaintenanceWindow("NAME1", "DESCRIPTION1", - 1453293420000L, 1453293480000L); - private static final MaintenanceWindow WINDOW2 = new MaintenanceWindow("NAME2", "DESCRIPTION2", - 1453293420000L, 1453293480000L); - private static final List WINDOWS = ImmutableList.of(WINDOW1, WINDOW2); private static final Zone ZONE = Zone.builder() .zoneId(ZONE_ID) .id(ID) .creationTimestamp(CREATION_TIMESTAMP) .description(DESCRIPTION) .status(ZONE_STATUS) - .maintenanceWindows(WINDOWS) .region(REGION_ID) .build(); private static final LicenseId LICENSE_ID = LicenseId.of("project", "license"); @@ -2656,6 +2649,40 @@ public void testCreateDiskWithOptions() { assertEquals(zoneOperation, operation); } + @Test + public void testResizeDisk_Operation() { + EasyMock.expect(computeRpcMock.resizeDisk(DISK_ID.zone(), DISK_ID.disk(), 42L, + EMPTY_RPC_OPTIONS)).andReturn(zoneOperation.toPb()); + EasyMock.replay(computeRpcMock); + compute = options.service(); + assertEquals(zoneOperation, compute.resize(DISK_ID, 42L)); + } + + @Test + public void testResizeDiskWithSelectedFields_Operation() { + Capture> capturedOptions = Capture.newInstance(); + EasyMock.expect(computeRpcMock.resizeDisk(eq(DISK_ID.zone()), eq(DISK_ID.disk()), eq(42L), + capture(capturedOptions))).andReturn(zoneOperation.toPb()); + EasyMock.replay(computeRpcMock); + compute = options.service(); + Operation operation = compute.resize(DISK_ID, 42L, OPERATION_OPTION_FIELDS); + String selector = (String) capturedOptions.getValue().get(OPERATION_OPTION_FIELDS.rpcOption()); + assertTrue(selector.contains("selfLink")); + assertTrue(selector.contains("id")); + assertTrue(selector.contains("description")); + assertEquals(23, selector.length()); + assertEquals(zoneOperation, operation); + } + + @Test + public void testResizeDisk_Null() { + EasyMock.expect(computeRpcMock.resizeDisk(DISK_ID.zone(), DISK_ID.disk(), 42L, + EMPTY_RPC_OPTIONS)).andReturn(null); + EasyMock.replay(computeRpcMock); + compute = options.service(); + assertNull(compute.resize(DISK_ID, 42L)); + } + @Test public void testRetryableException() { EasyMock.expect( diff --git a/gcloud-java-compute/src/test/java/com/google/gcloud/compute/DiskTest.java b/gcloud-java-compute/src/test/java/com/google/gcloud/compute/DiskTest.java index c8b44acd0613..8915a7894147 100644 --- a/gcloud-java-compute/src/test/java/com/google/gcloud/compute/DiskTest.java +++ b/gcloud-java-compute/src/test/java/com/google/gcloud/compute/DiskTest.java @@ -51,7 +51,7 @@ public class DiskTest { private static final SnapshotId SNAPSHOT = SnapshotId.of("project", "snapshot"); private static final ImageId IMAGE = ImageId.of("project", "image"); private static final String SNAPSHOT_ID = "snapshotId"; - private static final String IMAGE_ID = "snapshotId"; + private static final String IMAGE_ID = "imageId"; private static final Long LAST_ATTACH_TIMESTAMP = 1453293600000L; private static final Long LAST_DETACH_TIMESTAMP = 1453293660000L; private static final StandardDiskConfiguration DISK_CONFIGURATION = @@ -434,6 +434,29 @@ public void testCreateImageWithDescriptionAndOptions() { disk.createImage(IMAGE.image(), "description", Compute.OperationOption.fields())); } + @Test + public void testResizeOperation() { + initializeExpectedDisk(4); + expect(compute.options()).andReturn(mockOptions); + Operation operation = new Operation.Builder(serviceMockReturnsOptions) + .operationId(ZoneOperationId.of("project", "zone", "op")) + .build(); + expect(compute.resize(DISK_ID, 42L)).andReturn(operation); + replay(compute); + initializeDisk(); + assertSame(operation, disk.resize(42L)); + } + + @Test + public void testResizeNull() { + initializeExpectedDisk(3); + expect(compute.options()).andReturn(mockOptions); + expect(compute.resize(DISK_ID, 42L)).andReturn(null); + replay(compute); + initializeDisk(); + assertNull(disk.resize(42L)); + } + public void compareDisk(Disk expected, Disk value) { assertEquals(expected, value); assertEquals(expected.compute().options(), value.compute().options()); diff --git a/gcloud-java-compute/src/test/java/com/google/gcloud/compute/SerializationTest.java b/gcloud-java-compute/src/test/java/com/google/gcloud/compute/SerializationTest.java index 4d2f4c515916..bec8844ae111 100644 --- a/gcloud-java-compute/src/test/java/com/google/gcloud/compute/SerializationTest.java +++ b/gcloud-java-compute/src/test/java/com/google/gcloud/compute/SerializationTest.java @@ -22,7 +22,6 @@ import com.google.common.collect.ImmutableList; import com.google.gcloud.AuthCredentials; import com.google.gcloud.RetryParams; -import com.google.gcloud.compute.Zone.MaintenanceWindow; import org.junit.Test; @@ -89,20 +88,12 @@ public class SerializationTest { .build(); private static final ZoneId ZONE_ID = ZoneId.of("project", "zone"); private static final Zone.Status ZONE_STATUS = Zone.Status.DOWN; - private static final Long BEGIN_TIME = 1453293420000L; - private static final Long END_TIME = 1453293480000L; - private static final MaintenanceWindow WINDOW1 = new MaintenanceWindow("NAME1", "DESCRIPTION1", - BEGIN_TIME, END_TIME); - private static final MaintenanceWindow WINDOW2 = new MaintenanceWindow("NAME2", "DESCRIPTION2", - BEGIN_TIME, END_TIME); - private static final List WINDOWS = ImmutableList.of(WINDOW1, WINDOW2); private static final Zone ZONE = Zone.builder() .zoneId(ZONE_ID) .id(ID) .creationTimestamp(CREATION_TIMESTAMP) .description(DESCRIPTION) .status(ZONE_STATUS) - .maintenanceWindows(WINDOWS) .region(REGION_ID) .build(); private static final DeprecationStatus DEPRECATION_STATUS = diff --git a/gcloud-java-compute/src/test/java/com/google/gcloud/compute/ZoneTest.java b/gcloud-java-compute/src/test/java/com/google/gcloud/compute/ZoneTest.java index 1224c607a567..97a80a4de05b 100644 --- a/gcloud-java-compute/src/test/java/com/google/gcloud/compute/ZoneTest.java +++ b/gcloud-java-compute/src/test/java/com/google/gcloud/compute/ZoneTest.java @@ -18,13 +18,8 @@ import static org.junit.Assert.assertEquals; -import com.google.common.collect.ImmutableList; -import com.google.gcloud.compute.Zone.MaintenanceWindow; - import org.junit.Test; -import java.util.List; - public class ZoneTest { private static final ZoneId ZONE_ID = ZoneId.of("project", "zone"); @@ -33,13 +28,6 @@ public class ZoneTest { private static final Long CREATION_TIMESTAMP = 1453293540000L; private static final String DESCRIPTION = "description"; private static final Zone.Status STATUS = Zone.Status.DOWN; - private static final Long BEGIN_TIME = 1453293420000L; - private static final Long END_TIME = 1453293480000L; - private static final MaintenanceWindow WINDOW1 = new MaintenanceWindow("NAME1", "DESCRIPTION1", - BEGIN_TIME, END_TIME); - private static final MaintenanceWindow WINDOW2 = new MaintenanceWindow("NAME2", "DESCRIPTION2", - BEGIN_TIME, END_TIME); - private static final List WINDOWS = ImmutableList.of(WINDOW1, WINDOW2); private static final DeprecationStatus DEPRECATION_STATUS = DeprecationStatus.of(DeprecationStatus.Status.DELETED, ZONE_ID); private static final Zone ZONE = Zone.builder() @@ -48,7 +36,6 @@ public class ZoneTest { .creationTimestamp(CREATION_TIMESTAMP) .description(DESCRIPTION) .status(STATUS) - .maintenanceWindows(WINDOWS) .deprecationStatus(DEPRECATION_STATUS) .region(REGION_ID) .build(); @@ -60,7 +47,6 @@ public void testBuilder() { assertEquals(CREATION_TIMESTAMP, ZONE.creationTimestamp()); assertEquals(DESCRIPTION, ZONE.description()); assertEquals(STATUS, ZONE.status()); - assertEquals(WINDOWS, ZONE.maintenanceWindows()); assertEquals(REGION_ID, ZONE.region()); assertEquals(DEPRECATION_STATUS, ZONE.deprecationStatus()); } @@ -84,7 +70,6 @@ private void compareZones(Zone expected, Zone value) { assertEquals(expected.creationTimestamp(), value.creationTimestamp()); assertEquals(expected.description(), value.description()); assertEquals(expected.status(), value.status()); - assertEquals(expected.maintenanceWindows(), value.maintenanceWindows()); assertEquals(expected.region(), value.region()); assertEquals(expected.deprecationStatus(), value.deprecationStatus()); assertEquals(expected.hashCode(), value.hashCode()); diff --git a/gcloud-java-compute/src/test/java/com/google/gcloud/compute/it/ITComputeTest.java b/gcloud-java-compute/src/test/java/com/google/gcloud/compute/it/ITComputeTest.java index 8459ea365a3b..a2f472cdcbb8 100644 --- a/gcloud-java-compute/src/test/java/com/google/gcloud/compute/it/ITComputeTest.java +++ b/gcloud-java-compute/src/test/java/com/google/gcloud/compute/it/ITComputeTest.java @@ -431,7 +431,6 @@ public void testGetZoneWithSelectedFields() { assertNull(zone.creationTimestamp()); assertNull(zone.description()); assertNull(zone.status()); - assertNull(zone.maintenanceWindows()); assertNull(zone.region()); } @@ -877,7 +876,7 @@ public void testListGlobalAddresses() throws InterruptedException { } @Test - public void testCreateGetAndDeleteStandardDisk() throws InterruptedException { + public void testCreateGetResizeAndDeleteStandardDisk() throws InterruptedException { String name = BASE_RESOURCE_NAME + "create-and-get-standard-disk"; DiskId diskId = DiskId.of(ZONE, name); DiskInfo diskInfo = @@ -894,21 +893,28 @@ public void testCreateGetAndDeleteStandardDisk() throws InterruptedException { assertNotNull(remoteDisk.creationTimestamp()); assertNotNull(remoteDisk.id()); assertTrue(remoteDisk.configuration() instanceof StandardDiskConfiguration); - assertEquals(100L, (long) remoteDisk.configuration().sizeGb()); - assertEquals("pd-ssd", remoteDisk.configuration().diskType().diskType()); + StandardDiskConfiguration remoteConfiguration = remoteDisk.configuration(); + assertEquals(100L, (long) remoteConfiguration.sizeGb()); + assertEquals("pd-ssd", remoteConfiguration.diskType().diskType()); + assertEquals(DiskConfiguration.Type.STANDARD, remoteConfiguration.type()); assertNull(remoteDisk.lastAttachTimestamp()); assertNull(remoteDisk.lastDetachTimestamp()); - // test get with selected fields - remoteDisk = compute.get(diskId, Compute.DiskOption.fields()); + operation = remoteDisk.resize(200L); + while (!operation.isDone()) { + Thread.sleep(1000L); + } + // test resize and get with selected fields + remoteDisk = compute.get(diskId, Compute.DiskOption.fields(Compute.DiskField.SIZE_GB)); assertNotNull(remoteDisk); assertEquals(ZONE, remoteDisk.diskId().zone()); assertEquals(diskId.disk(), remoteDisk.diskId().disk()); assertNull(remoteDisk.creationTimestamp()); assertNull(remoteDisk.id()); assertTrue(remoteDisk.configuration() instanceof StandardDiskConfiguration); - assertNull(remoteDisk.configuration().sizeGb()); - assertEquals("pd-ssd", remoteDisk.configuration().diskType().diskType()); - assertEquals(DiskConfiguration.Type.STANDARD, remoteDisk.configuration().type()); + remoteConfiguration = remoteDisk.configuration(); + assertEquals(200L, (long) remoteConfiguration.sizeGb()); + assertEquals("pd-ssd", remoteConfiguration.diskType().diskType()); + assertEquals(DiskConfiguration.Type.STANDARD, remoteConfiguration.type()); assertNull(remoteDisk.lastAttachTimestamp()); assertNull(remoteDisk.lastDetachTimestamp()); operation = remoteDisk.delete(); @@ -936,11 +942,12 @@ public void testCreateGetAndDeleteImageDisk() throws InterruptedException { assertNotNull(remoteDisk.creationTimestamp()); assertNotNull(remoteDisk.id()); assertTrue(remoteDisk.configuration() instanceof ImageDiskConfiguration); - assertEquals(IMAGE_ID, remoteDisk.configuration().sourceImage()); - assertNotNull(remoteDisk.configuration().sourceImageId()); - assertEquals(DiskConfiguration.Type.IMAGE, remoteDisk.configuration().type()); - assertNotNull(remoteDisk.configuration().sizeGb()); - assertEquals("pd-standard", remoteDisk.configuration().diskType().diskType()); + ImageDiskConfiguration remoteConfiguration = remoteDisk.configuration(); + assertEquals(IMAGE_ID, remoteConfiguration.sourceImage()); + assertNotNull(remoteConfiguration.sourceImageId()); + assertEquals(DiskConfiguration.Type.IMAGE, remoteConfiguration.type()); + assertNotNull(remoteConfiguration.sizeGb()); + assertEquals("pd-standard", remoteConfiguration.diskType().diskType()); assertNull(remoteDisk.lastAttachTimestamp()); assertNull(remoteDisk.lastDetachTimestamp()); // test get with selected fields @@ -951,11 +958,12 @@ public void testCreateGetAndDeleteImageDisk() throws InterruptedException { assertNull(remoteDisk.creationTimestamp()); assertNull(remoteDisk.id()); assertTrue(remoteDisk.configuration() instanceof ImageDiskConfiguration); - assertEquals(IMAGE_ID, remoteDisk.configuration().sourceImage()); - assertNull(remoteDisk.configuration().sourceImageId()); - assertEquals(DiskConfiguration.Type.IMAGE, remoteDisk.configuration().type()); - assertNull(remoteDisk.configuration().sizeGb()); - assertEquals("pd-standard", remoteDisk.configuration().diskType().diskType()); + remoteConfiguration = remoteDisk.configuration(); + assertEquals(IMAGE_ID, remoteConfiguration.sourceImage()); + assertNull(remoteConfiguration.sourceImageId()); + assertEquals(DiskConfiguration.Type.IMAGE, remoteConfiguration.type()); + assertNull(remoteConfiguration.sizeGb()); + assertEquals("pd-standard", remoteConfiguration.diskType().diskType()); assertNull(remoteDisk.lastAttachTimestamp()); assertNull(remoteDisk.lastDetachTimestamp()); operation = remoteDisk.delete(); @@ -997,7 +1005,6 @@ public void testCreateGetAndDeleteSnapshotAndSnapshotDisk() throws InterruptedEx assertNull(snapshot.sourceDiskId()); assertNull(snapshot.storageBytes()); assertNull(snapshot.storageBytesStatus()); - SnapshotInfo.of(SnapshotId.of(snapshotName), snapshotDiskId); // test get snapshot snapshot = compute.getSnapshot(snapshotName); assertNotNull(snapshot.id()); @@ -1025,12 +1032,12 @@ public void testCreateGetAndDeleteSnapshotAndSnapshotDisk() throws InterruptedEx assertNotNull(remoteDisk.creationTimestamp()); assertNotNull(remoteDisk.id()); assertTrue(remoteDisk.configuration() instanceof SnapshotDiskConfiguration); - assertEquals(DiskConfiguration.Type.SNAPSHOT, remoteDisk.configuration().type()); - assertEquals(snapshotName, - remoteDisk.configuration().sourceSnapshot().snapshot()); - assertEquals(100L, (long) remoteDisk.configuration().sizeGb()); - assertEquals("pd-standard", remoteDisk.configuration().diskType().diskType()); - assertNotNull(remoteDisk.configuration().sourceSnapshotId()); + SnapshotDiskConfiguration remoteConfiguration = remoteDisk.configuration(); + assertEquals(DiskConfiguration.Type.SNAPSHOT, remoteConfiguration.type()); + assertEquals(snapshotName, remoteConfiguration.sourceSnapshot().snapshot()); + assertEquals(100L, (long) remoteConfiguration.sizeGb()); + assertEquals("pd-standard", remoteConfiguration.diskType().diskType()); + assertNotNull(remoteConfiguration.sourceSnapshotId()); assertNull(remoteDisk.lastAttachTimestamp()); assertNull(remoteDisk.lastDetachTimestamp()); // test get disk with selected fields @@ -1042,11 +1049,11 @@ public void testCreateGetAndDeleteSnapshotAndSnapshotDisk() throws InterruptedEx assertNull(remoteDisk.creationTimestamp()); assertNull(remoteDisk.id()); assertTrue(remoteDisk.configuration() instanceof SnapshotDiskConfiguration); - assertEquals(DiskConfiguration.Type.SNAPSHOT, remoteDisk.configuration().type()); - assertEquals(snapshotName, - remoteDisk.configuration().sourceSnapshot().snapshot()); - assertNull(remoteDisk.configuration().sizeGb()); - assertEquals("pd-standard", remoteDisk.configuration().diskType().diskType()); + remoteConfiguration = remoteDisk.configuration(); + assertEquals(DiskConfiguration.Type.SNAPSHOT, remoteConfiguration.type()); + assertEquals(snapshotName, remoteConfiguration.sourceSnapshot().snapshot()); + assertNull(remoteConfiguration.sizeGb()); + assertEquals("pd-standard", remoteConfiguration.diskType().diskType()); assertNull(remoteDisk.configuration().sourceSnapshotId()); assertNull(remoteDisk.lastAttachTimestamp()); assertNull(remoteDisk.lastDetachTimestamp()); @@ -1093,9 +1100,10 @@ public void testListDisksAndSnapshots() throws InterruptedException { assertNotNull(remoteDisk.creationTimestamp()); assertNotNull(remoteDisk.id()); assertTrue(remoteDisk.configuration() instanceof StandardDiskConfiguration); - assertEquals(100L, (long) remoteDisk.configuration().sizeGb()); - assertEquals("pd-ssd", remoteDisk.configuration().diskType().diskType()); - assertEquals(DiskConfiguration.Type.STANDARD, remoteDisk.configuration().type()); + StandardDiskConfiguration remoteConfiguration = remoteDisk.configuration(); + assertEquals(100L, (long) remoteConfiguration.sizeGb()); + assertEquals("pd-ssd", remoteConfiguration.diskType().diskType()); + assertEquals(DiskConfiguration.Type.STANDARD, remoteConfiguration.type()); assertNull(remoteDisk.lastAttachTimestamp()); assertNull(remoteDisk.lastDetachTimestamp()); count++; @@ -1114,9 +1122,10 @@ public void testListDisksAndSnapshots() throws InterruptedException { assertNull(remoteDisk.creationTimestamp()); assertNull(remoteDisk.id()); assertTrue(remoteDisk.configuration() instanceof StandardDiskConfiguration); - assertNull(remoteDisk.configuration().sizeGb()); - assertEquals("pd-ssd", remoteDisk.configuration().diskType().diskType()); - assertEquals(DiskConfiguration.Type.STANDARD, remoteDisk.configuration().type()); + StandardDiskConfiguration remoteConfiguration = remoteDisk.configuration(); + assertNull(remoteConfiguration.sizeGb()); + assertEquals("pd-ssd", remoteConfiguration.diskType().diskType()); + assertEquals(DiskConfiguration.Type.STANDARD, remoteConfiguration.type()); assertNull(remoteDisk.lastAttachTimestamp()); assertNull(remoteDisk.lastDetachTimestamp()); count++; @@ -1211,9 +1220,10 @@ public void testAggregatedListDisks() throws InterruptedException { assertNotNull(remoteDisk.creationTimestamp()); assertNotNull(remoteDisk.id()); assertTrue(remoteDisk.configuration() instanceof StandardDiskConfiguration); - assertEquals(100L, (long) remoteDisk.configuration().sizeGb()); - assertEquals("pd-ssd", remoteDisk.configuration().diskType().diskType()); - assertEquals(DiskConfiguration.Type.STANDARD, remoteDisk.configuration().type()); + StandardDiskConfiguration remoteConfiguration = remoteDisk.configuration(); + assertEquals(100L, (long) remoteConfiguration.sizeGb()); + assertEquals("pd-ssd", remoteConfiguration.diskType().diskType()); + assertEquals(DiskConfiguration.Type.STANDARD, remoteConfiguration.type()); count++; } assertEquals(2, count); @@ -1247,9 +1257,10 @@ public void testCreateGetAndDeprecateImage() throws InterruptedException { assertNotNull(image.creationTimestamp()); assertNull(image.description()); assertNotNull(image.configuration()); - assertEquals(ImageConfiguration.Type.DISK, image.configuration().type()); assertTrue(image.configuration() instanceof DiskImageConfiguration); - assertEquals(diskName, image.configuration().sourceDisk().disk()); + DiskImageConfiguration remoteConfiguration = image.configuration(); + assertEquals(ImageConfiguration.Type.DISK, remoteConfiguration.type()); + assertEquals(diskName, remoteConfiguration.sourceDisk().disk()); assertNull(image.status()); assertNull(image.diskSizeGb()); assertNull(image.licenses()); @@ -1260,9 +1271,10 @@ public void testCreateGetAndDeprecateImage() throws InterruptedException { assertNotNull(image.imageId()); assertNotNull(image.creationTimestamp()); assertNotNull(image.configuration()); - assertEquals(ImageConfiguration.Type.DISK, image.configuration().type()); assertTrue(image.configuration() instanceof DiskImageConfiguration); - assertEquals(diskName, image.configuration().sourceDisk().disk()); + remoteConfiguration = image.configuration(); + assertEquals(ImageConfiguration.Type.DISK, remoteConfiguration.type()); + assertEquals(diskName, remoteConfiguration.sourceDisk().disk()); assertEquals(100L, (long) image.diskSizeGb()); assertNotNull(image.status()); assertNull(image.deprecationStatus()); @@ -1289,7 +1301,9 @@ public void testCreateGetAndDeprecateImage() throws InterruptedException { public void testListImages() { Page imagePage = compute.listImages(IMAGE_PROJECT); Iterator imageIterator = imagePage.iterateAll(); + int count = 0; while (imageIterator.hasNext()) { + count++; Image image = imageIterator.next(); assertNotNull(image.id()); assertNotNull(image.imageId()); @@ -1298,6 +1312,7 @@ public void testListImages() { assertNotNull(image.status()); assertNotNull(image.diskSizeGb()); } + assertTrue(count > 0); } @Test @@ -1305,7 +1320,9 @@ public void testListImagesWithSelectedFields() { Page imagePage = compute.listImages(IMAGE_PROJECT, Compute.ImageListOption.fields(Compute.ImageField.ID)); Iterator imageIterator = imagePage.iterateAll(); + int count = 0; while (imageIterator.hasNext()) { + count++; Image image = imageIterator.next(); assertNotNull(image.id()); assertNotNull(image.imageId()); @@ -1316,6 +1333,7 @@ public void testListImagesWithSelectedFields() { assertNull(image.licenses()); assertNull(image.deprecationStatus()); } + assertTrue(count > 0); } @Test @@ -1323,7 +1341,9 @@ public void testListImagesWithFilter() { Page imagePage = compute.listImages(IMAGE_PROJECT, Compute.ImageListOption.filter( Compute.ImageFilter.equals(Compute.ImageField.ARCHIVE_SIZE_BYTES, 365056004L))); Iterator imageIterator = imagePage.iterateAll(); + int count = 0; while (imageIterator.hasNext()) { + count++; Image image = imageIterator.next(); assertNotNull(image.id()); assertNotNull(image.imageId()); @@ -1334,5 +1354,6 @@ public void testListImagesWithFilter() { assertEquals(365056004L, (long) image.configuration().archiveSizeBytes()); } + assertTrue(count > 0); } }