Add unit tests for checking responses in ContainerController
This patch provides unit tests to check responses for various situation in three/four replicas env. Change-Id: Ifcc4392ffa4df485ce3c62a35d0fcc8c93de74aa
This commit is contained in:
parent
99bc2a4a7d
commit
5b18455cef
@ -68,6 +68,29 @@ class TestContainerController(TestRingBase):
|
|||||||
return _orig_get_controller(*args, **kwargs)
|
return _orig_get_controller(*args, **kwargs)
|
||||||
self.app.get_controller = wrapped_get_controller
|
self.app.get_controller = wrapped_get_controller
|
||||||
|
|
||||||
|
def _make_callback_func(self, context):
|
||||||
|
def callback(ipaddr, port, device, partition, method, path,
|
||||||
|
headers=None, query_string=None, ssl=False):
|
||||||
|
context['method'] = method
|
||||||
|
context['path'] = path
|
||||||
|
context['headers'] = headers or {}
|
||||||
|
return callback
|
||||||
|
|
||||||
|
def _assert_responses(self, method, test_cases):
|
||||||
|
controller = proxy_server.ContainerController(self.app, 'a', 'c')
|
||||||
|
|
||||||
|
for responses, expected in test_cases:
|
||||||
|
with mock.patch(
|
||||||
|
'swift.proxy.controllers.base.http_connect',
|
||||||
|
fake_http_connect(*responses)):
|
||||||
|
req = Request.blank('/v1/a/c')
|
||||||
|
resp = getattr(controller, method)(req)
|
||||||
|
|
||||||
|
self.assertEqual(expected,
|
||||||
|
resp.status_int,
|
||||||
|
'Expected %s but got %s. Failed case: %s' %
|
||||||
|
(expected, resp.status_int, str(responses)))
|
||||||
|
|
||||||
def test_container_info_in_response_env(self):
|
def test_container_info_in_response_env(self):
|
||||||
controller = proxy_server.ContainerController(self.app, 'a', 'c')
|
controller = proxy_server.ContainerController(self.app, 'a', 'c')
|
||||||
with mock.patch('swift.proxy.controllers.base.http_connect',
|
with mock.patch('swift.proxy.controllers.base.http_connect',
|
||||||
@ -101,14 +124,6 @@ class TestContainerController(TestRingBase):
|
|||||||
for key in owner_headers:
|
for key in owner_headers:
|
||||||
self.assertTrue(key in resp.headers)
|
self.assertTrue(key in resp.headers)
|
||||||
|
|
||||||
def _make_callback_func(self, context):
|
|
||||||
def callback(ipaddr, port, device, partition, method, path,
|
|
||||||
headers=None, query_string=None, ssl=False):
|
|
||||||
context['method'] = method
|
|
||||||
context['path'] = path
|
|
||||||
context['headers'] = headers or {}
|
|
||||||
return callback
|
|
||||||
|
|
||||||
def test_sys_meta_headers_PUT(self):
|
def test_sys_meta_headers_PUT(self):
|
||||||
# check that headers in sys meta namespace make it through
|
# check that headers in sys meta namespace make it through
|
||||||
# the container controller
|
# the container controller
|
||||||
@ -202,6 +217,151 @@ class TestContainerController(TestRingBase):
|
|||||||
self.app, self.container_ring.devs[2]),
|
self.app, self.container_ring.devs[2]),
|
||||||
self.app.error_suppression_limit + 1)
|
self.app.error_suppression_limit + 1)
|
||||||
|
|
||||||
|
def test_response_code_for_PUT(self):
|
||||||
|
PUT_TEST_CASES = [
|
||||||
|
((200, 200, 200), 200),
|
||||||
|
((200, 200, 404), 200),
|
||||||
|
((200, 200, 503), 200),
|
||||||
|
((200, 404, 404), 404),
|
||||||
|
((200, 404, 503), 503),
|
||||||
|
((200, 503, 503), 503),
|
||||||
|
((404, 404, 404), 404),
|
||||||
|
((404, 404, 503), 404),
|
||||||
|
((404, 503, 503), 503),
|
||||||
|
((503, 503, 503), 503)
|
||||||
|
]
|
||||||
|
self._assert_responses('PUT', PUT_TEST_CASES)
|
||||||
|
|
||||||
|
def test_response_code_for_DELETE(self):
|
||||||
|
DELETE_TEST_CASES = [
|
||||||
|
((204, 204, 204), 204),
|
||||||
|
((204, 204, 404), 204),
|
||||||
|
((204, 204, 503), 204),
|
||||||
|
((204, 404, 404), 404),
|
||||||
|
((204, 404, 503), 503),
|
||||||
|
((204, 503, 503), 503),
|
||||||
|
((404, 404, 404), 404),
|
||||||
|
((404, 404, 503), 404),
|
||||||
|
((404, 503, 503), 503),
|
||||||
|
((503, 503, 503), 503)
|
||||||
|
]
|
||||||
|
self._assert_responses('DELETE', DELETE_TEST_CASES)
|
||||||
|
|
||||||
|
def test_response_code_for_POST(self):
|
||||||
|
POST_TEST_CASES = [
|
||||||
|
((204, 204, 204), 204),
|
||||||
|
((204, 204, 404), 204),
|
||||||
|
((204, 204, 503), 204),
|
||||||
|
((204, 404, 404), 404),
|
||||||
|
((204, 404, 503), 503),
|
||||||
|
((204, 503, 503), 503),
|
||||||
|
((404, 404, 404), 404),
|
||||||
|
((404, 404, 503), 404),
|
||||||
|
((404, 503, 503), 503),
|
||||||
|
((503, 503, 503), 503)
|
||||||
|
]
|
||||||
|
self._assert_responses('POST', POST_TEST_CASES)
|
||||||
|
|
||||||
|
|
||||||
|
@patch_policies(
|
||||||
|
[StoragePolicy(0, 'zero', True, object_ring=FakeRing(replicas=4))])
|
||||||
|
class TestContainerController4Replicas(TestContainerController):
|
||||||
|
def setUp(self):
|
||||||
|
TestRingBase.setUp(self)
|
||||||
|
self.logger = debug_logger()
|
||||||
|
self.container_ring = FakeRing(replicas=4, max_more_nodes=9)
|
||||||
|
self.app = proxy_server.Application(None, FakeMemcache(),
|
||||||
|
logger=self.logger,
|
||||||
|
account_ring=FakeRing(replicas=4),
|
||||||
|
container_ring=self.container_ring)
|
||||||
|
|
||||||
|
self.account_info = {
|
||||||
|
'status': 200,
|
||||||
|
'container_count': '10',
|
||||||
|
'total_object_count': '100',
|
||||||
|
'bytes': '1000',
|
||||||
|
'meta': {},
|
||||||
|
'sysmeta': {},
|
||||||
|
}
|
||||||
|
|
||||||
|
class FakeAccountInfoContainerController(
|
||||||
|
proxy_server.ContainerController):
|
||||||
|
|
||||||
|
def account_info(controller, *args, **kwargs):
|
||||||
|
patch_path = 'swift.proxy.controllers.base.get_info'
|
||||||
|
with mock.patch(patch_path) as mock_get_info:
|
||||||
|
mock_get_info.return_value = dict(self.account_info)
|
||||||
|
return super(FakeAccountInfoContainerController,
|
||||||
|
controller).account_info(
|
||||||
|
*args, **kwargs)
|
||||||
|
_orig_get_controller = self.app.get_controller
|
||||||
|
|
||||||
|
def wrapped_get_controller(*args, **kwargs):
|
||||||
|
with mock.patch('swift.proxy.server.ContainerController',
|
||||||
|
new=FakeAccountInfoContainerController):
|
||||||
|
return _orig_get_controller(*args, **kwargs)
|
||||||
|
self.app.get_controller = wrapped_get_controller
|
||||||
|
|
||||||
|
def test_response_code_for_PUT(self):
|
||||||
|
PUT_TEST_CASES = [
|
||||||
|
((200, 200, 200, 200), 200),
|
||||||
|
((200, 200, 200, 404), 200),
|
||||||
|
((200, 200, 200, 503), 200),
|
||||||
|
((200, 200, 404, 404), 503),
|
||||||
|
((200, 200, 404, 503), 503),
|
||||||
|
((200, 200, 503, 503), 503),
|
||||||
|
((200, 404, 404, 404), 404),
|
||||||
|
((200, 404, 404, 503), 503),
|
||||||
|
((200, 404, 503, 503), 503),
|
||||||
|
((200, 503, 503, 503), 503),
|
||||||
|
((404, 404, 404, 404), 404),
|
||||||
|
((404, 404, 404, 503), 404),
|
||||||
|
((404, 404, 503, 503), 503),
|
||||||
|
((404, 503, 503, 503), 503),
|
||||||
|
((503, 503, 503, 503), 503)
|
||||||
|
]
|
||||||
|
self._assert_responses('PUT', PUT_TEST_CASES)
|
||||||
|
|
||||||
|
def test_response_code_for_DELETE(self):
|
||||||
|
DELETE_TEST_CASES = [
|
||||||
|
((204, 204, 204, 204), 204),
|
||||||
|
((204, 204, 204, 404), 204),
|
||||||
|
((204, 204, 204, 503), 204),
|
||||||
|
((204, 204, 404, 404), 503),
|
||||||
|
((204, 204, 404, 503), 503),
|
||||||
|
((204, 204, 503, 503), 503),
|
||||||
|
((204, 404, 404, 404), 404),
|
||||||
|
((204, 404, 404, 503), 503),
|
||||||
|
((204, 404, 503, 503), 503),
|
||||||
|
((204, 503, 503, 503), 503),
|
||||||
|
((404, 404, 404, 404), 404),
|
||||||
|
((404, 404, 404, 503), 404),
|
||||||
|
((404, 404, 503, 503), 503),
|
||||||
|
((404, 503, 503, 503), 503),
|
||||||
|
((503, 503, 503, 503), 503)
|
||||||
|
]
|
||||||
|
self._assert_responses('DELETE', DELETE_TEST_CASES)
|
||||||
|
|
||||||
|
def test_response_code_for_POST(self):
|
||||||
|
POST_TEST_CASES = [
|
||||||
|
((204, 204, 204, 204), 204),
|
||||||
|
((204, 204, 204, 404), 204),
|
||||||
|
((204, 204, 204, 503), 204),
|
||||||
|
((204, 204, 404, 404), 503),
|
||||||
|
((204, 204, 404, 503), 503),
|
||||||
|
((204, 204, 503, 503), 503),
|
||||||
|
((204, 404, 404, 404), 404),
|
||||||
|
((204, 404, 404, 503), 503),
|
||||||
|
((204, 404, 503, 503), 503),
|
||||||
|
((204, 503, 503, 503), 503),
|
||||||
|
((404, 404, 404, 404), 404),
|
||||||
|
((404, 404, 404, 503), 404),
|
||||||
|
((404, 404, 503, 503), 503),
|
||||||
|
((404, 503, 503, 503), 503),
|
||||||
|
((503, 503, 503, 503), 503)
|
||||||
|
]
|
||||||
|
self._assert_responses('POST', POST_TEST_CASES)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user