コード例 #1
0
ファイル: test_request.py プロジェクト: anchorhong/oss2swift
 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)
コード例 #2
0
ファイル: test_request.py プロジェクト: anchorhong/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)
コード例 #3
0
ファイル: test_request.py プロジェクト: anchorhong/oss2swift
 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, '')
コード例 #4
0
ファイル: test_request.py プロジェクト: anchorhong/oss2swift
    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'])
コード例 #5
0
ファイル: test_request.py プロジェクト: anchorhong/oss2swift
    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')
コード例 #6
0
ファイル: test_request.py プロジェクト: anchorhong/oss2swift
    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, '')
コード例 #7
0
ファイル: test_request.py プロジェクト: anchorhong/oss2swift
    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)
コード例 #8
0
ファイル: test_request.py プロジェクト: anchorhong/oss2swift
    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))
コード例 #9
0
ファイル: test_request.py プロジェクト: anchorhong/oss2swift
    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)
コード例 #10
0
ファイル: test_request.py プロジェクト: anchorhong/oss2swift
    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())