30 lines
1.2 KiB
Python
30 lines
1.2 KiB
Python
from genomeloom.composer import can_compose, repair_hints
|
|
|
|
|
|
def test_can_compose_ok():
|
|
a = {"capabilities": ["net"], "resource_envelope": {"cpu": 1, "memory": 128}, "invariants": ["mode=readonly"]}
|
|
b = {"capabilities": ["storage"], "resource_envelope": {"cpu": 1, "memory": 128}, "invariants": ["mode=readonly"]}
|
|
ok, details = can_compose(a, b, target_budget={"cpu": 4, "memory": 512})
|
|
assert ok
|
|
assert details["cap_conflicts"] == []
|
|
|
|
|
|
def test_can_compose_cap_conflict():
|
|
a = {"capabilities": ["net"], "resource_envelope": {"cpu": 2}}
|
|
b = {"capabilities": ["net"], "resource_envelope": {"cpu": 2}}
|
|
ok, details = can_compose(a, b, target_budget={"cpu": 3})
|
|
assert not ok
|
|
assert "net" in details["cap_conflicts"]
|
|
hints = repair_hints(details)
|
|
assert any("capability" in h or "Remove" in h for h in hints)
|
|
|
|
|
|
def test_can_compose_budget_violation():
|
|
a = {"capabilities": ["a"], "resource_envelope": {"cpu": 2}}
|
|
b = {"capabilities": ["b"], "resource_envelope": {"cpu": 3}}
|
|
ok, details = can_compose(a, b, target_budget={"cpu": 4})
|
|
assert not ok
|
|
assert "cpu" in details["budget_violations"]
|
|
hints = repair_hints(details)
|
|
assert any("Reduce 'cpu'" in h for h in hints)
|