mirror of
https://github.com/borgmatic-collective/borgmatic.git
synced 2026-08-07 00:23:20 +02:00
Merge branch 'main' into logging-verbosity-config
This commit is contained in:
@@ -575,11 +575,11 @@ def test_get_dumps_to_restore_gets_requested_dumps_found_in_archive():
|
||||
}
|
||||
flexmock(module).should_receive('dumps_match').and_return(False)
|
||||
flexmock(module).should_receive('dumps_match').with_args(
|
||||
module.Dump(module.UNSPECIFIED, 'foo'),
|
||||
module.Dump(module.UNSPECIFIED, 'foo', hostname=module.UNSPECIFIED),
|
||||
module.Dump('postgresql_databases', 'foo'),
|
||||
).and_return(True)
|
||||
flexmock(module).should_receive('dumps_match').with_args(
|
||||
module.Dump(module.UNSPECIFIED, 'bar'),
|
||||
module.Dump(module.UNSPECIFIED, 'bar', hostname=module.UNSPECIFIED),
|
||||
module.Dump('postgresql_databases', 'bar'),
|
||||
).and_return(True)
|
||||
|
||||
@@ -644,11 +644,11 @@ def test_get_dumps_to_restore_with_all_in_requested_dumps_finds_all_archive_dump
|
||||
}
|
||||
flexmock(module).should_receive('dumps_match').and_return(False)
|
||||
flexmock(module).should_receive('dumps_match').with_args(
|
||||
module.Dump(module.UNSPECIFIED, 'foo'),
|
||||
module.Dump(module.UNSPECIFIED, 'foo', hostname=module.UNSPECIFIED),
|
||||
module.Dump('postgresql_databases', 'foo'),
|
||||
).and_return(True)
|
||||
flexmock(module).should_receive('dumps_match').with_args(
|
||||
module.Dump(module.UNSPECIFIED, 'bar'),
|
||||
module.Dump(module.UNSPECIFIED, 'bar', hostname=module.UNSPECIFIED),
|
||||
module.Dump('postgresql_databases', 'bar'),
|
||||
).and_return(True)
|
||||
|
||||
@@ -673,11 +673,11 @@ def test_get_dumps_to_restore_with_all_in_requested_dumps_plus_additional_reques
|
||||
}
|
||||
flexmock(module).should_receive('dumps_match').and_return(False)
|
||||
flexmock(module).should_receive('dumps_match').with_args(
|
||||
module.Dump(module.UNSPECIFIED, 'foo'),
|
||||
module.Dump(module.UNSPECIFIED, 'foo', hostname=module.UNSPECIFIED),
|
||||
module.Dump('postgresql_databases', 'foo'),
|
||||
).and_return(True)
|
||||
flexmock(module).should_receive('dumps_match').with_args(
|
||||
module.Dump(module.UNSPECIFIED, 'bar'),
|
||||
module.Dump(module.UNSPECIFIED, 'bar', hostname=module.UNSPECIFIED),
|
||||
module.Dump('postgresql_databases', 'bar'),
|
||||
).and_return(True)
|
||||
|
||||
@@ -698,11 +698,11 @@ def test_get_dumps_to_restore_with_all_in_requested_dumps_plus_additional_reques
|
||||
def test_get_dumps_to_restore_raises_for_multiple_matching_dumps_in_archive():
|
||||
flexmock(module).should_receive('dumps_match').and_return(False)
|
||||
flexmock(module).should_receive('dumps_match').with_args(
|
||||
module.Dump(module.UNSPECIFIED, 'foo'),
|
||||
module.Dump(module.UNSPECIFIED, 'foo', hostname=module.UNSPECIFIED),
|
||||
module.Dump('postgresql_databases', 'foo'),
|
||||
).and_return(True)
|
||||
flexmock(module).should_receive('dumps_match').with_args(
|
||||
module.Dump(module.UNSPECIFIED, 'foo'),
|
||||
module.Dump(module.UNSPECIFIED, 'foo', hostname=module.UNSPECIFIED),
|
||||
module.Dump('mariadb_databases', 'foo'),
|
||||
).and_return(True)
|
||||
flexmock(module).should_receive('render_dump_metadata').and_return('test')
|
||||
@@ -725,7 +725,7 @@ def test_get_dumps_to_restore_raises_for_multiple_matching_dumps_in_archive():
|
||||
def test_get_dumps_to_restore_raises_for_all_in_requested_dumps_and_requested_dumps_missing_from_archive():
|
||||
flexmock(module).should_receive('dumps_match').and_return(False)
|
||||
flexmock(module).should_receive('dumps_match').with_args(
|
||||
module.Dump(module.UNSPECIFIED, 'foo'),
|
||||
module.Dump(module.UNSPECIFIED, 'foo', hostname=module.UNSPECIFIED),
|
||||
module.Dump('postgresql_databases', 'foo'),
|
||||
).and_return(True)
|
||||
flexmock(module).should_receive('render_dump_metadata').and_return('test')
|
||||
@@ -750,7 +750,7 @@ def test_get_dumps_to_restore_with_requested_hook_name_filters_dumps_found_in_ar
|
||||
}
|
||||
flexmock(module).should_receive('dumps_match').and_return(False)
|
||||
flexmock(module).should_receive('dumps_match').with_args(
|
||||
module.Dump('postgresql_databases', 'foo'),
|
||||
module.Dump('postgresql_databases', 'foo', hostname=module.UNSPECIFIED),
|
||||
module.Dump('postgresql_databases', 'foo'),
|
||||
).and_return(True)
|
||||
|
||||
@@ -775,7 +775,7 @@ def test_get_dumps_to_restore_with_requested_shortened_hook_name_filters_dumps_f
|
||||
}
|
||||
flexmock(module).should_receive('dumps_match').and_return(False)
|
||||
flexmock(module).should_receive('dumps_match').with_args(
|
||||
module.Dump('postgresql_databases', 'foo'),
|
||||
module.Dump('postgresql_databases', 'foo', hostname=module.UNSPECIFIED),
|
||||
module.Dump('postgresql_databases', 'foo'),
|
||||
).and_return(True)
|
||||
|
||||
|
||||
+201
-74
@@ -8,13 +8,16 @@ from borgmatic.borg import check as module
|
||||
from ..test_verbosity import insert_logging_mock
|
||||
|
||||
|
||||
def insert_execute_command_mock(command, working_directory=None, borg_exit_codes=None):
|
||||
def insert_execute_command_mock(
|
||||
command, output_file=None, working_directory=None, borg_exit_codes=None
|
||||
):
|
||||
flexmock(module.environment).should_receive('make_environment')
|
||||
flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(
|
||||
working_directory,
|
||||
)
|
||||
flexmock(module).should_receive('execute_command').with_args(
|
||||
command,
|
||||
output_file=output_file,
|
||||
extra_environment=None,
|
||||
working_directory=working_directory,
|
||||
borg_local_path=command[0],
|
||||
@@ -250,11 +253,11 @@ def test_make_check_name_flags_without_archives_check_and_with_archive_filter_fl
|
||||
assert flags == ('--repository-only',)
|
||||
|
||||
|
||||
def test_make_check_name_flags_with_data_check_returns_flag_and_implies_archives():
|
||||
def test_make_check_name_flags_with_archives_and_data_check_returns_verify_data_flag():
|
||||
flexmock(module.feature).should_receive('available').and_return(True)
|
||||
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
||||
|
||||
flags = module.make_check_name_flags({'data'}, ())
|
||||
flags = module.make_check_name_flags({'archives', 'data'}, ())
|
||||
|
||||
assert flags == (
|
||||
'--archives-only',
|
||||
@@ -262,6 +265,15 @@ def test_make_check_name_flags_with_data_check_returns_flag_and_implies_archives
|
||||
)
|
||||
|
||||
|
||||
def test_make_check_name_flags_with_repository_and_data_check_returns_verify_data_flag():
|
||||
flexmock(module.feature).should_receive('available').and_return(True)
|
||||
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
||||
|
||||
flags = module.make_check_name_flags({'archives', 'data', 'repository'}, ())
|
||||
|
||||
assert flags == ('--verify-data',)
|
||||
|
||||
|
||||
def test_make_check_name_flags_with_extract_omits_extract_flag():
|
||||
flexmock(module.feature).should_receive('available').and_return(True)
|
||||
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
||||
@@ -271,21 +283,6 @@ def test_make_check_name_flags_with_extract_omits_extract_flag():
|
||||
assert flags == ()
|
||||
|
||||
|
||||
def test_make_check_name_flags_with_repository_and_data_checks_does_not_return_repository_only():
|
||||
flexmock(module.feature).should_receive('available').and_return(True)
|
||||
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
||||
|
||||
flags = module.make_check_name_flags(
|
||||
{
|
||||
'repository',
|
||||
'data',
|
||||
},
|
||||
(),
|
||||
)
|
||||
|
||||
assert flags == ('--verify-data',)
|
||||
|
||||
|
||||
def test_get_repository_id_with_valid_json_does_not_raise():
|
||||
config = {}
|
||||
flexmock(module.repo_info).should_receive('display_repository_info').and_return(
|
||||
@@ -336,7 +333,9 @@ def test_get_repository_id_with_missing_json_keys_raises():
|
||||
|
||||
def test_check_archives_with_progress_passes_through_to_borg():
|
||||
config = {}
|
||||
flexmock(module).should_receive('make_check_name_flags').and_return(())
|
||||
flexmock(module).should_receive('make_check_name_flags').with_args(
|
||||
{'repository'}, ()
|
||||
).and_return(())
|
||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
||||
flexmock(module.environment).should_receive('make_environment')
|
||||
flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
|
||||
@@ -369,7 +368,9 @@ def test_check_archives_with_progress_passes_through_to_borg():
|
||||
|
||||
def test_check_archives_with_repair_passes_through_to_borg():
|
||||
config = {}
|
||||
flexmock(module).should_receive('make_check_name_flags').and_return(())
|
||||
flexmock(module).should_receive('make_check_name_flags').with_args(
|
||||
{'repository'}, ()
|
||||
).and_return(())
|
||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
||||
flexmock(module.environment).should_receive('make_environment')
|
||||
flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
|
||||
@@ -402,12 +403,15 @@ def test_check_archives_with_repair_passes_through_to_borg():
|
||||
|
||||
def test_check_archives_with_max_duration_flag_passes_through_to_borg():
|
||||
config = {}
|
||||
flexmock(module).should_receive('make_check_name_flags').and_return(())
|
||||
flexmock(module).should_receive('make_check_name_flags').with_args(
|
||||
{'repository'}, ()
|
||||
).and_return(())
|
||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
||||
flexmock(module.environment).should_receive('make_environment')
|
||||
flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
|
||||
flexmock(module).should_receive('execute_command').with_args(
|
||||
('borg', 'check', '--max-duration', '33', 'repo'),
|
||||
output_file=None,
|
||||
extra_environment=None,
|
||||
working_directory=None,
|
||||
borg_local_path='borg',
|
||||
@@ -432,37 +436,17 @@ def test_check_archives_with_max_duration_flag_passes_through_to_borg():
|
||||
)
|
||||
|
||||
|
||||
def test_check_archives_with_max_duration_flag_and_archives_check_errors():
|
||||
config = {}
|
||||
flexmock(module).should_receive('execute_command').never()
|
||||
|
||||
with pytest.raises(ValueError):
|
||||
module.check_archives(
|
||||
repository_path='repo',
|
||||
config=config,
|
||||
local_borg_version='1.2.3',
|
||||
check_arguments=flexmock(
|
||||
progress=None,
|
||||
repair=None,
|
||||
only_checks=None,
|
||||
force=None,
|
||||
match_archives=None,
|
||||
max_duration=33,
|
||||
),
|
||||
global_arguments=flexmock(log_json=False),
|
||||
checks={'repository', 'archives'},
|
||||
archive_filter_flags=(),
|
||||
)
|
||||
|
||||
|
||||
def test_check_archives_with_max_duration_option_passes_through_to_borg():
|
||||
config = {'checks': [{'name': 'repository', 'max_duration': 33}]}
|
||||
flexmock(module).should_receive('make_check_name_flags').and_return(())
|
||||
flexmock(module).should_receive('make_check_name_flags').with_args(
|
||||
{'repository'}, ()
|
||||
).and_return(())
|
||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
||||
flexmock(module.environment).should_receive('make_environment')
|
||||
flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
|
||||
flexmock(module).should_receive('execute_command').with_args(
|
||||
('borg', 'check', '--max-duration', '33', 'repo'),
|
||||
output_file=None,
|
||||
extra_environment=None,
|
||||
working_directory=None,
|
||||
borg_local_path='borg',
|
||||
@@ -487,37 +471,145 @@ def test_check_archives_with_max_duration_option_passes_through_to_borg():
|
||||
)
|
||||
|
||||
|
||||
def test_check_archives_with_max_duration_option_and_archives_check_errors():
|
||||
config = {'checks': [{'name': 'repository', 'max_duration': 33}]}
|
||||
flexmock(module).should_receive('execute_command').never()
|
||||
def test_check_archives_with_max_duration_option_and_archives_check_runs_repository_check_separately():
|
||||
config = {'checks': [{'name': 'repository', 'max_duration': 33}, {'name': 'archives'}]}
|
||||
flexmock(module).should_receive('make_check_name_flags').with_args({'archives'}, ()).and_return(
|
||||
('--archives-only',)
|
||||
)
|
||||
flexmock(module).should_receive('make_check_name_flags').with_args(
|
||||
{'repository'}, ()
|
||||
).and_return(('--repository-only',))
|
||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
||||
insert_execute_command_mock(('borg', 'check', '--archives-only', 'repo'))
|
||||
insert_execute_command_mock(
|
||||
('borg', 'check', '--max-duration', '33', '--repository-only', 'repo')
|
||||
)
|
||||
|
||||
with pytest.raises(ValueError):
|
||||
module.check_archives(
|
||||
repository_path='repo',
|
||||
config=config,
|
||||
local_borg_version='1.2.3',
|
||||
check_arguments=flexmock(
|
||||
progress=None,
|
||||
repair=None,
|
||||
only_checks=None,
|
||||
force=None,
|
||||
match_archives=None,
|
||||
max_duration=None,
|
||||
),
|
||||
global_arguments=flexmock(log_json=False),
|
||||
checks={'repository', 'archives'},
|
||||
archive_filter_flags=(),
|
||||
)
|
||||
module.check_archives(
|
||||
repository_path='repo',
|
||||
config=config,
|
||||
local_borg_version='1.2.3',
|
||||
check_arguments=flexmock(
|
||||
progress=None,
|
||||
repair=None,
|
||||
only_checks=None,
|
||||
force=None,
|
||||
match_archives=None,
|
||||
max_duration=None,
|
||||
),
|
||||
global_arguments=flexmock(log_json=False),
|
||||
checks={'repository', 'archives'},
|
||||
archive_filter_flags=(),
|
||||
)
|
||||
|
||||
|
||||
def test_check_archives_with_max_duration_flag_and_archives_check_runs_repository_check_separately():
|
||||
config = {'checks': [{'name': 'repository'}, {'name': 'archives'}]}
|
||||
flexmock(module).should_receive('make_check_name_flags').with_args({'archives'}, ()).and_return(
|
||||
('--archives-only',)
|
||||
)
|
||||
flexmock(module).should_receive('make_check_name_flags').with_args(
|
||||
{'repository'}, ()
|
||||
).and_return(('--repository-only',))
|
||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
||||
insert_execute_command_mock(('borg', 'check', '--archives-only', 'repo'))
|
||||
insert_execute_command_mock(
|
||||
('borg', 'check', '--max-duration', '33', '--repository-only', 'repo')
|
||||
)
|
||||
|
||||
module.check_archives(
|
||||
repository_path='repo',
|
||||
config=config,
|
||||
local_borg_version='1.2.3',
|
||||
check_arguments=flexmock(
|
||||
progress=None,
|
||||
repair=None,
|
||||
only_checks=None,
|
||||
force=None,
|
||||
match_archives=None,
|
||||
max_duration=33,
|
||||
),
|
||||
global_arguments=flexmock(log_json=False),
|
||||
checks={'repository', 'archives'},
|
||||
archive_filter_flags=(),
|
||||
)
|
||||
|
||||
|
||||
def test_check_archives_with_max_duration_option_and_data_check_runs_repository_check_separately():
|
||||
config = {'checks': [{'name': 'repository', 'max_duration': 33}, {'name': 'data'}]}
|
||||
flexmock(module).should_receive('make_check_name_flags').with_args(
|
||||
{'data', 'archives'}, ()
|
||||
).and_return(('--archives-only', '--verify-data'))
|
||||
flexmock(module).should_receive('make_check_name_flags').with_args(
|
||||
{'repository'}, ()
|
||||
).and_return(('--repository-only',))
|
||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
||||
insert_execute_command_mock(('borg', 'check', '--archives-only', '--verify-data', 'repo'))
|
||||
insert_execute_command_mock(
|
||||
('borg', 'check', '--max-duration', '33', '--repository-only', 'repo')
|
||||
)
|
||||
|
||||
module.check_archives(
|
||||
repository_path='repo',
|
||||
config=config,
|
||||
local_borg_version='1.2.3',
|
||||
check_arguments=flexmock(
|
||||
progress=None,
|
||||
repair=None,
|
||||
only_checks=None,
|
||||
force=None,
|
||||
match_archives=None,
|
||||
max_duration=None,
|
||||
),
|
||||
global_arguments=flexmock(log_json=False),
|
||||
checks={'repository', 'data'},
|
||||
archive_filter_flags=(),
|
||||
)
|
||||
|
||||
|
||||
def test_check_archives_with_max_duration_flag_and_data_check_runs_repository_check_separately():
|
||||
config = {'checks': [{'name': 'repository'}, {'name': 'data'}]}
|
||||
flexmock(module).should_receive('make_check_name_flags').with_args(
|
||||
{'data', 'archives'}, ()
|
||||
).and_return(('--archives-only', '--verify-data'))
|
||||
flexmock(module).should_receive('make_check_name_flags').with_args(
|
||||
{'repository'}, ()
|
||||
).and_return(('--repository-only',))
|
||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
||||
insert_execute_command_mock(('borg', 'check', '--archives-only', '--verify-data', 'repo'))
|
||||
insert_execute_command_mock(
|
||||
('borg', 'check', '--max-duration', '33', '--repository-only', 'repo')
|
||||
)
|
||||
|
||||
module.check_archives(
|
||||
repository_path='repo',
|
||||
config=config,
|
||||
local_borg_version='1.2.3',
|
||||
check_arguments=flexmock(
|
||||
progress=None,
|
||||
repair=None,
|
||||
only_checks=None,
|
||||
force=None,
|
||||
match_archives=None,
|
||||
max_duration=33,
|
||||
),
|
||||
global_arguments=flexmock(log_json=False),
|
||||
checks={'repository', 'data'},
|
||||
archive_filter_flags=(),
|
||||
)
|
||||
|
||||
|
||||
def test_check_archives_with_max_duration_flag_overrides_max_duration_option():
|
||||
config = {'checks': [{'name': 'repository', 'max_duration': 33}]}
|
||||
flexmock(module).should_receive('make_check_name_flags').and_return(())
|
||||
flexmock(module).should_receive('make_check_name_flags').with_args(
|
||||
{'repository'}, ()
|
||||
).and_return(())
|
||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
||||
flexmock(module.environment).should_receive('make_environment')
|
||||
flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
|
||||
flexmock(module).should_receive('execute_command').with_args(
|
||||
('borg', 'check', '--max-duration', '44', 'repo'),
|
||||
output_file=None,
|
||||
extra_environment=None,
|
||||
working_directory=None,
|
||||
borg_local_path='borg',
|
||||
@@ -575,9 +667,37 @@ def test_check_archives_calls_borg_with_parameters(checks):
|
||||
)
|
||||
|
||||
|
||||
def test_check_archives_with_data_check_implies_archives_check_calls_borg_with_parameters():
|
||||
config = {}
|
||||
flexmock(module).should_receive('make_check_name_flags').with_args(
|
||||
{'data', 'archives'}, ()
|
||||
).and_return(())
|
||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
||||
insert_execute_command_mock(('borg', 'check', 'repo'))
|
||||
|
||||
module.check_archives(
|
||||
repository_path='repo',
|
||||
config=config,
|
||||
local_borg_version='1.2.3',
|
||||
check_arguments=flexmock(
|
||||
progress=None,
|
||||
repair=None,
|
||||
only_checks=None,
|
||||
force=None,
|
||||
match_archives=None,
|
||||
max_duration=None,
|
||||
),
|
||||
global_arguments=flexmock(log_json=False),
|
||||
checks={'data'},
|
||||
archive_filter_flags=(),
|
||||
)
|
||||
|
||||
|
||||
def test_check_archives_with_log_info_passes_through_to_borg():
|
||||
config = {}
|
||||
flexmock(module).should_receive('make_check_name_flags').and_return(())
|
||||
flexmock(module).should_receive('make_check_name_flags').with_args(
|
||||
{'repository'}, ()
|
||||
).and_return(())
|
||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
||||
insert_logging_mock(logging.INFO)
|
||||
insert_execute_command_mock(('borg', 'check', '--info', 'repo'))
|
||||
@@ -602,7 +722,9 @@ def test_check_archives_with_log_info_passes_through_to_borg():
|
||||
|
||||
def test_check_archives_with_log_debug_passes_through_to_borg():
|
||||
config = {}
|
||||
flexmock(module).should_receive('make_check_name_flags').and_return(())
|
||||
flexmock(module).should_receive('make_check_name_flags').with_args(
|
||||
{'repository'}, ()
|
||||
).and_return(())
|
||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
||||
insert_logging_mock(logging.DEBUG)
|
||||
insert_execute_command_mock(('borg', 'check', '--debug', '--show-rc', 'repo'))
|
||||
@@ -806,7 +928,9 @@ def test_check_archives_with_retention_prefix():
|
||||
|
||||
def test_check_archives_with_extra_borg_options_passes_through_to_borg():
|
||||
config = {'extra_borg_options': {'check': '--extra --options'}}
|
||||
flexmock(module).should_receive('make_check_name_flags').and_return(())
|
||||
flexmock(module).should_receive('make_check_name_flags').with_args(
|
||||
{'repository'}, ()
|
||||
).and_return(())
|
||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
||||
insert_execute_command_mock(('borg', 'check', '--extra', '--options', 'repo'))
|
||||
|
||||
@@ -829,15 +953,16 @@ def test_check_archives_with_extra_borg_options_passes_through_to_borg():
|
||||
|
||||
|
||||
def test_check_archives_with_match_archives_passes_through_to_borg():
|
||||
config = {}
|
||||
flexmock(module).should_receive('make_check_name_flags').and_return(
|
||||
('--match-archives', 'foo-*')
|
||||
)
|
||||
config = {'checks': [{'name': 'archives'}]}
|
||||
flexmock(module).should_receive('make_check_name_flags').with_args(
|
||||
{'archives'}, object
|
||||
).and_return(('--match-archives', 'foo-*'))
|
||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
||||
flexmock(module.environment).should_receive('make_environment')
|
||||
flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
|
||||
flexmock(module).should_receive('execute_command').with_args(
|
||||
('borg', 'check', '--match-archives', 'foo-*', 'repo'),
|
||||
output_file=None,
|
||||
extra_environment=None,
|
||||
working_directory=None,
|
||||
borg_local_path='borg',
|
||||
@@ -864,7 +989,9 @@ def test_check_archives_with_match_archives_passes_through_to_borg():
|
||||
|
||||
def test_check_archives_calls_borg_with_working_directory():
|
||||
config = {'working_directory': '/working/dir'}
|
||||
flexmock(module).should_receive('make_check_name_flags').and_return(())
|
||||
flexmock(module).should_receive('make_check_name_flags').with_args(
|
||||
{'repository'}, ()
|
||||
).and_return(())
|
||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
||||
flexmock(module.environment).should_receive('make_environment')
|
||||
flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(None)
|
||||
|
||||
@@ -185,6 +185,7 @@ def test_any_parent_directories_treats_unrelated_paths_as_non_match():
|
||||
|
||||
|
||||
def test_collect_special_file_paths_parses_special_files_from_borg_dry_run_file_list():
|
||||
flexmock(module.environment).should_receive('make_environment').and_return(None)
|
||||
flexmock(module).should_receive('execute_command_and_capture_output').and_return(
|
||||
'Processing files ...\n- /foo\n+ /bar\n- /baz'
|
||||
)
|
||||
@@ -198,12 +199,12 @@ def test_collect_special_file_paths_parses_special_files_from_borg_dry_run_file_
|
||||
config={},
|
||||
local_path=None,
|
||||
working_directory=None,
|
||||
borg_environment=None,
|
||||
borgmatic_runtime_directory='/run/borgmatic',
|
||||
) == ('/foo', '/bar', '/baz')
|
||||
|
||||
|
||||
def test_collect_special_file_paths_skips_borgmatic_runtime_directory():
|
||||
flexmock(module.environment).should_receive('make_environment').and_return(None)
|
||||
flexmock(module).should_receive('execute_command_and_capture_output').and_return(
|
||||
'+ /foo\n- /run/borgmatic/bar\n- /baz'
|
||||
)
|
||||
@@ -225,12 +226,12 @@ def test_collect_special_file_paths_skips_borgmatic_runtime_directory():
|
||||
config={},
|
||||
local_path=None,
|
||||
working_directory=None,
|
||||
borg_environment=None,
|
||||
borgmatic_runtime_directory='/run/borgmatic',
|
||||
) == ('/foo', '/baz')
|
||||
|
||||
|
||||
def test_collect_special_file_paths_with_borgmatic_runtime_directory_missing_from_paths_output_errors():
|
||||
flexmock(module.environment).should_receive('make_environment').and_return(None)
|
||||
flexmock(module).should_receive('execute_command_and_capture_output').and_return(
|
||||
'+ /foo\n- /bar\n- /baz'
|
||||
)
|
||||
@@ -245,12 +246,12 @@ def test_collect_special_file_paths_with_borgmatic_runtime_directory_missing_fro
|
||||
config={},
|
||||
local_path=None,
|
||||
working_directory=None,
|
||||
borg_environment=None,
|
||||
borgmatic_runtime_directory='/run/borgmatic',
|
||||
)
|
||||
|
||||
|
||||
def test_collect_special_file_paths_with_dry_run_and_borgmatic_runtime_directory_missing_from_paths_output_does_not_raise():
|
||||
flexmock(module.environment).should_receive('make_environment').and_return(None)
|
||||
flexmock(module).should_receive('execute_command_and_capture_output').and_return(
|
||||
'+ /foo\n- /bar\n- /baz'
|
||||
)
|
||||
@@ -264,12 +265,12 @@ def test_collect_special_file_paths_with_dry_run_and_borgmatic_runtime_directory
|
||||
config={},
|
||||
local_path=None,
|
||||
working_directory=None,
|
||||
borg_environment=None,
|
||||
borgmatic_runtime_directory='/run/borgmatic',
|
||||
) == ('/foo', '/bar', '/baz')
|
||||
|
||||
|
||||
def test_collect_special_file_paths_excludes_non_special_files():
|
||||
flexmock(module.environment).should_receive('make_environment').and_return(None)
|
||||
flexmock(module).should_receive('execute_command_and_capture_output').and_return(
|
||||
'+ /foo\n+ /bar\n+ /baz'
|
||||
)
|
||||
@@ -285,12 +286,12 @@ def test_collect_special_file_paths_excludes_non_special_files():
|
||||
config={},
|
||||
local_path=None,
|
||||
working_directory=None,
|
||||
borg_environment=None,
|
||||
borgmatic_runtime_directory='/run/borgmatic',
|
||||
) == ('/foo', '/baz')
|
||||
|
||||
|
||||
def test_collect_special_file_paths_omits_exclude_no_dump_flag_from_command():
|
||||
flexmock(module.environment).should_receive('make_environment').and_return(None)
|
||||
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
||||
('borg', 'create', '--dry-run', '--list'),
|
||||
capture_stderr=True,
|
||||
@@ -309,7 +310,6 @@ def test_collect_special_file_paths_omits_exclude_no_dump_flag_from_command():
|
||||
config={},
|
||||
local_path='borg',
|
||||
working_directory=None,
|
||||
borg_environment=None,
|
||||
borgmatic_runtime_directory='/run/borgmatic',
|
||||
)
|
||||
|
||||
|
||||
@@ -53,3 +53,19 @@ def test_get_passphrase_from_passcommand_with_configured_passphrase_and_passcomm
|
||||
)
|
||||
is None
|
||||
)
|
||||
|
||||
|
||||
def test_get_passphrase_from_passcommand_with_configured_blank_passphrase_and_passcommand_detects_passphrase():
|
||||
flexmock(module.borgmatic.config.paths).should_receive('get_working_directory').and_return(
|
||||
'/working'
|
||||
)
|
||||
flexmock(module).should_receive('run_passcommand').with_args(
|
||||
'command', True, '/working'
|
||||
).and_return(None).once()
|
||||
|
||||
assert (
|
||||
module.get_passphrase_from_passcommand(
|
||||
{'encryption_passphrase': '', 'encryption_passcommand': 'command'},
|
||||
)
|
||||
is None
|
||||
)
|
||||
|
||||
+19
-33
@@ -228,16 +228,12 @@ def test_add_logging_level_skips_global_setting_if_already_set():
|
||||
module.add_logging_level('PLAID', 99)
|
||||
|
||||
|
||||
def test_get_log_prefix_gets_prefix_from_first_handler():
|
||||
def test_get_log_prefix_gets_prefix_from_first_handler_formatter_with_prefix():
|
||||
flexmock(module.logging).should_receive('getLogger').and_return(
|
||||
flexmock(
|
||||
handlers=[
|
||||
flexmock(
|
||||
formatter=flexmock(
|
||||
_style=flexmock(_defaults=flexmock(get=lambda name: 'myprefix: '))
|
||||
)
|
||||
),
|
||||
flexmock(),
|
||||
flexmock(formatter=flexmock()),
|
||||
flexmock(formatter=flexmock(prefix='myprefix')),
|
||||
],
|
||||
removeHandler=lambda handler: None,
|
||||
)
|
||||
@@ -261,8 +257,8 @@ def test_get_log_prefix_with_no_formatters_does_not_raise():
|
||||
flexmock(module.logging).should_receive('getLogger').and_return(
|
||||
flexmock(
|
||||
handlers=[
|
||||
flexmock(),
|
||||
flexmock(),
|
||||
flexmock(formatter=None),
|
||||
flexmock(formatter=None),
|
||||
],
|
||||
removeHandler=lambda handler: None,
|
||||
)
|
||||
@@ -276,9 +272,8 @@ def test_get_log_prefix_with_no_prefix_does_not_raise():
|
||||
flexmock(
|
||||
handlers=[
|
||||
flexmock(
|
||||
formatter=flexmock(_style=flexmock(_defaults=flexmock(get=lambda name: None)))
|
||||
formatter=flexmock(),
|
||||
),
|
||||
flexmock(),
|
||||
],
|
||||
removeHandler=lambda handler: None,
|
||||
)
|
||||
@@ -287,24 +282,20 @@ def test_get_log_prefix_with_no_prefix_does_not_raise():
|
||||
assert module.get_log_prefix() is None
|
||||
|
||||
|
||||
def test_set_log_prefix_updates_all_handlers():
|
||||
styles = (
|
||||
flexmock(_defaults=None),
|
||||
flexmock(_defaults=None),
|
||||
def test_set_log_prefix_updates_all_handler_formatters():
|
||||
formatters = (
|
||||
flexmock(prefix=None),
|
||||
flexmock(prefix=None),
|
||||
)
|
||||
|
||||
flexmock(module.logging).should_receive('getLogger').and_return(
|
||||
flexmock(
|
||||
handlers=[
|
||||
flexmock(
|
||||
formatter=flexmock(
|
||||
_style=styles[0],
|
||||
)
|
||||
formatter=formatters[0],
|
||||
),
|
||||
flexmock(
|
||||
formatter=flexmock(
|
||||
_style=styles[1],
|
||||
)
|
||||
formatter=formatters[1],
|
||||
),
|
||||
],
|
||||
removeHandler=lambda handler: None,
|
||||
@@ -313,12 +304,12 @@ def test_set_log_prefix_updates_all_handlers():
|
||||
|
||||
module.set_log_prefix('myprefix')
|
||||
|
||||
for style in styles:
|
||||
assert style._defaults == {'prefix': 'myprefix: '}
|
||||
for formatter in formatters:
|
||||
assert formatter.prefix == 'myprefix'
|
||||
|
||||
|
||||
def test_set_log_prefix_skips_handlers_without_a_formatter():
|
||||
style = flexmock(_defaults=None)
|
||||
formatter = flexmock(prefix=None)
|
||||
|
||||
flexmock(module.logging).should_receive('getLogger').and_return(
|
||||
flexmock(
|
||||
@@ -326,11 +317,8 @@ def test_set_log_prefix_skips_handlers_without_a_formatter():
|
||||
flexmock(
|
||||
formatter=None,
|
||||
),
|
||||
flexmock(),
|
||||
flexmock(
|
||||
formatter=flexmock(
|
||||
_style=style,
|
||||
)
|
||||
formatter=formatter,
|
||||
),
|
||||
],
|
||||
removeHandler=lambda handler: None,
|
||||
@@ -339,7 +327,7 @@ def test_set_log_prefix_skips_handlers_without_a_formatter():
|
||||
|
||||
module.set_log_prefix('myprefix')
|
||||
|
||||
assert style._defaults == {'prefix': 'myprefix: '}
|
||||
assert formatter.prefix == 'myprefix'
|
||||
|
||||
|
||||
def test_log_prefix_sets_prefix_and_then_restores_no_prefix_after():
|
||||
@@ -621,10 +609,8 @@ def test_configure_logging_to_both_log_file_and_syslog():
|
||||
def test_configure_logging_to_log_file_formats_with_custom_log_format():
|
||||
flexmock(module).should_receive('add_custom_log_levels')
|
||||
flexmock(module.logging).ANSWER = module.ANSWER
|
||||
flexmock(module.logging).should_receive('Formatter').with_args(
|
||||
flexmock(module).should_receive('Log_prefix_formatter').with_args(
|
||||
'{message}', # noqa: FS003
|
||||
style='{',
|
||||
defaults={'prefix': ''},
|
||||
).once()
|
||||
fake_formatter = flexmock()
|
||||
flexmock(module).should_receive('Console_color_formatter').and_return(fake_formatter)
|
||||
@@ -676,7 +662,7 @@ def test_configure_logging_uses_console_no_color_formatter_if_color_disabled():
|
||||
flexmock(module.logging).ANSWER = module.ANSWER
|
||||
fake_formatter = flexmock()
|
||||
flexmock(module).should_receive('Console_color_formatter').never()
|
||||
flexmock(module).should_receive('Console_no_color_formatter').and_return(fake_formatter)
|
||||
flexmock(module).should_receive('Log_prefix_formatter').and_return(fake_formatter)
|
||||
multi_stream_handler = flexmock(setLevel=lambda level: None, level=logging.INFO)
|
||||
multi_stream_handler.should_receive('setFormatter').with_args(fake_formatter).once()
|
||||
flexmock(module).should_receive('Multi_stream_handler').and_return(multi_stream_handler)
|
||||
|
||||
Reference in New Issue
Block a user