Files
xinjian0101-continuity-dire…/tests/test_reliability.py
xinjian0101 2f3428b6dd feat: release Continuity Director v0.8.20 after 20 iterations
Merge 20 sequential plugin iterations covering lifecycle validation, frontend smoke tests, six reliability nodes, bilingual help pages, installable ZIP packaging, and expanded CI.
2026-06-19 15:32:07 +08:00

63 lines
2.8 KiB
Python

from __future__ import annotations
import importlib
import json
import unittest
from _bootstrap import PACKAGE_NAME
continuity = importlib.import_module(f"{PACKAGE_NAME}.continuity_core")
extended = importlib.import_module(f"{PACKAGE_NAME}.extended_nodes")
environment_nodes = importlib.import_module(f"{PACKAGE_NAME}.environment_nodes")
validation = importlib.import_module(f"{PACKAGE_NAME}.validation_core")
class ReliabilityTests(unittest.TestCase):
def test_verify_hashed_payload(self):
payload = continuity.build_lock("project", "demo", {"fps": 24})
self.assertTrue(validation.verify_hashed_payload(payload)["valid"])
payload["data"]["fps"] = 30
self.assertFalse(validation.verify_hashed_payload(payload)["valid"])
def test_verify_node(self):
payload = continuity.build_lock("project", "demo", {"fps": 24})
valid, report_json, expected = extended.CDVerifyPackage().verify(json.dumps(payload))
self.assertTrue(valid)
self.assertEqual(json.loads(report_json)["expected_hash"], expected)
def test_migration_node(self):
payload = {"schema": "continuity-director/project@0.9", "id": "demo"}
migrated_json, changes_json, changed = extended.CDMigratePayload().migrate(json.dumps(payload), "1.0")
migrated = json.loads(migrated_json)
self.assertTrue(changed)
self.assertEqual(migrated["schema"], "continuity-director/project@1.0")
self.assertEqual(json.loads(changes_json)[0]["path"], "$.schema")
self.assertTrue(validation.verify_hashed_payload(migrated)["valid"])
def test_retry_policy_is_bounded(self):
policy, _, first = extended.CDRetryPolicy().build(5, 2.0, 3.0, 20.0)
self.assertEqual(first, 2.0)
self.assertEqual(policy["delays_seconds"], [2.0, 6.0, 18.0, 20.0])
def test_queue_checkpoint(self):
plan = {"hash": "plan", "waves": [{"tasks": [{"task_id": "a"}, {"task_id": "b"}]}]}
checkpoint, _, remaining = extended.CDQueueCheckpoint().checkpoint(plan, '["a"]', "[]")
self.assertEqual(remaining, 1)
self.assertEqual(checkpoint["remaining"], ["b"])
def test_idempotency_key_is_order_independent(self):
key_a, canonical_a = extended.CDIdempotencyKey().create("generation", '{"b":2,"a":1}')
key_b, canonical_b = extended.CDIdempotencyKey().create("generation", '{"a":1,"b":2}')
self.assertEqual(key_a, key_b)
self.assertEqual(canonical_a, canonical_b)
def test_environment_lock(self):
lock, text, lock_hash = environment_nodes.CDEnvironmentLock().build("0.3.x", "1.46.x", '["model-a"]', "test")
self.assertEqual(json.loads(text)["hash"], lock_hash)
self.assertEqual(lock["models"], ["model-a"])
self.assertTrue(validation.verify_hashed_payload(lock)["valid"])
if __name__ == "__main__":
unittest.main()