-------------------------------------------------------------------------------
Test set: TestSuite
-------------------------------------------------------------------------------
Tests run: 142, Failures: 2, Errors: 0, Skipped: 6, Time elapsed: 3,981.196 sec <<< FAILURE!
testCreateAndRunAService(org.jclouds.trmk.ecloud.compute.TerremarkECloudComputeServiceLiveTest)  Time elapsed: 869.579 sec  <<< FAILURE!
java.lang.RuntimeException: org.jclouds.compute.callables.ScriptStillRunningException: time up waiting 600s for running task[RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete{node=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233140, providerId=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233140, group=te-s, name=te-s-300, location=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vdc/1155, scope=ZONE, description=Cloud Conscious LLC - MIA, parent=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/org/1910324, iso3166Codes=[], metadata={}], uri=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233140, imageId=null, os=[name=46, family=ubuntu, version=, arch=null, is64Bit=true, description=Ubuntu Linux (64-bit)], state=RUNNING, loginPort=22, hostname=te-s-300, privateAddresses=[10.124.46.35], publicAddresses=[208.39.104.201], hardware=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233140, providerId=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233140, name=te-s-300, 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.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233140), tags=[]], loginUser=ecloud, 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.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233140, providerId=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233140, group=te-s, name=te-s-300, location=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vdc/1155, scope=ZONE, description=Cloud Conscious LLC - MIA, parent=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/org/1910324, iso3166Codes=[], metadata={}], uri=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233140, imageId=null, os=[name=46, family=ubuntu, version=, arch=null, is64Bit=true, description=Ubuntu Linux (64-bit)], state=RUNNING, loginPort=22, hostname=te-s-300, privateAddresses=[10.124.46.35], publicAddresses=[208.39.104.201], hardware=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233140, providerId=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233140, name=te-s-300, 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.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233140), tags=[]], loginUser=ecloud, 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.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233140, providerId=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233140, group=te-s, name=te-s-300, location=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vdc/1155, scope=ZONE, description=Cloud Conscious LLC - MIA, parent=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/org/1910324, iso3166Codes=[], metadata={}], uri=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233140, imageId=null, os=[name=46, family=ubuntu, version=, arch=null, is64Bit=true, description=Ubuntu Linux (64-bit)], state=RUNNING, loginPort=22, hostname=te-s-300, privateAddresses=[10.124.46.35], publicAddresses=[208.39.104.201], hardware=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233140, providerId=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233140, name=te-s-300, 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.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233140), tags=[]], loginUser=ecloud, 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
testCreateTwoNodesWithRunScript(org.jclouds.trmk.ecloud.compute.TerremarkECloudComputeServiceLiveTest)  Time elapsed: 826.647 sec  <<< FAILURE!
org.jclouds.compute.RunNodesException: error running 2 nodes group(te) location(https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vdc/1155) image(https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vappTemplate/351) size(cpu=1,ram=512,disk=10) options(TerremarkVCloudTemplateOptions [keyPair=62:e1:bb:7d:b9:51:f3:33:e7:8b:96:ae:8d:33:00:a4, 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.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233146:
java.lang.RuntimeException: org.jclouds.compute.callables.ScriptStillRunningException: time up waiting 600s for running task[RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete{node=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233146, providerId=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233146, group=te, name=te-4cf, location=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vdc/1155, scope=ZONE, description=Cloud Conscious LLC - MIA, parent=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/org/1910324, iso3166Codes=[], metadata={}], uri=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233146, imageId=null, os=[name=46, family=ubuntu, version=, arch=null, is64Bit=true, description=Ubuntu Linux (64-bit)], state=RUNNING, loginPort=22, hostname=te-4cf, privateAddresses=[10.124.46.35], publicAddresses=[208.39.104.201], hardware=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233146, providerId=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233146, name=te-4cf, 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.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233146), tags=[]], loginUser=ecloud, 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.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233146, providerId=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233146, group=te, name=te-4cf, location=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vdc/1155, scope=ZONE, description=Cloud Conscious LLC - MIA, parent=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/org/1910324, iso3166Codes=[], metadata={}], uri=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233146, imageId=null, os=[name=46, family=ubuntu, version=, arch=null, is64Bit=true, description=Ubuntu Linux (64-bit)], state=RUNNING, loginPort=22, hostname=te-4cf, privateAddresses=[10.124.46.35], publicAddresses=[208.39.104.201], hardware=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233146, providerId=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233146, name=te-4cf, 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.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233146), tags=[]], loginUser=ecloud, 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.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148:
java.lang.RuntimeException: org.jclouds.compute.callables.ScriptStillRunningException: time up waiting 600s for running task[RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete{node=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148, providerId=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148, group=te, name=te-7e0, location=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vdc/1155, scope=ZONE, description=Cloud Conscious LLC - MIA, parent=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/org/1910324, iso3166Codes=[], metadata={}], uri=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148, imageId=null, os=[name=46, family=ubuntu, version=, arch=null, is64Bit=true, description=Ubuntu Linux (64-bit)], state=RUNNING, loginPort=22, hostname=te-7e0, privateAddresses=[10.124.46.36], publicAddresses=[208.39.104.124], hardware=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148, providerId=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148, name=te-7e0, 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.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148), tags=[]], loginUser=ecloud, 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.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148, providerId=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148, group=te, name=te-7e0, location=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vdc/1155, scope=ZONE, description=Cloud Conscious LLC - MIA, parent=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/org/1910324, iso3166Codes=[], metadata={}], uri=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148, imageId=null, os=[name=46, family=ubuntu, version=, arch=null, is64Bit=true, description=Ubuntu Linux (64-bit)], state=RUNNING, loginPort=22, hostname=te-7e0, privateAddresses=[10.124.46.36], publicAddresses=[208.39.104.124], hardware=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148, providerId=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148, name=te-7e0, 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.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148), tags=[]], loginUser=ecloud, 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.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233146, providerId=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233146, group=te, name=te-4cf, location=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vdc/1155, scope=ZONE, description=Cloud Conscious LLC - MIA, parent=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/org/1910324, iso3166Codes=[], metadata={}], uri=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233146, imageId=null, os=[name=46, family=ubuntu, version=, arch=null, is64Bit=true, description=Ubuntu Linux (64-bit)], state=RUNNING, loginPort=22, hostname=te-4cf, privateAddresses=[10.124.46.35], publicAddresses=[208.39.104.201], hardware=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233146, providerId=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233146, name=te-4cf, 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.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233146), tags=[]], loginUser=ecloud, 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.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148:
java.lang.RuntimeException: org.jclouds.compute.callables.ScriptStillRunningException: time up waiting 600s for running task[RunScriptOnNodeAsInitScriptUsingSshAndBlockUntilComplete{node=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148, providerId=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148, group=te, name=te-7e0, location=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vdc/1155, scope=ZONE, description=Cloud Conscious LLC - MIA, parent=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/org/1910324, iso3166Codes=[], metadata={}], uri=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148, imageId=null, os=[name=46, family=ubuntu, version=, arch=null, is64Bit=true, description=Ubuntu Linux (64-bit)], state=RUNNING, loginPort=22, hostname=te-7e0, privateAddresses=[10.124.46.36], publicAddresses=[208.39.104.124], hardware=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148, providerId=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148, name=te-7e0, 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.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148), tags=[]], loginUser=ecloud, 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.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148, providerId=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148, group=te, name=te-7e0, location=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vdc/1155, scope=ZONE, description=Cloud Conscious LLC - MIA, parent=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/org/1910324, iso3166Codes=[], metadata={}], uri=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148, imageId=null, os=[name=46, family=ubuntu, version=, arch=null, is64Bit=true, description=Ubuntu Linux (64-bit)], state=RUNNING, loginPort=22, hostname=te-7e0, privateAddresses=[10.124.46.36], publicAddresses=[208.39.104.124], hardware=[id=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148, providerId=https://services.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148, name=te-7e0, 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.enterprisecloud.terremark.com/api/v0.8b-ext2.8/vapp/233148), tags=[]], loginUser=ecloud, 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)
