From e1274478956af956e1aaf6619798090a11bbc429 Mon Sep 17 00:00:00 2001 From: Neo Wu Date: Thu, 16 Mar 2017 20:12:59 -0700 Subject: [PATCH 1/6] WIP: adding functions to ITComputeTest, in order to make sure resources created during tests can be properly deleted even if tests fail or become timed out. --- .../testing/ManagedResourceHelper.java | 230 ++++++++++++++++++ .../cloud/compute/it/ITComputeTest.java | 103 +++++--- 2 files changed, 304 insertions(+), 29 deletions(-) create mode 100644 google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ManagedResourceHelper.java diff --git a/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ManagedResourceHelper.java b/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ManagedResourceHelper.java new file mode 100644 index 000000000000..8aa6c53d0054 --- /dev/null +++ b/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ManagedResourceHelper.java @@ -0,0 +1,230 @@ +/* + * Copyright 2016 Google Inc. All Rights Reserved. + * + * Licensed 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 com.google.cloud.compute.testing; + +import com.google.cloud.compute.Address; +import com.google.cloud.compute.AddressId; +import com.google.cloud.compute.Compute; +import com.google.cloud.compute.Disk; +import com.google.cloud.compute.DiskId; +import com.google.cloud.compute.Image; +import com.google.cloud.compute.Instance; +import com.google.cloud.compute.Network; +import com.google.cloud.compute.NetworkId; +import com.google.cloud.compute.Operation; +import com.google.cloud.compute.Snapshot; +import com.google.cloud.compute.SnapshotId; +import com.google.cloud.compute.Subnetwork; +import com.google.cloud.compute.SubnetworkId; +import com.google.common.base.Function; +import java.util.ArrayList; +import java.util.List; + +public class ManagedResourceHelper { + private final Compute compute; + private final List> resources; + + private ManagedResourceHelper(Compute compute) { + this.compute = compute; + this.resources = new ArrayList<>(); + } + + public static ManagedResourceHelper create(Compute compute) { + return new ManagedResourceHelper(compute); + } + + private class ManagedResource { + final T res; + Function func; + + private ManagedResource(T res) { + this.res = res; + + @SuppressWarnings("unchecked") + Function localFunc = (Function) getDeleteMethod(res); + + this.func = localFunc; + } + + public void delete() { + func.apply(res); + } + } + + public ManagedResourceHelper addManagedResource(T res) { + ManagedResource r = new ManagedResource<>(res); + resources.add(r); + return this; + } + + public void cleanUpResources() { + for (ManagedResource r : resources) { + r.delete(); + //TODO (neowu): add logging if a resource has not been deleted in test fixture + } + resources.clear(); + } + + private Function getDeleteMethod(T res) { + if (res instanceof Address) { + return new Function() { + @Override + public Void apply(Address address) { + try { + Operation operation = address.delete(); + operation.waitFor(); + } catch (Exception e) { + + } finally { + return null; + } + } + }; + } else if (res instanceof AddressId) { + return new Function() { + @Override + public Void apply(AddressId addressId) { + compute.deleteAddress(addressId); + return null; + } + }; + } else if (res instanceof Disk) { + return new Function() { + @Override + public Void apply(Disk d) { + try { + Operation operation = d.delete(); + operation.waitFor(); + } catch (Exception e) { + + } finally { + return null; + } + } + }; + } else if (res instanceof DiskId) { + return new Function() { + @Override + public Void apply(DiskId diskId) { + compute.deleteDisk(diskId); + return null; + } + }; + } else if (res instanceof Snapshot) { + return new Function() { + @Override + public Void apply(Snapshot s) { + try { + Operation operation = s.delete(); + operation.waitFor(); + } catch (Exception e) { + + } finally { + return null; + } + } + }; + } else if (res instanceof SnapshotId) { + return new Function() { + @Override + public Void apply(SnapshotId snapshotId) { + compute.deleteSnapshot(snapshotId); + return null; + } + }; + } else if (res instanceof Network) { + return new Function() { + @Override + public Void apply(Network n) { + try { + Operation operation = n.delete(); + operation.waitFor(); + } catch (Exception e) { + + } finally { + return null; + } + } + }; + } else if (res instanceof NetworkId) { + return new Function() { + @Override + public Void apply(NetworkId networkId) { + compute.deleteNetwork(networkId); + return null; + } + }; + } else if (res instanceof Subnetwork) { + return new Function() { + @Override + public Void apply(Subnetwork s) { + try { + Operation operation = s.delete(); + operation.waitFor(); + } catch (Exception e) { + + } finally { + return null; + } + } + }; + } else if (res instanceof SubnetworkId) { + return new Function() { + @Override + public Void apply(SubnetworkId subnetworkId) { + compute.deleteSubnetwork(subnetworkId); + return null; + } + }; + } else if (res instanceof Image) { + return new Function() { + @Override + public Void apply(Image i) { + try { + Operation operation = i.delete(); + operation.waitFor(); + } catch (Exception e) { + + } finally { + return null; + } + } + }; + } else if (res instanceof Instance) { + return new Function() { + @Override + public Void apply(Instance i) { + try { + Operation operation = i.delete(); + operation.waitFor(); + } catch (Exception e) { + + } finally { + return null; + } + } + }; + } else { + return new Function() { + @Override + public Void apply(T res) { + return null; + } + }; + } + } +} diff --git a/google-cloud-compute/src/test/java/com/google/cloud/compute/it/ITComputeTest.java b/google-cloud-compute/src/test/java/com/google/cloud/compute/it/ITComputeTest.java index 1d7eb4b293ed..ca2d88eef8cc 100644 --- a/google-cloud-compute/src/test/java/com/google/cloud/compute/it/ITComputeTest.java +++ b/google-cloud-compute/src/test/java/com/google/cloud/compute/it/ITComputeTest.java @@ -73,21 +73,21 @@ import com.google.cloud.compute.SubnetworkInfo; import com.google.cloud.compute.Zone; import com.google.cloud.compute.ZoneOperationId; +import com.google.cloud.compute.testing.ManagedResourceHelper; import com.google.cloud.compute.testing.RemoteComputeHelper; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; - -import org.junit.BeforeClass; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.Timeout; - import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeoutException; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.Timeout; public class ITComputeTest { @@ -101,6 +101,8 @@ public class ITComputeTest { private static final String IMAGE_PROJECT = "debian-cloud"; private static Compute compute; + private static ManagedResourceHelper managedResourceHelper; + @Rule public Timeout globalTimeout = Timeout.seconds(300); @@ -109,6 +111,12 @@ public class ITComputeTest { public static void beforeClass() { RemoteComputeHelper computeHelper = RemoteComputeHelper.create(); compute = computeHelper.getOptions().getService(); + managedResourceHelper = ManagedResourceHelper.create(compute); + } + + @AfterClass + public static void teardown() { + managedResourceHelper.cleanUpResources(); } @Test @@ -689,6 +697,7 @@ public void testCreateGetAndDeleteRegionAddress() throws InterruptedException, T operation.waitFor(); // test get Address remoteAddress = compute.getAddress(addressId); + managedResourceHelper.addManagedResource(remoteAddress); assertNotNull(remoteAddress); assertTrue(remoteAddress.getAddressId() instanceof RegionAddressId); assertEquals(REGION, remoteAddress.getAddressId().getRegion()); @@ -720,7 +729,9 @@ public void testListRegionAddresses() throws InterruptedException, TimeoutExcept Operation firstOperation = compute.create(AddressInfo.of(firstAddressId)); Operation secondOperation = compute.create(AddressInfo.of(secondAddressId)); firstOperation.waitFor(); + managedResourceHelper.addManagedResource(firstAddressId); secondOperation.waitFor(); + managedResourceHelper.addManagedResource(secondAddressId); Set addressSet = ImmutableSet.copyOf(addressNames); // test list Compute.AddressFilter filter = @@ -772,7 +783,9 @@ public void testAggregatedListAddresses() throws InterruptedException, TimeoutEx Operation firstOperation = compute.create(AddressInfo.of(firstAddressId)); Operation secondOperation = compute.create(AddressInfo.of(secondAddressId)); firstOperation.waitFor(); + managedResourceHelper.addManagedResource(firstAddressId); secondOperation.waitFor(); + managedResourceHelper.addManagedResource(secondAddressId); Set addressSet = ImmutableSet.copyOf(addressNames); Compute.AddressFilter filter = Compute.AddressFilter.equals(Compute.AddressField.NAME, prefix + "\\d"); @@ -803,6 +816,7 @@ public void testCreateGetAndDeleteGlobalAddress() throws InterruptedException, T operation.waitFor(); // test get Address remoteAddress = compute.getAddress(addressId); + managedResourceHelper.addManagedResource(remoteAddress); assertNotNull(remoteAddress); assertTrue(remoteAddress.getAddressId() instanceof GlobalAddressId); assertEquals(addressId.getAddress(), remoteAddress.getAddressId().getAddress()); @@ -832,7 +846,9 @@ public void testListGlobalAddresses() throws InterruptedException, TimeoutExcept Operation firstOperation = compute.create(AddressInfo.of(firstAddressId)); Operation secondOperation = compute.create(AddressInfo.of(secondAddressId)); firstOperation.waitFor(); + managedResourceHelper.addManagedResource(firstAddressId); secondOperation.waitFor(); + managedResourceHelper.addManagedResource(secondAddressId); Set addressSet = ImmutableSet.copyOf(addressNames); // test list Compute.AddressFilter filter = @@ -884,6 +900,7 @@ public void testCreateGetResizeAndDeleteStandardDisk() operation.waitFor(); // test get Disk remoteDisk = compute.getDisk(diskId); + managedResourceHelper.addManagedResource(remoteDisk); assertNotNull(remoteDisk); assertEquals(ZONE, remoteDisk.getDiskId().getZone()); assertEquals(diskId.getDisk(), remoteDisk.getDiskId().getDisk()); @@ -926,6 +943,7 @@ public void testCreateGetAndDeleteImageDisk() throws InterruptedException, Timeo operation.waitFor(); // test get Disk remoteDisk = compute.getDisk(diskId); + managedResourceHelper.addManagedResource(remoteDisk); assertNotNull(remoteDisk); assertEquals(ZONE, remoteDisk.getDiskId().getZone()); assertEquals(diskId.getDisk(), remoteDisk.getDiskId().getDisk()); @@ -975,11 +993,13 @@ public void testCreateGetAndDeleteSnapshotAndSnapshotDisk() Operation operation = compute.create(diskInfo); operation.waitFor(); Disk remoteDisk = compute.getDisk(diskId); + managedResourceHelper.addManagedResource(remoteDisk); operation = remoteDisk.createSnapshot(snapshotName); operation.waitFor(); // test get snapshot with selected fields Snapshot snapshot = compute.getSnapshot(snapshotName, Compute.SnapshotOption.fields(Compute.SnapshotField.CREATION_TIMESTAMP)); + managedResourceHelper.addManagedResource(snapshot); assertNull(snapshot.getGeneratedId()); assertNotNull(snapshot.getSnapshotId()); assertNotNull(snapshot.getCreationTimestamp()); @@ -1006,9 +1026,10 @@ public void testCreateGetAndDeleteSnapshotAndSnapshotDisk() diskInfo = DiskInfo.of(snapshotDiskId, SnapshotDiskConfiguration.of(SnapshotId.of(snapshotName))); operation = compute.create(diskInfo); -operation.waitFor(); + operation.waitFor(); // test get disk remoteDisk = compute.getDisk(snapshotDiskId); + managedResourceHelper.addManagedResource(remoteDisk); assertNotNull(remoteDisk); assertEquals(ZONE, remoteDisk.getDiskId().getZone()); assertEquals(snapshotDiskId.getDisk(), remoteDisk.getDiskId().getDisk()); @@ -1042,10 +1063,10 @@ public void testCreateGetAndDeleteSnapshotAndSnapshotDisk() assertNull(remoteDisk.getLastAttachTimestamp()); assertNull(remoteDisk.getLastDetachTimestamp()); operation = remoteDisk.delete(); -operation.waitFor(); + operation.waitFor(); assertNull(compute.getDisk(snapshotDiskId)); operation = snapshot.delete(); -operation.waitFor(); + operation.waitFor(); assertNull(compute.getSnapshot(snapshotName)); } @@ -1060,7 +1081,9 @@ public void testListDisksAndSnapshots() throws InterruptedException, TimeoutExce Operation firstOperation = compute.create(DiskInfo.of(firstDiskId, configuration)); Operation secondOperation = compute.create(DiskInfo.of(secondDiskId, configuration)); firstOperation.waitFor(); + managedResourceHelper.addManagedResource(firstDiskId); secondOperation.waitFor(); + managedResourceHelper.addManagedResource(secondDiskId); Set diskSet = ImmutableSet.copyOf(diskNames); // test list disks Compute.DiskFilter diskFilter = @@ -1113,7 +1136,9 @@ public void testListDisksAndSnapshots() throws InterruptedException, TimeoutExce firstOperation = compute.create(SnapshotInfo.of(firstSnapshotId, firstDiskId)); secondOperation = compute.create(SnapshotInfo.of(secondSnapshotId, secondDiskId)); firstOperation.waitFor(); + managedResourceHelper.addManagedResource(firstSnapshotId); secondOperation.waitFor(); + managedResourceHelper.addManagedResource(secondSnapshotId); // test list snapshots Compute.SnapshotFilter snapshotFilter = Compute.SnapshotFilter.equals(Compute.SnapshotField.NAME, prefix + "\\d"); @@ -1172,7 +1197,9 @@ public void testAggregatedListDisks() throws InterruptedException, TimeoutExcept Operation firstOperation = compute.create(DiskInfo.of(firstDiskId, configuration)); Operation secondOperation = compute.create(DiskInfo.of(secondDiskId, configuration)); firstOperation.waitFor(); + managedResourceHelper.addManagedResource(firstDiskId); secondOperation.waitFor(); + managedResourceHelper.addManagedResource(secondDiskId); Set zoneSet = ImmutableSet.copyOf(diskZones); Set diskSet = ImmutableSet.copyOf(diskNames); Compute.DiskFilter diskFilter = @@ -1213,9 +1240,11 @@ public void testCreateGetAndDeprecateImage() throws InterruptedException, Timeou ImageInfo imageInfo = ImageInfo.of(imageId, DiskImageConfiguration.of(diskId)); operation = compute.create(imageInfo); operation.waitFor(); + managedResourceHelper.addManagedResource(remoteDisk); // test get image with selected fields Image image = compute.getImage(imageId, Compute.ImageOption.fields(Compute.ImageField.CREATION_TIMESTAMP)); + managedResourceHelper.addManagedResource(image); assertNull(image.getGeneratedId()); assertNotNull(image.getImageId()); assertNotNull(image.getCreationTimestamp()); @@ -1328,6 +1357,7 @@ public void testCreateAndGetNetwork() throws InterruptedException, TimeoutExcept // test get network with selected fields Network network = compute.getNetwork(networkId.getNetwork(), Compute.NetworkOption.fields(Compute.NetworkField.CREATION_TIMESTAMP)); + managedResourceHelper.addManagedResource(network); assertEquals(networkId.getNetwork(), network.getNetworkId().getNetwork()); assertNull(network.getGeneratedId()); assertNotNull(network.getCreationTimestamp()); @@ -1355,7 +1385,8 @@ public void testListNetworks() throws InterruptedException, TimeoutException { NetworkInfo networkInfo = NetworkInfo.of(networkId, StandardNetworkConfiguration.of("192.168.0.0/16")); Operation operation = compute.create(networkInfo); -operation.waitFor(); + operation.waitFor(); + managedResourceHelper.addManagedResource(networkId); // test list Compute.NetworkFilter filter = Compute.NetworkFilter.equals(Compute.NetworkField.NAME, name); Page networkPage = compute.listNetworks(Compute.NetworkListOption.filter(filter)); @@ -1390,7 +1421,7 @@ public void testListNetworks() throws InterruptedException, TimeoutException { } assertEquals(1, count); operation = compute.deleteNetwork(networkId); -operation.waitFor(); + operation.waitFor(); assertNull(compute.getNetwork(name)); } @@ -1400,9 +1431,10 @@ public void testCreateNetworkAndSubnetwork() throws InterruptedException, Timeou NetworkId networkId = NetworkId.of(networkName); NetworkInfo networkInfo = NetworkInfo.of(networkId, SubnetNetworkConfiguration.of(false)); Operation operation = compute.create(networkInfo); -operation.waitFor(); + operation.waitFor(); // test get network Network network = compute.getNetwork(networkId.getNetwork()); + managedResourceHelper.addManagedResource(network); assertEquals(networkId.getNetwork(), network.getNetworkId().getNetwork()); assertNotNull(network.getGeneratedId()); assertNotNull(network.getCreationTimestamp()); @@ -1417,6 +1449,7 @@ public void testCreateNetworkAndSubnetwork() throws InterruptedException, Timeou // test get subnetwork with selected fields Subnetwork subnetwork = compute.getSubnetwork(subnetworkId, Compute.SubnetworkOption.fields(Compute.SubnetworkField.CREATION_TIMESTAMP)); + managedResourceHelper.addManagedResource(subnetwork); assertNull(subnetwork.getGeneratedId()); assertEquals(subnetworkId.getSubnetwork(), subnetwork.getSubnetworkId().getSubnetwork()); assertNotNull(subnetwork.getCreationTimestamp()); @@ -1470,9 +1503,9 @@ public void testCreateNetworkAndSubnetwork() throws InterruptedException, Timeou } assertEquals(1, count); operation = subnetwork.delete(); -operation.waitFor(); + operation.waitFor(); operation = compute.deleteNetwork(networkId); -operation.waitFor(); + operation.waitFor(); assertNull(compute.getSubnetwork(subnetworkId)); assertNull(compute.getNetwork(networkName)); } @@ -1483,7 +1516,8 @@ public void testAggregatedListSubnetworks() throws InterruptedException, Timeout NetworkId networkId = NetworkId.of(networkName); NetworkInfo networkInfo = NetworkInfo.of(networkId, SubnetNetworkConfiguration.of(false)); Operation operation = compute.create(networkInfo); -operation.waitFor(); + operation.waitFor(); + managedResourceHelper.addManagedResource(networkId); String prefix = BASE_RESOURCE_NAME + "list-subnetwork"; String[] regionNames = {"us-central1", "us-east1"}; String[] subnetworkNames = {prefix + "1", prefix + "2"}; @@ -1497,7 +1531,9 @@ public void testAggregatedListSubnetworks() throws InterruptedException, Timeout Operation firstOperation = compute.create(firstSubnetworkInfo); Operation secondOperation = compute.create(secondSubnetworkInfo); firstOperation.waitFor(); + managedResourceHelper.addManagedResource(firstSubnetworkId); secondOperation.waitFor(); + managedResourceHelper.addManagedResource(secondSubnetworkId); Set regionSet = ImmutableSet.copyOf(regionNames); Set subnetworkSet = ImmutableSet.copyOf(subnetworkNames); Set rangeSet = ImmutableSet.copyOf(ipRanges); @@ -1524,7 +1560,7 @@ public void testAggregatedListSubnetworks() throws InterruptedException, Timeout firstOperation.waitFor(); secondOperation.waitFor(); operation = compute.deleteNetwork(networkId); -operation.waitFor(); + operation.waitFor(); assertNull(compute.getNetwork(networkName)); } @@ -1536,11 +1572,14 @@ public void testCreateGetAndDeleteInstance() throws InterruptedException, Timeou AddressId addressId = RegionAddressId.of(REGION, addressName); AddressInfo addressInfo = AddressInfo.of(addressId); Operation operation = compute.create(addressInfo); -operation.waitFor(); + operation.waitFor(); Address address = compute.getAddress(addressId); + managedResourceHelper.addManagedResource(address); // Create an instance InstanceId instanceId = InstanceId.of(ZONE, instanceName); + managedResourceHelper.addManagedResource(instanceId); NetworkId networkId = NetworkId.of("default"); + managedResourceHelper.addManagedResource(networkId); NetworkInterface networkInterface = NetworkInterface.newBuilder(networkId) .setAccessConfigurations(NetworkInterface.AccessConfig.newBuilder() .setName("NAT") @@ -1557,9 +1596,10 @@ public void testCreateGetAndDeleteInstance() throws InterruptedException, Timeou .setNetworkInterfaces(networkInterface) .build(); operation = compute.create(instanceInfo); -operation.waitFor(); + operation.waitFor(); // test get Instance remoteInstance = compute.getInstance(instanceId); + managedResourceHelper.addManagedResource(remoteInstance); assertEquals(instanceName, remoteInstance.getInstanceId().getInstance()); assertEquals(ZONE, remoteInstance.getInstanceId().getZone()); assertEquals(InstanceInfo.Status.RUNNING, remoteInstance.getStatus()); @@ -1610,7 +1650,7 @@ public void testCreateGetAndDeleteInstance() throws InterruptedException, Timeou String newSerialPortOutput = remoteInstance.getSerialPortOutput(1); assertTrue(newSerialPortOutput.contains(serialPortOutput)); operation = remoteInstance.delete(); -operation.waitFor(); + operation.waitFor(); assertNull(compute.getInstance(instanceId)); address.delete(); } @@ -1629,22 +1669,23 @@ public void testStartStopAndResetInstance() throws InterruptedException, Timeout .setNetworkInterfaces(networkInterface) .build(); Operation operation = compute.create(instanceInfo); -operation.waitFor(); + operation.waitFor(); Instance remoteInstance = compute.getInstance(instanceId, Compute.InstanceOption.fields(Compute.InstanceField.STATUS)); + managedResourceHelper.addManagedResource(remoteInstance); assertEquals(InstanceInfo.Status.RUNNING, remoteInstance.getStatus()); operation = remoteInstance.stop(); -operation.waitFor(); + operation.waitFor(); remoteInstance = compute.getInstance(instanceId, Compute.InstanceOption.fields(Compute.InstanceField.STATUS)); assertEquals(InstanceInfo.Status.TERMINATED, remoteInstance.getStatus()); operation = remoteInstance.start(); -operation.waitFor(); + operation.waitFor(); remoteInstance = compute.getInstance(instanceId, Compute.InstanceOption.fields(Compute.InstanceField.STATUS)); assertEquals(InstanceInfo.Status.RUNNING, remoteInstance.getStatus()); operation = remoteInstance.reset(); -operation.waitFor(); + operation.waitFor(); remoteInstance = compute.getInstance(instanceId, Compute.InstanceOption.fields(Compute.InstanceField.STATUS)); assertEquals(InstanceInfo.Status.RUNNING, remoteInstance.getStatus()); @@ -1665,25 +1706,26 @@ public void testSetInstanceProperties() throws InterruptedException, TimeoutExce .setNetworkInterfaces(networkInterface) .build(); Operation operation = compute.create(instanceInfo); -operation.waitFor(); + operation.waitFor(); Instance remoteInstance = compute.getInstance(instanceId); + managedResourceHelper.addManagedResource(remoteInstance); // test set tags List tags = ImmutableList.of("tag1", "tag2"); operation = remoteInstance.setTags(tags); -operation.waitFor(); + operation.waitFor(); remoteInstance = compute.getInstance(instanceId); assertEquals(tags, remoteInstance.getTags().getValues()); // test set metadata Map metadata = ImmutableMap.of("key", "value"); operation = remoteInstance.setMetadata(metadata); -operation.waitFor(); + operation.waitFor(); remoteInstance = compute.getInstance(instanceId); assertEquals(metadata, remoteInstance.getMetadata().getValues()); // test set machine type operation = remoteInstance.stop(); -operation.waitFor(); + operation.waitFor(); operation = remoteInstance.setMachineType(MachineTypeId.of(ZONE, "n1-standard-1")); -operation.waitFor(); + operation.waitFor(); remoteInstance = compute.getInstance(instanceId); assertEquals("n1-standard-1", remoteInstance.getMachineType().getType()); assertEquals(ZONE, remoteInstance.getMachineType().getZone()); @@ -1691,7 +1733,7 @@ public void testSetInstanceProperties() throws InterruptedException, TimeoutExce SchedulingOptions options = SchedulingOptions.standard(false, SchedulingOptions.Maintenance.TERMINATE); operation = remoteInstance.setSchedulingOptions(options); -operation.waitFor(); + operation.waitFor(); remoteInstance = compute.getInstance(instanceId); assertEquals(options, remoteInstance.getSchedulingOptions()); remoteInstance.delete(); @@ -1723,6 +1765,7 @@ public void testAttachAndDetachDisk() throws InterruptedException, TimeoutExcept AttachedDisk.PersistentDiskConfiguration.newBuilder(diskId).build()); instanceOperation.waitFor(); remoteInstance = compute.getInstance(instanceId); + managedResourceHelper.addManagedResource(remoteInstance); Set deviceSet = ImmutableSet.of("dev0", "dev1"); assertEquals(2, remoteInstance.getAttachedDisks().size()); for (AttachedDisk remoteAttachedDisk : remoteInstance.getAttachedDisks()) { @@ -1768,7 +1811,9 @@ public void testAddAndRemoveAccessConfig() throws InterruptedException, TimeoutE addressOperation.waitFor(); instanceOperation.waitFor(); Address remoteAddress = compute.getAddress(addressId); + managedResourceHelper.addManagedResource(remoteAddress); Instance remoteInstance = compute.getInstance(instanceId); + managedResourceHelper.addManagedResource(remoteInstance); String networkInterfaceName = remoteInstance.getNetworkInterfaces().get(0).getName(); // test add access config NetworkInterface.AccessConfig accessConfig = NetworkInterface.AccessConfig.newBuilder() From 40b1cd44c3bf3d2d96dc823cd656d2642461c815 Mon Sep 17 00:00:00 2001 From: Neo Wu Date: Fri, 31 Mar 2017 19:23:26 -0700 Subject: [PATCH 2/6] refactor and incorporate feedbacks * implement `add` function with compile-time type checking * add `remove` method to remove a resource from managed resources * use Id's as handles to resources --- .../testing/ManagedResourceCleaner.java | 210 ++++++++++++++++ .../testing/ManagedResourceHelper.java | 230 ------------------ .../cloud/compute/it/ITComputeTest.java | 125 ++++++---- 3 files changed, 290 insertions(+), 275 deletions(-) create mode 100644 google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ManagedResourceCleaner.java delete mode 100644 google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ManagedResourceHelper.java diff --git a/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ManagedResourceCleaner.java b/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ManagedResourceCleaner.java new file mode 100644 index 000000000000..8be31ef54082 --- /dev/null +++ b/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ManagedResourceCleaner.java @@ -0,0 +1,210 @@ +/* + * Copyright 2016 Google Inc. All Rights Reserved. + * + * Licensed 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 com.google.cloud.compute.testing; + +import com.google.cloud.compute.AddressId; +import com.google.cloud.compute.Compute; +import com.google.cloud.compute.DiskId; +import com.google.cloud.compute.ImageId; +import com.google.cloud.compute.InstanceId; +import com.google.cloud.compute.NetworkId; +import com.google.cloud.compute.SnapshotId; +import com.google.cloud.compute.SubnetworkId; +import com.google.common.base.Function; +import java.util.HashMap; +import java.util.Map; +import sun.reflect.generics.reflectiveObjects.NotImplementedException; + +public class ManagedResourceCleaner { + private final Compute compute; + private final Map> resources; + + private ManagedResourceCleaner(Compute compute) { + this.compute = compute; + this.resources = new HashMap<>(); + } + + public static ManagedResourceCleaner create(Compute compute) { + return new ManagedResourceCleaner(compute); + } + + private class ManagedResource { + final T res; + Function func; + + private ManagedResource(T res) { + this.res = res; + + @SuppressWarnings("unchecked") + Function localFunc = (Function) getDeleteMethod(res); + + this.func = localFunc; + } + + public void delete() { + func.apply(res); + } + } + + public void cleanUp() { + for (Map.Entry> r : resources.entrySet()) { + System.out.println("Clean up compute engine resource: " + r.getKey().toString()); + r.getValue().delete(); + } + resources.clear(); + } + + public ManagedResourceCleaner add(AddressId addressId) { + ManagedResource r = new ManagedResource<>(addressId); + resources.put(addressId, r); + return this; + } + + public ManagedResourceCleaner remove(AddressId addressId) { + resources.remove(addressId); + return this; + } + + public ManagedResourceCleaner add(DiskId diskId) { + ManagedResource r = new ManagedResource<>(diskId); + resources.put(diskId, r); + return this; + } + + public ManagedResourceCleaner remove(DiskId diskId) { + resources.remove(diskId); + return this; + } + + public ManagedResourceCleaner add(SnapshotId snapshotId) { + ManagedResource r = new ManagedResource<>(snapshotId); + resources.put(snapshotId, r); + return this; + } + + public ManagedResourceCleaner remove(SnapshotId snapshotId) { + resources.remove(snapshotId); + return this; + } + + public ManagedResourceCleaner add(NetworkId networkId) { + ManagedResource r = new ManagedResource<>(networkId); + resources.put(networkId, r); + return this; + } + + public ManagedResourceCleaner remove(NetworkId networkId) { + resources.remove(networkId); + return this; + } + + public ManagedResourceCleaner add(SubnetworkId subnetworkId) { + ManagedResource r = new ManagedResource<>(subnetworkId); + resources.put(subnetworkId, r); + return this; + } + + public ManagedResourceCleaner remove(SubnetworkId subnetworkId) { + resources.remove(subnetworkId); + return this; + } + + public ManagedResourceCleaner add(ImageId imageId) { + ManagedResource r = new ManagedResource<>(imageId); + resources.put(imageId, r); + return this; + } + + public ManagedResourceCleaner remove(ImageId imageId) { + resources.remove(imageId); + return this; + } + + public ManagedResourceCleaner add(InstanceId instanceId) { + ManagedResource r = new ManagedResource<>(instanceId); + resources.put(instanceId, r); + return this; + } + + public ManagedResourceCleaner remove(InstanceId instanceId) { + resources.remove(instanceId); + return this; + } + + private Function getDeleteMethod(T res) { + + if (res instanceof AddressId) { + return new Function() { + @Override + public Void apply(AddressId addressId) { + compute.deleteAddress(addressId); + return null; + } + }; + } else if (res instanceof DiskId) { + return new Function() { + @Override + public Void apply(DiskId diskId) { + compute.deleteDisk(diskId); + return null; + } + }; + } else if (res instanceof SnapshotId) { + return new Function() { + @Override + public Void apply(SnapshotId snapshotId) { + compute.deleteSnapshot(snapshotId); + return null; + } + }; + } else if (res instanceof NetworkId) { + return new Function() { + @Override + public Void apply(NetworkId networkId) { + compute.deleteNetwork(networkId); + return null; + } + }; + } else if (res instanceof SubnetworkId) { + return new Function() { + @Override + public Void apply(SubnetworkId subnetworkId) { + compute.deleteSubnetwork(subnetworkId); + return null; + } + }; + } else if (res instanceof ImageId) { + return new Function() { + @Override + public Void apply(ImageId imageId) { + compute.deleteImage(imageId); + return null; + } + }; + } else if (res instanceof InstanceId) { + return new Function() { + @Override + public Void apply(InstanceId instanceId) { + compute.deleteInstance(instanceId); + return null; + } + }; + } else { + throw new NotImplementedException(); + } + } +} diff --git a/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ManagedResourceHelper.java b/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ManagedResourceHelper.java deleted file mode 100644 index 8aa6c53d0054..000000000000 --- a/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ManagedResourceHelper.java +++ /dev/null @@ -1,230 +0,0 @@ -/* - * Copyright 2016 Google Inc. All Rights Reserved. - * - * Licensed 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 com.google.cloud.compute.testing; - -import com.google.cloud.compute.Address; -import com.google.cloud.compute.AddressId; -import com.google.cloud.compute.Compute; -import com.google.cloud.compute.Disk; -import com.google.cloud.compute.DiskId; -import com.google.cloud.compute.Image; -import com.google.cloud.compute.Instance; -import com.google.cloud.compute.Network; -import com.google.cloud.compute.NetworkId; -import com.google.cloud.compute.Operation; -import com.google.cloud.compute.Snapshot; -import com.google.cloud.compute.SnapshotId; -import com.google.cloud.compute.Subnetwork; -import com.google.cloud.compute.SubnetworkId; -import com.google.common.base.Function; -import java.util.ArrayList; -import java.util.List; - -public class ManagedResourceHelper { - private final Compute compute; - private final List> resources; - - private ManagedResourceHelper(Compute compute) { - this.compute = compute; - this.resources = new ArrayList<>(); - } - - public static ManagedResourceHelper create(Compute compute) { - return new ManagedResourceHelper(compute); - } - - private class ManagedResource { - final T res; - Function func; - - private ManagedResource(T res) { - this.res = res; - - @SuppressWarnings("unchecked") - Function localFunc = (Function) getDeleteMethod(res); - - this.func = localFunc; - } - - public void delete() { - func.apply(res); - } - } - - public ManagedResourceHelper addManagedResource(T res) { - ManagedResource r = new ManagedResource<>(res); - resources.add(r); - return this; - } - - public void cleanUpResources() { - for (ManagedResource r : resources) { - r.delete(); - //TODO (neowu): add logging if a resource has not been deleted in test fixture - } - resources.clear(); - } - - private Function getDeleteMethod(T res) { - if (res instanceof Address) { - return new Function() { - @Override - public Void apply(Address address) { - try { - Operation operation = address.delete(); - operation.waitFor(); - } catch (Exception e) { - - } finally { - return null; - } - } - }; - } else if (res instanceof AddressId) { - return new Function() { - @Override - public Void apply(AddressId addressId) { - compute.deleteAddress(addressId); - return null; - } - }; - } else if (res instanceof Disk) { - return new Function() { - @Override - public Void apply(Disk d) { - try { - Operation operation = d.delete(); - operation.waitFor(); - } catch (Exception e) { - - } finally { - return null; - } - } - }; - } else if (res instanceof DiskId) { - return new Function() { - @Override - public Void apply(DiskId diskId) { - compute.deleteDisk(diskId); - return null; - } - }; - } else if (res instanceof Snapshot) { - return new Function() { - @Override - public Void apply(Snapshot s) { - try { - Operation operation = s.delete(); - operation.waitFor(); - } catch (Exception e) { - - } finally { - return null; - } - } - }; - } else if (res instanceof SnapshotId) { - return new Function() { - @Override - public Void apply(SnapshotId snapshotId) { - compute.deleteSnapshot(snapshotId); - return null; - } - }; - } else if (res instanceof Network) { - return new Function() { - @Override - public Void apply(Network n) { - try { - Operation operation = n.delete(); - operation.waitFor(); - } catch (Exception e) { - - } finally { - return null; - } - } - }; - } else if (res instanceof NetworkId) { - return new Function() { - @Override - public Void apply(NetworkId networkId) { - compute.deleteNetwork(networkId); - return null; - } - }; - } else if (res instanceof Subnetwork) { - return new Function() { - @Override - public Void apply(Subnetwork s) { - try { - Operation operation = s.delete(); - operation.waitFor(); - } catch (Exception e) { - - } finally { - return null; - } - } - }; - } else if (res instanceof SubnetworkId) { - return new Function() { - @Override - public Void apply(SubnetworkId subnetworkId) { - compute.deleteSubnetwork(subnetworkId); - return null; - } - }; - } else if (res instanceof Image) { - return new Function() { - @Override - public Void apply(Image i) { - try { - Operation operation = i.delete(); - operation.waitFor(); - } catch (Exception e) { - - } finally { - return null; - } - } - }; - } else if (res instanceof Instance) { - return new Function() { - @Override - public Void apply(Instance i) { - try { - Operation operation = i.delete(); - operation.waitFor(); - } catch (Exception e) { - - } finally { - return null; - } - } - }; - } else { - return new Function() { - @Override - public Void apply(T res) { - return null; - } - }; - } - } -} diff --git a/google-cloud-compute/src/test/java/com/google/cloud/compute/it/ITComputeTest.java b/google-cloud-compute/src/test/java/com/google/cloud/compute/it/ITComputeTest.java index ca2d88eef8cc..2a9fbd7fc88d 100644 --- a/google-cloud-compute/src/test/java/com/google/cloud/compute/it/ITComputeTest.java +++ b/google-cloud-compute/src/test/java/com/google/cloud/compute/it/ITComputeTest.java @@ -73,7 +73,7 @@ import com.google.cloud.compute.SubnetworkInfo; import com.google.cloud.compute.Zone; import com.google.cloud.compute.ZoneOperationId; -import com.google.cloud.compute.testing.ManagedResourceHelper; +import com.google.cloud.compute.testing.ManagedResourceCleaner; import com.google.cloud.compute.testing.RemoteComputeHelper; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; @@ -101,7 +101,7 @@ public class ITComputeTest { private static final String IMAGE_PROJECT = "debian-cloud"; private static Compute compute; - private static ManagedResourceHelper managedResourceHelper; + private static ManagedResourceCleaner managedResourceCleaner; @Rule @@ -111,12 +111,12 @@ public class ITComputeTest { public static void beforeClass() { RemoteComputeHelper computeHelper = RemoteComputeHelper.create(); compute = computeHelper.getOptions().getService(); - managedResourceHelper = ManagedResourceHelper.create(compute); + managedResourceCleaner = ManagedResourceCleaner.create(compute); } @AfterClass public static void teardown() { - managedResourceHelper.cleanUpResources(); + managedResourceCleaner.cleanUp(); } @Test @@ -697,7 +697,7 @@ public void testCreateGetAndDeleteRegionAddress() throws InterruptedException, T operation.waitFor(); // test get Address remoteAddress = compute.getAddress(addressId); - managedResourceHelper.addManagedResource(remoteAddress); + managedResourceCleaner.add(addressId); assertNotNull(remoteAddress); assertTrue(remoteAddress.getAddressId() instanceof RegionAddressId); assertEquals(REGION, remoteAddress.getAddressId().getRegion()); @@ -717,6 +717,7 @@ public void testCreateGetAndDeleteRegionAddress() throws InterruptedException, T assertNull(remoteAddress.getGeneratedId()); operation = remoteAddress.delete(); operation.waitFor(); + managedResourceCleaner.remove(addressId); assertNull(compute.getAddress(addressId)); } @@ -729,9 +730,9 @@ public void testListRegionAddresses() throws InterruptedException, TimeoutExcept Operation firstOperation = compute.create(AddressInfo.of(firstAddressId)); Operation secondOperation = compute.create(AddressInfo.of(secondAddressId)); firstOperation.waitFor(); - managedResourceHelper.addManagedResource(firstAddressId); + managedResourceCleaner.add(firstAddressId); secondOperation.waitFor(); - managedResourceHelper.addManagedResource(secondAddressId); + managedResourceCleaner.add(secondAddressId); Set addressSet = ImmutableSet.copyOf(addressNames); // test list Compute.AddressFilter filter = @@ -771,7 +772,9 @@ public void testListRegionAddresses() throws InterruptedException, TimeoutExcept } assertEquals(2, count); compute.deleteAddress(firstAddressId); + managedResourceCleaner.remove(firstAddressId); compute.deleteAddress(secondAddressId); + managedResourceCleaner.remove(secondAddressId); } @Test @@ -783,9 +786,9 @@ public void testAggregatedListAddresses() throws InterruptedException, TimeoutEx Operation firstOperation = compute.create(AddressInfo.of(firstAddressId)); Operation secondOperation = compute.create(AddressInfo.of(secondAddressId)); firstOperation.waitFor(); - managedResourceHelper.addManagedResource(firstAddressId); + managedResourceCleaner.add(firstAddressId); secondOperation.waitFor(); - managedResourceHelper.addManagedResource(secondAddressId); + managedResourceCleaner.add(secondAddressId); Set addressSet = ImmutableSet.copyOf(addressNames); Compute.AddressFilter filter = Compute.AddressFilter.equals(Compute.AddressField.NAME, prefix + "\\d"); @@ -804,7 +807,9 @@ public void testAggregatedListAddresses() throws InterruptedException, TimeoutEx } assertEquals(2, count); compute.deleteAddress(firstAddressId); + managedResourceCleaner.remove(firstAddressId); compute.deleteAddress(secondAddressId); + managedResourceCleaner.remove(secondAddressId); } @Test @@ -816,7 +821,7 @@ public void testCreateGetAndDeleteGlobalAddress() throws InterruptedException, T operation.waitFor(); // test get Address remoteAddress = compute.getAddress(addressId); - managedResourceHelper.addManagedResource(remoteAddress); + managedResourceCleaner.add(addressId); assertNotNull(remoteAddress); assertTrue(remoteAddress.getAddressId() instanceof GlobalAddressId); assertEquals(addressId.getAddress(), remoteAddress.getAddressId().getAddress()); @@ -834,6 +839,7 @@ public void testCreateGetAndDeleteGlobalAddress() throws InterruptedException, T assertNull(remoteAddress.getGeneratedId()); operation = remoteAddress.delete(); operation.waitFor(); + managedResourceCleaner.remove(addressId); assertNull(compute.getAddress(addressId)); } @@ -846,9 +852,9 @@ public void testListGlobalAddresses() throws InterruptedException, TimeoutExcept Operation firstOperation = compute.create(AddressInfo.of(firstAddressId)); Operation secondOperation = compute.create(AddressInfo.of(secondAddressId)); firstOperation.waitFor(); - managedResourceHelper.addManagedResource(firstAddressId); + managedResourceCleaner.add(firstAddressId); secondOperation.waitFor(); - managedResourceHelper.addManagedResource(secondAddressId); + managedResourceCleaner.add(secondAddressId); Set addressSet = ImmutableSet.copyOf(addressNames); // test list Compute.AddressFilter filter = @@ -886,7 +892,9 @@ public void testListGlobalAddresses() throws InterruptedException, TimeoutExcept } assertEquals(2, count); compute.deleteAddress(firstAddressId); + managedResourceCleaner.remove(firstAddressId); compute.deleteAddress(secondAddressId); + managedResourceCleaner.remove(secondAddressId); } @Test @@ -900,7 +908,7 @@ public void testCreateGetResizeAndDeleteStandardDisk() operation.waitFor(); // test get Disk remoteDisk = compute.getDisk(diskId); - managedResourceHelper.addManagedResource(remoteDisk); + managedResourceCleaner.add(diskId); assertNotNull(remoteDisk); assertEquals(ZONE, remoteDisk.getDiskId().getZone()); assertEquals(diskId.getDisk(), remoteDisk.getDiskId().getDisk()); @@ -931,6 +939,7 @@ public void testCreateGetResizeAndDeleteStandardDisk() assertNull(remoteDisk.getLastDetachTimestamp()); operation = remoteDisk.delete(); operation.waitFor(); + managedResourceCleaner.remove(diskId); assertNull(compute.getDisk(diskId)); } @@ -943,7 +952,7 @@ public void testCreateGetAndDeleteImageDisk() throws InterruptedException, Timeo operation.waitFor(); // test get Disk remoteDisk = compute.getDisk(diskId); - managedResourceHelper.addManagedResource(remoteDisk); + managedResourceCleaner.add(diskId); assertNotNull(remoteDisk); assertEquals(ZONE, remoteDisk.getDiskId().getZone()); assertEquals(diskId.getDisk(), remoteDisk.getDiskId().getDisk()); @@ -977,6 +986,7 @@ public void testCreateGetAndDeleteImageDisk() throws InterruptedException, Timeo assertNull(remoteDisk.getLastDetachTimestamp()); operation = remoteDisk.delete(); operation.waitFor(); + managedResourceCleaner.remove(diskId); assertNull(compute.getDisk(diskId)); } @@ -993,13 +1003,13 @@ public void testCreateGetAndDeleteSnapshotAndSnapshotDisk() Operation operation = compute.create(diskInfo); operation.waitFor(); Disk remoteDisk = compute.getDisk(diskId); - managedResourceHelper.addManagedResource(remoteDisk); + managedResourceCleaner.add(diskId); operation = remoteDisk.createSnapshot(snapshotName); operation.waitFor(); // test get snapshot with selected fields Snapshot snapshot = compute.getSnapshot(snapshotName, Compute.SnapshotOption.fields(Compute.SnapshotField.CREATION_TIMESTAMP)); - managedResourceHelper.addManagedResource(snapshot); + managedResourceCleaner.add(snapshot.getSnapshotId()); assertNull(snapshot.getGeneratedId()); assertNotNull(snapshot.getSnapshotId()); assertNotNull(snapshot.getCreationTimestamp()); @@ -1023,13 +1033,14 @@ public void testCreateGetAndDeleteSnapshotAndSnapshotDisk() assertNotNull(snapshot.getStorageBytes()); assertNotNull(snapshot.getStorageBytesStatus()); remoteDisk.delete(); + managedResourceCleaner.remove(diskId); diskInfo = DiskInfo.of(snapshotDiskId, SnapshotDiskConfiguration.of(SnapshotId.of(snapshotName))); operation = compute.create(diskInfo); operation.waitFor(); // test get disk remoteDisk = compute.getDisk(snapshotDiskId); - managedResourceHelper.addManagedResource(remoteDisk); + managedResourceCleaner.add(snapshotDiskId); assertNotNull(remoteDisk); assertEquals(ZONE, remoteDisk.getDiskId().getZone()); assertEquals(snapshotDiskId.getDisk(), remoteDisk.getDiskId().getDisk()); @@ -1064,9 +1075,11 @@ public void testCreateGetAndDeleteSnapshotAndSnapshotDisk() assertNull(remoteDisk.getLastDetachTimestamp()); operation = remoteDisk.delete(); operation.waitFor(); + managedResourceCleaner.remove(snapshotDiskId); assertNull(compute.getDisk(snapshotDiskId)); operation = snapshot.delete(); operation.waitFor(); + managedResourceCleaner.remove(snapshot.getSnapshotId()); assertNull(compute.getSnapshot(snapshotName)); } @@ -1081,9 +1094,9 @@ public void testListDisksAndSnapshots() throws InterruptedException, TimeoutExce Operation firstOperation = compute.create(DiskInfo.of(firstDiskId, configuration)); Operation secondOperation = compute.create(DiskInfo.of(secondDiskId, configuration)); firstOperation.waitFor(); - managedResourceHelper.addManagedResource(firstDiskId); + managedResourceCleaner.add(firstDiskId); secondOperation.waitFor(); - managedResourceHelper.addManagedResource(secondDiskId); + managedResourceCleaner.add(secondDiskId); Set diskSet = ImmutableSet.copyOf(diskNames); // test list disks Compute.DiskFilter diskFilter = @@ -1136,9 +1149,9 @@ public void testListDisksAndSnapshots() throws InterruptedException, TimeoutExce firstOperation = compute.create(SnapshotInfo.of(firstSnapshotId, firstDiskId)); secondOperation = compute.create(SnapshotInfo.of(secondSnapshotId, secondDiskId)); firstOperation.waitFor(); - managedResourceHelper.addManagedResource(firstSnapshotId); + managedResourceCleaner.add(firstSnapshotId); secondOperation.waitFor(); - managedResourceHelper.addManagedResource(secondSnapshotId); + managedResourceCleaner.add(secondSnapshotId); // test list snapshots Compute.SnapshotFilter snapshotFilter = Compute.SnapshotFilter.equals(Compute.SnapshotField.NAME, prefix + "\\d"); @@ -1180,9 +1193,13 @@ public void testListDisksAndSnapshots() throws InterruptedException, TimeoutExce } assertEquals(2, count); compute.deleteDisk(firstDiskId); + managedResourceCleaner.remove(firstDiskId); compute.deleteDisk(secondDiskId); + managedResourceCleaner.remove(secondDiskId); compute.deleteSnapshot(firstSnapshotId); + managedResourceCleaner.remove(firstSnapshotId); compute.deleteSnapshot(secondSnapshotId); + managedResourceCleaner.remove(secondSnapshotId); } @Test @@ -1197,9 +1214,9 @@ public void testAggregatedListDisks() throws InterruptedException, TimeoutExcept Operation firstOperation = compute.create(DiskInfo.of(firstDiskId, configuration)); Operation secondOperation = compute.create(DiskInfo.of(secondDiskId, configuration)); firstOperation.waitFor(); - managedResourceHelper.addManagedResource(firstDiskId); + managedResourceCleaner.add(firstDiskId); secondOperation.waitFor(); - managedResourceHelper.addManagedResource(secondDiskId); + managedResourceCleaner.add(secondDiskId); Set zoneSet = ImmutableSet.copyOf(diskZones); Set diskSet = ImmutableSet.copyOf(diskNames); Compute.DiskFilter diskFilter = @@ -1223,7 +1240,9 @@ public void testAggregatedListDisks() throws InterruptedException, TimeoutExcept } assertEquals(2, count); compute.deleteDisk(firstDiskId); + managedResourceCleaner.remove(firstDiskId); compute.deleteDisk(secondDiskId); + managedResourceCleaner.remove(secondDiskId); } @Test @@ -1240,11 +1259,11 @@ public void testCreateGetAndDeprecateImage() throws InterruptedException, Timeou ImageInfo imageInfo = ImageInfo.of(imageId, DiskImageConfiguration.of(diskId)); operation = compute.create(imageInfo); operation.waitFor(); - managedResourceHelper.addManagedResource(remoteDisk); + managedResourceCleaner.add(diskId); // test get image with selected fields Image image = compute.getImage(imageId, Compute.ImageOption.fields(Compute.ImageField.CREATION_TIMESTAMP)); - managedResourceHelper.addManagedResource(image); + managedResourceCleaner.add(imageId); assertNull(image.getGeneratedId()); assertNotNull(image.getImageId()); assertNotNull(image.getCreationTimestamp()); @@ -1277,12 +1296,14 @@ public void testCreateGetAndDeprecateImage() throws InterruptedException, Timeou .setDeprecated(System.currentTimeMillis()) .build(); operation = image.deprecate(deprecationStatus); -operation.waitFor(); + operation.waitFor(); image = compute.getImage(imageId); assertEquals(deprecationStatus, image.getDeprecationStatus()); remoteDisk.delete(); + managedResourceCleaner.remove(diskId); operation = image.delete(); -operation.waitFor(); + operation.waitFor(); + managedResourceCleaner.remove(imageId); assertNull(compute.getImage(imageId)); } @@ -1357,7 +1378,7 @@ public void testCreateAndGetNetwork() throws InterruptedException, TimeoutExcept // test get network with selected fields Network network = compute.getNetwork(networkId.getNetwork(), Compute.NetworkOption.fields(Compute.NetworkField.CREATION_TIMESTAMP)); - managedResourceHelper.addManagedResource(network); + managedResourceCleaner.add(networkId); assertEquals(networkId.getNetwork(), network.getNetworkId().getNetwork()); assertNull(network.getGeneratedId()); assertNotNull(network.getCreationTimestamp()); @@ -1374,7 +1395,8 @@ public void testCreateAndGetNetwork() throws InterruptedException, TimeoutExcept remoteConfiguration = network.getConfiguration(); assertEquals("192.168.0.0/16", remoteConfiguration.getIpRange()); operation = network.delete(); -operation.waitFor(); + operation.waitFor(); + managedResourceCleaner.remove(networkId); assertNull(compute.getNetwork(name)); } @@ -1386,7 +1408,7 @@ public void testListNetworks() throws InterruptedException, TimeoutException { NetworkInfo.of(networkId, StandardNetworkConfiguration.of("192.168.0.0/16")); Operation operation = compute.create(networkInfo); operation.waitFor(); - managedResourceHelper.addManagedResource(networkId); + managedResourceCleaner.add(networkId); // test list Compute.NetworkFilter filter = Compute.NetworkFilter.equals(Compute.NetworkField.NAME, name); Page networkPage = compute.listNetworks(Compute.NetworkListOption.filter(filter)); @@ -1422,6 +1444,7 @@ public void testListNetworks() throws InterruptedException, TimeoutException { assertEquals(1, count); operation = compute.deleteNetwork(networkId); operation.waitFor(); + managedResourceCleaner.remove(networkId); assertNull(compute.getNetwork(name)); } @@ -1434,7 +1457,7 @@ public void testCreateNetworkAndSubnetwork() throws InterruptedException, Timeou operation.waitFor(); // test get network Network network = compute.getNetwork(networkId.getNetwork()); - managedResourceHelper.addManagedResource(network); + managedResourceCleaner.add(networkId); assertEquals(networkId.getNetwork(), network.getNetworkId().getNetwork()); assertNotNull(network.getGeneratedId()); assertNotNull(network.getCreationTimestamp()); @@ -1445,11 +1468,11 @@ public void testCreateNetworkAndSubnetwork() throws InterruptedException, Timeou SubnetworkId subnetworkId = SubnetworkId.of(REGION, subnetworkName); SubnetworkInfo subnetworkInfo = SubnetworkInfo.of(subnetworkId, networkId, "192.168.0.0/16"); operation = compute.create(subnetworkInfo); -operation.waitFor(); + operation.waitFor(); // test get subnetwork with selected fields Subnetwork subnetwork = compute.getSubnetwork(subnetworkId, Compute.SubnetworkOption.fields(Compute.SubnetworkField.CREATION_TIMESTAMP)); - managedResourceHelper.addManagedResource(subnetwork); + managedResourceCleaner.add(subnetworkId); assertNull(subnetwork.getGeneratedId()); assertEquals(subnetworkId.getSubnetwork(), subnetwork.getSubnetworkId().getSubnetwork()); assertNotNull(subnetwork.getCreationTimestamp()); @@ -1504,8 +1527,10 @@ public void testCreateNetworkAndSubnetwork() throws InterruptedException, Timeou assertEquals(1, count); operation = subnetwork.delete(); operation.waitFor(); + managedResourceCleaner.remove(subnetworkId); operation = compute.deleteNetwork(networkId); operation.waitFor(); + managedResourceCleaner.remove(networkId); assertNull(compute.getSubnetwork(subnetworkId)); assertNull(compute.getNetwork(networkName)); } @@ -1517,7 +1542,7 @@ public void testAggregatedListSubnetworks() throws InterruptedException, Timeout NetworkInfo networkInfo = NetworkInfo.of(networkId, SubnetNetworkConfiguration.of(false)); Operation operation = compute.create(networkInfo); operation.waitFor(); - managedResourceHelper.addManagedResource(networkId); + managedResourceCleaner.add(networkId); String prefix = BASE_RESOURCE_NAME + "list-subnetwork"; String[] regionNames = {"us-central1", "us-east1"}; String[] subnetworkNames = {prefix + "1", prefix + "2"}; @@ -1531,9 +1556,9 @@ public void testAggregatedListSubnetworks() throws InterruptedException, Timeout Operation firstOperation = compute.create(firstSubnetworkInfo); Operation secondOperation = compute.create(secondSubnetworkInfo); firstOperation.waitFor(); - managedResourceHelper.addManagedResource(firstSubnetworkId); + managedResourceCleaner.add(firstSubnetworkId); secondOperation.waitFor(); - managedResourceHelper.addManagedResource(secondSubnetworkId); + managedResourceCleaner.add(secondSubnetworkId); Set regionSet = ImmutableSet.copyOf(regionNames); Set subnetworkSet = ImmutableSet.copyOf(subnetworkNames); Set rangeSet = ImmutableSet.copyOf(ipRanges); @@ -1558,9 +1583,12 @@ public void testAggregatedListSubnetworks() throws InterruptedException, Timeout firstOperation = compute.deleteSubnetwork(firstSubnetworkId); secondOperation = compute.deleteSubnetwork(secondSubnetworkId); firstOperation.waitFor(); + managedResourceCleaner.remove(firstSubnetworkId); secondOperation.waitFor(); + managedResourceCleaner.remove(secondSubnetworkId); operation = compute.deleteNetwork(networkId); operation.waitFor(); + managedResourceCleaner.remove(networkId); assertNull(compute.getNetwork(networkName)); } @@ -1574,12 +1602,10 @@ public void testCreateGetAndDeleteInstance() throws InterruptedException, Timeou Operation operation = compute.create(addressInfo); operation.waitFor(); Address address = compute.getAddress(addressId); - managedResourceHelper.addManagedResource(address); + managedResourceCleaner.add(addressId); // Create an instance InstanceId instanceId = InstanceId.of(ZONE, instanceName); - managedResourceHelper.addManagedResource(instanceId); NetworkId networkId = NetworkId.of("default"); - managedResourceHelper.addManagedResource(networkId); NetworkInterface networkInterface = NetworkInterface.newBuilder(networkId) .setAccessConfigurations(NetworkInterface.AccessConfig.newBuilder() .setName("NAT") @@ -1599,7 +1625,7 @@ public void testCreateGetAndDeleteInstance() throws InterruptedException, Timeou operation.waitFor(); // test get Instance remoteInstance = compute.getInstance(instanceId); - managedResourceHelper.addManagedResource(remoteInstance); + managedResourceCleaner.add(instanceId); assertEquals(instanceName, remoteInstance.getInstanceId().getInstance()); assertEquals(ZONE, remoteInstance.getInstanceId().getZone()); assertEquals(InstanceInfo.Status.RUNNING, remoteInstance.getStatus()); @@ -1651,8 +1677,10 @@ public void testCreateGetAndDeleteInstance() throws InterruptedException, Timeou assertTrue(newSerialPortOutput.contains(serialPortOutput)); operation = remoteInstance.delete(); operation.waitFor(); + managedResourceCleaner.remove(instanceId); assertNull(compute.getInstance(instanceId)); address.delete(); + managedResourceCleaner.remove(addressId); } @Test @@ -1672,7 +1700,7 @@ public void testStartStopAndResetInstance() throws InterruptedException, Timeout operation.waitFor(); Instance remoteInstance = compute.getInstance(instanceId, Compute.InstanceOption.fields(Compute.InstanceField.STATUS)); - managedResourceHelper.addManagedResource(remoteInstance); + managedResourceCleaner.add(instanceId); assertEquals(InstanceInfo.Status.RUNNING, remoteInstance.getStatus()); operation = remoteInstance.stop(); operation.waitFor(); @@ -1690,6 +1718,7 @@ public void testStartStopAndResetInstance() throws InterruptedException, Timeout Compute.InstanceOption.fields(Compute.InstanceField.STATUS)); assertEquals(InstanceInfo.Status.RUNNING, remoteInstance.getStatus()); remoteInstance.delete(); + managedResourceCleaner.remove(instanceId); } @Test @@ -1708,7 +1737,7 @@ public void testSetInstanceProperties() throws InterruptedException, TimeoutExce Operation operation = compute.create(instanceInfo); operation.waitFor(); Instance remoteInstance = compute.getInstance(instanceId); - managedResourceHelper.addManagedResource(remoteInstance); + managedResourceCleaner.add(instanceId); // test set tags List tags = ImmutableList.of("tag1", "tag2"); operation = remoteInstance.setTags(tags); @@ -1737,6 +1766,7 @@ public void testSetInstanceProperties() throws InterruptedException, TimeoutExce remoteInstance = compute.getInstance(instanceId); assertEquals(options, remoteInstance.getSchedulingOptions()); remoteInstance.delete(); + managedResourceCleaner.remove(instanceId); } @Test @@ -1759,13 +1789,14 @@ public void testAttachAndDetachDisk() throws InterruptedException, TimeoutExcept StandardDiskConfiguration.of(DiskTypeId.of(ZONE, "pd-ssd")))); instanceOperation.waitFor(); diskOperation.waitFor(); + managedResourceCleaner.add(diskId); Instance remoteInstance = compute.getInstance(instanceId); // test attach disk instanceOperation = remoteInstance.attachDisk("dev1", AttachedDisk.PersistentDiskConfiguration.newBuilder(diskId).build()); instanceOperation.waitFor(); remoteInstance = compute.getInstance(instanceId); - managedResourceHelper.addManagedResource(remoteInstance); + managedResourceCleaner.add(instanceId); Set deviceSet = ImmutableSet.of("dev0", "dev1"); assertEquals(2, remoteInstance.getAttachedDisks().size()); for (AttachedDisk remoteAttachedDisk : remoteInstance.getAttachedDisks()) { @@ -1788,6 +1819,8 @@ public void testAttachAndDetachDisk() throws InterruptedException, TimeoutExcept assertEquals("dev0", remoteInstance.getAttachedDisks().get(0).getDeviceName()); remoteInstance.delete(); compute.deleteDisk(diskId); + managedResourceCleaner.remove(instanceId); + managedResourceCleaner.remove(diskId); } @Test @@ -1811,9 +1844,9 @@ public void testAddAndRemoveAccessConfig() throws InterruptedException, TimeoutE addressOperation.waitFor(); instanceOperation.waitFor(); Address remoteAddress = compute.getAddress(addressId); - managedResourceHelper.addManagedResource(remoteAddress); + managedResourceCleaner.add(addressId); Instance remoteInstance = compute.getInstance(instanceId); - managedResourceHelper.addManagedResource(remoteInstance); + managedResourceCleaner.add(instanceId); String networkInterfaceName = remoteInstance.getNetworkInterfaces().get(0).getName(); // test add access config NetworkInterface.AccessConfig accessConfig = NetworkInterface.AccessConfig.newBuilder() @@ -1834,5 +1867,7 @@ public void testAddAndRemoveAccessConfig() throws InterruptedException, TimeoutE assertTrue(remoteInstance.getNetworkInterfaces().get(0).getAccessConfigurations().isEmpty()); remoteInstance.delete(); remoteAddress.delete(); + managedResourceCleaner.remove(instanceId); + managedResourceCleaner.remove(addressId); } } From c047cd098a7d6941a31f5c6ef738af5091d32932 Mon Sep 17 00:00:00 2001 From: Neo Wu Date: Mon, 3 Apr 2017 09:15:02 -0700 Subject: [PATCH 3/6] fix copyright header --- .../google/cloud/compute/testing/ManagedResourceCleaner.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ManagedResourceCleaner.java b/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ManagedResourceCleaner.java index 8be31ef54082..6f8dedd8d7c7 100644 --- a/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ManagedResourceCleaner.java +++ b/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ManagedResourceCleaner.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Google Inc. All Rights Reserved. + * Copyright 2017 Google Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. From f04997ec68f2b7e1d659864c967607f0a48758d7 Mon Sep 17 00:00:00 2001 From: Neo Wu Date: Mon, 3 Apr 2017 09:23:36 -0700 Subject: [PATCH 4/6] rename class name --- ...ourceCleaner.java => ResourceCleaner.java} | 36 ++--- .../cloud/compute/it/ITComputeTest.java | 152 +++++++++--------- 2 files changed, 94 insertions(+), 94 deletions(-) rename google-cloud-compute/src/main/java/com/google/cloud/compute/testing/{ManagedResourceCleaner.java => ResourceCleaner.java} (82%) diff --git a/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ManagedResourceCleaner.java b/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ResourceCleaner.java similarity index 82% rename from google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ManagedResourceCleaner.java rename to google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ResourceCleaner.java index 6f8dedd8d7c7..71195f9f1952 100644 --- a/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ManagedResourceCleaner.java +++ b/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ResourceCleaner.java @@ -29,17 +29,17 @@ import java.util.Map; import sun.reflect.generics.reflectiveObjects.NotImplementedException; -public class ManagedResourceCleaner { +public class ResourceCleaner { private final Compute compute; private final Map> resources; - private ManagedResourceCleaner(Compute compute) { + private ResourceCleaner(Compute compute) { this.compute = compute; this.resources = new HashMap<>(); } - public static ManagedResourceCleaner create(Compute compute) { - return new ManagedResourceCleaner(compute); + public static ResourceCleaner create(Compute compute) { + return new ResourceCleaner(compute); } private class ManagedResource { @@ -68,79 +68,79 @@ public void cleanUp() { resources.clear(); } - public ManagedResourceCleaner add(AddressId addressId) { + public ResourceCleaner add(AddressId addressId) { ManagedResource r = new ManagedResource<>(addressId); resources.put(addressId, r); return this; } - public ManagedResourceCleaner remove(AddressId addressId) { + public ResourceCleaner remove(AddressId addressId) { resources.remove(addressId); return this; } - public ManagedResourceCleaner add(DiskId diskId) { + public ResourceCleaner add(DiskId diskId) { ManagedResource r = new ManagedResource<>(diskId); resources.put(diskId, r); return this; } - public ManagedResourceCleaner remove(DiskId diskId) { + public ResourceCleaner remove(DiskId diskId) { resources.remove(diskId); return this; } - public ManagedResourceCleaner add(SnapshotId snapshotId) { + public ResourceCleaner add(SnapshotId snapshotId) { ManagedResource r = new ManagedResource<>(snapshotId); resources.put(snapshotId, r); return this; } - public ManagedResourceCleaner remove(SnapshotId snapshotId) { + public ResourceCleaner remove(SnapshotId snapshotId) { resources.remove(snapshotId); return this; } - public ManagedResourceCleaner add(NetworkId networkId) { + public ResourceCleaner add(NetworkId networkId) { ManagedResource r = new ManagedResource<>(networkId); resources.put(networkId, r); return this; } - public ManagedResourceCleaner remove(NetworkId networkId) { + public ResourceCleaner remove(NetworkId networkId) { resources.remove(networkId); return this; } - public ManagedResourceCleaner add(SubnetworkId subnetworkId) { + public ResourceCleaner add(SubnetworkId subnetworkId) { ManagedResource r = new ManagedResource<>(subnetworkId); resources.put(subnetworkId, r); return this; } - public ManagedResourceCleaner remove(SubnetworkId subnetworkId) { + public ResourceCleaner remove(SubnetworkId subnetworkId) { resources.remove(subnetworkId); return this; } - public ManagedResourceCleaner add(ImageId imageId) { + public ResourceCleaner add(ImageId imageId) { ManagedResource r = new ManagedResource<>(imageId); resources.put(imageId, r); return this; } - public ManagedResourceCleaner remove(ImageId imageId) { + public ResourceCleaner remove(ImageId imageId) { resources.remove(imageId); return this; } - public ManagedResourceCleaner add(InstanceId instanceId) { + public ResourceCleaner add(InstanceId instanceId) { ManagedResource r = new ManagedResource<>(instanceId); resources.put(instanceId, r); return this; } - public ManagedResourceCleaner remove(InstanceId instanceId) { + public ResourceCleaner remove(InstanceId instanceId) { resources.remove(instanceId); return this; } diff --git a/google-cloud-compute/src/test/java/com/google/cloud/compute/it/ITComputeTest.java b/google-cloud-compute/src/test/java/com/google/cloud/compute/it/ITComputeTest.java index 2a9fbd7fc88d..9b27a5f6ea76 100644 --- a/google-cloud-compute/src/test/java/com/google/cloud/compute/it/ITComputeTest.java +++ b/google-cloud-compute/src/test/java/com/google/cloud/compute/it/ITComputeTest.java @@ -73,7 +73,7 @@ import com.google.cloud.compute.SubnetworkInfo; import com.google.cloud.compute.Zone; import com.google.cloud.compute.ZoneOperationId; -import com.google.cloud.compute.testing.ManagedResourceCleaner; +import com.google.cloud.compute.testing.ResourceCleaner; import com.google.cloud.compute.testing.RemoteComputeHelper; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; @@ -101,7 +101,7 @@ public class ITComputeTest { private static final String IMAGE_PROJECT = "debian-cloud"; private static Compute compute; - private static ManagedResourceCleaner managedResourceCleaner; + private static ResourceCleaner resourceCleaner; @Rule @@ -111,12 +111,12 @@ public class ITComputeTest { public static void beforeClass() { RemoteComputeHelper computeHelper = RemoteComputeHelper.create(); compute = computeHelper.getOptions().getService(); - managedResourceCleaner = ManagedResourceCleaner.create(compute); + resourceCleaner = ResourceCleaner.create(compute); } @AfterClass public static void teardown() { - managedResourceCleaner.cleanUp(); + resourceCleaner.cleanUp(); } @Test @@ -697,7 +697,7 @@ public void testCreateGetAndDeleteRegionAddress() throws InterruptedException, T operation.waitFor(); // test get Address remoteAddress = compute.getAddress(addressId); - managedResourceCleaner.add(addressId); + resourceCleaner.add(addressId); assertNotNull(remoteAddress); assertTrue(remoteAddress.getAddressId() instanceof RegionAddressId); assertEquals(REGION, remoteAddress.getAddressId().getRegion()); @@ -717,7 +717,7 @@ public void testCreateGetAndDeleteRegionAddress() throws InterruptedException, T assertNull(remoteAddress.getGeneratedId()); operation = remoteAddress.delete(); operation.waitFor(); - managedResourceCleaner.remove(addressId); + resourceCleaner.remove(addressId); assertNull(compute.getAddress(addressId)); } @@ -730,9 +730,9 @@ public void testListRegionAddresses() throws InterruptedException, TimeoutExcept Operation firstOperation = compute.create(AddressInfo.of(firstAddressId)); Operation secondOperation = compute.create(AddressInfo.of(secondAddressId)); firstOperation.waitFor(); - managedResourceCleaner.add(firstAddressId); + resourceCleaner.add(firstAddressId); secondOperation.waitFor(); - managedResourceCleaner.add(secondAddressId); + resourceCleaner.add(secondAddressId); Set addressSet = ImmutableSet.copyOf(addressNames); // test list Compute.AddressFilter filter = @@ -772,9 +772,9 @@ public void testListRegionAddresses() throws InterruptedException, TimeoutExcept } assertEquals(2, count); compute.deleteAddress(firstAddressId); - managedResourceCleaner.remove(firstAddressId); + resourceCleaner.remove(firstAddressId); compute.deleteAddress(secondAddressId); - managedResourceCleaner.remove(secondAddressId); + resourceCleaner.remove(secondAddressId); } @Test @@ -786,9 +786,9 @@ public void testAggregatedListAddresses() throws InterruptedException, TimeoutEx Operation firstOperation = compute.create(AddressInfo.of(firstAddressId)); Operation secondOperation = compute.create(AddressInfo.of(secondAddressId)); firstOperation.waitFor(); - managedResourceCleaner.add(firstAddressId); + resourceCleaner.add(firstAddressId); secondOperation.waitFor(); - managedResourceCleaner.add(secondAddressId); + resourceCleaner.add(secondAddressId); Set addressSet = ImmutableSet.copyOf(addressNames); Compute.AddressFilter filter = Compute.AddressFilter.equals(Compute.AddressField.NAME, prefix + "\\d"); @@ -807,9 +807,9 @@ public void testAggregatedListAddresses() throws InterruptedException, TimeoutEx } assertEquals(2, count); compute.deleteAddress(firstAddressId); - managedResourceCleaner.remove(firstAddressId); + resourceCleaner.remove(firstAddressId); compute.deleteAddress(secondAddressId); - managedResourceCleaner.remove(secondAddressId); + resourceCleaner.remove(secondAddressId); } @Test @@ -821,7 +821,7 @@ public void testCreateGetAndDeleteGlobalAddress() throws InterruptedException, T operation.waitFor(); // test get Address remoteAddress = compute.getAddress(addressId); - managedResourceCleaner.add(addressId); + resourceCleaner.add(addressId); assertNotNull(remoteAddress); assertTrue(remoteAddress.getAddressId() instanceof GlobalAddressId); assertEquals(addressId.getAddress(), remoteAddress.getAddressId().getAddress()); @@ -839,7 +839,7 @@ public void testCreateGetAndDeleteGlobalAddress() throws InterruptedException, T assertNull(remoteAddress.getGeneratedId()); operation = remoteAddress.delete(); operation.waitFor(); - managedResourceCleaner.remove(addressId); + resourceCleaner.remove(addressId); assertNull(compute.getAddress(addressId)); } @@ -852,9 +852,9 @@ public void testListGlobalAddresses() throws InterruptedException, TimeoutExcept Operation firstOperation = compute.create(AddressInfo.of(firstAddressId)); Operation secondOperation = compute.create(AddressInfo.of(secondAddressId)); firstOperation.waitFor(); - managedResourceCleaner.add(firstAddressId); + resourceCleaner.add(firstAddressId); secondOperation.waitFor(); - managedResourceCleaner.add(secondAddressId); + resourceCleaner.add(secondAddressId); Set addressSet = ImmutableSet.copyOf(addressNames); // test list Compute.AddressFilter filter = @@ -892,9 +892,9 @@ public void testListGlobalAddresses() throws InterruptedException, TimeoutExcept } assertEquals(2, count); compute.deleteAddress(firstAddressId); - managedResourceCleaner.remove(firstAddressId); + resourceCleaner.remove(firstAddressId); compute.deleteAddress(secondAddressId); - managedResourceCleaner.remove(secondAddressId); + resourceCleaner.remove(secondAddressId); } @Test @@ -908,7 +908,7 @@ public void testCreateGetResizeAndDeleteStandardDisk() operation.waitFor(); // test get Disk remoteDisk = compute.getDisk(diskId); - managedResourceCleaner.add(diskId); + resourceCleaner.add(diskId); assertNotNull(remoteDisk); assertEquals(ZONE, remoteDisk.getDiskId().getZone()); assertEquals(diskId.getDisk(), remoteDisk.getDiskId().getDisk()); @@ -939,7 +939,7 @@ public void testCreateGetResizeAndDeleteStandardDisk() assertNull(remoteDisk.getLastDetachTimestamp()); operation = remoteDisk.delete(); operation.waitFor(); - managedResourceCleaner.remove(diskId); + resourceCleaner.remove(diskId); assertNull(compute.getDisk(diskId)); } @@ -952,7 +952,7 @@ public void testCreateGetAndDeleteImageDisk() throws InterruptedException, Timeo operation.waitFor(); // test get Disk remoteDisk = compute.getDisk(diskId); - managedResourceCleaner.add(diskId); + resourceCleaner.add(diskId); assertNotNull(remoteDisk); assertEquals(ZONE, remoteDisk.getDiskId().getZone()); assertEquals(diskId.getDisk(), remoteDisk.getDiskId().getDisk()); @@ -986,7 +986,7 @@ public void testCreateGetAndDeleteImageDisk() throws InterruptedException, Timeo assertNull(remoteDisk.getLastDetachTimestamp()); operation = remoteDisk.delete(); operation.waitFor(); - managedResourceCleaner.remove(diskId); + resourceCleaner.remove(diskId); assertNull(compute.getDisk(diskId)); } @@ -1003,13 +1003,13 @@ public void testCreateGetAndDeleteSnapshotAndSnapshotDisk() Operation operation = compute.create(diskInfo); operation.waitFor(); Disk remoteDisk = compute.getDisk(diskId); - managedResourceCleaner.add(diskId); + resourceCleaner.add(diskId); operation = remoteDisk.createSnapshot(snapshotName); operation.waitFor(); // test get snapshot with selected fields Snapshot snapshot = compute.getSnapshot(snapshotName, Compute.SnapshotOption.fields(Compute.SnapshotField.CREATION_TIMESTAMP)); - managedResourceCleaner.add(snapshot.getSnapshotId()); + resourceCleaner.add(snapshot.getSnapshotId()); assertNull(snapshot.getGeneratedId()); assertNotNull(snapshot.getSnapshotId()); assertNotNull(snapshot.getCreationTimestamp()); @@ -1033,14 +1033,14 @@ public void testCreateGetAndDeleteSnapshotAndSnapshotDisk() assertNotNull(snapshot.getStorageBytes()); assertNotNull(snapshot.getStorageBytesStatus()); remoteDisk.delete(); - managedResourceCleaner.remove(diskId); + resourceCleaner.remove(diskId); diskInfo = DiskInfo.of(snapshotDiskId, SnapshotDiskConfiguration.of(SnapshotId.of(snapshotName))); operation = compute.create(diskInfo); operation.waitFor(); // test get disk remoteDisk = compute.getDisk(snapshotDiskId); - managedResourceCleaner.add(snapshotDiskId); + resourceCleaner.add(snapshotDiskId); assertNotNull(remoteDisk); assertEquals(ZONE, remoteDisk.getDiskId().getZone()); assertEquals(snapshotDiskId.getDisk(), remoteDisk.getDiskId().getDisk()); @@ -1075,11 +1075,11 @@ public void testCreateGetAndDeleteSnapshotAndSnapshotDisk() assertNull(remoteDisk.getLastDetachTimestamp()); operation = remoteDisk.delete(); operation.waitFor(); - managedResourceCleaner.remove(snapshotDiskId); + resourceCleaner.remove(snapshotDiskId); assertNull(compute.getDisk(snapshotDiskId)); operation = snapshot.delete(); operation.waitFor(); - managedResourceCleaner.remove(snapshot.getSnapshotId()); + resourceCleaner.remove(snapshot.getSnapshotId()); assertNull(compute.getSnapshot(snapshotName)); } @@ -1094,9 +1094,9 @@ public void testListDisksAndSnapshots() throws InterruptedException, TimeoutExce Operation firstOperation = compute.create(DiskInfo.of(firstDiskId, configuration)); Operation secondOperation = compute.create(DiskInfo.of(secondDiskId, configuration)); firstOperation.waitFor(); - managedResourceCleaner.add(firstDiskId); + resourceCleaner.add(firstDiskId); secondOperation.waitFor(); - managedResourceCleaner.add(secondDiskId); + resourceCleaner.add(secondDiskId); Set diskSet = ImmutableSet.copyOf(diskNames); // test list disks Compute.DiskFilter diskFilter = @@ -1149,9 +1149,9 @@ public void testListDisksAndSnapshots() throws InterruptedException, TimeoutExce firstOperation = compute.create(SnapshotInfo.of(firstSnapshotId, firstDiskId)); secondOperation = compute.create(SnapshotInfo.of(secondSnapshotId, secondDiskId)); firstOperation.waitFor(); - managedResourceCleaner.add(firstSnapshotId); + resourceCleaner.add(firstSnapshotId); secondOperation.waitFor(); - managedResourceCleaner.add(secondSnapshotId); + resourceCleaner.add(secondSnapshotId); // test list snapshots Compute.SnapshotFilter snapshotFilter = Compute.SnapshotFilter.equals(Compute.SnapshotField.NAME, prefix + "\\d"); @@ -1193,13 +1193,13 @@ public void testListDisksAndSnapshots() throws InterruptedException, TimeoutExce } assertEquals(2, count); compute.deleteDisk(firstDiskId); - managedResourceCleaner.remove(firstDiskId); + resourceCleaner.remove(firstDiskId); compute.deleteDisk(secondDiskId); - managedResourceCleaner.remove(secondDiskId); + resourceCleaner.remove(secondDiskId); compute.deleteSnapshot(firstSnapshotId); - managedResourceCleaner.remove(firstSnapshotId); + resourceCleaner.remove(firstSnapshotId); compute.deleteSnapshot(secondSnapshotId); - managedResourceCleaner.remove(secondSnapshotId); + resourceCleaner.remove(secondSnapshotId); } @Test @@ -1214,9 +1214,9 @@ public void testAggregatedListDisks() throws InterruptedException, TimeoutExcept Operation firstOperation = compute.create(DiskInfo.of(firstDiskId, configuration)); Operation secondOperation = compute.create(DiskInfo.of(secondDiskId, configuration)); firstOperation.waitFor(); - managedResourceCleaner.add(firstDiskId); + resourceCleaner.add(firstDiskId); secondOperation.waitFor(); - managedResourceCleaner.add(secondDiskId); + resourceCleaner.add(secondDiskId); Set zoneSet = ImmutableSet.copyOf(diskZones); Set diskSet = ImmutableSet.copyOf(diskNames); Compute.DiskFilter diskFilter = @@ -1240,9 +1240,9 @@ public void testAggregatedListDisks() throws InterruptedException, TimeoutExcept } assertEquals(2, count); compute.deleteDisk(firstDiskId); - managedResourceCleaner.remove(firstDiskId); + resourceCleaner.remove(firstDiskId); compute.deleteDisk(secondDiskId); - managedResourceCleaner.remove(secondDiskId); + resourceCleaner.remove(secondDiskId); } @Test @@ -1259,11 +1259,11 @@ public void testCreateGetAndDeprecateImage() throws InterruptedException, Timeou ImageInfo imageInfo = ImageInfo.of(imageId, DiskImageConfiguration.of(diskId)); operation = compute.create(imageInfo); operation.waitFor(); - managedResourceCleaner.add(diskId); + resourceCleaner.add(diskId); // test get image with selected fields Image image = compute.getImage(imageId, Compute.ImageOption.fields(Compute.ImageField.CREATION_TIMESTAMP)); - managedResourceCleaner.add(imageId); + resourceCleaner.add(imageId); assertNull(image.getGeneratedId()); assertNotNull(image.getImageId()); assertNotNull(image.getCreationTimestamp()); @@ -1300,10 +1300,10 @@ public void testCreateGetAndDeprecateImage() throws InterruptedException, Timeou image = compute.getImage(imageId); assertEquals(deprecationStatus, image.getDeprecationStatus()); remoteDisk.delete(); - managedResourceCleaner.remove(diskId); + resourceCleaner.remove(diskId); operation = image.delete(); operation.waitFor(); - managedResourceCleaner.remove(imageId); + resourceCleaner.remove(imageId); assertNull(compute.getImage(imageId)); } @@ -1378,7 +1378,7 @@ public void testCreateAndGetNetwork() throws InterruptedException, TimeoutExcept // test get network with selected fields Network network = compute.getNetwork(networkId.getNetwork(), Compute.NetworkOption.fields(Compute.NetworkField.CREATION_TIMESTAMP)); - managedResourceCleaner.add(networkId); + resourceCleaner.add(networkId); assertEquals(networkId.getNetwork(), network.getNetworkId().getNetwork()); assertNull(network.getGeneratedId()); assertNotNull(network.getCreationTimestamp()); @@ -1396,7 +1396,7 @@ public void testCreateAndGetNetwork() throws InterruptedException, TimeoutExcept assertEquals("192.168.0.0/16", remoteConfiguration.getIpRange()); operation = network.delete(); operation.waitFor(); - managedResourceCleaner.remove(networkId); + resourceCleaner.remove(networkId); assertNull(compute.getNetwork(name)); } @@ -1408,7 +1408,7 @@ public void testListNetworks() throws InterruptedException, TimeoutException { NetworkInfo.of(networkId, StandardNetworkConfiguration.of("192.168.0.0/16")); Operation operation = compute.create(networkInfo); operation.waitFor(); - managedResourceCleaner.add(networkId); + resourceCleaner.add(networkId); // test list Compute.NetworkFilter filter = Compute.NetworkFilter.equals(Compute.NetworkField.NAME, name); Page networkPage = compute.listNetworks(Compute.NetworkListOption.filter(filter)); @@ -1444,7 +1444,7 @@ public void testListNetworks() throws InterruptedException, TimeoutException { assertEquals(1, count); operation = compute.deleteNetwork(networkId); operation.waitFor(); - managedResourceCleaner.remove(networkId); + resourceCleaner.remove(networkId); assertNull(compute.getNetwork(name)); } @@ -1457,7 +1457,7 @@ public void testCreateNetworkAndSubnetwork() throws InterruptedException, Timeou operation.waitFor(); // test get network Network network = compute.getNetwork(networkId.getNetwork()); - managedResourceCleaner.add(networkId); + resourceCleaner.add(networkId); assertEquals(networkId.getNetwork(), network.getNetworkId().getNetwork()); assertNotNull(network.getGeneratedId()); assertNotNull(network.getCreationTimestamp()); @@ -1472,7 +1472,7 @@ public void testCreateNetworkAndSubnetwork() throws InterruptedException, Timeou // test get subnetwork with selected fields Subnetwork subnetwork = compute.getSubnetwork(subnetworkId, Compute.SubnetworkOption.fields(Compute.SubnetworkField.CREATION_TIMESTAMP)); - managedResourceCleaner.add(subnetworkId); + resourceCleaner.add(subnetworkId); assertNull(subnetwork.getGeneratedId()); assertEquals(subnetworkId.getSubnetwork(), subnetwork.getSubnetworkId().getSubnetwork()); assertNotNull(subnetwork.getCreationTimestamp()); @@ -1527,10 +1527,10 @@ public void testCreateNetworkAndSubnetwork() throws InterruptedException, Timeou assertEquals(1, count); operation = subnetwork.delete(); operation.waitFor(); - managedResourceCleaner.remove(subnetworkId); + resourceCleaner.remove(subnetworkId); operation = compute.deleteNetwork(networkId); operation.waitFor(); - managedResourceCleaner.remove(networkId); + resourceCleaner.remove(networkId); assertNull(compute.getSubnetwork(subnetworkId)); assertNull(compute.getNetwork(networkName)); } @@ -1542,7 +1542,7 @@ public void testAggregatedListSubnetworks() throws InterruptedException, Timeout NetworkInfo networkInfo = NetworkInfo.of(networkId, SubnetNetworkConfiguration.of(false)); Operation operation = compute.create(networkInfo); operation.waitFor(); - managedResourceCleaner.add(networkId); + resourceCleaner.add(networkId); String prefix = BASE_RESOURCE_NAME + "list-subnetwork"; String[] regionNames = {"us-central1", "us-east1"}; String[] subnetworkNames = {prefix + "1", prefix + "2"}; @@ -1556,9 +1556,9 @@ public void testAggregatedListSubnetworks() throws InterruptedException, Timeout Operation firstOperation = compute.create(firstSubnetworkInfo); Operation secondOperation = compute.create(secondSubnetworkInfo); firstOperation.waitFor(); - managedResourceCleaner.add(firstSubnetworkId); + resourceCleaner.add(firstSubnetworkId); secondOperation.waitFor(); - managedResourceCleaner.add(secondSubnetworkId); + resourceCleaner.add(secondSubnetworkId); Set regionSet = ImmutableSet.copyOf(regionNames); Set subnetworkSet = ImmutableSet.copyOf(subnetworkNames); Set rangeSet = ImmutableSet.copyOf(ipRanges); @@ -1583,12 +1583,12 @@ public void testAggregatedListSubnetworks() throws InterruptedException, Timeout firstOperation = compute.deleteSubnetwork(firstSubnetworkId); secondOperation = compute.deleteSubnetwork(secondSubnetworkId); firstOperation.waitFor(); - managedResourceCleaner.remove(firstSubnetworkId); + resourceCleaner.remove(firstSubnetworkId); secondOperation.waitFor(); - managedResourceCleaner.remove(secondSubnetworkId); + resourceCleaner.remove(secondSubnetworkId); operation = compute.deleteNetwork(networkId); operation.waitFor(); - managedResourceCleaner.remove(networkId); + resourceCleaner.remove(networkId); assertNull(compute.getNetwork(networkName)); } @@ -1602,7 +1602,7 @@ public void testCreateGetAndDeleteInstance() throws InterruptedException, Timeou Operation operation = compute.create(addressInfo); operation.waitFor(); Address address = compute.getAddress(addressId); - managedResourceCleaner.add(addressId); + resourceCleaner.add(addressId); // Create an instance InstanceId instanceId = InstanceId.of(ZONE, instanceName); NetworkId networkId = NetworkId.of("default"); @@ -1625,7 +1625,7 @@ public void testCreateGetAndDeleteInstance() throws InterruptedException, Timeou operation.waitFor(); // test get Instance remoteInstance = compute.getInstance(instanceId); - managedResourceCleaner.add(instanceId); + resourceCleaner.add(instanceId); assertEquals(instanceName, remoteInstance.getInstanceId().getInstance()); assertEquals(ZONE, remoteInstance.getInstanceId().getZone()); assertEquals(InstanceInfo.Status.RUNNING, remoteInstance.getStatus()); @@ -1677,10 +1677,10 @@ public void testCreateGetAndDeleteInstance() throws InterruptedException, Timeou assertTrue(newSerialPortOutput.contains(serialPortOutput)); operation = remoteInstance.delete(); operation.waitFor(); - managedResourceCleaner.remove(instanceId); + resourceCleaner.remove(instanceId); assertNull(compute.getInstance(instanceId)); address.delete(); - managedResourceCleaner.remove(addressId); + resourceCleaner.remove(addressId); } @Test @@ -1700,7 +1700,7 @@ public void testStartStopAndResetInstance() throws InterruptedException, Timeout operation.waitFor(); Instance remoteInstance = compute.getInstance(instanceId, Compute.InstanceOption.fields(Compute.InstanceField.STATUS)); - managedResourceCleaner.add(instanceId); + resourceCleaner.add(instanceId); assertEquals(InstanceInfo.Status.RUNNING, remoteInstance.getStatus()); operation = remoteInstance.stop(); operation.waitFor(); @@ -1718,7 +1718,7 @@ public void testStartStopAndResetInstance() throws InterruptedException, Timeout Compute.InstanceOption.fields(Compute.InstanceField.STATUS)); assertEquals(InstanceInfo.Status.RUNNING, remoteInstance.getStatus()); remoteInstance.delete(); - managedResourceCleaner.remove(instanceId); + resourceCleaner.remove(instanceId); } @Test @@ -1737,7 +1737,7 @@ public void testSetInstanceProperties() throws InterruptedException, TimeoutExce Operation operation = compute.create(instanceInfo); operation.waitFor(); Instance remoteInstance = compute.getInstance(instanceId); - managedResourceCleaner.add(instanceId); + resourceCleaner.add(instanceId); // test set tags List tags = ImmutableList.of("tag1", "tag2"); operation = remoteInstance.setTags(tags); @@ -1766,7 +1766,7 @@ public void testSetInstanceProperties() throws InterruptedException, TimeoutExce remoteInstance = compute.getInstance(instanceId); assertEquals(options, remoteInstance.getSchedulingOptions()); remoteInstance.delete(); - managedResourceCleaner.remove(instanceId); + resourceCleaner.remove(instanceId); } @Test @@ -1789,14 +1789,14 @@ public void testAttachAndDetachDisk() throws InterruptedException, TimeoutExcept StandardDiskConfiguration.of(DiskTypeId.of(ZONE, "pd-ssd")))); instanceOperation.waitFor(); diskOperation.waitFor(); - managedResourceCleaner.add(diskId); + resourceCleaner.add(diskId); Instance remoteInstance = compute.getInstance(instanceId); // test attach disk instanceOperation = remoteInstance.attachDisk("dev1", AttachedDisk.PersistentDiskConfiguration.newBuilder(diskId).build()); instanceOperation.waitFor(); remoteInstance = compute.getInstance(instanceId); - managedResourceCleaner.add(instanceId); + resourceCleaner.add(instanceId); Set deviceSet = ImmutableSet.of("dev0", "dev1"); assertEquals(2, remoteInstance.getAttachedDisks().size()); for (AttachedDisk remoteAttachedDisk : remoteInstance.getAttachedDisks()) { @@ -1819,8 +1819,8 @@ public void testAttachAndDetachDisk() throws InterruptedException, TimeoutExcept assertEquals("dev0", remoteInstance.getAttachedDisks().get(0).getDeviceName()); remoteInstance.delete(); compute.deleteDisk(diskId); - managedResourceCleaner.remove(instanceId); - managedResourceCleaner.remove(diskId); + resourceCleaner.remove(instanceId); + resourceCleaner.remove(diskId); } @Test @@ -1844,9 +1844,9 @@ public void testAddAndRemoveAccessConfig() throws InterruptedException, TimeoutE addressOperation.waitFor(); instanceOperation.waitFor(); Address remoteAddress = compute.getAddress(addressId); - managedResourceCleaner.add(addressId); + resourceCleaner.add(addressId); Instance remoteInstance = compute.getInstance(instanceId); - managedResourceCleaner.add(instanceId); + resourceCleaner.add(instanceId); String networkInterfaceName = remoteInstance.getNetworkInterfaces().get(0).getName(); // test add access config NetworkInterface.AccessConfig accessConfig = NetworkInterface.AccessConfig.newBuilder() @@ -1867,7 +1867,7 @@ public void testAddAndRemoveAccessConfig() throws InterruptedException, TimeoutE assertTrue(remoteInstance.getNetworkInterfaces().get(0).getAccessConfigurations().isEmpty()); remoteInstance.delete(); remoteAddress.delete(); - managedResourceCleaner.remove(instanceId); - managedResourceCleaner.remove(addressId); + resourceCleaner.remove(instanceId); + resourceCleaner.remove(addressId); } } From c05b45b1815eb6585dfa76bb8fc1235eb88fbffe Mon Sep 17 00:00:00 2001 From: Neo Wu Date: Mon, 3 Apr 2017 15:48:28 -0700 Subject: [PATCH 5/6] modify remove function, pass delete function to each add method --- .../compute/testing/ResourceCleaner.java | 187 ++++++++---------- .../cloud/compute/it/ITComputeTest.java | 38 ---- 2 files changed, 78 insertions(+), 147 deletions(-) diff --git a/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ResourceCleaner.java b/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ResourceCleaner.java index 71195f9f1952..ffc72b43ef0a 100644 --- a/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ResourceCleaner.java +++ b/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ResourceCleaner.java @@ -27,7 +27,7 @@ import com.google.common.base.Function; import java.util.HashMap; import java.util.Map; -import sun.reflect.generics.reflectiveObjects.NotImplementedException; +import java.util.NoSuchElementException; public class ResourceCleaner { private final Compute compute; @@ -46,13 +46,9 @@ private class ManagedResource { final T res; Function func; - private ManagedResource(T res) { + private ManagedResource(T res, Function func) { this.res = res; - - @SuppressWarnings("unchecked") - Function localFunc = (Function) getDeleteMethod(res); - - this.func = localFunc; + this.func = func; } public void delete() { @@ -69,142 +65,115 @@ public void cleanUp() { } public ResourceCleaner add(AddressId addressId) { - ManagedResource r = new ManagedResource<>(addressId); + ManagedResource r = + new ManagedResource<>( + addressId, + new Function() { + @Override + public Void apply(AddressId addressId) { + compute.deleteAddress(addressId); + return null; + } + }); resources.put(addressId, r); return this; } - public ResourceCleaner remove(AddressId addressId) { - resources.remove(addressId); - return this; - } - public ResourceCleaner add(DiskId diskId) { - ManagedResource r = new ManagedResource<>(diskId); + ManagedResource r = + new ManagedResource<>( + diskId, + new Function() { + @Override + public Void apply(DiskId diskId) { + compute.deleteDisk(diskId); + return null; + } + }); resources.put(diskId, r); return this; } - public ResourceCleaner remove(DiskId diskId) { - resources.remove(diskId); - return this; - } - public ResourceCleaner add(SnapshotId snapshotId) { - ManagedResource r = new ManagedResource<>(snapshotId); + ManagedResource r = + new ManagedResource<>( + snapshotId, + new Function() { + @Override + public Void apply(SnapshotId snapshotId) { + compute.deleteSnapshot(snapshotId); + return null; + } + }); resources.put(snapshotId, r); return this; } - public ResourceCleaner remove(SnapshotId snapshotId) { - resources.remove(snapshotId); - return this; - } - public ResourceCleaner add(NetworkId networkId) { - ManagedResource r = new ManagedResource<>(networkId); + ManagedResource r = + new ManagedResource<>( + networkId, + new Function() { + @Override + public Void apply(NetworkId networkId) { + compute.deleteNetwork(networkId); + return null; + } + }); resources.put(networkId, r); return this; } - public ResourceCleaner remove(NetworkId networkId) { - resources.remove(networkId); - return this; - } - public ResourceCleaner add(SubnetworkId subnetworkId) { - ManagedResource r = new ManagedResource<>(subnetworkId); + ManagedResource r = + new ManagedResource<>( + subnetworkId, + new Function() { + @Override + public Void apply(SubnetworkId subnetworkId) { + compute.deleteSubnetwork(subnetworkId); + return null; + } + }); resources.put(subnetworkId, r); return this; } - public ResourceCleaner remove(SubnetworkId subnetworkId) { - resources.remove(subnetworkId); - return this; - } - public ResourceCleaner add(ImageId imageId) { - ManagedResource r = new ManagedResource<>(imageId); + ManagedResource r = + new ManagedResource<>( + imageId, + new Function() { + @Override + public Void apply(ImageId imageId) { + compute.deleteImage(imageId); + return null; + } + }); resources.put(imageId, r); return this; } - public ResourceCleaner remove(ImageId imageId) { - resources.remove(imageId); - return this; - } - public ResourceCleaner add(InstanceId instanceId) { - ManagedResource r = new ManagedResource<>(instanceId); + ManagedResource r = + new ManagedResource<>( + instanceId, + new Function() { + @Override + public Void apply(InstanceId instanceId) { + compute.deleteInstance(instanceId); + return null; + } + }); resources.put(instanceId, r); return this; } - public ResourceCleaner remove(InstanceId instanceId) { - resources.remove(instanceId); - return this; - } - - private Function getDeleteMethod(T res) { - - if (res instanceof AddressId) { - return new Function() { - @Override - public Void apply(AddressId addressId) { - compute.deleteAddress(addressId); - return null; - } - }; - } else if (res instanceof DiskId) { - return new Function() { - @Override - public Void apply(DiskId diskId) { - compute.deleteDisk(diskId); - return null; - } - }; - } else if (res instanceof SnapshotId) { - return new Function() { - @Override - public Void apply(SnapshotId snapshotId) { - compute.deleteSnapshot(snapshotId); - return null; - } - }; - } else if (res instanceof NetworkId) { - return new Function() { - @Override - public Void apply(NetworkId networkId) { - compute.deleteNetwork(networkId); - return null; - } - }; - } else if (res instanceof SubnetworkId) { - return new Function() { - @Override - public Void apply(SubnetworkId subnetworkId) { - compute.deleteSubnetwork(subnetworkId); - return null; - } - }; - } else if (res instanceof ImageId) { - return new Function() { - @Override - public Void apply(ImageId imageId) { - compute.deleteImage(imageId); - return null; - } - }; - } else if (res instanceof InstanceId) { - return new Function() { - @Override - public Void apply(InstanceId instanceId) { - compute.deleteInstance(instanceId); - return null; - } - }; - } else { - throw new NotImplementedException(); + public ResourceCleaner remove(T resourceId) { + if (!resources.containsKey(resourceId)) { + throw new NoSuchElementException(resourceId + " has not been added to managed resources"); } + resources.remove(resourceId); + return this; } } diff --git a/google-cloud-compute/src/test/java/com/google/cloud/compute/it/ITComputeTest.java b/google-cloud-compute/src/test/java/com/google/cloud/compute/it/ITComputeTest.java index 9b27a5f6ea76..b2f344d45879 100644 --- a/google-cloud-compute/src/test/java/com/google/cloud/compute/it/ITComputeTest.java +++ b/google-cloud-compute/src/test/java/com/google/cloud/compute/it/ITComputeTest.java @@ -771,10 +771,6 @@ public void testListRegionAddresses() throws InterruptedException, TimeoutExcept count++; } assertEquals(2, count); - compute.deleteAddress(firstAddressId); - resourceCleaner.remove(firstAddressId); - compute.deleteAddress(secondAddressId); - resourceCleaner.remove(secondAddressId); } @Test @@ -806,10 +802,6 @@ public void testAggregatedListAddresses() throws InterruptedException, TimeoutEx count++; } assertEquals(2, count); - compute.deleteAddress(firstAddressId); - resourceCleaner.remove(firstAddressId); - compute.deleteAddress(secondAddressId); - resourceCleaner.remove(secondAddressId); } @Test @@ -891,10 +883,6 @@ public void testListGlobalAddresses() throws InterruptedException, TimeoutExcept count++; } assertEquals(2, count); - compute.deleteAddress(firstAddressId); - resourceCleaner.remove(firstAddressId); - compute.deleteAddress(secondAddressId); - resourceCleaner.remove(secondAddressId); } @Test @@ -1192,14 +1180,6 @@ public void testListDisksAndSnapshots() throws InterruptedException, TimeoutExce count++; } assertEquals(2, count); - compute.deleteDisk(firstDiskId); - resourceCleaner.remove(firstDiskId); - compute.deleteDisk(secondDiskId); - resourceCleaner.remove(secondDiskId); - compute.deleteSnapshot(firstSnapshotId); - resourceCleaner.remove(firstSnapshotId); - compute.deleteSnapshot(secondSnapshotId); - resourceCleaner.remove(secondSnapshotId); } @Test @@ -1239,10 +1219,6 @@ public void testAggregatedListDisks() throws InterruptedException, TimeoutExcept count++; } assertEquals(2, count); - compute.deleteDisk(firstDiskId); - resourceCleaner.remove(firstDiskId); - compute.deleteDisk(secondDiskId); - resourceCleaner.remove(secondDiskId); } @Test @@ -1679,8 +1655,6 @@ public void testCreateGetAndDeleteInstance() throws InterruptedException, Timeou operation.waitFor(); resourceCleaner.remove(instanceId); assertNull(compute.getInstance(instanceId)); - address.delete(); - resourceCleaner.remove(addressId); } @Test @@ -1717,8 +1691,6 @@ public void testStartStopAndResetInstance() throws InterruptedException, Timeout remoteInstance = compute.getInstance(instanceId, Compute.InstanceOption.fields(Compute.InstanceField.STATUS)); assertEquals(InstanceInfo.Status.RUNNING, remoteInstance.getStatus()); - remoteInstance.delete(); - resourceCleaner.remove(instanceId); } @Test @@ -1765,8 +1737,6 @@ public void testSetInstanceProperties() throws InterruptedException, TimeoutExce operation.waitFor(); remoteInstance = compute.getInstance(instanceId); assertEquals(options, remoteInstance.getSchedulingOptions()); - remoteInstance.delete(); - resourceCleaner.remove(instanceId); } @Test @@ -1817,10 +1787,6 @@ public void testAttachAndDetachDisk() throws InterruptedException, TimeoutExcept remoteInstance = compute.getInstance(instanceId); assertEquals(1, remoteInstance.getAttachedDisks().size()); assertEquals("dev0", remoteInstance.getAttachedDisks().get(0).getDeviceName()); - remoteInstance.delete(); - compute.deleteDisk(diskId); - resourceCleaner.remove(instanceId); - resourceCleaner.remove(diskId); } @Test @@ -1865,9 +1831,5 @@ public void testAddAndRemoveAccessConfig() throws InterruptedException, TimeoutE instanceOperation.waitFor(); remoteInstance = compute.getInstance(instanceId); assertTrue(remoteInstance.getNetworkInterfaces().get(0).getAccessConfigurations().isEmpty()); - remoteInstance.delete(); - remoteAddress.delete(); - resourceCleaner.remove(instanceId); - resourceCleaner.remove(addressId); } } From 8cf9f8af883ec250044372b0a3559042c83ffcc5 Mon Sep 17 00:00:00 2001 From: Neo Wu Date: Mon, 3 Apr 2017 22:06:11 -0700 Subject: [PATCH 6/6] address comments --- .../compute/testing/ResourceCleaner.java | 36 ++++++++----------- .../cloud/compute/it/ITComputeTest.java | 2 +- 2 files changed, 15 insertions(+), 23 deletions(-) diff --git a/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ResourceCleaner.java b/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ResourceCleaner.java index ffc72b43ef0a..df0f8682ffe0 100644 --- a/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ResourceCleaner.java +++ b/google-cloud-compute/src/main/java/com/google/cloud/compute/testing/ResourceCleaner.java @@ -43,28 +43,27 @@ public static ResourceCleaner create(Compute compute) { } private class ManagedResource { - final T res; - Function func; + final T resourceId; + Function deleteFunc; - private ManagedResource(T res, Function func) { - this.res = res; - this.func = func; + private ManagedResource(T resourceId, Function deleteFunc) { + this.resourceId = resourceId; + this.deleteFunc = deleteFunc; } public void delete() { - func.apply(res); + deleteFunc.apply(resourceId); } } public void cleanUp() { for (Map.Entry> r : resources.entrySet()) { - System.out.println("Clean up compute engine resource: " + r.getKey().toString()); r.getValue().delete(); } resources.clear(); } - public ResourceCleaner add(AddressId addressId) { + public void add(AddressId addressId) { ManagedResource r = new ManagedResource<>( addressId, @@ -76,10 +75,9 @@ public Void apply(AddressId addressId) { } }); resources.put(addressId, r); - return this; } - public ResourceCleaner add(DiskId diskId) { + public void add(DiskId diskId) { ManagedResource r = new ManagedResource<>( diskId, @@ -91,10 +89,9 @@ public Void apply(DiskId diskId) { } }); resources.put(diskId, r); - return this; } - public ResourceCleaner add(SnapshotId snapshotId) { + public void add(SnapshotId snapshotId) { ManagedResource r = new ManagedResource<>( snapshotId, @@ -106,10 +103,9 @@ public Void apply(SnapshotId snapshotId) { } }); resources.put(snapshotId, r); - return this; } - public ResourceCleaner add(NetworkId networkId) { + public void add(NetworkId networkId) { ManagedResource r = new ManagedResource<>( networkId, @@ -121,10 +117,9 @@ public Void apply(NetworkId networkId) { } }); resources.put(networkId, r); - return this; } - public ResourceCleaner add(SubnetworkId subnetworkId) { + public void add(SubnetworkId subnetworkId) { ManagedResource r = new ManagedResource<>( subnetworkId, @@ -136,10 +131,9 @@ public Void apply(SubnetworkId subnetworkId) { } }); resources.put(subnetworkId, r); - return this; } - public ResourceCleaner add(ImageId imageId) { + public void add(ImageId imageId) { ManagedResource r = new ManagedResource<>( imageId, @@ -151,10 +145,9 @@ public Void apply(ImageId imageId) { } }); resources.put(imageId, r); - return this; } - public ResourceCleaner add(InstanceId instanceId) { + public void add(InstanceId instanceId) { ManagedResource r = new ManagedResource<>( instanceId, @@ -166,10 +159,9 @@ public Void apply(InstanceId instanceId) { } }); resources.put(instanceId, r); - return this; } - public ResourceCleaner remove(T resourceId) { + public ResourceCleaner remove(Object resourceId) { if (!resources.containsKey(resourceId)) { throw new NoSuchElementException(resourceId + " has not been added to managed resources"); } diff --git a/google-cloud-compute/src/test/java/com/google/cloud/compute/it/ITComputeTest.java b/google-cloud-compute/src/test/java/com/google/cloud/compute/it/ITComputeTest.java index b2f344d45879..18c576f99b37 100644 --- a/google-cloud-compute/src/test/java/com/google/cloud/compute/it/ITComputeTest.java +++ b/google-cloud-compute/src/test/java/com/google/cloud/compute/it/ITComputeTest.java @@ -115,7 +115,7 @@ public static void beforeClass() { } @AfterClass - public static void teardown() { + public static void tearDown() { resourceCleaner.cleanUp(); }