Exemplo n.º 1
0
def test_backup_binds_are_readonly(mocker, monkeypatch):
    def custom_mount_and_backup(self):
        self._organize_files()

        confssh = os.path.join(self.work_dir, "conf/ssh")
        output = subprocess.check_output(
            "touch %s/test 2>&1 || true" % confssh,
            shell=True,
            env={"LANG": "en_US.UTF-8"},
        )
        output = output.decode()

        assert "Read-only file system" in output

        if not _recursive_umount(self.work_dir):
            raise Exception("Backup cleaning failed !")

        self.clean()

    monkeypatch.setattr(
        "yunohost.backup.BackupMethod.mount_and_backup", custom_mount_and_backup
    )

    # Create the backup
    with message(mocker, "backup_created"):
        backup_create(system=[])
Exemplo n.º 2
0
def _test_backup_and_restore_app(mocker, app):

    # Create a backup of this app
    with message(mocker, "backup_created"):
        backup_create(system=None, apps=[app])

    archives = backup_list()["archives"]
    assert len(archives) == 1

    archives_info = backup_info(archives[0], with_details=True)
    assert archives_info["system"] == {}
    assert len(archives_info["apps"].keys()) == 1
    assert app in archives_info["apps"].keys()

    # Uninstall the app
    app_remove(app)
    assert not app_is_installed(app)
    assert app + ".main" not in user_permission_list()["permissions"]

    # Restore the app
    with message(mocker, "restore_complete"):
        backup_restore(system=None, name=archives[0], apps=[app])

    assert app_is_installed(app)

    # Check permission
    per_list = user_permission_list()["permissions"]
    assert app + ".main" in per_list
Exemplo n.º 3
0
def test_backup_and_restore_all_sys(mocker):

    # Create the backup
    with message(mocker, "backup_created"):
        backup_create(system=[], apps=None)

    archives = backup_list()["archives"]
    assert len(archives) == 1

    archives_info = backup_info(archives[0], with_details=True)
    assert archives_info["apps"] == {}
    assert len(archives_info["system"].keys()) == len(
        os.listdir("/usr/share/yunohost/hooks/backup/")
    )

    # Remove ssowat conf
    assert os.path.exists("/etc/ssowat/conf.json")
    os.system("rm -rf /etc/ssowat/")
    assert not os.path.exists("/etc/ssowat/conf.json")

    # Restore the backup
    with message(mocker, "restore_complete"):
        backup_restore(name=archives[0], force=True, system=[], apps=None)

    # Check ssowat conf is back
    assert os.path.exists("/etc/ssowat/conf.json")
Exemplo n.º 4
0
def test_backup_app_not_installed(mocker):

    assert not _is_installed("wordpress")

    with message(mocker, "unbackup_app", app="wordpress"):
        with raiseYunohostError(mocker, "backup_nothings_done"):
            backup_create(system=None, apps=["wordpress"])
Exemplo n.º 5
0
def test_backup_app_with_no_backup_script(mocker):

    backup_script = "/etc/yunohost/apps/backup_recommended_app/scripts/backup"
    os.system("rm %s" % backup_script)
    assert not os.path.exists(backup_script)

    with message(
        mocker, "backup_with_no_backup_script_for_app", app="backup_recommended_app"
    ):
        with raiseYunohostError(mocker, "backup_nothings_done"):
            backup_create(system=None, apps=["backup_recommended_app"])
Exemplo n.º 6
0
def test_backup_using_copy_method(mocker):

    # Create the backup
    with message(mocker, "backup_created"):
        backup_create(system=["conf_nginx"],
                      apps=None,
                      output_directory="/opt/test_backup_output_directory",
                      methods=["copy"],
                      name="backup")

    assert os.path.exists("/opt/test_backup_output_directory/info.json")
Exemplo n.º 7
0
def test_backup_app_with_no_restore_script(mocker):

    restore_script = "/etc/yunohost/apps/backup_recommended_app/scripts/restore"
    os.system("rm %s" % restore_script)
    assert not os.path.exists(restore_script)

    # Backuping an app with no restore script will only display a warning to the
    # user...

    with message(
        mocker, "backup_with_no_restore_script_for_app", app="backup_recommended_app"
    ):
        backup_create(system=None, apps=["backup_recommended_app"])
Exemplo n.º 8
0
def test_backup_only_ldap(mocker):

    # Create the backup
    with message(mocker, "backup_created"):
        backup_create(system=["conf_ldap"], apps=None)

    archives = backup_list()["archives"]
    assert len(archives) == 1

    archives_info = backup_info(archives[0], with_details=True)
    assert archives_info["apps"] == {}
    assert len(archives_info["system"].keys()) == 1
    assert "conf_ldap" in archives_info["system"].keys()
Exemplo n.º 9
0
def test_backup_not_enough_free_space(monkeypatch, mocker):
    def custom_disk_usage(path):
        return 99999999999999999

    def custom_free_space_in_directory(dirpath):
        return 0

    monkeypatch.setattr("yunohost.backup.disk_usage", custom_disk_usage)
    monkeypatch.setattr("yunohost.backup.free_space_in_directory",
                        custom_free_space_in_directory)

    with raiseYunohostError(mocker, 'not_enough_disk_space'):
        backup_create(system=None, apps=["backup_recommended_app"])
Exemplo n.º 10
0
def test_backup_script_failure_handling(monkeypatch, mocker):
    def custom_hook_exec(name, *args, **kwargs):

        if os.path.basename(name).startswith("backup_"):
            raise Exception
        else:
            return True

    # Create a backup of this app and simulate a crash (patching the backup
    # call with monkeypatch). We also patch m18n to check later it's been called
    # with the expected error message key
    monkeypatch.setattr("yunohost.backup.hook_exec", custom_hook_exec)

    with message(mocker, "backup_app_failed", app="backup_recommended_app"):
        with raiseYunohostError(mocker, "backup_nothings_done"):
            backup_create(system=None, apps=["backup_recommended_app"])
Exemplo n.º 11
0
def test_restore_archive_with_custom_hook(mocker):

    custom_restore_hook_folder = os.path.join(CUSTOM_HOOK_FOLDER, "restore")
    os.system("touch %s/99-yolo" % custom_restore_hook_folder)

    # Backup with custom hook system
    with message(mocker, "backup_created"):
        backup_create(system=[], apps=None)
    archives = backup_list()["archives"]
    assert len(archives) == 1

    # Restore system with custom hook
    with message(mocker, "restore_complete"):
        backup_restore(
            name=backup_list()["archives"][0], system=[], apps=None, force=True
        )

    os.system("rm %s/99-yolo" % custom_restore_hook_folder)
Exemplo n.º 12
0
def test_backup_with_different_output_directory(mocker):

    # Create the backup
    with message(mocker, "backup_created"):
        backup_create(system=["conf_ssh"],
                      apps=None,
                      output_directory="/opt/test_backup_output_directory",
                      name="backup")

    assert os.path.exists("/opt/test_backup_output_directory/backup.tar")

    archives = backup_list()["archives"]
    assert len(archives) == 1

    archives_info = backup_info(archives[0], with_details=True)
    assert archives_info["apps"] == {}
    assert len(archives_info["system"].keys()) == 1
    assert "conf_ssh" in archives_info["system"].keys()
Exemplo n.º 13
0
def test_restore_system_from_Ynh2p4(monkeypatch, mocker):

    # Backup current system
    with message(mocker, "backup_created"):
        backup_create(system=[], apps=None)
    archives = backup_list()["archives"]
    assert len(archives) == 2

    # Restore system archive from 2.4
    try:
        with message(mocker, "restore_complete"):
            backup_restore(
                name=backup_list()["archives"][1], system=[], apps=None, force=True
            )
    finally:
        # Restore system as it was
        backup_restore(
            name=backup_list()["archives"][0], system=[], apps=None, force=True
        )
Exemplo n.º 14
0
def test_backup_system_part_that_does_not_exists(mocker):

    # Create the backup
    with message(mocker, "backup_hook_unknown", hook="doesnt_exist"):
        with raiseYunohostError(mocker, "backup_nothings_done"):
            backup_create(system=["doesnt_exist"], apps=None)