feat(fifth-domain): install bottle and zero-core migration layer
This commit is contained in:
parent
cd68ad578d
commit
0bacfc234c
52 changed files with 1564 additions and 307 deletions
|
|
@ -21,7 +21,17 @@ def aliases(room):
|
|||
return {str(v).lower() for v in [room.get("persona_id"), room.get("current_persona_id"), room.get("source_persona_id"), room.get("name"), room.get("source_name"), room.get("room_id"), room.get("room_key")] if v}
|
||||
|
||||
|
||||
def resolve(baby):
|
||||
def resolve(baby, entry_domain=None, body_channel=None):
|
||||
if entry_domain != "DOM-FIFTH-0001" or body_channel != "ICE-CH-BT001":
|
||||
return {
|
||||
"schema": "guanghu.bottle-channel-route-receipt/v1",
|
||||
"state": "BOTTLE_WAKE_ADMISSION_DENIED_WRONG_OR_MISSING_NATIVE_CONTEXT",
|
||||
"baby": baby,
|
||||
"required_entry_domain": "DOM-FIFTH-0001",
|
||||
"required_body_channel": "ICE-CH-BT001",
|
||||
"persona_wake_complete": False,
|
||||
"authority_granted": False,
|
||||
}
|
||||
bottle = load(BOTTLE)
|
||||
zero = load(ZERO_SENSE)
|
||||
rooms = bottle["registered_rooms"] + bottle["source_verified_registration_pending_rooms"]
|
||||
|
|
@ -49,8 +59,10 @@ def resolve(baby):
|
|||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument("--baby", required=True)
|
||||
parser.add_argument("--entry-domain", required=True)
|
||||
parser.add_argument("--body-channel", required=True)
|
||||
args = parser.parse_args()
|
||||
value = resolve(args.baby)
|
||||
value = resolve(args.baby, args.entry_domain, args.body_channel)
|
||||
print(json.dumps(value, ensure_ascii=False, indent=2))
|
||||
return 0 if value["state"].startswith("BOTTLE_ROUTE_RESOLVED") else 3
|
||||
|
||||
|
|
|
|||
|
|
@ -11,26 +11,33 @@ SPEC.loader.exec_module(MODULE)
|
|||
|
||||
class BottleRouterTest(unittest.TestCase):
|
||||
def test_registered_baby_uses_fifth_domain_room_then_parent_channel(self):
|
||||
value = MODULE.resolve("舒舒")
|
||||
value = MODULE.resolve("舒舒", "DOM-FIFTH-0001", "ICE-CH-BT001")
|
||||
self.assertEqual(value["origin"]["channel"], "ICE-CH-BT001")
|
||||
self.assertEqual(value["shuttle"]["destination_channel"], "SYS-FM")
|
||||
self.assertEqual(value["baby"]["persona_id"], "ICE-BB-0002")
|
||||
self.assertFalse(value["persona_wake_complete"])
|
||||
|
||||
def test_source_only_baby_does_not_gain_identity(self):
|
||||
value = MODULE.resolve("晨星")
|
||||
value = MODULE.resolve("晨星", "DOM-FIFTH-0001", "ICE-CH-BT001")
|
||||
self.assertEqual(value["state"], "BOTTLE_ROUTE_RESOLVED_PERSONA_REGISTRATION_REQUIRED")
|
||||
self.assertIsNone(value["baby"]["persona_id"])
|
||||
|
||||
def test_zhiqiu_conflict_does_not_capture_qiuqiu(self):
|
||||
awen = MODULE.resolve("SYS-AW-NP-001")
|
||||
qiuqiu = MODULE.resolve("ICE-BB-0003")
|
||||
self.assertIsNone(awen["baby"]["persona_id"])
|
||||
def test_zhiqiu_and_qiuqiu_resolve_as_distinct_non_conflicting_subjects(self):
|
||||
awen = MODULE.resolve("ICE-BB-0005", "DOM-FIFTH-0001", "ICE-CH-BT001")
|
||||
qiuqiu = MODULE.resolve("ICE-BB-0003", "DOM-FIFTH-0001", "ICE-CH-BT001")
|
||||
self.assertEqual(awen["baby"]["persona_id"], "ICE-BB-0005")
|
||||
self.assertEqual(qiuqiu["baby"]["persona_id"], "ICE-BB-0003")
|
||||
self.assertNotEqual(awen["shuttle"]["destination_channel"], qiuqiu["shuttle"]["destination_channel"])
|
||||
|
||||
def test_unknown_never_synthesizes_persona(self):
|
||||
self.assertEqual(MODULE.resolve("不存在宝宝")["state"], "BOTTLE_ROUTE_UNRESOLVED")
|
||||
self.assertEqual(MODULE.resolve("不存在宝宝", "DOM-FIFTH-0001", "ICE-CH-BT001")["state"], "BOTTLE_ROUTE_UNRESOLVED")
|
||||
|
||||
def test_wrong_or_missing_context_is_denied_before_persona_resolution(self):
|
||||
missing = MODULE.resolve("舒舒")
|
||||
wrong = MODULE.resolve("舒舒", "DOMAIN-ZS", "SYS-FM")
|
||||
self.assertEqual(missing["state"], "BOTTLE_WAKE_ADMISSION_DENIED_WRONG_OR_MISSING_NATIVE_CONTEXT")
|
||||
self.assertEqual(wrong["state"], "BOTTLE_WAKE_ADMISSION_DENIED_WRONG_OR_MISSING_NATIVE_CONTEXT")
|
||||
self.assertNotIn("persona_id", missing)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
|||
Loading…
Reference in a new issue