feat(v2): complete v2 reimplementation
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import copy
|
||||
import importlib
|
||||
|
||||
import pytest
|
||||
|
||||
snapshot = importlib.import_module("backup_tool.snapshot")
|
||||
|
||||
|
||||
def file_entry(path: str = "data.txt") -> dict[str, object]:
|
||||
return {
|
||||
"path": path,
|
||||
"type": "file",
|
||||
"size": 1,
|
||||
"blob_digest": "a" * 64,
|
||||
"mode": 0o600,
|
||||
"mtime_ns": 0,
|
||||
"link_target": None,
|
||||
"metadata_support": ["mode", "mtime_ns"],
|
||||
}
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"entries",
|
||||
[
|
||||
[file_entry("../escape")],
|
||||
[file_entry("/absolute")],
|
||||
[file_entry("windows\\escape")],
|
||||
[file_entry(), file_entry()],
|
||||
[file_entry("file"), file_entry("file/child")],
|
||||
[
|
||||
{
|
||||
**file_entry("link"),
|
||||
"type": "symlink",
|
||||
"size": 0,
|
||||
"blob_digest": None,
|
||||
"link_target": "../escape",
|
||||
}
|
||||
],
|
||||
],
|
||||
)
|
||||
def test_restore_rejects_semantically_unsafe_signed_manifest_entries(
|
||||
entries: list[dict[str, object]],
|
||||
) -> None:
|
||||
manifest = {"entries": copy.deepcopy(entries)}
|
||||
|
||||
with pytest.raises(snapshot.SnapshotIntegrityError):
|
||||
snapshot._safe_restore_entries(manifest)
|
||||
Reference in New Issue
Block a user