diff --git a/supervisor/backups/backup.py b/supervisor/backups/backup.py index 094d60c98..6fad87a82 100644 --- a/supervisor/backups/backup.py +++ b/supervisor/backups/backup.py @@ -183,7 +183,15 @@ class Backup(CoreSysAttributes): days=self.sys_backups.days_until_stale ) - def new(self, slug, name, date, sys_type, password=None, compressed=True): + def new( + self, + slug: str, + name: str, + date: str, + sys_type: BackupType, + password: str | None = None, + compressed: bool = True, + ): """Initialize a new backup.""" # Init metadata self._data[ATTR_VERSION] = 2 @@ -288,7 +296,7 @@ class Backup(CoreSysAttributes): async def __aenter__(self): """Async context to open a backup.""" - self._tmp = TemporaryDirectory(dir=str(self.sys_config.path_tmp)) + self._tmp = TemporaryDirectory(dir=str(self.tarfile.parent)) # create a backup if not self.tarfile.is_file(): diff --git a/tests/backups/test_backup.py b/tests/backups/test_backup.py new file mode 100644 index 000000000..3e7b07e1b --- /dev/null +++ b/tests/backups/test_backup.py @@ -0,0 +1,22 @@ +"""Test backups.""" + +from os import listdir +from pathlib import Path + +from supervisor.backups.backup import Backup +from supervisor.backups.const import BackupType +from supervisor.coresys import CoreSys + + +async def test_new_backup_stays_in_folder(coresys: CoreSys, tmp_path: Path): + """Test making a new backup operates entirely within folder where backup will be stored.""" + backup = Backup(coresys, tmp_path / "my_backup.tar") + backup.new("test", "test", "2023-07-21T21:05:00.000000+00:00", BackupType.FULL) + assert not listdir(tmp_path) + + async with backup: + assert len(listdir(tmp_path)) == 1 + assert not backup.tarfile.exists() + + assert len(listdir(tmp_path)) == 1 + assert backup.tarfile.exists()