def test_publish_on_topic(): reg = TopicsRegistry() t = Topic('test', eventtypes=[GenericEventType(), MetricEventType()]) evt = Event(MetricEventType()) # failures with pytest.raises(AssertionError): reg.publish_on_topic(None, t) with pytest.raises(AssertionError): reg.publish_on_topic(123, t) with pytest.raises(AssertionError): reg.publish_on_topic(evt, None) with pytest.raises(AssertionError): reg.publish_on_topic(evt, 123) # using a databox class to keep state and make assertions class Box: def __init__(self): self.called = False def mark_called(self): self.called = True # publish an event on a topic that doesn't have its eventtype registered t = Topic('aaa', eventtypes=[GenericEventType()]) evt = Event(MetricEventType()) box = Box() r = ReactorFactory.call_function(box, 'mark_called') reg.register(t) reg.on_topic_run(t, r) reg.publish_on_topic(evt, t) assert not box.called # publish an event on a topic that has its eventtype registered reg = TopicsRegistry() t = Topic('aaa', eventtypes=[MetricEventType()]) box = Box() r = ReactorFactory.call_function(box, 'mark_called') reg.register(t) reg.on_topic_run(t, r) evt = Event(MetricEventType()) reg.publish_on_topic(evt, t) assert box.called
def test_run(): reg = TopicsRegistry() t = Topic('test-topic') r1 = ReactorFactory.stdout() # failures with pytest.raises(AssertionError): reg.on_topic_run(None, r1) with pytest.raises(AssertionError): reg.on_topic_run(123, r1) with pytest.raises(AssertionError): reg.on_topic_run(t, None) with pytest.raises(AssertionError): reg.on_topic_run(t, 123) # adding a reactor to a topic that is not yet registered is idempotent assert len(reg.topics) == 0 reg.on_topic_run(t, r1) assert len(reg.topics) == 0 # adding a reactor to a topic that is registered r1 = ReactorFactory.stdout() reg.register(t) reg.on_topic_run(t, r1) reactors = reg.topics[t] assert len(reactors) == 1 assert r1 in reactors # adding another reactor on the same topic does not cause topic duplication r2 = ReactorFactory.stdout() reg.on_topic_run(t, r2) assert len(reg.topics) == 1 reactors = reg.topics[t] assert len(reactors) == 2 assert r2 in reactors # adding a reactor to an already registered topic reg = TopicsRegistry() reg.register(t) r3 = ReactorFactory.stdout() reg.on_topic_run(t, r3) assert len(reg.topics) == 1 reactors = reg.topics[t] assert len(reactors) == 1 assert r3 in reactors