Source code for testing.functional.test_restore

# -*- Mode:Python; indent-tabs-mode:nil; tab-width:4; encoding:utf-8 -*-
#
# Copyright 2002 Ben Escoto
# Copyright 2007 Kenneth Loafman
#
# This file is part of duplicity.
#
# Duplicity is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# Duplicity is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with duplicity; if not, write to the Free Software Foundation,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA


import filecmp
import os
import unittest

from testing.functional import (
    _runtest_dir,
    FunctionalTestCase,
)


[docs] class RestoreTest(FunctionalTestCase): """ Test restore optionss using duplicity binary. Basic restere is tested in other tests. """
[docs] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.restore_opts = [ "restore", f"file://{_runtest_dir}/testfiles/output", f"{_runtest_dir}/testfiles/restore_test", ] self.restore_path_opts = self.restore_opts + [ "--path-to-restore=deleted_file", ] self.restore_curdir_opts = [ "restore", f"file://{_runtest_dir}/testfiles/output", f"./", ]
[docs] def test_restore_to_nonexisting_dir(self): """ Expected behaviour is restore to target directory. """ self.backup("full", f"{_runtest_dir}/testfiles/dir1") self.restore() self.assertEqual( os.listdir(f"{_runtest_dir}/testfiles/dir1"), os.listdir(f"{_runtest_dir}/testfiles/restore_out"), )
[docs] def test_restore_path_to_nonexisting_dir(self): """ Expected behaviour is restore to target directory. """ self.backup("full", f"{_runtest_dir}/testfiles/dir1") self.restore() self.assertTrue( filecmp.cmp( f"{_runtest_dir}/testfiles/dir1/deleted_file", f"{_runtest_dir}/testfiles/restore_out/deleted_file", ) )
[docs] def test_restore_to_nonempty_dir(self): """ Expected behaviour is refuse to overwrite, CmdErr 11. """ self.backup("full", f"{_runtest_dir}/testfiles/dir1") os.mkdir(f"{_runtest_dir}/testfiles/restore_test") open(f"{_runtest_dir}/testfiles/restore_test/foobar", "w").write("foobar") try: self.run_duplicity(options=self.restore_opts) except Exception as e: if e.exit_status != 11: self.fail(f"Test failed with {e.exit_status}, not 11") else: pass else: self.fail(f"{__name__} passed and should have failed with 11.")
[docs] def test_restore_path_to_nonempty_dir(self): """ Expected behaviour is refuse to overwrite, CmdErr 11. """ self.backup("full", f"{_runtest_dir}/testfiles/dir1") os.mkdir(f"{_runtest_dir}/testfiles/restore_test") open(f"{_runtest_dir}/testfiles/restore_test/foobar", "w").write("foobar") try: self.run_duplicity(options=self.restore_path_opts) except Exception as e: if e.exit_status != 11: self.fail(f"Test failed with {e.exit_status}, not 11") else: pass else: self.fail(f"{__name__} passed and should have failed with 11.")
[docs] def test_restore_to_curdir(self): """ Expected behaviour is refuse to overwrite, CmdErr 11. """ self.backup("full", f"{_runtest_dir}/testfiles/dir1") os.mkdir(f"{_runtest_dir}/testfiles/restore_test") os.chdir(f"{_runtest_dir}/testfiles/restore_test") try: self.run_duplicity(options=self.restore_curdir_opts) except Exception as e: if e.exit_status != 11: self.fail(f"Test failed with {e.exit_status}, not 11") else: pass else: self.fail(f"{__name__} passed and should have failed with 11.")
[docs] def test_restore_path_to_curdir(self): """ Expected behaviour is refuse to overwrite, CmdErr 11. """ self.backup("full", f"{_runtest_dir}/testfiles/dir1") os.mkdir(f"{_runtest_dir}/testfiles/restore_test") os.chdir(f"{_runtest_dir}/testfiles/restore_test") try: self.run_duplicity(options=self.restore_curdir_opts) except Exception as e: if e.exit_status != 11: self.fail(f"Test failed with {e.exit_status}, not 11") else: pass else: self.fail(f"{__name__} passed and should have failed with 11.")
if __name__ == "__main__": unittest.main()