Files
cAIc/tests/test_cluster_heartbeat.py
T

50 lines
1.4 KiB
Python

"""Tests for cluster.py heartbeat handler."""
import asyncio
import cluster
from config import AMQP_EXCHANGE_SYSTEM
def _reset():
cluster.CLUSTER_NODES.clear()
cluster.CLUSTER_EVENTS.clear()
cluster.CLUSTER_COORDINATOR = None
cluster._pending_pings.clear()
# ---------- 1. handle_heartbeat() for known node updates last_seen ----------
def test_heartbeat_updates_last_seen(monkeypatch):
_reset()
cluster.CLUSTER_NODES["jarvis"] = {
"name": "jarvis", "type": "worker", "status": "active",
"last_seen": "2020-01-01T00:00:00Z",
}
original = cluster.CLUSTER_NODES["jarvis"]["last_seen"]
asyncio.run(cluster.handle_heartbeat(
AMQP_EXCHANGE_SYSTEM, "node.jarvis.heartbeat",
{"node_name": "jarvis"},
))
assert cluster.CLUSTER_NODES["jarvis"]["last_seen"] != original
assert cluster.CLUSTER_NODES["jarvis"]["status"] == "active" # unchanged
# ---------- 2. handle_heartbeat() for unknown node logs warning, no add ----------
def test_heartbeat_unknown_node_logs_warning(caplog, monkeypatch):
_reset()
caplog.set_level("WARNING")
asyncio.run(cluster.handle_heartbeat(
AMQP_EXCHANGE_SYSTEM, "node.stranger.heartbeat",
{"node_name": "stranger"},
))
assert "stranger" not in cluster.CLUSTER_NODES
assert any("unknown node" in rec.message and "stranger" in rec.message for rec in caplog.records)