Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(922)

Unified Diff: third_party/boto/tests/unit/s3/test_connection.py

Issue 698893003: Update checked in version of gsutil to version 4.6 (Closed) Base URL: http://dart.googlecode.com/svn/third_party/gsutil/
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/boto/tests/unit/s3/test_bucket.py ('k') | third_party/boto/tests/unit/ses/test_identity.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/boto/tests/unit/s3/test_connection.py
===================================================================
--- third_party/boto/tests/unit/s3/test_connection.py (revision 33376)
+++ third_party/boto/tests/unit/s3/test_connection.py (working copy)
@@ -19,10 +19,15 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
#
+import mock
+import time
+
from tests.unit import unittest
from tests.unit import AWSMockServiceTestCase
+from tests.unit import MockServiceWithConfigTestCase
-from boto.s3.connection import S3Connection
+from boto.s3.connection import S3Connection, HostRequiredError
+from boto.s3.connection import S3ResponseError, Bucket
class TestSignatureAlteration(AWSMockServiceTestCase):
@@ -46,6 +51,92 @@
)
+class TestSigV4HostError(MockServiceWithConfigTestCase):
+ connection_class = S3Connection
+
+ def test_historical_behavior(self):
+ self.assertEqual(
+ self.service_connection._required_auth_capability(),
+ ['s3']
+ )
+ self.assertEqual(self.service_connection.host, 's3.amazonaws.com')
+
+ def test_sigv4_opt_in(self):
+ # Switch it at the config, so we can check to see how the host is
+ # handled.
+ self.config = {
+ 's3': {
+ 'use-sigv4': True,
+ }
+ }
+
+ with self.assertRaises(HostRequiredError):
+ # No host+SigV4 == KABOOM
+ self.connection_class(
+ aws_access_key_id='less',
+ aws_secret_access_key='more'
+ )
+
+ # Ensure passing a ``host`` still works.
+ conn = self.connection_class(
+ aws_access_key_id='less',
+ aws_secret_access_key='more',
+ host='s3.cn-north-1.amazonaws.com.cn'
+ )
+ self.assertEqual(
+ conn._required_auth_capability(),
+ ['hmac-v4-s3']
+ )
+ self.assertEqual(
+ conn.host,
+ 's3.cn-north-1.amazonaws.com.cn'
+ )
+
+
+class TestSigV4Presigned(MockServiceWithConfigTestCase):
+ connection_class = S3Connection
+
+ def test_sigv4_presign(self):
+ self.config = {
+ 's3': {
+ 'use-sigv4': True,
+ }
+ }
+
+ conn = self.connection_class(
+ aws_access_key_id='less',
+ aws_secret_access_key='more',
+ host='s3.amazonaws.com'
+ )
+
+ # Here we force an input iso_date to ensure we always get the
+ # same signature.
+ url = conn.generate_url_sigv4(86400, 'GET', bucket='examplebucket',
+ key='test.txt', iso_date='20140625T000000Z')
+
+ self.assertIn('a937f5fbc125d98ac8f04c49e0204ea1526a7b8ca058000a54c192457be05b7d', url)
+
+ def test_sigv4_presign_optional_params(self):
+ self.config = {
+ 's3': {
+ 'use-sigv4': True,
+ }
+ }
+
+ conn = self.connection_class(
+ aws_access_key_id='less',
+ aws_secret_access_key='more',
+ security_token='token',
+ host='s3.amazonaws.com'
+ )
+
+ url = conn.generate_url_sigv4(86400, 'GET', bucket='examplebucket',
+ key='test.txt', version_id=2)
+
+ self.assertIn('VersionId=2', url)
+ self.assertIn('X-Amz-Security-Token=token', url)
+
+
class TestUnicodeCallingFormat(AWSMockServiceTestCase):
connection_class = S3Connection
@@ -78,5 +169,53 @@
self.service_connection.get_all_buckets()
+class TestHeadBucket(AWSMockServiceTestCase):
+ connection_class = S3Connection
+
+ def default_body(self):
+ # HEAD requests always have an empty body.
+ return ""
+
+ def test_head_bucket_success(self):
+ self.set_http_response(status_code=200)
+ buck = self.service_connection.head_bucket('my-test-bucket')
+ self.assertTrue(isinstance(buck, Bucket))
+ self.assertEqual(buck.name, 'my-test-bucket')
+
+ def test_head_bucket_forbidden(self):
+ self.set_http_response(status_code=403)
+
+ with self.assertRaises(S3ResponseError) as cm:
+ self.service_connection.head_bucket('cant-touch-this')
+
+ err = cm.exception
+ self.assertEqual(err.status, 403)
+ self.assertEqual(err.error_code, 'AccessDenied')
+ self.assertEqual(err.message, 'Access Denied')
+
+ def test_head_bucket_notfound(self):
+ self.set_http_response(status_code=404)
+
+ with self.assertRaises(S3ResponseError) as cm:
+ self.service_connection.head_bucket('totally-doesnt-exist')
+
+ err = cm.exception
+ self.assertEqual(err.status, 404)
+ self.assertEqual(err.error_code, 'NoSuchBucket')
+ self.assertEqual(err.message, 'The specified bucket does not exist')
+
+ def test_head_bucket_other(self):
+ self.set_http_response(status_code=405)
+
+ with self.assertRaises(S3ResponseError) as cm:
+ self.service_connection.head_bucket('you-broke-it')
+
+ err = cm.exception
+ self.assertEqual(err.status, 405)
+ # We don't have special-cases for this error status.
+ self.assertEqual(err.error_code, None)
+ self.assertEqual(err.message, '')
+
+
if __name__ == "__main__":
unittest.main()
« no previous file with comments | « third_party/boto/tests/unit/s3/test_bucket.py ('k') | third_party/boto/tests/unit/ses/test_identity.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698