-------------------------------------------------------------------------------
Test set: TestSuite
-------------------------------------------------------------------------------
Tests run: 128, Failures: 44, Errors: 0, Skipped: 31, Time elapsed: 411.09 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:99)
  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:99)
  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.146 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:99)
  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:99)
  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)
testCompareSizes(org.jclouds.cloudstack.compute.CloudStackComputeServiceLiveTest)  Time elapsed: 0.787 sec  <<< FAILURE!
java.util.NoSuchElementException: imageId(202) not found
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:636)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:622)
	at org.jclouds.compute.BaseComputeServiceLiveTest.testCompareSizes(BaseComputeServiceLiveTest.java:842)
	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)
testAndExperiment(org.jclouds.cloudstack.compute.CloudStackExperimentLiveTest)  Time elapsed: 0.459 sec  <<< FAILURE!
java.util.NoSuchElementException: imageId(202) not found
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:636)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:622)
	at org.jclouds.cloudstack.compute.CloudStackExperimentLiveTest.testAndExperiment(CloudStackExperimentLiveTest.java:95)
testCreateAndRunAService(org.jclouds.cloudstack.compute.CloudStackComputeServiceLiveTest)  Time elapsed: 0.763 sec  <<< FAILURE!
java.util.NoSuchElementException: imageId(202) not found
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:636)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:216)
	at org.jclouds.compute.BaseComputeServiceLiveTest.testCreateAndRunAService(BaseComputeServiceLiveTest.java:646)
	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 sec  <<< FAILURE!
java.util.NoSuchElementException: imageId(202) not found
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:636)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:622)
	at org.jclouds.compute.BaseComputeServiceLiveTest.buildTemplate(BaseComputeServiceLiveTest.java:460)
	at org.jclouds.compute.BaseComputeServiceLiveTest.testTemplateMatch(BaseComputeServiceLiveTest.java:329)
	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.732 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:49)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:71)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	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:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy105.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 $Proxy106.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:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy105.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 $Proxy106.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:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy105.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 $Proxy106.associateIPAddressInZone(Unknown Source)
	at org.jclouds.cloudstack.features.AddressClientLiveTest.testAssociateDisassociatePublicIPAddress(AddressClientLiveTest.java:56)
testEnableDisableAccount(org.jclouds.cloudstack.features.DomainAccountClientLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
java.lang.AssertionError
	at org.jclouds.cloudstack.features.DomainAccountClientLiveTest.testEnableDisableAccount(DomainAccountClientLiveTest.java:41)
testEnableDisableUser(org.jclouds.cloudstack.features.DomainUserClientLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
java.lang.AssertionError
	at org.jclouds.cloudstack.features.DomainUserClientLiveTest.testEnableDisableUser(DomainUserClientLiveTest.java:63)
testListDomainChildren(org.jclouds.cloudstack.features.DomainDomainClientLiveTest)  Time elapsed: 0.472 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.058 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.01 sec  <<< FAILURE!
java.lang.AssertionError
	at org.jclouds.cloudstack.features.GlobalAccountClientLiveTest.testCreateAndRemoveAccount(GlobalAccountClientLiveTest.java:45)
testListAlerts(org.jclouds.cloudstack.features.GlobalAlertClientLiveTest)  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.GlobalAlertClientLiveTest.testListAlerts(GlobalAlertClientLiveTest.java:39)
setupClient(org.jclouds.cloudstack.features.FirewallClientLiveTest)  Time elapsed: 0.49 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: { "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:60)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:71)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	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:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy101.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 $Proxy102.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)
Caused by: 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:49)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:71)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
setupClient(org.jclouds.cloudstack.features.FirewallClientLiveTest)  Time elapsed: 0.49 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: { "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:60)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:71)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	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:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy101.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 $Proxy102.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)
Caused by: 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:49)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:71)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testListCapacity(org.jclouds.cloudstack.features.GlobalCapacityClientLiveTest)  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.GlobalCapacityClientLiveTest.testListCapacity(GlobalCapacityClientLiveTest.java:39)
testListConfigurationEntries(org.jclouds.cloudstack.features.GlobalConfigurationClientLiveTest)  Time elapsed: 0.008 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)
before(org.jclouds.cloudstack.features.GlobalDomainClientLiveTest)  Time elapsed: 0.14 sec  <<< FAILURE!
java.lang.NullPointerException
	at org.jclouds.cloudstack.features.GlobalDomainClientLiveTest.before(GlobalDomainClientLiveTest.java:46)
before(org.jclouds.cloudstack.features.GlobalDomainClientLiveTest)  Time elapsed: 0.14 sec  <<< FAILURE!
java.lang.NullPointerException
	at org.jclouds.cloudstack.features.GlobalDomainClientLiveTest.before(GlobalDomainClientLiveTest.java:46)
testListClusters(org.jclouds.cloudstack.features.GlobalHostClientLiveTest)  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.GlobalHostClientLiveTest.testListClusters(GlobalHostClientLiveTest.java:70)
testListHosts(org.jclouds.cloudstack.features.GlobalHostClientLiveTest)  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.GlobalHostClientLiveTest.testListHosts(GlobalHostClientLiveTest.java:42)
testCreateDiskOffering(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.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 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)
testCreatePod(org.jclouds.cloudstack.features.GlobalPodClientLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
java.lang.AssertionError: Global admin credentials must be given 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.GlobalPodClientLiveTest.testCreatePod(GlobalPodClientLiveTest.java:74)
testListStoragePools(org.jclouds.cloudstack.features.GlobalStoragePoolClientLiveTest)  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.GlobalStoragePoolClientLiveTest.testListStoragePools(GlobalStoragePoolClientLiveTest.java:39)
testListPods(org.jclouds.cloudstack.features.GlobalPodClientLiveTest)  Time elapsed: 0.01 sec  <<< FAILURE!
java.lang.NullPointerException
	at org.jclouds.cloudstack.features.GlobalPodClientLiveTest.testListPods(GlobalPodClientLiveTest.java:51)
testListUsage(org.jclouds.cloudstack.features.GlobalUsageClientLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
java.lang.NullPointerException
	at org.jclouds.cloudstack.features.GlobalUsageClientLiveTest.testListUsage(GlobalUsageClientLiveTest.java:50)
testCreateUser(org.jclouds.cloudstack.features.GlobalUserClientLiveTest)  Time elapsed: 0.072 sec  <<< FAILURE!
java.lang.AssertionError
	at org.jclouds.cloudstack.features.GlobalUserClientLiveTest.testCreateUser(GlobalUserClientLiveTest.java:57)
testCreateUpdateDeleteZone(org.jclouds.cloudstack.features.GlobalZoneClientLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
java.lang.AssertionError
	at org.jclouds.cloudstack.features.GlobalZoneClientLiveTest.testCreateUpdateDeleteZone(GlobalZoneClientLiveTest.java:40)
testCreateVlanIPRange(org.jclouds.cloudstack.features.GlobalVlanClientLiveTest)  Time elapsed: 0.807 sec  <<< FAILURE!
java.lang.IllegalStateException: { "createnetworkresponse" : {"errorcode" : 431, "errortext" : "Found existing network configuration for offering [Network Offering [6-Guest-DefaultVirtualizedNetworkOffering]: Ntwk[225|Guest|6]"}  }
	at org.jclouds.cloudstack.handlers.CloudStackErrorHandler.handleError(CloudStackErrorHandler.java:76)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	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:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy103.createNetworkInZone(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 $Proxy104.createNetworkInZone(Unknown Source)
	at org.jclouds.cloudstack.features.GlobalVlanClientLiveTest.testCreateVlanIPRange(GlobalVlanClientLiveTest.java:78)
	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:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy103.createNetworkInZone(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 $Proxy104.createNetworkInZone(Unknown Source)
	at org.jclouds.cloudstack.features.GlobalVlanClientLiveTest.testCreateVlanIPRange(GlobalVlanClientLiveTest.java:78)
Caused by: org.jclouds.http.HttpResponseException: command: GET http://72.52.126.25/client/api?response=json&command=createNetwork&zoneid=1&name=net-adriancole&networkofferingid=6&displaytext=jclouds%20test%20adriancole HTTP/1.1 failed with response: HTTP/1.1 431 null; content: [{ "createnetworkresponse" : {"errorcode" : 431, "errortext" : "Found existing network configuration for offering [Network Offering [6-Guest-DefaultVirtualizedNetworkOffering]: Ntwk[225|Guest|6]"}  }]
	at org.jclouds.cloudstack.handlers.CloudStackErrorHandler.handleError(CloudStackErrorHandler.java:49)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:69)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testListVlanIPRanges(org.jclouds.cloudstack.features.GlobalVlanClientLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
java.lang.NullPointerException
	at org.jclouds.cloudstack.features.GlobalVlanClientLiveTest.testListVlanIPRanges(GlobalVlanClientLiveTest.java:51)
testCreateVm(org.jclouds.cloudstack.features.LoadBalancerClientLiveTest)  Time elapsed: 2.074 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: { "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:60)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:71)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	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:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy101.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 $Proxy102.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)
Caused by: 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:49)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:71)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testListNetworks(org.jclouds.cloudstack.features.NetworkClientLiveTest)  Time elapsed: 1.174 sec  <<< FAILURE!
java.lang.AssertionError: Network{id=229, account='null', broadcastDomainType='Vlan', broadcastURI=vlan://67, displayText='Direct-67', DNS1='72.52.126.11', DNS2='', 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)
testCreateContextUsingUserAndPasswordAuthentication(org.jclouds.cloudstack.features.SessionClientLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
java.lang.AssertionError
	at org.jclouds.cloudstack.features.SessionClientLiveTest.testCreateContextUsingUserAndPasswordAuthentication(SessionClientLiveTest.java:47)
testListTemplates(org.jclouds.cloudstack.features.TemplateClientLiveTest)  Time elapsed: 4.186 sec  <<< FAILURE!
java.lang.NullPointerException
	at org.jclouds.cloudstack.features.TemplateClientLiveTest.testListTemplates(TemplateClientLiveTest.java:81)
testRegisterTemplate(org.jclouds.cloudstack.features.TemplateClientLiveTest)  Time elapsed: 0.746 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:149)
testCreateTemplate(org.jclouds.cloudstack.features.TemplateClientLiveTest)  Time elapsed: 0.136 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:96)
testCreateVirtualMachine(org.jclouds.cloudstack.features.VirtualMachineClientLiveTest)  Time elapsed: 2.763 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: { "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:60)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:71)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	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:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy101.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 $Proxy102.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)
Caused by: 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:49)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:71)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testCreateVirtualMachineWithSpecificIp(org.jclouds.cloudstack.features.VirtualMachineClientLiveTest)  Time elapsed: 2.322 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: { "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:60)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:71)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	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:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy94.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 $Proxy95.listTemplates(Unknown Source)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.testCreateVirtualMachineWithSpecificIp(VirtualMachineClientLiveTest.java:192)
	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:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy94.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 $Proxy95.listTemplates(Unknown Source)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.testCreateVirtualMachineWithSpecificIp(VirtualMachineClientLiveTest.java:192)
	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:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy94.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 $Proxy95.listTemplates(Unknown Source)
	at org.jclouds.cloudstack.features.VirtualMachineClientLiveTest.testCreateVirtualMachineWithSpecificIp(VirtualMachineClientLiveTest.java:192)
Caused by: 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:49)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:71)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
testCreateVolumeFromDiskofferingInZoneAndAttachVolumeToVirtualMachineAndDetachAndDelete(org.jclouds.cloudstack.features.VolumeClientLiveTest)  Time elapsed: 2.581 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: 3.306 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: { "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:60)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:71)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	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:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy101.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 $Proxy102.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:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy101.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 $Proxy102.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)
Caused by: 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:49)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:71)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
setupClient(org.jclouds.cloudstack.functions.StaticNATVirtualMachineInNetworkLiveTest)  Time elapsed: 3.306 sec  <<< FAILURE!
org.jclouds.rest.AuthorizationException: { "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:60)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:71)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	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:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy101.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 $Proxy102.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:184)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService.submit(BaseHttpCommandExecutorService.java:127)
	at org.jclouds.http.TransformingHttpCommandExecutorServiceImpl.submit(TransformingHttpCommandExecutorServiceImpl.java:54)
	at org.jclouds.http.TransformingHttpCommandImpl.execute(TransformingHttpCommandImpl.java:73)
	at org.jclouds.rest.internal.AsyncRestClientProxy.createListenableFutureForHttpRequestMappedToMethodAndArgs(AsyncRestClientProxy.java:198)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:134)
	at $Proxy101.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 $Proxy102.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)
Caused by: 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:49)
	at org.jclouds.http.handlers.DelegatingErrorHandler.handleError(DelegatingErrorHandler.java:71)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.shouldContinue(BaseHttpCommandExecutorService.java:191)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:161)
	at org.jclouds.http.internal.BaseHttpCommandExecutorService$HttpResponseCallable.call(BaseHttpCommandExecutorService.java:130)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	... 3 more
