Exemplo n.º 1
0
    def test_DELETE(self):
        controller = proxy_server.AccountController(self.app, 'AUTH_bob')
        req = Request.blank('/v1/AUTH_bob', {})
        resp = controller.DELETE(req)
        self.assertEqual(resp.status_int, 405)

        self.app.allow_account_management = True
        with mock.patch('osd.proxyService.controllers.base.http_connect',
                        fake_http_connect(200, body='')):
            controller = proxy_server.AccountController(
                self.app, 'AUTH_bob' * 40)
            req = Request.blank('/v1/AUTH_bob', {})
            resp = controller.DELETE(req)
            self.assertEqual(resp.status_int, 200)

        controller = proxy_server.AccountController(self.app, 'AUTH_bob' * 40)
        req = Request.blank('/v1/AUTH_bob', {}, query_string='test')
        resp = controller.DELETE(req)
        self.assertEqual(resp.status_int, 400)

        with mock.patch('osd.proxyService.controllers.base.http_connect',
                        fake_http_connect(404, body='')):
            req = Request.blank('/v1/AUTH_bob', {'PATH_INFO': '/v1/AUTH_bob'})
            resp = controller.DELETE(req)
            self.assertEqual(resp.status_int, 404)
Exemplo n.º 2
0
    def test_DELETE(self):
        req = osd.common.swob.Request.blank('/v1/a/c/o')
        with mock.patch('osd.proxyService.controllers.base.http_connect',
                        fake_http_connect(200)):
            resp = self.controller.DELETE(req)
            self.assertEqual(resp.status_int, 200)

        with mock.patch('osd.proxyService.controllers.base.http_connect',
                        fake_http_connect(503)):
            resp = self.controller.DELETE(req)
        req = osd.common.swob.Request.blank(
            '/v1/a/c/o',
            environ={
                'swift.authorize': mock.MagicMock(side_effect=HTTPForbidden)
            })
        resp = self.controller.DELETE(req)
        self.assertEqual(resp.status_int, 403)

        self.controller.container_info = mock.MagicMock(
            return_value={
                'filesystem': None,
                'directory': None,
                'node': None,
                'write_acl': None,
                'sync_key': None,
                'versions': None
            })
        req = osd.common.swob.Request.blank('/v1/a/c/o')
        resp = self.controller.DELETE(req)
        self.assertEqual(resp.status_int, 404)
Exemplo n.º 3
0
    def test_sys_meta_headers_PUT(self):
        # check that headers in sys meta namespace make it through
        # the container controller
        sys_meta_key = '%stest' % get_sys_meta_prefix('container')
        sys_meta_key = sys_meta_key.title()
        user_meta_key = 'X-Container-Meta-Test'
        controller = proxy_server.ContainerController(self.app, 'a', 'c')

        context = {}
        callback = self._make_callback_func(context)
        hdrs_in = {
            sys_meta_key: 'foo',
            user_meta_key: 'bar',
            'x-timestamp': '1.0'
        }
        req = Request.blank('/v1/a/c', headers=hdrs_in)
        with mock.patch('osd.proxyService.controllers.base.http_connect',
                        fake_http_connect(200, 200, give_connect=callback)):
            controller.PUT(req)
        self.assertEqual(context['method'], 'PUT')
        self.assertTrue(sys_meta_key in context['headers'])
        self.assertEqual(context['headers'][sys_meta_key], 'foo')
        self.assertTrue(user_meta_key in context['headers'])
        self.assertEqual(context['headers'][user_meta_key], 'bar')
        self.assertNotEqual(context['headers']['x-timestamp'], '1.0')
Exemplo n.º 4
0
 def test_PUT_success_cases(self):
     controller = proxy_server.AccountController(self.app, 'AUTH_bob')
     self.app.allow_account_management = True
     with mock.patch('osd.proxyService.controllers.base.http_connect',
                     fake_http_connect(200, body='')):
         req = Request.blank('/v1/AUTH_bob', {'PATH_INFO': '/v1/AUTH_bob'})
         resp = controller.PUT(req)
         self.assertEqual(resp.status_int, 200)
Exemplo n.º 5
0
    def test_GETorHEAD(self):
        controller = proxy_server.ContainerController(self.app, 'a', 'c')
        req = Request.blank('/v1/a/c', {})
        with mock.patch('osd.proxyService.controllers.base.http_connect',
                        fake_http_connect(200)):
            with mock.patch(
                    'osd.proxyService.controllers.base.Controller.account_info',
                    return_value=(None, 'test')):
                resp = controller.GETorHEAD(req)
                self.assertEqual(resp.status_int, 200)
        with mock.patch(
                'osd.proxyService.controllers.base.Controller.account_info',
                return_value=(None, None)):
            req = Request.blank('/v1/a/c', {})
            resp = controller.GETorHEAD(req)
            self.assertEqual(resp.status_int, 404)

        with mock.patch(
                'osd.proxyService.controllers.base.Controller.account_info',
                return_value=(None, 'test')):
            controller = proxy_server.ContainerController(self.app, 'a', 'c')
            req = Request.blank('/v1/a/c', {}, query_string='path=2')
            resp = controller.GETorHEAD(req)
            self.assertEqual(resp.status_int, 400)
            """
            self.assertEqual(resp.body, 'Unsupported query parameters path or delimiter or prefix')
        
            req = Request.blank('/v1/AUTH_bob', {}, query_string='prefix=a')
            resp = controller.GETorHEAD(req)
            self.assertEqual(resp.status_int, 400)
            self.assertEqual(resp.body, 'Unsupported query parameters path or delimiter or prefix')
    
            req = Request.blank('/v1/AUTH_bob', {}, query_string='delimiter=a')
            resp = controller.GETorHEAD(req)
            self.assertEqual(resp.status_int, 400)
            self.assertEqual(resp.body, 'Unsupported query parameters path or delimiter or prefix')
            """

        with mock.patch(
                'osd.proxyService.controllers.base.Controller.account_info',
                return_value=(None, 'test')):
            controller = proxy_server.ContainerController(self.app, 'a', 'c')
            req = Request.blank('/v1/a/c', {}, query_string='limit=-1')
            resp = controller.GETorHEAD(req)
            self.assertEqual(resp.status_int, 412)
            self.assertEqual(resp.body,
                             'Value of limit must be a positive integer')

        with mock.patch(
                'osd.proxyService.controllers.base.Controller.account_info',
                return_value=(None, 'test')):
            controller = proxy_server.ContainerController(self.app, 'a', 'c')
            req = Request.blank('/v1/a/c', {}, query_string='limit=abc')
            resp = controller.GETorHEAD(req)
            self.assertEqual(resp.status_int, 412)
            self.assertEqual(resp.body,
                             'Value of limit must be a positive integer')
Exemplo n.º 6
0
    def test_POST(self):
        controller = proxy_server.ContainerController(self.app, 'a', 'c')
        req = Request.blank('/v1/a/c', {})
        with mock.patch(
                'osd.proxyService.controllers.container.check_metadata',
                return_value=HTTPBadRequest(request=req)):
            resp = controller.POST(req)
            self.assertEqual(resp.status_int, 400)

        with mock.patch(
                'osd.proxyService.controllers.base.Controller.account_info',
                return_value=(None, None, None, None)):
            req = Request.blank('/v1/a/c', {})
            resp = controller.POST(req)
            self.assertEqual(resp.status_int, 404)

        with mock.patch('osd.proxyService.controllers.base.http_connect',
                        fake_http_connect(200)):
            with mock.patch(
                    'osd.proxyService.controllers.base.Controller.account_info',
                    return_value=([{
                        'ip': '1',
                        'port': '1'
                    }], 'fs1', 'd1', 1)):
                controller = proxy_server.ContainerController(
                    self.app, 'a', 'c')
                req = Request.blank('/v1/a/c', {})
                resp = controller.POST(req)
                self.assertEqual(resp.status_int, 200)

        with mock.patch('osd.proxyService.controllers.base.http_connect',
                        fake_http_connect(503)):
            with mock.patch(
                    'osd.proxyService.controllers.base.Controller.account_info',
                    return_value=([{
                        'ip': '1',
                        'port': '1'
                    }], 'fs1', 'd1', 1)):
                controller = proxy_server.ContainerController(
                    self.app, 'a', 'c')
                req = Request.blank('/v1/a/c', {})
                resp = controller.POST(req)
                self.assertEqual(resp.status_int, 503)
Exemplo n.º 7
0
    def test_long_acct_names(self):
        long_acct_name = '%sLongAccountName' % ('Very' * (MAX_ANAME_LEN // 4))
        controller = proxy_server.AccountController(self.app, long_acct_name)

        req = Request.blank('/v1/%s' % long_acct_name)
        with mock.patch('osd.proxyService.controllers.base.http_connect',
                        fake_http_connect(200)):
            resp = controller.HEAD(req)
        self.assertEquals(400, resp.status_int)

        with mock.patch('osd.proxyService.controllers.base.http_connect',
                        fake_http_connect(200)):
            resp = controller.GET(req)
        self.assertEquals(400, resp.status_int)

        with mock.patch('osd.proxyService.controllers.base.http_connect',
                        fake_http_connect(200)):
            resp = controller.POST(req)
        self.assertEquals(400, resp.status_int)
Exemplo n.º 8
0
 def test_account_info_in_response_env(self):
     controller = proxy_server.AccountController(self.app, 'AUTH_bob')
     with mock.patch('osd.proxyService.controllers.base.http_connect',
                     fake_http_connect(200, body='')):
         req = Request.blank('/v1/AUTH_bob', {'PATH_INFO': '/v1/AUTH_bob'})
         resp = controller.HEAD(req)
     self.assertEqual(2, resp.status_int // 100)
     self.assertTrue('swift.account/AUTH_bob' in resp.environ)
     self.assertEqual(headers_to_account_info(resp.headers),
                      resp.environ['swift.account/AUTH_bob'])
Exemplo n.º 9
0
 def test_container_info_in_response_env(self):
     controller = proxy_server.ContainerController(self.app, 'a', 'c')
     with mock.patch('osd.proxyService.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'])
Exemplo n.º 10
0
    def test_connect_put_node(self):
        with mock.patch('osd.proxyService.controllers.obj.http_connect',
                        fake_http_connect(200)):
            conn = self.controller._connect_put_node([{'ip': '1', 'port': '1'}], 'fs1', 'd1', \
                '/a/c/o', {'If-None-Match': None}, self.app.logger.thread_locals)
            self.assertEqual(conn.node, {'ip': '1', 'port': '1'})
            self.assertEqual(conn.resp, None)

        with mock.patch('osd.proxyService.controllers.obj.http_connect',
                        fake_http_connect((201, -4))):
            conn = self.controller._connect_put_node([{'ip': '1', 'port': '1'}], 'fs1', 'd1', \
                '/a/c/o', {'If-None-Match': None}, self.app.logger.thread_locals)
            self.assertEqual(conn.node, {'ip': '1', 'port': '1'})
            self.assertEqual(conn.resp.status, 201)

        with mock.patch('osd.proxyService.controllers.obj.http_connect',
                        fake_http_connect((200, 412))):
            self.controller._connect_put_node([{'ip': '1', 'port': '1'}], 'fs1', 'd1', '/a/c/o', {'If-None-Match': 'test'}, \
                self.app.logger.thread_locals)
            self.assertEqual(conn.node, {'ip': '1', 'port': '1'})
            self.assertEqual(conn.resp.status, 201)
Exemplo n.º 11
0
def set_http_connect(*args, **kwargs):
    old_connect = osd.proxyService.controllers.base.http_connect
    new_connect = fake_http_connect(*args, **kwargs)
    osd.proxyService.controllers.base.http_connect = new_connect
    osd.proxyService.controllers.obj.http_connect = new_connect
    osd.proxyService.controllers.account.http_connect = new_connect
    osd.proxyService.controllers.container.http_connect = new_connect
    yield new_connect
    osd.proxyService.controllers.base.http_connect = old_connect
    osd.proxyService.controllers.obj.http_connect = old_connect
    osd.proxyService.controllers.account.http_connect = old_connect
    osd.proxyService.controllers.container.http_connect = old_connect
Exemplo n.º 12
0
    def test_DELETE(self):
        with mock.patch('osd.proxyService.controllers.base.http_connect',
                        fake_http_connect(200, body='')):
            with mock.patch(
                    'osd.proxyService.controllers.base.Controller.account_info',
                    return_value=([{
                        'ip': '1',
                        'port': '1'
                    }], 'fs1', 'd1', 1)):
                controller = proxy_server.ContainerController(
                    self.app, 'a', 'c')
                req = Request.blank('/v1/a/c', {})
                resp = controller.DELETE(req)
                self.assertEqual(resp.status_int, 200)

        with mock.patch('osd.proxyService.controllers.base.http_connect',
                        fake_http_connect(200, body='')):
            with mock.patch(
                    'osd.proxyService.controllers.base.Controller.account_info',
                    return_value=(None, None, None, None)):
                controller = proxy_server.ContainerController(
                    self.app, 'a', 'c')
                req = Request.blank('/v1/a/c', {})
                resp = controller.DELETE(req)
                self.assertEqual(resp.status_int, 404)

        with mock.patch('osd.proxyService.controllers.base.http_connect',
                        fake_http_connect(202)):
            with mock.patch(
                    'osd.proxyService.controllers.base.Controller.account_info',
                    return_value=([{
                        'ip': '1',
                        'port': '1'
                    }], 'fs1', 'd1', 1)):
                controller = proxy_server.ContainerController(
                    self.app, 'a', 'c')
                req = Request.blank('/v1/a/c', {})
                resp = controller.DELETE(req)
                self.assertEqual(resp.status_int, 404)
Exemplo n.º 13
0
    def test_swift_owner(self):
        owner_headers = {
            'x-account-meta-temp-url-key': 'value',
            'x-account-meta-temp-url-key-2': 'value'
        }
        controller = proxy_server.AccountController(self.app, 'a')

        req = Request.blank('/v1/a')
        with mock.patch('osd.proxyService.controllers.base.http_connect',
                        fake_http_connect(200, headers=owner_headers)):
            resp = controller.HEAD(req)
        self.assertEquals(2, resp.status_int // 100)
        for key in owner_headers:
            self.assertTrue(key not in resp.headers)

        req = Request.blank('/v1/a', environ={'swift_owner': True})
        with mock.patch('osd.proxyService.controllers.base.http_connect',
                        fake_http_connect(200, headers=owner_headers)):
            resp = controller.HEAD(req)
        self.assertEquals(2, resp.status_int // 100)
        for key in owner_headers:
            self.assertTrue(key in resp.headers)
Exemplo n.º 14
0
    def test_GETorHEAD(self):
        req = osd.common.swob.Request.blank(
            '/v1/a/c/o',
            environ={
                'swift.authorize': mock.MagicMock(side_effect=HTTPForbidden)
            })
        resp = self.controller.GETorHEAD(req)
        self.assertEqual(resp.status_int, 403)

        req = osd.common.swob.Request.blank('/v1/a/c/o')
        with mock.patch('osd.proxyService.controllers.base.http_connect',
                        fake_http_connect(404)):
            resp = self.controller.GETorHEAD(req)
            self.assertEqual(resp.status_int, 404)

        with mock.patch(
                'osd.proxyService.controllers.base.Controller.container_info'):
            resp = self.controller.GETorHEAD(req)
            self.assertEqual(resp.status_int, 503)

        with mock.patch('osd.proxyService.controllers.base.http_connect',
                        fake_http_connect(200)):
            resp = self.controller.GETorHEAD(req)
            self.assertEqual(resp.status_int, 200)

        with mock.patch(
                'osd.proxyService.controllers.base.http_connect',
                fake_http_connect(
                    200, headers={'content-type': 'text;swift_bytes=1'})):
            resp = self.controller.GETorHEAD(req)
            self.assertEqual(resp.status_int, 200)
            self.assertEqual(resp.headers['content-type'], 'text')

        with mock.patch(
                'osd.proxyService.controllers.base.http_connect',
                fake_http_connect(200, headers={'content-type': 'json'})):
            resp = self.controller.GETorHEAD(req)
            self.assertEqual(resp.status_int, 200)
            self.assertEqual(resp.headers['content-type'], 'json')
Exemplo n.º 15
0
    def test_swift_owner(self):
        owner_headers = {
            'x-container-read': 'value',
            'x-container-write': 'value',
            'x-container-sync-key': 'value',
            'x-container-sync-to': 'value'
        }
        controller = proxy_server.ContainerController(self.app, 'a', 'c')

        req = Request.blank('/v1/a/c')
        with mock.patch('osd.proxyService.controllers.base.http_connect',
                        fake_http_connect(200, 200, headers=owner_headers)):
            resp = controller.HEAD(req)
        self.assertEquals(2, resp.status_int // 100)
        for key in owner_headers:
            self.assertTrue(key not in resp.headers)

        req = Request.blank('/v1/a/c', environ={'swift_owner': True})
        with mock.patch('osd.proxyService.controllers.base.http_connect',
                        fake_http_connect(200, 200, headers=owner_headers)):
            resp = controller.HEAD(req)
        self.assertEquals(2, resp.status_int // 100)
        for key in owner_headers:
            self.assertTrue(key in resp.headers)
Exemplo n.º 16
0
 def test_PUT_success_cases(self):
     controller = proxy_server.ContainerController(self.app, 'a', 'c')
     self.app.allow_account_management = True
     with mock.patch('osd.proxyService.controllers.base.http_connect',
                     fake_http_connect(200, body='')):
         with mock.patch(
                 'osd.proxyService.controllers.base.Controller.account_info',
                 return_value=([{
                     'ip': '1',
                     'port': '1'
                 }], 'fs1', 'd1', 1)):
             self.app.account_autocreate = True
             Controller.autocreate_account = mock.MagicMock()
             req = Request.blank('/v1/a/c', {})
             resp = controller.PUT(req)
             self.assertEqual(resp.status_int, 200)
             self.assertFalse(Controller.autocreate_account.called)
Exemplo n.º 17
0
    def test_PUT(self):
        with mock.patch('osd.proxyService.controllers.obj.http_connect',
                        fake_http_connect(200)):
            req = osd.common.swob.Request.blank(
                '/v1/a/c/o', headers={'content-length': '0'})
            resp = self.controller.PUT(req)
            self.assertEqual(resp.status_int, 200)

        req = osd.common.swob.Request.blank('/v1/a/c/o')
        req.if_none_match = 'test'
        resp = self.controller.PUT(req)
        self.assertEqual(resp.status_int, 400)

        req = osd.common.swob.Request.blank(
            '/v1/a/c/o', query_string="multipart-manifest=test")
        resp = self.controller.PUT(req)
        self.assertEqual(resp.status_int, 400)
        self.assertEqual(resp.body,
                         'Unsupported query parameter multipart manifest')

        req = osd.common.swob.Request.blank('/v1/a/c/o')
        with mock.patch('osd.proxyService.controllers.base.http_connect',
                        fake_http_connect(200)):
            resp = self.controller.PUT(req)
            self.assertEqual(resp.status_int, 411)

        req = osd.common.swob.Request.blank(
            '/v1/a/c/o',
            environ={
                'swift.authorize': mock.MagicMock(side_effect=HTTPForbidden)
            })
        resp = self.controller.DELETE(req)
        self.assertEqual(resp.status_int, 403)

        req = osd.common.swob.Request.blank(
            '/v1/a/c/o', headers={'transfer-encoding': 'test1, test2'})
        resp = self.controller.PUT(req)
        self.assertEqual(resp.status_int, 501)

        req = osd.common.swob.Request.blank(
            '/v1/a/c/o', headers={'transfer-encoding': 'test'})
        resp = self.controller.PUT(req)
        self.assertEqual(resp.status_int, 400)

        osd.proxyService.controllers.obj.MAX_FILE_SIZE = 5
        req = osd.common.swob.Request.blank('/v1/a/c/o',
                                            headers={'content-length': 'test'})
        resp = self.controller.PUT(req)
        self.assertEqual(resp.status_int, 400)

        req = osd.common.swob.Request.blank('/v1/a/c/o',
                                            headers={'content-length': '6'})
        resp = self.controller.PUT(req)
        self.assertEqual(resp.status_int, 413)

        req = osd.common.swob.Request.blank('/v1/a/c/o')
        with mock.patch(
                'osd.proxyService.controllers.obj.check_object_creation',
                return_value=HTTPBadRequest(request=req)):
            resp = self.controller.PUT(req)
            self.assertEqual(resp.status_int, 400)

        #with mock.patch('osd.proxyService.controllers.obj.http_connect',
        #                fake_http_connect(200)):
        #    req = osd.common.swob.Request.blank('/v1/a/c/o', headers={'content-length': '0'})
        #    obj.ObjectController._send_file = mock.MagicMock(side_effect=Exception)
        #    resp = self.controller.PUT(req)
        #    self.assertEqual(resp.status_int, 499)

        # with mock.patch('osd.proxyService.controllers.obj.http_connect',
        #                fake_http_connect(200)):
        #    with mock.patch('osd.proxyService.controllers.obj.ObjectController._send_file', side_effect=ChunkReadTimeout):
        #        req = osd.common.swob.Request.blank('/v1/a/c/o', headers={'content-length': '0'})
        #        #    obj.ObjectController._send_file = mock.MagicMock(side_effect=ChunkReadTimeout)
        #        resp = self.controller.PUT(req)
        #        self.assertEqual(resp.status_int, 499)

        with mock.patch('osd.proxyService.controllers.obj.http_connect',
                        fake_http_connect(200)):
            req = osd.common.swob.Request.blank(
                '/v1/a/c/o', headers={'content-length': '0'})
            obj.ObjectController._get_put_responses = mock.MagicMock(
                return_value=([], [], [], ['etag1', 'etag2']))
            resp = self.controller.PUT(req)
            self.assertEqual(resp.status_int, 500)

        self.controller.container_info = mock.MagicMock(
            return_value={
                'filesystem': None,
                'directory': None,
                'node': None,
                'write_acl': None,
                'sync_key': None,
                'versions': None
            })
        req = osd.common.swob.Request.blank('/v1/a/c/o',
                                            headers={'content-length': '6'})
        resp = self.controller.PUT(req)
        self.assertEqual(resp.status_int, 404)