-------------------------------------------------------------------------------
Test set: TestSuite
-------------------------------------------------------------------------------
Tests run: 142, Failures: 3, Errors: 0, Skipped: 6, Time elapsed: 3,785.618 sec <<< FAILURE!
testCreateAndRunAService(org.jclouds.trmk.vcloudexpress.compute.TerremarkVCloudExpressComputeServiceLiveTest)  Time elapsed: 920.183 sec  <<< FAILURE!
java.lang.RuntimeException: org.jclouds.compute.callables.ScriptStillRunningException: time up waiting 600s for running task[RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete{node=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423614, providerId=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423614, group=vcx-s, name=vcx-s-3ba, location=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vdc/32, scope=ZONE, description=Miami Environment 1, parent=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/org/48, iso3166Codes=[], metadata={}], uri=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423614, imageId=null, os=[name=46, family=ubuntu, version=, arch=null, is64Bit=true, description=Ubuntu Linux (64-bit)], state=RUNNING, loginPort=22, hostname=vcx-s-3ba, privateAddresses=[10.114.34.131], publicAddresses=[204.51.124.221], hardware=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423614, providerId=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423614, name=vcx-s-3ba, processors=[[cores=1.0, speed=1.0]], ram=512, volumes=[[id=0, type=LOCAL, size=4.0, device=null, durable=true, isBootDevice=true]], supportsImage=idEquals(https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423614), tags=[]], loginUser=vcloud, userMetadata={}, tags=[]], name=configure-jboss, runAsRoot=true}] to complete. call get() on this exception to get access to the task in progress
	at com.google.common.base.Throwables.propagate(Throwables.java:156)
	at org.jclouds.compute.callables.RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete.doCall(RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete.java:62)
	at org.jclouds.compute.callables.RunScriptOnNodeAsInitScriptUsingSsh.call(RunScriptOnNodeAsInitScriptUsingSsh.java:91)
	at org.jclouds.compute.internal.BaseComputeService.runScriptOnNode(BaseComputeService.java:557)
	at org.jclouds.compute.BaseComputeServiceLiveTest.testCreateAndRunAService(BaseComputeServiceLiveTest.java:667)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.compute.callables.ScriptStillRunningException: time up waiting 600s for running task[RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete{node=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423614, providerId=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423614, group=vcx-s, name=vcx-s-3ba, location=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vdc/32, scope=ZONE, description=Miami Environment 1, parent=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/org/48, iso3166Codes=[], metadata={}], uri=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423614, imageId=null, os=[name=46, family=ubuntu, version=, arch=null, is64Bit=true, description=Ubuntu Linux (64-bit)], state=RUNNING, loginPort=22, hostname=vcx-s-3ba, privateAddresses=[10.114.34.131], publicAddresses=[204.51.124.221], hardware=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423614, providerId=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423614, name=vcx-s-3ba, processors=[[cores=1.0, speed=1.0]], ram=512, volumes=[[id=0, type=LOCAL, size=4.0, device=null, durable=true, isBootDevice=true]], supportsImage=idEquals(https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423614), tags=[]], loginUser=vcloud, userMetadata={}, tags=[]], name=configure-jboss, runAsRoot=true}] to complete. call get() on this exception to get access to the task in progress
	at org.jclouds.compute.callables.BlockUntilInitScriptStatusIsZeroThenReturnOutput.get(BlockUntilInitScriptStatusIsZeroThenReturnOutput.java:195)
	at org.jclouds.compute.callables.RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete.doCall(RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete.java:60)
	... 22 more
Caused by: org.jclouds.compute.callables.ScriptStillRunningException: time up waiting 600s for running task[RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete{node=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423614, providerId=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423614, group=vcx-s, name=vcx-s-3ba, location=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vdc/32, scope=ZONE, description=Miami Environment 1, parent=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/org/48, iso3166Codes=[], metadata={}], uri=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423614, imageId=null, os=[name=46, family=ubuntu, version=, arch=null, is64Bit=true, description=Ubuntu Linux (64-bit)], state=RUNNING, loginPort=22, hostname=vcx-s-3ba, privateAddresses=[10.114.34.131], publicAddresses=[204.51.124.221], hardware=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423614, providerId=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423614, name=vcx-s-3ba, processors=[[cores=1.0, speed=1.0]], ram=512, volumes=[[id=0, type=LOCAL, size=4.0, device=null, durable=true, isBootDevice=true]], supportsImage=idEquals(https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423614), tags=[]], loginUser=vcloud, userMetadata={}, tags=[]], name=configure-jboss, runAsRoot=true}] to complete. call get() on this exception to get access to the task in progress
	at org.jclouds.compute.callables.BlockUntilInitScriptStatusIsZeroThenReturnOutput.get(BlockUntilInitScriptStatusIsZeroThenReturnOutput.java:195)
	at org.jclouds.compute.callables.RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete.doCall(RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete.java:60)
	... 22 more
testTemplateBuilderWithLoginUserSpecified(org.jclouds.trmk.vcloudexpress.compute.TerremarkVCloudExpressTemplateBuilderLiveTest)  Time elapsed: 5.354 sec  <<< FAILURE!
java.lang.NullPointerException
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImageForVCloudExpressVAppTemplate.apply(ImageForVCloudExpressVAppTemplate.java:61)
	at org.jclouds.trmk.vcloud_0_8.compute.functions.ImageForVCloudExpressVAppTemplate.apply(ImageForVCloudExpressVAppTemplate.java:38)
	at com.google.common.collect.Iterators$8.next(Iterators.java:812)
	at com.google.common.collect.Iterators$5.next(Iterators.java:554)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:287)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:73)
	at org.jclouds.trmk.vcloud_0_8.compute.suppliers.VAppTemplatesInOrgs.get(VAppTemplatesInOrgs.java:46)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:257)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:254)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:92)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:59)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:722)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:597)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:591)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.tryOverrideUsingPropertyKey(BaseTemplateBuilderLiveTest.java:281)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderWithLoginUserSpecified(BaseTemplateBuilderLiveTest.java:262)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
testCreateTwoNodesWithRunScript(org.jclouds.trmk.vcloudexpress.compute.TerremarkVCloudExpressComputeServiceLiveTest)  Time elapsed: 861.725 sec  <<< FAILURE!
org.jclouds.compute.RunNodesException: error running 2 nodes group(vcx) location(https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vdc/32) image(https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vappTemplate/41) size(cpu=1,ram=512,disk=10) options(TerremarkVCloudTemplateOptions [keyPair=32:f7:03:d5:e0:27:0f:18:19:e3:4a:4b:23:75:bf:ec, noKeyPair=false, inboundPorts=[22], privateKey=false, publicKey=false, runScript=true, port:seconds=-1:-1, userMetadata: {}])
Execution failures:
0 error[s]
Node failures:
1) RuntimeException on node https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423624:
java.lang.RuntimeException: org.jclouds.compute.callables.ScriptStillRunningException: time up waiting 600s for running task[RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete{node=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423624, providerId=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423624, group=vcx, name=vcx-773, location=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vdc/32, scope=ZONE, description=Miami Environment 1, parent=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/org/48, iso3166Codes=[], metadata={}], uri=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423624, imageId=null, os=[name=46, family=ubuntu, version=, arch=null, is64Bit=true, description=Ubuntu Linux (64-bit)], state=RUNNING, loginPort=22, hostname=vcx-773, privateAddresses=[10.114.34.131], publicAddresses=[204.51.124.223], hardware=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423624, providerId=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423624, name=vcx-773, processors=[[cores=1.0, speed=1.0]], ram=512, volumes=[[id=0, type=LOCAL, size=4.0, device=null, durable=true, isBootDevice=true]], supportsImage=idEquals(https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423624), tags=[]], loginUser=vcloud, userMetadata={}, tags=[]], name=bootstrap, runAsRoot=true}] to complete. call get() on this exception to get access to the task in progress
	at com.google.common.base.Throwables.propagate(Throwables.java:156)
	at org.jclouds.compute.callables.RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete.doCall(RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete.java:62)
	at org.jclouds.compute.callables.RunScriptOnNodeAsInitScriptUsingSsh.call(RunScriptOnNodeAsInitScriptUsingSsh.java:91)
	at org.jclouds.compute.strategy.CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap.call(CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap.java:150)
	at org.jclouds.compute.strategy.CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap.apply(CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap.java:170)
	at org.jclouds.compute.strategy.CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap.apply(CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap.java:57)
	at com.google.common.util.concurrent.Futures$4.apply(Futures.java:503)
	at com.google.common.util.concurrent.Futures$4.apply(Futures.java:501)
	at com.google.common.util.concurrent.Futures$3.apply(Futures.java:279)
	at com.google.common.util.concurrent.Futures$ChainingListenableFuture.run(Futures.java:729)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.compute.callables.ScriptStillRunningException: time up waiting 600s for running task[RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete{node=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423624, providerId=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423624, group=vcx, name=vcx-773, location=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vdc/32, scope=ZONE, description=Miami Environment 1, parent=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/org/48, iso3166Codes=[], metadata={}], uri=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423624, imageId=null, os=[name=46, family=ubuntu, version=, arch=null, is64Bit=true, description=Ubuntu Linux (64-bit)], state=RUNNING, loginPort=22, hostname=vcx-773, privateAddresses=[10.114.34.131], publicAddresses=[204.51.124.223], hardware=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423624, providerId=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423624, name=vcx-773, processors=[[cores=1.0, speed=1.0]], ram=512, volumes=[[id=0, type=LOCAL, size=4.0, device=null, durable=true, isBootDevice=true]], supportsImage=idEquals(https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423624), tags=[]], loginUser=vcloud, userMetadata={}, tags=[]], name=bootstrap, runAsRoot=true}] to complete. call get() on this exception to get access to the task in progress
	at org.jclouds.compute.callables.BlockUntilInitScriptStatusIsZeroThenReturnOutput.get(BlockUntilInitScriptStatusIsZeroThenReturnOutput.java:195)
	at org.jclouds.compute.callables.RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete.doCall(RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete.java:60)
	... 11 more
2) RuntimeException on node https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626:
java.lang.RuntimeException: org.jclouds.compute.callables.ScriptStillRunningException: time up waiting 600s for running task[RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete{node=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626, providerId=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626, group=vcx, name=vcx-537, location=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vdc/32, scope=ZONE, description=Miami Environment 1, parent=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/org/48, iso3166Codes=[], metadata={}], uri=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626, imageId=null, os=[name=46, family=ubuntu, version=, arch=null, is64Bit=true, description=Ubuntu Linux (64-bit)], state=RUNNING, loginPort=22, hostname=vcx-537, privateAddresses=[10.114.34.132], publicAddresses=[204.51.124.225], hardware=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626, providerId=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626, name=vcx-537, processors=[[cores=1.0, speed=1.0]], ram=512, volumes=[[id=0, type=LOCAL, size=4.0, device=null, durable=true, isBootDevice=true]], supportsImage=idEquals(https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626), tags=[]], loginUser=vcloud, userMetadata={}, tags=[]], name=bootstrap, runAsRoot=true}] to complete. call get() on this exception to get access to the task in progress
	at com.google.common.base.Throwables.propagate(Throwables.java:156)
	at org.jclouds.compute.callables.RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete.doCall(RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete.java:62)
	at org.jclouds.compute.callables.RunScriptOnNodeAsInitScriptUsingSsh.call(RunScriptOnNodeAsInitScriptUsingSsh.java:91)
	at org.jclouds.compute.strategy.CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap.call(CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap.java:150)
	at org.jclouds.compute.strategy.CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap.apply(CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap.java:170)
	at org.jclouds.compute.strategy.CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap.apply(CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap.java:57)
	at com.google.common.util.concurrent.Futures$4.apply(Futures.java:503)
	at com.google.common.util.concurrent.Futures$4.apply(Futures.java:501)
	at com.google.common.util.concurrent.Futures$3.apply(Futures.java:279)
	at com.google.common.util.concurrent.Futures$ChainingListenableFuture.run(Futures.java:729)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.compute.callables.ScriptStillRunningException: time up waiting 600s for running task[RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete{node=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626, providerId=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626, group=vcx, name=vcx-537, location=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vdc/32, scope=ZONE, description=Miami Environment 1, parent=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/org/48, iso3166Codes=[], metadata={}], uri=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626, imageId=null, os=[name=46, family=ubuntu, version=, arch=null, is64Bit=true, description=Ubuntu Linux (64-bit)], state=RUNNING, loginPort=22, hostname=vcx-537, privateAddresses=[10.114.34.132], publicAddresses=[204.51.124.225], hardware=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626, providerId=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626, name=vcx-537, processors=[[cores=1.0, speed=1.0]], ram=512, volumes=[[id=0, type=LOCAL, size=4.0, device=null, durable=true, isBootDevice=true]], supportsImage=idEquals(https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626), tags=[]], loginUser=vcloud, userMetadata={}, tags=[]], name=bootstrap, runAsRoot=true}] to complete. call get() on this exception to get access to the task in progress
	at org.jclouds.compute.callables.BlockUntilInitScriptStatusIsZeroThenReturnOutput.get(BlockUntilInitScriptStatusIsZeroThenReturnOutput.java:195)
	at org.jclouds.compute.callables.RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete.doCall(RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete.java:60)
	... 11 more
2 error[s]
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:207)
	at org.jclouds.compute.BaseComputeServiceLiveTest.testCreateTwoNodesWithRunScript(BaseComputeServiceLiveTest.java:350)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.compute.callables.ScriptStillRunningException: time up waiting 600s for running task[RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete{node=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423624, providerId=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423624, group=vcx, name=vcx-773, location=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vdc/32, scope=ZONE, description=Miami Environment 1, parent=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/org/48, iso3166Codes=[], metadata={}], uri=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423624, imageId=null, os=[name=46, family=ubuntu, version=, arch=null, is64Bit=true, description=Ubuntu Linux (64-bit)], state=RUNNING, loginPort=22, hostname=vcx-773, privateAddresses=[10.114.34.131], publicAddresses=[204.51.124.223], hardware=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423624, providerId=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423624, name=vcx-773, processors=[[cores=1.0, speed=1.0]], ram=512, volumes=[[id=0, type=LOCAL, size=4.0, device=null, durable=true, isBootDevice=true]], supportsImage=idEquals(https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423624), tags=[]], loginUser=vcloud, userMetadata={}, tags=[]], name=bootstrap, runAsRoot=true}] to complete. call get() on this exception to get access to the task in progress
	at org.jclouds.compute.callables.BlockUntilInitScriptStatusIsZeroThenReturnOutput.get(BlockUntilInitScriptStatusIsZeroThenReturnOutput.java:195)
	at org.jclouds.compute.callables.RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete.doCall(RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete.java:60)
	... 11 more
2) RuntimeException on node https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626:
java.lang.RuntimeException: org.jclouds.compute.callables.ScriptStillRunningException: time up waiting 600s for running task[RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete{node=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626, providerId=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626, group=vcx, name=vcx-537, location=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vdc/32, scope=ZONE, description=Miami Environment 1, parent=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/org/48, iso3166Codes=[], metadata={}], uri=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626, imageId=null, os=[name=46, family=ubuntu, version=, arch=null, is64Bit=true, description=Ubuntu Linux (64-bit)], state=RUNNING, loginPort=22, hostname=vcx-537, privateAddresses=[10.114.34.132], publicAddresses=[204.51.124.225], hardware=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626, providerId=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626, name=vcx-537, processors=[[cores=1.0, speed=1.0]], ram=512, volumes=[[id=0, type=LOCAL, size=4.0, device=null, durable=true, isBootDevice=true]], supportsImage=idEquals(https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626), tags=[]], loginUser=vcloud, userMetadata={}, tags=[]], name=bootstrap, runAsRoot=true}] to complete. call get() on this exception to get access to the task in progress
	at com.google.common.base.Throwables.propagate(Throwables.java:156)
	at org.jclouds.compute.callables.RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete.doCall(RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete.java:62)
	at org.jclouds.compute.callables.RunScriptOnNodeAsInitScriptUsingSsh.call(RunScriptOnNodeAsInitScriptUsingSsh.java:91)
	at org.jclouds.compute.strategy.CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap.call(CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap.java:150)
	at org.jclouds.compute.strategy.CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap.apply(CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap.java:170)
	at org.jclouds.compute.strategy.CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap.apply(CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap.java:57)
	at com.google.common.util.concurrent.Futures$4.apply(Futures.java:503)
	at com.google.common.util.concurrent.Futures$4.apply(Futures.java:501)
	at com.google.common.util.concurrent.Futures$3.apply(Futures.java:279)
	at com.google.common.util.concurrent.Futures$ChainingListenableFuture.run(Futures.java:729)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: org.jclouds.compute.callables.ScriptStillRunningException: time up waiting 600s for running task[RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete{node=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626, providerId=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626, group=vcx, name=vcx-537, location=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vdc/32, scope=ZONE, description=Miami Environment 1, parent=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/org/48, iso3166Codes=[], metadata={}], uri=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626, imageId=null, os=[name=46, family=ubuntu, version=, arch=null, is64Bit=true, description=Ubuntu Linux (64-bit)], state=RUNNING, loginPort=22, hostname=vcx-537, privateAddresses=[10.114.34.132], publicAddresses=[204.51.124.225], hardware=[id=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626, providerId=https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626, name=vcx-537, processors=[[cores=1.0, speed=1.0]], ram=512, volumes=[[id=0, type=LOCAL, size=4.0, device=null, durable=true, isBootDevice=true]], supportsImage=idEquals(https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vapp/423626), tags=[]], loginUser=vcloud, userMetadata={}, tags=[]], name=bootstrap, runAsRoot=true}] to complete. call get() on this exception to get access to the task in progress
	at org.jclouds.compute.callables.BlockUntilInitScriptStatusIsZeroThenReturnOutput.get(BlockUntilInitScriptStatusIsZeroThenReturnOutput.java:195)
	at org.jclouds.compute.callables.RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete.doCall(RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete.java:60)
	... 11 more
2 error[s]
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:207)
	at org.jclouds.compute.BaseComputeServiceLiveTest.testCreateTwoNodesWithRunScript(BaseComputeServiceLiveTest.java:350)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:691)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:883)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1208)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
	at org.testng.TestRunner.privateRun(TestRunner.java:758)
	at org.testng.TestRunner.run(TestRunner.java:613)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:37)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:368)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:165)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
