Upgrade test requirements and code style requirements. Auto-reformat code accordingly.
This commit is contained in:
parent
1c67db5d62
commit
5dbb71709c
50 changed files with 603 additions and 155 deletions
|
@ -8,7 +8,12 @@ logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def run_borg(
|
def run_borg(
|
||||||
repository, storage, local_borg_version, borg_arguments, local_path, remote_path,
|
repository,
|
||||||
|
storage,
|
||||||
|
local_borg_version,
|
||||||
|
borg_arguments,
|
||||||
|
local_path,
|
||||||
|
remote_path,
|
||||||
):
|
):
|
||||||
'''
|
'''
|
||||||
Run the "borg" action for the given repository.
|
Run the "borg" action for the given repository.
|
||||||
|
|
|
@ -7,7 +7,12 @@ logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def run_break_lock(
|
def run_break_lock(
|
||||||
repository, storage, local_borg_version, break_lock_arguments, local_path, remote_path,
|
repository,
|
||||||
|
storage,
|
||||||
|
local_borg_version,
|
||||||
|
break_lock_arguments,
|
||||||
|
local_path,
|
||||||
|
remote_path,
|
||||||
):
|
):
|
||||||
'''
|
'''
|
||||||
Run the "break-lock" action for the given repository.
|
Run the "break-lock" action for the given repository.
|
||||||
|
|
|
@ -9,7 +9,12 @@ logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def run_info(
|
def run_info(
|
||||||
repository, storage, local_borg_version, info_arguments, local_path, remote_path,
|
repository,
|
||||||
|
storage,
|
||||||
|
local_borg_version,
|
||||||
|
info_arguments,
|
||||||
|
local_path,
|
||||||
|
remote_path,
|
||||||
):
|
):
|
||||||
'''
|
'''
|
||||||
Run the "info" action for the given repository and archive.
|
Run the "info" action for the given repository and archive.
|
||||||
|
|
|
@ -8,7 +8,12 @@ logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def run_list(
|
def run_list(
|
||||||
repository, storage, local_borg_version, list_arguments, local_path, remote_path,
|
repository,
|
||||||
|
storage,
|
||||||
|
local_borg_version,
|
||||||
|
list_arguments,
|
||||||
|
local_path,
|
||||||
|
remote_path,
|
||||||
):
|
):
|
||||||
'''
|
'''
|
||||||
Run the "list" action for the given repository and archive.
|
Run the "list" action for the given repository and archive.
|
||||||
|
|
|
@ -8,7 +8,12 @@ logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def run_mount(
|
def run_mount(
|
||||||
repository, storage, local_borg_version, mount_arguments, local_path, remote_path,
|
repository,
|
||||||
|
storage,
|
||||||
|
local_borg_version,
|
||||||
|
mount_arguments,
|
||||||
|
local_path,
|
||||||
|
remote_path,
|
||||||
):
|
):
|
||||||
'''
|
'''
|
||||||
Run the "mount" action for the given repository.
|
Run the "mount" action for the given repository.
|
||||||
|
|
|
@ -114,7 +114,13 @@ def restore_single_database(
|
||||||
|
|
||||||
|
|
||||||
def collect_archive_database_names(
|
def collect_archive_database_names(
|
||||||
repository, archive, location, storage, local_borg_version, local_path, remote_path,
|
repository,
|
||||||
|
archive,
|
||||||
|
location,
|
||||||
|
storage,
|
||||||
|
local_borg_version,
|
||||||
|
local_path,
|
||||||
|
remote_path,
|
||||||
):
|
):
|
||||||
'''
|
'''
|
||||||
Given a local or remote repository path, a resolved archive name, a location configuration dict,
|
Given a local or remote repository path, a resolved archive name, a location configuration dict,
|
||||||
|
@ -180,7 +186,7 @@ def find_databases_to_restore(requested_database_names, archive_database_names):
|
||||||
if 'all' in restore_names[UNSPECIFIED_HOOK]:
|
if 'all' in restore_names[UNSPECIFIED_HOOK]:
|
||||||
restore_names[UNSPECIFIED_HOOK].remove('all')
|
restore_names[UNSPECIFIED_HOOK].remove('all')
|
||||||
|
|
||||||
for (hook_name, database_names) in archive_database_names.items():
|
for hook_name, database_names in archive_database_names.items():
|
||||||
restore_names.setdefault(hook_name, []).extend(database_names)
|
restore_names.setdefault(hook_name, []).extend(database_names)
|
||||||
|
|
||||||
# If a database is to be restored as part of "all", then remove it from restore names so
|
# If a database is to be restored as part of "all", then remove it from restore names so
|
||||||
|
|
|
@ -8,7 +8,12 @@ logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def run_rinfo(
|
def run_rinfo(
|
||||||
repository, storage, local_borg_version, rinfo_arguments, local_path, remote_path,
|
repository,
|
||||||
|
storage,
|
||||||
|
local_borg_version,
|
||||||
|
rinfo_arguments,
|
||||||
|
local_path,
|
||||||
|
remote_path,
|
||||||
):
|
):
|
||||||
'''
|
'''
|
||||||
Run the "rinfo" action for the given repository.
|
Run the "rinfo" action for the given repository.
|
||||||
|
|
|
@ -8,7 +8,12 @@ logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def run_rlist(
|
def run_rlist(
|
||||||
repository, storage, local_borg_version, rlist_arguments, local_path, remote_path,
|
repository,
|
||||||
|
storage,
|
||||||
|
local_borg_version,
|
||||||
|
rlist_arguments,
|
||||||
|
local_path,
|
||||||
|
remote_path,
|
||||||
):
|
):
|
||||||
'''
|
'''
|
||||||
Run the "rlist" action for the given repository.
|
Run the "rlist" action for the given repository.
|
||||||
|
|
|
@ -7,7 +7,11 @@ logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def break_lock(
|
def break_lock(
|
||||||
repository_path, storage_config, local_borg_version, local_path='borg', remote_path=None,
|
repository_path,
|
||||||
|
storage_config,
|
||||||
|
local_borg_version,
|
||||||
|
local_path='borg',
|
||||||
|
remote_path=None,
|
||||||
):
|
):
|
||||||
'''
|
'''
|
||||||
Given a local or remote repository path, a storage configuration dict, the local Borg version,
|
Given a local or remote repository path, a storage configuration dict, the local Borg version,
|
||||||
|
|
|
@ -509,7 +509,9 @@ def create_archive(
|
||||||
)
|
)
|
||||||
elif output_log_level is None:
|
elif output_log_level is None:
|
||||||
return execute_command_and_capture_output(
|
return execute_command_and_capture_output(
|
||||||
create_command, working_directory=working_directory, extra_environment=borg_environment,
|
create_command,
|
||||||
|
working_directory=working_directory,
|
||||||
|
extra_environment=borg_environment,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
execute_command(
|
execute_command(
|
||||||
|
|
|
@ -45,7 +45,11 @@ def export_tar_archive(
|
||||||
+ (('--dry-run',) if dry_run else ())
|
+ (('--dry-run',) if dry_run else ())
|
||||||
+ (('--tar-filter', tar_filter) if tar_filter else ())
|
+ (('--tar-filter', tar_filter) if tar_filter else ())
|
||||||
+ (('--strip-components', str(strip_components)) if strip_components else ())
|
+ (('--strip-components', str(strip_components)) if strip_components else ())
|
||||||
+ flags.make_repository_archive_flags(repository_path, archive, local_borg_version,)
|
+ flags.make_repository_archive_flags(
|
||||||
|
repository_path,
|
||||||
|
archive,
|
||||||
|
local_borg_version,
|
||||||
|
)
|
||||||
+ (destination_path,)
|
+ (destination_path,)
|
||||||
+ (tuple(paths) if paths else ())
|
+ (tuple(paths) if paths else ())
|
||||||
)
|
)
|
||||||
|
|
|
@ -108,7 +108,11 @@ def extract_archive(
|
||||||
+ (('--strip-components', str(strip_components)) if strip_components else ())
|
+ (('--strip-components', str(strip_components)) if strip_components else ())
|
||||||
+ (('--progress',) if progress else ())
|
+ (('--progress',) if progress else ())
|
||||||
+ (('--stdout',) if extract_to_stdout else ())
|
+ (('--stdout',) if extract_to_stdout else ())
|
||||||
+ flags.make_repository_archive_flags(repository, archive, local_borg_version,)
|
+ flags.make_repository_archive_flags(
|
||||||
|
repository,
|
||||||
|
archive,
|
||||||
|
local_borg_version,
|
||||||
|
)
|
||||||
+ (tuple(paths) if paths else ())
|
+ (tuple(paths) if paths else ())
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -62,7 +62,8 @@ def display_archives_info(
|
||||||
|
|
||||||
if info_arguments.json:
|
if info_arguments.json:
|
||||||
return execute_command_and_capture_output(
|
return execute_command_and_capture_output(
|
||||||
full_command, extra_environment=environment.make_environment(storage_config),
|
full_command,
|
||||||
|
extra_environment=environment.make_environment(storage_config),
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
execute_command(
|
execute_command(
|
||||||
|
|
|
@ -50,7 +50,8 @@ def display_repository_info(
|
||||||
|
|
||||||
if rinfo_arguments.json:
|
if rinfo_arguments.json:
|
||||||
return execute_command_and_capture_output(
|
return execute_command_and_capture_output(
|
||||||
full_command, extra_environment=extra_environment,
|
full_command,
|
||||||
|
extra_environment=extra_environment,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
execute_command(
|
execute_command(
|
||||||
|
|
|
@ -40,7 +40,8 @@ def resolve_archive_name(
|
||||||
)
|
)
|
||||||
|
|
||||||
output = execute_command_and_capture_output(
|
output = execute_command_and_capture_output(
|
||||||
full_command, extra_environment=environment.make_environment(storage_config),
|
full_command,
|
||||||
|
extra_environment=environment.make_environment(storage_config),
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
latest_archive = output.strip().splitlines()[-1]
|
latest_archive = output.strip().splitlines()[-1]
|
||||||
|
|
|
@ -19,7 +19,8 @@ def local_borg_version(storage_config, local_path='borg'):
|
||||||
+ (('--debug', '--show-rc') if logger.isEnabledFor(logging.DEBUG) else ())
|
+ (('--debug', '--show-rc') if logger.isEnabledFor(logging.DEBUG) else ())
|
||||||
)
|
)
|
||||||
output = execute_command_and_capture_output(
|
output = execute_command_and_capture_output(
|
||||||
full_command, extra_environment=environment.make_environment(storage_config),
|
full_command,
|
||||||
|
extra_environment=environment.make_environment(storage_config),
|
||||||
)
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -178,7 +178,9 @@ def make_parsers():
|
||||||
help='Log verbose progress to monitoring integrations that support logging (from only errors to very verbose: -1, 0, 1, or 2)',
|
help='Log verbose progress to monitoring integrations that support logging (from only errors to very verbose: -1, 0, 1, or 2)',
|
||||||
)
|
)
|
||||||
global_group.add_argument(
|
global_group.add_argument(
|
||||||
'--log-file', type=str, help='Write log messages to this file instead of syslog',
|
'--log-file',
|
||||||
|
type=str,
|
||||||
|
help='Write log messages to this file instead of syslog',
|
||||||
)
|
)
|
||||||
global_group.add_argument(
|
global_group.add_argument(
|
||||||
'--log-file-format',
|
'--log-file-format',
|
||||||
|
@ -258,10 +260,13 @@ def make_parsers():
|
||||||
help='Copy the crypt key used for authenticated encryption from the source repository, defaults to a new random key (Borg 2.x+ only)',
|
help='Copy the crypt key used for authenticated encryption from the source repository, defaults to a new random key (Borg 2.x+ only)',
|
||||||
)
|
)
|
||||||
rcreate_group.add_argument(
|
rcreate_group.add_argument(
|
||||||
'--append-only', action='store_true', help='Create an append-only repository',
|
'--append-only',
|
||||||
|
action='store_true',
|
||||||
|
help='Create an append-only repository',
|
||||||
)
|
)
|
||||||
rcreate_group.add_argument(
|
rcreate_group.add_argument(
|
||||||
'--storage-quota', help='Create a repository with a fixed storage quota',
|
'--storage-quota',
|
||||||
|
help='Create a repository with a fixed storage quota',
|
||||||
)
|
)
|
||||||
rcreate_group.add_argument(
|
rcreate_group.add_argument(
|
||||||
'--make-parent-dirs',
|
'--make-parent-dirs',
|
||||||
|
@ -649,7 +654,8 @@ def make_parsers():
|
||||||
)
|
)
|
||||||
rlist_group = rlist_parser.add_argument_group('rlist arguments')
|
rlist_group = rlist_parser.add_argument_group('rlist arguments')
|
||||||
rlist_group.add_argument(
|
rlist_group.add_argument(
|
||||||
'--repository', help='Path of repository to list, defaults to the configured repositories',
|
'--repository',
|
||||||
|
help='Path of repository to list, defaults to the configured repositories',
|
||||||
)
|
)
|
||||||
rlist_group.add_argument(
|
rlist_group.add_argument(
|
||||||
'--short', default=False, action='store_true', help='Output only archive names'
|
'--short', default=False, action='store_true', help='Output only archive names'
|
||||||
|
|
|
@ -103,7 +103,9 @@ def run_configuration(config_filename, config, arguments):
|
||||||
if not encountered_error:
|
if not encountered_error:
|
||||||
repo_queue = Queue()
|
repo_queue = Queue()
|
||||||
for repo in location['repositories']:
|
for repo in location['repositories']:
|
||||||
repo_queue.put((repo, 0),)
|
repo_queue.put(
|
||||||
|
(repo, 0),
|
||||||
|
)
|
||||||
|
|
||||||
while not repo_queue.empty():
|
while not repo_queue.empty():
|
||||||
repository, retry_num = repo_queue.get()
|
repository, retry_num = repo_queue.get()
|
||||||
|
@ -128,7 +130,9 @@ def run_configuration(config_filename, config, arguments):
|
||||||
)
|
)
|
||||||
except (OSError, CalledProcessError, ValueError) as error:
|
except (OSError, CalledProcessError, ValueError) as error:
|
||||||
if retry_num < retries:
|
if retry_num < retries:
|
||||||
repo_queue.put((repository, retry_num + 1),)
|
repo_queue.put(
|
||||||
|
(repository, retry_num + 1),
|
||||||
|
)
|
||||||
tuple( # Consume the generator so as to trigger logging.
|
tuple( # Consume the generator so as to trigger logging.
|
||||||
log_error_records(
|
log_error_records(
|
||||||
f'{repository["path"]}: Error running actions for repository',
|
f'{repository["path"]}: Error running actions for repository',
|
||||||
|
@ -279,7 +283,7 @@ def run_actions(
|
||||||
**hook_context,
|
**hook_context,
|
||||||
)
|
)
|
||||||
|
|
||||||
for (action_name, action_arguments) in arguments.items():
|
for action_name, action_arguments in arguments.items():
|
||||||
if action_name == 'rcreate':
|
if action_name == 'rcreate':
|
||||||
borgmatic.actions.rcreate.run_rcreate(
|
borgmatic.actions.rcreate.run_rcreate(
|
||||||
repository,
|
repository,
|
||||||
|
@ -408,19 +412,39 @@ def run_actions(
|
||||||
)
|
)
|
||||||
elif action_name == 'rlist':
|
elif action_name == 'rlist':
|
||||||
yield from borgmatic.actions.rlist.run_rlist(
|
yield from borgmatic.actions.rlist.run_rlist(
|
||||||
repository, storage, local_borg_version, action_arguments, local_path, remote_path,
|
repository,
|
||||||
|
storage,
|
||||||
|
local_borg_version,
|
||||||
|
action_arguments,
|
||||||
|
local_path,
|
||||||
|
remote_path,
|
||||||
)
|
)
|
||||||
elif action_name == 'list':
|
elif action_name == 'list':
|
||||||
yield from borgmatic.actions.list.run_list(
|
yield from borgmatic.actions.list.run_list(
|
||||||
repository, storage, local_borg_version, action_arguments, local_path, remote_path,
|
repository,
|
||||||
|
storage,
|
||||||
|
local_borg_version,
|
||||||
|
action_arguments,
|
||||||
|
local_path,
|
||||||
|
remote_path,
|
||||||
)
|
)
|
||||||
elif action_name == 'rinfo':
|
elif action_name == 'rinfo':
|
||||||
yield from borgmatic.actions.rinfo.run_rinfo(
|
yield from borgmatic.actions.rinfo.run_rinfo(
|
||||||
repository, storage, local_borg_version, action_arguments, local_path, remote_path,
|
repository,
|
||||||
|
storage,
|
||||||
|
local_borg_version,
|
||||||
|
action_arguments,
|
||||||
|
local_path,
|
||||||
|
remote_path,
|
||||||
)
|
)
|
||||||
elif action_name == 'info':
|
elif action_name == 'info':
|
||||||
yield from borgmatic.actions.info.run_info(
|
yield from borgmatic.actions.info.run_info(
|
||||||
repository, storage, local_borg_version, action_arguments, local_path, remote_path,
|
repository,
|
||||||
|
storage,
|
||||||
|
local_borg_version,
|
||||||
|
action_arguments,
|
||||||
|
local_path,
|
||||||
|
remote_path,
|
||||||
)
|
)
|
||||||
elif action_name == 'break-lock':
|
elif action_name == 'break-lock':
|
||||||
borgmatic.actions.break_lock.run_break_lock(
|
borgmatic.actions.break_lock.run_break_lock(
|
||||||
|
@ -433,7 +457,12 @@ def run_actions(
|
||||||
)
|
)
|
||||||
elif action_name == 'borg':
|
elif action_name == 'borg':
|
||||||
borgmatic.actions.borg.run_borg(
|
borgmatic.actions.borg.run_borg(
|
||||||
repository, storage, local_borg_version, action_arguments, local_path, remote_path,
|
repository,
|
||||||
|
storage,
|
||||||
|
local_borg_version,
|
||||||
|
action_arguments,
|
||||||
|
local_path,
|
||||||
|
remote_path,
|
||||||
)
|
)
|
||||||
|
|
||||||
command.execute_hook(
|
command.execute_hook(
|
||||||
|
@ -626,7 +655,8 @@ def collect_configuration_run_summary_logs(configs, arguments):
|
||||||
logger.info(f"Unmounting mount point {arguments['umount'].mount_point}")
|
logger.info(f"Unmounting mount point {arguments['umount'].mount_point}")
|
||||||
try:
|
try:
|
||||||
borg_umount.unmount_archive(
|
borg_umount.unmount_archive(
|
||||||
mount_point=arguments['umount'].mount_point, local_path=get_local_path(configs),
|
mount_point=arguments['umount'].mount_point,
|
||||||
|
local_path=get_local_path(configs),
|
||||||
)
|
)
|
||||||
except (CalledProcessError, OSError) as error:
|
except (CalledProcessError, OSError) as error:
|
||||||
yield from log_error_records('Error unmounting mount point', error)
|
yield from log_error_records('Error unmounting mount point', error)
|
||||||
|
|
|
@ -121,6 +121,7 @@ def load_configuration(filename):
|
||||||
Raise ruamel.yaml.error.YAMLError if something goes wrong parsing the YAML, or RecursionError
|
Raise ruamel.yaml.error.YAMLError if something goes wrong parsing the YAML, or RecursionError
|
||||||
if there are too many recursive includes.
|
if there are too many recursive includes.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
# Use an embedded derived class for the include constructor so as to capture the filename
|
# Use an embedded derived class for the include constructor so as to capture the filename
|
||||||
# value. (functools.partial doesn't work for this use case because yaml.Constructor has to be
|
# value. (functools.partial doesn't work for this use case because yaml.Constructor has to be
|
||||||
# an actual class.)
|
# an actual class.)
|
||||||
|
|
|
@ -81,7 +81,10 @@ def normalize(config_filename, config):
|
||||||
repository_path.partition('file://')[-1]
|
repository_path.partition('file://')[-1]
|
||||||
)
|
)
|
||||||
config['location']['repositories'].append(
|
config['location']['repositories'].append(
|
||||||
dict(repository_dict, path=updated_repository_path,)
|
dict(
|
||||||
|
repository_dict,
|
||||||
|
path=updated_repository_path,
|
||||||
|
)
|
||||||
)
|
)
|
||||||
elif repository_path.startswith('ssh://'):
|
elif repository_path.startswith('ssh://'):
|
||||||
config['location']['repositories'].append(repository_dict)
|
config['location']['repositories'].append(repository_dict)
|
||||||
|
@ -97,7 +100,10 @@ def normalize(config_filename, config):
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
config['location']['repositories'].append(
|
config['location']['repositories'].append(
|
||||||
dict(repository_dict, path=rewritten_repository_path,)
|
dict(
|
||||||
|
repository_dict,
|
||||||
|
path=rewritten_repository_path,
|
||||||
|
)
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
config['location']['repositories'].append(repository_dict)
|
config['location']['repositories'].append(repository_dict)
|
||||||
|
|
|
@ -57,7 +57,12 @@ def parse_overrides(raw_overrides):
|
||||||
for raw_override in raw_overrides:
|
for raw_override in raw_overrides:
|
||||||
try:
|
try:
|
||||||
raw_keys, value = raw_override.split('=', 1)
|
raw_keys, value = raw_override.split('=', 1)
|
||||||
parsed_overrides.append((tuple(raw_keys.split('.')), convert_value_type(value),))
|
parsed_overrides.append(
|
||||||
|
(
|
||||||
|
tuple(raw_keys.split('.')),
|
||||||
|
convert_value_type(value),
|
||||||
|
)
|
||||||
|
)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
f"Invalid override '{raw_override}'. Make sure you use the form: SECTION.OPTION=VALUE"
|
f"Invalid override '{raw_override}'. Make sure you use the form: SECTION.OPTION=VALUE"
|
||||||
|
@ -75,5 +80,5 @@ def apply_overrides(config, raw_overrides):
|
||||||
'''
|
'''
|
||||||
overrides = parse_overrides(raw_overrides)
|
overrides = parse_overrides(raw_overrides)
|
||||||
|
|
||||||
for (keys, value) in overrides:
|
for keys, value in overrides:
|
||||||
set_values(config, keys, value)
|
set_values(config, keys, value)
|
||||||
|
|
|
@ -236,7 +236,11 @@ def execute_command(
|
||||||
|
|
||||||
|
|
||||||
def execute_command_and_capture_output(
|
def execute_command_and_capture_output(
|
||||||
full_command, capture_stderr=False, shell=False, extra_environment=None, working_directory=None,
|
full_command,
|
||||||
|
capture_stderr=False,
|
||||||
|
shell=False,
|
||||||
|
extra_environment=None,
|
||||||
|
working_directory=None,
|
||||||
):
|
):
|
||||||
'''
|
'''
|
||||||
Execute the given command (a sequence of command/argument strings), capturing and returning its
|
Execute the given command (a sequence of command/argument strings), capturing and returning its
|
||||||
|
|
|
@ -100,7 +100,9 @@ def execute_dump_command(
|
||||||
dump.create_named_pipe_for_dump(dump_filename)
|
dump.create_named_pipe_for_dump(dump_filename)
|
||||||
|
|
||||||
return execute_command(
|
return execute_command(
|
||||||
dump_command, extra_environment=extra_environment, run_to_completion=False,
|
dump_command,
|
||||||
|
extra_environment=extra_environment,
|
||||||
|
run_to_completion=False,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -123,7 +123,12 @@ def dump_databases(databases, log_prefix, location_config, dry_run):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
command = (
|
command = (
|
||||||
(dump_command, '--no-password', '--clean', '--if-exists',)
|
(
|
||||||
|
dump_command,
|
||||||
|
'--no-password',
|
||||||
|
'--clean',
|
||||||
|
'--if-exists',
|
||||||
|
)
|
||||||
+ (('--host', database['hostname']) if 'hostname' in database else ())
|
+ (('--host', database['hostname']) if 'hostname' in database else ())
|
||||||
+ (('--port', str(database['port'])) if 'port' in database else ())
|
+ (('--port', str(database['port'])) if 'port' in database else ())
|
||||||
+ (('--username', database['username']) if 'username' in database else ())
|
+ (('--username', database['username']) if 'username' in database else ())
|
||||||
|
@ -146,7 +151,9 @@ def dump_databases(databases, log_prefix, location_config, dry_run):
|
||||||
if dump_format == 'directory':
|
if dump_format == 'directory':
|
||||||
dump.create_parent_directory_for_dump(dump_filename)
|
dump.create_parent_directory_for_dump(dump_filename)
|
||||||
execute_command(
|
execute_command(
|
||||||
command, shell=True, extra_environment=extra_environment,
|
command,
|
||||||
|
shell=True,
|
||||||
|
extra_environment=extra_environment,
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
dump.create_named_pipe_for_dump(dump_filename)
|
dump.create_named_pipe_for_dump(dump_filename)
|
||||||
|
|
11
setup.cfg
11
setup.cfg
|
@ -8,18 +8,21 @@ filterwarnings =
|
||||||
ignore:Deprecated call to `pkg_resources.declare_namespace\('ruamel'\)`.*:DeprecationWarning
|
ignore:Deprecated call to `pkg_resources.declare_namespace\('ruamel'\)`.*:DeprecationWarning
|
||||||
|
|
||||||
[flake8]
|
[flake8]
|
||||||
ignore = E501,W503
|
max-line-length = 100
|
||||||
|
extend-ignore = E203,E501,W503
|
||||||
exclude = *.*/*
|
exclude = *.*/*
|
||||||
multiline-quotes = '''
|
multiline-quotes = '''
|
||||||
docstring-quotes = '''
|
docstring-quotes = '''
|
||||||
|
|
||||||
[tool:isort]
|
[tool:isort]
|
||||||
force_single_line = False
|
profile=black
|
||||||
include_trailing_comma = True
|
|
||||||
known_first_party = borgmatic
|
known_first_party = borgmatic
|
||||||
line_length = 100
|
line_length = 100
|
||||||
multi_line_output = 3
|
|
||||||
skip = .tox
|
skip = .tox
|
||||||
|
|
||||||
[codespell]
|
[codespell]
|
||||||
skip = .git,.tox,build
|
skip = .git,.tox,build
|
||||||
|
|
||||||
|
[pycodestyle]
|
||||||
|
ignore = E203
|
||||||
|
max_line_length = 100
|
||||||
|
|
|
@ -1,27 +1,29 @@
|
||||||
appdirs==1.4.4; python_version >= '3.8'
|
appdirs==1.4.4; python_version >= '3.8'
|
||||||
attrs==20.3.0; python_version >= '3.8'
|
attrs==22.2.0; python_version >= '3.8'
|
||||||
black==19.10b0; python_version >= '3.8'
|
black==23.3.0; python_version >= '3.8'
|
||||||
click==7.1.2; python_version >= '3.8'
|
chardet==5.1.0
|
||||||
|
click==8.1.3; python_version >= '3.8'
|
||||||
codespell==2.2.4
|
codespell==2.2.4
|
||||||
colorama==0.4.4
|
colorama==0.4.6
|
||||||
coverage==5.3
|
coverage==7.2.3
|
||||||
flake8==4.0.1
|
flake8==6.0.0
|
||||||
flake8-quotes==3.3.2
|
flake8-quotes==3.3.2
|
||||||
flake8-use-fstring==1.4
|
flake8-use-fstring==1.4
|
||||||
flake8-variables-names==0.0.5
|
flake8-variables-names==0.0.5
|
||||||
flexmock==0.10.4
|
flexmock==0.11.3
|
||||||
isort==5.9.1
|
idna==3.4
|
||||||
mccabe==0.6.1
|
isort==5.12.0
|
||||||
pluggy==0.13.1
|
mccabe==0.7.0
|
||||||
pathspec==0.8.1; python_version >= '3.8'
|
pluggy==1.0.0
|
||||||
py==1.10.0
|
pathspec==0.11.1; python_version >= '3.8'
|
||||||
pycodestyle==2.8.0
|
py==1.11.0
|
||||||
pyflakes==2.4.0
|
pycodestyle==2.10.0
|
||||||
jsonschema==3.2.0
|
pyflakes==3.0.1
|
||||||
pytest==7.2.0
|
jsonschema==4.17.3
|
||||||
|
pytest==7.3.0
|
||||||
pytest-cov==4.0.0
|
pytest-cov==4.0.0
|
||||||
regex; python_version >= '3.8'
|
regex; python_version >= '3.8'
|
||||||
requests==2.25.0
|
requests==2.28.2
|
||||||
ruamel.yaml>0.15.0,<0.18.0
|
ruamel.yaml>0.15.0,<0.18.0
|
||||||
toml==0.10.2; python_version >= '3.8'
|
toml==0.10.2; python_version >= '3.8'
|
||||||
typed-ast; python_version >= '3.8'
|
typed-ast; python_version >= '3.8'
|
||||||
|
|
|
@ -12,7 +12,11 @@ def test_run_check_calls_hooks_for_configured_repository():
|
||||||
flexmock(module.borgmatic.borg.check).should_receive('check_archives').once()
|
flexmock(module.borgmatic.borg.check).should_receive('check_archives').once()
|
||||||
flexmock(module.borgmatic.hooks.command).should_receive('execute_hook').times(2)
|
flexmock(module.borgmatic.hooks.command).should_receive('execute_hook').times(2)
|
||||||
check_arguments = flexmock(
|
check_arguments = flexmock(
|
||||||
repository=None, progress=flexmock(), repair=flexmock(), only=flexmock(), force=flexmock(),
|
repository=None,
|
||||||
|
progress=flexmock(),
|
||||||
|
repair=flexmock(),
|
||||||
|
only=flexmock(),
|
||||||
|
force=flexmock(),
|
||||||
)
|
)
|
||||||
global_arguments = flexmock(monitoring_verbosity=1, dry_run=False)
|
global_arguments = flexmock(monitoring_verbosity=1, dry_run=False)
|
||||||
|
|
||||||
|
|
|
@ -148,7 +148,8 @@ def test_find_databases_to_restore_without_requested_names_finds_all_archive_dat
|
||||||
archive_database_names = {'postresql_databases': ['foo', 'bar']}
|
archive_database_names = {'postresql_databases': ['foo', 'bar']}
|
||||||
|
|
||||||
restore_names = module.find_databases_to_restore(
|
restore_names = module.find_databases_to_restore(
|
||||||
requested_database_names=[], archive_database_names=archive_database_names,
|
requested_database_names=[],
|
||||||
|
archive_database_names=archive_database_names,
|
||||||
)
|
)
|
||||||
|
|
||||||
assert restore_names == archive_database_names
|
assert restore_names == archive_database_names
|
||||||
|
@ -158,7 +159,8 @@ def test_find_databases_to_restore_with_all_in_requested_names_finds_all_archive
|
||||||
archive_database_names = {'postresql_databases': ['foo', 'bar']}
|
archive_database_names = {'postresql_databases': ['foo', 'bar']}
|
||||||
|
|
||||||
restore_names = module.find_databases_to_restore(
|
restore_names = module.find_databases_to_restore(
|
||||||
requested_database_names=['all'], archive_database_names=archive_database_names,
|
requested_database_names=['all'],
|
||||||
|
archive_database_names=archive_database_names,
|
||||||
)
|
)
|
||||||
|
|
||||||
assert restore_names == archive_database_names
|
assert restore_names == archive_database_names
|
||||||
|
@ -194,7 +196,9 @@ def test_ensure_databases_found_with_all_databases_found_does_not_raise():
|
||||||
def test_ensure_databases_found_with_no_databases_raises():
|
def test_ensure_databases_found_with_no_databases_raises():
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
module.ensure_databases_found(
|
module.ensure_databases_found(
|
||||||
restore_names={'postgresql_databases': []}, remaining_restore_names={}, found_names=[],
|
restore_names={'postgresql_databases': []},
|
||||||
|
remaining_restore_names={},
|
||||||
|
found_names=[],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -222,7 +222,10 @@ def test_run_arbitrary_borg_without_borg_specific_parameters_does_not_raise():
|
||||||
)
|
)
|
||||||
|
|
||||||
module.run_arbitrary_borg(
|
module.run_arbitrary_borg(
|
||||||
repository_path='repo', storage_config={}, local_borg_version='1.2.3', options=[],
|
repository_path='repo',
|
||||||
|
storage_config={},
|
||||||
|
local_borg_version='1.2.3',
|
||||||
|
options=[],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,9 @@ from ..test_verbosity import insert_logging_mock
|
||||||
def insert_execute_command_mock(command):
|
def insert_execute_command_mock(command):
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command').with_args(
|
flexmock(module).should_receive('execute_command').with_args(
|
||||||
command, borg_local_path='borg', extra_environment=None,
|
command,
|
||||||
|
borg_local_path='borg',
|
||||||
|
extra_environment=None,
|
||||||
).once()
|
).once()
|
||||||
|
|
||||||
|
|
||||||
|
@ -19,7 +21,9 @@ def test_break_lock_calls_borg_with_required_flags():
|
||||||
insert_execute_command_mock(('borg', 'break-lock', 'repo'))
|
insert_execute_command_mock(('borg', 'break-lock', 'repo'))
|
||||||
|
|
||||||
module.break_lock(
|
module.break_lock(
|
||||||
repository_path='repo', storage_config={}, local_borg_version='1.2.3',
|
repository_path='repo',
|
||||||
|
storage_config={},
|
||||||
|
local_borg_version='1.2.3',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,7 +32,10 @@ def test_break_lock_calls_borg_with_remote_path_flags():
|
||||||
insert_execute_command_mock(('borg', 'break-lock', '--remote-path', 'borg1', 'repo'))
|
insert_execute_command_mock(('borg', 'break-lock', '--remote-path', 'borg1', 'repo'))
|
||||||
|
|
||||||
module.break_lock(
|
module.break_lock(
|
||||||
repository_path='repo', storage_config={}, local_borg_version='1.2.3', remote_path='borg1',
|
repository_path='repo',
|
||||||
|
storage_config={},
|
||||||
|
local_borg_version='1.2.3',
|
||||||
|
remote_path='borg1',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -37,7 +44,9 @@ def test_break_lock_calls_borg_with_umask_flags():
|
||||||
insert_execute_command_mock(('borg', 'break-lock', '--umask', '0770', 'repo'))
|
insert_execute_command_mock(('borg', 'break-lock', '--umask', '0770', 'repo'))
|
||||||
|
|
||||||
module.break_lock(
|
module.break_lock(
|
||||||
repository_path='repo', storage_config={'umask': '0770'}, local_borg_version='1.2.3',
|
repository_path='repo',
|
||||||
|
storage_config={'umask': '0770'},
|
||||||
|
local_borg_version='1.2.3',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -46,7 +55,9 @@ def test_break_lock_calls_borg_with_lock_wait_flags():
|
||||||
insert_execute_command_mock(('borg', 'break-lock', '--lock-wait', '5', 'repo'))
|
insert_execute_command_mock(('borg', 'break-lock', '--lock-wait', '5', 'repo'))
|
||||||
|
|
||||||
module.break_lock(
|
module.break_lock(
|
||||||
repository_path='repo', storage_config={'lock_wait': '5'}, local_borg_version='1.2.3',
|
repository_path='repo',
|
||||||
|
storage_config={'lock_wait': '5'},
|
||||||
|
local_borg_version='1.2.3',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -56,7 +67,9 @@ def test_break_lock_with_log_info_calls_borg_with_info_parameter():
|
||||||
insert_logging_mock(logging.INFO)
|
insert_logging_mock(logging.INFO)
|
||||||
|
|
||||||
module.break_lock(
|
module.break_lock(
|
||||||
repository_path='repo', storage_config={}, local_borg_version='1.2.3',
|
repository_path='repo',
|
||||||
|
storage_config={},
|
||||||
|
local_borg_version='1.2.3',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -66,5 +79,7 @@ def test_break_lock_with_log_debug_calls_borg_with_debug_flags():
|
||||||
insert_logging_mock(logging.DEBUG)
|
insert_logging_mock(logging.DEBUG)
|
||||||
|
|
||||||
module.break_lock(
|
module.break_lock(
|
||||||
repository_path='repo', storage_config={}, local_borg_version='1.2.3',
|
repository_path='repo',
|
||||||
|
storage_config={},
|
||||||
|
local_borg_version='1.2.3',
|
||||||
)
|
)
|
||||||
|
|
|
@ -79,7 +79,12 @@ def test_parse_frequency_parses_into_timedeltas(frequency, expected_result):
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
'frequency', ('sometime', 'x days', '3 decades',),
|
'frequency',
|
||||||
|
(
|
||||||
|
'sometime',
|
||||||
|
'x days',
|
||||||
|
'3 decades',
|
||||||
|
),
|
||||||
)
|
)
|
||||||
def test_parse_frequency_raises_on_parse_error(frequency):
|
def test_parse_frequency_raises_on_parse_error(frequency):
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
|
@ -211,7 +216,10 @@ def test_make_check_flags_with_data_check_returns_flag_and_implies_archives():
|
||||||
|
|
||||||
flags = module.make_check_flags('1.2.3', {}, ('data',))
|
flags = module.make_check_flags('1.2.3', {}, ('data',))
|
||||||
|
|
||||||
assert flags == ('--archives-only', '--verify-data',)
|
assert flags == (
|
||||||
|
'--archives-only',
|
||||||
|
'--verify-data',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_make_check_flags_with_extract_omits_extract_flag():
|
def test_make_check_flags_with_extract_omits_extract_flag():
|
||||||
|
@ -227,7 +235,14 @@ def test_make_check_flags_with_repository_and_data_checks_does_not_return_reposi
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
||||||
|
|
||||||
flags = module.make_check_flags('1.2.3', {}, ('repository', 'data',))
|
flags = module.make_check_flags(
|
||||||
|
'1.2.3',
|
||||||
|
{},
|
||||||
|
(
|
||||||
|
'repository',
|
||||||
|
'data',
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
assert flags == ('--verify-data',)
|
assert flags == ('--verify-data',)
|
||||||
|
|
||||||
|
@ -236,7 +251,12 @@ def test_make_check_flags_with_default_checks_and_prefix_returns_default_flags()
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
||||||
|
|
||||||
flags = module.make_check_flags('1.2.3', {}, ('repository', 'archives'), prefix='foo',)
|
flags = module.make_check_flags(
|
||||||
|
'1.2.3',
|
||||||
|
{},
|
||||||
|
('repository', 'archives'),
|
||||||
|
prefix='foo',
|
||||||
|
)
|
||||||
|
|
||||||
assert flags == ('--match-archives', 'sh:foo*')
|
assert flags == ('--match-archives', 'sh:foo*')
|
||||||
|
|
||||||
|
@ -246,7 +266,10 @@ def test_make_check_flags_with_all_checks_and_prefix_returns_default_flags():
|
||||||
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
||||||
|
|
||||||
flags = module.make_check_flags(
|
flags = module.make_check_flags(
|
||||||
'1.2.3', {}, ('repository', 'archives', 'extract'), prefix='foo',
|
'1.2.3',
|
||||||
|
{},
|
||||||
|
('repository', 'archives', 'extract'),
|
||||||
|
prefix='foo',
|
||||||
)
|
)
|
||||||
|
|
||||||
assert flags == ('--match-archives', 'sh:foo*')
|
assert flags == ('--match-archives', 'sh:foo*')
|
||||||
|
@ -257,7 +280,10 @@ def test_make_check_flags_with_all_checks_and_prefix_without_borg_features_retur
|
||||||
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
flexmock(module.flags).should_receive('make_match_archives_flags').and_return(())
|
||||||
|
|
||||||
flags = module.make_check_flags(
|
flags = module.make_check_flags(
|
||||||
'1.2.3', {}, ('repository', 'archives', 'extract'), prefix='foo',
|
'1.2.3',
|
||||||
|
{},
|
||||||
|
('repository', 'archives', 'extract'),
|
||||||
|
prefix='foo',
|
||||||
)
|
)
|
||||||
|
|
||||||
assert flags == ('--glob-archives', 'foo*')
|
assert flags == ('--glob-archives', 'foo*')
|
||||||
|
@ -447,7 +473,11 @@ def test_check_archives_calls_borg_with_parameters(checks):
|
||||||
'{"repository": {"id": "repo"}}'
|
'{"repository": {"id": "repo"}}'
|
||||||
)
|
)
|
||||||
flexmock(module).should_receive('make_check_flags').with_args(
|
flexmock(module).should_receive('make_check_flags').with_args(
|
||||||
'1.2.3', {}, checks, check_last, prefix=None,
|
'1.2.3',
|
||||||
|
{},
|
||||||
|
checks,
|
||||||
|
check_last,
|
||||||
|
prefix=None,
|
||||||
).and_return(())
|
).and_return(())
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
||||||
insert_execute_command_mock(('borg', 'check', 'repo'))
|
insert_execute_command_mock(('borg', 'check', 'repo'))
|
||||||
|
@ -601,7 +631,11 @@ def test_check_archives_with_local_path_calls_borg_via_local_path():
|
||||||
'{"repository": {"id": "repo"}}'
|
'{"repository": {"id": "repo"}}'
|
||||||
)
|
)
|
||||||
flexmock(module).should_receive('make_check_flags').with_args(
|
flexmock(module).should_receive('make_check_flags').with_args(
|
||||||
'1.2.3', {}, checks, check_last, prefix=None,
|
'1.2.3',
|
||||||
|
{},
|
||||||
|
checks,
|
||||||
|
check_last,
|
||||||
|
prefix=None,
|
||||||
).and_return(())
|
).and_return(())
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
||||||
insert_execute_command_mock(('borg1', 'check', 'repo'))
|
insert_execute_command_mock(('borg1', 'check', 'repo'))
|
||||||
|
@ -628,7 +662,11 @@ def test_check_archives_with_remote_path_calls_borg_with_remote_path_parameters(
|
||||||
'{"repository": {"id": "repo"}}'
|
'{"repository": {"id": "repo"}}'
|
||||||
)
|
)
|
||||||
flexmock(module).should_receive('make_check_flags').with_args(
|
flexmock(module).should_receive('make_check_flags').with_args(
|
||||||
'1.2.3', {}, checks, check_last, prefix=None,
|
'1.2.3',
|
||||||
|
{},
|
||||||
|
checks,
|
||||||
|
check_last,
|
||||||
|
prefix=None,
|
||||||
).and_return(())
|
).and_return(())
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
||||||
insert_execute_command_mock(('borg', 'check', '--remote-path', 'borg1', 'repo'))
|
insert_execute_command_mock(('borg', 'check', '--remote-path', 'borg1', 'repo'))
|
||||||
|
@ -656,7 +694,11 @@ def test_check_archives_with_lock_wait_calls_borg_with_lock_wait_parameters():
|
||||||
'{"repository": {"id": "repo"}}'
|
'{"repository": {"id": "repo"}}'
|
||||||
)
|
)
|
||||||
flexmock(module).should_receive('make_check_flags').with_args(
|
flexmock(module).should_receive('make_check_flags').with_args(
|
||||||
'1.2.3', storage_config, checks, check_last, None,
|
'1.2.3',
|
||||||
|
storage_config,
|
||||||
|
checks,
|
||||||
|
check_last,
|
||||||
|
None,
|
||||||
).and_return(())
|
).and_return(())
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
||||||
insert_execute_command_mock(('borg', 'check', '--lock-wait', '5', 'repo'))
|
insert_execute_command_mock(('borg', 'check', '--lock-wait', '5', 'repo'))
|
||||||
|
|
|
@ -1053,7 +1053,8 @@ def test_create_archive_with_compression_calls_borg_with_compression_parameters(
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
'feature_available,option_flag', ((True, '--upload-ratelimit'), (False, '--remote-ratelimit')),
|
'feature_available,option_flag',
|
||||||
|
((True, '--upload-ratelimit'), (False, '--remote-ratelimit')),
|
||||||
)
|
)
|
||||||
def test_create_archive_with_upload_rate_limit_calls_borg_with_upload_ratelimit_parameters(
|
def test_create_archive_with_upload_rate_limit_calls_borg_with_upload_ratelimit_parameters(
|
||||||
feature_available, option_flag
|
feature_available, option_flag
|
||||||
|
@ -1188,7 +1189,8 @@ def test_create_archive_with_one_file_system_calls_borg_with_one_file_system_par
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
'feature_available,option_flag', ((True, '--numeric-ids'), (False, '--numeric-owner')),
|
'feature_available,option_flag',
|
||||||
|
((True, '--numeric-ids'), (False, '--numeric-owner')),
|
||||||
)
|
)
|
||||||
def test_create_archive_with_numeric_ids_calls_borg_with_numeric_ids_parameter(
|
def test_create_archive_with_numeric_ids_calls_borg_with_numeric_ids_parameter(
|
||||||
feature_available, option_flag
|
feature_available, option_flag
|
||||||
|
@ -1290,7 +1292,12 @@ def test_create_archive_with_read_special_calls_borg_with_read_special_parameter
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
'option_name,option_value',
|
'option_name,option_value',
|
||||||
(('ctime', True), ('ctime', False), ('birthtime', True), ('birthtime', False),),
|
(
|
||||||
|
('ctime', True),
|
||||||
|
('ctime', False),
|
||||||
|
('birthtime', True),
|
||||||
|
('birthtime', False),
|
||||||
|
),
|
||||||
)
|
)
|
||||||
def test_create_archive_with_basic_option_calls_borg_with_corresponding_parameter(
|
def test_create_archive_with_basic_option_calls_borg_with_corresponding_parameter(
|
||||||
option_name, option_value
|
option_name, option_value
|
||||||
|
@ -1766,7 +1773,12 @@ def test_create_archive_with_progress_and_log_info_calls_borg_with_progress_para
|
||||||
)
|
)
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command').with_args(
|
flexmock(module).should_receive('execute_command').with_args(
|
||||||
('borg', 'create') + REPO_ARCHIVE_WITH_PATHS + ('--info', '--progress',),
|
('borg', 'create')
|
||||||
|
+ REPO_ARCHIVE_WITH_PATHS
|
||||||
|
+ (
|
||||||
|
'--info',
|
||||||
|
'--progress',
|
||||||
|
),
|
||||||
output_log_level=logging.INFO,
|
output_log_level=logging.INFO,
|
||||||
output_file=module.DO_NOT_CAPTURE,
|
output_file=module.DO_NOT_CAPTURE,
|
||||||
borg_local_path='borg',
|
borg_local_path='borg',
|
||||||
|
|
|
@ -11,7 +11,9 @@ from ..test_verbosity import insert_logging_mock
|
||||||
def insert_execute_command_mock(command, working_directory=None):
|
def insert_execute_command_mock(command, working_directory=None):
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command').with_args(
|
flexmock(module).should_receive('execute_command').with_args(
|
||||||
command, working_directory=working_directory, extra_environment=None,
|
command,
|
||||||
|
working_directory=working_directory,
|
||||||
|
extra_environment=None,
|
||||||
).once()
|
).once()
|
||||||
|
|
||||||
|
|
||||||
|
@ -152,7 +154,11 @@ def test_extract_archive_calls_borg_with_remote_path_parameters():
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
'feature_available,option_flag', ((True, '--numeric-ids'), (False, '--numeric-owner'),),
|
'feature_available,option_flag',
|
||||||
|
(
|
||||||
|
(True, '--numeric-ids'),
|
||||||
|
(False, '--numeric-owner'),
|
||||||
|
),
|
||||||
)
|
)
|
||||||
def test_extract_archive_calls_borg_with_numeric_ids_parameter(feature_available, option_flag):
|
def test_extract_archive_calls_borg_with_numeric_ids_parameter(feature_available, option_flag):
|
||||||
flexmock(module.os.path).should_receive('abspath').and_return('repo')
|
flexmock(module.os.path).should_receive('abspath').and_return('repo')
|
||||||
|
@ -441,7 +447,9 @@ def test_extract_archive_skips_abspath_for_remote_repository():
|
||||||
flexmock(module.os.path).should_receive('abspath').never()
|
flexmock(module.os.path).should_receive('abspath').never()
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command').with_args(
|
flexmock(module).should_receive('execute_command').with_args(
|
||||||
('borg', 'extract', 'server:repo::archive'), working_directory=None, extra_environment=None,
|
('borg', 'extract', 'server:repo::archive'),
|
||||||
|
working_directory=None,
|
||||||
|
extra_environment=None,
|
||||||
).once()
|
).once()
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_archive_flags').and_return(
|
flexmock(module.flags).should_receive('make_repository_archive_flags').and_return(
|
||||||
|
|
|
@ -70,7 +70,11 @@ def test_make_repository_archive_flags_with_borg_features_separates_repository_a
|
||||||
|
|
||||||
assert module.make_repository_archive_flags(
|
assert module.make_repository_archive_flags(
|
||||||
repository_path='repo', archive='archive', local_borg_version='1.2.3'
|
repository_path='repo', archive='archive', local_borg_version='1.2.3'
|
||||||
) == ('--repo', 'repo', 'archive',)
|
) == (
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
'archive',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_make_repository_archive_flags_with_borg_features_joins_repository_and_archive():
|
def test_make_repository_archive_flags_with_borg_features_joins_repository_and_archive():
|
||||||
|
@ -86,9 +90,24 @@ def test_make_repository_archive_flags_with_borg_features_joins_repository_and_a
|
||||||
(
|
(
|
||||||
(None, None, True, ()),
|
(None, None, True, ()),
|
||||||
(None, '', True, ()),
|
(None, '', True, ()),
|
||||||
('re:foo-.*', '{hostname}-{now}', True, ('--match-archives', 're:foo-.*'),), # noqa: FS003
|
(
|
||||||
('sh:foo-*', '{hostname}-{now}', False, ('--glob-archives', 'foo-*'),), # noqa: FS003
|
're:foo-.*',
|
||||||
('foo-*', '{hostname}-{now}', False, ('--glob-archives', 'foo-*'),), # noqa: FS003
|
'{hostname}-{now}',
|
||||||
|
True,
|
||||||
|
('--match-archives', 're:foo-.*'),
|
||||||
|
), # noqa: FS003
|
||||||
|
(
|
||||||
|
'sh:foo-*',
|
||||||
|
'{hostname}-{now}',
|
||||||
|
False,
|
||||||
|
('--glob-archives', 'foo-*'),
|
||||||
|
), # noqa: FS003
|
||||||
|
(
|
||||||
|
'foo-*',
|
||||||
|
'{hostname}-{now}',
|
||||||
|
False,
|
||||||
|
('--glob-archives', 'foo-*'),
|
||||||
|
), # noqa: FS003
|
||||||
(
|
(
|
||||||
None,
|
None,
|
||||||
'{hostname}-docs-{now}', # noqa: FS003
|
'{hostname}-docs-{now}', # noqa: FS003
|
||||||
|
|
|
@ -69,7 +69,8 @@ def test_display_archives_info_with_log_info_and_json_suppresses_most_borg_outpu
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
||||||
('borg', 'info', '--json', '--repo', 'repo'), extra_environment=None,
|
('borg', 'info', '--json', '--repo', 'repo'),
|
||||||
|
extra_environment=None,
|
||||||
).and_return('[]')
|
).and_return('[]')
|
||||||
|
|
||||||
insert_logging_mock(logging.INFO)
|
insert_logging_mock(logging.INFO)
|
||||||
|
@ -120,7 +121,8 @@ def test_display_archives_info_with_log_debug_and_json_suppresses_most_borg_outp
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
||||||
('borg', 'info', '--json', '--repo', 'repo'), extra_environment=None,
|
('borg', 'info', '--json', '--repo', 'repo'),
|
||||||
|
extra_environment=None,
|
||||||
).and_return('[]')
|
).and_return('[]')
|
||||||
|
|
||||||
insert_logging_mock(logging.DEBUG)
|
insert_logging_mock(logging.DEBUG)
|
||||||
|
@ -145,7 +147,8 @@ def test_display_archives_info_with_json_calls_borg_with_json_parameter():
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo'))
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
||||||
('borg', 'info', '--json', '--repo', 'repo'), extra_environment=None,
|
('borg', 'info', '--json', '--repo', 'repo'),
|
||||||
|
extra_environment=None,
|
||||||
).and_return('[]')
|
).and_return('[]')
|
||||||
|
|
||||||
json_output = module.display_archives_info(
|
json_output = module.display_archives_info(
|
||||||
|
|
|
@ -387,7 +387,8 @@ def test_list_archive_calls_borg_multiple_times_with_find_paths():
|
||||||
flexmock(module.feature).should_receive('available').and_return(False)
|
flexmock(module.feature).should_receive('available').and_return(False)
|
||||||
flexmock(module.rlist).should_receive('make_rlist_command').and_return(('borg', 'list', 'repo'))
|
flexmock(module.rlist).should_receive('make_rlist_command').and_return(('borg', 'list', 'repo'))
|
||||||
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
||||||
('borg', 'list', 'repo'), extra_environment=None,
|
('borg', 'list', 'repo'),
|
||||||
|
extra_environment=None,
|
||||||
).and_return('archive1\narchive2').once()
|
).and_return('archive1\narchive2').once()
|
||||||
flexmock(module).should_receive('make_list_command').and_return(
|
flexmock(module).should_receive('make_list_command').and_return(
|
||||||
('borg', 'list', 'repo::archive1')
|
('borg', 'list', 'repo::archive1')
|
||||||
|
@ -518,9 +519,18 @@ def test_list_archive_with_borg_features_without_archive_delegates_to_list_repos
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
'archive_filter_flag', ('prefix', 'match_archives', 'sort_by', 'first', 'last',),
|
'archive_filter_flag',
|
||||||
|
(
|
||||||
|
'prefix',
|
||||||
|
'match_archives',
|
||||||
|
'sort_by',
|
||||||
|
'first',
|
||||||
|
'last',
|
||||||
|
),
|
||||||
)
|
)
|
||||||
def test_list_archive_with_archive_ignores_archive_filter_flag(archive_filter_flag,):
|
def test_list_archive_with_archive_ignores_archive_filter_flag(
|
||||||
|
archive_filter_flag,
|
||||||
|
):
|
||||||
flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
|
flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
|
||||||
flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
|
flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
|
||||||
flexmock(module.logger).answer = lambda message: None
|
flexmock(module.logger).answer = lambda message: None
|
||||||
|
@ -566,7 +576,14 @@ def test_list_archive_with_archive_ignores_archive_filter_flag(archive_filter_fl
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
'archive_filter_flag', ('prefix', 'match_archives', 'sort_by', 'first', 'last',),
|
'archive_filter_flag',
|
||||||
|
(
|
||||||
|
'prefix',
|
||||||
|
'match_archives',
|
||||||
|
'sort_by',
|
||||||
|
'first',
|
||||||
|
'last',
|
||||||
|
),
|
||||||
)
|
)
|
||||||
def test_list_archive_with_find_paths_allows_archive_filter_flag_but_only_passes_it_to_rlist(
|
def test_list_archive_with_find_paths_allows_archive_filter_flag_but_only_passes_it_to_rlist(
|
||||||
archive_filter_flag,
|
archive_filter_flag,
|
||||||
|
@ -597,7 +614,8 @@ def test_list_archive_with_find_paths_allows_archive_filter_flag_but_only_passes
|
||||||
).and_return(('borg', 'rlist', '--repo', 'repo'))
|
).and_return(('borg', 'rlist', '--repo', 'repo'))
|
||||||
|
|
||||||
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
||||||
('borg', 'rlist', '--repo', 'repo'), extra_environment=None,
|
('borg', 'rlist', '--repo', 'repo'),
|
||||||
|
extra_environment=None,
|
||||||
).and_return('archive1\narchive2').once()
|
).and_return('archive1\narchive2').once()
|
||||||
|
|
||||||
flexmock(module).should_receive('make_list_command').with_args(
|
flexmock(module).should_receive('make_list_command').with_args(
|
||||||
|
|
|
@ -10,7 +10,9 @@ from ..test_verbosity import insert_logging_mock
|
||||||
def insert_execute_command_mock(command):
|
def insert_execute_command_mock(command):
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command').with_args(
|
flexmock(module).should_receive('execute_command').with_args(
|
||||||
command, borg_local_path='borg', extra_environment=None,
|
command,
|
||||||
|
borg_local_path='borg',
|
||||||
|
extra_environment=None,
|
||||||
).once()
|
).once()
|
||||||
|
|
||||||
|
|
||||||
|
@ -33,7 +35,12 @@ def test_mount_archive_calls_borg_with_required_flags():
|
||||||
|
|
||||||
def test_mount_archive_with_borg_features_calls_borg_with_repository_and_match_archives_flags():
|
def test_mount_archive_with_borg_features_calls_borg_with_repository_and_match_archives_flags():
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
insert_execute_command_mock(
|
insert_execute_command_mock(
|
||||||
('borg', 'mount', '--repo', 'repo', '--match-archives', 'archive', '/mnt')
|
('borg', 'mount', '--repo', 'repo', '--match-archives', 'archive', '/mnt')
|
||||||
)
|
)
|
||||||
|
|
|
@ -36,7 +36,12 @@ def test_create_repository_calls_borg_with_flags():
|
||||||
insert_rinfo_command_not_found_mock()
|
insert_rinfo_command_not_found_mock()
|
||||||
insert_rcreate_command_mock(RCREATE_COMMAND + ('--repo', 'repo'))
|
insert_rcreate_command_mock(RCREATE_COMMAND + ('--repo', 'repo'))
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
module.create_repository(
|
module.create_repository(
|
||||||
dry_run=False,
|
dry_run=False,
|
||||||
|
@ -51,7 +56,12 @@ def test_create_repository_with_dry_run_skips_borg_call():
|
||||||
insert_rinfo_command_not_found_mock()
|
insert_rinfo_command_not_found_mock()
|
||||||
flexmock(module).should_receive('execute_command').never()
|
flexmock(module).should_receive('execute_command').never()
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
module.create_repository(
|
module.create_repository(
|
||||||
dry_run=True,
|
dry_run=True,
|
||||||
|
@ -65,7 +75,12 @@ def test_create_repository_with_dry_run_skips_borg_call():
|
||||||
def test_create_repository_raises_for_borg_rcreate_error():
|
def test_create_repository_raises_for_borg_rcreate_error():
|
||||||
insert_rinfo_command_not_found_mock()
|
insert_rinfo_command_not_found_mock()
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command').and_raise(
|
flexmock(module).should_receive('execute_command').and_raise(
|
||||||
module.subprocess.CalledProcessError(2, 'borg rcreate')
|
module.subprocess.CalledProcessError(2, 'borg rcreate')
|
||||||
|
@ -84,7 +99,12 @@ def test_create_repository_raises_for_borg_rcreate_error():
|
||||||
def test_create_repository_skips_creation_when_repository_already_exists():
|
def test_create_repository_skips_creation_when_repository_already_exists():
|
||||||
insert_rinfo_command_found_mock()
|
insert_rinfo_command_found_mock()
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
module.create_repository(
|
module.create_repository(
|
||||||
dry_run=False,
|
dry_run=False,
|
||||||
|
@ -114,7 +134,12 @@ def test_create_repository_with_source_repository_calls_borg_with_other_repo_fla
|
||||||
insert_rinfo_command_not_found_mock()
|
insert_rinfo_command_not_found_mock()
|
||||||
insert_rcreate_command_mock(RCREATE_COMMAND + ('--other-repo', 'other.borg', '--repo', 'repo'))
|
insert_rcreate_command_mock(RCREATE_COMMAND + ('--other-repo', 'other.borg', '--repo', 'repo'))
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
module.create_repository(
|
module.create_repository(
|
||||||
dry_run=False,
|
dry_run=False,
|
||||||
|
@ -130,7 +155,12 @@ def test_create_repository_with_copy_crypt_key_calls_borg_with_copy_crypt_key_fl
|
||||||
insert_rinfo_command_not_found_mock()
|
insert_rinfo_command_not_found_mock()
|
||||||
insert_rcreate_command_mock(RCREATE_COMMAND + ('--copy-crypt-key', '--repo', 'repo'))
|
insert_rcreate_command_mock(RCREATE_COMMAND + ('--copy-crypt-key', '--repo', 'repo'))
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
module.create_repository(
|
module.create_repository(
|
||||||
dry_run=False,
|
dry_run=False,
|
||||||
|
@ -146,7 +176,12 @@ def test_create_repository_with_append_only_calls_borg_with_append_only_flag():
|
||||||
insert_rinfo_command_not_found_mock()
|
insert_rinfo_command_not_found_mock()
|
||||||
insert_rcreate_command_mock(RCREATE_COMMAND + ('--append-only', '--repo', 'repo'))
|
insert_rcreate_command_mock(RCREATE_COMMAND + ('--append-only', '--repo', 'repo'))
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
module.create_repository(
|
module.create_repository(
|
||||||
dry_run=False,
|
dry_run=False,
|
||||||
|
@ -162,7 +197,12 @@ def test_create_repository_with_storage_quota_calls_borg_with_storage_quota_flag
|
||||||
insert_rinfo_command_not_found_mock()
|
insert_rinfo_command_not_found_mock()
|
||||||
insert_rcreate_command_mock(RCREATE_COMMAND + ('--storage-quota', '5G', '--repo', 'repo'))
|
insert_rcreate_command_mock(RCREATE_COMMAND + ('--storage-quota', '5G', '--repo', 'repo'))
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
module.create_repository(
|
module.create_repository(
|
||||||
dry_run=False,
|
dry_run=False,
|
||||||
|
@ -178,7 +218,12 @@ def test_create_repository_with_make_parent_dirs_calls_borg_with_make_parent_dir
|
||||||
insert_rinfo_command_not_found_mock()
|
insert_rinfo_command_not_found_mock()
|
||||||
insert_rcreate_command_mock(RCREATE_COMMAND + ('--make-parent-dirs', '--repo', 'repo'))
|
insert_rcreate_command_mock(RCREATE_COMMAND + ('--make-parent-dirs', '--repo', 'repo'))
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
module.create_repository(
|
module.create_repository(
|
||||||
dry_run=False,
|
dry_run=False,
|
||||||
|
@ -195,7 +240,12 @@ def test_create_repository_with_log_info_calls_borg_with_info_flag():
|
||||||
insert_rcreate_command_mock(RCREATE_COMMAND + ('--info', '--repo', 'repo'))
|
insert_rcreate_command_mock(RCREATE_COMMAND + ('--info', '--repo', 'repo'))
|
||||||
insert_logging_mock(logging.INFO)
|
insert_logging_mock(logging.INFO)
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
module.create_repository(
|
module.create_repository(
|
||||||
dry_run=False,
|
dry_run=False,
|
||||||
|
@ -211,7 +261,12 @@ def test_create_repository_with_log_debug_calls_borg_with_debug_flag():
|
||||||
insert_rcreate_command_mock(RCREATE_COMMAND + ('--debug', '--repo', 'repo'))
|
insert_rcreate_command_mock(RCREATE_COMMAND + ('--debug', '--repo', 'repo'))
|
||||||
insert_logging_mock(logging.DEBUG)
|
insert_logging_mock(logging.DEBUG)
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
module.create_repository(
|
module.create_repository(
|
||||||
dry_run=False,
|
dry_run=False,
|
||||||
|
@ -226,7 +281,12 @@ def test_create_repository_with_local_path_calls_borg_via_local_path():
|
||||||
insert_rinfo_command_not_found_mock()
|
insert_rinfo_command_not_found_mock()
|
||||||
insert_rcreate_command_mock(('borg1',) + RCREATE_COMMAND[1:] + ('--repo', 'repo'))
|
insert_rcreate_command_mock(('borg1',) + RCREATE_COMMAND[1:] + ('--repo', 'repo'))
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
module.create_repository(
|
module.create_repository(
|
||||||
dry_run=False,
|
dry_run=False,
|
||||||
|
@ -242,7 +302,12 @@ def test_create_repository_with_remote_path_calls_borg_with_remote_path_flag():
|
||||||
insert_rinfo_command_not_found_mock()
|
insert_rinfo_command_not_found_mock()
|
||||||
insert_rcreate_command_mock(RCREATE_COMMAND + ('--remote-path', 'borg1', '--repo', 'repo'))
|
insert_rcreate_command_mock(RCREATE_COMMAND + ('--remote-path', 'borg1', '--repo', 'repo'))
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
module.create_repository(
|
module.create_repository(
|
||||||
dry_run=False,
|
dry_run=False,
|
||||||
|
@ -258,7 +323,12 @@ def test_create_repository_with_extra_borg_options_calls_borg_with_extra_options
|
||||||
insert_rinfo_command_not_found_mock()
|
insert_rinfo_command_not_found_mock()
|
||||||
insert_rcreate_command_mock(RCREATE_COMMAND + ('--extra', '--options', '--repo', 'repo'))
|
insert_rcreate_command_mock(RCREATE_COMMAND + ('--extra', '--options', '--repo', 'repo'))
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
module.create_repository(
|
module.create_repository(
|
||||||
dry_run=False,
|
dry_run=False,
|
||||||
|
|
|
@ -11,7 +11,12 @@ def test_display_repository_info_calls_borg_with_parameters():
|
||||||
flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
|
flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
|
||||||
flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
|
flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command').with_args(
|
flexmock(module).should_receive('execute_command').with_args(
|
||||||
('borg', 'rinfo', '--repo', 'repo'),
|
('borg', 'rinfo', '--repo', 'repo'),
|
||||||
|
@ -53,7 +58,12 @@ def test_display_repository_info_with_log_info_calls_borg_with_info_parameter():
|
||||||
flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
|
flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
|
||||||
flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
|
flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command').with_args(
|
flexmock(module).should_receive('execute_command').with_args(
|
||||||
('borg', 'rinfo', '--info', '--repo', 'repo'),
|
('borg', 'rinfo', '--info', '--repo', 'repo'),
|
||||||
|
@ -74,10 +84,16 @@ def test_display_repository_info_with_log_info_and_json_suppresses_most_borg_out
|
||||||
flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
|
flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
|
||||||
flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
|
flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
||||||
('borg', 'rinfo', '--json', '--repo', 'repo'), extra_environment=None,
|
('borg', 'rinfo', '--json', '--repo', 'repo'),
|
||||||
|
extra_environment=None,
|
||||||
).and_return('[]')
|
).and_return('[]')
|
||||||
|
|
||||||
insert_logging_mock(logging.INFO)
|
insert_logging_mock(logging.INFO)
|
||||||
|
@ -95,7 +111,12 @@ def test_display_repository_info_with_log_debug_calls_borg_with_debug_parameter(
|
||||||
flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
|
flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
|
||||||
flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
|
flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command').with_args(
|
flexmock(module).should_receive('execute_command').with_args(
|
||||||
('borg', 'rinfo', '--debug', '--show-rc', '--repo', 'repo'),
|
('borg', 'rinfo', '--debug', '--show-rc', '--repo', 'repo'),
|
||||||
|
@ -117,10 +138,16 @@ def test_display_repository_info_with_log_debug_and_json_suppresses_most_borg_ou
|
||||||
flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
|
flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
|
||||||
flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
|
flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
||||||
('borg', 'rinfo', '--json', '--repo', 'repo'), extra_environment=None,
|
('borg', 'rinfo', '--json', '--repo', 'repo'),
|
||||||
|
extra_environment=None,
|
||||||
).and_return('[]')
|
).and_return('[]')
|
||||||
|
|
||||||
insert_logging_mock(logging.DEBUG)
|
insert_logging_mock(logging.DEBUG)
|
||||||
|
@ -138,10 +165,16 @@ def test_display_repository_info_with_json_calls_borg_with_json_parameter():
|
||||||
flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
|
flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
|
||||||
flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
|
flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
||||||
('borg', 'rinfo', '--json', '--repo', 'repo'), extra_environment=None,
|
('borg', 'rinfo', '--json', '--repo', 'repo'),
|
||||||
|
extra_environment=None,
|
||||||
).and_return('[]')
|
).and_return('[]')
|
||||||
|
|
||||||
json_output = module.display_repository_info(
|
json_output = module.display_repository_info(
|
||||||
|
@ -158,7 +191,12 @@ def test_display_repository_info_with_local_path_calls_borg_via_local_path():
|
||||||
flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
|
flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
|
||||||
flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
|
flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command').with_args(
|
flexmock(module).should_receive('execute_command').with_args(
|
||||||
('borg1', 'rinfo', '--repo', 'repo'),
|
('borg1', 'rinfo', '--repo', 'repo'),
|
||||||
|
@ -180,7 +218,12 @@ def test_display_repository_info_with_remote_path_calls_borg_with_remote_path_pa
|
||||||
flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
|
flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
|
||||||
flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
|
flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command').with_args(
|
flexmock(module).should_receive('execute_command').with_args(
|
||||||
('borg', 'rinfo', '--remote-path', 'borg1', '--repo', 'repo'),
|
('borg', 'rinfo', '--remote-path', 'borg1', '--repo', 'repo'),
|
||||||
|
@ -203,7 +246,12 @@ def test_display_repository_info_with_lock_wait_calls_borg_with_lock_wait_parame
|
||||||
flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
|
flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
|
||||||
storage_config = {'lock_wait': 5}
|
storage_config = {'lock_wait': 5}
|
||||||
flexmock(module.feature).should_receive('available').and_return(True)
|
flexmock(module.feature).should_receive('available').and_return(True)
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('--repo', 'repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(
|
||||||
|
(
|
||||||
|
'--repo',
|
||||||
|
'repo',
|
||||||
|
)
|
||||||
|
)
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command').with_args(
|
flexmock(module).should_receive('execute_command').with_args(
|
||||||
('borg', 'rinfo', '--lock-wait', '5', '--repo', 'repo'),
|
('borg', 'rinfo', '--lock-wait', '5', '--repo', 'repo'),
|
||||||
|
|
|
@ -29,7 +29,8 @@ def test_resolve_archive_name_calls_borg_with_parameters():
|
||||||
expected_archive = 'archive-name'
|
expected_archive = 'archive-name'
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
||||||
('borg', 'list') + BORG_LIST_LATEST_ARGUMENTS, extra_environment=None,
|
('borg', 'list') + BORG_LIST_LATEST_ARGUMENTS,
|
||||||
|
extra_environment=None,
|
||||||
).and_return(expected_archive + '\n')
|
).and_return(expected_archive + '\n')
|
||||||
|
|
||||||
assert (
|
assert (
|
||||||
|
@ -42,7 +43,8 @@ def test_resolve_archive_name_with_log_info_calls_borg_without_info_parameter():
|
||||||
expected_archive = 'archive-name'
|
expected_archive = 'archive-name'
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
||||||
('borg', 'list') + BORG_LIST_LATEST_ARGUMENTS, extra_environment=None,
|
('borg', 'list') + BORG_LIST_LATEST_ARGUMENTS,
|
||||||
|
extra_environment=None,
|
||||||
).and_return(expected_archive + '\n')
|
).and_return(expected_archive + '\n')
|
||||||
insert_logging_mock(logging.INFO)
|
insert_logging_mock(logging.INFO)
|
||||||
|
|
||||||
|
@ -56,7 +58,8 @@ def test_resolve_archive_name_with_log_debug_calls_borg_without_debug_parameter(
|
||||||
expected_archive = 'archive-name'
|
expected_archive = 'archive-name'
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
||||||
('borg', 'list') + BORG_LIST_LATEST_ARGUMENTS, extra_environment=None,
|
('borg', 'list') + BORG_LIST_LATEST_ARGUMENTS,
|
||||||
|
extra_environment=None,
|
||||||
).and_return(expected_archive + '\n')
|
).and_return(expected_archive + '\n')
|
||||||
insert_logging_mock(logging.DEBUG)
|
insert_logging_mock(logging.DEBUG)
|
||||||
|
|
||||||
|
@ -70,7 +73,8 @@ def test_resolve_archive_name_with_local_path_calls_borg_via_local_path():
|
||||||
expected_archive = 'archive-name'
|
expected_archive = 'archive-name'
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
||||||
('borg1', 'list') + BORG_LIST_LATEST_ARGUMENTS, extra_environment=None,
|
('borg1', 'list') + BORG_LIST_LATEST_ARGUMENTS,
|
||||||
|
extra_environment=None,
|
||||||
).and_return(expected_archive + '\n')
|
).and_return(expected_archive + '\n')
|
||||||
|
|
||||||
assert (
|
assert (
|
||||||
|
@ -100,7 +104,8 @@ def test_resolve_archive_name_with_remote_path_calls_borg_with_remote_path_param
|
||||||
def test_resolve_archive_name_without_archives_raises():
|
def test_resolve_archive_name_without_archives_raises():
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
||||||
('borg', 'list') + BORG_LIST_LATEST_ARGUMENTS, extra_environment=None,
|
('borg', 'list') + BORG_LIST_LATEST_ARGUMENTS,
|
||||||
|
extra_environment=None,
|
||||||
).and_return('')
|
).and_return('')
|
||||||
|
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
|
@ -374,7 +379,15 @@ def test_make_rlist_command_includes_short():
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
'argument_name',
|
'argument_name',
|
||||||
('sort_by', 'first', 'last', 'exclude', 'exclude_from', 'pattern', 'patterns_from',),
|
(
|
||||||
|
'sort_by',
|
||||||
|
'first',
|
||||||
|
'last',
|
||||||
|
'exclude',
|
||||||
|
'exclude_from',
|
||||||
|
'pattern',
|
||||||
|
'patterns_from',
|
||||||
|
),
|
||||||
)
|
)
|
||||||
def test_make_rlist_command_includes_additional_flags(argument_name):
|
def test_make_rlist_command_includes_additional_flags(argument_name):
|
||||||
flexmock(module.flags).should_receive('make_flags').and_return(())
|
flexmock(module.flags).should_receive('make_flags').and_return(())
|
||||||
|
@ -411,7 +424,9 @@ def test_make_rlist_command_with_match_archives_calls_borg_with_match_archives_p
|
||||||
None, None, '1.2.3'
|
None, None, '1.2.3'
|
||||||
).and_return(())
|
).and_return(())
|
||||||
flexmock(module.flags).should_receive('make_match_archives_flags').with_args(
|
flexmock(module.flags).should_receive('make_match_archives_flags').with_args(
|
||||||
'foo-*', None, '1.2.3',
|
'foo-*',
|
||||||
|
None,
|
||||||
|
'1.2.3',
|
||||||
).and_return(('--match-archives', 'foo-*'))
|
).and_return(('--match-archives', 'foo-*'))
|
||||||
flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
|
flexmock(module.flags).should_receive('make_flags_from_arguments').and_return(())
|
||||||
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
flexmock(module.flags).should_receive('make_repository_flags').and_return(('repo',))
|
||||||
|
|
|
@ -15,7 +15,8 @@ def insert_execute_command_and_capture_output_mock(
|
||||||
):
|
):
|
||||||
flexmock(module.environment).should_receive('make_environment')
|
flexmock(module.environment).should_receive('make_environment')
|
||||||
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
flexmock(module).should_receive('execute_command_and_capture_output').with_args(
|
||||||
command, extra_environment=None,
|
command,
|
||||||
|
extra_environment=None,
|
||||||
).once().and_return(version_output)
|
).once().and_return(version_output)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -229,7 +229,8 @@ def test_run_configuration_retries_hard_error():
|
||||||
).and_return([flexmock()])
|
).and_return([flexmock()])
|
||||||
error_logs = [flexmock()]
|
error_logs = [flexmock()]
|
||||||
flexmock(module).should_receive('log_error_records').with_args(
|
flexmock(module).should_receive('log_error_records').with_args(
|
||||||
'foo: Error running actions for repository', OSError,
|
'foo: Error running actions for repository',
|
||||||
|
OSError,
|
||||||
).and_return(error_logs)
|
).and_return(error_logs)
|
||||||
config = {'location': {'repositories': [{'path': 'foo'}]}, 'storage': {'retries': 1}}
|
config = {'location': {'repositories': [{'path': 'foo'}]}, 'storage': {'retries': 1}}
|
||||||
arguments = {'global': flexmock(monitoring_verbosity=1, dry_run=False), 'create': flexmock()}
|
arguments = {'global': flexmock(monitoring_verbosity=1, dry_run=False), 'create': flexmock()}
|
||||||
|
|
|
@ -21,13 +21,21 @@ from borgmatic.config import normalize as module
|
||||||
{'location': {'source_directories': ['foo', 'bar']}},
|
{'location': {'source_directories': ['foo', 'bar']}},
|
||||||
False,
|
False,
|
||||||
),
|
),
|
||||||
({'location': None}, {'location': None}, False,),
|
(
|
||||||
|
{'location': None},
|
||||||
|
{'location': None},
|
||||||
|
False,
|
||||||
|
),
|
||||||
(
|
(
|
||||||
{'storage': {'compression': 'yes_please'}},
|
{'storage': {'compression': 'yes_please'}},
|
||||||
{'storage': {'compression': 'yes_please'}},
|
{'storage': {'compression': 'yes_please'}},
|
||||||
False,
|
False,
|
||||||
),
|
),
|
||||||
({'storage': None}, {'storage': None}, False,),
|
(
|
||||||
|
{'storage': None},
|
||||||
|
{'storage': None},
|
||||||
|
False,
|
||||||
|
),
|
||||||
(
|
(
|
||||||
{'hooks': {'healthchecks': 'https://example.com'}},
|
{'hooks': {'healthchecks': 'https://example.com'}},
|
||||||
{'hooks': {'healthchecks': {'ping_url': 'https://example.com'}}},
|
{'hooks': {'healthchecks': {'ping_url': 'https://example.com'}}},
|
||||||
|
@ -48,10 +56,9 @@ from borgmatic.config import normalize as module
|
||||||
{'hooks': {'cronhub': {'ping_url': 'https://example.com'}}},
|
{'hooks': {'cronhub': {'ping_url': 'https://example.com'}}},
|
||||||
False,
|
False,
|
||||||
),
|
),
|
||||||
({'hooks': None}, {'hooks': None}, False,),
|
|
||||||
(
|
(
|
||||||
{'consistency': {'checks': ['archives']}},
|
{'hooks': None},
|
||||||
{'consistency': {'checks': [{'name': 'archives'}]}},
|
{'hooks': None},
|
||||||
False,
|
False,
|
||||||
),
|
),
|
||||||
(
|
(
|
||||||
|
@ -59,9 +66,26 @@ from borgmatic.config import normalize as module
|
||||||
{'consistency': {'checks': [{'name': 'archives'}]}},
|
{'consistency': {'checks': [{'name': 'archives'}]}},
|
||||||
False,
|
False,
|
||||||
),
|
),
|
||||||
({'consistency': None}, {'consistency': None}, False,),
|
(
|
||||||
({'location': {'numeric_owner': False}}, {'location': {'numeric_ids': False}}, False,),
|
{'consistency': {'checks': ['archives']}},
|
||||||
({'location': {'bsd_flags': False}}, {'location': {'flags': False}}, False,),
|
{'consistency': {'checks': [{'name': 'archives'}]}},
|
||||||
|
False,
|
||||||
|
),
|
||||||
|
(
|
||||||
|
{'consistency': None},
|
||||||
|
{'consistency': None},
|
||||||
|
False,
|
||||||
|
),
|
||||||
|
(
|
||||||
|
{'location': {'numeric_owner': False}},
|
||||||
|
{'location': {'numeric_ids': False}},
|
||||||
|
False,
|
||||||
|
),
|
||||||
|
(
|
||||||
|
{'location': {'bsd_flags': False}},
|
||||||
|
{'location': {'flags': False}},
|
||||||
|
False,
|
||||||
|
),
|
||||||
(
|
(
|
||||||
{'storage': {'remote_rate_limit': False}},
|
{'storage': {'remote_rate_limit': False}},
|
||||||
{'storage': {'upload_rate_limit': False}},
|
{'storage': {'upload_rate_limit': False}},
|
||||||
|
|
|
@ -138,7 +138,6 @@ def test_guard_configuration_contains_repository_does_not_raise_when_repository_
|
||||||
|
|
||||||
|
|
||||||
def test_guard_configuration_contains_repository_does_not_raise_when_repository_label_in_config():
|
def test_guard_configuration_contains_repository_does_not_raise_when_repository_label_in_config():
|
||||||
|
|
||||||
module.guard_configuration_contains_repository(
|
module.guard_configuration_contains_repository(
|
||||||
repository='repo',
|
repository='repo',
|
||||||
configurations={
|
configurations={
|
||||||
|
@ -190,13 +189,15 @@ def test_guard_single_repository_selected_raises_when_multiple_repositories_conf
|
||||||
|
|
||||||
def test_guard_single_repository_selected_does_not_raise_when_single_repository_configured_and_none_selected():
|
def test_guard_single_repository_selected_does_not_raise_when_single_repository_configured_and_none_selected():
|
||||||
module.guard_single_repository_selected(
|
module.guard_single_repository_selected(
|
||||||
repository=None, configurations={'config.yaml': {'location': {'repositories': ['repo']}}},
|
repository=None,
|
||||||
|
configurations={'config.yaml': {'location': {'repositories': ['repo']}}},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_guard_single_repository_selected_does_not_raise_when_no_repositories_configured_and_one_selected():
|
def test_guard_single_repository_selected_does_not_raise_when_no_repositories_configured_and_one_selected():
|
||||||
module.guard_single_repository_selected(
|
module.guard_single_repository_selected(
|
||||||
repository='repo', configurations={'config.yaml': {'location': {'repositories': []}}},
|
repository='repo',
|
||||||
|
configurations={'config.yaml': {'location': {'repositories': []}}},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -108,5 +108,9 @@ def test_ping_monitor_with_unsupported_monitoring_state():
|
||||||
hook_config = {'ping_url': 'https://example.com'}
|
hook_config = {'ping_url': 'https://example.com'}
|
||||||
flexmock(module.requests).should_receive('get').never()
|
flexmock(module.requests).should_receive('get').never()
|
||||||
module.ping_monitor(
|
module.ping_monitor(
|
||||||
hook_config, 'config.yaml', module.monitor.State.LOG, monitoring_log_level=1, dry_run=False,
|
hook_config,
|
||||||
|
'config.yaml',
|
||||||
|
module.monitor.State.LOG,
|
||||||
|
monitoring_log_level=1,
|
||||||
|
dry_run=False,
|
||||||
)
|
)
|
||||||
|
|
|
@ -93,5 +93,9 @@ def test_ping_monitor_with_unsupported_monitoring_state():
|
||||||
hook_config = {'ping_url': 'https://example.com'}
|
hook_config = {'ping_url': 'https://example.com'}
|
||||||
flexmock(module.requests).should_receive('get').never()
|
flexmock(module.requests).should_receive('get').never()
|
||||||
module.ping_monitor(
|
module.ping_monitor(
|
||||||
hook_config, 'config.yaml', module.monitor.State.LOG, monitoring_log_level=1, dry_run=False,
|
hook_config,
|
||||||
|
'config.yaml',
|
||||||
|
module.monitor.State.LOG,
|
||||||
|
monitoring_log_level=1,
|
||||||
|
dry_run=False,
|
||||||
)
|
)
|
||||||
|
|
|
@ -206,7 +206,9 @@ def test_ping_monitor_with_ping_uuid_hits_corresponding_url():
|
||||||
payload = 'data'
|
payload = 'data'
|
||||||
flexmock(module).should_receive('format_buffered_logs_for_payload').and_return(payload)
|
flexmock(module).should_receive('format_buffered_logs_for_payload').and_return(payload)
|
||||||
flexmock(module.requests).should_receive('post').with_args(
|
flexmock(module.requests).should_receive('post').with_args(
|
||||||
f"https://hc-ping.com/{hook_config['ping_url']}", data=payload.encode('utf-8'), verify=True,
|
f"https://hc-ping.com/{hook_config['ping_url']}",
|
||||||
|
data=payload.encode('utf-8'),
|
||||||
|
verify=True,
|
||||||
).and_return(flexmock(ok=True))
|
).and_return(flexmock(ok=True))
|
||||||
|
|
||||||
module.ping_monitor(
|
module.ping_monitor(
|
||||||
|
|
|
@ -114,7 +114,8 @@ def test_dump_databases_runs_mongodump_with_directory_format():
|
||||||
flexmock(module.dump).should_receive('create_named_pipe_for_dump').never()
|
flexmock(module.dump).should_receive('create_named_pipe_for_dump').never()
|
||||||
|
|
||||||
flexmock(module).should_receive('execute_command').with_args(
|
flexmock(module).should_receive('execute_command').with_args(
|
||||||
['mongodump', '--out', 'databases/localhost/foo', '--db', 'foo'], shell=True,
|
['mongodump', '--out', 'databases/localhost/foo', '--db', 'foo'],
|
||||||
|
shell=True,
|
||||||
).and_return(flexmock()).once()
|
).and_return(flexmock()).once()
|
||||||
|
|
||||||
assert module.dump_databases(databases, 'test.yaml', {}, dry_run=False) == []
|
assert module.dump_databases(databases, 'test.yaml', {}, dry_run=False) == []
|
||||||
|
|
|
@ -149,7 +149,14 @@ def test_execute_dump_command_runs_mysqldump():
|
||||||
flexmock(module.dump).should_receive('create_named_pipe_for_dump')
|
flexmock(module.dump).should_receive('create_named_pipe_for_dump')
|
||||||
|
|
||||||
flexmock(module).should_receive('execute_command').with_args(
|
flexmock(module).should_receive('execute_command').with_args(
|
||||||
('mysqldump', '--add-drop-database', '--databases', 'foo', '--result-file', 'dump',),
|
(
|
||||||
|
'mysqldump',
|
||||||
|
'--add-drop-database',
|
||||||
|
'--databases',
|
||||||
|
'foo',
|
||||||
|
'--result-file',
|
||||||
|
'dump',
|
||||||
|
),
|
||||||
extra_environment=None,
|
extra_environment=None,
|
||||||
run_to_completion=False,
|
run_to_completion=False,
|
||||||
).and_return(process).once()
|
).and_return(process).once()
|
||||||
|
@ -175,7 +182,13 @@ def test_execute_dump_command_runs_mysqldump_without_add_drop_database():
|
||||||
flexmock(module.dump).should_receive('create_named_pipe_for_dump')
|
flexmock(module.dump).should_receive('create_named_pipe_for_dump')
|
||||||
|
|
||||||
flexmock(module).should_receive('execute_command').with_args(
|
flexmock(module).should_receive('execute_command').with_args(
|
||||||
('mysqldump', '--databases', 'foo', '--result-file', 'dump',),
|
(
|
||||||
|
'mysqldump',
|
||||||
|
'--databases',
|
||||||
|
'foo',
|
||||||
|
'--result-file',
|
||||||
|
'dump',
|
||||||
|
),
|
||||||
extra_environment=None,
|
extra_environment=None,
|
||||||
run_to_completion=False,
|
run_to_completion=False,
|
||||||
).and_return(process).once()
|
).and_return(process).once()
|
||||||
|
|
|
@ -320,7 +320,11 @@ def test_execute_command_and_capture_output_returns_output_with_extra_environmen
|
||||||
expected_output = '[]'
|
expected_output = '[]'
|
||||||
flexmock(module.os, environ={'a': 'b'})
|
flexmock(module.os, environ={'a': 'b'})
|
||||||
flexmock(module.subprocess).should_receive('check_output').with_args(
|
flexmock(module.subprocess).should_receive('check_output').with_args(
|
||||||
full_command, stderr=None, shell=False, env={'a': 'b', 'c': 'd'}, cwd=None,
|
full_command,
|
||||||
|
stderr=None,
|
||||||
|
shell=False,
|
||||||
|
env={'a': 'b', 'c': 'd'},
|
||||||
|
cwd=None,
|
||||||
).and_return(flexmock(decode=lambda: expected_output)).once()
|
).and_return(flexmock(decode=lambda: expected_output)).once()
|
||||||
|
|
||||||
output = module.execute_command_and_capture_output(
|
output = module.execute_command_and_capture_output(
|
||||||
|
|
Loading…
Reference in a new issue