1
1
"""Test backups."""
2
2
3
+ from contextlib import AbstractContextManager , nullcontext as does_not_raise
3
4
from os import listdir
4
5
from pathlib import Path
5
6
from shutil import copy
@@ -116,28 +117,44 @@ async def test_consolidate(
116
117
}
117
118
118
119
119
- @pytest .mark .asyncio
120
120
@pytest .mark .parametrize (
121
- "tarfile_side_effect, securetar_side_effect, expected_exception" ,
121
+ (
122
+ "tarfile_side_effect" ,
123
+ "securetar_side_effect" ,
124
+ "expected_exception" ,
125
+ ),
122
126
[
123
- (None , None , None ), # Successful validation
124
- (FileNotFoundError , None , BackupFileNotFoundError ), # File not found
125
- (None , tarfile .ReadError , BackupInvalidError ), # Invalid password
127
+ (None , None , does_not_raise ()), # Successful validation
128
+ (
129
+ FileNotFoundError ,
130
+ None ,
131
+ pytest .raises (
132
+ BackupFileNotFoundError ,
133
+ match = r"Cannot validate backup at [^, ]+, file does not exist!" ,
134
+ ),
135
+ ), # File not found
136
+ (
137
+ None ,
138
+ tarfile .ReadError ,
139
+ pytest .raises (
140
+ BackupInvalidError , match = "Invalid password for backup 93b462f8"
141
+ ),
142
+ ), # Invalid password
126
143
],
127
144
)
128
145
async def test_validate_backup (
129
146
coresys : CoreSys ,
130
147
tmp_path : Path ,
131
- tarfile_side_effect ,
132
- securetar_side_effect ,
133
- expected_exception ,
148
+ tarfile_side_effect : type [ Exception ] | None ,
149
+ securetar_side_effect : type [ Exception ] | None ,
150
+ expected_exception : AbstractContextManager ,
134
151
):
135
152
"""Parameterized test for validate_backup."""
136
153
enc_tar = Path (copy (get_fixture_path ("backup_example_enc.tar" ), tmp_path ))
137
154
enc_backup = Backup (coresys , enc_tar , "test" , None )
138
155
await enc_backup .load ()
139
156
140
- backup_tar_mock = MagicMock ()
157
+ backup_tar_mock = MagicMock (spec_set = tarfile . TarFile )
141
158
backup_tar_mock .getmembers .return_value = [
142
159
MagicMock (name = "test.tar.gz" )
143
160
] # Fake tar entries
@@ -150,16 +167,14 @@ async def test_validate_backup(
150
167
patch (
151
168
"tarfile.open" ,
152
169
MagicMock (
153
- return_value = backup_context_mock , side_effect = tarfile_side_effect
170
+ return_value = backup_context_mock ,
171
+ side_effect = tarfile_side_effect ,
154
172
),
155
173
),
156
174
patch (
157
175
"supervisor.backups.backup.SecureTarFile" ,
158
176
MagicMock (side_effect = securetar_side_effect ),
159
177
),
178
+ expected_exception ,
160
179
):
161
- if expected_exception :
162
- with pytest .raises (expected_exception ):
163
- await enc_backup .validate_backup (None )
164
- else :
165
- await enc_backup .validate_backup (None )
180
+ await enc_backup .validate_backup (None )
0 commit comments