def test_load_configuration_warns_on_non_lists(non_list) -> None: with TemporaryDirectory() as td: file_name = Path(td, "configuration") file_name.write_text(json.dumps(non_list)) with pytest.raises(SystemExit) as sysexit: list(cp.load_configuration(file_name)) assert sysexit.value.code not in SUCCESS_CODES assert "muss eine JSON-Liste" in str(sysexit.value)
def open(config: Path = CONFIG_OPTION): configurations = list(cp.load_configuration(config)) for cfg in configurations: if cfg.device().exists(): mount_dir = Path(mkdtemp()) decrypted = dm.open_encrypted_device(cfg.device(), cfg.DevicePassCmd) dm.mount_btrfs_device(decrypted, mount_dir=mount_dir) typer.echo(f"Gerät {cfg.UUID} wurde in {mount_dir} geöffnet.")
def close(config: Path = CONFIG_OPTION): configurations = list(cp.load_configuration(config)) mounted_devices = dm.get_mounted_devices() for cfg in configurations: mapped_device = f"/dev/mapper/{cfg.UUID}" if cfg.device().exists() and mapped_device in mounted_devices: mount_dirs = mounted_devices[mapped_device] if len(mount_dirs) != 1: # TODO introduce custom exception raise ValueError( "Got several possible mount points. Expected exactly 1!") mount_dir = mount_dirs.pop() dm.unmount_device(mount_dir) dm.close_decrypted_device(Path(mapped_device)) mount_dir.rmdir()
def test_load_configuration_parses_btrfs_config( uuid: UUID, pass_cmd: str, backup_dest_dirs: list[str]) -> None: with TemporaryDirectory() as source: btrfs_cfg = cp.BtrfsConfig( DevicePassCmd=pass_cmd, Files=set(), FilesDest=backup_dest_dirs[1], Folders={Path(source): backup_dest_dirs[0]}, UUID=uuid, ) with TemporaryDirectory() as td: file_name = Path(td, "configuration") file_name.write_text(f"[{btrfs_cfg.json()}]") parse_result = list(cp.load_configuration(file_name)) assert [btrfs_cfg] == parse_result
def test_load_configuration_parses_restic_config( uuid: UUID, device_pass_cmd: str, repository_pass_cmd: str, backup_dest_dirs: list[str], ) -> None: with TemporaryDirectory() as source: restic_cfg = cp.ResticConfig( UUID=uuid, DevicePassCmd=device_pass_cmd, RepositoryPassCmd=repository_pass_cmd, FilesAndFolders={Path(source)}, ) with TemporaryDirectory() as td: file_name = Path(td, "configuration") file_name.write_text(f"[{restic_cfg.json()}]") parse_result = list(cp.load_configuration(file_name)) assert [restic_cfg] == parse_result
def backup(config: Path = CONFIG_OPTION): configurations = list(cp.load_configuration(config)) for cfg in configurations: bl.do_backup(cfg)
def test_load_configuration_rejects_missing_cfg() -> None: with NamedTemporaryFile() as named_tmp: file_name = Path(named_tmp.name) with pytest.raises(SystemExit) as sysexit: list(cp.load_configuration(file_name)) assert sysexit.value.code not in SUCCESS_CODES