-------------------------------------------------------------------------------
Test set: TestSuite
-------------------------------------------------------------------------------
Tests run: 120, Failures: 38, Errors: 0, Skipped: 30, Time elapsed: 601.172 sec <<< FAILURE!
setupClient(org.jclouds.cloudstack.compute.CloudStackComputeServiceAdapterLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
com.google.inject.ConfigurationException: Guice configuration errors:
1) No implementation for com.google.common.base.Supplier<com.google.common.cache.LoadingCache<java.lang.Long, org.jclouds.cloudstack.domain.Zone>> was bound.
  while locating com.google.common.base.Supplier<com.google.common.cache.LoadingCache<java.lang.Long, org.jclouds.cloudstack.domain.Zone>>
    for parameter 9 at org.jclouds.cloudstack.compute.strategy.CloudStackComputeServiceAdapter.<init>(CloudStackComputeServiceAdapter.java:107)
  while locating org.jclouds.cloudstack.compute.strategy.CloudStackComputeServiceAdapter
2) No implementation for java.util.Map<org.jclouds.cloudstack.domain.NetworkType, ? extends org.jclouds.cloudstack.compute.strategy.OptionsConverter> was bound.
  while locating java.util.Map<org.jclouds.cloudstack.domain.NetworkType, ? extends org.jclouds.cloudstack.compute.strategy.OptionsConverter>
    for parameter 8 at org.jclouds.cloudstack.compute.strategy.CloudStackComputeServiceAdapter.<init>(CloudStackComputeServiceAdapter.java:107)
  while locating org.jclouds.cloudstack.compute.strategy.CloudStackComputeServiceAdapter
2 errors
	at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1004)
	at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:961)
	at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1013)
	at org.jclouds.cloudstack.compute.CloudStackComputeServiceAdapterLiveTest.setupClient(CloudStackComputeServiceAdapterLiveTest.java:124)
setupClient(org.jclouds.cloudstack.compute.CloudStackComputeServiceAdapterLiveTest)  Time elapsed: 0.011 sec  <<< FAILURE!
com.google.inject.ConfigurationException: Guice configuration errors:
1) No implementation for com.google.common.base.Supplier<com.google.common.cache.LoadingCache<java.lang.Long, org.jclouds.cloudstack.domain.Zone>> was bound.
  while locating com.google.common.base.Supplier<com.google.common.cache.LoadingCache<java.lang.Long, org.jclouds.cloudstack.domain.Zone>>
    for parameter 9 at org.jclouds.cloudstack.compute.strategy.CloudStackComputeServiceAdapter.<init>(CloudStackComputeServiceAdapter.java:107)
  while locating org.jclouds.cloudstack.compute.strategy.CloudStackComputeServiceAdapter
2) No implementation for java.util.Map<org.jclouds.cloudstack.domain.NetworkType, ? extends org.jclouds.cloudstack.compute.strategy.OptionsConverter> was bound.
  while locating java.util.Map<org.jclouds.cloudstack.domain.NetworkType, ? extends org.jclouds.cloudstack.compute.strategy.OptionsConverter>
    for parameter 8 at org.jclouds.cloudstack.compute.strategy.CloudStackComputeServiceAdapter.<init>(CloudStackComputeServiceAdapter.java:107)
  while locating org.jclouds.cloudstack.compute.strategy.CloudStackComputeServiceAdapter
2 errors
	at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:1004)
	at com.google.inject.internal.InjectorImpl.getProvider(InjectorImpl.java:961)
	at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1013)
	at org.jclouds.cloudstack.compute.CloudStackComputeServiceAdapterLiveTest.setupClient(CloudStackComputeServiceAdapterLiveTest.java:124)
testAndExperiment(org.jclouds.cloudstack.compute.CloudStackExperimentLiveTest)  Time elapsed: 5.725 sec  <<< FAILURE!
java.util.NoSuchElementException: imageId(202) not found
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:605)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:591)
	at org.jclouds.cloudstack.compute.CloudStackExperimentLiveTest.testAndExperiment(CloudStackExperimentLiveTest.java:87)
testCompareSizes(org.jclouds.cloudstack.compute.CloudStackComputeServiceLiveTest)  Time elapsed: 0.177 sec  <<< FAILURE!
java.util.NoSuchElementException: imageId(202) not found
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:605)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:591)
	at org.jclouds.compute.BaseComputeServiceLiveTest.testCompareSizes(BaseComputeServiceLiveTest.java:845)
	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)
testCreateAndRunAService(org.jclouds.cloudstack.compute.CloudStackComputeServiceLiveTest)  Time elapsed: 0.256 sec  <<< FAILURE!
java.util.NoSuchElementException: imageId(202) not found
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:605)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:215)
	at org.jclouds.compute.BaseComputeServiceLiveTest.testCreateAndRunAService(BaseComputeServiceLiveTest.java:649)
	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)
testTemplateMatch(org.jclouds.cloudstack.compute.CloudStackComputeServiceLiveTest)  Time elapsed: 0.011 sec  <<< FAILURE!
java.util.NoSuchElementException: imageId(202) not found
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:605)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:591)
	at org.jclouds.compute.BaseComputeServiceLiveTest.buildTemplate(BaseComputeServiceLiveTest.java:463)
	at org.jclouds.compute.BaseComputeServiceLiveTest.testTemplateMatch(BaseComputeServiceLiveTest.java:332)
	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)
testAssociateDisassociatePublicIPAddress(org.jclouds.cloudstack.features.AddressClientLiveTest)  Time elapsed: 0.831 sec  <<< FAILURE!
org.jclouds.http.HttpResponseException: command: GET http://72.52.126.25/client/api?response=json&command=associateIpAddress&zoneid=1 HTTP/1.1 failed with response: HTTP/1.1 534 null; content: [{ "associateipaddressresponse" : {"errorcode" : 534, "errortext" : "Maximum number of public IP addresses for account: jcloud2 has been exceeded."}  }]
	at org.jclouds.cloudstack.handlers.CloudStackErrorHandler.handleError(CloudStackErrorHandler.java:51)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:71)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:200)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:165)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:134)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	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)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:182)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:131)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFuture(AsyncRestClientProxy.java:156)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:126)
	at $Proxy98.associateIPAddressInZone(Unknown Source)
	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.jclouds.concurrent.internal.SyncProxy.invoke(SyncProxy.java:137)
	at $Proxy99.associateIPAddressInZone(Unknown Source)
	at org.jclouds.cloudstack.features.AddressClientLiveTest.testAssociateDisassociatePublicIPAddress(AddressClientLiveTest.java:56)
	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)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:182)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:131)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFuture(AsyncRestClientProxy.java:156)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:126)
	at $Proxy98.associateIPAddressInZone(Unknown Source)
	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.jclouds.concurrent.internal.SyncProxy.invoke(SyncProxy.java:137)
	at $Proxy99.associateIPAddressInZone(Unknown Source)
	at org.jclouds.cloudstack.features.AddressClientLiveTest.testAssociateDisassociatePublicIPAddress(AddressClientLiveTest.java:56)
	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)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:182)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:131)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFuture(AsyncRestClientProxy.java:156)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:126)
	at $Proxy98.associateIPAddressInZone(Unknown Source)
	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.jclouds.concurrent.internal.SyncProxy.invoke(SyncProxy.java:137)
	at $Proxy99.associateIPAddressInZone(Unknown Source)
	at org.jclouds.cloudstack.features.AddressClientLiveTest.testAssociateDisassociatePublicIPAddress(AddressClientLiveTest.java:56)
testEnableDisableAccount(org.jclouds.cloudstack.features.DomainAccountClientLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
java.lang.AssertionError
	at org.jclouds.cloudstack.features.DomainAccountClientLiveTest.testEnableDisableAccount(DomainAccountClientLiveTest.java:41)
testEnableDisableUser(org.jclouds.cloudstack.features.DomainUserClientLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
java.lang.AssertionError
	at org.jclouds.cloudstack.features.DomainUserClientLiveTest.testEnableDisableUser(DomainUserClientLiveTest.java:63)
testListDomainChildren(org.jclouds.cloudstack.features.DomainDomainClientLiveTest)  Time elapsed: 0.213 sec  <<< FAILURE!
java.util.NoSuchElementException
	at com.google.common.collect.AbstractIterator.next(AbstractIterator.java:154)
	at com.google.common.collect.Iterators.find(Iterators.java:722)
	at com.google.common.collect.Iterables.find(Iterables.java:643)
	at org.jclouds.cloudstack.features.DomainDomainClientLiveTest.testListDomainChildren(DomainDomainClientLiveTest.java:67)
testListDomains(org.jclouds.cloudstack.features.DomainDomainClientLiveTest)  Time elapsed: 0.052 sec  <<< FAILURE!
java.util.NoSuchElementException
	at com.google.common.collect.AbstractIterator.next(AbstractIterator.java:154)
	at com.google.common.collect.Iterators.find(Iterators.java:722)
	at com.google.common.collect.Iterables.find(Iterables.java:643)
	at org.jclouds.cloudstack.features.DomainDomainClientLiveTest.testListDomains(DomainDomainClientLiveTest.java:48)
testCreateAndRemoveAccount(org.jclouds.cloudstack.features.GlobalAccountClientLiveTest)  Time elapsed: 0.006 sec  <<< FAILURE!
java.lang.AssertionError
	at org.jclouds.cloudstack.features.GlobalAccountClientLiveTest.testCreateAndRemoveAccount(GlobalAccountClientLiveTest.java:44)
testListAlerts(org.jclouds.cloudstack.features.GlobalAlertClientLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
java.lang.AssertionError: Test cannot run without global admin identity and credentials expected:<true> but was:<false>
	at org.testng.Assert.fail(Assert.java:89)
	at org.testng.Assert.failNotEquals(Assert.java:489)
	at org.testng.Assert.assertTrue(Assert.java:37)
	at org.jclouds.cloudstack.features.GlobalAlertClientLiveTest.testListAlerts(GlobalAlertClientLiveTest.java:39)
testListCapacity(org.jclouds.cloudstack.features.GlobalCapacityClientLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
java.lang.AssertionError: Test cannot run without global admin identity and credentials expected:<true> but was:<false>
	at org.testng.Assert.fail(Assert.java:89)
	at org.testng.Assert.failNotEquals(Assert.java:489)
	at org.testng.Assert.assertTrue(Assert.java:37)
	at org.jclouds.cloudstack.features.GlobalCapacityClientLiveTest.testListCapacity(GlobalCapacityClientLiveTest.java:39)
testListConfigurationEntries(org.jclouds.cloudstack.features.GlobalConfigurationClientLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
java.lang.AssertionError
	at org.jclouds.cloudstack.features.GlobalConfigurationClientLiveTest.testListConfigurationEntries(GlobalConfigurationClientLiveTest.java:46)
testUpdateConfigurationEntry(org.jclouds.cloudstack.features.GlobalConfigurationClientLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
java.lang.AssertionError
	at org.jclouds.cloudstack.features.GlobalConfigurationClientLiveTest.testUpdateConfigurationEntry(GlobalConfigurationClientLiveTest.java:63)
setupClient(org.jclouds.cloudstack.features.FirewallClientLiveTest)  Time elapsed: 0.178 sec  <<< FAILURE!
org.jclouds.http.HttpResponseException: command: GET http://72.52.126.25/client/api?response=json&command=deployVirtualMachine&zoneid=1&templateid=202&serviceofferingid=10&networkids=225 HTTP/1.1 failed with response: HTTP/1.1 531 null; content: [{ "deployvirtualmachineresponse" : {"errorcode" : 531, "errortext" : "Acct[19-jcloud2] does not have permission to operate with resource Acct[2-admin]"}  }]
	at org.jclouds.cloudstack.handlers.CloudStackErrorHandler.handleError(CloudStackErrorHandler.java:51)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:71)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:200)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:165)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:134)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	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)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:182)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:131)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFuture(AsyncRestClientProxy.java:156)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:126)
	at $Proxy94.deployVirtualMachineInZone(Unknown Source)
	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.jclouds.concurrent.internal.SyncProxy.invoke(SyncProxy.java:137)
	at $Proxy95.deployVirtualMachineInZone(Unknown Source)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.createVirtualMachineWithOptionsInZone(VirtualMachineClientLiveTest.java:156)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.createVirtualMachineInNetwork(VirtualMachineClientLiveTest.java:126)
	at org.jclouds.cloudstack.features.FirewallClientLiveTest.setupClient(FirewallClientLiveTest.java:80)
setupClient(org.jclouds.cloudstack.features.FirewallClientLiveTest)  Time elapsed: 0.178 sec  <<< FAILURE!
org.jclouds.http.HttpResponseException: command: GET http://72.52.126.25/client/api?response=json&command=deployVirtualMachine&zoneid=1&templateid=202&serviceofferingid=10&networkids=225 HTTP/1.1 failed with response: HTTP/1.1 531 null; content: [{ "deployvirtualmachineresponse" : {"errorcode" : 531, "errortext" : "Acct[19-jcloud2] does not have permission to operate with resource Acct[2-admin]"}  }]
	at org.jclouds.cloudstack.handlers.CloudStackErrorHandler.handleError(CloudStackErrorHandler.java:51)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:71)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:200)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:165)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:134)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	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)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:182)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:131)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFuture(AsyncRestClientProxy.java:156)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:126)
	at $Proxy94.deployVirtualMachineInZone(Unknown Source)
	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.jclouds.concurrent.internal.SyncProxy.invoke(SyncProxy.java:137)
	at $Proxy95.deployVirtualMachineInZone(Unknown Source)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.createVirtualMachineWithOptionsInZone(VirtualMachineClientLiveTest.java:156)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.createVirtualMachineInNetwork(VirtualMachineClientLiveTest.java:126)
	at org.jclouds.cloudstack.features.FirewallClientLiveTest.setupClient(FirewallClientLiveTest.java:80)
before(org.jclouds.cloudstack.features.GlobalDomainClientLiveTest)  Time elapsed: 0.226 sec  <<< FAILURE!
java.lang.NullPointerException
	at org.jclouds.cloudstack.features.GlobalDomainClientLiveTest.before(GlobalDomainClientLiveTest.java:46)
before(org.jclouds.cloudstack.features.GlobalDomainClientLiveTest)  Time elapsed: 0.226 sec  <<< FAILURE!
java.lang.NullPointerException
	at org.jclouds.cloudstack.features.GlobalDomainClientLiveTest.before(GlobalDomainClientLiveTest.java:46)
testListClusters(org.jclouds.cloudstack.features.GlobalHostClientLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
java.lang.AssertionError: Test cannot run without global admin identity and credentials expected:<true> but was:<false>
	at org.testng.Assert.fail(Assert.java:89)
	at org.testng.Assert.failNotEquals(Assert.java:489)
	at org.testng.Assert.assertTrue(Assert.java:37)
	at org.jclouds.cloudstack.features.GlobalHostClientLiveTest.testListClusters(GlobalHostClientLiveTest.java:69)
testListHosts(org.jclouds.cloudstack.features.GlobalHostClientLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
java.lang.AssertionError: Test cannot run without global admin identity and credentials expected:<true> but was:<false>
	at org.testng.Assert.fail(Assert.java:89)
	at org.testng.Assert.failNotEquals(Assert.java:489)
	at org.testng.Assert.assertTrue(Assert.java:37)
	at org.jclouds.cloudstack.features.GlobalHostClientLiveTest.testListHosts(GlobalHostClientLiveTest.java:41)
testCreateDiskOffering(org.jclouds.cloudstack.features.GlobalOfferingClientLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
java.lang.AssertionError: Test cannot run without global admin identity and credentials expected:<true> but was:<false>
	at org.testng.Assert.fail(Assert.java:89)
	at org.testng.Assert.failNotEquals(Assert.java:489)
	at org.testng.Assert.assertTrue(Assert.java:37)
	at org.jclouds.cloudstack.features.GlobalOfferingClientLiveTest.testCreateDiskOffering(GlobalOfferingClientLiveTest.java:92)
testCreateServiceOffering(org.jclouds.cloudstack.features.GlobalOfferingClientLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
java.lang.AssertionError: Test cannot run without global admin identity and credentials expected:<true> but was:<false>
	at org.testng.Assert.fail(Assert.java:89)
	at org.testng.Assert.failNotEquals(Assert.java:489)
	at org.testng.Assert.assertTrue(Assert.java:37)
	at org.jclouds.cloudstack.features.GlobalOfferingClientLiveTest.testCreateServiceOffering(GlobalOfferingClientLiveTest.java:52)
testUpdateNetworkOffering(org.jclouds.cloudstack.features.GlobalOfferingClientLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
java.lang.AssertionError: Test cannot run without global admin identity and credentials expected:<true> but was:<false>
	at org.testng.Assert.fail(Assert.java:89)
	at org.testng.Assert.failNotEquals(Assert.java:489)
	at org.testng.Assert.assertTrue(Assert.java:37)
	at org.jclouds.cloudstack.features.GlobalOfferingClientLiveTest.testUpdateNetworkOffering(GlobalOfferingClientLiveTest.java:129)
testListStoragePools(org.jclouds.cloudstack.features.GlobalStoragePoolClientLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
java.lang.AssertionError: Test cannot run without global admin identity and credentials expected:<true> but was:<false>
	at org.testng.Assert.fail(Assert.java:89)
	at org.testng.Assert.failNotEquals(Assert.java:489)
	at org.testng.Assert.assertTrue(Assert.java:37)
	at org.jclouds.cloudstack.features.GlobalStoragePoolClientLiveTest.testListStoragePools(GlobalStoragePoolClientLiveTest.java:39)
testListUsage(org.jclouds.cloudstack.features.GlobalUsageClientLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
java.lang.NullPointerException
	at org.jclouds.cloudstack.features.GlobalUsageClientLiveTest.testListUsage(GlobalUsageClientLiveTest.java:50)
testCreateUser(org.jclouds.cloudstack.features.GlobalUserClientLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
java.lang.AssertionError
	at org.jclouds.cloudstack.features.GlobalUserClientLiveTest.testCreateUser(GlobalUserClientLiveTest.java:56)
testCreateVm(org.jclouds.cloudstack.features.LoadBalancerClientLiveTest)  Time elapsed: 2.146 sec  <<< FAILURE!
org.jclouds.http.HttpResponseException: command: GET http://72.52.126.25/client/api?response=json&command=deployVirtualMachine&zoneid=1&templateid=202&serviceofferingid=10&networkids=225 HTTP/1.1 failed with response: HTTP/1.1 531 null; content: [{ "deployvirtualmachineresponse" : {"errorcode" : 531, "errortext" : "Acct[19-jcloud2] does not have permission to operate with resource Acct[2-admin]"}  }]
	at org.jclouds.cloudstack.handlers.CloudStackErrorHandler.handleError(CloudStackErrorHandler.java:51)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:71)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:200)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:165)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:134)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	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)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:182)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:131)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFuture(AsyncRestClientProxy.java:156)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:126)
	at $Proxy94.deployVirtualMachineInZone(Unknown Source)
	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.jclouds.concurrent.internal.SyncProxy.invoke(SyncProxy.java:137)
	at $Proxy95.deployVirtualMachineInZone(Unknown Source)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.createVirtualMachineWithOptionsInZone(VirtualMachineClientLiveTest.java:156)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.createVirtualMachineInNetwork(VirtualMachineClientLiveTest.java:126)
	at org.jclouds.cloudstack.features.LoadBalancerClientLiveTest.testCreateVm(LoadBalancerClientLiveTest.java:97)
	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)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:182)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:131)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFuture(AsyncRestClientProxy.java:156)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:126)
	at $Proxy94.deployVirtualMachineInZone(Unknown Source)
	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.jclouds.concurrent.internal.SyncProxy.invoke(SyncProxy.java:137)
	at $Proxy95.deployVirtualMachineInZone(Unknown Source)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.createVirtualMachineWithOptionsInZone(VirtualMachineClientLiveTest.java:156)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.createVirtualMachineInNetwork(VirtualMachineClientLiveTest.java:126)
	at org.jclouds.cloudstack.features.LoadBalancerClientLiveTest.testCreateVm(LoadBalancerClientLiveTest.java:97)
testListNetworks(org.jclouds.cloudstack.features.NetworkClientLiveTest)  Time elapsed: 1.272 sec  <<< FAILURE!
java.lang.AssertionError: Network{id=229, account='null', broadcastDomainType='Vlan', broadcastURI=vlan://67, displayText='Direct-67', DNS1='72.52.126.11', DNS2='null', domain='null', domainId=0, endIP='72.52.67.31', gateway='72.52.67.1', isDefault=true, isShared=true, isSystem=false, netmask='255.255.255.224', networkDomain='cs1cloud.internal', networkOfferingAvailability='Optional', networkOfferingDisplayText='Direct', networkOfferingId=7, networkOfferingName='DefaultDirectNetworkOffering', related=229, startIP='72.52.67.2', name='Direct-67', state='Setup', guestIPType=Direct, VLAN='67', trafficType=Guest, zoneId=1, tags='null', securityGroupEnabled=false, services=[NetworkService{name='Dhcp', capabilities=[]}, NetworkService{name='Dns', capabilities=[[name=AllowDnsSuffixModification, value=true]]}, NetworkService{name='Lb', capabilities=[[name=SupportedLbAlgorithms, value=roundrobin,leastconn,source], [name=SupportedProtocols, value=tcp, udp]]}, NetworkService{name='UserData', capabilities=[]}]}
	at org.jclouds.cloudstack.features.NetworkClientLiveTest.checkNetwork(NetworkClientLiveTest.java:165)
	at org.jclouds.cloudstack.features.NetworkClientLiveTest.testListNetworks(NetworkClientLiveTest.java:143)
testCreateDeleteSSHKeyPair(org.jclouds.cloudstack.features.SSHKeyPairClientLiveTest)  Time elapsed: 0.546 sec  <<< FAILURE!
java.lang.AssertionError: expected:<SshKeyPair{fingerprint='56:52:e9:d1:ce:c9:ef:15:8d:5a:45:3a:98:19:f5:cd', name='adriancole-jclouds-keypair', privateKey='null'}> but was:<SshKeyPair{fingerprint='56:52:e9:d1:ce:c9:ef:15:8d:5a:45:3a:98:19:f5:cd', name='adriancole-jclouds-keypair', privateKey='-----BEGIN RSA PRIVATE KEY-----
MIICXgIBAAKBgQCuvJ9/aTW/QJfOS8B6wr8GYOR5GapJ0hRzbYIzGuu/tuD7MrJ1
iuzfb25Kx08306vjylsHYPNNpMloDYalGG5XQdRQkhNhKgl3RZwIbnNUSR7PPwqV
ffglC346xUkGOeUWk6QNBXFQQE1as8LMudvZX8dT/Yzn6pO0kC92F1JY9wIDAQAB
AoGBAITbulJABrPCQyqCAnnUtTX+WfmSAB5c81vIeeStpW6BeJLGu1YQKYbBzRRi
cuM5uEpcw9Xaa2Qv1UuebS/+YXYHDgHazyZBQh6Qb2co93+SMuUBJpprPrCiUGzv
/+/irwUrSApD3KPpS812f88o5Rt54jKWLuEtQYxSwN2L139BAkEA7n/veJ4KOG9S
oCEpEVyGboYmcEBBIhbSchWPbu3XVgr9/TBWN4FBx8mEaBo6fre0drKJe0uNbJDb
l6ODZQd4UQJBALuO8RaTgvrjhHJxzUR/blbzk3yvc9eTDH+dA358T2WRfn4ya1Cj
+MfcCIHx1/FdpAwkFof16w9TZ7qyG4vEMscCQQDjdz9FEa37vyjVsmrBtTY9qVJ1
0sKMKaoSxr9i9BJhbOBrHzPLgkrjqi3PP9y0SK8kWglHf3plpg7ZpEjIDYTRAkBP
Wd94DLq6iK2NecY9d6hoEy9P7i8VgnokN3q19cPlldOtcolimaz0aYwT5gzVaiew
l0gNB6cGWeQl4Zqz3DMbAkEAyo7Qw25knMBQYMwyv3zm9zkuo2xHauTdq7sgg3Wz
t8OefJvNwA8V35Sr0x0fJuPwXs9ET3p3JjwVxjQVGG7FOA==
-----END RSA PRIVATE KEY-----
'}>
	at org.testng.Assert.fail(Assert.java:89)
	at org.testng.Assert.failNotEquals(Assert.java:489)
	at org.testng.Assert.assertEquals(Assert.java:118)
	at org.testng.Assert.assertEquals(Assert.java:171)
	at org.testng.Assert.assertEquals(Assert.java:181)
	at org.jclouds.cloudstack.features.SSHKeyPairClientLiveTest.checkSSHKeyPair(SSHKeyPairClientLiveTest.java:86)
	at org.jclouds.cloudstack.features.SSHKeyPairClientLiveTest.testCreateDeleteSSHKeyPair(SSHKeyPairClientLiveTest.java:59)
testRegisterTemplate(org.jclouds.cloudstack.features.TemplateClientLiveTest)  Time elapsed: 0.265 sec  <<< FAILURE!
java.lang.AssertionError: expected:<1> but was:<0>
	at org.testng.Assert.fail(Assert.java:89)
	at org.testng.Assert.failNotEquals(Assert.java:489)
	at org.testng.Assert.assertEquals(Assert.java:118)
	at org.testng.Assert.assertEquals(Assert.java:365)
	at org.testng.Assert.assertEquals(Assert.java:375)
	at org.jclouds.cloudstack.features.TemplateClientLiveTest.testRegisterTemplate(TemplateClientLiveTest.java:148)
testCreateTemplate(org.jclouds.cloudstack.features.TemplateClientLiveTest)  Time elapsed: 0.137 sec  <<< FAILURE!
java.lang.AssertionError: expected:<1> but was:<0>
	at org.testng.Assert.fail(Assert.java:89)
	at org.testng.Assert.failNotEquals(Assert.java:489)
	at org.testng.Assert.assertEquals(Assert.java:118)
	at org.testng.Assert.assertEquals(Assert.java:365)
	at org.testng.Assert.assertEquals(Assert.java:375)
	at org.jclouds.cloudstack.features.TemplateClientLiveTest.testCreateTemplate(TemplateClientLiveTest.java:95)
testCreateVirtualMachine(org.jclouds.cloudstack.features.VirtualMachineClientLiveTest)  Time elapsed: 2.533 sec  <<< FAILURE!
org.jclouds.http.HttpResponseException: command: GET http://72.52.126.25/client/api?response=json&command=deployVirtualMachine&zoneid=1&templateid=202&serviceofferingid=10&networkids=229 HTTP/1.1 failed with response: HTTP/1.1 531 null; content: [{ "deployvirtualmachineresponse" : {"errorcode" : 531, "errortext" : "Acct[19-jcloud2] does not have permission to operate with resource Acct[2-admin]"}  }]
	at org.jclouds.cloudstack.handlers.CloudStackErrorHandler.handleError(CloudStackErrorHandler.java:51)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:71)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:200)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:165)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:134)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	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)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:182)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:131)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFuture(AsyncRestClientProxy.java:156)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:126)
	at $Proxy94.deployVirtualMachineInZone(Unknown Source)
	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.jclouds.concurrent.internal.SyncProxy.invoke(SyncProxy.java:137)
	at $Proxy95.deployVirtualMachineInZone(Unknown Source)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.createVirtualMachineWithOptionsInZone(VirtualMachineClientLiveTest.java:156)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.createVirtualMachineInNetwork(VirtualMachineClientLiveTest.java:126)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.createVirtualMachine(VirtualMachineClientLiveTest.java:94)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.testCreateVirtualMachine(VirtualMachineClientLiveTest.java:178)
testCreateVirtualMachineWithSpecificIp(org.jclouds.cloudstack.features.VirtualMachineClientLiveTest)  Time elapsed: 0.465 sec  <<< FAILURE!
org.jclouds.http.HttpResponseException: command: GET http://72.52.126.25/client/api?response=json&command=listTemplates&templatefilter=executable&id=202 HTTP/1.1 failed with response: HTTP/1.1 531 null; content: [{ "listtemplatesresponse" : {"errorcode" : 531, "errortext" : "Acct[19-jcloud2] does not have permission to operate with resource Acct[2-admin]"}  }]
	at org.jclouds.cloudstack.handlers.CloudStackErrorHandler.handleError(CloudStackErrorHandler.java:51)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:71)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:200)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:165)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:134)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	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)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:182)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:131)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFuture(AsyncRestClientProxy.java:156)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:126)
	at $Proxy87.listTemplates(Unknown Source)
	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.jclouds.concurrent.internal.SyncProxy.invoke(SyncProxy.java:137)
	at $Proxy88.listTemplates(Unknown Source)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.testCreateVirtualMachineWithSpecificIp(VirtualMachineClientLiveTest.java:192)
testCreateVolumeFromDiskofferingInZoneAndAttachVolumeToVirtualMachineAndDetachAndDelete(org.jclouds.cloudstack.features.VolumeClientLiveTest)  Time elapsed: 0.266 sec  <<< FAILURE!
java.lang.AssertionError: No suitable VirtualMachine found.
	at org.jclouds.cloudstack.features.VolumeClientLiveTest.getPreferredVirtualMachine(VolumeClientLiveTest.java:150)
	at org.jclouds.cloudstack.features.VolumeClientLiveTest.testCreateVolumeFromDiskofferingInZoneAndAttachVolumeToVirtualMachineAndDetachAndDelete(VolumeClientLiveTest.java:180)
setupClient(org.jclouds.cloudstack.functions.StaticNATVirtualMachineInNetworkLiveTest)  Time elapsed: 1.89 sec  <<< FAILURE!
org.jclouds.http.HttpResponseException: command: GET http://72.52.126.25/client/api?response=json&command=deployVirtualMachine&zoneid=1&templateid=202&serviceofferingid=10&networkids=225 HTTP/1.1 failed with response: HTTP/1.1 531 null; content: [{ "deployvirtualmachineresponse" : {"errorcode" : 531, "errortext" : "Acct[19-jcloud2] does not have permission to operate with resource Acct[2-admin]"}  }]
	at org.jclouds.cloudstack.handlers.CloudStackErrorHandler.handleError(CloudStackErrorHandler.java:51)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:71)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:200)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:165)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:134)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	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)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:182)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:131)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFuture(AsyncRestClientProxy.java:156)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:126)
	at $Proxy94.deployVirtualMachineInZone(Unknown Source)
	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.jclouds.concurrent.internal.SyncProxy.invoke(SyncProxy.java:137)
	at $Proxy95.deployVirtualMachineInZone(Unknown Source)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.createVirtualMachineWithOptionsInZone(VirtualMachineClientLiveTest.java:156)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.createVirtualMachineInNetwork(VirtualMachineClientLiveTest.java:126)
	at org.jclouds.cloudstack.functions.StaticNATVirtualMachineInNetworkLiveTest.setupClient(StaticNATVirtualMachineInNetworkLiveTest.java:69)
	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.invokeConfigurationMethod(Invoker.java:543)
	at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:212)
	at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:138)
	at org.testng.internal.Invoker.invokeBeforeGroupsConfigurations(Invoker.java:920)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:623)
	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)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:182)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:131)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFuture(AsyncRestClientProxy.java:156)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:126)
	at $Proxy94.deployVirtualMachineInZone(Unknown Source)
	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.jclouds.concurrent.internal.SyncProxy.invoke(SyncProxy.java:137)
	at $Proxy95.deployVirtualMachineInZone(Unknown Source)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.createVirtualMachineWithOptionsInZone(VirtualMachineClientLiveTest.java:156)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.createVirtualMachineInNetwork(VirtualMachineClientLiveTest.java:126)
	at org.jclouds.cloudstack.functions.StaticNATVirtualMachineInNetworkLiveTest.setupClient(StaticNATVirtualMachineInNetworkLiveTest.java:69)
setupClient(org.jclouds.cloudstack.functions.StaticNATVirtualMachineInNetworkLiveTest)  Time elapsed: 1.89 sec  <<< FAILURE!
org.jclouds.http.HttpResponseException: command: GET http://72.52.126.25/client/api?response=json&command=deployVirtualMachine&zoneid=1&templateid=202&serviceofferingid=10&networkids=225 HTTP/1.1 failed with response: HTTP/1.1 531 null; content: [{ "deployvirtualmachineresponse" : {"errorcode" : 531, "errortext" : "Acct[19-jcloud2] does not have permission to operate with resource Acct[2-admin]"}  }]
	at org.jclouds.cloudstack.handlers.CloudStackErrorHandler.handleError(CloudStackErrorHandler.java:51)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:71)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:200)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:165)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:134)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	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)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:182)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:131)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFuture(AsyncRestClientProxy.java:156)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:126)
	at $Proxy94.deployVirtualMachineInZone(Unknown Source)
	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.jclouds.concurrent.internal.SyncProxy.invoke(SyncProxy.java:137)
	at $Proxy95.deployVirtualMachineInZone(Unknown Source)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.createVirtualMachineWithOptionsInZone(VirtualMachineClientLiveTest.java:156)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.createVirtualMachineInNetwork(VirtualMachineClientLiveTest.java:126)
	at org.jclouds.cloudstack.functions.StaticNATVirtualMachineInNetworkLiveTest.setupClient(StaticNATVirtualMachineInNetworkLiveTest.java:69)
	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.invokeConfigurationMethod(Invoker.java:543)
	at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:212)
	at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:138)
	at org.testng.internal.Invoker.invokeBeforeGroupsConfigurations(Invoker.java:920)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:623)
	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)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribingExecutorService.submit(ExecutorServiceModule.java:182)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:131)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFuture(AsyncRestClientProxy.java:156)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:126)
	at $Proxy94.deployVirtualMachineInZone(Unknown Source)
	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.jclouds.concurrent.internal.SyncProxy.invoke(SyncProxy.java:137)
	at $Proxy95.deployVirtualMachineInZone(Unknown Source)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.createVirtualMachineWithOptionsInZone(VirtualMachineClientLiveTest.java:156)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.createVirtualMachineInNetwork(VirtualMachineClientLiveTest.java:126)
	at org.jclouds.cloudstack.functions.StaticNATVirtualMachineInNetworkLiveTest.setupClient(StaticNATVirtualMachineInNetworkLiveTest.java:69)
