import socket
import ssl
import os
+import re
from urlparse import urlparse
@nose.with_setup(teardown=_clear_custom_headers)
def test_object_create_missing_signed_header_aws4():
check_aws4_support()
- key = _setup_bad_object()
- _add_custom_non_auth_headers(remove=('Content-MD5',))
- e = assert_raises(boto.exception.S3ResponseError, key.set_contents_from_string, 'bar')
- eq(e.status, 403)
- eq(e.reason, 'Forbidden')
- eq(e.error_code, 'SignatureDoesNotMatch')
+ method='PUT'
+ expires_in='100000'
+ bucket = get_new_bucket()
+ key = bucket.new_key('foo')
+ body='zoo'
+
+ # compute the signature...
+ request_headers = {}
+ url = key.generate_url(expires_in, method=method, headers=request_headers)
+
+ o = urlparse(url)
+ path = o.path + '?' + o.query
+
+ # 'X-Amz-Expires' is missing
+ target = r'&X-Amz-Expires=' + expires_in
+ path = re.sub(target, '', path)
+
+ res =_make_raw_request(host=s3.main.host, port=s3.main.port, method=method, path=path,
+ body=body, request_headers=request_headers, secure=s3.main.is_secure)
+
+ eq(res.status, 403)
+ eq(res.reason, 'Forbidden')
@tag('auth_aws4')