Repository: jclouds-labs
Updated Branches:
  refs/heads/master e8c45302e -> c458bafdf


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/c458bafd/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/SubnetApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/SubnetApiLiveTest.java
 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/SubnetApiLiveTest.java
index 9eaf990..8d1d505 100644
--- 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/SubnetApiLiveTest.java
+++ 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/SubnetApiLiveTest.java
@@ -16,89 +16,87 @@
  */
 package org.jclouds.azurecompute.arm.features;
 
-import org.jclouds.azurecompute.arm.domain.Subnet;
+import java.util.List;
 
+import org.jclouds.azurecompute.arm.domain.Subnet;
 import org.jclouds.azurecompute.arm.domain.VirtualNetwork;
 import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest;
-
+import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-import java.util.List;
-
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
 
 @Test(groups = "live", singleThreaded = true)
 public class SubnetApiLiveTest extends BaseAzureComputeApiLiveTest {
 
-   private final String subscriptionid = "subscriptionid";
-   private String resourcegroup;
+   private String resourceGroupName;
+   private String virtualNetworkName;
+   private String subnetName;
 
    @BeforeClass
    @Override
    public void setup() {
       super.setup();
-      resourcegroup = getResourceGroupName();
+      resourceGroupName = String.format("rg-%s-%s", 
this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));
+      assertNotNull(createResourceGroup(resourceGroupName));
+      virtualNetworkName = String.format("vn-%s-%s", 
this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));
+      subnetName = "jclouds-" + RAND;
 
       // Subnets belong to a virtual network so that needs to be created first
       // VN will be deleted when resource group is deleted
-      VirtualNetwork vn = getOrCreateVirtualNetwork(VIRTUAL_NETWORK_NAME);
+      VirtualNetwork vn = createDefaultVirtualNetwork(resourceGroupName, 
virtualNetworkName, "10.2.0.0/16", LOCATION);
       assertNotNull(vn);
    }
 
-   @Test(groups = "live")
-   public void deleteSubnetResourceDoesNotExist() {
-
-      final SubnetApi subnetApi = api.getSubnetApi(resourcegroup, 
VIRTUAL_NETWORK_NAME);
-
-      boolean status = subnetApi.delete(DEFAULT_SUBNET_NAME);
-      assertFalse(status);
+   @AfterClass
+   @Override
+   protected void tearDown() {
+      super.tearDown();
+      deleteResourceGroup(resourceGroupName);
+   }
 
+   @Test
+   public void deleteSubnetResourceDoesNotExist() {
+      assertFalse(api().delete(subnetName));
    }
 
-   @Test(groups = "live", dependsOnMethods = 
"deleteSubnetResourceDoesNotExist")
+   @Test(dependsOnMethods = "deleteSubnetResourceDoesNotExist")
    public void createSubnet() {
-
-      final SubnetApi subnetApi = api.getSubnetApi(resourcegroup, 
VIRTUAL_NETWORK_NAME);
-
       //Create properties object
       //addressPrefix must match Virtual network address space!
-      Subnet.SubnetProperties properties = 
Subnet.SubnetProperties.builder().addressPrefix(DEFAULT_SUBNET_ADDRESS_SPACE).build();
+      Subnet.SubnetProperties properties = 
Subnet.SubnetProperties.builder().addressPrefix("10.2.0.0/23").build();
 
-      Subnet subnet = subnetApi.createOrUpdate(DEFAULT_SUBNET_NAME, 
properties);
+      Subnet subnet = api().createOrUpdate(subnetName, properties);
 
-      assertEquals(subnet.name(), DEFAULT_SUBNET_NAME);
-      assertEquals(subnet.properties().addressPrefix(), 
DEFAULT_SUBNET_ADDRESS_SPACE);
+      assertEquals(subnet.name(), subnetName);
+      assertEquals(subnet.properties().addressPrefix(), "10.2.0.0/23");
    }
 
-   @Test(groups = "live", dependsOnMethods = "createSubnet")
+   @Test(dependsOnMethods = "createSubnet")
    public void getSubnet() {
-
-      final SubnetApi subnetApi = api.getSubnetApi(resourcegroup, 
VIRTUAL_NETWORK_NAME);
-      Subnet subnet = subnetApi.get(DEFAULT_SUBNET_NAME);
-
+      Subnet subnet = api().get(subnetName);
       assertNotNull(subnet.name());
       assertNotNull(subnet.properties().addressPrefix());
    }
 
-   @Test(groups = "live", dependsOnMethods = "createSubnet")
+   @Test(dependsOnMethods = "createSubnet")
    public void listSubnets() {
-
-      final SubnetApi subnetApi = api.getSubnetApi(resourcegroup, 
VIRTUAL_NETWORK_NAME);
-      List<Subnet> subnets = subnetApi.list();
-
+      List<Subnet> subnets = api().list();
       assertTrue(subnets.size() > 0);
    }
 
-   @Test(groups = "live", dependsOnMethods = {"listSubnets", "getSubnet"}, 
alwaysRun = true)
+   @Test(dependsOnMethods = {"listSubnets", "getSubnet"}, alwaysRun = true)
    public void deleteSubnet() {
-
-      final SubnetApi subnetApi = api.getSubnetApi(resourcegroup, 
VIRTUAL_NETWORK_NAME);
-      boolean status = subnetApi.delete(DEFAULT_SUBNET_NAME);
+      boolean status = api().delete(subnetName);
       assertTrue(status);
    }
 
+   private SubnetApi api() {
+      return api.getSubnetApi(resourceGroupName, virtualNetworkName);
+   }
+
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/c458bafd/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/TemplateToDeploymentTemplateLiveTest.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/TemplateToDeploymentTemplateLiveTest.java
 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/TemplateToDeploymentTemplateLiveTest.java
index 12d6255..3b87663 100644
--- 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/TemplateToDeploymentTemplateLiveTest.java
+++ 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/TemplateToDeploymentTemplateLiveTest.java
@@ -16,7 +16,8 @@
  */
 package org.jclouds.azurecompute.arm.features;
 
-import com.google.common.net.UrlEscapers;
+import java.net.URI;
+
 import org.jclouds.azurecompute.arm.compute.options.AzureTemplateOptions;
 import org.jclouds.azurecompute.arm.domain.Deployment;
 import org.jclouds.azurecompute.arm.domain.DeploymentBody;
@@ -37,9 +38,12 @@ import org.jclouds.compute.options.TemplateOptions;
 import org.jclouds.domain.Location;
 import org.jclouds.domain.LocationBuilder;
 import org.jclouds.domain.LocationScope;
+import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
+import com.google.common.net.UrlEscapers;
+
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertTrue;
 
@@ -48,30 +52,42 @@ public class TemplateToDeploymentTemplateLiveTest extends 
BaseAzureComputeApiLiv
 
    private int maxTestDuration = 400;
    private int pollingInterval = 3; // how frequently to poll for create status
-   private String resourceGroup;
+   private String resourceGroupName;
    private String deploymentName;
    private String vnetName;
    private String subnetId;
+   private String virtualNetworkName;
 
    @BeforeClass
    @Override
    public void setup() {
       super.setup();
-      resourceGroup = getResourceGroupName();
+      resourceGroupName = String.format("rg-%s-%s", 
this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));
+      assertNotNull(createResourceGroup(resourceGroupName));
+      virtualNetworkName = String.format("vn-%s-%s", 
this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));
 
       //Subnets belong to a virtual network so that needs to be created first
-      VirtualNetwork vn = getOrCreateVirtualNetwork(VIRTUAL_NETWORK_NAME);
+      VirtualNetwork vn = createDefaultVirtualNetwork(resourceGroupName, 
virtualNetworkName, "10.2.0.0/16", LOCATION);
       assertNotNull(vn);
       vnetName = vn.name();
 
       //Subnet needs to be up & running before NIC can be created
-      Subnet subnet = getOrCreateSubnet(DEFAULT_SUBNET_NAME, 
VIRTUAL_NETWORK_NAME);
+      String subnetName = String.format("s-%s-%s", 
this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));
+      Subnet subnet = createDefaultSubnet(resourceGroupName, subnetName, 
virtualNetworkName, "10.2.0.0/23");
       assertNotNull(subnet);
       assertNotNull(subnet.id());
       subnetId = subnet.id();
    }
 
-   @Test(groups = "live")
+   @AfterClass
+   @Override
+   protected void tearDown() {
+      super.tearDown();
+      URI uri = deleteResourceGroup(resourceGroupName);
+      assertResourceDeleted(uri);
+   }
+
+   @Test
    public void testValidateDeploymentTemplateLinuxNodeWithOptions() {
       Long now = System.currentTimeMillis();
       deploymentName = "jc" + now;
@@ -96,7 +112,7 @@ public class TemplateToDeploymentTemplateLiveTest extends 
BaseAzureComputeApiLiv
       assertNotNull(deployment);
    }
 
-   @Test(groups = "live")
+   @Test
    public void testValidateDeploymentTemplateLinuxNode() {
       Long now = System.currentTimeMillis();
       deploymentName = "jc" + now;
@@ -115,7 +131,7 @@ public class TemplateToDeploymentTemplateLiveTest extends 
BaseAzureComputeApiLiv
       assertNotNull(deployment);
    }
 
-   @Test(groups = "live")
+   @Test
    public void testValidateDeploymentTemplateWithCustomOptions() {
       Long now = System.currentTimeMillis();
       deploymentName = "jc" + now;
@@ -143,7 +159,7 @@ public class TemplateToDeploymentTemplateLiveTest extends 
BaseAzureComputeApiLiv
       assertNotNull(deployment);
    }
 
-   @Test(groups = "live")
+   @Test
    public void testValidateDeploymentTemplateLinuxNodeWithSSH() {
       Long now = System.currentTimeMillis();
       deploymentName = "jc" + now;
@@ -168,7 +184,7 @@ public class TemplateToDeploymentTemplateLiveTest extends 
BaseAzureComputeApiLiv
       assertNotNull(deployment);
    }
 
-   @Test(groups = "live")
+   @Test
    public void testCreateDeploymentTemplateLinuxNode() {
       Long now = System.currentTimeMillis();
       deploymentName = "jc" + now;
@@ -249,17 +265,17 @@ public class TemplateToDeploymentTemplateLiveTest extends 
BaseAzureComputeApiLiv
       options.subnetId(subnetId);
 
       Template template = getTemplate(options);
-      DeploymentTemplateBuilder templateBuilder = 
api.deploymentTemplateFactory().create(resourceGroup, deploymentName, template);
+      DeploymentTemplateBuilder templateBuilder = 
api.deploymentTemplateFactory().create(resourceGroupName, deploymentName, 
template);
       return templateBuilder;
    }
 
    private DeploymentTemplateBuilder 
getDeploymentTemplateBuilderWithOptions(TemplateOptions options) {
       Template template = getTemplate(options);
-      DeploymentTemplateBuilder templateBuilder = 
api.deploymentTemplateFactory().create(resourceGroup, deploymentName, template);
+      DeploymentTemplateBuilder templateBuilder = 
api.deploymentTemplateFactory().create(resourceGroupName, deploymentName, 
template);
       return templateBuilder;
    }
 
    private DeploymentApi api() {
-      return api.getDeploymentApi(resourceGroup);
+      return api.getDeploymentApi(resourceGroupName);
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/c458bafd/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VMSizeApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VMSizeApiLiveTest.java
 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VMSizeApiLiveTest.java
index fdd6ce9..90e258b 100644
--- 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VMSizeApiLiveTest.java
+++ 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VMSizeApiLiveTest.java
@@ -35,6 +35,6 @@ public class VMSizeApiLiveTest extends 
BaseAzureComputeApiLiveTest {
    }
 
    private VMSizeApi api() {
-      return api.getVMSizeApi(getLocation());
+      return api.getVMSizeApi(LOCATION);
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/c458bafd/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiLiveTest.java
 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiLiveTest.java
index 5271e2a..2702370 100644
--- 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiLiveTest.java
+++ 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualMachineApiLiveTest.java
@@ -16,105 +16,113 @@
  */
 package org.jclouds.azurecompute.arm.features;
 
-import com.google.common.base.Predicate;
-import com.google.gson.internal.LinkedTreeMap;
-import com.google.common.collect.Iterables;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
 import org.jclouds.azurecompute.arm.domain.DataDisk;
 import org.jclouds.azurecompute.arm.domain.DiagnosticsProfile;
 import org.jclouds.azurecompute.arm.domain.HardwareProfile;
 import org.jclouds.azurecompute.arm.domain.IdReference;
 import org.jclouds.azurecompute.arm.domain.ImageReference;
+import org.jclouds.azurecompute.arm.domain.IpConfiguration;
+import org.jclouds.azurecompute.arm.domain.IpConfigurationProperties;
 import org.jclouds.azurecompute.arm.domain.NetworkInterfaceCard;
+import org.jclouds.azurecompute.arm.domain.NetworkInterfaceCardProperties;
 import org.jclouds.azurecompute.arm.domain.NetworkProfile;
 import org.jclouds.azurecompute.arm.domain.OSDisk;
 import org.jclouds.azurecompute.arm.domain.OSProfile;
+import org.jclouds.azurecompute.arm.domain.ResourceDefinition;
 import org.jclouds.azurecompute.arm.domain.StorageProfile;
 import org.jclouds.azurecompute.arm.domain.StorageService;
+import org.jclouds.azurecompute.arm.domain.Subnet;
 import org.jclouds.azurecompute.arm.domain.VHD;
 import org.jclouds.azurecompute.arm.domain.VirtualMachine;
 import org.jclouds.azurecompute.arm.domain.VirtualMachineInstance;
 import org.jclouds.azurecompute.arm.domain.VirtualMachineProperties;
-import org.jclouds.azurecompute.arm.functions.ParseJobStatus;
-import org.jclouds.azurecompute.arm.internal.AzureLiveTestUtils;
 import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest;
-import org.jclouds.util.Predicates2;
-import org.jclouds.azurecompute.arm.domain.ResourceDefinition;
 import org.testng.Assert;
+import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-import static com.google.common.base.Preconditions.checkNotNull;
-import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.RESOURCE_GROUP_NAME;
-import static 
org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_SCRIPT_COMPLETE;
-import static 
org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_RUNNING;
-import static 
org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_PORT_OPEN;
-import static 
org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED;
-import static 
org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED;
-import static org.testng.Assert.assertNotNull;
-
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-import java.util.concurrent.TimeUnit;
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.FluentIterable;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Iterables;
+import com.google.gson.internal.LinkedTreeMap;
 
+import static org.jclouds.util.Predicates2.retry;
+import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertTrue;
 
 @Test(groups = "live", testName = "VirtualMachineApiLiveTest")
 public class VirtualMachineApiLiveTest extends BaseAzureComputeApiLiveTest {
 
-   private String subscriptionid = getSubscriptionId();
-   private String vmName = null;
-   private String nicName = null;
+   private String subscriptionid;
+   private String resourceGroupName;
+   private String storageServiceName;
+   private String vmName;
+   private String nicName;
+   private StorageService storageService;
+   private String virtualNetworkName;
+   private String subnetId;
 
    @BeforeClass
-   public void Setup() {
-      NetworkInterfaceCard nic = 
getOrCreateNetworkInterfaceCard(NETWORKINTERFACECARD_NAME);
+   @Override
+   public void setup() {
+      super.setup();
+      subscriptionid = getSubscriptionId();
+
+      resourceGroupName = String.format("rg-%s-%s", 
this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));
+      assertNotNull(createResourceGroup(resourceGroupName));
+      virtualNetworkName = String.format("vn-%s-%s", 
this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));
+
+      storageServiceName = String.format("st%s%s", 
System.getProperty("user.name"), RAND);
+      storageService = createStorageService(resourceGroupName, 
storageServiceName, LOCATION);
+
+      // Subnets belong to a virtual network so that needs to be created first
+      assertNotNull(createDefaultVirtualNetwork(resourceGroupName, 
virtualNetworkName, "10.2.0.0/16", LOCATION));
+
+      //Subnet needs to be up & running before NIC can be created
+      String subnetName = String.format("s-%s-%s", 
this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));
+      Subnet subnet = createDefaultSubnet(resourceGroupName, subnetName, 
virtualNetworkName, "10.2.0.0/23");
+      assertNotNull(subnet);
+      assertNotNull(subnet.id());
+      subnetId = subnet.id();
+
+      NetworkInterfaceCard nic = createNetworkInterfaceCard(resourceGroupName, 
"jc-nic-" + RAND, LOCATION, "ipConfig-" + RAND);
       assertNotNull(nic);
       nicName = nic.name();
-   }
-
-   @Override
-   protected Properties setupProperties() {
-      Properties properties = super.setupProperties();
-      long scriptTimeout = TimeUnit.MILLISECONDS.convert(60, TimeUnit.MINUTES);
-      properties.setProperty(TIMEOUT_SCRIPT_COMPLETE, scriptTimeout + "");
-      properties.setProperty(TIMEOUT_NODE_RUNNING, scriptTimeout + "");
-      properties.setProperty(TIMEOUT_PORT_OPEN, scriptTimeout + "");
-      properties.setProperty(TIMEOUT_NODE_TERMINATED, scriptTimeout + "");
-      properties.setProperty(TIMEOUT_NODE_SUSPENDED, scriptTimeout + "");
-      properties.put(RESOURCE_GROUP_NAME, getResourceGroupName());
-
-      AzureLiveTestUtils.defaultProperties(properties);
-      checkNotNull(setIfTestSystemPropertyPresent(properties, 
"oauth.endpoint"), "test.oauth.endpoint");
 
-      return properties;
+      vmName = String.format("%3.24s", System.getProperty("user.name") + RAND 
+ this.getClass().getSimpleName()).toLowerCase().substring(0, 15);
    }
 
-   private String getName() {
-      if (vmName == null) {
-         vmName = String.format("%3.24s",
-                 System.getProperty("user.name") + RAND + 
this.getClass().getSimpleName()).toLowerCase().substring(0, 15);
-      }
-      return vmName;
+   @AfterClass
+   @Override
+   protected void tearDown() {
+      super.tearDown();
+      URI deleteResourceGroupURI = deleteResourceGroup(resourceGroupName);
+      assertResourceDeleted(deleteResourceGroupURI);
    }
 
    @Test
    public void testCreate() {
-      StorageAccountApi storageApi = 
api.getStorageAccountApi(getResourceGroupName());
-      StorageService storageAccount = storageApi.get(getStorageServiceName());
-      String blob = 
storageAccount.storageServiceProperties().primaryEndpoints().get("blob");
+      String blob = 
storageService.storageServiceProperties().primaryEndpoints().get("blob");
 
-      VirtualMachine vm = api().create(getName(), LOCATION, 
getProperties(blob, nicName));
+      VirtualMachine vm = api().create(vmName, LOCATION, getProperties(blob, 
nicName));
       assertTrue(!vm.name().isEmpty());
 
       //Poll until resource is ready to be used
-      boolean jobDone = Predicates2.retry(new Predicate<String>() {
+      boolean jobDone = retry(new Predicate<String>() {
          @Override
          public boolean apply(String name) {
             return 
!api().get(name).properties().provisioningState().equals("Creating");
          }
-      }, 60 * 20 * 1000).apply(getName());
+      }, 60 * 20 * 1000).apply(vmName);
       assertTrue(jobDone, "create operation did not complete in the configured 
timeout");
 
       String status = api().get(vmName).properties().provisioningState();
@@ -125,91 +133,40 @@ public class VirtualMachineApiLiveTest extends 
BaseAzureComputeApiLiveTest {
 
    @Test(dependsOnMethods = "testCreate")
    public void testGet() {
-      VirtualMachine vm = api().get(getName());
+      VirtualMachine vm = api().get(vmName);
       assertTrue(!vm.name().isEmpty());
    }
 
    @Test(dependsOnMethods = "testCreate")
    public void testGetInstanceView() {
-      VirtualMachineInstance vmi = api().getInstanceDetails(getName());
+      VirtualMachineInstance vmi = api().getInstanceDetails(vmName);
       assertTrue(!vmi.statuses().isEmpty());
    }
 
    @Test(dependsOnMethods = "testStart")
    public void testStop() {
-      api().stop(getName());
-      //Poll until resource is ready to be used
-      nodeSuspendedPredicate.apply(getName());
+      api().stop(vmName);
+      assertTrue(stateReached("PowerState", "VM stopped"), "stop operation did 
not complete in the configured timeout");
    }
 
    @Test(dependsOnMethods = "testGet")
    public void testStart() {
-      api().start(getName());
-
-      //Poll until resource is ready to be used
-      boolean jobDone = Predicates2.retry(new Predicate<String>() {
-         @Override
-         public boolean apply(String name) {
-            String status = "";
-            List<VirtualMachineInstance.VirtualMachineStatus> statuses = 
api().getInstanceDetails(name).statuses();
-            for (int c = 0; c < statuses.size(); c++) {
-               if (statuses.get(c).code().substring(0, 
10).equals("PowerState")) {
-                  status = statuses.get(c).displayStatus();
-                  break;
-               }
-            }
-            return status.equals("VM running");
-         }
-      }, 60 * 4 * 1000).apply(getName());
-      assertTrue(jobDone, "start operation did not complete in the configured 
timeout");
-
+      api().start(vmName);
+      assertTrue(stateReached("PowerState", "VM running"), "start operation 
did not complete in the configured timeout");
    }
 
    @Test(dependsOnMethods = "testStop")
    public void testRestart() {
-      api().start(getName());
-
-      //Poll until resource is ready to be used
-      boolean jobDone = Predicates2.retry(new Predicate<String>() {
-         @Override
-         public boolean apply(String name) {
-            String status = "";
-            List<VirtualMachineInstance.VirtualMachineStatus> statuses = 
api().getInstanceDetails(name).statuses();
-            for (int c = 0; c < statuses.size(); c++) {
-               if (statuses.get(c).code().substring(0, 
10).equals("PowerState")) {
-                  status = statuses.get(c).displayStatus();
-                  break;
-               }
-            }
-            return status.equals("VM running");
-         }
-      }, 60 * 4 * 1000).apply(getName());
-      assertTrue(jobDone, "start operation did not complete in the configured 
timeout");
-
-      api().restart(getName());
-
-      //Poll until resource is ready to be used
-      jobDone = Predicates2.retry(new Predicate<String>() {
-         @Override
-         public boolean apply(String name) {
-            String status = "";
-            List<VirtualMachineInstance.VirtualMachineStatus> statuses = 
api().getInstanceDetails(name).statuses();
-            for (int c = 0; c < statuses.size(); c++) {
-               if (statuses.get(c).code().substring(0, 
10).equals("PowerState")) {
-                  status = statuses.get(c).displayStatus();
-                  break;
-               }
-            }
-            return status.equals("VM running");
-         }
-      }, 60 * 4 * 1000).apply(getName());
-      assertTrue(jobDone, "restart operation did not complete in the 
configured timeout");
+      api().start(vmName);
+      assertTrue(stateReached("PowerState", "VM running"), "start operation 
did not complete in the configured timeout");
+      api().restart(vmName);
+      assertTrue(stateReached("PowerState", "VM running"), "restart operation 
did not complete in the configured timeout");
    }
 
    @Test(dependsOnMethods = "testCreate")
    public void testList() {
       List<VirtualMachine> list = api().list();
-      final VirtualMachine vm = api().get(getName());
+      final VirtualMachine vm = api().get(vmName);
 
       boolean vmPresent = Iterables.any(list, new Predicate<VirtualMachine>() {
          public boolean apply(VirtualMachine input) {
@@ -222,34 +179,30 @@ public class VirtualMachineApiLiveTest extends 
BaseAzureComputeApiLiveTest {
 
    @Test(dependsOnMethods = "testRestart")
    public void testGeneralize() throws IllegalStateException {
-      api().stop(getName());
-      //Poll until resource is ready to be used
-
-      if (nodeSuspendedPredicate.apply(getName())) {
-         api().generalize(getName());
-      }
+      api().stop(vmName);
+      assertTrue(stateReached("PowerState", "VM stopped"), "restart operation 
did not complete in the configured timeout");
+      api().generalize(vmName);
    }
 
    @Test(dependsOnMethods = "testGeneralize")
    public void testCapture() throws IllegalStateException {
-      URI uri = api().capture(getName(), getName(), getName());
-      if (uri != null) {
-         if (imageAvailablePredicate.apply(uri)) {
-            List<ResourceDefinition> definitions = 
api.getJobApi().captureStatus(uri);
-            if (definitions != null) {
-               for (ResourceDefinition definition : definitions) {
-                  LinkedTreeMap<String, String> properties = 
(LinkedTreeMap<String, String>) definition.properties();
-                  Object storageObject = properties.get("storageProfile");
-                  LinkedTreeMap<String, String> properties2 = 
(LinkedTreeMap<String, String>) storageObject;
-                  Object osDiskObject = properties2.get("osDisk");
-                  LinkedTreeMap<String, String> osProperties = 
(LinkedTreeMap<String, String>) osDiskObject;
-                  Object dataDisksObject = properties2.get("dataDisks");
-                  ArrayList<Object> dataProperties = (ArrayList<Object>) 
dataDisksObject;
-                  LinkedTreeMap<String, String> datadiskObject = 
(LinkedTreeMap<String, String>) dataProperties.get(0);
-
-                  Assert.assertNotNull(osProperties.get("name"));
-                  Assert.assertNotNull(datadiskObject.get("name"));
-               }
+      URI uri = api().capture(vmName, vmName, vmName);
+      if (uri == null) Assert.fail();
+      if (imageAvailablePredicate.apply(uri)) {
+         List<ResourceDefinition> definitions = 
api.getJobApi().captureStatus(uri);
+         if (definitions != null) {
+            for (ResourceDefinition definition : definitions) {
+               LinkedTreeMap<String, String> properties = 
(LinkedTreeMap<String, String>) definition.properties();
+               Object storageObject = properties.get("storageProfile");
+               LinkedTreeMap<String, String> properties2 = 
(LinkedTreeMap<String, String>) storageObject;
+               Object osDiskObject = properties2.get("osDisk");
+               LinkedTreeMap<String, String> osProperties = 
(LinkedTreeMap<String, String>) osDiskObject;
+               Object dataDisksObject = properties2.get("dataDisks");
+               ArrayList<Object> dataProperties = (ArrayList<Object>) 
dataDisksObject;
+               LinkedTreeMap<String, String> datadiskObject = 
(LinkedTreeMap<String, String>) dataProperties.get(0);
+
+               Assert.assertNotNull(osProperties.get("name"));
+               Assert.assertNotNull(datadiskObject.get("name"));
             }
          }
       }
@@ -257,23 +210,12 @@ public class VirtualMachineApiLiveTest extends 
BaseAzureComputeApiLiveTest {
 
    @Test(dependsOnMethods = "testCapture", alwaysRun = true)
    public void testDelete() throws Exception {
-      URI uri = api().delete(getName());
-
-      if (uri != null) {
-         assertTrue(uri.toString().contains("api-version"));
-
-         boolean jobDone = Predicates2.retry(new Predicate<URI>() {
-            @Override
-            public boolean apply(URI uri) {
-               return ParseJobStatus.JobStatus.DONE == 
api.getJobApi().jobStatus(uri);
-            }
-         }, 60 * 8 * 1000 /* 2 minutes timeout */).apply(uri);
-         assertTrue(jobDone, "delete operation did not complete in the 
configured timeout");
-      }
+      URI uri = api().delete(vmName);
+      assertResourceDeleted(uri);
    }
 
    private VirtualMachineApi api() {
-      return api.getVirtualMachineApi(getResourceGroupName());
+      return api.getVirtualMachineApi(resourceGroupName);
    }
 
    private VirtualMachineProperties getProperties(String blob, String nic) {
@@ -281,19 +223,19 @@ public class VirtualMachineApiLiveTest extends 
BaseAzureComputeApiLiveTest {
       HardwareProfile hwProf = HardwareProfile.create("Standard_D1");
       ImageReference imgRef = 
ImageReference.create("MicrosoftWindowsServerEssentials",
               "WindowsServerEssentials", "WindowsServerEssentials", "latest");
-      VHD vhd = VHD.create(blob + "vhds/" + getName() + ".vhd");
-      VHD vhd2 = VHD.create(blob + "vhds/" + getName() + "data.vhd");
-      DataDisk dataDisk = DataDisk.create(getName() + "data", "100", 0, vhd2, 
"Empty");
+      VHD vhd = VHD.create(blob + "vhds/" + vmName + ".vhd");
+      VHD vhd2 = VHD.create(blob + "vhds/" + vmName + "data.vhd");
+      DataDisk dataDisk = DataDisk.create(vmName + "data", "100", 0, vhd2, 
"Empty");
       List<DataDisk> dataDisks = new ArrayList<DataDisk>();
       dataDisks.add(dataDisk);
-      OSDisk osDisk = OSDisk.create(null, getName(), vhd, "ReadWrite", 
"FromImage", null);
+      OSDisk osDisk = OSDisk.create(null, vmName, vhd, "ReadWrite", 
"FromImage", null);
       StorageProfile storageProfile = StorageProfile.create(imgRef, osDisk, 
dataDisks);
       OSProfile.WindowsConfiguration windowsConfig = 
OSProfile.WindowsConfiguration.create(false, null, null, true,
               null);
-      OSProfile osProfile = OSProfile.create(getName(), "azureuser", 
"RFe3&432dg", null, null, windowsConfig);
+      OSProfile osProfile = OSProfile.create(vmName, "azureuser", 
"RFe3&432dg", null, null, windowsConfig);
       IdReference networkInterface =
               IdReference.create("/subscriptions/" + subscriptionid +
-                      "/resourceGroups/" + getResourceGroupName() + 
"/providers/Microsoft.Network/networkInterfaces/"
+                      "/resourceGroups/" + resourceGroupName + 
"/providers/Microsoft.Network/networkInterfaces/"
                       + nic);
       List<IdReference> networkInterfaces =
               new ArrayList<IdReference>();
@@ -306,4 +248,51 @@ public class VirtualMachineApiLiveTest extends 
BaseAzureComputeApiLiveTest {
               null, null, hwProf, storageProfile, osProfile, networkProfile, 
diagnosticsProfile, "Creating");
       return properties;
    }
+
+   protected NetworkInterfaceCard createNetworkInterfaceCard(final String 
resourceGroupName, String networkInterfaceCardName, String locationName, String 
ipConfigurationName) {
+      //Create properties object
+      final NetworkInterfaceCardProperties networkInterfaceCardProperties =
+              NetworkInterfaceCardProperties.builder()
+                      
.ipConfigurations(Arrays.asList(IpConfiguration.create(ipConfigurationName, 
null, null, null,
+                              IpConfigurationProperties.create(null, null, 
"Dynamic", IdReference.create(subnetId), null))
+                      )).build();
+
+      final Map<String, String> tags = ImmutableMap.of("jclouds", "livetest");
+      return 
api.getNetworkInterfaceCardApi(resourceGroupName).createOrUpdate(networkInterfaceCardName,
 locationName, networkInterfaceCardProperties, tags);
+   }
+
+   private boolean deleteStorageService(String resourceGroupName, String 
storageServiceName) {
+      return 
api.getStorageAccountApi(resourceGroupName).delete(storageServiceName);
+   }
+
+   private boolean waitForState(String name, final String state, final String 
displayStatus) {
+      return FluentIterable.from(api().getInstanceDetails(name).statuses())
+              .filter(new 
Predicate<VirtualMachineInstance.VirtualMachineStatus>() {
+                 @Override
+                 public boolean 
apply(VirtualMachineInstance.VirtualMachineStatus input) {
+                    return input.code().substring(0, 10).equals(state);
+                 }
+              })
+              .transform(new 
Function<VirtualMachineInstance.VirtualMachineStatus, String>() {
+                 @Override
+                 public String 
apply(VirtualMachineInstance.VirtualMachineStatus input) {
+                    return input.displayStatus();
+                 }
+              })
+              .anyMatch(new Predicate<String>() {
+                 @Override
+                 public boolean apply(String input) {
+                    return input.equals(displayStatus);
+                 }
+              });
+   }
+
+   private boolean stateReached(final String state, final String 
displayStatus) {
+      return retry(new Predicate<String>() {
+         @Override
+         public boolean apply(String name) {
+            return waitForState(name, state, displayStatus);
+         }
+      }, 60 * 4 * 1000).apply(vmName);
+   }
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/c458bafd/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualNetworkApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualNetworkApiLiveTest.java
 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualNetworkApiLiveTest.java
index 71ad0b0..7f59678 100644
--- 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualNetworkApiLiveTest.java
+++ 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/VirtualNetworkApiLiveTest.java
@@ -16,87 +16,84 @@
  */
 package org.jclouds.azurecompute.arm.features;
 
+import java.util.Arrays;
+import java.util.List;
+
 import org.jclouds.azurecompute.arm.domain.VirtualNetwork;
 import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest;
-
+import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-import java.util.Arrays;
-import java.util.List;
-
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
 
 @Test(groups = "live", singleThreaded = true)
 public class VirtualNetworkApiLiveTest extends BaseAzureComputeApiLiveTest {
 
-   private final String subscriptionid = "subscriptionid";
-   private String resourcegroup;
+   private String resourceGroupName;
+   private String virtualNetworkName;
 
    @BeforeClass
    @Override
    public void setup() {
       super.setup();
-      resourcegroup = getResourceGroupName();
+      resourceGroupName = String.format("rg-%s-%s", 
this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));
+      assertNotNull(createResourceGroup(resourceGroupName));
+      virtualNetworkName = String.format("vn-%s-%s", 
this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));
    }
 
-   @Test(groups = "live")
-   public void deleteVirtualNetworkResourceDoesNotExist() {
-
-      final VirtualNetworkApi vnApi = api.getVirtualNetworkApi(resourcegroup);
+   @AfterClass
+   @Override
+   protected void tearDown() {
+      super.tearDown();
+      deleteResourceGroup(resourceGroupName);
+   }
 
-      boolean status = vnApi.delete(VIRTUAL_NETWORK_NAME);
+   @Test
+   public void deleteVirtualNetworkResourceDoesNotExist() {
+      boolean status = api().delete(virtualNetworkName);
       assertFalse(status);
-
    }
 
-   @Test(groups = "live", dependsOnMethods = 
"deleteVirtualNetworkResourceDoesNotExist")
+   @Test(dependsOnMethods = "deleteVirtualNetworkResourceDoesNotExist")
    public void createVirtualNetwork() {
 
-      final VirtualNetworkApi vnApi = api.getVirtualNetworkApi(resourcegroup);
-
-      //Create properties object
-
       final VirtualNetwork.VirtualNetworkProperties virtualNetworkProperties =
               VirtualNetwork.VirtualNetworkProperties.builder().addressSpace(
                       
VirtualNetwork.AddressSpace.create(Arrays.asList(DEFAULT_VIRTUALNETWORK_ADDRESS_PREFIX))).build();
 
-      VirtualNetwork vn = vnApi.createOrUpdate(VIRTUAL_NETWORK_NAME, LOCATION, 
virtualNetworkProperties);
+      VirtualNetwork vn = api().createOrUpdate(virtualNetworkName, LOCATION, 
virtualNetworkProperties);
 
-      assertEquals(VIRTUAL_NETWORK_NAME, vn.name());
-      assertEquals(LOCATION, vn.location());
+      assertEquals(vn.name(), virtualNetworkName);
+      assertEquals(vn.location(), LOCATION);
    }
 
-   @Test(groups = "live", dependsOnMethods = "createVirtualNetwork")
+   @Test(dependsOnMethods = "createVirtualNetwork")
    public void getVirtualNetwork() {
-
-      final VirtualNetworkApi vnApi = api.getVirtualNetworkApi(resourcegroup);
-      VirtualNetwork vn = vnApi.get(VIRTUAL_NETWORK_NAME);
+      VirtualNetwork vn = api().get(virtualNetworkName);
 
       assertNotNull(vn.name());
       assertNotNull(vn.location());
       assertNotNull(vn.properties().addressSpace().addressPrefixes());
    }
 
-   @Test(groups = "live", dependsOnMethods = "createVirtualNetwork")
+   @Test(dependsOnMethods = "createVirtualNetwork")
    public void listVirtualNetworks() {
-
-      final VirtualNetworkApi vnApi = api.getVirtualNetworkApi(resourcegroup);
-      List<VirtualNetwork> vnList = vnApi.list();
-
+      List<VirtualNetwork> vnList = api().list();
       assertTrue(vnList.size() > 0);
    }
 
-   @Test(groups = "live", dependsOnMethods = {"listVirtualNetworks", 
"getVirtualNetwork"}, alwaysRun = true)
+   @Test(dependsOnMethods = {"listVirtualNetworks", "getVirtualNetwork"}, 
alwaysRun = true)
    public void deleteVirtualNetwork() {
-
-      final VirtualNetworkApi vnApi = api.getVirtualNetworkApi(resourcegroup);
-
-      boolean status = vnApi.delete(VIRTUAL_NETWORK_NAME);
+      boolean status = api().delete(virtualNetworkName);
       assertTrue(status);
    }
 
+   private VirtualNetworkApi api() {
+      return api.getVirtualNetworkApi(resourceGroupName);
+   }
+
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/c458bafd/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/internal/AbstractAzureComputeApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/internal/AbstractAzureComputeApiLiveTest.java
 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/internal/AbstractAzureComputeApiLiveTest.java
deleted file mode 100644
index f3134b7..0000000
--- 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/internal/AbstractAzureComputeApiLiveTest.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jclouds.azurecompute.arm.internal;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.net.URI;
-import java.util.Properties;
-import java.util.Random;
-
-import com.google.common.base.Predicate;
-import com.google.inject.Module;
-import com.google.inject.Injector;
-
-
-import org.jclouds.apis.BaseApiLiveTest;
-import org.jclouds.azurecompute.arm.AzureComputeApi;
-import org.jclouds.azurecompute.arm.AzureComputeProviderMetadata;
-import org.jclouds.providers.ProviderMetadata;
-import com.google.inject.name.Names;
-import com.google.inject.Key;
-import com.google.inject.TypeLiteral;
-
-import static 
org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_IMAGE_AVAILABLE;
-import static 
org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED;
-
-
-public abstract class AbstractAzureComputeApiLiveTest extends 
BaseApiLiveTest<AzureComputeApi> {
-
-   protected static final int RAND = new Random().nextInt(999);
-   protected Predicate<String> nodeSuspendedPredicate;
-   protected Predicate<URI> imageAvailablePredicate;
-
-   public AbstractAzureComputeApiLiveTest() {
-      provider = "azurecompute-arm";
-   }
-
-   @Override protected AzureComputeApi create(Properties props, 
Iterable<Module> modules) {
-      Injector injector = 
newBuilder().modules(modules).overrides(props).buildInjector();
-      nodeSuspendedPredicate = injector.getInstance(Key.get(new 
TypeLiteral<Predicate<String>>() {
-      }, Names.named(TIMEOUT_NODE_SUSPENDED)));
-      imageAvailablePredicate = injector.getInstance(Key.get(new 
TypeLiteral<Predicate<URI>>() {
-      }, Names.named(TIMEOUT_IMAGE_AVAILABLE)));
-      return injector.getInstance(AzureComputeApi.class);
-   }
-
-   @Override protected Properties setupProperties() {
-      Properties properties = super.setupProperties();
-
-      // for oauth
-      AzureLiveTestUtils.defaultProperties(properties);
-      checkNotNull(setIfTestSystemPropertyPresent(properties, 
"oauth.endpoint"), "test.oauth.endpoint");
-      return properties;
-   }
-
-   @Override
-   protected ProviderMetadata createProviderMetadata() {
-      AzureComputeProviderMetadata pm = 
AzureComputeProviderMetadata.builder().build();
-      String endpoint = null;
-      if (System.getProperty("test.azurecompute-arm.endpoint") != null){
-         endpoint = System.getProperty("test.azurecompute-arm.endpoint");
-         pm.toBuilder().endpoint(endpoint);
-      }
-      return pm;
-   }
-}

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/c458bafd/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/internal/BaseAzureComputeApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/internal/BaseAzureComputeApiLiveTest.java
 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/internal/BaseAzureComputeApiLiveTest.java
index 0eec525..bd7cde4 100644
--- 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/internal/BaseAzureComputeApiLiveTest.java
+++ 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/internal/BaseAzureComputeApiLiveTest.java
@@ -15,210 +15,157 @@
  * limitations under the License.
  */
 package org.jclouds.azurecompute.arm.internal;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertTrue;
 
-import com.google.common.base.Predicate;
-import com.google.common.collect.ImmutableMap;
-import org.jclouds.azurecompute.arm.domain.IdReference;
-import org.jclouds.azurecompute.arm.domain.IpConfiguration;
-import org.jclouds.azurecompute.arm.domain.IpConfigurationProperties;
-import org.jclouds.azurecompute.arm.domain.NetworkInterfaceCard;
-import org.jclouds.azurecompute.arm.domain.NetworkInterfaceCardProperties;
+import java.net.URI;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Properties;
+import java.util.Random;
+
+import org.jclouds.apis.BaseApiLiveTest;
+import org.jclouds.azurecompute.arm.AzureComputeApi;
+import org.jclouds.azurecompute.arm.domain.NetworkSecurityGroup;
+import org.jclouds.azurecompute.arm.domain.NetworkSecurityGroupProperties;
+import org.jclouds.azurecompute.arm.domain.NetworkSecurityRule;
+import org.jclouds.azurecompute.arm.domain.NetworkSecurityRuleProperties;
 import org.jclouds.azurecompute.arm.domain.ResourceGroup;
-
 import org.jclouds.azurecompute.arm.domain.StorageService;
 import org.jclouds.azurecompute.arm.domain.Subnet;
 import org.jclouds.azurecompute.arm.domain.VirtualNetwork;
-import org.jclouds.azurecompute.arm.features.NetworkInterfaceCardApi;
-import org.jclouds.azurecompute.arm.features.StorageAccountApi;
-import org.jclouds.azurecompute.arm.features.SubnetApi;
-import org.jclouds.azurecompute.arm.features.VirtualNetworkApi;
 import org.jclouds.azurecompute.arm.functions.ParseJobStatus;
-import org.jclouds.util.Predicates2;
-import org.testng.Assert;
-import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
 
-import java.net.URI;
-import java.util.Arrays;
-import java.util.Map;
-import java.util.logging.Level;
-import java.util.logging.Logger;
+import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
+import com.google.inject.Injector;
+import com.google.inject.Key;
+import com.google.inject.Module;
+import com.google.inject.TypeLiteral;
+import com.google.inject.name.Names;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.TIMEOUT_RESOURCE_DELETED;
+import static 
org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_IMAGE_AVAILABLE;
+import static org.jclouds.util.Predicates2.retry;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
 
-public class BaseAzureComputeApiLiveTest extends 
AbstractAzureComputeApiLiveTest {
+public class BaseAzureComputeApiLiveTest extends 
BaseApiLiveTest<AzureComputeApi> {
+
+   protected static final int RAND = new Random().nextInt(999);
    public static final String LOCATION = "westeurope";
    public static final String LOCATIONDESCRIPTION = "West Europe";
-
-   public static final String DEFAULT_SUBNET_ADDRESS_SPACE = "10.2.0.0/23";
-
-   public static final String VIRTUAL_NETWORK_NAME = 
"jclouds-virtual-network-live-test";
-
-   public static final String DEFAULT_SUBNET_NAME = "jclouds-1";
-
    public static final String DEFAULT_VIRTUALNETWORK_ADDRESS_PREFIX = 
"10.2.0.0/16";
-
-   public static final String NETWORKINTERFACECARD_NAME = "jcloudsNic";
-
-   private String resourceGroupName = null;
-
-   private String virtualNetworkName = null;
-
-   protected StorageService storageService;
-
-   private String storageServiceName = null;
-
-   protected String getStorageServiceName() {
-      if (storageServiceName == null) {
-         storageServiceName = String.format("%3.24s",
-                 System.getProperty("user.name") + RAND + 
this.getClass().getSimpleName()).toLowerCase();
-      }
-      return storageServiceName;
-   }
-
-   protected String getLocation() {
-      return LOCATION;
-   }
-
-   protected String getEndpoint() {
-      String endpoint = null;
-      if (System.getProperty("test.azurecompute-arm.endpoint") != null) {
-         endpoint = System.getProperty("test.azurecompute-arm.endpoint");
-      }
-      assertNotNull(endpoint);
-      return endpoint;
-   }
-
-   protected String getSubscriptionId() {
-      String subscriptionid = null;
-      String endpoint = null;
-      endpoint = getEndpoint();
-      if (endpoint != null) {
-         subscriptionid = endpoint.substring(endpoint.lastIndexOf("/") + 1);
-      }
-      assertNotNull(subscriptionid);
-      return subscriptionid;
+   
+   protected Predicate<URI> imageAvailablePredicate;
+   protected Predicate<URI> resourceDeleted;
+   
+   public BaseAzureComputeApiLiveTest() {
+      provider = "azurecompute-arm";
    }
 
-   protected String getResourceGroupName() {
-      if (resourceGroupName == null) {
-         resourceGroupName = String.format("%3.24s",
-                 System.getProperty("user.name") + RAND + "groupjclouds");
-         //createResourceGroup(resourceGroupName);
-      }
-      return resourceGroupName;
+   @Override protected AzureComputeApi create(Properties props, 
Iterable<Module> modules) {
+      Injector injector = 
newBuilder().modules(modules).overrides(props).buildInjector();
+      imageAvailablePredicate = injector.getInstance(Key.get(new 
TypeLiteral<Predicate<URI>>() {
+      }, Names.named(TIMEOUT_IMAGE_AVAILABLE)));
+      resourceDeleted = injector.getInstance(Key.get(new 
TypeLiteral<Predicate<URI>>() {
+      }, Names.named(TIMEOUT_RESOURCE_DELETED)));
+      return injector.getInstance(AzureComputeApi.class);
    }
 
-   protected void createResourceGroup(String name) {
-      ImmutableMap<String, String> tags = ImmutableMap.<String, 
String>builder().build();
-
-      final ResourceGroup resourceGroup = api.getResourceGroupApi().create(
-              name, LOCATION, tags);
+   @Override protected Properties setupProperties() {
+      Properties properties = super.setupProperties();
+      // for oauth
+      AzureLiveTestUtils.defaultProperties(properties);
+      checkNotNull(setIfTestSystemPropertyPresent(properties, 
"oauth.endpoint"), "test.oauth.endpoint");
+      return properties;
    }
-
-   private void deleteResourceGroup(String name) {
-      api.getResourceGroupApi().delete(name);
+   
+   protected void assertResourceDeleted(URI uri) {
+      assertNotNull(uri);
+      assertTrue(resourceDeleted.apply(uri), String.format("Resource %s was 
not terminated in the configured timeout", uri));
    }
 
-
-   @BeforeClass
-   @Override
-   public void setup() {
-      super.setup();
-      createResourceGroup(getResourceGroupName());
-      storageService = getOrCreateStorageService(getStorageServiceName());
+   protected VirtualNetwork createDefaultVirtualNetwork(final String 
resourceGroupName, String virtualNetworkName, String 
virtualnetworkAddressPrefix, String location) {
+      final VirtualNetwork.VirtualNetworkProperties virtualNetworkProperties =
+              VirtualNetwork.VirtualNetworkProperties.create(null, null,
+                      
VirtualNetwork.AddressSpace.create(Arrays.asList(virtualnetworkAddressPrefix)), 
null);
+      VirtualNetwork virtualNetwork = 
api.getVirtualNetworkApi(resourceGroupName).createOrUpdate(virtualNetworkName, 
location, virtualNetworkProperties);
+      retry(new Predicate<String>() {
+         @Override
+         public boolean apply(String name) {
+            VirtualNetwork virtualNetwork = 
api.getVirtualNetworkApi(resourceGroupName).get(name);
+            return 
virtualNetwork.properties().provisioningState().equals("Succeeded");
+         }
+      }, 60 * 4 * 1000).apply(virtualNetwork.name());
+      return virtualNetwork;
    }
 
-   @AfterClass(alwaysRun = true)
-   @Override
-   protected void tearDown() {
-      super.tearDown();
-      Boolean status = 
api.getStorageAccountApi(getResourceGroupName()).delete(getStorageServiceName());
-      assertTrue(status.booleanValue());
-      deleteResourceGroup(getResourceGroupName());
+   protected Subnet createDefaultSubnet(final String resourceGroupName, String 
subnetName, final String virtualNetworkName, String subnetAddressSpace) {
+      Subnet.SubnetProperties  properties = 
Subnet.SubnetProperties.builder().addressPrefix(subnetAddressSpace).build();
+      Subnet subnet = api.getSubnetApi(resourceGroupName, 
virtualNetworkName).createOrUpdate(subnetName, properties);
+      retry(new Predicate<String>() {
+         @Override
+         public boolean apply(String name) {
+            Subnet subnet = api.getSubnetApi(resourceGroupName, 
virtualNetworkName).get(name);
+            return subnet.properties().provisioningState().equals("Succeeded");
+         }
+      }, 60 * 4 * 1000).apply(subnet.name());
+      return subnet;
    }
 
-   protected StorageService getOrCreateStorageService(String 
storageServiceName) {
-      StorageAccountApi storageApi = 
api.getStorageAccountApi(getResourceGroupName());
-      StorageService ss = storageApi.get(storageServiceName);
-      if (ss != null) {
-         return ss;
-      }
-      URI uri = storageApi.create(storageServiceName, LOCATION, 
ImmutableMap.of("property_name",
+   protected StorageService createStorageService(String resourceGroupName, 
String storageServiceName, String location) {
+      URI uri = 
api.getStorageAccountApi(resourceGroupName).create(storageServiceName, 
location, ImmutableMap.of("property_name",
               "property_value"), ImmutableMap.of("accountType", 
StorageService.AccountType.Standard_LRS.toString()));
-      if (uri != null){
+      if (uri != null) {
          assertTrue(uri.toString().contains("api-version"));
 
-         boolean jobDone = Predicates2.retry(new Predicate<URI>() {
-            @Override public boolean apply(URI uri) {
+         boolean jobDone = retry(new Predicate<URI>() {
+            @Override
+            public boolean apply(URI uri) {
                return ParseJobStatus.JobStatus.DONE == 
api.getJobApi().jobStatus(uri);
             }
          }, 60 * 1 * 1000 /* 1 minute timeout */).apply(uri);
          assertTrue(jobDone, "create operation did not complete in the 
configured timeout");
       }
-      ss = storageApi.get(storageServiceName);
-      Assert.assertEquals(ss.location(), LOCATION);
-
-      Logger.getAnonymousLogger().log(Level.INFO, "created storageService: 
{0}", ss);
-      return ss;
+      return 
api.getStorageAccountApi(resourceGroupName).get(storageServiceName);
    }
 
-   protected VirtualNetwork getOrCreateVirtualNetwork(final String 
virtualNetworkName) {
-
-      VirtualNetworkApi vnApi = 
api.getVirtualNetworkApi(getResourceGroupName());
-      VirtualNetwork vn = vnApi.get(virtualNetworkName);
-
-      if (vn != null) {
-         return vn;
-      }
-
-      final VirtualNetwork.VirtualNetworkProperties virtualNetworkProperties =
-              VirtualNetwork.VirtualNetworkProperties.create(null, null,
-                      
VirtualNetwork.AddressSpace.create(Arrays.asList(DEFAULT_VIRTUALNETWORK_ADDRESS_PREFIX)),
 null);
-
-
-      vn = vnApi.createOrUpdate(VIRTUAL_NETWORK_NAME, LOCATION, 
virtualNetworkProperties);
-      this.virtualNetworkName = virtualNetworkName;
-      return vn;
+   protected ResourceGroup createResourceGroup(String resourceGroupName) {
+      return api.getResourceGroupApi().create(resourceGroupName, LOCATION, 
ImmutableMap.<String, String>of());
    }
 
-   protected Subnet getOrCreateSubnet(final String subnetName, final String 
virtualNetworkName){
-
-      SubnetApi subnetApi = api.getSubnetApi(getResourceGroupName(), 
virtualNetworkName);
-      Subnet subnet = subnetApi.get(subnetName);
-
-      if (subnet != null){
-         return subnet;
-      }
-
-      Subnet.SubnetProperties  properties = 
Subnet.SubnetProperties.builder().addressPrefix(DEFAULT_SUBNET_ADDRESS_SPACE).build();
-      subnet = subnetApi.createOrUpdate(subnetName, properties);
-
-      return subnet;
+   protected URI deleteResourceGroup(String resourceGroupName) {
+      return api.getResourceGroupApi().delete(resourceGroupName);
    }
 
-   protected NetworkInterfaceCard getOrCreateNetworkInterfaceCard(final String 
networkInterfaceCardName){
-
-      NetworkInterfaceCardApi nicApi = 
api.getNetworkInterfaceCardApi(getResourceGroupName());
-      NetworkInterfaceCard nic = nicApi.get(networkInterfaceCardName);
-
-      if (nic != null){
-         return nic;
-      }
-
-      VirtualNetwork vn = getOrCreateVirtualNetwork(VIRTUAL_NETWORK_NAME);
-
-      Subnet subnet = getOrCreateSubnet(DEFAULT_SUBNET_NAME, 
VIRTUAL_NETWORK_NAME);
-
-      //Create properties object
-      final NetworkInterfaceCardProperties networkInterfaceCardProperties =
-              NetworkInterfaceCardProperties.builder()
-                      
.ipConfigurations(Arrays.asList(IpConfiguration.create("myipconfig", null, 
null, null,
-                              IpConfigurationProperties.create(null, null, 
"Dynamic", IdReference.create(subnet.id()), null))
-                      )).build();
+   protected NetworkSecurityGroup newNetworkSecurityGroup(String nsgName, 
String locationName) {
+      NetworkSecurityRule rule = NetworkSecurityRule.create("denyallout", 
null, null,
+              NetworkSecurityRuleProperties.builder()
+                      .description("deny all out")
+                      .protocol(NetworkSecurityRuleProperties.Protocol.Tcp)
+                      .sourcePortRange("*")
+                      .destinationPortRange("*")
+                      .sourceAddressPrefix("*")
+                      .destinationAddressPrefix("*")
+                      .access(NetworkSecurityRuleProperties.Access.Deny)
+                      .priority(4095)
+                      
.direction(NetworkSecurityRuleProperties.Direction.Outbound)
+                      .build());
+      List<NetworkSecurityRule> ruleList = Lists.newArrayList();
+      ruleList.add(rule);
+      NetworkSecurityGroup nsg = NetworkSecurityGroup.create(nsgName, 
locationName, null,
+              NetworkSecurityGroupProperties.builder()
+                      .securityRules(ruleList)
+                      .build(),
+              null);
+      return nsg;
+   }
 
-      final Map<String, String> tags = ImmutableMap.of("jclouds", "livetest");
-      nic = nicApi.createOrUpdate(NETWORKINTERFACECARD_NAME, LOCATION, 
networkInterfaceCardProperties, tags);
-      return  nic;
+   protected String getSubscriptionId() {
+      String subscriptionId = endpoint.substring(endpoint.lastIndexOf("/") + 
1);
+      assertNotNull(subscriptionId);
+      return subscriptionId;
    }
+
 }

Reply via email to