fix: distinguish supported network backup mounts from local filesystems
This commit is contained in:
+18
-1
@@ -1,5 +1,6 @@
|
||||
import datetime as dt
|
||||
from contextlib import closing
|
||||
from pathlib import PurePosixPath
|
||||
import sqlite3
|
||||
import unittest
|
||||
from unittest.mock import patch
|
||||
@@ -44,7 +45,7 @@ class BackupTests(unittest.TestCase):
|
||||
def test_network_copy_checksum_and_retention_only_touch_owned_files(self):
|
||||
backup=self.source_file();network=app.DATA/'network';network.mkdir();unrelated=network/'keep.sqlite';unrelated.write_text('unrelated')
|
||||
app.set_setting('backup_config',dict(backup.config(),networkPath=str(network),keep=1))
|
||||
with patch('backups.os.path.ismount',side_effect=lambda p:p==network.resolve()):
|
||||
with patch.object(backup,'network_mount',return_value=True):
|
||||
first=backup.run();second=backup.run()
|
||||
self.assertTrue(first['networkOk'],first);self.assertTrue(second['networkOk'],second)
|
||||
self.assertTrue(unrelated.exists());self.assertFalse((network/first['file']).exists());self.assertTrue((network/second['file']).exists())
|
||||
@@ -63,3 +64,19 @@ class BackupTests(unittest.TestCase):
|
||||
backup.running=True
|
||||
with self.assertRaises(app.Problem):backup.start()
|
||||
with self.assertRaises(app.Problem):backup.save(backup.config())
|
||||
|
||||
def test_local_filesystems_are_never_reported_as_network_mounts(self):
|
||||
records=['1 0 8:1 / / rw - ext4 /dev/sda1 rw',
|
||||
'2 1 0:1 / /tmp rw - tmpfs tmpfs rw',
|
||||
'3 1 0:2 / /mnt/cloud rw - nfs4 nas:/share rw',
|
||||
'4 3 0:3 / /mnt/cloud/local rw - tmpfs tmpfs rw']
|
||||
for path in ('/var/lib/backups','/tmp/backups','/mnt/cloud/local/backups'):
|
||||
self.assertFalse(Backups.linux_network_mount(PurePosixPath(path),records))
|
||||
self.assertTrue(Backups.linux_network_mount(PurePosixPath('/mnt/cloud/backups'),records))
|
||||
|
||||
def test_network_mount_paths_with_spaces_and_supported_fuse_types(self):
|
||||
for filesystem in ('cifs','fuse.rclone','fuse.davfs','fuse.sshfs'):
|
||||
records=['1 0 8:1 / / rw - ext4 /dev/sda1 rw',
|
||||
'2 1 0:2 / /mnt/cloud\\040drive rw - '+filesystem+' remote rw']
|
||||
self.assertTrue(Backups.linux_network_mount(PurePosixPath('/mnt/cloud drive/backups'),records))
|
||||
self.assertFalse(Backups.linux_network_mount(PurePosixPath('/tmp'),['invalid data']))
|
||||
|
||||
Reference in New Issue
Block a user