@Override SnapshotId parse(String... args) throws Exception { String message; if (args.length == 1) { return SnapshotId.of(args[0]); } else if (args.length > 1) { message = "Too many arguments."; } else { message = "Missing required shapshot id."; } throw new IllegalArgumentException(message); }
static SnapshotId fromUrl(String url) { Matcher matcher = PATTERN.matcher(url); if (!matcher.matches()) { throw new IllegalArgumentException(url + " is not a valid snapshot URL"); } return SnapshotId.of(matcher.group(1), matcher.group(2)); } }
@Override SnapshotId setProjectId(String projectId) { if (getProject() != null) { return this; } return SnapshotId.of(projectId, snapshot); }
@Override DiskInfo parse(String... args) throws Exception { if (args.length == 3) { DiskId diskId = parseDiskId(args); return DiskInfo.of(diskId, SnapshotDiskConfiguration.of(SnapshotId.of(args[2]))); } else if (args.length > 3) { throw new IllegalArgumentException("Too many arguments."); } else { throw new IllegalArgumentException("Missing required arguments."); } }
@Override SnapshotInfo parse(String... args) throws Exception { String message; if (args.length == 3) { String snapshot = args[0]; String zone = args[1]; String disk = args[2]; return SnapshotInfo.of(SnapshotId.of(snapshot), DiskId.of(zone, disk)); } else if (args.length > 3) { message = "Too many arguments."; } else { message = "Missing required arguments."; } throw new IllegalArgumentException(message); }
/** * Creates a snapshot for this disk given the snapshot's name. * * @return a zone operation for snapshot creation * @throws ComputeException upon failure */ public Operation createSnapshot(String snapshot, OperationOption... options) { return compute.create(SnapshotInfo.of(SnapshotId.of(snapshot), getDiskId()), options); }
/** * Creates a snapshot for this disk given the snapshot's name and description. * * @return a zone operation for snapshot creation * @throws ComputeException upon failure */ public Operation createSnapshot(String snapshot, String description, OperationOption... options) { SnapshotInfo snapshotInfo = SnapshotInfo.newBuilder(SnapshotId.of(snapshot), getDiskId()) .setDescription(description) .build(); return compute.create(snapshotInfo, options); }
@Test public void testOf() { SnapshotId snapshotId = SnapshotId.of(PROJECT, NAME); assertEquals(PROJECT, snapshotId.getProject()); assertEquals(NAME, snapshotId.getSnapshot()); assertEquals(URL, snapshotId.getSelfLink()); snapshotId = SnapshotId.of(NAME); assertNull(snapshotId.getProject()); assertEquals(NAME, snapshotId.getSnapshot()); }
@Test public void testCreateSnapshot() { initializeExpectedDisk(4); expect(compute.getOptions()).andReturn(mockOptions); Operation operation = new Operation.Builder(serviceMockReturnsOptions) .setOperationId(ZoneOperationId.of("project", "zone", "op")) .build(); SnapshotId snapshotId = SnapshotId.of(SNAPSHOT.getSnapshot()); SnapshotInfo snapshot = SnapshotInfo.newBuilder(snapshotId, DISK_ID).build(); expect(compute.create(snapshot)).andReturn(operation); replay(compute); initializeDisk(); assertSame(operation, disk.createSnapshot(SNAPSHOT.getSnapshot())); }
@Test public void testMatchesUrl() { assertTrue(SnapshotId.matchesUrl(SnapshotId.of(PROJECT, NAME).getSelfLink())); assertFalse(SnapshotId.matchesUrl("notMatchingUrl")); }
@Test public void testCreateSnapshotWithDescription() { initializeExpectedDisk(4); expect(compute.getOptions()).andReturn(mockOptions); Operation operation = new Operation.Builder(serviceMockReturnsOptions) .setOperationId(ZoneOperationId.of("project", "zone", "op")) .build(); SnapshotId snapshotId = SnapshotId.of(SNAPSHOT.getSnapshot()); SnapshotInfo snapshot = SnapshotInfo.newBuilder(snapshotId, DISK_ID).setDescription("description").build(); expect(compute.create(snapshot)).andReturn(operation); replay(compute); initializeDisk(); assertSame(operation, disk.createSnapshot(SNAPSHOT.getSnapshot(), "description")); }
@Test public void testCreateSnapshotWithOptions() { initializeExpectedDisk(4); expect(compute.getOptions()).andReturn(mockOptions); Operation operation = new Operation.Builder(serviceMockReturnsOptions) .setOperationId(ZoneOperationId.of("project", "zone", "op")) .build(); SnapshotId snapshotId = SnapshotId.of(SNAPSHOT.getSnapshot()); SnapshotInfo snapshot = SnapshotInfo.newBuilder(snapshotId, DISK_ID).build(); expect(compute.create(snapshot, Compute.OperationOption.fields())).andReturn(operation); replay(compute); initializeDisk(); assertSame( operation, disk.createSnapshot(SNAPSHOT.getSnapshot(), Compute.OperationOption.fields())); }
@Test public void testToAndFromUrl() { SnapshotId snapshotId = SnapshotId.of(PROJECT, NAME); compareSnapshotId(snapshotId, SnapshotId.fromUrl(snapshotId.getSelfLink())); thrown.expect(IllegalArgumentException.class); thrown.expectMessage("notMatchingUrl is not a valid snapshot URL"); SnapshotId.fromUrl("notMatchingUrl"); }
@Test public void testCreateSnapshotWithDescriptionAndOptions() { initializeExpectedDisk(4); expect(compute.getOptions()).andReturn(mockOptions); Operation operation = new Operation.Builder(serviceMockReturnsOptions) .setOperationId(ZoneOperationId.of("project", "zone", "op")) .build(); SnapshotId snapshotId = SnapshotId.of(SNAPSHOT.getSnapshot()); SnapshotInfo snapshot = SnapshotInfo.newBuilder(snapshotId, DISK_ID).setDescription("description").build(); expect(compute.create(snapshot, Compute.OperationOption.fields())).andReturn(operation); replay(compute); initializeDisk(); assertSame( operation, disk.createSnapshot( SNAPSHOT.getSnapshot(), "description", Compute.OperationOption.fields())); }
@Test public void testSetProjectId() { SnapshotInfo snapshotInfo = SNAPSHOT_INFO .toBuilder() .setSnapshotId(SnapshotId.of("snapshot")) .setSourceDisk(DiskId.of("zone", "disk")) .build(); compareSnapshotInfo(SNAPSHOT_INFO, snapshotInfo.setProjectId("project")); }
@Test public void testSetProjectId() { SnapshotDiskConfiguration configuration = DISK_CONFIGURATION .toBuilder() .setDiskType(DiskTypeId.of(DISK_TYPE.getZone(), DISK_TYPE.getType())) .setSourceSnapshot(SnapshotId.of(SNAPSHOT.getSnapshot())) .build(); compareSnapshotDiskConfiguration(DISK_CONFIGURATION, configuration.setProjectId("project")); }
@Test public void testToBuilder() { compareSnapshotDiskConfiguration(DISK_CONFIGURATION, DISK_CONFIGURATION.toBuilder().build()); SnapshotId newSnapshot = SnapshotId.of("newProject", "newSnapshot"); SnapshotDiskConfiguration diskConfiguration = DISK_CONFIGURATION .toBuilder() .setSizeGb(24L) .setSourceSnapshot(newSnapshot) .setSourceSnapshotId("newSnapshotId") .build(); assertEquals(24L, diskConfiguration.getSizeGb().longValue()); assertEquals(newSnapshot, diskConfiguration.getSourceSnapshot()); assertEquals("newSnapshotId", diskConfiguration.getSourceSnapshotId()); diskConfiguration = diskConfiguration .toBuilder() .setSizeGb(SIZE) .setSourceSnapshot(SNAPSHOT) .setSourceSnapshotId(SNAPSHOT_ID) .build(); compareSnapshotDiskConfiguration(DISK_CONFIGURATION, diskConfiguration); }
.toBuilder() .setDiskType(DiskTypeId.of(TYPE.getZone(), TYPE.getType())) .setSourceSnapshot(SnapshotId.of(SNAPSHOT.getSnapshot())) .build(); diskInfo =
resourceCleaner.remove(diskId); diskInfo = DiskInfo.of(snapshotDiskId, SnapshotDiskConfiguration.of(SnapshotId.of(snapshotName))); operation = compute.create(diskInfo); operation.waitFor();