mirror of
https://github.com/borgbackup/borg.git
synced 2026-05-28 04:03:21 -04:00
Add tests for cache compatibility code.
This commit is contained in:
parent
fb128fbf84
commit
6ce476a42b
2 changed files with 63 additions and 1 deletions
|
|
@ -25,7 +25,7 @@ from ..archiver import Archiver
|
|||
from ..cache import Cache
|
||||
from ..crypto import bytes_to_long, num_aes_blocks
|
||||
from ..helpers import Manifest, PatternMatcher, parse_pattern, EXIT_SUCCESS, EXIT_WARNING, EXIT_ERROR, bin_to_hex, \
|
||||
get_security_dir, MAX_S, MandatoryFeatureUnsupported
|
||||
get_security_dir, MAX_S, MandatoryFeatureUnsupported, Location
|
||||
from ..key import RepoKey, KeyfileKey, Passphrase, TAMRequiredError
|
||||
from ..keymanager import RepoIdMismatch, NotABorgKeyFile
|
||||
from ..remote import RemoteRepository, PathNotAllowed
|
||||
|
|
@ -979,6 +979,47 @@ class ArchiverTestCase(ArchiverTestCaseBase):
|
|||
# XXX this might hang if it doesn't raise an error
|
||||
self.cmd_raises_unknown_feature(['mount', self.repository_location + '::test', mountpoint])
|
||||
|
||||
@pytest.mark.allow_cache_wipe
|
||||
def test_unknown_mandatory_feature_in_cache(self):
|
||||
if self.prefix:
|
||||
path_prefix = 'ssh://__testsuite__'
|
||||
else:
|
||||
path_prefix = ''
|
||||
|
||||
print(self.cmd('init', self.repository_location))
|
||||
|
||||
with Repository(self.repository_path, exclusive=True) as repository:
|
||||
if path_prefix:
|
||||
repository._location = Location(self.repository_location)
|
||||
manifest, key = Manifest.load(repository, Manifest.NO_OPERATION_CHECK)
|
||||
with Cache(repository, key, manifest) as cache:
|
||||
cache.begin_txn()
|
||||
cache.mandatory_features = set(['unknown-feature'])
|
||||
cache.commit()
|
||||
|
||||
if self.FORK_DEFAULT:
|
||||
self.cmd('create', self.repository_location + '::test', 'input')
|
||||
else:
|
||||
called = False
|
||||
wipe_cache_safe = Cache.wipe_cache
|
||||
|
||||
def wipe_wrapper(*args):
|
||||
nonlocal called
|
||||
called = True
|
||||
wipe_cache_safe(*args)
|
||||
|
||||
with patch.object(Cache, 'wipe_cache', wipe_wrapper):
|
||||
self.cmd('create', self.repository_location + '::test', 'input')
|
||||
|
||||
assert called
|
||||
|
||||
with Repository(self.repository_path, exclusive=True) as repository:
|
||||
if path_prefix:
|
||||
repository._location = Location(self.repository_location)
|
||||
manifest, key = Manifest.load(repository, Manifest.NO_OPERATION_CHECK)
|
||||
with Cache(repository, key, manifest) as cache:
|
||||
assert cache.mandatory_features == set([])
|
||||
|
||||
def test_progress(self):
|
||||
self.create_regular_file('file1', size=1024 * 80)
|
||||
self.cmd('init', self.repository_location)
|
||||
|
|
|
|||
21
conftest.py
21
conftest.py
|
|
@ -4,6 +4,8 @@ import sys
|
|||
|
||||
import pytest
|
||||
|
||||
import borg.cache
|
||||
|
||||
# needed to get pretty assertion failures in unit tests:
|
||||
if hasattr(pytest, 'register_assert_rewrite'):
|
||||
pytest.register_assert_rewrite('borg.testsuite')
|
||||
|
|
@ -35,3 +37,22 @@ def clean_env(tmpdir_factory, monkeypatch):
|
|||
keys = [key for key in os.environ if key.startswith('BORG_')]
|
||||
for key in keys:
|
||||
monkeypatch.delenv(key, raising=False)
|
||||
|
||||
|
||||
class DefaultPatches:
|
||||
def __init__(self, request):
|
||||
self.org_cache_wipe_cache = borg.cache.Cache.wipe_cache
|
||||
|
||||
def wipe_should_not_be_called(*a, **kw):
|
||||
raise AssertionError("Cache wipe was triggered, if this is part of the test add @pytest.mark.allow_cache_wipe")
|
||||
if 'allow_cache_wipe' not in request.keywords:
|
||||
borg.cache.Cache.wipe_cache = wipe_should_not_be_called
|
||||
request.addfinalizer(self.undo)
|
||||
|
||||
def undo(self):
|
||||
borg.cache.Cache.wipe_cache = self.org_cache_wipe_cache
|
||||
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def default_patches(request):
|
||||
return DefaultPatches(request)
|
||||
|
|
|
|||
Loading…
Reference in a new issue