-------------------------------------------------------------------------------
Test set: TestSuite
-------------------------------------------------------------------------------
Tests run: 130, Failures: 96, Errors: 0, Skipped: 28, Time elapsed: 32.613 sec <<< FAILURE!
testCompareSizes(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 13.807 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testCompareSizes(BaseTemplateBuilderLiveTest.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.invokeMethod(Invoker.java:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testFromTemplate(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.017 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testFromTemplate(BaseTemplateBuilderLiveTest.java:92)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testCompareSizes(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaComputeServiceLiveTest)  Time elapsed: 0.013 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.internal.BaseComputeServiceLiveTest.testCompareSizes(BaseComputeServiceLiveTest.java:779)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testTemplateBuilderCanFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCanFind(BaseTemplateBuilderLiveTest.java:141)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
setupContext(org.jclouds.skalicloud.SkaliCloudMalaysiaClientLiveTest)  Time elapsed: 0.039 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.elasticstack.ElasticStackClientLiveTest.setupContext(ElasticStackClientLiveTest.java:100)
	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:551)
	at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:213)
	at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:138)
	at org.testng.internal.Invoker.invokeBeforeGroupsConfigurations(Invoker.java:930)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:631)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testTemplateBuilderCanFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.014 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCanFind(BaseTemplateBuilderLiveTest.java:141)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testTemplateBuilderCanFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCanFind(BaseTemplateBuilderLiveTest.java:141)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testTemplateBuilderCanFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.005 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCanFind(BaseTemplateBuilderLiveTest.java:141)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testTemplateBuilderCanFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.005 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCanFind(BaseTemplateBuilderLiveTest.java:141)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testTemplateBuilderCanFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCanFind(BaseTemplateBuilderLiveTest.java:141)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testTemplateBuilderCanFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.008 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCanFind(BaseTemplateBuilderLiveTest.java:141)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testTemplateBuilderCanFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCanFind(BaseTemplateBuilderLiveTest.java:141)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testTemplateBuilderCanFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCanFind(BaseTemplateBuilderLiveTest.java:141)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testTemplateBuilderCanFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.004 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCanFind(BaseTemplateBuilderLiveTest.java:141)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testTemplateBuilderCanFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCanFind(BaseTemplateBuilderLiveTest.java:141)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testTemplateBuilderCanFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.004 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCanFind(BaseTemplateBuilderLiveTest.java:141)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testTemplateBuilderCanFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.004 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCanFind(BaseTemplateBuilderLiveTest.java:141)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testTemplateBuilderCanFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCanFind(BaseTemplateBuilderLiveTest.java:141)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testTemplateBuilderCanFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.004 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCanFind(BaseTemplateBuilderLiveTest.java:141)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testTemplateBuilderCanFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCanFind(BaseTemplateBuilderLiveTest.java:141)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testTemplateBuilderCanFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCanFind(BaseTemplateBuilderLiveTest.java:141)
	at sun.reflect.GeneratedMethodAccessor13.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:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testTemplateBuilderCanFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCanFind(BaseTemplateBuilderLiveTest.java:141)
	at sun.reflect.GeneratedMethodAccessor13.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:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testTemplateBuilderCanFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.004 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCanFind(BaseTemplateBuilderLiveTest.java:141)
	at sun.reflect.GeneratedMethodAccessor13.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:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testTemplateBuilderCanUseImageId(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.007 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCanUseImageId(BaseTemplateBuilderLiveTest.java:159)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.009 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.005 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.019 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.02 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.004 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.01 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.004 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.005 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.014 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.034 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.005 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.012 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.004 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.018 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.005 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.001 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.005 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.005 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.013 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.006 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.005 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.003 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderCannotFind(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
org.testng.TestException: 
Expected exception java.util.NoSuchElementException but got java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1475)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
Caused by: java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderCannotFind(BaseTemplateBuilderLiveTest.java:154)
	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.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:80)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:701)
	... 15 more
testTemplateBuilderWithImageIdSpecified(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.006 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderWithImageIdSpecified(BaseTemplateBuilderLiveTest.java:221)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testCorrectAuthException(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaComputeServiceLiveTest)  Time elapsed: 0.86 sec  <<< FAILURE!
org.testng.TestException: 
Method BaseComputeServiceLiveTest.testCorrectAuthException()[pri:0, instance:org.jclouds.skalicloud.compute.SkaliCloudMalaysiaComputeServiceLiveTest@6b359c1b] should have thrown an exception of class org.jclouds.rest.AuthorizationException
	at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1501)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:750)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testCreateAndRunAService(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaComputeServiceLiveTest)  Time elapsed: 2.024 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:221)
	at org.jclouds.compute.internal.BaseComputeServiceLiveTest.testCreateAndRunAService(BaseComputeServiceLiveTest.java:620)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testImagesCache(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaComputeServiceLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.internal.BaseComputeService.listImages(BaseComputeService.java:364)
	at org.jclouds.compute.internal.BaseComputeServiceLiveTest.testImagesCache(BaseComputeServiceLiveTest.java:191)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testListImages(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaComputeServiceLiveTest)  Time elapsed: 0.004 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.internal.BaseComputeService.listImages(BaseComputeService.java:364)
	at org.jclouds.compute.internal.BaseComputeServiceLiveTest.testListImages(BaseComputeServiceLiveTest.java:699)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testTemplateBuilderWithLoginUserSpecified(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 11.176 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.tryOverrideUsingPropertyKey(BaseTemplateBuilderLiveTest.java:274)
	at org.jclouds.compute.internal.BaseTemplateBuilderLiveTest.testTemplateBuilderWithLoginUserSpecified(BaseTemplateBuilderLiveTest.java:252)
	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:701)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:893)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1218)
	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$2.call(ThreadUtil.java:64)
	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)
testDefaultTemplateBuilder(org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest)  Time elapsed: 0.002 sec  <<< FAILURE!
java.lang.ClassCastException: org.jclouds.elasticstack.domain.DriveInfo cannot be cast to java.lang.Comparable
	at com.google.common.collect.NaturalOrdering.compare(NaturalOrdering.java:28)
	at java.util.Arrays.mergeSort(Arrays.java:1270)
	at java.util.Arrays.mergeSort(Arrays.java:1281)
	at java.util.Arrays.sort(Arrays.java:1210)
	at com.google.common.collect.SortedIterables.sortedUnique(SortedIterables.java:95)
	at com.google.common.collect.ImmutableSortedSet.copyOfInternal(ImmutableSortedSet.java:408)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:343)
	at com.google.common.collect.ImmutableSortedSet.copyOf(ImmutableSortedSet.java:251)
	at org.jclouds.util.Iterables2.concreteCopy(Iterables2.java:37)
	at org.jclouds.elasticstack.compute.ElasticStackComputeServiceAdapter.listImages(ElasticStackComputeServiceAdapter.java:187)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:116)
	at org.jclouds.compute.config.ComputeServiceAdapterContextModule$2.get(ComputeServiceAdapterContextModule.java:112)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:47)
	at org.jclouds.collect.TransformingSetSupplier.get(TransformingSetSupplier.java:36)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:247)
	at org.jclouds.compute.config.BaseComputeServiceContextModule$9.get(BaseComputeServiceContextModule.java:244)
	at org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:49)
	at org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:47)
	at org.jclouds.util.Suppliers2$ExpiringMemoizingSupplier.get(Suppliers2.java:130)
	at org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:64)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.getImages(TemplateBuilderImpl.java:737)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:612)
	at org.jclouds.compute.domain.internal.TemplateBuilderImpl.build(TemplateBuilderImpl.java:606)
	at org.jclouds.skalicloud.compute.SkaliCloudMalaysiaTemplateBuilderLiveTest.testDefaultTemplateBuilder(SkaliCloudMalaysiaTemplateBuilderLiveTest.java:76)
