53 lines
1.7 KiB
Python
53 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
import struct
|
|
|
|
from bakrest.usn_journal import (
|
|
USN_REASON_BASIC_INFO_CHANGE,
|
|
USN_REASON_CLOSE,
|
|
USN_REASON_DATA_EXTEND,
|
|
USN_REASON_DATA_OVERWRITE,
|
|
USN_REASON_FILE_CREATE,
|
|
USN_REASON_RENAME_NEW_NAME,
|
|
is_meaningful_usn_reason,
|
|
parse_usn_records,
|
|
)
|
|
|
|
|
|
def test_usn_reason_filter_accepts_real_data_changes() -> None:
|
|
assert is_meaningful_usn_reason(USN_REASON_DATA_OVERWRITE)
|
|
assert is_meaningful_usn_reason(USN_REASON_DATA_EXTEND | USN_REASON_CLOSE)
|
|
assert is_meaningful_usn_reason(USN_REASON_FILE_CREATE)
|
|
assert is_meaningful_usn_reason(USN_REASON_RENAME_NEW_NAME)
|
|
|
|
|
|
def test_usn_reason_filter_rejects_metadata_only_changes() -> None:
|
|
assert not is_meaningful_usn_reason(USN_REASON_BASIC_INFO_CHANGE)
|
|
assert not is_meaningful_usn_reason(USN_REASON_CLOSE)
|
|
|
|
|
|
def test_parse_usn_record_v2_reason_and_file_reference() -> None:
|
|
record = bytearray(64)
|
|
struct.pack_into("<IHH", record, 0, 64, 2, 0)
|
|
struct.pack_into("<Q", record, 8, 12345)
|
|
struct.pack_into("<I", record, 40, USN_REASON_DATA_OVERWRITE)
|
|
|
|
records = parse_usn_records(bytes(record))
|
|
|
|
assert len(records) == 1
|
|
assert records[0].file_reference_number == 12345
|
|
assert records[0].reason == USN_REASON_DATA_OVERWRITE
|
|
|
|
|
|
def test_parse_usn_record_v3_reason_and_file_reference() -> None:
|
|
record = bytearray(80)
|
|
struct.pack_into("<IHH", record, 0, 80, 3, 0)
|
|
record[8:24] = (12345).to_bytes(16, "little")
|
|
struct.pack_into("<I", record, 56, USN_REASON_FILE_CREATE)
|
|
|
|
records = parse_usn_records(bytes(record))
|
|
|
|
assert len(records) == 1
|
|
assert records[0].file_reference_number == 12345
|
|
assert records[0].reason == USN_REASON_FILE_CREATE
|