def test_new(): r = TopicsRegistry() topic = r.new('test', eventtypes=[GenericEventType(), MetricEventType()], description='this is a test topic', owner='me', tags=['aaa', 'bbb', 'ccc']) assert isinstance(topic, Topic) assert topic.name == 'test' assert isinstance(topic.eventtypes, EventTypesBag) assert topic.description == 'this is a test topic' assert topic.owner == 'me' assert 'aaa' in topic.tags assert 'bbb' in topic.tags assert 'ccc' in topic.tags assert topic in r
def test_with_name(): r = TopicsRegistry() t1 = Topic('test1') t2 = Topic('test2') t3 = Topic('test3') r.register(t1) r.register(t2) r.register(t3) result = r.with_name('test3') assert result == t3 result = r.with_name('missing-name') assert result is None with pytest.raises(AssertionError): r.with_name(None)
def test_with_id(): r = TopicsRegistry() t1 = Topic('test1') t2 = Topic('test2') t3 = Topic('test3') r.register(t1) r.register(t2) r.register(t3) id2 = t2.id result = r.with_id(id2) assert result == t2 result = r.with_id('missing-id') assert result is None with pytest.raises(AssertionError): r.with_id(None)
def test_count(): r = TopicsRegistry() t1 = Topic('test1') r.register(t1) assert r.count() == 1 t2 = Topic('test2') t3 = Topic('test3') r.register(t2) r.register(t3) assert r.count() == 3
def test_remove_all(): r = TopicsRegistry() t1 = Topic('test1') t2 = Topic('test2') r.register(t1) r.register(t2) assert len(r) == 2 r.remove_all() assert len(r) == 0
def test_remove(): r = TopicsRegistry() t1 = Topic('test1') t2 = Topic('test2') r.register(t1) r.register(t2) assert len(r) == 2 r.remove(t2) assert len(r) == 1 assert t2 not in r
def test_magic_methods(): r = TopicsRegistry() t1 = Topic('test1') r.register(t1) assert len(r) == 1 assert t1 in r t2 = Topic('test2') assert t2 not in r r.register(Topic('test2')) r.register(Topic('test3')) for _ in r: pass
def test_of(): r = TopicsRegistry() t1 = Topic('test1', owner='me') t2 = Topic('test2', owner='you') t3 = Topic('test3', owner='me') assert len(r.of('me')) == 0 assert len(r.of('you')) == 0 r.register(t1) r.register(t2) r.register(t3) my_topics = r.of('me') your_topics = r.of('you') assert len(my_topics) == 2 assert len(your_topics) == 1 assert t1 in my_topics assert t3 in my_topics assert t2 in your_topics with pytest.raises(AssertionError): r.of(None)
def test_print(): print(TopicsRegistry())
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_register(): r = TopicsRegistry() t = Topic('test') r.register(t) assert r.count() == 1 # registering the same topic multiple times won't change it r.register(t) assert r.count() == 1 # ... but a new one, will t2 = Topic('test2') r.register(t2) assert r.count() == 2
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
def test_with_tags(): r = TopicsRegistry() t1 = Topic('test1', tags=['aaa']) t2 = Topic('test2', tags=['bbb', 'ccc']) t3 = Topic('test3', tags=['aaa', 'ccc', 'ddd']) r.register(t1) r.register(t2) r.register(t3) results = r.with_tags(['aaa']) assert len(results) == 2 assert t1 in results assert t3 in results results = r.with_tags(['aaa']) assert len(results) == 2 assert t1 in results assert t3 in results results = r.with_tags(['missing-tag']) assert len(results) == 0 with pytest.raises(AssertionError): r.with_tags(None) with pytest.raises(AssertionError): r.with_tags('string') with pytest.raises(AssertionError): r.with_tags(123)
def test_register_failing(): r = TopicsRegistry() with pytest.raises(AssertionError): r.register(None) with pytest.raises(AssertionError): r.register('not-a-topic')