103 lines
3.3 KiB
Python
103 lines
3.3 KiB
Python
"""Test bidirectional conversion between INI and JSON formats.
|
|
|
|
This script verifies that we can:
|
|
1. Load from INI → save to JSON
|
|
2. Load from JSON → save to INI
|
|
3. Compare the results
|
|
"""
|
|
from pathlib import Path
|
|
import sys
|
|
|
|
sys.path.insert(0, str(Path(__file__).parent.parent))
|
|
|
|
from pydownloadfwviasrio.profiles import ProfileManager
|
|
|
|
|
|
def main() -> None:
|
|
"""Test INI ↔ JSON conversion."""
|
|
|
|
# Step 1: Load from original INI
|
|
print("Step 1: Loading from original targets.ini...")
|
|
manager1 = ProfileManager()
|
|
manager1.load_from_ini(Path("_OLD/Vecchia_app/FpgaBeamMeUp/targets.ini"))
|
|
|
|
# Step 2: Save to JSON
|
|
print("Step 2: Saving to flash_profiles.json...")
|
|
manager1.config_path = Path("flash_profiles.json")
|
|
manager1.save()
|
|
|
|
# Step 3: Load from JSON
|
|
print("Step 3: Loading from flash_profiles.json...")
|
|
manager2 = ProfileManager(Path("flash_profiles.json"))
|
|
|
|
# Step 4: Export back to INI
|
|
print("Step 4: Exporting back to test_output.ini...")
|
|
manager2.export_to_ini(Path("test_output.ini"))
|
|
|
|
# Verify data consistency
|
|
print("\n" + "=" * 60)
|
|
print("VERIFICATION")
|
|
print("=" * 60)
|
|
|
|
print(f"\nGlobal Config Match: ", end="")
|
|
if (manager1.global_config.ip == manager2.global_config.ip and
|
|
manager1.global_config.port == manager2.global_config.port and
|
|
manager1.global_config.default_target == manager2.global_config.default_target):
|
|
print("✓ PASSED")
|
|
else:
|
|
print("✗ FAILED")
|
|
|
|
print(f"Models Count Match: ", end="")
|
|
if len(manager1.models) == len(manager2.models):
|
|
print(f"✓ PASSED ({len(manager1.models)} models)")
|
|
else:
|
|
print(f"✗ FAILED ({len(manager1.models)} vs {len(manager2.models)})")
|
|
|
|
print(f"Targets Count Match: ", end="")
|
|
if len(manager1.targets) == len(manager2.targets):
|
|
print(f"✓ PASSED ({len(manager1.targets)} targets)")
|
|
else:
|
|
print(f"✗ FAILED ({len(manager1.targets)} vs {len(manager2.targets)})")
|
|
|
|
# Check individual models
|
|
print(f"\nModel Details Match: ", end="")
|
|
models_match = True
|
|
for id_model in manager1.models:
|
|
m1 = manager1.models[id_model]
|
|
m2 = manager2.models.get(id_model)
|
|
if not m2:
|
|
models_match = False
|
|
break
|
|
if (m1.model != m2.model or
|
|
m1.num_sectors != m2.num_sectors or
|
|
m1.golden_start != m2.golden_start):
|
|
models_match = False
|
|
break
|
|
print("✓ PASSED" if models_match else "✗ FAILED")
|
|
|
|
# Check individual targets
|
|
print(f"Target Details Match: ", end="")
|
|
targets_match = True
|
|
for id_target in manager1.targets:
|
|
t1 = manager1.targets[id_target]
|
|
t2 = manager2.targets.get(id_target)
|
|
if not t2:
|
|
targets_match = False
|
|
break
|
|
if (t1.slot_address != t2.slot_address or
|
|
t1.architecture != t2.architecture or
|
|
t1.id_model != t2.id_model):
|
|
targets_match = False
|
|
break
|
|
print("✓ PASSED" if targets_match else "✗ FAILED")
|
|
|
|
print("\n" + "=" * 60)
|
|
print("Files generated:")
|
|
print(f" - flash_profiles.json (JSON format)")
|
|
print(f" - test_output.ini (INI format)")
|
|
print("=" * 60)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|