import os import sys sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "tests")) import _m11b2_compat as H # noqa: E402 e = H.RuntimeEngine() H.install(e) try: r1 = H.apply(tenant_id=7, world_id=1, session_id=11, event_type="unit.move", payload={"dx": 1}, state_updates=[{"entity_id": "e1", "state": {"hp": 2}}], client_event_id="ev-1", actor_id="u1") print("R1", sorted(r1.keys())) print("R1 vals", r1["ok"], r1["dedup"], r1["event_id"], r1["seq"], r1["state_rows"], r1["stmt_count"], r1["channel"]) print("states", r1["states"]) print("trace", H.trace_kinds(e)) print("counts", e.count(H.EVENT_TABLE), e.count(H.STATE_TABLE)) print("state row", H.read(tenant_id=7, session_id=11)) # dedup r2 = H.apply(tenant_id=7, world_id=1, session_id=11, event_type="unit.move", payload={"dx": 1}, state_updates=[{"entity_id": "e1", "state": {"hp": 9}}], client_event_id="ev-1") print("R2", r2["dedup"], r2["event_id"], r2["seq"], r2["state_rows"], sorted(r2.keys())) print("counts after dedup", e.count(H.EVENT_TABLE), e.count(H.STATE_TABLE)) # conflict try: H.apply(tenant_id=7, world_id=1, session_id=11, event_type="x", payload={}, state_updates=[{"entity_id": "e1", "state": {"hp": 0}}], client_event_id="ev-3", base_version=999) print("NO CONFLICT !!") except H.RtxError as exc: print("conflict code", exc.code, "trace", H.trace_kinds(e)[-3:]) print("counts after conflict", e.count(H.EVENT_TABLE), e.count(H.STATE_TABLE)) # snapshot r3 = H.apply(tenant_id=7, world_id=1, session_id=11, event_type="snap", payload={}, state_updates=[{"entity_id": "e1", "state": {"hp": 5}}], client_event_id="ev-4", snapshot={"reason": "join", "hp": 5}) print("snapshot rows", e.count(H.SNAPSHOT_TABLE), "broadcasts", len(e.broadcasts)) print("broadcast payload keys", sorted(r3.keys())) print("UPDATE stmts", H.update_statements(e)) print("errors:") for kw in ({"tenant_id": None}, {"world_id": None}, {"session_id": None}, {"event_type": None}): base = dict(tenant_id=7, world_id=1, session_id=11, event_type="x", payload={}) base.update(kw) try: H.apply(**base) print(" no raise for", kw) except H.RtxError as exc: print(" ", kw, "->", exc.code) # bad state_updates for su in ([{"state": {"a": 1}}], [{"entity_id": "e1"}], "notalist"): try: H.apply(tenant_id=7, world_id=1, session_id=11, event_type="x", payload={}, state_updates=su, client_event_id="ev-b%d" % id(su) % 100) print(" no raise for", su) except H.RtxError as exc: print(" su", su, "->", exc.code) # missing tenant try: H.apply(tenant_id=None, world_id=1, session_id=11, event_type="x", payload={}) except H.RtxError as exc: print("tenant->", exc.code) print("final counts", e.count(H.EVENT_TABLE), e.count(H.STATE_TABLE), e.count(H.SNAPSHOT_TABLE)) print("trace tail", H.trace_kinds(e)[-6:]) finally: H.uninstall()