Files
momentry_core/scripts/test_birth_uuid.py
Warren 8f05a7c188 feat: update Python processors and add utility scripts
- Update ASR, face, OCR, pose processors
- Add release pre-flight check script
- Add synonym generation, chunk processing scripts
- Add face recognition, stamp search utilities
2026-04-30 15:07:49 +08:00

158 lines
5.3 KiB
Python

#!/opt/homebrew/bin/python3.11
"""
Birth UUID Generation Test Script
Purpose: Verify UUID generation logic independently from Rust compilation
Date: 2026-04-27
"""
import hashlib
import subprocess
import json
from datetime import datetime, timezone
def get_mac_address():
"""Get MAC address of primary network interface"""
result = subprocess.run(['ifconfig'], capture_output=True, text=True)
lines = result.stdout.split('\n')
for line in lines:
if 'ether' in line:
mac = line.split('ether')[1].strip().split()[0]
return mac
return "00:00:00:00:00:00"
def compute_birth_uuid(mac_address, timestamp, username, filename):
"""
Compute Birth UUID (SHA256 hash)
UUID = SHA256(mac_address|timestamp|username|filename)[0:32]
"""
key = f"{mac_address}|{timestamp}|{username}|{filename}"
hash_bytes = hashlib.sha256(key.encode())
hash_hex = hash_bytes.hexdigest()
return hash_hex[0:32]
def extract_username_from_path(path):
"""Extract username from sftpgo user home path"""
relative = path.lstrip('./')
parts = relative.split('/')
return parts[0] if parts else 'demo'
def test_uuid_generation():
"""Test UUID generation scenarios"""
mac = get_mac_address()
timestamp = datetime.now(timezone.utc).isoformat()
print("=" * 60)
print("Birth UUID Generation Test")
print("=" * 60)
print()
print(f"MAC Address: {mac}")
print(f"Timestamp: {timestamp}")
print()
# Test 1: Basic generation
uuid1 = compute_birth_uuid(mac, timestamp, "demo", "video.mp4")
print(f"Test 1 - Basic Generation:")
print(f" UUID: {uuid1}")
print(f" Length: {len(uuid1)} (expected: 32)")
assert len(uuid1) == 32, "UUID length should be 32"
print(f" ✓ PASS")
print()
# Test 2: Different MAC
uuid2 = compute_birth_uuid("a1:b2:c3:d4:e5:f6", timestamp, "demo", "video.mp4")
uuid3 = compute_birth_uuid("d4:e5:f6:a1:b2:c3", timestamp, "demo", "video.mp4")
print(f"Test 2 - Different MAC:")
print(f" UUID (MAC A): {uuid2}")
print(f" UUID (MAC B): {uuid3}")
assert uuid2 != uuid3, "Different MAC should produce different UUID"
print(f" ✓ PASS (UUIDs different)")
print()
# Test 3: Different Time
uuid4 = compute_birth_uuid(mac, "2026-01-01T10:00:00Z", "demo", "video.mp4")
uuid5 = compute_birth_uuid(mac, "2026-01-01T14:00:00Z", "demo", "video.mp4")
print(f"Test 3 - Different Time:")
print(f" UUID (Time 10:00): {uuid4}")
print(f" UUID (Time 14:00): {uuid5}")
assert uuid4 != uuid5, "Different time should produce different UUID"
print(f" ✓ PASS (UUIDs different)")
print()
# Test 4: Different User
uuid6 = compute_birth_uuid(mac, timestamp, "demo", "video.mp4")
uuid7 = compute_birth_uuid(mac, timestamp, "warren", "video.mp4")
print(f"Test 4 - Different User:")
print(f" UUID (demo): {uuid6}")
print(f" UUID (warren): {uuid7}")
assert uuid6 != uuid7, "Different user should produce different UUID"
print(f" ✓ PASS (UUIDs different)")
print()
# Test 5: Same elements = same UUID
uuid8 = compute_birth_uuid("a1:b2:c3", "2026-01-01T10:00:00Z", "demo", "video.mp4")
uuid9 = compute_birth_uuid("a1:b2:c3", "2026-01-01T10:00:00Z", "demo", "video.mp4")
print(f"Test 5 - Same Elements:")
print(f" UUID (call 1): {uuid8}")
print(f" UUID (call 2): {uuid9}")
assert uuid8 == uuid9, "Same elements should produce same UUID"
print(f" ✓ PASS (UUIDs same)")
print()
# Test 6: Real-world scenario
print(f"Test 6 - Real-world Scenario (GOPR0001.mp4):")
uuid_cam1 = compute_birth_uuid("a1:b2:c3:d4:e5:f6", "2026-01-01T10:00:00Z", "demo", "GOPR0001.mp4")
uuid_cam2 = compute_birth_uuid("d4:e5:f6:a1:b2:c3", "2026-01-01T10:00:00Z", "demo", "GOPR0001.mp4")
print(f" Camera A UUID: {uuid_cam1}")
print(f" Camera B UUID: {uuid_cam2}")
assert uuid_cam1 != uuid_cam2, "Same filename on different cameras should have different UUIDs"
print(f" ✓ PASS (GOPR0001.mp4 handled correctly)")
print()
print("=" * 60)
print("All Tests Passed ✓")
print("=" * 60)
return {
"mac_address": mac,
"timestamp": timestamp,
"sample_uuid": uuid1,
"test_results": {
"different_mac": uuid2 != uuid3,
"different_time": uuid4 != uuid5,
"different_user": uuid6 != uuid7,
"same_elements": uuid8 == uuid9,
"same_filename_different_mac": uuid_cam1 != uuid_cam2
}
}
def generate_birth_registration_sample():
"""Generate sample birth_registration JSON"""
mac = get_mac_address()
timestamp = datetime.now(timezone.utc).isoformat()
username = "demo"
filename = "GOPR0001.mp4"
uuid = compute_birth_uuid(mac, timestamp, username, filename)
birth_registration = {
"uuid": uuid,
"registration_source": {
"mac_address": mac,
"username": username,
"timestamp": timestamp,
"original_path": "./demo",
"original_filename": filename
}
}
print("\nSample birth_registration JSON:")
print(json.dumps(birth_registration, indent=2))
return birth_registration
if __name__ == "__main__":
test_uuid_generation()
generate_birth_registration_sample()