-------------------------------------------------------------------------------
Test set: TestSuite
-------------------------------------------------------------------------------
Tests run: 129, Failures: 3, Errors: 0, Skipped: 2, Time elapsed: 382.664 sec <<< FAILURE!
testDirectory(org.jclouds.aws.s3.blobstore.integration.AWSS3ContainerIntegrationLiveTest)  Time elapsed: 0.887 sec  <<< FAILURE!
java.lang.AssertionError: [[type=RELATIVE_PATH, id=null, name=directory, location={scope=REGION, id=us-standard, description=us-standard, parent=aws-s3, iso3166Codes=[US]}, uri=https://adrianc-blobstore2.s3.amazonaws.com/directory/, userMetadata={}]]
	at org.jclouds.blobstore.integration.internal.BaseContainerIntegrationTest.testDirectory(BaseContainerIntegrationTest.java:174)
	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:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	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:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	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:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)

testPutFileParallel(org.jclouds.aws.s3.blobstore.integration.AWSS3BlobIntegrationLiveTest)  Time elapsed: 4.235 sec  <<< FAILURE!
java.util.concurrent.TimeoutException: putFileParallel, completed: 9/10, errors: 0, rate: 3000ms/op
	at org.jclouds.concurrent.FutureIterables.awaitCompletion(FutureIterables.java:148)
	at org.jclouds.blobstore.integration.internal.BaseBlobIntegrationTest.testPutFileParallel(BaseBlobIntegrationTest.java:165)
	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:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	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:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	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:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)

testUpdateBucketACL(org.jclouds.aws.s3.services.AWSBucketsLiveTest)  Time elapsed: 6.572 sec  <<< FAILURE!
java.lang.IllegalArgumentException: Validation on 'public abstract com.google.common.util.concurrent.ListenableFuture org.jclouds.s3.S3AsyncClient.putBucketInRegion(java.lang.String,java.lang.String,org.jclouds.s3.options.PutBucketOptions[])[us-standard, adrianc-blobstore22-7320179431804654419eu-6628851575727717289-318161130076276221, [Lorg.jclouds.s3.options.PutBucketOptions;@3620afcb]' didn't pass:
 Reason: Object 'adrianc-blobstore22-7320179431804654419eu-6628851575727717289-318161130076276221' doesn't match S3 bucket virtual host naming convention. Reason: Can't be null or empty. Length must be 3 to 63 symbols.. For more info, please refer to http://docs.amazonwebservices.com/AmazonS3/latest/index.html?BucketRestrictions.html..
	at org.jclouds.rest.InputParamValidator.validateMethodParametersOrThrow(InputParamValidator.java:76)
	at org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:181)
	at org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:134)
	at org.jclouds.rest.internal.InvokeSyncToAsyncHttpMethod.toCommand(InvokeSyncToAsyncHttpMethod.java:242)
	at org.jclouds.rest.internal.InvokeSyncToAsyncHttpMethod.invoke(InvokeSyncToAsyncHttpMethod.java:127)
	at org.jclouds.rest.internal.InvokeSyncToAsyncHttpMethod.apply(InvokeSyncToAsyncHttpMethod.java:99)
	at org.jclouds.rest.internal.InvokeSyncToAsyncHttpMethod.apply(InvokeSyncToAsyncHttpMethod.java:60)
	at org.jclouds.rest.internal.DelegatesToInvocationFunction.handle(DelegatesToInvocationFunction.java:159)
	at org.jclouds.rest.internal.DelegatesToInvocationFunction.invoke(DelegatesToInvocationFunction.java:126)
	at com.sun.proxy.$Proxy54.putBucketInRegion(Unknown Source)
	at org.jclouds.s3.blobstore.S3BlobStore.createContainerInLocation(S3BlobStore.java:270)
	at org.jclouds.s3.blobstore.S3BlobStore.createContainerInLocation(S3BlobStore.java:136)
	at org.jclouds.blobstore.integration.internal.BaseBlobStoreIntegrationTest.createContainerAndEnsureEmpty(BaseBlobStoreIntegrationTest.java:246)
	at org.jclouds.blobstore.integration.internal.BaseBlobStoreIntegrationTest.createContainerAndEnsureEmpty(BaseBlobStoreIntegrationTest.java:253)
	at org.jclouds.blobstore.integration.internal.BaseBlobStoreIntegrationTest.recycleContainer(BaseBlobStoreIntegrationTest.java:494)
	at org.jclouds.blobstore.integration.internal.BaseBlobStoreIntegrationTest.recycleContainerAndAddToPool(BaseBlobStoreIntegrationTest.java:488)
	at org.jclouds.blobstore.integration.internal.BaseBlobStoreIntegrationTest.destroyContainer(BaseBlobStoreIntegrationTest.java:483)
	at org.jclouds.s3.services.BucketsLiveTest.testUpdateBucketACL(BucketsLiveTest.java:129)
	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:714)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
	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:767)
	at org.testng.TestRunner.run(TestRunner.java:617)
	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:895)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
	at java.lang.Thread.run(Thread.java:680)
Caused by: java.lang.IllegalArgumentException: Object 'adrianc-blobstore22-7320179431804654419eu-6628851575727717289-318161130076276221' doesn't match S3 bucket virtual host naming convention. Reason: Can't be null or empty. Length must be 3 to 63 symbols.. For more info, please refer to http://docs.amazonwebservices.com/AmazonS3/latest/index.html?BucketRestrictions.html.
	at org.jclouds.s3.predicates.validators.BucketNameValidator.exception(BucketNameValidator.java:62)
	at org.jclouds.predicates.validators.DnsNameValidator.validate(DnsNameValidator.java:55)
	at org.jclouds.s3.predicates.validators.BucketNameValidator.validate(BucketNameValidator.java:48)
	at org.jclouds.aws.s3.predicates.validators.AWSS3BucketNameValidator.validate(AWSS3BucketNameValidator.java:54)
	at org.jclouds.aws.s3.predicates.validators.AWSS3BucketNameValidator.validate(AWSS3BucketNameValidator.java:36)
	at org.jclouds.predicates.Validator.apply(Validator.java:41)
	at org.jclouds.rest.InputParamValidator.runPredicatesAgainstArg(InputParamValidator.java:132)
	at org.jclouds.rest.InputParamValidator.performParameterValidation(InputParamValidator.java:116)
	at org.jclouds.rest.InputParamValidator.validateMethodParametersOrThrow(InputParamValidator.java:74)
	... 38 more
Caused by: java.lang.IllegalArgumentException: Object 'adrianc-blobstore22-7320179431804654419eu-6628851575727717289-318161130076276221' doesn't match S3 bucket virtual host naming convention. Reason: Can't be null or empty. Length must be 3 to 63 symbols.. For more info, please refer to http://docs.amazonwebservices.com/AmazonS3/latest/index.html?BucketRestrictions.html.
	at org.jclouds.s3.predicates.validators.BucketNameValidator.exception(BucketNameValidator.java:62)
	at org.jclouds.predicates.validators.DnsNameValidator.validate(DnsNameValidator.java:55)
	at org.jclouds.s3.predicates.validators.BucketNameValidator.validate(BucketNameValidator.java:48)
	at org.jclouds.aws.s3.predicates.validators.AWSS3BucketNameValidator.validate(AWSS3BucketNameValidator.java:54)
	at org.jclouds.aws.s3.predicates.validators.AWSS3BucketNameValidator.validate(AWSS3BucketNameValidator.java:36)
	at org.jclouds.predicates.Validator.apply(Validator.java:41)
	at org.jclouds.rest.InputParamValidator.runPredicatesAgainstArg(InputParamValidator.java:132)
	at org.jclouds.rest.InputParamValidator.performParameterValidation(InputParamValidator.java:116)
	at org.jclouds.rest.InputParamValidator.validateMethodParametersOrThrow(InputParamValidator.java:74)
	... 38 more

