You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ab...@apache.org on 2013/08/29 20:31:48 UTC

[06/14] JCLOUDS-166, JCLOUDS-167 - Removing async from vcloud and Terremark APIs/providers

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/TerremarkApiLiveTest.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/TerremarkApiLiveTest.java b/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/TerremarkApiLiveTest.java
new file mode 100644
index 0000000..e52666c
--- /dev/null
+++ b/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/TerremarkApiLiveTest.java
@@ -0,0 +1,795 @@
+/*
+ * 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.trmk.vcloud_0_8;
+
+import static com.google.common.collect.Iterables.filter;
+import static com.google.common.collect.Iterables.find;
+import static com.google.common.collect.Iterables.size;
+import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.jclouds.trmk.vcloud_0_8.domain.VAppConfiguration.Builder.changeNameTo;
+import static org.jclouds.trmk.vcloud_0_8.domain.VAppConfiguration.Builder.deleteDiskWithAddressOnParent;
+import static org.jclouds.trmk.vcloud_0_8.options.CloneVAppOptions.Builder.deploy;
+import static org.jclouds.trmk.vcloud_0_8.options.InstantiateVAppTemplateOptions.Builder.processorCount;
+import static org.jclouds.util.Predicates2.retry;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.fail;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Properties;
+import java.util.Set;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeoutException;
+
+import org.jclouds.apis.BaseApiLiveTest;
+import org.jclouds.cim.CIMPredicates;
+import org.jclouds.cim.ResourceAllocationSettingData;
+import org.jclouds.cim.ResourceAllocationSettingData.ResourceType;
+import org.jclouds.predicates.SocketOpen;
+import org.jclouds.rest.AuthorizationException;
+import org.jclouds.ssh.SshClient;
+import org.jclouds.ssh.SshClient.Factory;
+import org.jclouds.ssh.SshException;
+import org.jclouds.sshj.config.SshjSshClientModule;
+import org.jclouds.trmk.vcloud_0_8.domain.Catalog;
+import org.jclouds.trmk.vcloud_0_8.domain.CatalogItem;
+import org.jclouds.trmk.vcloud_0_8.domain.CustomizationParameters;
+import org.jclouds.trmk.vcloud_0_8.domain.InternetService;
+import org.jclouds.trmk.vcloud_0_8.domain.KeyPair;
+import org.jclouds.trmk.vcloud_0_8.domain.Network;
+import org.jclouds.trmk.vcloud_0_8.domain.Node;
+import org.jclouds.trmk.vcloud_0_8.domain.Org;
+import org.jclouds.trmk.vcloud_0_8.domain.Protocol;
+import org.jclouds.trmk.vcloud_0_8.domain.PublicIpAddress;
+import org.jclouds.trmk.vcloud_0_8.domain.ReferenceType;
+import org.jclouds.trmk.vcloud_0_8.domain.Status;
+import org.jclouds.trmk.vcloud_0_8.domain.Task;
+import org.jclouds.trmk.vcloud_0_8.domain.VApp;
+import org.jclouds.trmk.vcloud_0_8.domain.VAppTemplate;
+import org.jclouds.trmk.vcloud_0_8.domain.VDC;
+import org.jclouds.trmk.vcloud_0_8.options.AddInternetServiceOptions;
+import org.jclouds.trmk.vcloud_0_8.options.CloneVAppOptions;
+import org.jclouds.trmk.vcloud_0_8.options.InstantiateVAppTemplateOptions;
+import org.jclouds.trmk.vcloud_0_8.predicates.TaskSuccess;
+import org.jclouds.trmk.vcloud_0_8.reference.VCloudConstants;
+import org.testng.annotations.AfterGroups;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Function;
+import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.common.net.HostAndPort;
+import com.google.inject.Injector;
+import com.google.inject.Module;
+
+@Test(groups = "live", singleThreaded = true)
+public abstract class TerremarkApiLiveTest extends BaseApiLiveTest<TerremarkVCloudApi> {
+
+   protected String expectedOs = "Ubuntu Linux (64-bit)";
+   protected String itemName = "Ubuntu JeOS 9.10 (64-bit)";
+
+   protected Factory sshFactory;
+   protected String publicIp;
+   protected InternetService is;
+   protected Node node;
+   protected VApp vApp;
+   protected Predicate<HostAndPort> socketTester;
+   protected Predicate<URI> successTester;
+   protected Injector injector;
+
+   protected VApp clone;
+   protected VDC vdc;
+   protected String serverName;
+   protected KeyPair key;
+
+   public static final String PREFIX = System.getProperty("user.name") + "-terremark";
+
+   public TerremarkApiLiveTest() {
+      this.provider = "trmk-vcloudexpress";
+      StringBuilder name = new StringBuilder();
+      for (int i = 0; i < 15; i++)
+         name.append("d");
+      serverName = name.toString();// "adriantest";
+   }
+
+   @Test
+   public void testKeysList() throws Exception {
+      for (Org org : orgs) {
+         TerremarkVCloudApi vCloudExpressClient = TerremarkVCloudApi.class.cast(api);
+         Set<KeyPair> response = vCloudExpressClient.listKeyPairsInOrg(org.getHref());
+         assertNotNull(response);
+      }
+   }
+
+   @Test
+   public void testGetAllInternetServices() throws Exception {
+      for (Org org : orgs) {
+         for (ReferenceType vdc : org.getVDCs().values()) {
+            for (InternetService service : api.getAllInternetServicesInVDC(vdc.getHref())) {
+               assertNotNull(api.getNodes(service.getId()));
+            }
+         }
+      }
+   }
+
+   @Test
+   public void testCreateInternetServiceMonitorDisabled() throws Exception {
+      for (Org org : orgs) {
+         for (ReferenceType vdc : org.getVDCs().values()) {
+            Set<PublicIpAddress> publicIpAddresses = api.getPublicIpsAssociatedWithVDC(vdc.getHref());
+            PublicIpAddress publicIp = publicIpAddresses.iterator().next();
+            InternetService service = api.addInternetServiceToExistingIp(publicIp.getId(), PREFIX
+                  + "-no-monitoring", Protocol.TCP, 1234, AddInternetServiceOptions.Builder.monitorDisabled());
+            api.deleteInternetService(service.getId());
+         }
+      }
+   }
+
+   @Test
+   public void testGetPublicIpsAssociatedWithVDC() throws Exception {
+      for (Org org : orgs) {
+         for (ReferenceType vdc : org.getVDCs().values()) {
+            for (PublicIpAddress ip : api.getPublicIpsAssociatedWithVDC(vdc.getHref())) {
+               assertNotNull(api.getInternetServicesOnPublicIp(ip.getId()));
+               assertNotNull(api.getPublicIp(ip.getId()));
+            }
+         }
+      }
+   }
+
+   @Test
+   public void testGetConfigCustomizationOptions() throws Exception {
+      for (Org org : orgs) {
+         for (ReferenceType catalog : org.getCatalogs().values()) {
+            Catalog response = api.getCatalog(catalog.getHref());
+            for (ReferenceType resource : response.values()) {
+               if (resource.getType().equals(TerremarkVCloudMediaType.CATALOGITEM_XML)) {
+                  CatalogItem item = api.findCatalogItemInOrgCatalogNamed(org.getName(), catalog.getName(),
+                        resource.getName());
+                  assert api.getCustomizationOptions(item.getCustomizationOptions().getHref()) != null;
+               }
+            }
+         }
+      }
+   }
+
+   @Test(enabled = true)
+   public void testInstantiateAndPowerOn() throws InterruptedException, ExecutionException, TimeoutException,
+         IOException {
+      prepare();
+
+      long hardDisk = 4194304;
+
+      // long hardDisk = 4194304 / 4 * 10;
+      // String catalogOs = "CentOS 5.3 (64-bit)";
+      // String expectedOs = "Red Hat Enterprise Linux 5 (64-bit)";
+
+      // lookup the datacenter you are deploying into
+      vdc = api.findVDCInOrgNamed(null, null);
+
+      // create an options object to collect the configuration we want.
+      InstantiateVAppTemplateOptions instantiateOptions = createInstantiateOptions().sshKeyFingerprint(
+            key.getFingerPrint());
+
+      CatalogItem item = api.findCatalogItemInOrgCatalogNamed(null, null, itemName);
+
+      assert item != null;
+
+      // if this template supports setting the root password, let's add it to
+      // our options
+      CustomizationParameters customizationOptions = api.getCustomizationOptions(item.getCustomizationOptions()
+            .getHref());
+
+      if (customizationOptions.canCustomizePassword())
+         instantiateOptions.withPassword("robotsarefun");
+
+      VAppTemplate vAppTemplate = api.getVAppTemplate(item.getEntity().getHref());
+
+      assert vAppTemplate != null;
+
+      // instantiate, noting vApp returned has minimal details
+      vApp = api.instantiateVAppTemplateInVDC(vdc.getHref(), vAppTemplate.getHref(), serverName,
+            instantiateOptions);
+
+      assertEquals(vApp.getStatus(), Status.RESOLVED);
+
+      // in terremark, this should be a no-op, as it should simply return the
+      // above task, which is
+      // already deploying
+      Task deployTask = api.deployVApp(vApp.getHref());
+
+      // check to see the result of calling deploy twice
+      deployTask = api.deployVApp(vApp.getHref());
+      assertEquals(deployTask.getHref(), deployTask.getHref());
+
+      vApp = api.getVApp(vApp.getHref());
+
+      assertEquals(vApp.getStatus(), Status.RESOLVED);
+
+      try {// per docs, this is not supported
+         api.cancelTask(deployTask.getHref());
+      } catch (UnsupportedOperationException e) {
+      }
+
+      assert successTester.apply(deployTask.getHref());
+      System.out.printf("%d: done deploying vApp%n", System.currentTimeMillis());
+
+      vApp = api.getVApp(vApp.getHref());
+
+      ReferenceType vAppResource = api.findVDCInOrgNamed(null, null).getResourceEntities().get(serverName);
+      assertEquals(vAppResource.getHref(), vApp.getHref());
+
+      int processorCount = 1;
+      long memory = 512;
+      verifyConfigurationOfVApp(vApp, serverName, expectedOs, processorCount, memory, hardDisk);
+      assertEquals(vApp.getStatus(), Status.OFF);
+
+      assert successTester.apply(api.powerOnVApp(vApp.getHref()).getHref());
+      System.out.printf("%d: done powering on vApp%n", System.currentTimeMillis());
+
+      vApp = api.getVApp(vApp.getHref());
+      assertEquals(vApp.getStatus(), Status.ON);
+   }
+
+   protected InstantiateVAppTemplateOptions createInstantiateOptions() {
+      return processorCount(1).memory(512).sshKeyFingerprint(key.getFingerPrint());
+   }
+
+   protected void prepare() {
+      Org org = api.findOrgNamed(null);
+      try {
+         key = api.generateKeyPairInOrg(org.getHref(), "livetest", false);
+      } catch (IllegalStateException e) {
+         key = api.findKeyPairInOrg(org.getHref(), "livetest");
+         api.deleteKeyPair(key.getId());
+         key = api.generateKeyPairInOrg(org.getHref(), "livetest", false);
+      }
+      assertNotNull(key);
+      assertEquals(key.getName(), "livetest");
+      assertNotNull(key.getPrivateKey());
+      assertNotNull(key.getFingerPrint());
+      assertEquals(key.isDefault(), false);
+      assertEquals(key.getFingerPrint(), api.findKeyPairInOrg(org.getHref(), key.getName()).getFingerPrint());
+   }
+
+   protected abstract Entry<InternetService, PublicIpAddress> getNewInternetServiceAndIpForSSH(VApp vApp);
+
+   @Test(enabled = true, dependsOnMethods = "testInstantiateAndPowerOn")
+   public void testAddInternetService() throws InterruptedException, ExecutionException, TimeoutException, IOException {
+      Entry<InternetService, PublicIpAddress> entry = getNewInternetServiceAndIpForSSH(vApp);
+      is = entry.getKey();
+      publicIp = entry.getValue().getAddress();
+   }
+
+   @Test(enabled = true, dependsOnMethods = "testInstantiateAndPowerOn")
+   public void testCloneVApp() throws IOException {
+      assert successTester.apply(api.powerOffVApp(vApp.getHref()).getHref());
+      System.out.printf("%d: done powering off vApp%n", System.currentTimeMillis());
+
+      StringBuilder name = new StringBuilder();
+      for (int i = 0; i < 15; i++)
+         name.append("b");
+      String newName = name.toString();
+
+      CloneVAppOptions options = deploy().powerOn().withDescription("The description of " + newName);
+
+      System.out.printf("%d: cloning vApp%n", System.currentTimeMillis());
+      Task task = api.cloneVAppInVDC(vdc.getHref(), vApp.getHref(), newName, options);
+
+      // wait for the task to complete
+      assert successTester.apply(task.getHref());
+      System.out.printf("%d: done cloning vApp%n", System.currentTimeMillis());
+
+      assert successTester.apply(api.powerOnVApp(vApp.getHref()).getHref());
+      System.out.printf("%d: done powering on vApp%n", System.currentTimeMillis());
+
+      // refresh task to get the new vApp location
+      task = api.getTask(task.getHref());
+
+      clone = api.getVApp(task.getOwner().getHref());
+      assertEquals(clone.getStatus(), Status.ON);
+
+      assertEquals(clone.getName(), newName);
+      assertEquals(clone.getNetworkToAddresses().values().size(), 1);
+   }
+
+   @Test(enabled = true, dependsOnMethods = { "testInstantiateAndPowerOn", "testAddInternetService" })
+   public void testPublicIp() throws InterruptedException, ExecutionException, TimeoutException, IOException {
+      node = api.addNode(is.getId(), Iterables.getLast(vApp.getNetworkToAddresses().values()), vApp.getName()
+            + "-SSH", 22);
+      loopAndCheckPass();
+   }
+
+   protected void loopAndCheckPass() throws IOException {
+      for (int i = 0; i < 5; i++) {// retry loop TODO replace with predicate.
+         try {
+            doCheckPass(publicIp);
+            return;
+         } catch (SshException e) {
+            try {
+               Thread.sleep(10 * 1000);
+            } catch (InterruptedException e1) {
+            }
+            continue;
+         }
+      }
+   }
+
+   @Test(enabled = true, dependsOnMethods = "testPublicIp")
+   public void testConfigureNode() throws InterruptedException, ExecutionException, TimeoutException, IOException {
+      api.configureNode(node.getId(), node.getName(), node.isEnabled(), "holy cow");
+   }
+
+   @Test(enabled = true, dependsOnMethods = "testPublicIp")
+   public void testLifeCycle() throws InterruptedException, ExecutionException, TimeoutException, IOException {
+
+      try {// per docs, this is not supported
+         api.undeployVApp(vApp.getHref());
+         fail("Expected UnsupportedOperationException");
+      } catch (UnsupportedOperationException e) {
+      }
+
+      try {// per docs, this is not supported
+         api.suspendVApp(vApp.getHref());
+         fail("Expected UnsupportedOperationException");
+      } catch (UnsupportedOperationException e) {
+      }
+
+      assert successTester.apply(api.resetVApp(vApp.getHref()).getHref());
+
+      vApp = api.getVApp(vApp.getHref());
+
+      assertEquals(vApp.getStatus(), Status.ON);
+
+      // TODO we need to determine whether shutdown is supported before invoking
+      // it.
+      // api.shutdownVApp(vApp.getId());
+      // vApp = api.getVApp(vApp.getId());
+      // assertEquals(vApp.getStatus(), VAppStatus.ON);
+
+      assert successTester.apply(api.powerOffVApp(vApp.getHref()).getHref());
+
+      vApp = api.getVApp(vApp.getHref());
+      assertEquals(vApp.getStatus(), Status.OFF);
+   }
+
+   @Test(enabled = true, dependsOnMethods = "testLifeCycle")
+   public void testConfigure() throws InterruptedException, ExecutionException, TimeoutException, IOException {
+
+      vApp = api.getVApp(vApp.getHref());
+
+      Task task = api.configureVApp(vApp, changeNameTo("eduardo").changeMemoryTo(1536).changeProcessorCountTo(1)
+            .addDisk(25 * 1048576).addDisk(25 * 1048576));
+
+      assert successTester.apply(task.getHref());
+
+      vApp = api.getVApp(vApp.getHref());
+      assertEquals(vApp.getName(), "eduardo");
+      assertEquals(find(vApp.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.PROCESSOR))
+            .getVirtualQuantity().longValue(), 1);
+      assertEquals(find(vApp.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.MEMORY))
+            .getVirtualQuantity().longValue(), 1536);
+      assertEquals(size(filter(vApp.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.DISK_DRIVE))),
+            3);
+
+      assert successTester.apply(api.powerOnVApp(vApp.getHref()).getHref());
+
+      loopAndCheckPass();
+
+      assert successTester.apply(api.powerOffVApp(vApp.getHref()).getHref());
+
+      // extract the disks on the vApp sorted by addressOnParent
+      List<ResourceAllocationSettingData> disks = Lists.newArrayList(filter(vApp.getResourceAllocations(),
+            CIMPredicates.resourceTypeIn(ResourceType.DISK_DRIVE)));
+
+      // delete the second disk
+      task = api.configureVApp(vApp,
+            deleteDiskWithAddressOnParent(Integer.parseInt(disks.get(1).getAddressOnParent())));
+
+      assert successTester.apply(task.getHref());
+
+      assert successTester.apply(api.powerOnVApp(vApp.getHref()).getHref());
+      loopAndCheckPass();
+   }
+
+   protected void verifyConfigurationOfVApp(VApp vApp, String serverName, String expectedOs, int processorCount,
+         long memory, long hardDisk) {
+      assertEquals(vApp.getName(), serverName);
+      assertEquals(vApp.getOperatingSystemDescription(), expectedOs);
+      assertEquals((int) find(vApp.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.PROCESSOR))
+            .getVirtualQuantity().longValue(), processorCount);
+      assertEquals(find(vApp.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.MEMORY))
+            .getVirtualQuantity().longValue(), memory);
+      assertEquals(find(vApp.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.DISK_DRIVE))
+            .getVirtualQuantity().longValue(), hardDisk);
+      assertEquals(vApp.getSize().longValue(),
+            find(vApp.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.DISK_DRIVE))
+                  .getVirtualQuantity().longValue());
+   }
+
+   protected void doCheckPass(String address) throws IOException {
+      HostAndPort socket = HostAndPort.fromParts(address, 22);
+
+      System.out.printf("%d: %s awaiting ssh service to start%n", System.currentTimeMillis(), socket);
+      assert socketTester.apply(socket);
+      System.out.printf("%d: %s ssh service started%n", System.currentTimeMillis(), socket);
+
+      SshClient ssh = getConnectionFor(socket);
+      try {
+         ssh.connect();
+         System.out.printf("%d: %s ssh ssh made%n", System.currentTimeMillis(), socket);
+         System.out.println(ssh.exec("df -h"));
+         System.out.println(ssh.exec("ls -al /dev/sd*"));
+         System.out.println(ssh.exec("echo '$Ep455l0ud!2'|sudo -S fdisk -l"));
+      } finally {
+         if (ssh != null)
+            ssh.disconnect();
+      }
+   }
+
+   protected abstract SshClient getConnectionFor(HostAndPort socket);
+
+   @AfterGroups(groups = { "live" })
+   void cleanup() throws InterruptedException, ExecutionException, TimeoutException {
+      if (node != null)
+         api.deleteNode(node.getId());
+      if (is != null)
+         api.deleteInternetService(is.getId());
+      if (key != null)
+         api.deleteKeyPair(key.getId());
+      if (vApp != null) {
+         try {
+            successTester.apply(api.powerOffVApp(vApp.getHref()).getHref());
+         } catch (Exception e) {
+
+         }
+         api.deleteVApp(vApp.getHref());
+      }
+      if (clone != null) {
+         try {
+            successTester.apply(api.powerOffVApp(clone.getHref()).getHref());
+         } catch (Exception e) {
+
+         }
+         api.deleteVApp(clone.getHref());
+      }
+   }
+
+   @Override
+   protected TerremarkVCloudApi create(Properties props, Iterable<Module> modules) {
+      Injector injector = newBuilder().modules(modules).overrides(props).buildInjector();
+      sshFactory = injector.getInstance(SshClient.Factory.class);
+
+      // longer than default internet service timeout
+      socketTester = retry(injector.getInstance(SocketOpen.class), 300, 10, SECONDS);
+      successTester = retry(injector.getInstance(TaskSuccess.class), 650, 10, SECONDS);
+      api = injector.getInstance(TerremarkVCloudApi.class);
+      orgs = listOrgs();
+      return api;
+   }
+
+   @Test
+   public void testOrg() throws Exception {
+      for (Org org : orgs) {
+         assertNotNull(org);
+         assertNotNull(org.getName());
+         assert org.getCatalogs().size() >= 1;
+         assert org.getTasksLists().size() >= 1;
+         assert org.getVDCs().size() >= 1;
+         assertEquals(api.findOrgNamed(org.getName()), org);
+      }
+   }
+
+   @Test
+   public void testPropertiesCanOverrideDefaultOrg() throws Exception {
+      for (Org org : orgs) {
+         TerremarkVCloudApi newApi = null;
+         try {
+            newApi = create(
+                  overrideDefaults(ImmutableMap.of(VCloudConstants.PROPERTY_VCLOUD_DEFAULT_ORG, org.getName())),
+                  setupModules());
+            assertEquals(newApi.findOrgNamed(null), org);
+         } finally {
+            newApi.close();
+         }
+      }
+   }
+
+   public Properties overrideDefaults(Map<String, String> overrides) {
+      Properties properties = setupProperties();
+      properties.putAll(overrides);
+      return properties;
+   }
+
+   @Test
+   public void testCatalog() throws Exception {
+      for (Org org : orgs) {
+         for (ReferenceType cat : org.getCatalogs().values()) {
+            Catalog response = api.getCatalog(cat.getHref());
+            assertNotNull(response);
+            assertNotNull(response.getName());
+            assertNotNull(response.getHref());
+            assertEquals(api.findCatalogInOrgNamed(org.getName(), response.getName()), response);
+         }
+      }
+   }
+
+   @Test
+   public void testPropertiesCanOverrideDefaultCatalog() throws Exception {
+      for (Org org : orgs) {
+         for (ReferenceType cat : org.getCatalogs().values()) {
+            TerremarkVCloudApi newApi = null;
+            try {
+               newApi = create(
+                     overrideDefaults(ImmutableMap.of(VCloudConstants.PROPERTY_VCLOUD_DEFAULT_ORG, org.getName(),
+                           VCloudConstants.PROPERTY_VCLOUD_DEFAULT_CATALOG, cat.getName())), setupModules());
+               assertEquals(newApi.findCatalogInOrgNamed(null, null), api.getCatalog(cat.getHref()));
+            } finally {
+               newApi.close();
+            }
+         }
+      }
+   }
+
+   @Test
+   public void testGetVDCNetwork() throws Exception {
+      for (Org org : orgs) {
+         for (ReferenceType vdc : org.getVDCs().values()) {
+            VDC response = api.getVDC(vdc.getHref());
+            for (ReferenceType resource : response.getAvailableNetworks().values()) {
+               if (resource.getType().equals(TerremarkVCloudMediaType.NETWORK_XML)) {
+                  try {
+                     Network net = api.getNetwork(resource.getHref());
+                     assertNotNull(net);
+                     assertNotNull(net.getName());
+                     assertNotNull(net.getHref());
+                     assertEquals(
+                           api.findNetworkInOrgVDCNamed(org.getName(), response.getName(), net.getName()), net);
+                  } catch (AuthorizationException e) {
+
+                  }
+               }
+            }
+         }
+      }
+   }
+
+   @Test
+   public void testPropertiesCanOverrideDefaultNetwork() throws Exception {
+      for (Org org : orgs) {
+         for (ReferenceType vdc : org.getVDCs().values()) {
+            VDC response = api.getVDC(vdc.getHref());
+            for (ReferenceType net : response.getAvailableNetworks().values()) {
+               TerremarkVCloudApi newApi = null;
+               try {
+                  newApi = create(
+                        overrideDefaults(ImmutableMap.of(VCloudConstants.PROPERTY_VCLOUD_DEFAULT_ORG, org.getName(),
+                              VCloudConstants.PROPERTY_VCLOUD_DEFAULT_VDC, vdc.getName(),
+                              VCloudConstants.PROPERTY_VCLOUD_DEFAULT_NETWORK, net.getName())), setupModules());
+                  assertEquals(newApi.findNetworkInOrgVDCNamed(null, null, net.getName()),
+                        api.getNetwork(net.getHref()));
+               } finally {
+                  newApi.close();
+               }
+            }
+         }
+      }
+   }
+
+   @Test
+   public void testGetCatalogItem() throws Exception {
+      for (Org org : orgs) {
+         for (ReferenceType cat : org.getCatalogs().values()) {
+            Catalog response = api.getCatalog(cat.getHref());
+            for (ReferenceType resource : response.values()) {
+               if (resource.getType().equals(TerremarkVCloudMediaType.CATALOGITEM_XML)) {
+                  CatalogItem item = api.getCatalogItem(resource.getHref());
+                  verifyCatalogItem(item);
+               }
+            }
+         }
+      }
+   }
+
+   protected void verifyCatalogItem(CatalogItem item) {
+      assertNotNull(item);
+      assertNotNull(item);
+      assertNotNull(item.getEntity());
+      assertNotNull(item.getHref());
+      assertNotNull(item.getProperties());
+      assertNotNull(item.getType());
+   }
+
+   @Test
+   public void testFindCatalogItem() throws Exception {
+      for (Org org : orgs) {
+         for (ReferenceType cat : org.getCatalogs().values()) {
+            Catalog response = api.getCatalog(cat.getHref());
+            for (ReferenceType resource : response.values()) {
+               if (resource.getType().equals(TerremarkVCloudMediaType.CATALOGITEM_XML)) {
+                  CatalogItem item = api.findCatalogItemInOrgCatalogNamed(org.getName(), response.getName(),
+                        resource.getName());
+                  verifyCatalogItem(item);
+               }
+            }
+         }
+      }
+   }
+
+   @Test
+   public void testDefaultVDC() throws Exception {
+      for (Org org : orgs) {
+         for (ReferenceType vdc : org.getVDCs().values()) {
+            VDC response = api.getVDC(vdc.getHref());
+            assertNotNull(response);
+            assertNotNull(response.getName());
+            assertNotNull(response.getHref());
+            assertNotNull(response.getResourceEntities());
+            assertNotNull(response.getAvailableNetworks());
+            assertNotNull(response.getCatalog());
+            assertNotNull(response.getInternetServices());
+            assertNotNull(response.getPublicIps());
+            assertEquals(api.getVDC(response.getHref()), response);
+         }
+      }
+   }
+
+   @Test
+   public void testPropertiesCanOverrideDefaultVDC() throws Exception {
+      for (Org org : orgs) {
+         for (ReferenceType vdc : org.getVDCs().values()) {
+            TerremarkVCloudApi newApi = null;
+            try {
+               newApi = create(
+                     overrideDefaults(ImmutableMap.of(VCloudConstants.PROPERTY_VCLOUD_DEFAULT_ORG, org.getName(),
+                           VCloudConstants.PROPERTY_VCLOUD_DEFAULT_VDC, vdc.getName())), setupModules());
+               assertEquals(newApi.findVDCInOrgNamed(null, null), api.getVDC(vdc.getHref()));
+            } finally {
+               newApi.close();
+            }
+         }
+      }
+   }
+
+   @Test
+   public void testDefaultTasksList() throws Exception {
+      for (Org org : orgs) {
+         for (ReferenceType tasksList : org.getTasksLists().values()) {
+            org.jclouds.trmk.vcloud_0_8.domain.TasksList response = api.findTasksListInOrgNamed(org.getName(),
+                  tasksList.getName());
+            assertNotNull(response);
+            assertNotNull(response.getLocation());
+            assertNotNull(response.getTasks());
+            assertEquals(api.getTasksList(response.getLocation()).getLocation(), response.getLocation());
+         }
+      }
+   }
+
+   @Test
+   public void testPropertiesCanOverrideDefaultTasksList() throws Exception {
+      for (Org org : orgs) {
+         for (ReferenceType tasksList : org.getTasksLists().values()) {
+            TerremarkVCloudApi newApi = null;
+            try {
+               newApi = create(
+                     overrideDefaults(ImmutableMap.of(VCloudConstants.PROPERTY_VCLOUD_DEFAULT_ORG, org.getName(),
+                           VCloudConstants.PROPERTY_VCLOUD_DEFAULT_TASKSLIST, tasksList.getName())), setupModules());
+               assertEquals(newApi.findTasksListInOrgNamed(null, null),
+                     api.getTasksList(tasksList.getHref()));
+            } finally {
+               newApi.close();
+            }
+         }
+      }
+   }
+
+   @Test
+   public void testGetTask() throws Exception {
+      for (Org org : orgs) {
+         for (ReferenceType tasksList : org.getTasksLists().values()) {
+            org.jclouds.trmk.vcloud_0_8.domain.TasksList response = api.findTasksListInOrgNamed(org.getName(),
+                  tasksList.getName());
+            assertNotNull(response);
+            assertNotNull(response.getLocation());
+            assertNotNull(response.getTasks());
+            if (response.getTasks().size() > 0) {
+               Task task = response.getTasks().last();
+               assertEquals(api.getTask(task.getHref()).getHref(), task.getHref());
+            }
+         }
+      }
+   }
+
+   protected Iterable<Org> orgs;
+
+   protected Iterable<Org> listOrgs() {
+      return Iterables.transform(api.listOrgs().values(), new Function<ReferenceType, Org>() {
+
+         @Override
+         public Org apply(ReferenceType arg0) {
+            return api.getOrg(arg0.getHref());
+         }
+
+      });
+   }
+
+   @Test
+   public void testGetVAppTemplate() throws Exception {
+      for (Org org : orgs) {
+         for (ReferenceType cat : org.getCatalogs().values()) {
+            Catalog response = api.getCatalog(cat.getHref());
+            for (ReferenceType resource : response.values()) {
+               if (resource.getType().equals(TerremarkVCloudMediaType.CATALOGITEM_XML)) {
+                  CatalogItem item = api.getCatalogItem(resource.getHref());
+                  if (item.getEntity().getType().equals(TerremarkVCloudMediaType.VAPPTEMPLATE_XML)) {
+                     assertNotNull(api.getVAppTemplate(item.getEntity().getHref()));
+                  }
+               }
+            }
+         }
+      }
+   }
+
+   @Test
+   public void testGetVApp() throws Exception {
+      for (Org org : orgs) {
+         for (ReferenceType vdc : org.getVDCs().values()) {
+            VDC response = api.getVDC(vdc.getHref());
+            for (ReferenceType item : response.getResourceEntities().values()) {
+               if (item.getType().equals(TerremarkVCloudMediaType.VAPP_XML)) {
+                  try {
+                     VApp app = api.getVApp(item.getHref());
+                     assertNotNull(app);
+                  } catch (RuntimeException e) {
+
+                  }
+               }
+            }
+         }
+      }
+   }
+
+   @Test
+   public void testFindVAppTemplate() throws Exception {
+      for (Org org : orgs) {
+         for (ReferenceType cat : org.getCatalogs().values()) {
+            Catalog response = api.getCatalog(cat.getHref());
+            for (ReferenceType resource : response.values()) {
+               if (resource.getType().equals(TerremarkVCloudMediaType.CATALOGITEM_XML)) {
+                  CatalogItem item = api.getCatalogItem(resource.getHref());
+                  if (item.getEntity().getType().equals(TerremarkVCloudMediaType.VAPPTEMPLATE_XML)) {
+                     assertNotNull(api.findVAppTemplateInOrgCatalogNamed(org.getName(), response.getName(), item
+                           .getEntity().getName()));
+                  }
+               }
+            }
+         }
+      }
+   }
+
+   @Override
+   protected Iterable<Module> setupModules() {
+      return ImmutableSet.<Module> of(getLoggingModule(), new SshjSshClientModule());
+   }
+}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/TerremarkClientLiveTest.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/TerremarkClientLiveTest.java b/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/TerremarkClientLiveTest.java
deleted file mode 100644
index 69a3bca..0000000
--- a/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/TerremarkClientLiveTest.java
+++ /dev/null
@@ -1,795 +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.trmk.vcloud_0_8;
-
-import static com.google.common.collect.Iterables.filter;
-import static com.google.common.collect.Iterables.find;
-import static com.google.common.collect.Iterables.size;
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.jclouds.trmk.vcloud_0_8.domain.VAppConfiguration.Builder.changeNameTo;
-import static org.jclouds.trmk.vcloud_0_8.domain.VAppConfiguration.Builder.deleteDiskWithAddressOnParent;
-import static org.jclouds.trmk.vcloud_0_8.options.CloneVAppOptions.Builder.deploy;
-import static org.jclouds.trmk.vcloud_0_8.options.InstantiateVAppTemplateOptions.Builder.processorCount;
-import static org.jclouds.util.Predicates2.retry;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.fail;
-
-import java.io.IOException;
-import java.net.URI;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Properties;
-import java.util.Set;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeoutException;
-
-import org.jclouds.apis.BaseApiLiveTest;
-import org.jclouds.cim.CIMPredicates;
-import org.jclouds.cim.ResourceAllocationSettingData;
-import org.jclouds.cim.ResourceAllocationSettingData.ResourceType;
-import org.jclouds.predicates.SocketOpen;
-import org.jclouds.rest.AuthorizationException;
-import org.jclouds.ssh.SshClient;
-import org.jclouds.ssh.SshClient.Factory;
-import org.jclouds.ssh.SshException;
-import org.jclouds.sshj.config.SshjSshClientModule;
-import org.jclouds.trmk.vcloud_0_8.domain.Catalog;
-import org.jclouds.trmk.vcloud_0_8.domain.CatalogItem;
-import org.jclouds.trmk.vcloud_0_8.domain.CustomizationParameters;
-import org.jclouds.trmk.vcloud_0_8.domain.InternetService;
-import org.jclouds.trmk.vcloud_0_8.domain.KeyPair;
-import org.jclouds.trmk.vcloud_0_8.domain.Network;
-import org.jclouds.trmk.vcloud_0_8.domain.Node;
-import org.jclouds.trmk.vcloud_0_8.domain.Org;
-import org.jclouds.trmk.vcloud_0_8.domain.Protocol;
-import org.jclouds.trmk.vcloud_0_8.domain.PublicIpAddress;
-import org.jclouds.trmk.vcloud_0_8.domain.ReferenceType;
-import org.jclouds.trmk.vcloud_0_8.domain.Status;
-import org.jclouds.trmk.vcloud_0_8.domain.Task;
-import org.jclouds.trmk.vcloud_0_8.domain.VApp;
-import org.jclouds.trmk.vcloud_0_8.domain.VAppTemplate;
-import org.jclouds.trmk.vcloud_0_8.domain.VDC;
-import org.jclouds.trmk.vcloud_0_8.options.AddInternetServiceOptions;
-import org.jclouds.trmk.vcloud_0_8.options.CloneVAppOptions;
-import org.jclouds.trmk.vcloud_0_8.options.InstantiateVAppTemplateOptions;
-import org.jclouds.trmk.vcloud_0_8.predicates.TaskSuccess;
-import org.jclouds.trmk.vcloud_0_8.reference.VCloudConstants;
-import org.testng.annotations.AfterGroups;
-import org.testng.annotations.Test;
-
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-import com.google.common.net.HostAndPort;
-import com.google.inject.Injector;
-import com.google.inject.Module;
-
-@Test(groups = "live", singleThreaded = true)
-public abstract class TerremarkClientLiveTest extends BaseApiLiveTest<TerremarkVCloudClient> {
-
-   protected String expectedOs = "Ubuntu Linux (64-bit)";
-   protected String itemName = "Ubuntu JeOS 9.10 (64-bit)";
-
-   protected Factory sshFactory;
-   protected String publicIp;
-   protected InternetService is;
-   protected Node node;
-   protected VApp vApp;
-   protected Predicate<HostAndPort> socketTester;
-   protected Predicate<URI> successTester;
-   protected Injector injector;
-
-   protected VApp clone;
-   protected VDC vdc;
-   protected String serverName;
-   protected KeyPair key;
-
-   public static final String PREFIX = System.getProperty("user.name") + "-terremark";
-
-   public TerremarkClientLiveTest() {
-      this.provider = "trmk-vcloudexpress";
-      StringBuilder name = new StringBuilder();
-      for (int i = 0; i < 15; i++)
-         name.append("d");
-      serverName = name.toString();// "adriantest";
-   }
-
-   @Test
-   public void testKeysList() throws Exception {
-      for (Org org : orgs) {
-         TerremarkVCloudClient vCloudExpressClient = TerremarkVCloudClient.class.cast(api);
-         Set<KeyPair> response = vCloudExpressClient.listKeyPairsInOrg(org.getHref());
-         assertNotNull(response);
-      }
-   }
-
-   @Test
-   public void testGetAllInternetServices() throws Exception {
-      for (Org org : orgs) {
-         for (ReferenceType vdc : org.getVDCs().values()) {
-            for (InternetService service : api.getAllInternetServicesInVDC(vdc.getHref())) {
-               assertNotNull(api.getNodes(service.getId()));
-            }
-         }
-      }
-   }
-
-   @Test
-   public void testCreateInternetServiceMonitorDisabled() throws Exception {
-      for (Org org : orgs) {
-         for (ReferenceType vdc : org.getVDCs().values()) {
-            Set<PublicIpAddress> publicIpAddresses = api.getPublicIpsAssociatedWithVDC(vdc.getHref());
-            PublicIpAddress publicIp = publicIpAddresses.iterator().next();
-            InternetService service = api.addInternetServiceToExistingIp(publicIp.getId(), PREFIX
-                  + "-no-monitoring", Protocol.TCP, 1234, AddInternetServiceOptions.Builder.monitorDisabled());
-            api.deleteInternetService(service.getId());
-         }
-      }
-   }
-
-   @Test
-   public void testGetPublicIpsAssociatedWithVDC() throws Exception {
-      for (Org org : orgs) {
-         for (ReferenceType vdc : org.getVDCs().values()) {
-            for (PublicIpAddress ip : api.getPublicIpsAssociatedWithVDC(vdc.getHref())) {
-               assertNotNull(api.getInternetServicesOnPublicIp(ip.getId()));
-               assertNotNull(api.getPublicIp(ip.getId()));
-            }
-         }
-      }
-   }
-
-   @Test
-   public void testGetConfigCustomizationOptions() throws Exception {
-      for (Org org : orgs) {
-         for (ReferenceType catalog : org.getCatalogs().values()) {
-            Catalog response = api.getCatalog(catalog.getHref());
-            for (ReferenceType resource : response.values()) {
-               if (resource.getType().equals(TerremarkVCloudMediaType.CATALOGITEM_XML)) {
-                  CatalogItem item = api.findCatalogItemInOrgCatalogNamed(org.getName(), catalog.getName(),
-                        resource.getName());
-                  assert api.getCustomizationOptions(item.getCustomizationOptions().getHref()) != null;
-               }
-            }
-         }
-      }
-   }
-
-   @Test(enabled = true)
-   public void testInstantiateAndPowerOn() throws InterruptedException, ExecutionException, TimeoutException,
-         IOException {
-      prepare();
-
-      long hardDisk = 4194304;
-
-      // long hardDisk = 4194304 / 4 * 10;
-      // String catalogOs = "CentOS 5.3 (64-bit)";
-      // String expectedOs = "Red Hat Enterprise Linux 5 (64-bit)";
-
-      // lookup the datacenter you are deploying into
-      vdc = api.findVDCInOrgNamed(null, null);
-
-      // create an options object to collect the configuration we want.
-      InstantiateVAppTemplateOptions instantiateOptions = createInstantiateOptions().sshKeyFingerprint(
-            key.getFingerPrint());
-
-      CatalogItem item = api.findCatalogItemInOrgCatalogNamed(null, null, itemName);
-
-      assert item != null;
-
-      // if this template supports setting the root password, let's add it to
-      // our options
-      CustomizationParameters customizationOptions = api.getCustomizationOptions(item.getCustomizationOptions()
-            .getHref());
-
-      if (customizationOptions.canCustomizePassword())
-         instantiateOptions.withPassword("robotsarefun");
-
-      VAppTemplate vAppTemplate = api.getVAppTemplate(item.getEntity().getHref());
-
-      assert vAppTemplate != null;
-
-      // instantiate, noting vApp returned has minimal details
-      vApp = api.instantiateVAppTemplateInVDC(vdc.getHref(), vAppTemplate.getHref(), serverName,
-            instantiateOptions);
-
-      assertEquals(vApp.getStatus(), Status.RESOLVED);
-
-      // in terremark, this should be a no-op, as it should simply return the
-      // above task, which is
-      // already deploying
-      Task deployTask = api.deployVApp(vApp.getHref());
-
-      // check to see the result of calling deploy twice
-      deployTask = api.deployVApp(vApp.getHref());
-      assertEquals(deployTask.getHref(), deployTask.getHref());
-
-      vApp = api.getVApp(vApp.getHref());
-
-      assertEquals(vApp.getStatus(), Status.RESOLVED);
-
-      try {// per docs, this is not supported
-         api.cancelTask(deployTask.getHref());
-      } catch (UnsupportedOperationException e) {
-      }
-
-      assert successTester.apply(deployTask.getHref());
-      System.out.printf("%d: done deploying vApp%n", System.currentTimeMillis());
-
-      vApp = api.getVApp(vApp.getHref());
-
-      ReferenceType vAppResource = api.findVDCInOrgNamed(null, null).getResourceEntities().get(serverName);
-      assertEquals(vAppResource.getHref(), vApp.getHref());
-
-      int processorCount = 1;
-      long memory = 512;
-      verifyConfigurationOfVApp(vApp, serverName, expectedOs, processorCount, memory, hardDisk);
-      assertEquals(vApp.getStatus(), Status.OFF);
-
-      assert successTester.apply(api.powerOnVApp(vApp.getHref()).getHref());
-      System.out.printf("%d: done powering on vApp%n", System.currentTimeMillis());
-
-      vApp = api.getVApp(vApp.getHref());
-      assertEquals(vApp.getStatus(), Status.ON);
-   }
-
-   protected InstantiateVAppTemplateOptions createInstantiateOptions() {
-      return processorCount(1).memory(512).sshKeyFingerprint(key.getFingerPrint());
-   }
-
-   protected void prepare() {
-      Org org = api.findOrgNamed(null);
-      try {
-         key = api.generateKeyPairInOrg(org.getHref(), "livetest", false);
-      } catch (IllegalStateException e) {
-         key = api.findKeyPairInOrg(org.getHref(), "livetest");
-         api.deleteKeyPair(key.getId());
-         key = api.generateKeyPairInOrg(org.getHref(), "livetest", false);
-      }
-      assertNotNull(key);
-      assertEquals(key.getName(), "livetest");
-      assertNotNull(key.getPrivateKey());
-      assertNotNull(key.getFingerPrint());
-      assertEquals(key.isDefault(), false);
-      assertEquals(key.getFingerPrint(), api.findKeyPairInOrg(org.getHref(), key.getName()).getFingerPrint());
-   }
-
-   protected abstract Entry<InternetService, PublicIpAddress> getNewInternetServiceAndIpForSSH(VApp vApp);
-
-   @Test(enabled = true, dependsOnMethods = "testInstantiateAndPowerOn")
-   public void testAddInternetService() throws InterruptedException, ExecutionException, TimeoutException, IOException {
-      Entry<InternetService, PublicIpAddress> entry = getNewInternetServiceAndIpForSSH(vApp);
-      is = entry.getKey();
-      publicIp = entry.getValue().getAddress();
-   }
-
-   @Test(enabled = true, dependsOnMethods = "testInstantiateAndPowerOn")
-   public void testCloneVApp() throws IOException {
-      assert successTester.apply(api.powerOffVApp(vApp.getHref()).getHref());
-      System.out.printf("%d: done powering off vApp%n", System.currentTimeMillis());
-
-      StringBuilder name = new StringBuilder();
-      for (int i = 0; i < 15; i++)
-         name.append("b");
-      String newName = name.toString();
-
-      CloneVAppOptions options = deploy().powerOn().withDescription("The description of " + newName);
-
-      System.out.printf("%d: cloning vApp%n", System.currentTimeMillis());
-      Task task = api.cloneVAppInVDC(vdc.getHref(), vApp.getHref(), newName, options);
-
-      // wait for the task to complete
-      assert successTester.apply(task.getHref());
-      System.out.printf("%d: done cloning vApp%n", System.currentTimeMillis());
-
-      assert successTester.apply(api.powerOnVApp(vApp.getHref()).getHref());
-      System.out.printf("%d: done powering on vApp%n", System.currentTimeMillis());
-
-      // refresh task to get the new vApp location
-      task = api.getTask(task.getHref());
-
-      clone = api.getVApp(task.getOwner().getHref());
-      assertEquals(clone.getStatus(), Status.ON);
-
-      assertEquals(clone.getName(), newName);
-      assertEquals(clone.getNetworkToAddresses().values().size(), 1);
-   }
-
-   @Test(enabled = true, dependsOnMethods = { "testInstantiateAndPowerOn", "testAddInternetService" })
-   public void testPublicIp() throws InterruptedException, ExecutionException, TimeoutException, IOException {
-      node = api.addNode(is.getId(), Iterables.getLast(vApp.getNetworkToAddresses().values()), vApp.getName()
-            + "-SSH", 22);
-      loopAndCheckPass();
-   }
-
-   protected void loopAndCheckPass() throws IOException {
-      for (int i = 0; i < 5; i++) {// retry loop TODO replace with predicate.
-         try {
-            doCheckPass(publicIp);
-            return;
-         } catch (SshException e) {
-            try {
-               Thread.sleep(10 * 1000);
-            } catch (InterruptedException e1) {
-            }
-            continue;
-         }
-      }
-   }
-
-   @Test(enabled = true, dependsOnMethods = "testPublicIp")
-   public void testConfigureNode() throws InterruptedException, ExecutionException, TimeoutException, IOException {
-      api.configureNode(node.getId(), node.getName(), node.isEnabled(), "holy cow");
-   }
-
-   @Test(enabled = true, dependsOnMethods = "testPublicIp")
-   public void testLifeCycle() throws InterruptedException, ExecutionException, TimeoutException, IOException {
-
-      try {// per docs, this is not supported
-         api.undeployVApp(vApp.getHref());
-         fail("Expected UnsupportedOperationException");
-      } catch (UnsupportedOperationException e) {
-      }
-
-      try {// per docs, this is not supported
-         api.suspendVApp(vApp.getHref());
-         fail("Expected UnsupportedOperationException");
-      } catch (UnsupportedOperationException e) {
-      }
-
-      assert successTester.apply(api.resetVApp(vApp.getHref()).getHref());
-
-      vApp = api.getVApp(vApp.getHref());
-
-      assertEquals(vApp.getStatus(), Status.ON);
-
-      // TODO we need to determine whether shutdown is supported before invoking
-      // it.
-      // api.shutdownVApp(vApp.getId());
-      // vApp = api.getVApp(vApp.getId());
-      // assertEquals(vApp.getStatus(), VAppStatus.ON);
-
-      assert successTester.apply(api.powerOffVApp(vApp.getHref()).getHref());
-
-      vApp = api.getVApp(vApp.getHref());
-      assertEquals(vApp.getStatus(), Status.OFF);
-   }
-
-   @Test(enabled = true, dependsOnMethods = "testLifeCycle")
-   public void testConfigure() throws InterruptedException, ExecutionException, TimeoutException, IOException {
-
-      vApp = api.getVApp(vApp.getHref());
-
-      Task task = api.configureVApp(vApp, changeNameTo("eduardo").changeMemoryTo(1536).changeProcessorCountTo(1)
-            .addDisk(25 * 1048576).addDisk(25 * 1048576));
-
-      assert successTester.apply(task.getHref());
-
-      vApp = api.getVApp(vApp.getHref());
-      assertEquals(vApp.getName(), "eduardo");
-      assertEquals(find(vApp.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.PROCESSOR))
-            .getVirtualQuantity().longValue(), 1);
-      assertEquals(find(vApp.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.MEMORY))
-            .getVirtualQuantity().longValue(), 1536);
-      assertEquals(size(filter(vApp.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.DISK_DRIVE))),
-            3);
-
-      assert successTester.apply(api.powerOnVApp(vApp.getHref()).getHref());
-
-      loopAndCheckPass();
-
-      assert successTester.apply(api.powerOffVApp(vApp.getHref()).getHref());
-
-      // extract the disks on the vApp sorted by addressOnParent
-      List<ResourceAllocationSettingData> disks = Lists.newArrayList(filter(vApp.getResourceAllocations(),
-            CIMPredicates.resourceTypeIn(ResourceType.DISK_DRIVE)));
-
-      // delete the second disk
-      task = api.configureVApp(vApp,
-            deleteDiskWithAddressOnParent(Integer.parseInt(disks.get(1).getAddressOnParent())));
-
-      assert successTester.apply(task.getHref());
-
-      assert successTester.apply(api.powerOnVApp(vApp.getHref()).getHref());
-      loopAndCheckPass();
-   }
-
-   protected void verifyConfigurationOfVApp(VApp vApp, String serverName, String expectedOs, int processorCount,
-         long memory, long hardDisk) {
-      assertEquals(vApp.getName(), serverName);
-      assertEquals(vApp.getOperatingSystemDescription(), expectedOs);
-      assertEquals((int) find(vApp.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.PROCESSOR))
-            .getVirtualQuantity().longValue(), processorCount);
-      assertEquals(find(vApp.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.MEMORY))
-            .getVirtualQuantity().longValue(), memory);
-      assertEquals(find(vApp.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.DISK_DRIVE))
-            .getVirtualQuantity().longValue(), hardDisk);
-      assertEquals(vApp.getSize().longValue(),
-            find(vApp.getResourceAllocations(), CIMPredicates.resourceTypeIn(ResourceType.DISK_DRIVE))
-                  .getVirtualQuantity().longValue());
-   }
-
-   protected void doCheckPass(String address) throws IOException {
-      HostAndPort socket = HostAndPort.fromParts(address, 22);
-
-      System.out.printf("%d: %s awaiting ssh service to start%n", System.currentTimeMillis(), socket);
-      assert socketTester.apply(socket);
-      System.out.printf("%d: %s ssh service started%n", System.currentTimeMillis(), socket);
-
-      SshClient ssh = getConnectionFor(socket);
-      try {
-         ssh.connect();
-         System.out.printf("%d: %s ssh ssh made%n", System.currentTimeMillis(), socket);
-         System.out.println(ssh.exec("df -h"));
-         System.out.println(ssh.exec("ls -al /dev/sd*"));
-         System.out.println(ssh.exec("echo '$Ep455l0ud!2'|sudo -S fdisk -l"));
-      } finally {
-         if (ssh != null)
-            ssh.disconnect();
-      }
-   }
-
-   protected abstract SshClient getConnectionFor(HostAndPort socket);
-
-   @AfterGroups(groups = { "live" })
-   void cleanup() throws InterruptedException, ExecutionException, TimeoutException {
-      if (node != null)
-         api.deleteNode(node.getId());
-      if (is != null)
-         api.deleteInternetService(is.getId());
-      if (key != null)
-         api.deleteKeyPair(key.getId());
-      if (vApp != null) {
-         try {
-            successTester.apply(api.powerOffVApp(vApp.getHref()).getHref());
-         } catch (Exception e) {
-
-         }
-         api.deleteVApp(vApp.getHref());
-      }
-      if (clone != null) {
-         try {
-            successTester.apply(api.powerOffVApp(clone.getHref()).getHref());
-         } catch (Exception e) {
-
-         }
-         api.deleteVApp(clone.getHref());
-      }
-   }
-
-   @Override
-   protected TerremarkVCloudClient create(Properties props, Iterable<Module> modules) {
-      Injector injector = newBuilder().modules(modules).overrides(props).buildInjector();
-      sshFactory = injector.getInstance(SshClient.Factory.class);
-
-      // longer than default internet service timeout
-      socketTester = retry(injector.getInstance(SocketOpen.class), 300, 10, SECONDS);
-      successTester = retry(injector.getInstance(TaskSuccess.class), 650, 10, SECONDS);
-      api = injector.getInstance(TerremarkVCloudClient.class);
-      orgs = listOrgs();
-      return api;
-   }
-
-   @Test
-   public void testOrg() throws Exception {
-      for (Org org : orgs) {
-         assertNotNull(org);
-         assertNotNull(org.getName());
-         assert org.getCatalogs().size() >= 1;
-         assert org.getTasksLists().size() >= 1;
-         assert org.getVDCs().size() >= 1;
-         assertEquals(api.findOrgNamed(org.getName()), org);
-      }
-   }
-
-   @Test
-   public void testPropertiesCanOverrideDefaultOrg() throws Exception {
-      for (Org org : orgs) {
-         TerremarkVCloudClient newApi = null;
-         try {
-            newApi = create(
-                  overrideDefaults(ImmutableMap.of(VCloudConstants.PROPERTY_VCLOUD_DEFAULT_ORG, org.getName())),
-                  setupModules());
-            assertEquals(newApi.findOrgNamed(null), org);
-         } finally {
-            newApi.close();
-         }
-      }
-   }
-
-   public Properties overrideDefaults(Map<String, String> overrides) {
-      Properties properties = setupProperties();
-      properties.putAll(overrides);
-      return properties;
-   }
-
-   @Test
-   public void testCatalog() throws Exception {
-      for (Org org : orgs) {
-         for (ReferenceType cat : org.getCatalogs().values()) {
-            Catalog response = api.getCatalog(cat.getHref());
-            assertNotNull(response);
-            assertNotNull(response.getName());
-            assertNotNull(response.getHref());
-            assertEquals(api.findCatalogInOrgNamed(org.getName(), response.getName()), response);
-         }
-      }
-   }
-
-   @Test
-   public void testPropertiesCanOverrideDefaultCatalog() throws Exception {
-      for (Org org : orgs) {
-         for (ReferenceType cat : org.getCatalogs().values()) {
-            TerremarkVCloudClient newApi = null;
-            try {
-               newApi = create(
-                     overrideDefaults(ImmutableMap.of(VCloudConstants.PROPERTY_VCLOUD_DEFAULT_ORG, org.getName(),
-                           VCloudConstants.PROPERTY_VCLOUD_DEFAULT_CATALOG, cat.getName())), setupModules());
-               assertEquals(newApi.findCatalogInOrgNamed(null, null), api.getCatalog(cat.getHref()));
-            } finally {
-               newApi.close();
-            }
-         }
-      }
-   }
-
-   @Test
-   public void testGetVDCNetwork() throws Exception {
-      for (Org org : orgs) {
-         for (ReferenceType vdc : org.getVDCs().values()) {
-            VDC response = api.getVDC(vdc.getHref());
-            for (ReferenceType resource : response.getAvailableNetworks().values()) {
-               if (resource.getType().equals(TerremarkVCloudMediaType.NETWORK_XML)) {
-                  try {
-                     Network net = api.getNetwork(resource.getHref());
-                     assertNotNull(net);
-                     assertNotNull(net.getName());
-                     assertNotNull(net.getHref());
-                     assertEquals(
-                           api.findNetworkInOrgVDCNamed(org.getName(), response.getName(), net.getName()), net);
-                  } catch (AuthorizationException e) {
-
-                  }
-               }
-            }
-         }
-      }
-   }
-
-   @Test
-   public void testPropertiesCanOverrideDefaultNetwork() throws Exception {
-      for (Org org : orgs) {
-         for (ReferenceType vdc : org.getVDCs().values()) {
-            VDC response = api.getVDC(vdc.getHref());
-            for (ReferenceType net : response.getAvailableNetworks().values()) {
-               TerremarkVCloudClient newApi = null;
-               try {
-                  newApi = create(
-                        overrideDefaults(ImmutableMap.of(VCloudConstants.PROPERTY_VCLOUD_DEFAULT_ORG, org.getName(),
-                              VCloudConstants.PROPERTY_VCLOUD_DEFAULT_VDC, vdc.getName(),
-                              VCloudConstants.PROPERTY_VCLOUD_DEFAULT_NETWORK, net.getName())), setupModules());
-                  assertEquals(newApi.findNetworkInOrgVDCNamed(null, null, net.getName()),
-                        api.getNetwork(net.getHref()));
-               } finally {
-                  newApi.close();
-               }
-            }
-         }
-      }
-   }
-
-   @Test
-   public void testGetCatalogItem() throws Exception {
-      for (Org org : orgs) {
-         for (ReferenceType cat : org.getCatalogs().values()) {
-            Catalog response = api.getCatalog(cat.getHref());
-            for (ReferenceType resource : response.values()) {
-               if (resource.getType().equals(TerremarkVCloudMediaType.CATALOGITEM_XML)) {
-                  CatalogItem item = api.getCatalogItem(resource.getHref());
-                  verifyCatalogItem(item);
-               }
-            }
-         }
-      }
-   }
-
-   protected void verifyCatalogItem(CatalogItem item) {
-      assertNotNull(item);
-      assertNotNull(item);
-      assertNotNull(item.getEntity());
-      assertNotNull(item.getHref());
-      assertNotNull(item.getProperties());
-      assertNotNull(item.getType());
-   }
-
-   @Test
-   public void testFindCatalogItem() throws Exception {
-      for (Org org : orgs) {
-         for (ReferenceType cat : org.getCatalogs().values()) {
-            Catalog response = api.getCatalog(cat.getHref());
-            for (ReferenceType resource : response.values()) {
-               if (resource.getType().equals(TerremarkVCloudMediaType.CATALOGITEM_XML)) {
-                  CatalogItem item = api.findCatalogItemInOrgCatalogNamed(org.getName(), response.getName(),
-                        resource.getName());
-                  verifyCatalogItem(item);
-               }
-            }
-         }
-      }
-   }
-
-   @Test
-   public void testDefaultVDC() throws Exception {
-      for (Org org : orgs) {
-         for (ReferenceType vdc : org.getVDCs().values()) {
-            VDC response = api.getVDC(vdc.getHref());
-            assertNotNull(response);
-            assertNotNull(response.getName());
-            assertNotNull(response.getHref());
-            assertNotNull(response.getResourceEntities());
-            assertNotNull(response.getAvailableNetworks());
-            assertNotNull(response.getCatalog());
-            assertNotNull(response.getInternetServices());
-            assertNotNull(response.getPublicIps());
-            assertEquals(api.getVDC(response.getHref()), response);
-         }
-      }
-   }
-
-   @Test
-   public void testPropertiesCanOverrideDefaultVDC() throws Exception {
-      for (Org org : orgs) {
-         for (ReferenceType vdc : org.getVDCs().values()) {
-            TerremarkVCloudClient newApi = null;
-            try {
-               newApi = create(
-                     overrideDefaults(ImmutableMap.of(VCloudConstants.PROPERTY_VCLOUD_DEFAULT_ORG, org.getName(),
-                           VCloudConstants.PROPERTY_VCLOUD_DEFAULT_VDC, vdc.getName())), setupModules());
-               assertEquals(newApi.findVDCInOrgNamed(null, null), api.getVDC(vdc.getHref()));
-            } finally {
-               newApi.close();
-            }
-         }
-      }
-   }
-
-   @Test
-   public void testDefaultTasksList() throws Exception {
-      for (Org org : orgs) {
-         for (ReferenceType tasksList : org.getTasksLists().values()) {
-            org.jclouds.trmk.vcloud_0_8.domain.TasksList response = api.findTasksListInOrgNamed(org.getName(),
-                  tasksList.getName());
-            assertNotNull(response);
-            assertNotNull(response.getLocation());
-            assertNotNull(response.getTasks());
-            assertEquals(api.getTasksList(response.getLocation()).getLocation(), response.getLocation());
-         }
-      }
-   }
-
-   @Test
-   public void testPropertiesCanOverrideDefaultTasksList() throws Exception {
-      for (Org org : orgs) {
-         for (ReferenceType tasksList : org.getTasksLists().values()) {
-            TerremarkVCloudClient newApi = null;
-            try {
-               newApi = create(
-                     overrideDefaults(ImmutableMap.of(VCloudConstants.PROPERTY_VCLOUD_DEFAULT_ORG, org.getName(),
-                           VCloudConstants.PROPERTY_VCLOUD_DEFAULT_TASKSLIST, tasksList.getName())), setupModules());
-               assertEquals(newApi.findTasksListInOrgNamed(null, null),
-                     api.getTasksList(tasksList.getHref()));
-            } finally {
-               newApi.close();
-            }
-         }
-      }
-   }
-
-   @Test
-   public void testGetTask() throws Exception {
-      for (Org org : orgs) {
-         for (ReferenceType tasksList : org.getTasksLists().values()) {
-            org.jclouds.trmk.vcloud_0_8.domain.TasksList response = api.findTasksListInOrgNamed(org.getName(),
-                  tasksList.getName());
-            assertNotNull(response);
-            assertNotNull(response.getLocation());
-            assertNotNull(response.getTasks());
-            if (response.getTasks().size() > 0) {
-               Task task = response.getTasks().last();
-               assertEquals(api.getTask(task.getHref()).getHref(), task.getHref());
-            }
-         }
-      }
-   }
-
-   protected Iterable<Org> orgs;
-
-   protected Iterable<Org> listOrgs() {
-      return Iterables.transform(api.listOrgs().values(), new Function<ReferenceType, Org>() {
-
-         @Override
-         public Org apply(ReferenceType arg0) {
-            return api.getOrg(arg0.getHref());
-         }
-
-      });
-   }
-
-   @Test
-   public void testGetVAppTemplate() throws Exception {
-      for (Org org : orgs) {
-         for (ReferenceType cat : org.getCatalogs().values()) {
-            Catalog response = api.getCatalog(cat.getHref());
-            for (ReferenceType resource : response.values()) {
-               if (resource.getType().equals(TerremarkVCloudMediaType.CATALOGITEM_XML)) {
-                  CatalogItem item = api.getCatalogItem(resource.getHref());
-                  if (item.getEntity().getType().equals(TerremarkVCloudMediaType.VAPPTEMPLATE_XML)) {
-                     assertNotNull(api.getVAppTemplate(item.getEntity().getHref()));
-                  }
-               }
-            }
-         }
-      }
-   }
-
-   @Test
-   public void testGetVApp() throws Exception {
-      for (Org org : orgs) {
-         for (ReferenceType vdc : org.getVDCs().values()) {
-            VDC response = api.getVDC(vdc.getHref());
-            for (ReferenceType item : response.getResourceEntities().values()) {
-               if (item.getType().equals(TerremarkVCloudMediaType.VAPP_XML)) {
-                  try {
-                     VApp app = api.getVApp(item.getHref());
-                     assertNotNull(app);
-                  } catch (RuntimeException e) {
-
-                  }
-               }
-            }
-         }
-      }
-   }
-
-   @Test
-   public void testFindVAppTemplate() throws Exception {
-      for (Org org : orgs) {
-         for (ReferenceType cat : org.getCatalogs().values()) {
-            Catalog response = api.getCatalog(cat.getHref());
-            for (ReferenceType resource : response.values()) {
-               if (resource.getType().equals(TerremarkVCloudMediaType.CATALOGITEM_XML)) {
-                  CatalogItem item = api.getCatalogItem(resource.getHref());
-                  if (item.getEntity().getType().equals(TerremarkVCloudMediaType.VAPPTEMPLATE_XML)) {
-                     assertNotNull(api.findVAppTemplateInOrgCatalogNamed(org.getName(), response.getName(), item
-                           .getEntity().getName()));
-                  }
-               }
-            }
-         }
-      }
-   }
-
-   @Override
-   protected Iterable<Module> setupModules() {
-      return ImmutableSet.<Module> of(getLoggingModule(), new SshjSshClientModule());
-   }
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/compute/TerremarkVCloudComputeClientTest.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/compute/TerremarkVCloudComputeClientTest.java b/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/compute/TerremarkVCloudComputeClientTest.java
index 09419d5..c2f364b 100644
--- a/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/compute/TerremarkVCloudComputeClientTest.java
+++ b/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/compute/TerremarkVCloudComputeClientTest.java
@@ -33,7 +33,7 @@ import org.jclouds.compute.ComputeServiceAdapter.NodeAndInitialCredentials;
 import org.jclouds.compute.domain.NodeMetadata;
 import org.jclouds.domain.Credentials;
 import org.jclouds.domain.LoginCredentials;
-import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudClient;
+import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudApi;
 import org.jclouds.trmk.vcloud_0_8.domain.Status;
 import org.jclouds.trmk.vcloud_0_8.domain.Task;
 import org.jclouds.trmk.vcloud_0_8.domain.VApp;
@@ -64,7 +64,7 @@ public class TerremarkVCloudComputeClientTest {
       URI vdcURI = URI.create("vdc");
 
       expect(template.getDescription()).andReturn(description).atLeastOnce();
-      TerremarkVCloudClient client = createMock(TerremarkVCloudClient.class);
+      TerremarkVCloudApi client = createMock(TerremarkVCloudApi.class);
       VApp vApp = createMock(VApp.class);
       InternetServiceAndPublicIpAddressSupplier supplier = createMock(InternetServiceAndPublicIpAddressSupplier.class);
       expect(client.getVAppTemplate(templateURI)).andReturn(template);

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/compute/strategy/DeleteKeyPairTest.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/compute/strategy/DeleteKeyPairTest.java b/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/compute/strategy/DeleteKeyPairTest.java
index eba92fe..23191ae 100644
--- a/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/compute/strategy/DeleteKeyPairTest.java
+++ b/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/compute/strategy/DeleteKeyPairTest.java
@@ -26,7 +26,7 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentMap;
 
 import org.jclouds.domain.Credentials;
-import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudClient;
+import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudApi;
 import org.jclouds.trmk.vcloud_0_8.compute.domain.OrgAndName;
 import org.jclouds.trmk.vcloud_0_8.domain.KeyPair;
 import org.testng.annotations.Test;
@@ -124,7 +124,7 @@ public class DeleteKeyPairTest {
    @SuppressWarnings("unchecked")
    private DeleteKeyPair setupStrategy() {
       Map<String, Credentials> credentialStore = createMock(ConcurrentMap.class);
-      TerremarkVCloudClient terremarkClient = createMock(TerremarkVCloudClient.class);
+      TerremarkVCloudApi terremarkClient = createMock(TerremarkVCloudApi.class);
 
       return new DeleteKeyPair(terremarkClient, credentialStore);
    }

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/compute/suppliers/VAppTemplatesInOrgsLiveTest.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/compute/suppliers/VAppTemplatesInOrgsLiveTest.java b/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/compute/suppliers/VAppTemplatesInOrgsLiveTest.java
index 34d9214..221fd71 100644
--- a/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/compute/suppliers/VAppTemplatesInOrgsLiveTest.java
+++ b/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/compute/suppliers/VAppTemplatesInOrgsLiveTest.java
@@ -22,7 +22,7 @@ import java.util.Set;
 
 import org.jclouds.compute.domain.Image;
 import org.jclouds.compute.internal.BaseComputeServiceContextLiveTest;
-import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudClient;
+import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudApi;
 import org.jclouds.trmk.vcloud_0_8.domain.CatalogItem;
 import org.jclouds.trmk.vcloud_0_8.functions.AllCatalogItemsInOrg;
 import org.testng.annotations.BeforeClass;
@@ -44,7 +44,7 @@ extends BaseComputeServiceContextLiveTest {
       provider = "trmk-vcloudexpress";
    }
 
-   private TerremarkVCloudClient tmClient;
+   private TerremarkVCloudApi tmClient;
    private VAppTemplatesInOrgs parser;
    private AllCatalogItemsInOrg allCatalogItemsInOrg;
 
@@ -54,7 +54,7 @@ extends BaseComputeServiceContextLiveTest {
       super.setupContext();
       Injector injector = view.utils().injector();
 
-      tmClient = injector.getInstance(TerremarkVCloudClient.class);
+      tmClient = injector.getInstance(TerremarkVCloudApi.class);
       allCatalogItemsInOrg = injector.getInstance(AllCatalogItemsInOrg.class);
       parser = injector.getInstance(VAppTemplatesInOrgs.class);
    }

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/internal/BaseTerremarkApiLiveTest.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/internal/BaseTerremarkApiLiveTest.java b/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/internal/BaseTerremarkApiLiveTest.java
new file mode 100644
index 0000000..ad14f33
--- /dev/null
+++ b/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/internal/BaseTerremarkApiLiveTest.java
@@ -0,0 +1,70 @@
+/*
+ * 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.trmk.vcloud_0_8.internal;
+
+import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.jclouds.util.Predicates2.retry;
+
+import org.jclouds.compute.ComputeService;
+import org.jclouds.compute.internal.BaseComputeServiceContextLiveTest;
+import org.jclouds.predicates.SocketOpen;
+import org.jclouds.ssh.SshClient.Factory;
+import org.jclouds.sshj.config.SshjSshClientModule;
+import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudApi;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Predicate;
+import com.google.common.net.HostAndPort;
+import com.google.inject.Injector;
+import com.google.inject.Module;
+
+/**
+ * 
+ * @author Adrian Cole
+ */
+@Test(groups = "live", enabled = true, singleThreaded = true)
+public abstract class BaseTerremarkApiLiveTest extends BaseComputeServiceContextLiveTest {
+
+   protected String prefix = System.getProperty("user.name");
+
+   protected ComputeService client;
+
+   public BaseTerremarkApiLiveTest() {
+       provider = "trmk-ecloud";
+   }
+
+   protected Predicate<HostAndPort> socketTester;
+   protected Factory sshFactory;
+   protected TerremarkVCloudApi api;
+
+   @Override
+   @BeforeClass(groups = { "integration", "live" })
+   public void setupContext() {
+      super.setupContext();
+      Injector injector = view.utils().injector();
+      SocketOpen socketOpen = injector.getInstance(SocketOpen.class);
+      socketTester = retry(socketOpen, 300, 1, SECONDS);
+      sshFactory = injector.getInstance(Factory.class);
+      api = injector.getInstance(TerremarkVCloudApi.class);
+   }
+   
+   protected Module getSshModule() {
+      return new SshjSshClientModule();
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/internal/BaseTerremarkClientLiveTest.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/internal/BaseTerremarkClientLiveTest.java b/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/internal/BaseTerremarkClientLiveTest.java
deleted file mode 100644
index 9e5dde9..0000000
--- a/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/internal/BaseTerremarkClientLiveTest.java
+++ /dev/null
@@ -1,70 +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.trmk.vcloud_0_8.internal;
-
-import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.jclouds.util.Predicates2.retry;
-
-import org.jclouds.compute.ComputeService;
-import org.jclouds.compute.internal.BaseComputeServiceContextLiveTest;
-import org.jclouds.predicates.SocketOpen;
-import org.jclouds.ssh.SshClient.Factory;
-import org.jclouds.sshj.config.SshjSshClientModule;
-import org.jclouds.trmk.vcloud_0_8.TerremarkVCloudClient;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import com.google.common.base.Predicate;
-import com.google.common.net.HostAndPort;
-import com.google.inject.Injector;
-import com.google.inject.Module;
-
-/**
- * 
- * @author Adrian Cole
- */
-@Test(groups = "live", enabled = true, singleThreaded = true)
-public abstract class BaseTerremarkClientLiveTest extends BaseComputeServiceContextLiveTest {
-
-   protected String prefix = System.getProperty("user.name");
-
-   protected ComputeService client;
-
-   public BaseTerremarkClientLiveTest() {
-       provider = "trmk-ecloud";
-   }
-
-   protected Predicate<HostAndPort> socketTester;
-   protected Factory sshFactory;
-   protected TerremarkVCloudClient api;
-
-   @Override
-   @BeforeClass(groups = { "integration", "live" })
-   public void setupContext() {
-      super.setupContext();
-      Injector injector = view.utils().injector();
-      SocketOpen socketOpen = injector.getInstance(SocketOpen.class);
-      socketTester = retry(socketOpen, 300, 1, SECONDS);
-      sshFactory = injector.getInstance(Factory.class);
-      api = injector.getInstance(TerremarkVCloudClient.class);
-   }
-   
-   protected Module getSshModule() {
-      return new SshjSshClientModule();
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudLoginApiTest.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudLoginApiTest.java b/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudLoginApiTest.java
new file mode 100644
index 0000000..95df1ff
--- /dev/null
+++ b/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudLoginApiTest.java
@@ -0,0 +1,99 @@
+/*
+ * 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.trmk.vcloud_0_8.internal;
+
+import static org.jclouds.reflect.Reflection2.method;
+import static org.testng.Assert.assertEquals;
+
+import java.io.IOException;
+import java.net.URI;
+
+import javax.ws.rs.core.HttpHeaders;
+
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.filters.BasicAuthentication;
+import org.jclouds.location.Provider;
+import org.jclouds.providers.AnonymousProviderMetadata;
+import org.jclouds.providers.ProviderMetadata;
+import org.jclouds.rest.internal.BaseAsyncClientTest;
+import org.jclouds.rest.internal.GeneratedHttpRequest;
+import org.jclouds.trmk.vcloud_0_8.endpoints.VCloudLogin;
+import org.jclouds.trmk.vcloud_0_8.functions.ParseLoginResponseFromHeaders;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableList;
+import com.google.common.reflect.Invokable;
+import com.google.inject.Binder;
+import com.google.inject.Module;
+import com.google.inject.Provides;
+
+/**
+ * Tests behavior of {@code VCloudLoginApi}
+ * 
+ * @author Adrian Cole
+ */
+// NOTE:without testName, this will not call @Before* and fail w/NPE during
+// surefire
+@Test(groups = "unit", testName = "VCloudLoginApiTest")
+public class TerremarkVCloudLoginApiTest extends BaseAsyncClientTest<TerremarkVCloudLoginApi> {
+
+   public void testLogin() throws SecurityException, NoSuchMethodException, IOException {
+      Invokable<?, ?> method = method(TerremarkVCloudLoginApi.class, "login");
+      GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.of());
+
+      assertEquals(request.getRequestLine(), "POST http://localhost:8080/login HTTP/1.1");
+      assertNonPayloadHeadersEqual(request, HttpHeaders.ACCEPT + ": application/vnd.vmware.vcloud.orgList+xml\n");
+      assertPayloadEquals(request, null, null, false);
+
+      assertResponseParserClassEquals(method, request, ParseLoginResponseFromHeaders.class);
+      assertSaxResponseParserClassEquals(method, null);
+      assertFallbackClassEquals(method, null);
+
+      checkFilters(request);
+   }
+
+   @Override
+   protected void checkFilters(HttpRequest request) {
+      assertEquals(request.getFilters().size(), 1);
+      assertEquals(request.getFilters().get(0).getClass(), BasicAuthentication.class);
+   }
+
+   @Override
+   protected Module createModule() {
+      return new Module() {
+
+         @Override
+         public void configure(Binder binder) {
+         }
+
+         @Provides
+         @VCloudLogin
+         Supplier<URI> provideURI(@Provider Supplier<URI> uri) {
+            return uri;
+         }
+
+      };
+   }
+
+   @Override
+   protected ProviderMetadata createProviderMetadata() {
+      return AnonymousProviderMetadata.forApiOnEndpoint(TerremarkVCloudLoginApi.class,
+            "http://localhost:8080/login");
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a61ad06c/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudLoginAsyncClientTest.java
----------------------------------------------------------------------
diff --git a/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudLoginAsyncClientTest.java b/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudLoginAsyncClientTest.java
deleted file mode 100644
index 078d4ab..0000000
--- a/common/trmk/src/test/java/org/jclouds/trmk/vcloud_0_8/internal/TerremarkVCloudLoginAsyncClientTest.java
+++ /dev/null
@@ -1,99 +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.trmk.vcloud_0_8.internal;
-
-import static org.jclouds.reflect.Reflection2.method;
-import static org.testng.Assert.assertEquals;
-
-import java.io.IOException;
-import java.net.URI;
-
-import javax.ws.rs.core.HttpHeaders;
-
-import org.jclouds.http.HttpRequest;
-import org.jclouds.http.filters.BasicAuthentication;
-import org.jclouds.location.Provider;
-import org.jclouds.providers.AnonymousProviderMetadata;
-import org.jclouds.providers.ProviderMetadata;
-import org.jclouds.rest.internal.BaseAsyncClientTest;
-import org.jclouds.rest.internal.GeneratedHttpRequest;
-import org.jclouds.trmk.vcloud_0_8.endpoints.VCloudLogin;
-import org.jclouds.trmk.vcloud_0_8.functions.ParseLoginResponseFromHeaders;
-import org.testng.annotations.Test;
-
-import com.google.common.base.Supplier;
-import com.google.common.collect.ImmutableList;
-import com.google.common.reflect.Invokable;
-import com.google.inject.Binder;
-import com.google.inject.Module;
-import com.google.inject.Provides;
-
-/**
- * Tests behavior of {@code VCloudLoginAsyncClient}
- * 
- * @author Adrian Cole
- */
-// NOTE:without testName, this will not call @Before* and fail w/NPE during
-// surefire
-@Test(groups = "unit", testName = "VCloudLoginAsyncClientTest")
-public class TerremarkVCloudLoginAsyncClientTest extends BaseAsyncClientTest<TerremarkVCloudLoginAsyncClient> {
-
-   public void testLogin() throws SecurityException, NoSuchMethodException, IOException {
-      Invokable<?, ?> method = method(TerremarkVCloudLoginAsyncClient.class, "login");
-      GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.of());
-
-      assertEquals(request.getRequestLine(), "POST http://localhost:8080/login HTTP/1.1");
-      assertNonPayloadHeadersEqual(request, HttpHeaders.ACCEPT + ": application/vnd.vmware.vcloud.orgList+xml\n");
-      assertPayloadEquals(request, null, null, false);
-
-      assertResponseParserClassEquals(method, request, ParseLoginResponseFromHeaders.class);
-      assertSaxResponseParserClassEquals(method, null);
-      assertFallbackClassEquals(method, null);
-
-      checkFilters(request);
-   }
-
-   @Override
-   protected void checkFilters(HttpRequest request) {
-      assertEquals(request.getFilters().size(), 1);
-      assertEquals(request.getFilters().get(0).getClass(), BasicAuthentication.class);
-   }
-
-   @Override
-   protected Module createModule() {
-      return new Module() {
-
-         @Override
-         public void configure(Binder binder) {
-         }
-
-         @Provides
-         @VCloudLogin
-         Supplier<URI> provideURI(@Provider Supplier<URI> uri) {
-            return uri;
-         }
-
-      };
-   }
-
-   @Override
-   protected ProviderMetadata createProviderMetadata() {
-      return AnonymousProviderMetadata.forClientMappedToAsyncClientOnEndpoint(TerremarkVCloudLoginClient.class,
-            TerremarkVCloudLoginAsyncClient.class, "http://localhost:8080/login");
-   }
-
-}