From 414dba3de72e1031c6b392cabdc8c018e32a3e62 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sun, 12 Jul 2015 23:08:44 +0200 Subject: [PATCH] remove usage of evil / broken unittest.mock, use mock from pypi see testsuite.mock docstring for more details. one test shows brokenness right now that was hidden / silent until now. --- borg/testsuite/mock.py | 19 ++++++++++++++----- borg/testsuite/repository.py | 4 ++-- tox.ini | 6 +----- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/borg/testsuite/mock.py b/borg/testsuite/mock.py index b7501ed6c..bdd030b10 100644 --- a/borg/testsuite/mock.py +++ b/borg/testsuite/mock.py @@ -1,5 +1,14 @@ -try: - # Only available in python 3.3+ - from unittest.mock import * -except ImportError: - from mock import * +""" +Mocking + +Note: unittest.mock is broken on at least python 3.3.6 and 3.4.0. + it silently ignores mistyped method names starting with assert_..., + does nothing and just succeeds. + The issue was fixed in the separately distributed "mock" lib, you + get an AttributeError there. So, always use that one! + +Details: + +http://engineeringblog.yelp.com/2015/02/assert_called_once-threat-or-menace.html +""" +from mock import * diff --git a/borg/testsuite/repository.py b/borg/testsuite/repository.py index 9cc8d2427..f63a86711 100644 --- a/borg/testsuite/repository.py +++ b/borg/testsuite/repository.py @@ -159,7 +159,7 @@ class RepositoryCommitTestCase(RepositoryTestCaseBase): with patch.object(UpgradableLock, 'upgrade', side_effect=UpgradableLock.WriteLockFailed) as upgrade: self.reopen() self.assert_raises(UpgradableLock.WriteLockFailed, lambda: len(self.repository)) - upgrade.assert_called_once() + upgrade.assert_called_once_with() def test_crash_before_write_index(self): self.add_keys() @@ -309,7 +309,7 @@ class RepositoryCheckTestCase(RepositoryTestCaseBase): # Simulate a crash before compact with patch.object(Repository, 'compact_segments') as compact: self.repository.commit() - compact.assert_called_once() + compact.assert_called_once_with() self.reopen() self.check(repair=True) self.assert_equal(self.repository.get(bytes(32)), b'data2') diff --git a/tox.ini b/tox.ini index 619fc01ff..68d2e6a61 100644 --- a/tox.ini +++ b/tox.ini @@ -6,10 +6,6 @@ envlist = py32, py33, py34 changedir = {envdir} deps = pytest + mock commands = py.test passenv = * # fakeroot -u needs some env vars - -[testenv:py32] -deps = - pytest - mock