Files

56 lines
1.7 KiB
Python
Raw Permalink Normal View History

# retoor <retoor@molodetz.nl>
import pytest
from devplacepy.services.nodes.registry import (
COUNTER_NAMES,
NodeCounters,
outcome_name,
)
def test_inc_counts_both_the_live_view_and_the_pending_delta():
counters = NodeCounters()
counters.inc("kicked")
counters.inc("kicked")
assert counters.snapshot()["kicked"] == 2
assert counters.take_pending() == {"kicked": 2}
assert counters.take_pending() == {}
assert counters.snapshot()["kicked"] == 2
def test_unknown_names_are_rejected():
counters = NodeCounters()
with pytest.raises(KeyError):
counters.inc("nope")
def test_restore_pending_adds_back_what_a_failed_flush_took():
counters = NodeCounters()
counters.inc("jobs_done")
taken = counters.take_pending()
counters.inc("jobs_done")
counters.restore_pending(taken)
assert counters.take_pending() == {"jobs_done": 2}
def test_outcomes_are_validated_and_bounded_in_shape():
counters = NodeCounters()
counters.observe("reddit", "residential", "ok")
counters.observe("reddit", "residential", "ok")
counters.observe("reddit", "", "blocked")
assert counters.outcomes() == {
"outcome:reddit:residential:ok": 2,
"outcome:reddit:unknown:blocked": 1,
}
for adapter, asn_class, kind in (("Re:dit", "x", "ok"), ("reddit", "a b", "ok"), ("reddit", "x", "weird"), ("x" * 40, "x", "ok")):
with pytest.raises(KeyError):
outcome_name(adapter, asn_class, kind)
def test_every_declared_counter_can_be_incremented():
counters = NodeCounters()
for name in COUNTER_NAMES:
counters.inc(name)
assert all(value == 1 for value in counters.snapshot().values())