Merge "Fix problem with changing class attribute"

This commit is contained in:
Jenkins 2013-05-23 09:18:28 +00:00 committed by Gerrit Code Review
commit b4b35c2561

View File

@ -193,6 +193,17 @@ class TestDBReplicator(unittest.TestCase):
def setUp(self): def setUp(self):
db_replicator.ring = FakeRing() db_replicator.ring = FakeRing()
self.delete_db_calls = [] self.delete_db_calls = []
self._patchers = []
def tearDown(self):
for patcher in self._patchers:
patcher.stop()
def _patch(self, patching_fn, *args, **kwargs):
patcher = patching_fn(*args, **kwargs)
patched_thing = patcher.start()
self._patchers.append(patcher)
return patched_thing
def stub_delete_db(self, object_file): def stub_delete_db(self, object_file):
self.delete_db_calls.append(object_file) self.delete_db_calls.append(object_file)
@ -403,9 +414,10 @@ class TestDBReplicator(unittest.TestCase):
def test_replicate_object_quarantine(self): def test_replicate_object_quarantine(self):
replicator = TestReplicator({}) replicator = TestReplicator({})
was_db_file = replicator.brokerclass.db_file self._patch(patch.object, replicator.brokerclass, 'db_file',
try: '/a/b/c/d/e/hey')
self._patch(patch.object, replicator.brokerclass,
'get_repl_missing_table', True)
def mock_renamer(was, new, cause_colision=False): def mock_renamer(was, new, cause_colision=False):
if cause_colision and '-' not in new: if cause_colision and '-' not in new:
raise OSError(errno.EEXIST, "File already exists") raise OSError(errno.EEXIST, "File already exists")
@ -418,17 +430,11 @@ class TestDBReplicator(unittest.TestCase):
def mock_renamer_error(was, new): def mock_renamer_error(was, new):
return mock_renamer(was, new, cause_colision=True) return mock_renamer(was, new, cause_colision=True)
was_renamer = db_replicator.renamer with patch.object(db_replicator, 'renamer', mock_renamer):
db_replicator.renamer = mock_renamer
replicator.brokerclass.get_repl_missing_table = True
replicator.brokerclass.db_file = '/a/b/c/d/e/hey'
replicator._replicate_object('0', 'file', 'node_id') replicator._replicate_object('0', 'file', 'node_id')
# try the double quarantine # try the double quarantine
db_replicator.renamer = mock_renamer_error with patch.object(db_replicator, 'renamer', mock_renamer_error):
replicator._replicate_object('0', 'file', 'node_id') replicator._replicate_object('0', 'file', 'node_id')
finally:
replicator.brokerclass.db_file = was_db_file
db_replicator.renamer = was_renamer
def test_replicate_object_delete_because_deleted(self): def test_replicate_object_delete_because_deleted(self):
replicator = TestReplicator({}) replicator = TestReplicator({})