From cc80db5970c5b09dea89038cc0ecbbed9a1ffac1 Mon Sep 17 00:00:00 2001 From: Chmouel Boudjnah Date: Thu, 11 Apr 2013 10:00:04 +0200 Subject: [PATCH] Refactor test_containers. - Try to remove copy and paste code as much as possible with a common base test class. - More to come probably. --- tests/units/test_containers.py | 334 ++++++++++++++------------------- 1 file changed, 142 insertions(+), 192 deletions(-) diff --git a/tests/units/test_containers.py b/tests/units/test_containers.py index b68100e..0445102 100644 --- a/tests/units/test_containers.py +++ b/tests/units/test_containers.py @@ -25,9 +25,9 @@ import tests.units.base as test_base import tests.units.fakes as fakes -class TestContainers(test_base.TestCase): +class TestContainersBase(test_base.TestCase): def setUp(self): - super(TestContainers, self).setUp() + super(TestContainersBase, self).setUp() self.container_cls = swsync.containers.Containers() self.tenant_name = 'foo1' @@ -41,6 +41,146 @@ class TestContainers(test_base.TestCase): self.dest_storage_cnx = (urlparse.urlparse(self.dest_storage_url), None) + +class TestContainersSyncMetadata(TestContainersBase): + + def _base_sync_metadata(self, orig_dict={}, + dest_dict={}, + get_called=[], + post_called=[], + info_called=[], + raise_post_container=False): + + def fake_info(msg): + info_called.append(msg) + + def get_container(*args, **kwargs): + if len(get_called) == 0: + get_called.append("TESTED") + return orig_dict + else: + get_called.append("TESTED2") + return dest_dict + self.stubs.Set(swiftclient, 'get_container', get_container) + + def post_container(url, token, container, headers, **kwargs): + post_called.append(headers) + + if raise_post_container: + raise swiftclient.client.ClientException("Error in testing") + self.stubs.Set(swiftclient, 'post_container', post_container) + + def head_container(*args, **kwargs): + pass + + self.stubs.Set(swiftclient, 'head_container', head_container) + self.stubs.Set(logging, 'info', fake_info) + + self.container_cls.sync(self.orig_storage_cnx, + self.orig_storage_url, + 'token', + self.dest_storage_cnx, + self.dest_storage_url, + 'token', 'cont1') + + def test_sync_containers_metada_added_on_dest(self): + get_called = [] + post_called = [] + info_called = [] + + orig_dict = ({'x-container-meta-om': 'enkl', + 'x-trans-id': 'ffs', + 'x-container-bytes-used': '100', + 'x-container-object-count': '2'}, + [{'last_modified': '2010', 'name': 'foo'}]) + dest_dict = ({'x-container-meta-om': 'enkl', + 'x-container-meta-psg': 'magique', + 'x-trans-id': 'ffs', + 'x-container-bytes-used': '200', + 'x-container-object-count': '2'}, + [{'last_modified': '2010', 'name': 'foo'}]) + + self._base_sync_metadata(orig_dict, dest_dict, get_called, + post_called, info_called) + self.assertEqual(len(get_called), 2) + self.assertEqual(len(post_called), 1) + self.assertEquals(post_called[0]['x-container-meta-psg'], '') + self.assertEquals(post_called[0]['x-container-meta-om'], 'enkl') + self.assertIn('HEADER: sync headers: cont1', info_called) + + def test_sync_containers_metada_added_on_orig(self): + get_called = [] + post_called = [] + info_called = [] + + orig_dict = ({'x-container-meta-om': 'enkl', + 'x-trans-id': 'ffs', + 'x-container-bytes-used': '100', + 'x-container-object-count': '2'}, + [{'last_modified': '2010', 'name': 'foo'}]) + + dest_dict = ({'x-trans-id': 'ffs', + 'x-container-bytes-used': '200', + 'x-container-object-count': '2'}, + [{'last_modified': '2010', 'name': 'foo'}]) + + self._base_sync_metadata(orig_dict, dest_dict, get_called, + post_called, info_called) + + self.assertIn('HEADER: sync headers: cont1', info_called) + self.assertEqual(len(get_called), 2) + self.assertEqual(len(post_called), 1) + self.assertEquals(post_called[0]['x-container-meta-om'], 'enkl') + + def test_sync_containers_metada_changed(self): + get_called = [] + post_called = [] + info_called = [] + + orig_dict = ({'x-container-meta-psg': 'magic', + 'x-trans-id': 'ffs', + 'x-container-bytes-used': '100', + 'x-container-object-count': '2'}, + [{'last_modified': '2010', 'name': 'foo'}]) + + dest_dict = ({'x-container-meta-psg': 'marseille', + 'x-trans-id': 'ffs', + 'x-container-bytes-used': '200', + 'x-container-object-count': '2'}, + [{'last_modified': '2010', 'name': 'foo'}]) + + self._base_sync_metadata(orig_dict, dest_dict, get_called, + post_called, info_called) + self.assertEqual(len(get_called), 2) + self.assertEqual(len(post_called), 1) + self.assertEquals(post_called[0]['x-container-meta-psg'], 'magic') + self.assertIn('HEADER: sync headers: cont1', info_called) + + def test_sync_containers_metadata_raise_client(self): + get_called = [] + post_called = [] + info_called = [] + + orig_dict = ({'x-container-meta-psg': 'magic', + 'x-trans-id': 'ffs', + 'x-container-bytes-used': '100', + 'x-container-object-count': '2'}, + [{'last_modified': '2010', 'name': 'foo'}]) + + dest_dict = ({'x-container-meta-psg': 'marseille', + 'x-trans-id': 'ffs', + 'x-container-bytes-used': '200', + 'x-container-object-count': '2'}, + [{'last_modified': '2010', 'name': 'foo'}]) + + self._base_sync_metadata(orig_dict, dest_dict, + get_called, post_called, + info_called, raise_post_container=True) + self.assertIn('ERROR: updating container metadata: cont1, ', + info_called) + + +class TestContainers(TestContainersBase): def test_sync_when_container_nothere(self): get_cnt_called = [] @@ -270,193 +410,3 @@ class TestContainers(test_base.TestCase): "cnx1", "token1", orig_containers, dest_containers) self.assertEqual(len(called), 1) - - def test_sync_containers_metada_added_on_dest(self): - get_called = [] - post_called = [] - - def get_container(*args, **kwargs): - if len(get_called) == 0: - get_called.append("TESTED") - return ({ - 'x-container-meta-om': 'enkl', - 'x-trans-id': 'ffs', - 'x-container-bytes-used': '100', - 'x-container-object-count': '2'}, - [{'last_modified': '2010', 'name': 'foo'}]) - else: - get_called.append("TESTED2") - return ({ - 'x-container-meta-om': 'enkl', - 'x-container-meta-psg': 'magique', - 'x-trans-id': 'ffs', - 'x-container-bytes-used': '200', - 'x-container-object-count': '2'}, - [{'last_modified': '2010', 'name': 'foo'}]) - self.stubs.Set(swiftclient, 'get_container', get_container) - - self.stubs.Set(swiftclient, 'get_container', get_container) - - def post_container(url, token, container, headers, **kwargs): - post_called.append(headers) - self.stubs.Set(swiftclient, 'post_container', post_container) - - def head_container(*args, **kwargs): - pass - self.stubs.Set(swiftclient, 'head_container', head_container) - - self.container_cls.sync( - self.orig_storage_cnx, - self.orig_storage_url, - 'token', - self.dest_storage_cnx, - self.dest_storage_url, - 'token', - 'cont1') - - self.assertEqual(len(get_called), 2) - self.assertEqual(len(post_called), 1) - self.assertEquals(post_called[0]['x-container-meta-psg'], '') - self.assertEquals(post_called[0]['x-container-meta-om'], 'enkl') - - def test_sync_containers_metada_added_on_orig(self): - get_called = [] - post_called = [] - - def get_container(*args, **kwargs): - if len(get_called) == 0: - get_called.append("TESTED") - return ({ - 'x-container-meta-om': 'enkl', - 'x-trans-id': 'ffs', - 'x-container-bytes-used': '100', - 'x-container-object-count': '2'}, - [{'last_modified': '2010', 'name': 'foo'}]) - else: - get_called.append("TESTED2") - return ({ - 'x-trans-id': 'ffs', - 'x-container-bytes-used': '200', - 'x-container-object-count': '2'}, - [{'last_modified': '2010', 'name': 'foo'}]) - self.stubs.Set(swiftclient, 'get_container', get_container) - - self.stubs.Set(swiftclient, 'get_container', get_container) - - def post_container(url, token, container, headers, **kwargs): - post_called.append(headers) - self.stubs.Set(swiftclient, 'post_container', post_container) - - def head_container(*args, **kwargs): - pass - self.stubs.Set(swiftclient, 'head_container', head_container) - - self.container_cls.sync( - self.orig_storage_cnx, - self.orig_storage_url, - 'token', - self.dest_storage_cnx, - self.dest_storage_url, - 'token', - 'cont1') - - self.assertEqual(len(get_called), 2) - self.assertEqual(len(post_called), 1) - self.assertEquals(post_called[0]['x-container-meta-om'], 'enkl') - - def test_sync_containers_metada_changed(self): - get_called = [] - post_called = [] - - def get_container(*args, **kwargs): - if len(get_called) == 0: - get_called.append("TESTED") - return ({ - 'x-container-meta-psg': 'magic', - 'x-trans-id': 'ffs', - 'x-container-bytes-used': '100', - 'x-container-object-count': '2'}, - [{'last_modified': '2010', 'name': 'foo'}]) - else: - get_called.append("TESTED2") - return ({ - 'x-container-meta-psg': 'marseille', - 'x-trans-id': 'ffs', - 'x-container-bytes-used': '200', - 'x-container-object-count': '2'}, - [{'last_modified': '2010', 'name': 'foo'}]) - self.stubs.Set(swiftclient, 'get_container', get_container) - - self.stubs.Set(swiftclient, 'get_container', get_container) - - def post_container(url, token, container, headers, **kwargs): - post_called.append(headers) - self.stubs.Set(swiftclient, 'post_container', post_container) - - def head_container(*args, **kwargs): - pass - self.stubs.Set(swiftclient, 'head_container', head_container) - - self.container_cls.sync( - self.orig_storage_cnx, - self.orig_storage_url, - 'token', - self.dest_storage_cnx, - self.dest_storage_url, - 'token', - 'cont1') - - self.assertEqual(len(get_called), 2) - self.assertEqual(len(post_called), 1) - self.assertEquals(post_called[0]['x-container-meta-psg'], 'magic') - - def test_sync_containers_raise_client(self): - get_called = [] - post_called = [] - called_info = [] - - def fake_info(msg): - called_info.append(msg) - self.stubs.Set(logging, 'info', fake_info) - - def get_container(*args, **kwargs): - if len(get_called) == 0: - get_called.append("TESTED") - return ({ - 'x-container-meta-psg': 'magic', - 'x-trans-id': 'ffs', - 'x-container-bytes-used': '100', - 'x-container-object-count': '2'}, - [{'last_modified': '2010', 'name': 'foo'}]) - else: - get_called.append("TESTED2") - return ({ - 'x-container-meta-psg': 'marseille', - 'x-trans-id': 'ffs', - 'x-container-bytes-used': '200', - 'x-container-object-count': '2'}, - [{'last_modified': '2010', 'name': 'foo'}]) - self.stubs.Set(swiftclient, 'get_container', get_container) - - self.stubs.Set(swiftclient, 'get_container', get_container) - - def post_container(url, token, container, headers, **kwargs): - post_called.append(headers) - raise swiftclient.client.ClientException("TEST") - self.stubs.Set(swiftclient, 'post_container', post_container) - - def head_container(*args, **kwargs): - pass - self.stubs.Set(swiftclient, 'head_container', head_container) - - self.container_cls.sync( - self.orig_storage_cnx, - self.orig_storage_url, - 'token', - self.dest_storage_cnx, - self.dest_storage_url, - 'token', - 'cont1') - - self.assertIn('ERROR: updating container metadata: cont1, ', - called_info)