-------------------------------------------------------------------------------
Test set: TestSuite
-------------------------------------------------------------------------------
Tests run: 96, Failures: 10, Errors: 0, Skipped: 3, Time elapsed: 51,599.397 sec <<< FAILURE!
testAddFirewallRule(org.jclouds.savvis.vpdc.features.FirewallClientLiveTest)  Time elapsed: 126.263 sec  <<< FAILURE!
java.util.NoSuchElementException
	at com.google.common.collect.AbstractIterator.next(AbstractIterator.java:152)
	at com.google.common.collect.Iterators.find(Iterators.java:715)
	at com.google.common.collect.Iterables.find(Iterables.java:638)
	at org.jclouds.savvis.vpdc.features.FirewallClientLiveTest.testAddFirewallRule(FirewallClientLiveTest.java:47)

testCreateVirtualMachine(org.jclouds.savvis.vpdc.features.VMClientLiveTest)  Time elapsed: 119.821 sec  <<< FAILURE!
java.util.NoSuchElementException
	at com.google.common.collect.AbstractIterator.next(AbstractIterator.java:152)
	at com.google.common.collect.Iterators.find(Iterators.java:715)
	at com.google.common.collect.Iterables.find(Iterables.java:638)
	at org.jclouds.savvis.vpdc.features.VMClientLiveTest.testCreateVirtualMachine(VMClientLiveTest.java:79)

testTemplateBuilderCannotFind(org.jclouds.savvis.vpdc.compute.VPDCTemplateBuilderLiveTest)  Time elapsed: 681.298 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.NoClassDefFoundError: org/jclouds/rest/InsufficientResourcesException
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1416)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:722)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:846)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1170)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
	at org.testng.TestRunner.runWorkers(TestRunner.java:1147)
	at org.testng.TestRunner.privateRun(TestRunner.java:749)
	at org.testng.TestRunner.run(TestRunner.java:600)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:317)
	at org.testng.SuiteRunner.access$000(SuiteRunner.java:34)
	at org.testng.SuiteRunner$SuiteWorker.run(SuiteRunner.java:351)
	at org.testng.internal.thread.ThreadUtil$CountDownLatchedRunnable.run(ThreadUtil.java:147)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:680)
Caused by: java.lang.NoClassDefFoundError: org/jclouds/rest/InsufficientResourcesException
	at org.jclouds.util.Throwables2.returnFirstExceptionIfInListOrThrowStandardExceptionOrCause(Throwables2.java:83)
	at org.jclouds.concurrent.internal.SyncProxy.invoke(SyncProxy.java:147)
	at $Proxy79.getOrg(Unknown Source)
	at org.jclouds.savvis.vpdc.compute.functions.NetworkToLocation.apply(NetworkToLocation.java:72)
	at org.jclouds.savvis.vpdc.compute.functions.NetworkToLocation.apply(NetworkToLocation.java:46)
	at com.google.common.collect.Iterators$8.next(Iterators.java:782)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:267)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:45)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:34)
	at org.jclouds.location.config.LocationModule$2.get(LocationModule.java:87)
	at org.jclouds.location.config.LocationModule$2.get(LocationModule.java:84)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at com.google.common.base.Suppliers$ExpiringMemoizingSupplier.get(Suppliers.java:173)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:59)
	at org.jclouds.savvis.vpdc.compute.suppliers.FirstNetwork.get(FirstNetwork.java:67)
	at org.jclouds.savvis.vpdc.compute.suppliers.FirstNetwork.get(FirstNetwork.java:41)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:558)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:192)
	at sun.reflect.GeneratedMethodAccessor16.invoke(Unknown Source)
	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:76)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:673)
	... 14 more
Caused by: java.lang.ClassNotFoundException: org.jclouds.rest.InsufficientResourcesException
	at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
	... 38 more
Caused by: java.lang.NoClassDefFoundError: org/jclouds/rest/InsufficientResourcesException
	at org.jclouds.util.Throwables2.returnFirstExceptionIfInListOrThrowStandardExceptionOrCause(Throwables2.java:83)
	at org.jclouds.concurrent.internal.SyncProxy.invoke(SyncProxy.java:147)
	at $Proxy79.getOrg(Unknown Source)
	at org.jclouds.savvis.vpdc.compute.functions.NetworkToLocation.apply(NetworkToLocation.java:72)
	at org.jclouds.savvis.vpdc.compute.functions.NetworkToLocation.apply(NetworkToLocation.java:46)
	at com.google.common.collect.Iterators$8.next(Iterators.java:782)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:267)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:45)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:34)
	at org.jclouds.location.config.LocationModule$2.get(LocationModule.java:87)
	at org.jclouds.location.config.LocationModule$2.get(LocationModule.java:84)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at com.google.common.base.Suppliers$ExpiringMemoizingSupplier.get(Suppliers.java:173)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:59)
	at org.jclouds.savvis.vpdc.compute.suppliers.FirstNetwork.get(FirstNetwork.java:67)
	at org.jclouds.savvis.vpdc.compute.suppliers.FirstNetwork.get(FirstNetwork.java:41)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:558)
	at org.jclouds.compute.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:192)
	at sun.reflect.GeneratedMethodAccessor16.invoke(Unknown Source)
	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:76)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:673)
	... 14 more
Caused by: java.lang.ClassNotFoundException: org.jclouds.rest.InsufficientResourcesException
	at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
	... 38 more

testDefaultTemplateBuilder(org.jclouds.savvis.vpdc.compute.VPDCTemplateBuilderLiveTest)  Time elapsed: 692.747 sec  <<< FAILURE!
java.lang.NoClassDefFoundError: org/jclouds/rest/InsufficientResourcesException
	at org.jclouds.util.Throwables2.returnFirstExceptionIfInListOrThrowStandardExceptionOrCause(Throwables2.java:83)
	at org.jclouds.concurrent.internal.SyncProxy.invoke(SyncProxy.java:147)
	at $Proxy79.getVDCInOrg(Unknown Source)
	at org.jclouds.savvis.vpdc.compute.functions.NetworkToLocation.apply(NetworkToLocation.java:77)
	at org.jclouds.savvis.vpdc.compute.functions.NetworkToLocation.apply(NetworkToLocation.java:46)
	at com.google.common.collect.Iterators$8.next(Iterators.java:782)
	at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:267)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:45)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:34)
	at org.jclouds.location.config.LocationModule$2.get(LocationModule.java:87)
	at org.jclouds.location.config.LocationModule$2.get(LocationModule.java:84)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at com.google.common.base.Suppliers$ExpiringMemoizingSupplier.get(Suppliers.java:173)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:59)
	at org.jclouds.savvis.vpdc.compute.suppliers.FirstNetwork.get(FirstNetwork.java:67)
	at org.jclouds.savvis.vpdc.compute.suppliers.FirstNetwork.get(FirstNetwork.java:41)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:558)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:555)
	at org.jclouds.savvis.vpdc.compute.VPDCTemplateBuilderLiveTest.testDefaultTemplateBuilder(VPDCTemplateBuilderLiveTest.java:72)

testGetFirewallRules(org.jclouds.savvis.vpdc.features.BrowsingClientLiveTest)  Time elapsed: 30.081 sec  <<< FAILURE!
java.lang.reflect.UndeclaredThrowableException
	at $Proxy54.listOrgs(Unknown Source)
	at org.jclouds.savvis.vpdc.features.BrowsingClientLiveTest.testGetFirewallRules(BrowsingClientLiveTest.java:171)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.GeneratedMethodAccessor14.invoke(Unknown Source)
	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)
	... 22 more
Caused by: com.google.inject.ProvisionException: Guice provision errors:
1) Error in custom provider, java.lang.RuntimeException: java.util.concurrent.TimeoutException
  at org.jclouds.savvis.vpdc.config.VPDCRestClientModule.provideOrgs(VPDCRestClientModule.java:98)
  at org.jclouds.savvis.vpdc.config.VPDCRestClientModule.provideOrgs(VPDCRestClientModule.java:98)
  while locating java.util.Set<org.jclouds.savvis.vpdc.domain.Resource> annotated with @org.jclouds.savvis.vpdc.internal.Org()
1 error
	at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:987)
	at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1009)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:112)
	at $Proxy53.listOrgs(Unknown Source)
	... 26 more
Caused by: java.lang.RuntimeException: java.util.concurrent.TimeoutException
	at com.google.common.base.Throwables.propagate(Throwables.java:156)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:57)
	at com.google.common.base.Suppliers$ExpiringMemoizingSupplier.get(Suppliers.java:173)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:59)
	at org.jclouds.savvis.vpdc.config.VPDCRestClientModule.provideOrgs(VPDCRestClientModule.java:98)
	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 com.google.inject.internal.ProviderMethod.get(ProviderMethod.java:104)
	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
	at com.google.inject.Scopes$1$1.get(Scopes.java:65)
	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
	at com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:978)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1024)
	at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:974)
	... 29 more
Caused by: java.util.concurrent.TimeoutException
	at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:228)
	at java.util.concurrent.FutureTask.get(FutureTask.java:91)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribedFuture.get(ExecutorServiceModule.java:248)
	at com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:69)
	at com.google.common.util.concurrent.Futures$ChainingListenableFuture.get(Futures.java:758)
	at org.jclouds.concurrent.ExceptionParsingListenableFuture.get(ExceptionParsingListenableFuture.java:74)
	at org.jclouds.savvis.vpdc.config.VPDCRestClientModule$2.get(VPDCRestClientModule.java:149)
	at org.jclouds.savvis.vpdc.config.VPDCRestClientModule$2.get(VPDCRestClientModule.java:144)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	... 46 more
Caused by: java.util.concurrent.ExecutionException: task submitted from the following trace
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribedFuture.ensureCauseHasSubmissionTrace(ExecutorServiceModule.java:270)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribedFuture.get(ExecutorServiceModule.java:254)
	... 53 more

testNetwork(org.jclouds.savvis.vpdc.features.BrowsingClientLiveTest)  Time elapsed: 30.016 sec  <<< FAILURE!
java.lang.reflect.UndeclaredThrowableException
	at $Proxy54.listOrgs(Unknown Source)
	at org.jclouds.savvis.vpdc.features.BrowsingClientLiveTest.testNetwork(BrowsingClientLiveTest.java:97)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.GeneratedMethodAccessor14.invoke(Unknown Source)
	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)
	... 22 more
Caused by: com.google.inject.ProvisionException: Guice provision errors:
1) Error in custom provider, java.lang.RuntimeException: java.util.concurrent.TimeoutException
  at org.jclouds.savvis.vpdc.config.VPDCRestClientModule.provideOrgs(VPDCRestClientModule.java:98)
  at org.jclouds.savvis.vpdc.config.VPDCRestClientModule.provideOrgs(VPDCRestClientModule.java:98)
  while locating java.util.Set<org.jclouds.savvis.vpdc.domain.Resource> annotated with @org.jclouds.savvis.vpdc.internal.Org()
1 error
	at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:987)
	at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1009)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:112)
	at $Proxy53.listOrgs(Unknown Source)
	... 26 more
Caused by: java.lang.RuntimeException: java.util.concurrent.TimeoutException
	at com.google.common.base.Throwables.propagate(Throwables.java:156)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:57)
	at com.google.common.base.Suppliers$ExpiringMemoizingSupplier.get(Suppliers.java:173)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:59)
	at org.jclouds.savvis.vpdc.config.VPDCRestClientModule.provideOrgs(VPDCRestClientModule.java:98)
	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 com.google.inject.internal.ProviderMethod.get(ProviderMethod.java:104)
	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
	at com.google.inject.Scopes$1$1.get(Scopes.java:65)
	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
	at com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:978)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1024)
	at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:974)
	... 29 more
Caused by: java.util.concurrent.TimeoutException
	at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:228)
	at java.util.concurrent.FutureTask.get(FutureTask.java:91)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribedFuture.get(ExecutorServiceModule.java:248)
	at com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:69)
	at com.google.common.util.concurrent.Futures$ChainingListenableFuture.get(Futures.java:758)
	at org.jclouds.concurrent.ExceptionParsingListenableFuture.get(ExceptionParsingListenableFuture.java:74)
	at org.jclouds.savvis.vpdc.config.VPDCRestClientModule$2.get(VPDCRestClientModule.java:149)
	at org.jclouds.savvis.vpdc.config.VPDCRestClientModule$2.get(VPDCRestClientModule.java:144)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	... 46 more
Caused by: java.util.concurrent.ExecutionException: task submitted from the following trace
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribedFuture.ensureCauseHasSubmissionTrace(ExecutorServiceModule.java:270)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribedFuture.get(ExecutorServiceModule.java:254)
	... 53 more

testOrg(org.jclouds.savvis.vpdc.features.BrowsingClientLiveTest)  Time elapsed: 30.012 sec  <<< FAILURE!
java.lang.reflect.UndeclaredThrowableException
	at $Proxy54.listOrgs(Unknown Source)
	at org.jclouds.savvis.vpdc.features.BrowsingClientLiveTest.testOrg(BrowsingClientLiveTest.java:59)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.GeneratedMethodAccessor14.invoke(Unknown Source)
	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)
	... 22 more
Caused by: com.google.inject.ProvisionException: Guice provision errors:
1) Error in custom provider, java.lang.RuntimeException: java.util.concurrent.TimeoutException
  at org.jclouds.savvis.vpdc.config.VPDCRestClientModule.provideOrgs(VPDCRestClientModule.java:98)
  at org.jclouds.savvis.vpdc.config.VPDCRestClientModule.provideOrgs(VPDCRestClientModule.java:98)
  while locating java.util.Set<org.jclouds.savvis.vpdc.domain.Resource> annotated with @org.jclouds.savvis.vpdc.internal.Org()
1 error
	at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:987)
	at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1009)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:112)
	at $Proxy53.listOrgs(Unknown Source)
	... 26 more
Caused by: java.lang.RuntimeException: java.util.concurrent.TimeoutException
	at com.google.common.base.Throwables.propagate(Throwables.java:156)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:57)
	at com.google.common.base.Suppliers$ExpiringMemoizingSupplier.get(Suppliers.java:173)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:59)
	at org.jclouds.savvis.vpdc.config.VPDCRestClientModule.provideOrgs(VPDCRestClientModule.java:98)
	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 com.google.inject.internal.ProviderMethod.get(ProviderMethod.java:104)
	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
	at com.google.inject.Scopes$1$1.get(Scopes.java:65)
	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
	at com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:978)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1024)
	at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:974)
	... 29 more
Caused by: java.util.concurrent.TimeoutException
	at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:228)
	at java.util.concurrent.FutureTask.get(FutureTask.java:91)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribedFuture.get(ExecutorServiceModule.java:248)
	at com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:69)
	at com.google.common.util.concurrent.Futures$ChainingListenableFuture.get(Futures.java:758)
	at org.jclouds.concurrent.ExceptionParsingListenableFuture.get(ExceptionParsingListenableFuture.java:74)
	at org.jclouds.savvis.vpdc.config.VPDCRestClientModule$2.get(VPDCRestClientModule.java:149)
	at org.jclouds.savvis.vpdc.config.VPDCRestClientModule$2.get(VPDCRestClientModule.java:144)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	... 46 more
Caused by: java.util.concurrent.ExecutionException: task submitted from the following trace
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribedFuture.ensureCauseHasSubmissionTrace(ExecutorServiceModule.java:270)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribedFuture.get(ExecutorServiceModule.java:254)
	... 53 more

testVDC(org.jclouds.savvis.vpdc.features.BrowsingClientLiveTest)  Time elapsed: 30.015 sec  <<< FAILURE!
java.lang.reflect.UndeclaredThrowableException
	at $Proxy54.listOrgs(Unknown Source)
	at org.jclouds.savvis.vpdc.features.BrowsingClientLiveTest.testVDC(BrowsingClientLiveTest.java:77)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.GeneratedMethodAccessor14.invoke(Unknown Source)
	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)
	... 22 more
Caused by: com.google.inject.ProvisionException: Guice provision errors:
1) Error in custom provider, java.lang.RuntimeException: java.util.concurrent.TimeoutException
  at org.jclouds.savvis.vpdc.config.VPDCRestClientModule.provideOrgs(VPDCRestClientModule.java:98)
  at org.jclouds.savvis.vpdc.config.VPDCRestClientModule.provideOrgs(VPDCRestClientModule.java:98)
  while locating java.util.Set<org.jclouds.savvis.vpdc.domain.Resource> annotated with @org.jclouds.savvis.vpdc.internal.Org()
1 error
	at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:987)
	at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1009)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:112)
	at $Proxy53.listOrgs(Unknown Source)
	... 26 more
Caused by: java.lang.RuntimeException: java.util.concurrent.TimeoutException
	at com.google.common.base.Throwables.propagate(Throwables.java:156)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:57)
	at com.google.common.base.Suppliers$ExpiringMemoizingSupplier.get(Suppliers.java:173)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:59)
	at org.jclouds.savvis.vpdc.config.VPDCRestClientModule.provideOrgs(VPDCRestClientModule.java:98)
	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 com.google.inject.internal.ProviderMethod.get(ProviderMethod.java:104)
	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
	at com.google.inject.Scopes$1$1.get(Scopes.java:65)
	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
	at com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:978)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1024)
	at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:974)
	... 29 more
Caused by: java.util.concurrent.TimeoutException
	at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:228)
	at java.util.concurrent.FutureTask.get(FutureTask.java:91)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribedFuture.get(ExecutorServiceModule.java:248)
	at com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:69)
	at com.google.common.util.concurrent.Futures$ChainingListenableFuture.get(Futures.java:758)
	at org.jclouds.concurrent.ExceptionParsingListenableFuture.get(ExceptionParsingListenableFuture.java:74)
	at org.jclouds.savvis.vpdc.config.VPDCRestClientModule$2.get(VPDCRestClientModule.java:149)
	at org.jclouds.savvis.vpdc.config.VPDCRestClientModule$2.get(VPDCRestClientModule.java:144)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	... 46 more
Caused by: java.util.concurrent.ExecutionException: task submitted from the following trace
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribedFuture.ensureCauseHasSubmissionTrace(ExecutorServiceModule.java:270)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribedFuture.get(ExecutorServiceModule.java:254)
	... 53 more

testVM(org.jclouds.savvis.vpdc.features.BrowsingClientLiveTest)  Time elapsed: 30.014 sec  <<< FAILURE!
java.lang.reflect.UndeclaredThrowableException
	at $Proxy54.listOrgs(Unknown Source)
	at org.jclouds.savvis.vpdc.features.BrowsingClientLiveTest.testVM(BrowsingClientLiveTest.java:122)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.GeneratedMethodAccessor14.invoke(Unknown Source)
	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)
	... 22 more
Caused by: com.google.inject.ProvisionException: Guice provision errors:
1) Error in custom provider, java.lang.RuntimeException: java.util.concurrent.TimeoutException
  at org.jclouds.savvis.vpdc.config.VPDCRestClientModule.provideOrgs(VPDCRestClientModule.java:98)
  at org.jclouds.savvis.vpdc.config.VPDCRestClientModule.provideOrgs(VPDCRestClientModule.java:98)
  while locating java.util.Set<org.jclouds.savvis.vpdc.domain.Resource> annotated with @org.jclouds.savvis.vpdc.internal.Org()
1 error
	at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:987)
	at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1009)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:112)
	at $Proxy53.listOrgs(Unknown Source)
	... 26 more
Caused by: java.lang.RuntimeException: java.util.concurrent.TimeoutException
	at com.google.common.base.Throwables.propagate(Throwables.java:156)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:57)
	at com.google.common.base.Suppliers$ExpiringMemoizingSupplier.get(Suppliers.java:173)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:59)
	at org.jclouds.savvis.vpdc.config.VPDCRestClientModule.provideOrgs(VPDCRestClientModule.java:98)
	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 com.google.inject.internal.ProviderMethod.get(ProviderMethod.java:104)
	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
	at com.google.inject.Scopes$1$1.get(Scopes.java:65)
	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
	at com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:978)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1024)
	at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:974)
	... 29 more
Caused by: java.util.concurrent.TimeoutException
	at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:228)
	at java.util.concurrent.FutureTask.get(FutureTask.java:91)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribedFuture.get(ExecutorServiceModule.java:248)
	at com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:69)
	at com.google.common.util.concurrent.Futures$ChainingListenableFuture.get(Futures.java:758)
	at org.jclouds.concurrent.ExceptionParsingListenableFuture.get(ExceptionParsingListenableFuture.java:74)
	at org.jclouds.savvis.vpdc.config.VPDCRestClientModule$2.get(VPDCRestClientModule.java:149)
	at org.jclouds.savvis.vpdc.config.VPDCRestClientModule$2.get(VPDCRestClientModule.java:144)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	... 46 more
Caused by: java.util.concurrent.ExecutionException: task submitted from the following trace
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribedFuture.ensureCauseHasSubmissionTrace(ExecutorServiceModule.java:270)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribedFuture.get(ExecutorServiceModule.java:254)
	... 53 more

testLifeCycle(org.jclouds.savvis.vpdc.features.ServiceManagementClientLiveTest)  Time elapsed: 30.014 sec  <<< FAILURE!
java.lang.reflect.UndeclaredThrowableException
	at $Proxy54.listOrgs(Unknown Source)
	at org.jclouds.savvis.vpdc.features.ServiceManagementClientLiveTest.testLifeCycle(ServiceManagementClientLiveTest.java:55)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.GeneratedMethodAccessor14.invoke(Unknown Source)
	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)
	... 22 more
Caused by: com.google.inject.ProvisionException: Guice provision errors:
1) Error in custom provider, java.lang.RuntimeException: java.util.concurrent.TimeoutException
  at org.jclouds.savvis.vpdc.config.VPDCRestClientModule.provideOrgs(VPDCRestClientModule.java:98)
  at org.jclouds.savvis.vpdc.config.VPDCRestClientModule.provideOrgs(VPDCRestClientModule.java:98)
  while locating java.util.Set<org.jclouds.savvis.vpdc.domain.Resource> annotated with @org.jclouds.savvis.vpdc.internal.Org()
1 error
	at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:987)
	at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1009)
	at org.jclouds.rest.internal.AsyncRestClientProxy.invoke(AsyncRestClientProxy.java:112)
	at $Proxy53.listOrgs(Unknown Source)
	... 26 more
Caused by: java.lang.RuntimeException: java.util.concurrent.TimeoutException
	at com.google.common.base.Throwables.propagate(Throwables.java:156)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:57)
	at com.google.common.base.Suppliers$ExpiringMemoizingSupplier.get(Suppliers.java:173)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:59)
	at org.jclouds.savvis.vpdc.config.VPDCRestClientModule.provideOrgs(VPDCRestClientModule.java:98)
	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 com.google.inject.internal.ProviderMethod.get(ProviderMethod.java:104)
	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031)
	at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
	at com.google.inject.Scopes$1$1.get(Scopes.java:65)
	at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
	at com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:978)
	at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1024)
	at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:974)
	... 29 more
Caused by: java.util.concurrent.TimeoutException
	at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:228)
	at java.util.concurrent.FutureTask.get(FutureTask.java:91)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribedFuture.get(ExecutorServiceModule.java:248)
	at com.google.common.util.concurrent.ForwardingFuture.get(ForwardingFuture.java:69)
	at com.google.common.util.concurrent.Futures$ChainingListenableFuture.get(Futures.java:758)
	at org.jclouds.concurrent.ExceptionParsingListenableFuture.get(ExceptionParsingListenableFuture.java:74)
	at org.jclouds.savvis.vpdc.config.VPDCRestClientModule$2.get(VPDCRestClientModule.java:149)
	at org.jclouds.savvis.vpdc.config.VPDCRestClientModule$2.get(VPDCRestClientModule.java:144)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	... 46 more
Caused by: java.util.concurrent.ExecutionException: task submitted from the following trace
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribedFuture.ensureCauseHasSubmissionTrace(ExecutorServiceModule.java:270)
	at org.jclouds.concurrent.config.ExecutorServiceModule$DescribedFuture.get(ExecutorServiceModule.java:254)
	... 53 more

