fix azure-arm features live tests

- add image publishers filter to AzureComputeServiceLiveTest
- add parser module to provider
- fix create network card interface
- fix checkstyle


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

Branch: refs/heads/master
Commit: c458bafdf5b1ffa9f6365e9a52193b017a20f94a
Parents: e8c4530
Author: Andrea Turli <[email protected]>
Authored: Fri Sep 9 18:30:26 2016 +0200
Committer: Andrea Turli <[email protected]>
Committed: Tue Sep 27 15:27:53 2016 +0200

----------------------------------------------------------------------
 .../arm/AzureManagementApiMetadata.java         |   5 +-
 .../AzureComputeServiceContextModule.java       |  95 +++---
 .../arm/features/DeploymentApi.java             |  19 +-
 .../azurecompute/arm/functions/URIParser.java   |   9 +-
 .../compute/AzureComputeServiceLiveTest.java    |  10 +-
 .../compute/AzureTemplateBuilderLiveTest.java   |  12 +-
 .../arm/features/DeploymentApiLiveTest.java     |  95 +++---
 .../arm/features/LocationApiLiveTest.java       |   9 +-
 .../NetworkInterfaceCardApiLiveTest.java        | 110 +++----
 .../NetworkSecurityGroupApiLiveTest.java        | 111 +++----
 .../NetworkSecurityRuleApiLiveTest.java         | 156 ++++------
 .../arm/features/OSImageApiLiveTest.java        |   9 +-
 .../features/PublicIPAddressApiLiveTest.java    |  46 ++-
 .../arm/features/ResourceGroupApiLiveTest.java  |  71 ++---
 .../features/ResourceProviderApiLiveTest.java   |   8 +-
 .../arm/features/StorageAccountApiLiveTest.java |  46 ++-
 .../arm/features/SubnetApiLiveTest.java         |  74 +++--
 .../TemplateToDeploymentTemplateLiveTest.java   |  42 ++-
 .../arm/features/VMSizeApiLiveTest.java         |   2 +-
 .../arm/features/VirtualMachineApiLiveTest.java | 309 +++++++++----------
 .../arm/features/VirtualNetworkApiLiveTest.java |  69 ++---
 .../AbstractAzureComputeApiLiveTest.java        |  80 -----
 .../internal/BaseAzureComputeApiLiveTest.java   | 283 +++++++----------
 23 files changed, 719 insertions(+), 951 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/c458bafd/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureManagementApiMetadata.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureManagementApiMetadata.java
 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureManagementApiMetadata.java
index 48dbe69..a321060 100644
--- 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureManagementApiMetadata.java
+++ 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/AzureManagementApiMetadata.java
@@ -70,11 +70,12 @@ public class AzureManagementApiMetadata extends 
BaseHttpApiMetadata<AzureCompute
                  
.defaultProperties(AzureManagementApiMetadata.defaultProperties())
                  .view(typeToken(ComputeServiceContext.class))
                  .defaultModules(ImmutableSet.<Class<? extends 
Module>>builder()
-                         .add(AzureComputeServiceContextModule.class)
                          .add(OAuthModule.class)
                          .add(OkHttpCommandExecutorServiceModule.class)
                          .add(AzureComputeParserModule.class)
-                         .add(AzureComputeHttpApiModule.class).build());
+                         .add(AzureComputeHttpApiModule.class)
+                         .add(AzureComputeServiceContextModule.class)
+                         .build());
       }
 
       @Override

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/c458bafd/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java
 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java
index 7df8111..6033f42 100644
--- 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java
+++ 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/compute/config/AzureComputeServiceContextModule.java
@@ -16,72 +16,69 @@
  */
 package org.jclouds.azurecompute.arm.compute.config;
 
+import java.net.URI;
+import java.util.List;
+
 import javax.annotation.Resource;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
-import com.google.inject.Provides;
-
+import org.jclouds.azurecompute.arm.AzureComputeApi;
+import org.jclouds.azurecompute.arm.compute.AzureComputeService;
 import org.jclouds.azurecompute.arm.compute.AzureComputeServiceAdapter;
 import 
org.jclouds.azurecompute.arm.compute.extensions.AzureComputeImageExtension;
-import org.jclouds.azurecompute.arm.compute.functions.VMImageToImage;
 import org.jclouds.azurecompute.arm.compute.functions.DeploymentToNodeMetadata;
-import org.jclouds.azurecompute.arm.compute.functions.VMHardwareToHardware;
 import org.jclouds.azurecompute.arm.compute.functions.LocationToLocation;
-import 
org.jclouds.azurecompute.arm.compute.strategy.AzurePopulateDefaultLoginCredentialsForImageStrategy;
+import org.jclouds.azurecompute.arm.compute.functions.VMHardwareToHardware;
+import org.jclouds.azurecompute.arm.compute.functions.VMImageToImage;
 import org.jclouds.azurecompute.arm.compute.options.AzureTemplateOptions;
+import 
org.jclouds.azurecompute.arm.compute.strategy.AzurePopulateDefaultLoginCredentialsForImageStrategy;
+import 
org.jclouds.azurecompute.arm.compute.strategy.CreateResourceGroupThenCreateNodes;
+import org.jclouds.azurecompute.arm.domain.Location;
 import org.jclouds.azurecompute.arm.domain.ResourceDefinition;
 import org.jclouds.azurecompute.arm.domain.VMDeployment;
 import org.jclouds.azurecompute.arm.domain.VMHardware;
 import org.jclouds.azurecompute.arm.domain.VMImage;
-import org.jclouds.azurecompute.arm.domain.Location;
-import 
org.jclouds.azurecompute.arm.compute.strategy.CreateResourceGroupThenCreateNodes;
-import org.jclouds.azurecompute.arm.AzureComputeApi;
 import org.jclouds.azurecompute.arm.domain.VirtualMachineInstance;
 import org.jclouds.azurecompute.arm.functions.ParseJobStatus;
-import org.jclouds.compute.options.TemplateOptions;
+import org.jclouds.compute.ComputeService;
 import org.jclouds.compute.ComputeServiceAdapter;
 import org.jclouds.compute.config.ComputeServiceAdapterContextModule;
 import org.jclouds.compute.domain.Hardware;
 import org.jclouds.compute.domain.NodeMetadata;
+import org.jclouds.compute.extensions.ImageExtension;
+import org.jclouds.compute.options.TemplateOptions;
 import org.jclouds.compute.reference.ComputeServiceConstants;
-import org.jclouds.compute.strategy.CreateNodesInGroupThenAddToSet;
-import org.jclouds.compute.reference.ComputeServiceConstants.Timeouts;
 import org.jclouds.compute.reference.ComputeServiceConstants.PollPeriod;
+import org.jclouds.compute.reference.ComputeServiceConstants.Timeouts;
+import org.jclouds.compute.strategy.CreateNodesInGroupThenAddToSet;
+import 
org.jclouds.compute.strategy.PopulateDefaultLoginCredentialsForImageStrategy;
+import org.jclouds.logging.Logger;
 
-import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.OPERATION_TIMEOUT;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.inject.Inject;
+import com.google.inject.Provides;
+import com.google.inject.TypeLiteral;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_DATADISKSIZE;
+import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_IMAGE_LOGIN;
+import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_SUBNET_ADDRESS_PREFIX;
+import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_VNET_ADDRESS_SPACE_PREFIX;
+import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.IMAGE_PUBLISHERS;
 import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.OPERATION_POLL_INITIAL_PERIOD;
 import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.OPERATION_POLL_MAX_PERIOD;
+import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.OPERATION_TIMEOUT;
+import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.RESOURCE_GROUP_NAME;
 import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.TCP_RULE_FORMAT;
 import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.TCP_RULE_REGEXP;
-import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.RESOURCE_GROUP_NAME;
-import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.IMAGE_PUBLISHERS;
-import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_IMAGE_LOGIN;
-import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_VNET_ADDRESS_SPACE_PREFIX;
-import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_SUBNET_ADDRESS_PREFIX;
 import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.TIMEOUT_RESOURCE_DELETED;
-import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.DEFAULT_DATADISKSIZE;
-
+import static 
org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_IMAGE_AVAILABLE;
 import static 
org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_SUSPENDED;
-import static org.jclouds.util.Predicates2.retry;
 import static 
org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED;
-import static 
org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_IMAGE_AVAILABLE;
-
-import com.google.common.base.Function;
-import com.google.inject.Inject;
-import com.google.inject.TypeLiteral;
-import com.google.common.base.Predicate;
-import static com.google.common.base.Preconditions.checkNotNull;
-import com.google.common.annotations.VisibleForTesting;
-import java.net.URI;
-import java.util.List;
-
-
-import org.jclouds.compute.extensions.ImageExtension;
-import 
org.jclouds.compute.strategy.PopulateDefaultLoginCredentialsForImageStrategy;
-import org.jclouds.azurecompute.arm.compute.AzureComputeService;
-import org.jclouds.compute.ComputeService;
-import org.jclouds.logging.Logger;
+import static org.jclouds.util.Predicates2.retry;
 
 public class AzureComputeServiceContextModule
         extends ComputeServiceAdapterContextModule<VMDeployment, VMHardware, 
VMImage, Location> {
@@ -209,38 +206,31 @@ public class AzureComputeServiceContextModule
 
    @Provides
    @Named(TIMEOUT_NODE_TERMINATED)
-   protected Predicate<URI> provideNodeTerminatedPredicate(final 
AzureComputeApi api, Timeouts timeouts,
-                                                           PollPeriod 
pollPeriod) {
+   protected Predicate<URI> provideNodeTerminatedPredicate(final 
AzureComputeApi api, Timeouts timeouts, PollPeriod pollPeriod) {
       return retry(new ActionDonePredicate(api), timeouts.nodeTerminated, 
pollPeriod.pollInitialPeriod,
               pollPeriod.pollMaxPeriod);
    }
 
    @Provides
    @Named(TIMEOUT_IMAGE_AVAILABLE)
-   protected Predicate<URI> provideImageAvailablePredicate(final 
AzureComputeApi api, Timeouts timeouts,
-                                                               PollPeriod 
pollPeriod) {
+   protected Predicate<URI> provideImageAvailablePredicate(final 
AzureComputeApi api, Timeouts timeouts, PollPeriod pollPeriod) {
       return retry(new ImageDonePredicate(api), timeouts.imageAvailable, 
pollPeriod.pollInitialPeriod,
               pollPeriod.pollMaxPeriod);
    }
 
    @Provides
    @Named(TIMEOUT_RESOURCE_DELETED)
-   protected Predicate<URI> provideResourceDeletedPredicate(final 
AzureComputeApi api, Timeouts timeouts,
-                                                            PollPeriod 
pollPeriod) {
+   protected Predicate<URI> provideResourceDeletedPredicate(final 
AzureComputeApi api, Timeouts timeouts, PollPeriod pollPeriod) {
       return retry(new ActionDonePredicate(api), timeouts.nodeTerminated, 
pollPeriod.pollInitialPeriod,
               pollPeriod.pollMaxPeriod);
    }
 
    @Provides
    @Named(TIMEOUT_NODE_SUSPENDED)
-   protected Predicate<String> provideNodeSuspendedPredicate(final 
AzureComputeApi api,
-                                                             final 
AzureComputeServiceContextModule.AzureComputeConstants azureComputeConstants,
-                                                             Timeouts timeouts,
-                                                           PollPeriod 
pollPeriod) {
-
+   protected Predicate<String> provideNodeSuspendedPredicate(final 
AzureComputeApi api, final 
AzureComputeServiceContextModule.AzureComputeConstants azureComputeConstants,
+                                                             Timeouts 
timeouts, PollPeriod pollPeriod) {
       String azureGroup = azureComputeConstants.azureResourceGroup();
-      return retry(new NodeSuspendedPredicate(api, azureGroup), 
timeouts.nodeSuspended, pollPeriod.pollInitialPeriod,
-              pollPeriod.pollMaxPeriod);
+      return retry(new NodeSuspendedPredicate(api, azureGroup), 
timeouts.nodeSuspended, pollPeriod.pollInitialPeriod, pollPeriod.pollMaxPeriod);
    }
 
    @VisibleForTesting
@@ -272,6 +262,7 @@ public class AzureComputeServiceContextModule
       @Override
       public boolean apply(URI uri) {
          checkNotNull(uri, "uri cannot be null");
+         if (api.getJobApi().jobStatus(uri) != ParseJobStatus.JobStatus.DONE) 
return false;
          List<ResourceDefinition> definitions = 
api.getJobApi().captureStatus(uri);
          return definitions != null;
       }
@@ -292,7 +283,9 @@ public class AzureComputeServiceContextModule
       public boolean apply(String name) {
          checkNotNull(name, "name cannot be null");
          String status = "";
-         List<VirtualMachineInstance.VirtualMachineStatus> statuses = 
api.getVirtualMachineApi(this.azureGroup).getInstanceDetails(name).statuses();
+         VirtualMachineInstance virtualMachineInstance = 
api.getVirtualMachineApi(this.azureGroup).getInstanceDetails(name);
+         if (virtualMachineInstance == null) return false;
+         List<VirtualMachineInstance.VirtualMachineStatus> statuses = 
virtualMachineInstance.statuses();
          for (int c = 0; c < statuses.size(); c++) {
             if (statuses.get(c).code().substring(0, 10).equals("PowerState")) {
                status = statuses.get(c).displayStatus();

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/c458bafd/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/DeploymentApi.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/DeploymentApi.java
 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/DeploymentApi.java
index 550f8ea..33c929a 100644
--- 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/DeploymentApi.java
+++ 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/features/DeploymentApi.java
@@ -16,35 +16,34 @@
  */
 package org.jclouds.azurecompute.arm.features;
 
+import java.net.URI;
+import java.util.List;
+
 import javax.inject.Named;
+import javax.ws.rs.Consumes;
 import javax.ws.rs.DELETE;
+import javax.ws.rs.GET;
 import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.Consumes;
 import javax.ws.rs.PUT;
-import javax.ws.rs.GET;
-import javax.ws.rs.Produces;
+import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 
 import org.jclouds.Fallbacks;
 import org.jclouds.Fallbacks.EmptyListOnNotFoundOr404;
 import org.jclouds.Fallbacks.NullOnNotFoundOr404;
-
 import org.jclouds.azurecompute.arm.domain.Deployment;
 import org.jclouds.azurecompute.arm.functions.URIParser;
 import org.jclouds.oauth.v2.filters.OAuthFilter;
-import org.jclouds.rest.annotations.QueryParams;
-import org.jclouds.rest.annotations.RequestFilters;
 import org.jclouds.rest.annotations.Fallback;
 import org.jclouds.rest.annotations.Payload;
 import org.jclouds.rest.annotations.PayloadParam;
+import org.jclouds.rest.annotations.QueryParams;
+import org.jclouds.rest.annotations.RequestFilters;
 import org.jclouds.rest.annotations.ResponseParser;
 import org.jclouds.rest.annotations.SelectJson;
 
-import java.net.URI;
-import java.util.List;
-
 /**
  * - create deployment
  * - delete deployment

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/c458bafd/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/functions/URIParser.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/functions/URIParser.java
 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/functions/URIParser.java
index 78fd10d..f67e7e2 100644
--- 
a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/functions/URIParser.java
+++ 
b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/functions/URIParser.java
@@ -15,12 +15,13 @@
  * limitations under the License.
  */
 package org.jclouds.azurecompute.arm.functions;
-import com.google.common.base.Function;
-import org.jclouds.http.HttpResponse;
+import java.net.URI;
 
 import javax.inject.Singleton;
 
-import java.net.URI;
+import org.jclouds.http.HttpResponse;
+
+import com.google.common.base.Function;
 /**
  * Parses job status from http response
  */
@@ -31,7 +32,7 @@ public class URIParser implements Function<HttpResponse, URI> 
{
          String uri = from.getFirstHeaderOrNull("Location");
          return URI.create(uri);
 
-      } else if (from.getStatusCode() == 200){
+      } else if (from.getStatusCode() == 200 || from.getStatusCode() == 204){
          return null;
       }
       throw new IllegalStateException("did not receive expected response code 
and header in: " + from);

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/c458bafd/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java
 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java
index b579f6a..d6fdd3c 100644
--- 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java
+++ 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureComputeServiceLiveTest.java
@@ -44,12 +44,14 @@ import org.testng.annotations.Test;
 import com.google.inject.Module;
 
 import static com.google.common.base.Preconditions.checkNotNull;
+import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.IMAGE_PUBLISHERS;
 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.TEMPLATE;
 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.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED;
+import static 
org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_PORT_OPEN;
+import static 
org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_SCRIPT_COMPLETE;
 
 /**
  * Live tests for the {@link org.jclouds.compute.ComputeService} integration.
@@ -90,6 +92,8 @@ public class AzureComputeServiceLiveTest extends 
BaseComputeServiceLiveTest {
       properties.setProperty(TIMEOUT_NODE_TERMINATED, scriptTimeout + "");
       properties.setProperty(TIMEOUT_NODE_SUSPENDED, scriptTimeout + "");
       properties.put(RESOURCE_GROUP_NAME, "a4");
+      properties.put(TEMPLATE, "locationId=westeurope");
+      properties.put(IMAGE_PUBLISHERS, "Canonical");
 
       AzureLiveTestUtils.defaultProperties(properties);
       checkNotNull(setIfTestSystemPropertyPresent(properties, 
"oauth.endpoint"), "test.oauth.endpoint");

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/c458bafd/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureTemplateBuilderLiveTest.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureTemplateBuilderLiveTest.java
 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureTemplateBuilderLiveTest.java
index 652c12a..8756240 100644
--- 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureTemplateBuilderLiveTest.java
+++ 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/compute/AzureTemplateBuilderLiveTest.java
@@ -16,7 +16,10 @@
  */
 package org.jclouds.azurecompute.arm.compute;
 
-import com.google.inject.Module;
+import java.util.Properties;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
 import org.jclouds.azurecompute.arm.AzureComputeProviderMetadata;
 import org.jclouds.azurecompute.arm.internal.AzureLiveTestUtils;
 import org.jclouds.compute.internal.BaseTemplateBuilderLiveTest;
@@ -24,11 +27,8 @@ import org.jclouds.providers.ProviderMetadata;
 import org.jclouds.sshj.config.SshjSshClientModule;
 import org.testng.annotations.Test;
 
-import java.util.Properties;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-
 import com.google.common.collect.ImmutableSet;
+import com.google.inject.Module;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static 
org.jclouds.azurecompute.arm.config.AzureComputeProperties.RESOURCE_GROUP_NAME;
@@ -41,7 +41,7 @@ public class AzureTemplateBuilderLiveTest extends 
BaseTemplateBuilderLiveTest {
 
    @Override
    protected Set<String> getIso3166Codes() {
-      return ImmutableSet.of("US-IA", "US-VA", "US-IL", "US-TX", "US-CA", 
"IE", "NL", "HK", "SG", "JP-11", "JP-27", "BR", "AU-NSW", "AU-VIC");
+      return ImmutableSet.of("US-IA", "US-VA", "US-IL", "US-TX", "US-CA", 
"IE", "NL", "HK", "SG", "JP-11", "JP-27", "BR", "AU-NSW", "AU-VIC", "IN-GA", 
"IN-TN", "IN-MH", "CN-SH", "CN-BJ", "CA-ON", "CA-QC");
    }
 
    public AzureTemplateBuilderLiveTest() {

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/c458bafd/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentApiLiveTest.java
 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentApiLiveTest.java
index 7493a63..7476828 100644
--- 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentApiLiveTest.java
+++ 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentApiLiveTest.java
@@ -16,14 +16,16 @@
  */
 package org.jclouds.azurecompute.arm.features;
 
-import com.google.common.base.Predicate;
-import com.google.common.net.UrlEscapers;
+import java.net.URI;
+import java.util.List;
+
 import org.jclouds.azurecompute.arm.compute.options.AzureTemplateOptions;
 import org.jclouds.azurecompute.arm.domain.Deployment;
 import org.jclouds.azurecompute.arm.domain.Deployment.ProvisioningState;
 import org.jclouds.azurecompute.arm.domain.DeploymentBody;
 import org.jclouds.azurecompute.arm.domain.DeploymentProperties;
-import org.jclouds.azurecompute.arm.functions.ParseJobStatus;
+import org.jclouds.azurecompute.arm.domain.Subnet;
+import org.jclouds.azurecompute.arm.domain.VirtualNetwork;
 import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest;
 import org.jclouds.azurecompute.arm.util.DeploymentTemplateBuilder;
 import org.jclouds.compute.domain.Hardware;
@@ -39,25 +41,25 @@ import org.jclouds.domain.Location;
 import org.jclouds.domain.LocationBuilder;
 import org.jclouds.domain.LocationScope;
 import org.jclouds.util.Predicates2;
+import org.testng.Assert;
+import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-import java.net.URI;
-import java.util.List;
+import com.google.common.base.Predicate;
+import com.google.common.net.UrlEscapers;
 
-import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
 
-@Test(groups = "live", testName = "DeploymentApiLiveTest", singleThreaded = 
true)
+@Test(testName = "DeploymentApiLiveTest", singleThreaded = true)
 public class DeploymentApiLiveTest extends BaseAzureComputeApiLiveTest {
-   private int maxTestDuration = 190;
 
-   private String resourceName;
+   private String resourceGroupName;
    private String deploymentName;
-   private String rawtemplate;
-   private String rawparameters;
-   private String rawbadParameters;
+   private String subnetId;
+
    private String properties;
    private String badProperties;
 
@@ -65,16 +67,37 @@ public class DeploymentApiLiveTest extends 
BaseAzureComputeApiLiveTest {
    @Override
    public void setup() {
       super.setup();
-      resourceName = getResourceGroupName();
-      Long now = System.currentTimeMillis();
-      deploymentName = "jc" + now;
+      resourceGroupName = String.format("rg-%s-%s", 
this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));
+      assertNotNull(createResourceGroup(resourceGroupName));
+      deploymentName = "jc" + System.currentTimeMillis();
+      String virtualNetworkName = String.format("vn-%s-%s", 
this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));
+      String storageAccountName = String.format("st%s%s", 
System.getProperty("user.name"), RAND);
 
-      rawtemplate = 
"{\"$schema\":\"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#\",\"contentVersion\":\"1.0.0.0\",\"parameters\":{\"newStorageAccountName\":{\"type\":\"string\",\"metadata\":{\"description\":\"Name
 of the Storage 
Account\"}},\"storageAccountType\":{\"type\":\"string\",\"defaultValue\":\"Standard_LRS\",\"allowedValues\":[\"Standard_LRS\",\"Standard_GRS\",\"Standard_ZRS\"],\"metadata\":{\"description\":\"Storage
 Account type\"}},\"location\":{\"type\":\"string\",\"allowedValues\":[\"East 
US\",\"West US\",\"West Europe\",\"East Asia\",\"Southeast 
Asia\"],\"metadata\":{\"description\":\"Location of storage 
account\"}}},\"resources\":[{\"type\":\"Microsoft.Storage/storageAccounts\",\"name\":\"[parameters('newStorageAccountName')]\",\"apiVersion\":\"2015-05-01-preview\",\"location\":\"[parameters('location')]\",\"properties\":{\"accountType\":\"[parameters('storageAccountType')]\"}}]}";
-      rawparameters = "{\"newStorageAccountName\":{\"value\":\"" + 
resourceName + 
"\"},\"storageAccountType\":{\"value\":\"Standard_LRS\"},\"location\":{\"value\":\"West
 US\"}}";
-      rawbadParameters = "{\"newStorageAccountName\":{\"value\":\"" + 
resourceName + 
"\"},\"storageAccountType\":{\"value\":\"Standard_LRS\"},\"location\":{\"value\":\"West\"}}";
+      String rawtemplate = 
"{\"$schema\":\"https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#\",\"contentVersion\":\"1.0.0.0\",\"parameters\":{\"newStorageAccountName\":{\"type\":\"string\",\"metadata\":{\"description\":\"Name
 of the Storage 
Account\"}},\"storageAccountType\":{\"type\":\"string\",\"defaultValue\":\"Standard_LRS\",\"allowedValues\":[\"Standard_LRS\",\"Standard_GRS\",\"Standard_ZRS\"],\"metadata\":{\"description\":\"Storage
 Account type\"}},\"location\":{\"type\":\"string\",\"allowedValues\":[\"East 
US\",\"West US\",\"West Europe\",\"East Asia\",\"Southeast 
Asia\"],\"metadata\":{\"description\":\"Location of storage 
account\"}}},\"resources\":[{\"type\":\"Microsoft.Storage/storageAccounts\",\"name\":\"[parameters('newStorageAccountName')]\",\"apiVersion\":\"2015-05-01-preview\",\"location\":\"[parameters('location')]\",\"properties\":{\"accountType\":\"[parameters('storageAccountType')]\"}}]}";
+      String rawparameters = "{\"newStorageAccountName\":{\"value\":\"" + 
storageAccountName + 
"\"},\"storageAccountType\":{\"value\":\"Standard_LRS\"},\"location\":{\"value\":\"West
 US\"}}";
+      String rawbadParameters = "{\"newStorageAccountName\":{\"value\":\"" + 
storageAccountName + 
"\"},\"storageAccountType\":{\"value\":\"Standard_LRS\"},\"location\":{\"value\":\"West\"}}";
 
       properties = getPutBody(rawtemplate, "Incremental", rawparameters);
       badProperties = getPutBody(rawtemplate, "Incremental", rawbadParameters);
+
+      //Subnets belong to a virtual network so that needs to be created first
+      VirtualNetwork vn = createDefaultVirtualNetwork(resourceGroupName, 
virtualNetworkName, "10.3.0.0/16", LOCATION);
+      assertNotNull(vn);
+
+      //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.3.0.0/23");
+      assertNotNull(subnet);
+      assertNotNull(subnet.id());
+      subnetId = subnet.id();
+   }
+
+   @AfterClass
+   @Override
+   protected void tearDown() {
+      super.tearDown();
+      URI uri = api.getResourceGroupApi().delete(resourceGroupName);
+      assertResourceDeleted(uri);
    }
 
    private String getPutBody(String template, String mode, String parameters) {
@@ -91,7 +114,7 @@ public class DeploymentApiLiveTest extends 
BaseAzureComputeApiLiveTest {
 
    private Template getTemplate(TemplateOptions options) {
       Location provider = (new 
LocationBuilder()).scope(LocationScope.PROVIDER).id("azurecompute-arm").description("azurecompute-arm").build();
-      Location region = (new 
LocationBuilder()).scope(LocationScope.REGION).id("northeurope").description("North
 Europe").parent(provider).build();
+      Location region = (new 
LocationBuilder()).scope(LocationScope.REGION).id(LOCATION).description("West 
Europe").parent(provider).build();
 
       OperatingSystem os = OperatingSystem.builder()
               .family(OsFamily.UBUNTU)
@@ -116,11 +139,11 @@ public class DeploymentApiLiveTest extends 
BaseAzureComputeApiLiveTest {
 
    private DeploymentTemplateBuilder 
getDeploymentTemplateBuilderWithOptions(TemplateOptions options) {
       Template template = getTemplate(options);
-      DeploymentTemplateBuilder templateBuilder = 
api.deploymentTemplateFactory().create(resourceName, deploymentName, template);
+      DeploymentTemplateBuilder templateBuilder = 
api.deploymentTemplateFactory().create(resourceGroupName, deploymentName, 
template);
       return templateBuilder;
    }
 
-   @Test(groups = "live")
+   @Test
    public void testValidate(){
       Deployment deploymentInvalid = null;
       try {
@@ -138,12 +161,13 @@ public class DeploymentApiLiveTest extends 
BaseAzureComputeApiLiveTest {
       }
       assertNotNull(deploymentValid);
    }
-   @Test(groups = "live")
+   @Test
    public void testCreate() {
       String rsakey = new String("ssh-rsa 
AAAAB3NzaC1yc2EAAAABJQAAAQEAmfk/QSF0pvnrpdz+Ah2KulGruKU+8FFBdlw938MpOysRdmp7uwpH6Z7+5VNGNdxFIAyc/W3UaZXF9hTsU8+78TlwkZpsr2mzU+ycu37XLAQ8Uv7hjsAN0DkKKPrZ9lgUUfZVKV/8E/JIAs03gIbL6zO3y7eYJQ5fNeZb+nji7tQT+YLpGq/FDegvraPKVMQbCSCZhsHyWhdPLyFlu9/30npZ0ahYOPI/KyZxFDtM/pHp88+ZAk9Icq5owaLRWcJQqrBGWqjbZnHtjdDqvHZ+C0wPhdJZPyfkHOrSYTwSQBXfX4JLRRCz3J1jf62MbQWT1o6Y4JEs1ZP1Skxu6zR96Q==
 mocktest");
 
-      TemplateOptions options = new AzureTemplateOptions();
+      AzureTemplateOptions options = new AzureTemplateOptions();
       options.authorizePublicKey(rsakey);
+      options.subnetId(subnetId);
       DeploymentTemplateBuilder templateBuilder = 
getDeploymentTemplateBuilderWithOptions(options);
       DeploymentBody deploymentTemplateBody = 
templateBuilder.getDeploymentTemplate();
 
@@ -152,7 +176,6 @@ public class DeploymentApiLiveTest extends 
BaseAzureComputeApiLiveTest {
       String deploymentTemplate = 
templateBuilder.getDeploymentTemplateJson(properties);
       deploymentTemplate = 
UrlEscapers.urlFormParameterEscaper().escape(deploymentTemplate);
 
-
       Deployment deploymentValid = api().validate(deploymentName, 
deploymentTemplate);
       assertNotNull(deploymentValid);
 
@@ -165,9 +188,10 @@ public class DeploymentApiLiveTest extends 
BaseAzureComputeApiLiveTest {
          public boolean apply(String name) {
             Deployment dp = api().get(deploymentName);
             ProvisioningState state = 
ProvisioningState.fromValue(dp.properties().provisioningState());
+            if (state == ProvisioningState.FAILED) Assert.fail();
             return state == ProvisioningState.SUCCEEDED;
          }
-      }, 60 * maxTestDuration * 1000).apply(deploymentName);
+      }, 60 * 20 * 1000).apply(deploymentName);
       assertTrue(jobDone, "create operation did not complete in the configured 
timeout");
 
       Deployment dp = api().get(deploymentName);
@@ -176,7 +200,7 @@ public class DeploymentApiLiveTest extends 
BaseAzureComputeApiLiveTest {
    }
 
 
-   @Test(groups = "live", dependsOnMethods = "testCreate")
+   @Test(dependsOnMethods = "testCreate")
    public void testGetDeployment() {
       Deployment deployment = api().get(deploymentName);
       assertNotNull(deployment);
@@ -184,7 +208,7 @@ public class DeploymentApiLiveTest extends 
BaseAzureComputeApiLiveTest {
       assertTrue(state == ProvisioningState.SUCCEEDED);
    }
 
-   @Test(groups = "live", dependsOnMethods = "testCreate")
+   @Test(dependsOnMethods = "testCreate")
    public void testListDeployments() {
       List<Deployment> deployments = api().list();
       assertTrue(deployments.size() > 0);
@@ -197,31 +221,20 @@ public class DeploymentApiLiveTest extends 
BaseAzureComputeApiLiveTest {
          }
       }
       assertTrue(deploymentFound);
-
    }
 
-   @Test(groups = "live", dependsOnMethods = {"testGetDeployment", 
"testListDeployments"}, alwaysRun = true)
+   @Test(dependsOnMethods = {"testGetDeployment", "testListDeployments"})
    public void testDelete() throws Exception {
       List<Deployment> deployments = api().list();
       for (Deployment d : deployments) {
          if (d.name().contains("jc")) {
             URI uri = api().delete(d.name());
-            assertNotNull(uri);
-            assertTrue(uri.toString().contains("api-version"));
-            assertTrue(uri.toString().contains("operationresults"));
-
-            boolean jobDone = Predicates2.retry(new Predicate<URI>() {
-               @Override
-               public boolean apply(URI uri) {
-                  return ParseJobStatus.JobStatus.NO_CONTENT == 
api.getJobApi().jobStatus(uri);
-               }
-            }, 60 * maxTestDuration * 1000).apply(uri);
-            assertTrue(jobDone, "delete operation did not complete in the 
configured timeout");
+            assertResourceDeleted(uri);
          }
       }
    }
 
    private DeploymentApi api() {
-      return api.getDeploymentApi(resourceName);
+      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/LocationApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LocationApiLiveTest.java
 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LocationApiLiveTest.java
index fbfa88e..4e37294 100644
--- 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LocationApiLiveTest.java
+++ 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/LocationApiLiveTest.java
@@ -16,6 +16,8 @@
  */
 package org.jclouds.azurecompute.arm.features;
 
+import java.util.List;
+
 import org.jclouds.azurecompute.arm.domain.Location;
 import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest;
 import org.testng.annotations.Test;
@@ -28,10 +30,9 @@ public class LocationApiLiveTest extends 
BaseAzureComputeApiLiveTest {
 
    @Test
    public void testList() {
-      assertTrue(!api().list().isEmpty());
-
-      for (Location location : api().list()) {
-         assertTrue(!location.id().isEmpty());
+      List<Location> locations = api().list();
+      assertTrue(!locations.isEmpty());
+      for (Location location : locations) {
          checkLocation(location);
       }
    }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/c458bafd/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/NetworkInterfaceCardApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/NetworkInterfaceCardApiLiveTest.java
 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/NetworkInterfaceCardApiLiveTest.java
index 34917ac..0614d99 100644
--- 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/NetworkInterfaceCardApiLiveTest.java
+++ 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/NetworkInterfaceCardApiLiveTest.java
@@ -16,72 +16,64 @@
  */
 package org.jclouds.azurecompute.arm.features;
 
-import com.google.common.collect.ImmutableMap;
-import com.google.common.base.Predicate;
+import java.net.URI;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
 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 org.jclouds.azurecompute.arm.domain.Subnet;
-import org.jclouds.azurecompute.arm.domain.VirtualNetwork;
-import org.jclouds.azurecompute.arm.functions.ParseJobStatus;
 import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest;
-import org.jclouds.util.Predicates2;
+import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-import java.net.URI;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-
+import com.google.common.collect.ImmutableMap;
 
-import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertTrue;
-import static org.testng.Assert.assertEquals;
 
 @Test(groups = "live", singleThreaded = true)
 public class NetworkInterfaceCardApiLiveTest extends 
BaseAzureComputeApiLiveTest {
 
-   private String resourcegroup;
-   private String subnetID;
+   private String resourceGroupName;
+   private String subnetId;
+   private String nicName;
 
    @BeforeClass
    @Override
    public void setup() {
       super.setup();
-
-      resourcegroup = getResourceGroupName();
+      resourceGroupName = String.format("rg-%s-%s", 
this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));
+      assertNotNull(api.getResourceGroupApi().create(resourceGroupName, 
LOCATION, ImmutableMap.<String, String>of()));
+      String virtualNetworkName = String.format("vn-%s-%s", 
this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));
+      nicName = String.format("nic-%s-%s", 
this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));
+      String subnetName = String.format("s-%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);
-      assertNotNull(vn);
+      assertNotNull(createDefaultVirtualNetwork(resourceGroupName, 
virtualNetworkName, "10.2.0.0/16", LOCATION));
 
       //Subnet needs to be up & running before NIC can be created
-      Subnet subnet = getOrCreateSubnet(DEFAULT_SUBNET_NAME, 
VIRTUAL_NETWORK_NAME);
+      Subnet subnet = createDefaultSubnet(resourceGroupName, subnetName, 
virtualNetworkName, "10.2.0.0/23");
       assertNotNull(subnet);
       assertNotNull(subnet.id());
-      subnetID = subnet.id();
+      subnetId = subnet.id();
    }
 
-
-   @Test(groups = "live")
-   public void deleteNetworkInterfaceCardResourceDoesNotExist() {
-
-      final NetworkInterfaceCardApi nicApi = 
api.getNetworkInterfaceCardApi(resourcegroup);
-      URI uri = nicApi.delete(NETWORKINTERFACECARD_NAME);
-      assertNull(uri);
+   @AfterClass
+   @Override
+   protected void tearDown() {
+      super.tearDown();
+      deleteResourceGroup(resourceGroupName);
    }
 
-   @Test(groups = "live", dependsOnMethods = 
"deleteNetworkInterfaceCardResourceDoesNotExist")
+   @Test
    public void createNetworkInterfaceCard() {
-
-      final NetworkInterfaceCardApi nicApi = 
api.getNetworkInterfaceCardApi(resourcegroup);
-
-
-      //Create properties object
       //Create properties object
       final NetworkInterfaceCardProperties networkInterfaceCardProperties =
               NetworkInterfaceCardProperties.builder().ipConfigurations(
@@ -89,66 +81,48 @@ public class NetworkInterfaceCardApiLiveTest extends 
BaseAzureComputeApiLiveTest
                               .name("myipconfig")
                               .properties(IpConfigurationProperties.builder()
                                       .privateIPAllocationMethod("Dynamic")
-                                      
.subnet(IdReference.create(subnetID)).build()
+                                      
.subnet(IdReference.create(subnetId)).build()
                               ).build()
                       )).build();
 
       final Map<String, String> tags = ImmutableMap.of("jclouds", "livetest");
-      NetworkInterfaceCard nic = 
nicApi.createOrUpdate(NETWORKINTERFACECARD_NAME, LOCATION, 
networkInterfaceCardProperties, tags);
+      NetworkInterfaceCard nic = api().createOrUpdate(nicName, LOCATION, 
networkInterfaceCardProperties, tags);
 
-      assertEquals(nic.name(), NETWORKINTERFACECARD_NAME);
+      assertEquals(nic.name(), nicName);
       assertEquals(nic.location(), LOCATION);
       assertTrue(nic.properties().ipConfigurations().size() > 0);
       assertEquals(nic.properties().ipConfigurations().get(0).name(), 
"myipconfig");
       
assertEquals(nic.properties().ipConfigurations().get(0).properties().privateIPAllocationMethod(),
 "Dynamic");
-      
assertEquals(nic.properties().ipConfigurations().get(0).properties().subnet().id(),
 subnetID);
+      
assertEquals(nic.properties().ipConfigurations().get(0).properties().subnet().id(),
 subnetId);
       assertEquals(nic.tags().get("jclouds"), "livetest");
-
    }
 
-   @Test(groups = "live", dependsOnMethods = "createNetworkInterfaceCard")
+   @Test(dependsOnMethods = "createNetworkInterfaceCard")
    public void getNetworkInterfaceCard() {
+      NetworkInterfaceCard nic = api().get(nicName);
 
-      final NetworkInterfaceCardApi nicApi = 
api.getNetworkInterfaceCardApi(resourcegroup);
-
-      NetworkInterfaceCard nic = nicApi.get(NETWORKINTERFACECARD_NAME);
-
-      assertEquals(nic.name(), NETWORKINTERFACECARD_NAME);
+      assertEquals(nic.name(), nicName);
       assertEquals(nic.location(), LOCATION);
       assertTrue(nic.properties().ipConfigurations().size() > 0);
       assertEquals(nic.properties().ipConfigurations().get(0).name(), 
"myipconfig");
       
assertEquals(nic.properties().ipConfigurations().get(0).properties().privateIPAllocationMethod(),
 "Dynamic");
-      
assertEquals(nic.properties().ipConfigurations().get(0).properties().subnet().id(),
 subnetID);
+      
assertEquals(nic.properties().ipConfigurations().get(0).properties().subnet().id(),
 subnetId);
    }
 
-   @Test(groups = "live", dependsOnMethods = "createNetworkInterfaceCard")
+   @Test(dependsOnMethods = "createNetworkInterfaceCard")
    public void listNetworkInterfaceCards() {
-
-      final NetworkInterfaceCardApi nicApi = 
api.getNetworkInterfaceCardApi(resourcegroup);
-
-      List<NetworkInterfaceCard> nicList = nicApi.list();
-
-      assertTrue(nicList.contains(nicApi.get(NETWORKINTERFACECARD_NAME)));
+      List<NetworkInterfaceCard> nicList = api().list();
+      assertTrue(nicList.contains(api().get(nicName)));
    }
 
-
-   @Test(groups = "live", dependsOnMethods = {"listNetworkInterfaceCards", 
"getNetworkInterfaceCard"}, alwaysRun = true)
+   @Test(dependsOnMethods = {"listNetworkInterfaceCards", 
"getNetworkInterfaceCard"})
    public void deleteNetworkInterfaceCard() {
+      URI uri = api().delete(nicName);
+      assertResourceDeleted(uri);
+   }
 
-      final NetworkInterfaceCardApi nicApi = 
api.getNetworkInterfaceCardApi(resourcegroup);
-      URI uri = nicApi.delete(NETWORKINTERFACECARD_NAME);
-      if (uri != null) {
-         assertTrue(uri.toString().contains("api-version"));
-         assertTrue(uri.toString().contains("operationresults"));
-
-         boolean jobDone = Predicates2.retry(new Predicate<URI>() {
-            @Override
-            public boolean apply(URI uri) {
-               return ParseJobStatus.JobStatus.DONE == 
api.getJobApi().jobStatus(uri);
-            }
-         }, 60 * 2 * 1000 /* 2 minute timeout */).apply(uri);
-         assertTrue(jobDone, "delete operation did not complete in the 
configured timeout");
-      }
+   private NetworkInterfaceCardApi api() {
+      return api.getNetworkInterfaceCardApi(resourceGroupName);
    }
 
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/c458bafd/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/NetworkSecurityGroupApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/NetworkSecurityGroupApiLiveTest.java
 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/NetworkSecurityGroupApiLiveTest.java
index 095c0e2..b66b150 100644
--- 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/NetworkSecurityGroupApiLiveTest.java
+++ 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/NetworkSecurityGroupApiLiveTest.java
@@ -16,99 +16,72 @@
  */
 package org.jclouds.azurecompute.arm.features;
 
-import com.google.common.base.Predicate;
+import java.net.URI;
+import java.util.List;
+
 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.NetworkSecurityRuleProperties.Access;
-import 
org.jclouds.azurecompute.arm.domain.NetworkSecurityRuleProperties.Direction;
-import 
org.jclouds.azurecompute.arm.domain.NetworkSecurityRuleProperties.Protocol;
-import org.jclouds.azurecompute.arm.functions.ParseJobStatus;
 import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest;
-
-import org.jclouds.util.Predicates2;
+import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-
-import java.util.ArrayList;
-import java.util.List;
-import java.net.URI;
-
-import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
-import static org.testng.AssertJUnit.assertNull;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
 
 @Test(groups = "live", singleThreaded = true)
 public class NetworkSecurityGroupApiLiveTest extends 
BaseAzureComputeApiLiveTest {
 
-   private String resourcegroup;
-   private static String DEFAULT_NSG_NAME = "testNetworkSecurityGroup";
-
-   private NetworkSecurityGroup createGroup() {
-      NetworkSecurityRule rule = NetworkSecurityRule.create("denyallout", 
null, null,
-                     NetworkSecurityRuleProperties.builder()
-                                       .description("deny all out")
-                                       .protocol(Protocol.Tcp)
-                                       .sourcePortRange("*")
-                                       .destinationPortRange("*")
-                                       .sourceAddressPrefix("*")
-                                       .destinationAddressPrefix("*")
-                                       .access(Access.Deny)
-                                       .priority(4095)
-                                       .direction(Direction.Outbound)
-                                       .build());
-      ArrayList<NetworkSecurityRule> ruleList = new 
ArrayList<NetworkSecurityRule>();
-      ruleList.add(rule);
-      NetworkSecurityGroup nsg = NetworkSecurityGroup.create("samplensg", 
"westus", null,
-                                                             
NetworkSecurityGroupProperties.builder()
-                                                                               
        .securityRules(ruleList)
-                                                                               
        .build(),
-                                                             null);
-      return nsg;
-   }
+   private String resourceGroupName;
+   private static String nsgName = "testNetworkSecurityGroup";
 
    @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));
+      nsgName = String.format("nsg-%s-%s", 
this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));
    }
 
-   @Test(groups = "live")
+   @AfterClass
+   @Override
+   protected void tearDown() {
+      super.tearDown();
+      URI uri = deleteResourceGroup(resourceGroupName);
+      assertResourceDeleted(uri);
+   }
+
+   @Test
    public void deleteNetworkSecurityGroupDoesNotExist() {
-      final NetworkSecurityGroupApi nsgApi = 
api.getNetworkSecurityGroupApi(resourcegroup);
-      URI uri = nsgApi.delete(DEFAULT_NSG_NAME);
+      URI uri = api().delete(nsgName);
       assertNull(uri);
    }
 
-   @Test(groups = "live", dependsOnMethods = 
"deleteNetworkSecurityGroupDoesNotExist")
+   @Test(dependsOnMethods = "deleteNetworkSecurityGroupDoesNotExist")
    public void createNetworkSecurityGroup() {
-      final NetworkSecurityGroup nsg = createGroup();
+      final NetworkSecurityGroup nsg = newNetworkSecurityGroup(nsgName, 
LOCATION);
       assertNotNull(nsg);
 
-      final NetworkSecurityGroupApi nsgApi = 
api.getNetworkSecurityGroupApi(resourcegroup);
-      NetworkSecurityGroup result = nsgApi.createOrUpdate(DEFAULT_NSG_NAME,
+      NetworkSecurityGroup result = api().createOrUpdate(nsgName,
                                                   nsg.location(),
                                                   nsg.tags(),
                                                   nsg.properties());
       assertNotNull(result);
    }
 
-   @Test(groups = "live", dependsOnMethods = "createNetworkSecurityGroup")
+   @Test(dependsOnMethods = "createNetworkSecurityGroup")
    public void listNetworkSecurityGroups() {
-      final NetworkSecurityGroupApi nsgApi = 
api.getNetworkSecurityGroupApi(resourcegroup);
-      List<NetworkSecurityGroup> result = nsgApi.list();
+      List<NetworkSecurityGroup> result = api().list();
 
       // verify we have something
       assertNotNull(result);
       assertEquals(result.size(), 1);
 
       // check that the nework security group matches the one we originally 
passed in
-      NetworkSecurityGroup original = createGroup();
+      NetworkSecurityGroup original = newNetworkSecurityGroup(nsgName, 
LOCATION);
       NetworkSecurityGroup nsg = result.get(0);
       assertEquals(original.name(), nsg.name());
       assertEquals(original.location(), nsg.location());
@@ -122,31 +95,23 @@ public class NetworkSecurityGroupApiLiveTest extends 
BaseAzureComputeApiLiveTest
       assertTrue(originalRule.properties().equals(nsgRule.properties()));
    }
 
-   @Test(groups = "live", dependsOnMethods = {"listNetworkSecurityGroups", 
"getNetworkSecurityGroup"}, alwaysRun = true)
+   @Test(dependsOnMethods = {"listNetworkSecurityGroups", 
"getNetworkSecurityGroup"}, alwaysRun = true)
    public void deleteNetworkSecurityGroup() {
-      final NetworkSecurityGroupApi nsgApi = 
api.getNetworkSecurityGroupApi(resourcegroup);
-      URI uri = nsgApi.delete(DEFAULT_NSG_NAME);
-      if (uri != null) {
-         assertTrue(uri.toString().contains("api-version"));
-         assertTrue(uri.toString().contains("operationresults"));
-
-         boolean jobDone = Predicates2.retry(new Predicate<URI>() {
-            @Override
-            public boolean apply(URI uri) {
-               return ParseJobStatus.JobStatus.DONE == 
api.getJobApi().jobStatus(uri);
-            }
-         }, 60 * 2 * 1000 /* 2 minute timeout */).apply(uri);
-         assertTrue(jobDone, "delete operation did not complete in the 
configured timeout");
-      }
+      URI uri = api().delete(nsgName);
+      assertResourceDeleted(uri);
    }
 
-   @Test(groups = "live", dependsOnMethods = "createNetworkSecurityGroup")
+   @Test(dependsOnMethods = "createNetworkSecurityGroup")
    public void getNetworkSecurityGroup() {
-      final NetworkSecurityGroupApi nsgApi = 
api.getNetworkSecurityGroupApi(resourcegroup);
-      NetworkSecurityGroup nsg = nsgApi.get(DEFAULT_NSG_NAME);
+      NetworkSecurityGroup nsg = api().get(nsgName);
       assertNotNull(nsg);
       assertNotNull(nsg.etag());
-      assertEquals(nsg.name(), DEFAULT_NSG_NAME);
+      assertEquals(nsg.name(), nsgName);
+   }
+
+   private NetworkSecurityGroupApi api() {
+      return api.getNetworkSecurityGroupApi(resourceGroupName);
    }
+
 }
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/c458bafd/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/NetworkSecurityRuleApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/NetworkSecurityRuleApiLiveTest.java
 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/NetworkSecurityRuleApiLiveTest.java
index fbcd2b4..dba7063 100644
--- 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/NetworkSecurityRuleApiLiveTest.java
+++ 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/NetworkSecurityRuleApiLiveTest.java
@@ -16,160 +16,104 @@
  */
 package org.jclouds.azurecompute.arm.features;
 
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
+import java.net.URI;
+import java.util.List;
+
 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.NetworkSecurityRuleProperties.Access;
 import 
org.jclouds.azurecompute.arm.domain.NetworkSecurityRuleProperties.Direction;
 import 
org.jclouds.azurecompute.arm.domain.NetworkSecurityRuleProperties.Protocol;
-import org.jclouds.azurecompute.arm.functions.ParseJobStatus;
 import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest;
-
-import org.jclouds.util.Predicates2;
 import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.List;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
 
 import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertTrue;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
 
 @Test(groups = "live", singleThreaded = true)
 public class NetworkSecurityRuleApiLiveTest extends 
BaseAzureComputeApiLiveTest {
 
-   private String resourcegroup;
-   private static String DEFAULT_NSG_NAME = "testNetworkSecurityGroup";
+   private String resourceGroupName;
    private static String UNKNOWN_RULE_NAME = "ruledoesntexist";
-
-   private NetworkSecurityGroup createGroup() {
-      NetworkSecurityRule rule = NetworkSecurityRule.create("denyallout", 
null, null,
-              NetworkSecurityRuleProperties.builder()
-                      .description("deny all out")
-                      .protocol(Protocol.Tcp)
-                      .sourcePortRange("*")
-                      .destinationPortRange("*")
-                      .sourceAddressPrefix("*")
-                      .destinationAddressPrefix("*")
-                      .access(Access.Deny)
-                      .priority(4095)
-                      .direction(Direction.Outbound)
-                      .build());
-      ArrayList<NetworkSecurityRule> ruleList = new 
ArrayList<NetworkSecurityRule>();
-      ruleList.add(rule);
-      NetworkSecurityGroup nsg = NetworkSecurityGroup.create("samplensg", 
"westus", null,
-              NetworkSecurityGroupProperties.builder()
-                      .securityRules(ruleList)
-                      .build(),
-              null);
-      return nsg;
-   }
-
-   private NetworkSecurityRule createRule() {
-      NetworkSecurityRule rule = NetworkSecurityRule.create("allowalludpin", 
null, null,
-              NetworkSecurityRuleProperties.builder()
-                        .description("allow all udp in")
-                        .protocol(Protocol.Udp)
-                        .sourcePortRange("*")
-                        .destinationPortRange("*")
-                        .sourceAddressPrefix("*")
-                        .destinationAddressPrefix("*")
-                        .access(Access.Allow)
-                        .priority(4094)
-                        .direction(Direction.Inbound)
-                        .build());
-      return rule;
-   }
+   private String nsgName;
 
    @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));
+      nsgName = String.format("nsg-%s-%s", 
this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));
 
       // a network security group is needed
-      final NetworkSecurityGroup nsg = createGroup();
-      final NetworkSecurityGroupApi nsgApi = 
api.getNetworkSecurityGroupApi(resourcegroup);
-      NetworkSecurityGroup result = nsgApi.createOrUpdate(DEFAULT_NSG_NAME,
+      final NetworkSecurityGroup nsg = newNetworkSecurityGroup(nsgName, 
LOCATION);
+      
assertNotNull(api.getNetworkSecurityGroupApi(resourceGroupName).createOrUpdate(nsgName,
               nsg.location(),
               nsg.tags(),
-              nsg.properties());
+              nsg.properties()));
    }
 
-   @AfterClass(alwaysRun = true)
+   @AfterClass
    @Override
-   public void tearDown() {
-      // remove the security group we created
-      final NetworkSecurityGroupApi nsgApi = 
api.getNetworkSecurityGroupApi(resourcegroup);
-      URI uri = nsgApi.delete(DEFAULT_NSG_NAME);
-      if (uri != null) {
-         boolean jobDone = Predicates2.retry(new Predicate<URI>() {
-            @Override
-            public boolean apply(URI uri) {
-               return ParseJobStatus.JobStatus.DONE == 
api.getJobApi().jobStatus(uri);
-            }
-         }, 60 * 2 * 1000 /* 2 minute timeout */).apply(uri);
-      }
-
+   protected void tearDown() {
       super.tearDown();
+      URI uri = deleteResourceGroup(resourceGroupName);
+      assertResourceDeleted(uri);
    }
 
-   @Test(groups = "live")
+   @Test
    public void deleteNetworkSecurityRuleDoesNotExist() {
-      final NetworkSecurityRuleApi ruleApi = 
api.getNetworkSecurityRuleApi(resourcegroup, DEFAULT_NSG_NAME);
-      URI uri = ruleApi.delete(UNKNOWN_RULE_NAME);
+      URI uri = api().delete(UNKNOWN_RULE_NAME);
       assertNull(uri);
    }
 
-   @Test(groups = "live", dependsOnMethods = 
"deleteNetworkSecurityRuleDoesNotExist")
+   @Test(dependsOnMethods = "deleteNetworkSecurityRuleDoesNotExist")
    public void createNetworkSecurityRule() {
       final NetworkSecurityRule rule = createRule();
       assertNotNull(rule);
 
-      final NetworkSecurityRuleApi ruleApi = 
api.getNetworkSecurityRuleApi(resourcegroup, DEFAULT_NSG_NAME);
+      final NetworkSecurityRuleApi ruleApi = 
api.getNetworkSecurityRuleApi(resourceGroupName, nsgName);
       NetworkSecurityRule result = ruleApi.createOrUpdate(rule.name(), 
rule.properties());
       assertNotNull(result);
       assertEquals(result.name(), rule.name());
    }
 
-   @Test(groups = "live", dependsOnMethods = "createNetworkSecurityRule")
+   @Test(dependsOnMethods = "createNetworkSecurityRule")
    public void getNetworkSecurityRule() {
       final NetworkSecurityRule rule = createRule();
       assertNotNull(rule);
 
-      final NetworkSecurityRuleApi ruleApi = 
api.getNetworkSecurityRuleApi(resourcegroup, DEFAULT_NSG_NAME);
-      NetworkSecurityRule result = ruleApi.get(rule.name());
+      NetworkSecurityRule result = api().get(rule.name());
       assertNotNull(result);
       assertNotNull(result.etag());
       assertEquals(result.name(), rule.name());
    }
 
-   @Test(groups = "live", dependsOnMethods = "createNetworkSecurityRule")
+   @Test(dependsOnMethods = "createNetworkSecurityRule")
    public void getNetworkSecurityDefaultRule() {
       String defaultRuleName = "AllowVnetInBound";
 
-      final NetworkSecurityRuleApi ruleApi = 
api.getNetworkSecurityRuleApi(resourcegroup, DEFAULT_NSG_NAME);
-      NetworkSecurityRule result = ruleApi.getDefaultRule(defaultRuleName);
+      NetworkSecurityRule result = api().getDefaultRule(defaultRuleName);
 
       assertNotNull(result);
       assertNotNull(result.etag());
       assertEquals(result.name(), defaultRuleName);
    }
 
-   @Test(groups = "live", dependsOnMethods = "createNetworkSecurityRule")
+   @Test(dependsOnMethods = "createNetworkSecurityRule")
    public void listNetworkSecurityRules() {
       final NetworkSecurityRule rule = createRule();
       assertNotNull(rule);
 
-      final NetworkSecurityRuleApi ruleApi = 
api.getNetworkSecurityRuleApi(resourcegroup, DEFAULT_NSG_NAME);
-      List<NetworkSecurityRule> result = ruleApi.list();
+      List<NetworkSecurityRule> result = api().list();
 
       assertNotNull(result);
       assertEquals(result.size(), 2);
@@ -183,34 +127,40 @@ public class NetworkSecurityRuleApiLiveTest extends 
BaseAzureComputeApiLiveTest
       assertTrue(rulePresent);
    }
 
-   @Test(groups = "live", dependsOnMethods = "createNetworkSecurityRule")
+   @Test(dependsOnMethods = "createNetworkSecurityRule")
    public void listDefaultSecurityRules() {
-      final NetworkSecurityRuleApi ruleApi = 
api.getNetworkSecurityRuleApi(resourcegroup, DEFAULT_NSG_NAME);
-      List<NetworkSecurityRule> result = ruleApi.listDefaultRules();
-
+      List<NetworkSecurityRule> result = api().listDefaultRules();
       assertNotNull(result);
       assertTrue(result.size() > 0);
    }
 
-   @Test(groups = "live", dependsOnMethods = {"listNetworkSecurityRules", 
"listDefaultSecurityRules", "getNetworkSecurityRule"}, alwaysRun = true)
+   @Test(dependsOnMethods = {"listNetworkSecurityRules", 
"listDefaultSecurityRules", "getNetworkSecurityRule"})
    public void deleteNetworkSecurityRule() {
       final NetworkSecurityRule rule = createRule();
       assertNotNull(rule);
 
-      final NetworkSecurityRuleApi ruleApi = 
api.getNetworkSecurityRuleApi(resourcegroup, DEFAULT_NSG_NAME);
-      URI uri = ruleApi.delete(rule.name());
-      if (uri != null) {
-         assertTrue(uri.toString().contains("api-version"));
-         assertTrue(uri.toString().contains("operationresults"));
-
-         boolean jobDone = Predicates2.retry(new Predicate<URI>() {
-            @Override
-            public boolean apply(URI uri) {
-               return ParseJobStatus.JobStatus.DONE == 
api.getJobApi().jobStatus(uri);
-            }
-         }, 60 * 2 * 1000 /* 2 minute timeout */).apply(uri);
-         assertTrue(jobDone, "delete operation did not complete in the 
configured timeout");
-      }
+      URI uri = api().delete(rule.name());
+      assertResourceDeleted(uri);
+   }
+
+   private NetworkSecurityRule createRule() {
+      NetworkSecurityRule rule = NetworkSecurityRule.create("allowalludpin", 
null, null,
+              NetworkSecurityRuleProperties.builder()
+                      .description("allow all udp in")
+                      .protocol(Protocol.Udp)
+                      .sourcePortRange("*")
+                      .destinationPortRange("*")
+                      .sourceAddressPrefix("*")
+                      .destinationAddressPrefix("*")
+                      .access(Access.Allow)
+                      .priority(4094)
+                      .direction(Direction.Inbound)
+                      .build());
+      return rule;
+   }
+
+   private NetworkSecurityRuleApi api() {
+      return api.getNetworkSecurityRuleApi(resourceGroupName, nsgName);
    }
 
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/c458bafd/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/OSImageApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/OSImageApiLiveTest.java
 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/OSImageApiLiveTest.java
index 6ceb0d4..0756643 100644
--- 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/OSImageApiLiveTest.java
+++ 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/OSImageApiLiveTest.java
@@ -16,18 +16,19 @@
  */
 package org.jclouds.azurecompute.arm.features;
 
+import java.util.List;
+
 import org.jclouds.azurecompute.arm.domain.Offer;
 import org.jclouds.azurecompute.arm.domain.Publisher;
 import org.jclouds.azurecompute.arm.domain.SKU;
 import org.jclouds.azurecompute.arm.domain.Version;
-import org.jclouds.azurecompute.arm.internal.AbstractAzureComputeApiLiveTest;
+import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest;
 import org.testng.annotations.Test;
-import static org.testng.Assert.assertTrue;
 
-import java.util.List;
+import static org.testng.Assert.assertTrue;
 
 @Test(groups = "live", testName = "OSImageApiLiveTest")
-public class OSImageApiLiveTest extends AbstractAzureComputeApiLiveTest {
+public class OSImageApiLiveTest extends BaseAzureComputeApiLiveTest {
 
    @Test
    public void testPublisher() {

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/c458bafd/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/PublicIPAddressApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/PublicIPAddressApiLiveTest.java
 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/PublicIPAddressApiLiveTest.java
index 5443235..98819c1 100644
--- 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/PublicIPAddressApiLiveTest.java
+++ 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/PublicIPAddressApiLiveTest.java
@@ -16,42 +16,54 @@
  */
 package org.jclouds.azurecompute.arm.features;
 
-import com.google.common.collect.ImmutableMap;
+import java.net.URI;
+import java.util.List;
+import java.util.Map;
+
 import org.jclouds.azurecompute.arm.domain.PublicIPAddress;
 import org.jclouds.azurecompute.arm.domain.PublicIPAddressProperties;
 import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest;
 import org.jclouds.util.Predicates2;
-import com.google.common.base.Predicate;
+import org.testng.annotations.AfterClass;
 import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-import java.util.List;
-import java.util.Map;
+import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableMap;
 
-import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.assertFalse;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertNull;
-
+import static org.testng.Assert.assertTrue;
 
 @Test(groups = "live", singleThreaded = true)
 public class PublicIPAddressApiLiveTest extends BaseAzureComputeApiLiveTest {
 
+   private String resourceGroupName;
    private final String publicIpAddressName = "myipaddress";
-   private final String subscriptionid = getSubscriptionId();
-   private String resourcegroup;
+   private String subscriptionid;
 
    @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));
+      subscriptionid = getSubscriptionId();
+   }
+
+   @AfterClass
+   @Override
+   protected void tearDown() {
+      super.tearDown();
+      URI uri = deleteResourceGroup(resourceGroupName);
+      assertResourceDeleted(uri);
    }
 
    @Test(groups = "live")
    public void deletePublicIPAddressResourceDoesNotExist() {
-      final PublicIPAddressApi ipApi = 
api.getPublicIPAddressApi(resourcegroup);
+      final PublicIPAddressApi ipApi = 
api.getPublicIPAddressApi(resourceGroupName);
       boolean status = ipApi.delete(publicIpAddressName);
       assertFalse(status);
    }
@@ -59,7 +71,7 @@ public class PublicIPAddressApiLiveTest extends 
BaseAzureComputeApiLiveTest {
    @Test(groups = "live", dependsOnMethods = 
"deletePublicIPAddressResourceDoesNotExist")
    public void createPublicIPAddress() {
 
-      final PublicIPAddressApi ipApi = 
api.getPublicIPAddressApi(resourcegroup);
+      final PublicIPAddressApi ipApi = 
api.getPublicIPAddressApi(resourceGroupName);
 
       final Map<String, String> tags = ImmutableMap.of("testkey", "testvalue");
 
@@ -74,7 +86,7 @@ public class PublicIPAddressApiLiveTest extends 
BaseAzureComputeApiLiveTest {
       assertNotNull(ip);
       assertEquals(ip.name(), publicIpAddressName);
       assertEquals(ip.location(), LOCATION);
-      assertEquals(ip.id(), 
String.format("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/publicIPAddresses/%s",
 subscriptionid, resourcegroup, publicIpAddressName));
+      assertEquals(ip.id(), 
String.format("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/publicIPAddresses/%s",
 subscriptionid, resourceGroupName, publicIpAddressName));
       assertEquals(ip.tags().get("testkey"), "testvalue");
       assertNotNull(ip.properties());
       assertEquals(ip.properties().provisioningState(), "Updating");
@@ -86,7 +98,7 @@ public class PublicIPAddressApiLiveTest extends 
BaseAzureComputeApiLiveTest {
    @Test(groups = "live", dependsOnMethods = "createPublicIPAddress")
    public void getPublicIPAddress() {
 
-      final PublicIPAddressApi ipApi = 
api.getPublicIPAddressApi(resourcegroup);
+      final PublicIPAddressApi ipApi = 
api.getPublicIPAddressApi(resourceGroupName);
 
       //Poll until resource is ready to be used
       boolean jobDone = Predicates2.retry(new Predicate<String>() {
@@ -100,7 +112,7 @@ public class PublicIPAddressApiLiveTest extends 
BaseAzureComputeApiLiveTest {
       assertNotNull(ip);
       assertEquals(ip.name(), publicIpAddressName);
       assertEquals(ip.location(), LOCATION);
-      assertEquals(ip.id(), 
String.format("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/publicIPAddresses/%s",
 subscriptionid, resourcegroup, publicIpAddressName));
+      assertEquals(ip.id(), 
String.format("/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/publicIPAddresses/%s",
 subscriptionid, resourceGroupName, publicIpAddressName));
       assertEquals(ip.tags().get("testkey"), "testvalue");
       assertNotNull(ip.properties());
       assertEquals(ip.properties().provisioningState(), "Succeeded");
@@ -112,7 +124,7 @@ public class PublicIPAddressApiLiveTest extends 
BaseAzureComputeApiLiveTest {
    @Test(groups = "live", dependsOnMethods = "createPublicIPAddress")
    public void listPublicIPAddresses() {
 
-      final PublicIPAddressApi ipApi = 
api.getPublicIPAddressApi(resourcegroup);
+      final PublicIPAddressApi ipApi = 
api.getPublicIPAddressApi(resourceGroupName);
 
       List<PublicIPAddress> ipList = ipApi.list();
 
@@ -121,7 +133,7 @@ public class PublicIPAddressApiLiveTest extends 
BaseAzureComputeApiLiveTest {
 
    @Test(groups = "live", dependsOnMethods = {"listPublicIPAddresses", 
"getPublicIPAddress"}, alwaysRun = true)
    public void deletePublicIPAddress() {
-      final PublicIPAddressApi ipApi = 
api.getPublicIPAddressApi(resourcegroup);
+      final PublicIPAddressApi ipApi = 
api.getPublicIPAddressApi(resourceGroupName);
       boolean status = ipApi.delete(publicIpAddressName);
       assertTrue(status);
    }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/c458bafd/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/ResourceGroupApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/ResourceGroupApiLiveTest.java
 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/ResourceGroupApiLiveTest.java
index f9ad6cc..3a0c134 100644
--- 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/ResourceGroupApiLiveTest.java
+++ 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/ResourceGroupApiLiveTest.java
@@ -16,38 +16,27 @@
  */
 package org.jclouds.azurecompute.arm.features;
 
-import com.google.common.base.Predicate;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Iterables;
-
 import java.net.URI;
 import java.util.List;
 
 import org.jclouds.azurecompute.arm.domain.ResourceGroup;
-import org.jclouds.azurecompute.arm.functions.ParseJobStatus.JobStatus;
 import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest;
-
 import org.testng.annotations.AfterClass;
-import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
+import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Iterables;
+
+import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertNull;
 import static org.testng.Assert.assertTrue;
-import static org.testng.Assert.assertEquals;
-import org.jclouds.util.Predicates2;
-
 
 @Test(groups = "live", testName = "ResourceGroupApiLiveTest")
 public class ResourceGroupApiLiveTest extends BaseAzureComputeApiLiveTest {
-   private String resourcegroup;
 
-   @BeforeClass
-   @Override
-   public void setup(){
-      super.setup();
-      resourcegroup = getResourceGroupName();
-   }
+   private static final String RESOURCE_GROUP_NAME = "jcloudstest";
 
    private ResourceGroupApi api() {
       return api.getResourceGroupApi();
@@ -63,26 +52,26 @@ public class ResourceGroupApiLiveTest extends 
BaseAzureComputeApiLiveTest {
 
          @Override
          public boolean apply(final ResourceGroup group) {
-            return resourcegroup.equals(group.name());
+            return RESOURCE_GROUP_NAME.equals(group.name());
          }
       }));
    }
 
    @Test(dependsOnMethods = "testCreate")
    public void testRead() {
-      final ResourceGroup group = api().get(resourcegroup);
-      assertNotNull(group);
-      assertEquals(group.name(), resourcegroup);
-      assertEquals(group.location(), LOCATION);
+      final ResourceGroup resourceGroup = api().get(RESOURCE_GROUP_NAME);
+      assertNotNull(resourceGroup);
+      assertEquals(resourceGroup.name(), RESOURCE_GROUP_NAME);
+      assertEquals(resourceGroup.location(), LOCATION);
    }
 
    public void testCreate() {
 
-      final ResourceGroup resourceGroup = api().create("jcloudstest", 
LOCATION, null);
-      assertEquals(resourceGroup.name(), "jcloudstest");
+      final ResourceGroup resourceGroup = api().create(RESOURCE_GROUP_NAME, 
LOCATION, null);
+      assertEquals(resourceGroup.name(), RESOURCE_GROUP_NAME);
       assertEquals(resourceGroup.location(), LOCATION);
       assertNull(resourceGroup.tags());
-      assertTrue(resourceGroup.id().contains("jcloudstest"));
+      assertTrue(resourceGroup.id().contains(RESOURCE_GROUP_NAME));
       assertEquals(resourceGroup.properties().provisioningState(), 
"Succeeded");
    }
 
@@ -90,7 +79,7 @@ public class ResourceGroupApiLiveTest extends 
BaseAzureComputeApiLiveTest {
    public void testUpdateWithEmptyTag() {
       ImmutableMap<String, String> tags = ImmutableMap.<String, 
String>builder().build();
 
-      final ResourceGroup resourceGroup = api().update("jcloudstest", tags);
+      final ResourceGroup resourceGroup = api().update(RESOURCE_GROUP_NAME, 
tags);
 
       assertEquals(resourceGroup.tags().size(), 0);
       assertEquals(resourceGroup.properties().provisioningState(), 
"Succeeded");
@@ -100,7 +89,7 @@ public class ResourceGroupApiLiveTest extends 
BaseAzureComputeApiLiveTest {
    public void testUpdateWithTag() {
       ImmutableMap<String, String> tags = ImmutableMap.<String, 
String>builder().put("test1", "value1").build();
 
-      final ResourceGroup resourceGroup = api().update("jcloudstest", tags);
+      final ResourceGroup resourceGroup = api().update(RESOURCE_GROUP_NAME, 
tags);
 
       assertEquals(resourceGroup.tags().size(), 1);
       assertEquals(resourceGroup.properties().provisioningState(), 
"Succeeded");
@@ -108,31 +97,7 @@ public class ResourceGroupApiLiveTest extends 
BaseAzureComputeApiLiveTest {
 
    @AfterClass(alwaysRun = true)
    public void testDelete() throws Exception {
-      URI uri =  api().delete("jcloudstest");
-
-      if (uri != null){
-         assertTrue(uri.toString().contains("api-version"));
-         assertTrue(uri.toString().contains("operationresults"));
-
-         boolean jobDone = Predicates2.retry(new Predicate<URI>() {
-            @Override public boolean apply(URI uri) {
-               return JobStatus.DONE == api.getJobApi().jobStatus(uri);
-            }
-         }, 60 * 2 * 1000 /* 1 minute timeout */).apply(uri);
-         assertTrue(jobDone, "delete operation did not complete in the 
configured timeout");
-      }
-
-      uri =  api().delete("jcloudstest");
-      if (uri != null){
-         assertTrue(uri.toString().contains("api-version"));
-         assertTrue(uri.toString().contains("operationresults"));
-
-         boolean jobDone = Predicates2.retry(new Predicate<URI>() {
-            @Override public boolean apply(URI uri) {
-               return JobStatus.DONE == api.getJobApi().jobStatus(uri);
-            }
-         }, 60 * 1 * 1000 /* 1 minute timeout */).apply(uri);
-         assertTrue(jobDone, "delete operation did not complete in the 
configured timeout");
-      }
+      URI uri =  api().delete(RESOURCE_GROUP_NAME);
+      assertResourceDeleted(uri);
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/c458bafd/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/ResourceProviderApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/ResourceProviderApiLiveTest.java
 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/ResourceProviderApiLiveTest.java
index 5ebf996..59ca114 100644
--- 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/ResourceProviderApiLiveTest.java
+++ 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/ResourceProviderApiLiveTest.java
@@ -16,18 +16,18 @@
  */
 package org.jclouds.azurecompute.arm.features;
 
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
+import java.util.List;
+
 import org.jclouds.azurecompute.arm.domain.ResourceProviderMetaData;
 import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest;
 import org.testng.annotations.Test;
 
-import java.util.List;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
 
 import static org.testng.Assert.assertNotNull;
 import static org.testng.Assert.assertTrue;
 
-
 @Test(groups = "live", testName = "ResourceProviderApiLiveTest")
 public class ResourceProviderApiLiveTest extends BaseAzureComputeApiLiveTest {
 

http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/c458bafd/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/StorageAccountApiLiveTest.java
----------------------------------------------------------------------
diff --git 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/StorageAccountApiLiveTest.java
 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/StorageAccountApiLiveTest.java
index 6eb13dd..c88ebdc 100644
--- 
a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/StorageAccountApiLiveTest.java
+++ 
b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/StorageAccountApiLiveTest.java
@@ -16,18 +16,21 @@
  */
 package org.jclouds.azurecompute.arm.features;
 
-import com.google.common.base.Predicate;
-import com.google.common.collect.ImmutableMap;
+import java.net.URI;
+import java.util.List;
+
 import org.jclouds.azurecompute.arm.domain.StorageService;
 import org.jclouds.azurecompute.arm.domain.StorageServiceKeys;
 import org.jclouds.azurecompute.arm.domain.StorageServiceUpdateParams;
 import org.jclouds.azurecompute.arm.functions.ParseJobStatus;
 import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiLiveTest;
 import org.jclouds.util.Predicates2;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
-import java.net.URI;
-import java.util.List;
+import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableMap;
 
 import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertFalse;
@@ -41,13 +44,22 @@ public class StorageAccountApiLiveTest extends 
BaseAzureComputeApiLiveTest {
    private static final String NAME = String.format("%3.24s",
            RAND + 
StorageAccountApiLiveTest.class.getSimpleName().toLowerCase());
 
-   private void check(final StorageService storage) {
-      assertNotNull(storage.id());
-      assertNotNull(storage.name());
-      assertNotNull(storage.storageServiceProperties());
-      assertNotNull(storage.storageServiceProperties().accountType());
-      
assertFalse(storage.storageServiceProperties().primaryEndpoints().isEmpty());
-      assertNotNull(storage.storageServiceProperties().creationTime());
+   private String resourceGroupName;
+
+   @BeforeClass
+   @Override
+   public void setup() {
+      super.setup();
+      resourceGroupName = String.format("rg-%s-%s", 
this.getClass().getSimpleName().toLowerCase(), System.getProperty("user.name"));
+      assertNotNull(createResourceGroup(resourceGroupName));
+   }
+
+   @AfterClass
+   @Override
+   protected void tearDown() {
+      super.tearDown();
+      URI uri = deleteResourceGroup(resourceGroupName);
+      assertResourceDeleted(uri);
    }
 
    @Test(dependsOnMethods = "testCreate")
@@ -117,6 +129,7 @@ public class StorageAccountApiLiveTest extends 
BaseAzureComputeApiLiveTest {
       assertTrue(params.tags().containsKey("another_property_name"));
       assertNull(params.storageServiceProperties().accountType());
    }
+
    @Test(dependsOnMethods = {"testCreate", "testGet"})
    public void testUpdateAccountType() {
       StorageServiceUpdateParams.StorageServiceUpdateProperties props =
@@ -127,7 +140,16 @@ public class StorageAccountApiLiveTest extends 
BaseAzureComputeApiLiveTest {
       assertEquals(params.storageServiceProperties().accountType(), 
StorageService.AccountType.Standard_GRS);
    }
 
+   private void check(final StorageService storage) {
+      assertNotNull(storage.id());
+      assertNotNull(storage.name());
+      assertNotNull(storage.storageServiceProperties());
+      assertNotNull(storage.storageServiceProperties().accountType());
+      
assertFalse(storage.storageServiceProperties().primaryEndpoints().isEmpty());
+      assertNotNull(storage.storageServiceProperties().creationTime());
+   }
+
    private StorageAccountApi api() {
-      return api.getStorageAccountApi(getResourceGroupName());
+      return api.getStorageAccountApi(resourceGroupName);
    }
 }

Reply via email to