58 lines
1.3 KiB
Python
58 lines
1.3 KiB
Python
from gravityweave.plan_delta import ORSet, LWWRegister, PlanDelta
|
|
|
|
|
|
def test_orset_add_remove_merge():
|
|
a = ORSet()
|
|
b = ORSet()
|
|
|
|
e1 = {"id": 1, "type": "burn", "fuel": 5}
|
|
e2 = {"id": 2, "type": "downlink", "window": "T1"}
|
|
|
|
a.add(e1)
|
|
b.add(e2)
|
|
|
|
# both merged should contain both elements
|
|
m = a.merge(b)
|
|
vals = m.value()
|
|
assert any(v["id"] == 1 for v in vals)
|
|
assert any(v["id"] == 2 for v in vals)
|
|
|
|
# remove in one, merge should reflect removal by timestamp
|
|
a.remove(e1)
|
|
m2 = a.merge(b)
|
|
vals2 = m2.value()
|
|
assert not any(v["id"] == 1 for v in vals2)
|
|
assert any(v["id"] == 2 for v in vals2)
|
|
|
|
|
|
def test_lww_register_merge():
|
|
r1 = LWWRegister()
|
|
r2 = LWWRegister()
|
|
|
|
r1.write("low")
|
|
# ensure r2 is newer
|
|
r2.write("high")
|
|
|
|
merged = r1.merge(r2)
|
|
assert merged.read() == "high"
|
|
|
|
|
|
def test_plandelta_merge_priority_origin():
|
|
d1 = PlanDelta()
|
|
d2 = PlanDelta()
|
|
|
|
d1.commitments.add({"id": "c1"})
|
|
d2.commitments.add({"id": "c2"})
|
|
|
|
d1.priority.write(1)
|
|
d2.priority.write(2)
|
|
d1.origin = "nodeA"
|
|
d2.origin = "nodeB"
|
|
|
|
merged = d1.merge(d2)
|
|
# both commitments present
|
|
ids = {c.get("id") for c in merged.commitments.value()}
|
|
assert "c1" in ids and "c2" in ids
|
|
# origin should follow the latest priority's origin (d2)
|
|
assert merged.origin == "nodeB"
|