]> git-server-git.apps.pok.os.sepia.ceph.com Git - s3-tests.git/commitdiff
add Content-Type object tests
authorStephon Striplin <stephon.striplin@dreamhost.com>
Mon, 25 Jul 2011 21:12:50 +0000 (14:12 -0700)
committerStephon Striplin <stephon.striplin@dreamhost.com>
Mon, 25 Jul 2011 21:12:50 +0000 (14:12 -0700)
s3tests/functional/test_headers.py

index a1adab9c0ead60b94347daae7a41a63e494cab4d..a1b8787843bf3acbc247dc9c022b57dc1f29efa9 100644 (file)
@@ -30,6 +30,7 @@ from . import (
 
 _orig_merge_meta = None
 _custom_headers = None
+_remove_headers = None
 
 def setup():
 
@@ -58,31 +59,39 @@ def _our_merge_meta(*args, **kwargs):
     sure we can overload whichever headers we need to.
     """
 
-    global _orig_merge_meta, _custom_headers
+    global _orig_merge_meta, _custom_headers, _remove_headers
     final_headers = _orig_merge_meta(*args, **kwargs)
     final_headers.update(_custom_headers)
 
+    print _remove_headers
+    for header in _remove_headers:
+        del final_headers[header]
+
     print final_headers
     return final_headers
 
 
 def _clear_custom_headers():
-    global _custom_headers
+    global _custom_headers, _remove_headers
     _custom_headers = {}
+    _remove_headers = []
 
 
-def _add_custom_headers(headers):
-    global _custom_headers
+def _add_custom_headers(headers=None, remove=None):
+    global _custom_headers, _remove_headers
     if not _custom_headers:
         _custom_headers = {}
 
-    _custom_headers.update(headers)
+    if headers is not None:
+        _custom_headers.update(headers)
+    if remove is not None:
+        _remove_headers.extend(remove)
 
 
-def _setup_bad_object(headers):
+def _setup_bad_object(headers=None, remove=None):
     bucket = get_new_bucket()
 
-    _add_custom_headers(headers)
+    _add_custom_headers(headers=headers, remove=remove)
     return bucket.new_key('foo')
  
 
@@ -171,3 +180,31 @@ def test_object_create_bad_contentlength_mismatch_below():
     # dho is 'Bad request', which doesn't match the http response code
     eq(e.reason, 'Bad Request')
     eq(e.error_code, 'BadDigest')
+
+
+@nose.with_setup(teardown=_clear_custom_headers)
+def test_object_create_bad_contenttype_invalid():
+    key = _setup_bad_object({'Content-Type': 'text/plain'})
+    key.set_contents_from_string('bar')
+
+
+@nose.with_setup(teardown=_clear_custom_headers)
+def test_object_create_bad_contenttype_empty():
+    key = _setup_bad_object({'Content-Type': ''})
+    key.set_contents_from_string('bar')
+
+
+@nose.with_setup(teardown=_clear_custom_headers)
+def test_object_create_bad_contenttype_none():
+    key = _setup_bad_object(remove=('Content-Type',))
+    key.set_contents_from_string('bar')
+
+
+@nose.with_setup(teardown=_clear_custom_headers)
+def test_object_create_bad_contenttype_unreadable():
+    key = _setup_bad_object({'Content-Type': '\x08'})
+
+    e = assert_raises(boto.exception.S3ResponseError, key.set_contents_from_string, 'bar')
+    eq(e.status, 403)
+    eq(e.reason, 'Forbidden')
+    assert e.error_code in ('AccessDenied', 'SignatureDoesNotMatch')