def _test_get_response(self, method, container='bucket', obj=None, permission=None, skip_check=False, req_klass=Oss_Request, fake_swift_resp=None): path = '/' + container + ('/' + obj if obj else '') req = Request.blank(path, environ={'REQUEST_METHOD': method}, headers={ 'Authorization': 'OSS test:tester:hmac', 'Date': self.get_date_header() }) if issubclass(req_klass, OssAclRequest): oss_req = req_klass(req.environ, MagicMock()) else: oss_req = req_klass(req.environ) with nested(patch('oss2swift.request.Request._get_response'), patch('oss2swift.subresource.ACL.check_permission')) \ as (mock_get_resp, m_check_permission): mock_get_resp.return_value = fake_swift_resp \ or FakeResponse(CONF.oss_acl) return mock_get_resp, m_check_permission,\ oss_req.get_response(self.oss2swift)
def create_ossrequest_with_param(param, value): req = Request.blank('/bucket?%s=%s' % (param, value), environ={'REQUEST_METHOD': 'GET'}, headers={ 'Authorization': 'OSS test:tester:hmac', 'Date': self.get_date_header() }) return Oss_Request(req.environ, True)
def test_date_header_missing(self): self.swift.register('HEAD', '/v1/AUTH_test/nojunk', swob.HTTPNotFound, {}, None) req = Request.blank('/nojunk', environ={'REQUEST_METHOD': 'HEAD'}, headers={'Authorization': 'OSS test:tester:hmac'}) status, headers, body = self.call_oss2swift(req) self.assertEqual(status.split()[0], '403') self.assertEqual(body, '')
def test_to_swift_req_subrequest_proxy_access_log(self): container = 'bucket' obj = 'obj' method = 'GET' # force_swift_request_proxy_log is True req = Request.blank('/%s/%s' % (container, obj), environ={ 'REQUEST_METHOD': method, 'swift.proxy_access_log_made': True }, headers={ 'Authorization': 'OSS test:tester:hmac', 'Date': self.get_date_header() }) with nested(patch.object(Request, 'get_response'), patch.object(Request, 'remote_user', 'authorized'), patch('oss2swift.cfg.CONF.force_swift_request_proxy_log', True)) \ as (m_swift_resp, m_remote_user, m_cfg): m_swift_resp.return_value = FakeSwiftResponse() oss_req = Oss_Request(req.environ, MagicMock()) sw_req = oss_req.to_swift_req(method, container, obj) self.assertFalse(sw_req.environ['swift.proxy_access_log_made']) # force_swift_request_proxy_log is False req = Request.blank('/%s/%s' % (container, obj), environ={ 'REQUEST_METHOD': method, 'swift.proxy_access_log_made': True }, headers={ 'Authorization': 'OSS test:tester:hmac', 'Date': self.get_date_header() }) with nested(patch.object(Request, 'get_response'), patch.object(Request, 'remote_user', 'authorized')) \ as (m_swift_resp, m_remote_user): m_swift_resp.return_value = FakeSwiftResponse() oss_req = Oss_Request(req.environ, MagicMock()) sw_req = oss_req.to_swift_req(method, container, obj) self.assertTrue(sw_req.environ['swift.proxy_access_log_made'])
def test_canonical_uri_sigv2(self): environ = { 'HTTP_HOST': 'bucket1.oss.test.com', 'REQUEST_METHOD': 'GET' } headers = { 'Authorization': 'OSS test:tester:hmac', 'X-Oss-Date': self.get_date_header() } # Virtual hosted-style with patch('oss2swift.cfg.CONF.storage_domain', 'oss.test.com'): req = Request.blank('/', environ=environ, headers=headers) sigv2_req = Oss_Request(req.environ) uri = sigv2_req._canonical_uri() self.assertEqual(uri, '/bucket1/') self.assertEqual(req.environ['PATH_INFO'], '/') req = Request.blank('/obj1', environ=environ, headers=headers) sigv2_req = Oss_Request(req.environ) uri = sigv2_req._canonical_uri() self.assertEqual(uri, '/bucket1/obj1') self.assertEqual(req.environ['PATH_INFO'], '/obj1') environ = {'HTTP_HOST': 'oss.test.com', 'REQUEST_METHOD': 'GET'} # Path-style with patch('oss2swift.cfg.CONF.storage_domain', ''): req = Request.blank('/', environ=environ, headers=headers) sigv2_req = Oss_Request(req.environ) uri = sigv2_req._canonical_uri() self.assertEqual(uri, '/') self.assertEqual(req.environ['PATH_INFO'], '/') req = Request.blank('/bucket1/obj1', environ=environ, headers=headers) sigv2_req = Oss_Request(req.environ) uri = sigv2_req._canonical_uri() self.assertEqual(uri, '/bucket1/obj1') self.assertEqual(req.environ['PATH_INFO'], '/bucket1/obj1')
def test_date_header_with_x_oss_date_expired(self): self.swift.register('HEAD', '/v1/AUTH_test/nojunk', swob.HTTPNotFound, {}, None) req = Request.blank('/nojunk', environ={'REQUEST_METHOD': 'HEAD'}, headers={ 'Authorization': 'OSS test:tester:hmac', 'Date': self.get_date_header(), 'x-oss-date': 'Fri, 01 Apr 2014 12:00:00 GMT' }) status, headers, body = self.call_oss2swift(req) self.assertEqual(status.split()[0], '403') self.assertEqual(body, '')
def test_authenticate_delete_Authorization_from_ossreq_headers(self): req = Request.blank('/bucket/obj', environ={'REQUEST_METHOD': 'GET'}, headers={ 'Authorization': 'OSS test:tester:hmac', 'Date': self.get_date_header() }) with nested(patch.object(Request, 'get_response'), patch.object(Request, 'remote_user', 'authorized')) \ as (m_swift_resp, m_remote_user): m_swift_resp.return_value = FakeSwiftResponse() oss_req = Oss_Request(req.environ, MagicMock()) self.assertTrue('HTTP_AUTHORIZATION' in oss_req.environ) self.assertTrue('Authorization' in oss_req.headers)
def _test_request_timestamp_sigv2(self, date_header): # signature v4 here environ = {'REQUEST_METHOD': 'GET'} headers = {'Authorization': 'OSS test:tester:hmac'} headers.update(date_header) req = Request.blank('/', environ=environ, headers=headers) sigv2_req = Oss_Request(req.environ) if 'X-Oss-Date' in date_header: timestamp = mktime(req.headers.get('X-Oss-Date')) elif 'Date' in date_header: timestamp = mktime(req.headers.get('Date')) else: self.fail('Invalid date header specified as test') self.assertEqual(timestamp, int(sigv2_req.timestamp))
def test_to_swift_req_Authorization_not_exist_in_swreq_headers(self): container = 'bucket' obj = 'obj' method = 'GET' req = Request.blank('/%s/%s' % (container, obj), environ={'REQUEST_METHOD': method}, headers={ 'Authorization': 'OSS test:tester:hmac', 'Date': self.get_date_header() }) with nested(patch.object(Request, 'get_response'), patch.object(Request, 'remote_user', 'authorized')) \ as (m_swift_resp, m_remote_user): m_swift_resp.return_value = FakeSwiftResponse() oss_req = Oss_Request(req.environ, MagicMock()) sw_req = oss_req.to_swift_req(method, container, obj) self.assertIn('HTTP_AUTHORIZATION', sw_req.environ) self.assertIn('Authorization', sw_req.headers)
def test_get_container_info(self): self.swift.register( 'HEAD', '/v1/AUTH_test/bucket', HTTPNoContent, { 'x-container-read': 'foo', 'X-container-object-count': 5, 'X-container-meta-foo': 'bar' }, None) req = Request.blank('/bucket', environ={'REQUEST_METHOD': 'GET'}, headers={ 'Authorization': 'OSS test:tester:hmac', 'Date': self.get_date_header() }) oss_req = Oss_Request(req.environ, True) # first, call get_response('HEAD') info = oss_req.get_container_info(self.app) self.assertTrue('status' in info) # sanity self.assertEqual(204, info['status']) # sanity self.assertEqual('foo', info['read_acl']) # sanity self.assertEqual('5', info['object_count']) # sanity self.assertEqual({'foo': 'bar'}, info['meta']) # sanity with patch('oss2swift.request.get_container_info', return_value={'status': 204}) as mock_info: # Then all calls goes to get_container_info for x in xrange(10): info = oss_req.get_container_info(self.swift) self.assertTrue('status' in info) # sanity self.assertEqual(204, info['status']) # sanity self.assertEqual(10, mock_info.call_count) expected_errors = [(404, NoSuchBucket), (0, InternalError)] for status, expected_error in expected_errors: with patch('oss2swift.request.get_container_info', return_value={'status': status}): self.assertRaises(expected_error, oss_req.get_container_info, MagicMock())