fix: distinguish supported network backup mounts from local filesystems

This commit is contained in:
Codex
2026-10-04 17:28:45 +08:00
parent 83e8981603
commit 631c411602
4 changed files with 55 additions and 7 deletions
+18 -1
View File
@@ -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']))