Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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.")
Exemplo n.º 3
0
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()
Exemplo n.º 4
0
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
Exemplo n.º 5
0
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
Exemplo n.º 6
0
def backup(config: Path = CONFIG_OPTION):
    configurations = list(cp.load_configuration(config))
    for cfg in configurations:
        bl.do_backup(cfg)
Exemplo n.º 7
0
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