Beispiel #1
0
    def test_headers_to_container_info_values(self):
        headers = {
            "x-container-read": "readvalue",
            "x-container-write": "writevalue",
            "x-container-sync-key": "keyvalue",
            "x-container-meta-access-control-allow-origin": "here",
        }
        resp = headers_to_container_info(headers.items(), 200)
        self.assertEquals(resp["read_acl"], "readvalue")
        self.assertEquals(resp["write_acl"], "writevalue")
        self.assertEquals(resp["cors"]["allow_origin"], "here")

        headers["x-unused-header"] = "blahblahblah"
        self.assertEquals(resp, headers_to_container_info(headers.items(), 200))
Beispiel #2
0
    def test_headers_to_container_info_values(self):
        headers = {
            'x-container-read': 'readvalue',
            'x-container-write': 'writevalue',
            'x-container-sync-key': 'keyvalue',
            'x-container-meta-access-control-allow-origin': 'here',
        }
        resp = headers_to_container_info(headers.items(), 200)
        self.assertEqual(resp['read_acl'], 'readvalue')
        self.assertEqual(resp['write_acl'], 'writevalue')
        self.assertEqual(resp['cors']['allow_origin'], 'here')

        headers['x-unused-header'] = 'blahblahblah'
        self.assertEqual(resp, headers_to_container_info(headers.items(), 200))
Beispiel #3
0
 def test_headers_to_container_info_sys_meta(self):
     prefix = get_sys_meta_prefix("container")
     headers = {"%sWhatevs" % prefix: 14, "%ssomethingelse" % prefix: 0}
     resp = headers_to_container_info(headers.items(), 200)
     self.assertEquals(len(resp["sysmeta"]), 2)
     self.assertEquals(resp["sysmeta"]["whatevs"], 14)
     self.assertEquals(resp["sysmeta"]["somethingelse"], 0)
Beispiel #4
0
 def test_headers_to_container_info_meta(self):
     headers = {'X-Container-Meta-Whatevs': 14,
                'x-container-meta-somethingelse': 0}
     resp = headers_to_container_info(headers.items(), 200)
     self.assertEqual(len(resp['meta']), 2)
     self.assertEqual(resp['meta']['whatevs'], 14)
     self.assertEqual(resp['meta']['somethingelse'], 0)
Beispiel #5
0
    def test_headers_to_container_info_values(self):
        headers = {
            'x-container-read': 'readvalue',
            'x-container-write': 'writevalue',
            'x-container-sync-key': 'keyvalue',
            'x-container-meta-access-control-allow-origin': 'here',
        }
        resp = headers_to_container_info(headers.items(), 200)
        self.assertEqual(resp['read_acl'], 'readvalue')
        self.assertEqual(resp['write_acl'], 'writevalue')
        self.assertEqual(resp['cors']['allow_origin'], 'here')

        headers['x-unused-header'] = 'blahblahblah'
        self.assertEqual(
            resp,
            headers_to_container_info(headers.items(), 200))
Beispiel #6
0
    def GETorHEAD(self, req):
        """Handler for HTTP GET/HEAD requests."""
        if not self.account_info(self.account_name, req)[1]:
            return HTTPNotFound(request=req)
        part = self.app.container_ring.get_part(
            self.account_name, self.container_name)
        resp = self.GETorHEAD_base(
            req, _('Container'), self.app.container_ring, part, req.path_info)
        if self.app.memcache:
            # set the memcache container size for ratelimiting
            cache_key = get_container_memcache_key(self.account_name,
                                                   self.container_name)
            self.app.memcache.set(
                cache_key,
                headers_to_container_info(resp.headers, resp.status_int),
                time=self.app.recheck_container_existence)

        if 'swift.authorize' in req.environ:
            req.acl = resp.headers.get('x-container-read')
            aresp = req.environ['swift.authorize'](req)
            if aresp:
                return aresp
        if not req.environ.get('swift_owner', False):
            for key in ('x-container-read', 'x-container-write',
                        'x-container-sync-key', 'x-container-sync-to'):
                if key in resp.headers:
                    del resp.headers[key]
        return resp
Beispiel #7
0
    def get_container_info(self, app):
        """
        get_container_info will return a result dict of get_container_info
        from the backend Swift.

        :returns: a dictionary of container info from
                  swift.controllers.base.get_container_info
        :raises: NoSuchBucket when the container doesn't exist
        :raises: InternalError when the request failed without 404
        """
        if self.is_authenticated:
            # if we have already authenticated, yes we can use the account
            # name like as AUTH_xxx for performance efficiency
            sw_req = self.to_swift_req(app, self.container_name, None)
            info = get_container_info(sw_req.environ, app)
            if is_success(info['status']):
                return info
            elif info['status'] == 404:
                raise NoSuchBucket(self.container_name)
            else:
                raise InternalError(
                    'unexpected status code %d' % info['status'])
        else:
            # otherwise we do naive HEAD request with the authentication
            resp = self.get_response(app, 'HEAD', self.container_name, '')
            return headers_to_container_info(
                resp.sw_headers, resp.status_int)  # pylint: disable-msg=E1101
Beispiel #8
0
 def test_headers_to_container_info_sys_meta(self):
     prefix = get_sys_meta_prefix('container')
     headers = {'%sWhatevs' % prefix: 14, '%ssomethingelse' % prefix: 0}
     resp = headers_to_container_info(headers.items(), 200)
     self.assertEqual(len(resp['sysmeta']), 2)
     self.assertEqual(resp['sysmeta']['whatevs'], 14)
     self.assertEqual(resp['sysmeta']['somethingelse'], 0)
Beispiel #9
0
 def test_headers_to_container_info_meta(self):
     headers = {'X-Container-Meta-Whatevs': 14,
                'x-container-meta-somethingelse': 0}
     resp = headers_to_container_info(headers.items(), 200)
     self.assertEquals(len(resp['meta']), 2)
     self.assertEquals(resp['meta']['whatevs'], 14)
     self.assertEquals(resp['meta']['somethingelse'], 0)
 def test_container_info_in_response_env(self):
     controller = proxy_server.ContainerController(self.app, "a", "c")
     with mock.patch("swift.proxy.controllers.base.http_connect", fake_http_connect(200, 200, body="")):
         req = Request.blank("/v1/a/c", {"PATH_INFO": "/v1/a/c"})
         resp = controller.HEAD(req)
     self.assertEqual(2, resp.status_int // 100)
     self.assertTrue("swift.container/a/c" in resp.environ)
     self.assertEqual(headers_to_container_info(resp.headers), resp.environ["swift.container/a/c"])
Beispiel #11
0
 def test_headers_to_container_info_sys_meta(self):
     prefix = get_sys_meta_prefix('container')
     headers = {'%sWhatevs' % prefix: 14,
                '%ssomethingelse' % prefix: 0}
     resp = headers_to_container_info(headers.items(), 200)
     self.assertEqual(len(resp['sysmeta']), 2)
     self.assertEqual(resp['sysmeta']['whatevs'], 14)
     self.assertEqual(resp['sysmeta']['somethingelse'], 0)
Beispiel #12
0
 def __init__(self, headers, env, account, container):
     self.headers = headers
     self.status_int = FakeResponse_status_int
     self.environ = env
     cache_key, env_key = _get_cache_key(account, container)
     if container:
         info = headers_to_container_info(headers, FakeResponse_status_int)
     else:
         info = headers_to_account_info(headers, FakeResponse_status_int)
     env[env_key] = info
Beispiel #13
0
 def test_container_info(self):
     req = Request.blank('/v1/a/c', {'PATH_INFO': '/v1/a/c'}, method='HEAD')
     self.storage.container.container_show = Mock(return_value={})
     resp = req.get_response(self.app)
     self.assertEqual(2, resp.status_int // 100)
     self.assertIn('swift.infocache', resp.environ)
     self.assertIn('container/a/c', resp.environ['swift.infocache'])
     self.assertEqual(
         headers_to_container_info(resp.headers, resp.status_int),
         resp.environ['swift.infocache']['container/a/c'])
Beispiel #14
0
 def __init__(self, headers, env, account, container):
     self.headers = headers
     self.status_int = FakeResponse_status_int
     self.environ = env
     cache_key, env_key = _get_cache_key(account, container)
     if container:
         info = headers_to_container_info(headers, FakeResponse_status_int)
     else:
         info = headers_to_account_info(headers, FakeResponse_status_int)
     env[env_key] = info
Beispiel #15
0
 def test_container_info_in_response_env(self):
     controller = proxy_server.ContainerController(self.app, 'a', 'c')
     with mock.patch('swift.proxy.controllers.base.http_connect',
                     fake_http_connect(200, 200, body='')):
         req = Request.blank('/a/c', {'PATH_INFO': '/a/c'})
         resp = controller.HEAD(req)
     self.assertEqual(2, resp.status_int // 100)
     self.assertTrue("swift.container/a/c" in resp.environ)
     self.assertEqual(headers_to_container_info(resp.headers),
                      resp.environ['swift.container/a/c'])
Beispiel #16
0
 def test_container_info_in_response_env(self):
     controller = proxy_server.ContainerController(self.app, 'a', 'c')
     with mock.patch('swift.proxy.controllers.base.http_connect',
                     fake_http_connect(200, 200, body='')):
         req = Request.blank('/a/c', {'PATH_INFO': '/a/c'})
         resp = controller.HEAD(req)
     self.assertEqual(2, resp.status_int // 100)
     self.assertTrue("swift.container/a/c" in resp.environ)
     self.assertEqual(headers_to_container_info(resp.headers),
                      resp.environ['swift.container/a/c'])
Beispiel #17
0
 def test_container_info(self):
     req = Request.blank('/v1/a/c', {'PATH_INFO': '/v1/a/c'}, method='HEAD')
     self.storage.container.container_show = Mock(return_value={})
     resp = req.get_response(self.app)
     self.assertEqual(2, resp.status_int // 100)
     self.assertIn('swift.infocache', resp.environ)
     self.assertIn('container/a/c', resp.environ['swift.infocache'])
     self.assertEqual(
         headers_to_container_info(resp.headers, resp.status_int),
         resp.environ['swift.infocache']['container/a/c'])
Beispiel #18
0
 def test_container_info_got_cached(self):
     controller = proxy_server.ContainerController(self.app, "a", "c")
     with mock.patch("swift.proxy.controllers.base.http_connect", fake_http_connect(200, 200, body="")):
         req = Request.blank("/v1/a/c", {"PATH_INFO": "/v1/a/c"})
         resp = controller.HEAD(req)
     self.assertEqual(2, resp.status_int // 100)
     # Make sure it's in both swift.infocache and memcache
     self.assertIn("container/a/c", resp.environ["swift.infocache"])
     self.assertEqual(headers_to_container_info(resp.headers), resp.environ["swift.infocache"]["container/a/c"])
     from_memcache = self.app.memcache.get("container/a/c")
     self.assertTrue(from_memcache)
 def test_container_info_got_cached(self):
     controller = proxy_server.ContainerController(self.app, 'a', 'c')
     with mock.patch('swift.proxy.controllers.base.http_connect',
                     fake_http_connect(200, 200, body='')):
         req = Request.blank('/v1/a/c', {'PATH_INFO': '/v1/a/c'})
         resp = controller.HEAD(req)
     self.assertEqual(2, resp.status_int // 100)
     # Make sure it's in both swift.infocache and memcache
     self.assertIn("container/a/c", resp.environ['swift.infocache'])
     self.assertEqual(headers_to_container_info(resp.headers),
                      resp.environ['swift.infocache']['container/a/c'])
     from_memcache = self.app.memcache.get('container/a/c')
     self.assertTrue(from_memcache)
Beispiel #20
0
    def _mock_infocache(self, env):
        if not self.skip_metadata:
            return

        req = Request(env)
        # don't fake obj metadata
        account, container, _ = self._extract_path(req.path_info)
        req.environ.setdefault('swift.infocache', {})
        req.environ['swift.infocache'][get_cache_key(account)] = \
            headers_to_account_info({}, 0)
        if container:
            key = get_cache_key(account, container)
            req.environ['swift.infocache'][key] = \
                headers_to_container_info({}, 0)
Beispiel #21
0
    def _mock_infocache(self, env):
        if not self.skip_metadata:
            return

        req = Request(env)
        # don't fake obj metadata
        account, container, _ = self._extract_path(req.path_info)
        req.environ.setdefault('swift.infocache', {})
        req.environ['swift.infocache'][get_cache_key(account)] = \
            headers_to_account_info({}, 0)
        if container:
            key = get_cache_key(account, container)
            req.environ['swift.infocache'][key] = \
                headers_to_container_info({}, 0)
Beispiel #22
0
 def test_container_info_got_cached(self):
     controller = proxy_server.ContainerController(self.app, 'a', 'c')
     with mock.patch('swift.proxy.controllers.base.http_connect',
                     fake_http_connect(200, 200, body='')):
         req = Request.blank('/v1/a/c', {'PATH_INFO': '/v1/a/c'})
         resp = controller.HEAD(req)
     self.assertEqual(2, resp.status_int // 100)
     # Make sure it's in both swift.infocache and memcache
     self.assertIn("container/a/c", resp.environ['swift.infocache'])
     self.assertEqual(
         headers_to_container_info(resp.headers),
         resp.environ['swift.infocache']['container/a/c'])
     from_memcache = self.app.memcache.get('container/a/c')
     self.assertTrue(from_memcache)
Beispiel #23
0
    def __init__(self, headers, env, account, container, obj):
        self.headers = headers
        self.status_int = FakeResponse_status_int
        self.environ = env
        if obj:
            env_key = get_object_env_key(account, container, obj)
        else:
            cache_key, env_key = _get_cache_key(account, container)

        if account and container and obj:
            info = headers_to_object_info(headers, FakeResponse_status_int)
        elif account and container:
            info = headers_to_container_info(headers, FakeResponse_status_int)
        else:
            info = headers_to_account_info(headers, FakeResponse_status_int)
        env[env_key] = info
Beispiel #24
0
    def __init__(self, headers, env, account, container, obj):
        self.headers = headers
        self.status_int = FakeResponse_status_int
        self.environ = env
        if obj:
            env_key = get_object_env_key(account, container, obj)
        else:
            cache_key, env_key = _get_cache_key(account, container)

        if account and container and obj:
            info = headers_to_object_info(headers, FakeResponse_status_int)
        elif account and container:
            info = headers_to_container_info(headers, FakeResponse_status_int)
        else:
            info = headers_to_account_info(headers, FakeResponse_status_int)
        env[env_key] = info
Beispiel #25
0
    def get_container_info(self, app):

        if self.is_authenticated:
            # if we have already authenticated, yes we can use the account
            # name like as AUTH_xxx for performance efficiency
            sw_req = self.to_swift_req(app, self.container_name, None)
            info = get_container_info(sw_req.environ, app)
            if is_success(info['status']):
                return info
            elif info['status'] == 404:
                raise NoSuchBucket(self.container_name)
            else:
                raise InternalError('unexpected status code %d' %
                                    info['status'])
        else:
            # otherwise we do naive HEAD request with the authentication
            resp = self.get_response(app, 'HEAD', self.container_name, '')
            return headers_to_container_info(
                resp.sw_headers, resp.status_int)  # pylint: disable-msg=E1101
Beispiel #26
0
 def test_headers_to_container_info_missing(self):
     resp = headers_to_container_info({}, 404)
     self.assertEqual(resp['status'], 404)
     self.assertIsNone(resp['read_acl'])
     self.assertIsNone(resp['write_acl'])
Beispiel #27
0
 def test_headers_to_container_info_meta(self):
     headers = {"X-Container-Meta-Whatevs": 14, "x-container-meta-somethingelse": 0}
     resp = headers_to_container_info(headers.items(), 200)
     self.assertEquals(len(resp["meta"]), 2)
     self.assertEquals(resp["meta"]["whatevs"], 14)
     self.assertEquals(resp["meta"]["somethingelse"], 0)
Beispiel #28
0
 def test_headers_to_container_info_missing(self):
     resp = headers_to_container_info({}, 404)
     self.assertEqual(resp['status'], 404)
     self.assertEqual(resp['read_acl'], None)
     self.assertEqual(resp['write_acl'], None)
Beispiel #29
0
 def test_memcached_container_info_dict(self):
     mdict = headers_to_container_info({'x-container-object-count': '45'})
     self.assertEquals(mdict['object_count'], '45')
Beispiel #30
0
 def test_headers_to_container_info_missing(self):
     resp = headers_to_container_info({}, 404)
     self.assertEquals(resp["status"], 404)
     self.assertEquals(resp["read_acl"], None)
     self.assertEquals(resp["write_acl"], None)
Beispiel #31
0
 def test_memcached_container_info_dict(self):
     mdict = headers_to_container_info({'x-container-object-count': '45'})
     self.assertEquals(mdict['object_count'], '45')
Beispiel #32
0
 def test_memcached_container_info_dict(self):
     mdict = headers_to_container_info({"x-container-object-count": "45"})
     self.assertEqual(mdict["object_count"], "45")