mirror of
https://github.com/psy0rz/zfs_autobackup.git
synced 2025-06-15 02:22:06 +03:00
formatting
This commit is contained in:
parent
ce05e1ba4c
commit
6fefadf884
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
from basetest import *
|
from basetest import *
|
||||||
|
|
||||||
|
|
||||||
@ -6,68 +5,66 @@ class TestZfsNode(unittest2.TestCase):
|
|||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
prepare_zpools()
|
prepare_zpools()
|
||||||
self.longMessage=True
|
self.longMessage = True
|
||||||
|
|
||||||
# generate a resumable state
|
# generate a resumable state
|
||||||
#NOTE: this generates two resumable test_target1/test_source1/fs1 and test_target1/test_source1/fs1/sub
|
# NOTE: this generates two resumable test_target1/test_source1/fs1 and test_target1/test_source1/fs1/sub
|
||||||
def generate_resume(self):
|
def generate_resume(self):
|
||||||
|
|
||||||
r=shelltest("zfs set compress=off test_source1 test_target1")
|
r = shelltest("zfs set compress=off test_source1 test_target1")
|
||||||
|
|
||||||
#big change on source
|
# big change on source
|
||||||
r=shelltest("dd if=/dev/zero of=/test_source1/fs1/data bs=250M count=1")
|
r = shelltest("dd if=/dev/zero of=/test_source1/fs1/data bs=250M count=1")
|
||||||
|
|
||||||
#waste space on target
|
# waste space on target
|
||||||
r=shelltest("dd if=/dev/zero of=/test_target1/waste bs=250M count=1")
|
r = shelltest("dd if=/dev/zero of=/test_target1/waste bs=250M count=1")
|
||||||
|
|
||||||
#should fail and leave resume token (if supported)
|
# should fail and leave resume token (if supported)
|
||||||
self.assertTrue(ZfsAutobackup("test test_target1 --verbose".split(" ")).run())
|
self.assertTrue(ZfsAutobackup("test test_target1 --verbose".split(" ")).run())
|
||||||
|
|
||||||
#free up space
|
# free up space
|
||||||
r=shelltest("rm /test_target1/waste")
|
r = shelltest("rm /test_target1/waste")
|
||||||
#sync
|
# sync
|
||||||
r=shelltest("zfs umount test_target1")
|
r = shelltest("zfs umount test_target1")
|
||||||
r=shelltest("zfs mount test_target1")
|
r = shelltest("zfs mount test_target1")
|
||||||
|
|
||||||
|
# resume initial backup
|
||||||
#resume initial backup
|
|
||||||
def test_initial_resume(self):
|
def test_initial_resume(self):
|
||||||
|
|
||||||
#inital backup, leaves resume token
|
# inital backup, leaves resume token
|
||||||
with patch('time.strftime', return_value="20101111000000"):
|
with patch('time.strftime', return_value="20101111000000"):
|
||||||
self.generate_resume()
|
self.generate_resume()
|
||||||
|
|
||||||
#--test should resume and succeed
|
# --test should resume and succeed
|
||||||
with OutputIO() as buf:
|
with OutputIO() as buf:
|
||||||
with redirect_stdout(buf):
|
with redirect_stdout(buf):
|
||||||
self.assertFalse(ZfsAutobackup("test test_target1 --verbose --test".split(" ")).run())
|
self.assertFalse(ZfsAutobackup("test test_target1 --verbose --test".split(" ")).run())
|
||||||
|
|
||||||
print(buf.getvalue())
|
print(buf.getvalue())
|
||||||
|
|
||||||
#did we really resume?
|
# did we really resume?
|
||||||
if "0.6.5" in ZFS_USERSPACE:
|
if "0.6.5" in ZFS_USERSPACE:
|
||||||
#abort this late, for beter coverage
|
# abort this late, for beter coverage
|
||||||
self.skipTest("Resume not supported in this ZFS userspace version")
|
self.skipTest("Resume not supported in this ZFS userspace version")
|
||||||
else:
|
else:
|
||||||
self.assertIn(": resuming", buf.getvalue())
|
self.assertIn(": resuming", buf.getvalue())
|
||||||
|
|
||||||
|
# should resume and succeed
|
||||||
#should resume and succeed
|
|
||||||
with OutputIO() as buf:
|
with OutputIO() as buf:
|
||||||
with redirect_stdout(buf):
|
with redirect_stdout(buf):
|
||||||
self.assertFalse(ZfsAutobackup("test test_target1 --verbose".split(" ")).run())
|
self.assertFalse(ZfsAutobackup("test test_target1 --verbose".split(" ")).run())
|
||||||
|
|
||||||
print(buf.getvalue())
|
print(buf.getvalue())
|
||||||
|
|
||||||
#did we really resume?
|
# did we really resume?
|
||||||
if "0.6.5" in ZFS_USERSPACE:
|
if "0.6.5" in ZFS_USERSPACE:
|
||||||
#abort this late, for beter coverage
|
# abort this late, for beter coverage
|
||||||
self.skipTest("Resume not supported in this ZFS userspace version")
|
self.skipTest("Resume not supported in this ZFS userspace version")
|
||||||
else:
|
else:
|
||||||
self.assertIn(": resuming", buf.getvalue())
|
self.assertIn(": resuming", buf.getvalue())
|
||||||
|
|
||||||
r=shelltest("zfs list -H -o name -r -t all test_target1")
|
r = shelltest("zfs list -H -o name -r -t all test_target1")
|
||||||
self.assertMultiLineEqual(r,"""
|
self.assertMultiLineEqual(r, """
|
||||||
test_target1
|
test_target1
|
||||||
test_target1/test_source1
|
test_target1/test_source1
|
||||||
test_target1/test_source1/fs1
|
test_target1/test_source1/fs1
|
||||||
@ -80,48 +77,47 @@ test_target1/test_source2/fs2/sub
|
|||||||
test_target1/test_source2/fs2/sub@test-20101111000000
|
test_target1/test_source2/fs2/sub@test-20101111000000
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
# resume incremental backup
|
||||||
#resume incremental backup
|
|
||||||
def test_incremental_resume(self):
|
def test_incremental_resume(self):
|
||||||
|
|
||||||
#initial backup
|
# initial backup
|
||||||
with patch('time.strftime', return_value="20101111000000"):
|
with patch('time.strftime', return_value="20101111000000"):
|
||||||
self.assertFalse(ZfsAutobackup("test test_target1 --verbose --allow-empty".split(" ")).run())
|
self.assertFalse(ZfsAutobackup("test test_target1 --verbose --allow-empty".split(" ")).run())
|
||||||
|
|
||||||
#incremental backup leaves resume token
|
# incremental backup leaves resume token
|
||||||
with patch('time.strftime', return_value="20101111000001"):
|
with patch('time.strftime', return_value="20101111000001"):
|
||||||
self.generate_resume()
|
self.generate_resume()
|
||||||
|
|
||||||
#--test should resume and succeed
|
# --test should resume and succeed
|
||||||
with OutputIO() as buf:
|
with OutputIO() as buf:
|
||||||
with redirect_stdout(buf):
|
with redirect_stdout(buf):
|
||||||
self.assertFalse(ZfsAutobackup("test test_target1 --verbose --test".split(" ")).run())
|
self.assertFalse(ZfsAutobackup("test test_target1 --verbose --test".split(" ")).run())
|
||||||
|
|
||||||
print(buf.getvalue())
|
print(buf.getvalue())
|
||||||
|
|
||||||
#did we really resume?
|
# did we really resume?
|
||||||
if "0.6.5" in ZFS_USERSPACE:
|
if "0.6.5" in ZFS_USERSPACE:
|
||||||
#abort this late, for beter coverage
|
# abort this late, for beter coverage
|
||||||
self.skipTest("Resume not supported in this ZFS userspace version")
|
self.skipTest("Resume not supported in this ZFS userspace version")
|
||||||
else:
|
else:
|
||||||
self.assertIn(": resuming", buf.getvalue())
|
self.assertIn(": resuming", buf.getvalue())
|
||||||
|
|
||||||
#should resume and succeed
|
# should resume and succeed
|
||||||
with OutputIO() as buf:
|
with OutputIO() as buf:
|
||||||
with redirect_stdout(buf):
|
with redirect_stdout(buf):
|
||||||
self.assertFalse(ZfsAutobackup("test test_target1 --verbose".split(" ")).run())
|
self.assertFalse(ZfsAutobackup("test test_target1 --verbose".split(" ")).run())
|
||||||
|
|
||||||
print(buf.getvalue())
|
print(buf.getvalue())
|
||||||
|
|
||||||
#did we really resume?
|
# did we really resume?
|
||||||
if "0.6.5" in ZFS_USERSPACE:
|
if "0.6.5" in ZFS_USERSPACE:
|
||||||
#abort this late, for beter coverage
|
# abort this late, for beter coverage
|
||||||
self.skipTest("Resume not supported in this ZFS userspace version")
|
self.skipTest("Resume not supported in this ZFS userspace version")
|
||||||
else:
|
else:
|
||||||
self.assertIn(": resuming", buf.getvalue())
|
self.assertIn(": resuming", buf.getvalue())
|
||||||
|
|
||||||
r=shelltest("zfs list -H -o name -r -t all test_target1")
|
r = shelltest("zfs list -H -o name -r -t all test_target1")
|
||||||
self.assertMultiLineEqual(r,"""
|
self.assertMultiLineEqual(r, """
|
||||||
test_target1
|
test_target1
|
||||||
test_target1/test_source1
|
test_target1/test_source1
|
||||||
test_target1/test_source1/fs1
|
test_target1/test_source1/fs1
|
||||||
@ -135,33 +131,32 @@ test_target1/test_source2/fs2/sub
|
|||||||
test_target1/test_source2/fs2/sub@test-20101111000000
|
test_target1/test_source2/fs2/sub@test-20101111000000
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
|
||||||
# generate an invalid resume token, and verify if its aborted automaticly
|
# generate an invalid resume token, and verify if its aborted automaticly
|
||||||
def test_initial_resumeabort(self):
|
def test_initial_resumeabort(self):
|
||||||
|
|
||||||
if "0.6.5" in ZFS_USERSPACE:
|
if "0.6.5" in ZFS_USERSPACE:
|
||||||
self.skipTest("Resume not supported in this ZFS userspace version")
|
self.skipTest("Resume not supported in this ZFS userspace version")
|
||||||
|
|
||||||
#inital backup, leaves resume token
|
# inital backup, leaves resume token
|
||||||
with patch('time.strftime', return_value="20101111000000"):
|
with patch('time.strftime', return_value="20101111000000"):
|
||||||
self.generate_resume()
|
self.generate_resume()
|
||||||
|
|
||||||
#remove corresponding source snapshot, so it becomes invalid
|
# remove corresponding source snapshot, so it becomes invalid
|
||||||
shelltest("zfs destroy test_source1/fs1@test-20101111000000")
|
shelltest("zfs destroy test_source1/fs1@test-20101111000000")
|
||||||
|
|
||||||
#NOTE: it can only abort the initial dataset if it has no subs
|
# NOTE: it can only abort the initial dataset if it has no subs
|
||||||
shelltest("zfs destroy test_target1/test_source1/fs1/sub; true")
|
shelltest("zfs destroy test_target1/test_source1/fs1/sub; true")
|
||||||
|
|
||||||
#--test try again, should abort old resume
|
# --test try again, should abort old resume
|
||||||
with patch('time.strftime', return_value="20101111000001"):
|
with patch('time.strftime', return_value="20101111000001"):
|
||||||
self.assertFalse(ZfsAutobackup("test test_target1 --verbose --test".split(" ")).run())
|
self.assertFalse(ZfsAutobackup("test test_target1 --verbose --test".split(" ")).run())
|
||||||
|
|
||||||
#try again, should abort old resume
|
# try again, should abort old resume
|
||||||
with patch('time.strftime', return_value="20101111000001"):
|
with patch('time.strftime', return_value="20101111000001"):
|
||||||
self.assertFalse(ZfsAutobackup("test test_target1 --verbose".split(" ")).run())
|
self.assertFalse(ZfsAutobackup("test test_target1 --verbose".split(" ")).run())
|
||||||
|
|
||||||
r=shelltest("zfs list -H -o name -r -t all test_target1")
|
r = shelltest("zfs list -H -o name -r -t all test_target1")
|
||||||
self.assertMultiLineEqual(r,"""
|
self.assertMultiLineEqual(r, """
|
||||||
test_target1
|
test_target1
|
||||||
test_target1/test_source1
|
test_target1/test_source1
|
||||||
test_target1/test_source1/fs1
|
test_target1/test_source1/fs1
|
||||||
@ -174,34 +169,33 @@ test_target1/test_source2/fs2/sub
|
|||||||
test_target1/test_source2/fs2/sub@test-20101111000000
|
test_target1/test_source2/fs2/sub@test-20101111000000
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
|
||||||
# generate an invalid resume token, and verify if its aborted automaticly
|
# generate an invalid resume token, and verify if its aborted automaticly
|
||||||
def test_incremental_resumeabort(self):
|
def test_incremental_resumeabort(self):
|
||||||
|
|
||||||
if "0.6.5" in ZFS_USERSPACE:
|
if "0.6.5" in ZFS_USERSPACE:
|
||||||
self.skipTest("Resume not supported in this ZFS userspace version")
|
self.skipTest("Resume not supported in this ZFS userspace version")
|
||||||
|
|
||||||
#initial backup
|
# initial backup
|
||||||
with patch('time.strftime', return_value="20101111000000"):
|
with patch('time.strftime', return_value="20101111000000"):
|
||||||
self.assertFalse(ZfsAutobackup("test test_target1 --verbose --allow-empty".split(" ")).run())
|
self.assertFalse(ZfsAutobackup("test test_target1 --verbose --allow-empty".split(" ")).run())
|
||||||
|
|
||||||
#icremental backup, leaves resume token
|
# icremental backup, leaves resume token
|
||||||
with patch('time.strftime', return_value="20101111000001"):
|
with patch('time.strftime', return_value="20101111000001"):
|
||||||
self.generate_resume()
|
self.generate_resume()
|
||||||
|
|
||||||
#remove corresponding source snapshot, so it becomes invalid
|
# remove corresponding source snapshot, so it becomes invalid
|
||||||
shelltest("zfs destroy test_source1/fs1@test-20101111000001")
|
shelltest("zfs destroy test_source1/fs1@test-20101111000001")
|
||||||
|
|
||||||
#--test try again, should abort old resume
|
# --test try again, should abort old resume
|
||||||
with patch('time.strftime', return_value="20101111000002"):
|
with patch('time.strftime', return_value="20101111000002"):
|
||||||
self.assertFalse(ZfsAutobackup("test test_target1 --verbose --test".split(" ")).run())
|
self.assertFalse(ZfsAutobackup("test test_target1 --verbose --test".split(" ")).run())
|
||||||
|
|
||||||
#try again, should abort old resume
|
# try again, should abort old resume
|
||||||
with patch('time.strftime', return_value="20101111000002"):
|
with patch('time.strftime', return_value="20101111000002"):
|
||||||
self.assertFalse(ZfsAutobackup("test test_target1 --verbose".split(" ")).run())
|
self.assertFalse(ZfsAutobackup("test test_target1 --verbose".split(" ")).run())
|
||||||
|
|
||||||
r=shelltest("zfs list -H -o name -r -t all test_target1")
|
r = shelltest("zfs list -H -o name -r -t all test_target1")
|
||||||
self.assertMultiLineEqual(r,"""
|
self.assertMultiLineEqual(r, """
|
||||||
test_target1
|
test_target1
|
||||||
test_target1/test_source1
|
test_target1/test_source1
|
||||||
test_target1/test_source1/fs1
|
test_target1/test_source1/fs1
|
||||||
@ -215,8 +209,7 @@ test_target1/test_source2/fs2/sub
|
|||||||
test_target1/test_source2/fs2/sub@test-20101111000000
|
test_target1/test_source2/fs2/sub@test-20101111000000
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
# create a resume situation, where the other side doesnt want the snapshot anymore ( should abort resume )
|
||||||
#create a resume situation, where the other side doesnt want the snapshot anymore ( should abort resume )
|
|
||||||
def test_abort_unwanted_resume(self):
|
def test_abort_unwanted_resume(self):
|
||||||
|
|
||||||
if "0.6.5" in ZFS_USERSPACE:
|
if "0.6.5" in ZFS_USERSPACE:
|
||||||
@ -225,22 +218,23 @@ test_target1/test_source2/fs2/sub@test-20101111000000
|
|||||||
with patch('time.strftime', return_value="20101111000000"):
|
with patch('time.strftime', return_value="20101111000000"):
|
||||||
self.assertFalse(ZfsAutobackup("test test_target1 --verbose".split(" ")).run())
|
self.assertFalse(ZfsAutobackup("test test_target1 --verbose".split(" ")).run())
|
||||||
|
|
||||||
#generate resume
|
# generate resume
|
||||||
with patch('time.strftime', return_value="20101111000001"):
|
with patch('time.strftime', return_value="20101111000001"):
|
||||||
self.generate_resume()
|
self.generate_resume()
|
||||||
|
|
||||||
with OutputIO() as buf:
|
with OutputIO() as buf:
|
||||||
with redirect_stdout(buf):
|
with redirect_stdout(buf):
|
||||||
#incremental, doesnt want previous anymore
|
# incremental, doesnt want previous anymore
|
||||||
with patch('time.strftime', return_value="20101111000002"):
|
with patch('time.strftime', return_value="20101111000002"):
|
||||||
self.assertFalse(ZfsAutobackup("test test_target1 --verbose --keep-target=0 --debug --allow-empty".split(" ")).run())
|
self.assertFalse(ZfsAutobackup(
|
||||||
|
"test test_target1 --verbose --keep-target=0 --debug --allow-empty".split(" ")).run())
|
||||||
|
|
||||||
print(buf.getvalue())
|
print(buf.getvalue())
|
||||||
|
|
||||||
self.assertIn(": aborting resume, since", buf.getvalue())
|
self.assertIn(": aborting resume, since", buf.getvalue())
|
||||||
|
|
||||||
r=shelltest("zfs list -H -o name -r -t all test_target1")
|
r = shelltest("zfs list -H -o name -r -t all test_target1")
|
||||||
self.assertMultiLineEqual(r,"""
|
self.assertMultiLineEqual(r, """
|
||||||
test_target1
|
test_target1
|
||||||
test_target1/test_source1
|
test_target1/test_source1
|
||||||
test_target1/test_source1/fs1
|
test_target1/test_source1/fs1
|
||||||
@ -253,23 +247,20 @@ test_target1/test_source2/fs2/sub
|
|||||||
test_target1/test_source2/fs2/sub@test-20101111000002
|
test_target1/test_source2/fs2/sub@test-20101111000002
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
|
||||||
def test_missing_common(self):
|
def test_missing_common(self):
|
||||||
|
|
||||||
with patch('time.strftime', return_value="20101111000000"):
|
with patch('time.strftime', return_value="20101111000000"):
|
||||||
self.assertFalse(ZfsAutobackup("test test_target1 --verbose --allow-empty".split(" ")).run())
|
self.assertFalse(ZfsAutobackup("test test_target1 --verbose --allow-empty".split(" ")).run())
|
||||||
|
|
||||||
#remove common snapshot and leave nothing
|
# remove common snapshot and leave nothing
|
||||||
shelltest("zfs release zfs_autobackup:test test_source1/fs1@test-20101111000000")
|
shelltest("zfs release zfs_autobackup:test test_source1/fs1@test-20101111000000")
|
||||||
shelltest("zfs destroy test_source1/fs1@test-20101111000000")
|
shelltest("zfs destroy test_source1/fs1@test-20101111000000")
|
||||||
|
|
||||||
with patch('time.strftime', return_value="20101111000001"):
|
with patch('time.strftime', return_value="20101111000001"):
|
||||||
self.assertTrue(ZfsAutobackup("test test_target1 --verbose --allow-empty".split(" ")).run())
|
self.assertTrue(ZfsAutobackup("test test_target1 --verbose --allow-empty".split(" ")).run())
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
############# TODO:
|
############# TODO:
|
||||||
def test_ignoretransfererrors(self):
|
def test_ignoretransfererrors(self):
|
||||||
|
|
||||||
self.skipTest("todo: create some kind of situation where zfs recv exits with an error but transfer is still ok (happens in practice with acltype)")
|
self.skipTest(
|
||||||
|
"todo: create some kind of situation where zfs recv exits with an error but transfer is still ok (happens in practice with acltype)")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user