Ejemplo n.º 1
0
def test_decorated_listener_chained_multi(hive):
    chained_calls = []

    @hive.listener(filters=['topic1'])
    def listener1(event):
        return event

    @hive.listener(filters=['topic2'])
    def listener2(event):
        return event

    @hive.listener(chain=['listener1', 'listener2'])
    def listener3(event):
        chained_calls.append(event)

    assert len(hive.listeners
               ) == 2, 'Added chained listener to root list of listeners'
    assert len(hive.listeners._listeners['listener1'][0].chained_bees) == 1,\
        'Did not correctly chain listeners'
    assert len(hive.listeners._listeners['listener2'][0].chained_bees) == 1,\
        'Did not correctly chain listeners'
    hive.submit_event(pybeehive.Event('test1', topic='topic1'))
    hive.submit_event(pybeehive.Event('test2', topic='topic2'))
    run_kill_hive(hive)
    assert len(
        chained_calls
    ) == 2, 'Chained listener did not execute on_event from both chains'
Ejemplo n.º 2
0
def test_decorated_listener_chained_with_filters(hive):
    topic1_calls = []
    topic2_calls = []

    @hive.listener
    def listener1(event):
        return event

    @hive.listener(chain=['listener1'], filters=['topic1'])
    def listener2(event):
        event.data = 'listener2'
        topic1_calls.append(event)

    @hive.listener(chain=['listener1'], filters=['topic2'])
    def listener3(event):
        event.data = 'listener3'
        topic2_calls.append(event)

    hive.submit_event(pybeehive.Event('test1', topic='topic1'))
    hive.submit_event(pybeehive.Event('test2', topic='topic2'))
    run_kill_hive(hive)
    assert len(topic1_calls
               ) == 1, 'Chained filtered listener did not execute on_event'
    assert len(topic2_calls
               ) == 1, 'Chained filtered listener did not execute on_event'
    assert topic1_calls[
        0].data == 'listener2', 'Chained filtered listener did not execute on_event'
    assert topic2_calls[
        0].data == 'listener3', 'Chained filtered listener did not execute on_event'
Ejemplo n.º 3
0
def test_multiple_listeners_single_streamer(async_hive):
    address = '127.0.0.1', random.randint(7000, 10000)
    events = []

    class Listener(SocketListener):
        async def parse_event(self, event):
            event = pybeehive.Event(event.data + 1,
                                    created_at=event.created_at)
            events.append(event)
            return event

    async_hive.add(SocketStreamer(address))
    for _ in range(3):
        async_hive.add(Listener(address))

    async_hive.submit_event(pybeehive.Event(-1))
    async_hive.run(threaded=True)
    start = time.time()
    while len(events) < 12 and time.time() - start < 2:
        time.sleep(1e-4)
    async_hive.close()
    assert len(events) >= 12, "Hive did not process all events"
    for i, e in enumerate(events[:12]):
        # First three
        if i < 3:
            assert e.data == 0, "Multiple listeners sent incorrect events"
        # Last nine (each cycle is 3x)
        else:
            assert e.data == 1, "Streamer did not propagate events to listeners"
Ejemplo n.º 4
0
def test_interrupted_streamer_listener_loop(async_hive):
    address = '127.0.0.1', random.randint(7000, 10000)
    events = []

    def interrupt():
        time.sleep(1e-2)
        _thread.interrupt_main()

    async def parse_event(event):
        await asyncio.sleep(1e-4)
        events.append(event)
        return event

    streamer = SocketStreamer(address)
    listener = SocketListener(address)
    listener.parse_event = parse_event
    async_hive.add(streamer)
    async_hive.add(listener)
    async_hive.submit_event(pybeehive.Event(-1))
    Thread(target=interrupt).start()
    async_hive.run()
    assert len(events) > 1, "Listener did not receive any events from streamer"
    assert not async_hive.alive, 'KeyboardInterrupt did not kill hive'
    assert not streamer.server.alive, 'KeyboardInterrupt did not kill server'
    assert not listener.client.alive, 'KeyboardInterrupt did not kill client'
Ejemplo n.º 5
0
def test_event_dunder_methods():
    now = time.time()
    event_1_a = pybeehive.Event('test_1', created_at=now)
    event_1_b = pybeehive.Event('test_1', created_at=now)
    event_1_c = pybeehive.Event('test_1', created_at=now, topic='thing')
    event_2 = pybeehive.Event('test_1', created_at=now + 1)
    event_3 = pybeehive.Event('test_2', created_at=now)
    assert event_1_a == event_1_b, "Identical events not equal"
    assert event_1_a != event_1_c, "Events with different topics equal"
    assert event_1_a != event_2, "Events with different times equal"
    assert event_1_a != event_3, "Events with different data equal"
    assert str(event_1_a) == str(event_1_b), "Event strings different"
    events = set()
    events.add(event_1_a)
    assert len(events) == 1, "Did not add event to set"
    events.add(event_1_b)
    assert len(events) == 1, "Added identical events to set twice"
    events.add(event_2)
    assert len(events) == 2, "Did not add different event to set"
Ejemplo n.º 6
0
def test_filter(bee_factory):
    non_filtered = bee_factory.create('listener')
    filtered = bee_factory.create('listener', filters=['topic1'])
    no_topic = pybeehive.Event('data')
    non_filtered.notify(no_topic)
    assert len(non_filtered.calls
               ) == 1, "Listener with no filters did not call on_event"
    filtered.notify(no_topic)
    assert len(
        filtered.calls
    ) == 0, "Listener with filters called on_event for an event with no topic"
    topic = pybeehive.Event('data', topic='topic1')
    non_filtered.notify(topic)
    assert len(non_filtered.calls
               ) == 2, "Listener with no filters did not call on_event"
    filtered.notify(topic)
    assert len(
        filtered.calls
    ) == 1, "Listener with filters did not call on_event for an event with topic"
Ejemplo n.º 7
0
def test_decorated_listener_with_filters(hive):
    all_calls = []
    filtered_calls = []

    @hive.listener
    def listener1(event):
        all_calls.append(event)

    @hive.listener(filters='topic1')
    def listener2(event):
        filtered_calls.append(event)

    hive.submit_event(pybeehive.Event('test'))
    hive.submit_event(pybeehive.Event('test1', topic='topic1'))
    run_kill_hive(hive)
    assert len(all_calls
               ) == 2, 'Unfiltered listener did not execute all on_event calls'
    assert len(
        filtered_calls
    ) == 1, 'Filtered listener did executed on_event when it shouldnt'
Ejemplo n.º 8
0
def test_decorated_listener(hive):
    calls = []

    @hive.listener
    def on_event(event):
        calls.append(event)

    assert len(hive.listeners) == 1, 'Did not register listener to hive'
    hive.submit_event(pybeehive.Event('test'))
    run_kill_hive(hive)
    assert len(calls) == 1, 'Listener did not execute on_event'
    assert calls[0].data == 'test', 'Listener did not return correct data'
Ejemplo n.º 9
0
def test_message_closed_server(async_hive):
    address = '127.0.0.1', random.randint(7000, 10000)
    events = []

    @async_hive.socket_listener(address)
    async def parse_event(event):
        events.append(event)
        return event

    async_hive.submit_event(pybeehive.Event(-1))
    async_hive.run(threaded=True)
    start = time.time()
    while len(events) < 1 and time.time() - start < 2:
        time.sleep(1e-4)
    async_hive.kill()
    assert len(events) >= 1, "Hive did not process all events"
Ejemplo n.º 10
0
def test_create_event():
    now = time.time()
    same_1 = pybeehive.Event('test', created_at=now)
    same_2 = pybeehive.Event(same_1)
    assert same_1 == same_2, \
        "Event did not create correctly from another Event"
    diff_1 = pybeehive.Event('test', topic='1', created_at=now)
    diff_2 = pybeehive.Event('test', topic='2', created_at=now)
    diff_3 = pybeehive.Event('test', topic='1', created_at=now + 1)
    diff_4 = pybeehive.Event('test1', topic='1', created_at=now)
    assert diff_1 != diff_2, "Events with different topics equal"
    assert diff_2 != diff_3, "Events with different created_at equal"
    assert diff_3 != diff_4, "Events with different data equal"
    diff_5 = pybeehive.Event(diff_1, topic='2')
    diff_6 = pybeehive.Event(diff_1, created_at=now + 1)
    assert diff_1 != diff_5, "Event created from event with new topic equal"
    assert diff_1 != diff_6, "Event created from event with new time equal"
    assert diff_5.topic == '2', 'Did not override topic correctly'
    assert diff_6.created_at == now + 1, 'Did not override time correctly'
Ejemplo n.º 11
0
def test_decorated_listener_chained(hive):
    chained_calls = []

    @hive.listener
    def listener1(event):
        return event

    @hive.listener(chain='listener1')
    def listener2(event):
        chained_calls.append(event)

    assert len(hive.listeners
               ) == 1, 'Added chained listener to root list of listeners'
    assert len(hive.listeners._listeners['listener1'][0].chained_bees) == 1,\
        'Did not correctly chain listeners'
    hive.submit_event(pybeehive.Event('test'))
    run_kill_hive(hive)
    assert len(chained_calls) == 1, 'Chained listener did not execute on_event'
Ejemplo n.º 12
0
def test_socket_streamer_listener_loop(async_hive):
    address = '127.0.0.1', random.randint(7000, 10000)
    events = []

    @async_hive.socket_listener(address)
    async def parse_event(event):
        event = pybeehive.Event(event.data + 1, created_at=event.created_at)
        events.append(event)
        return event

    async_hive.add(SocketStreamer(address))
    async_hive.submit_event(pybeehive.Event(-1))
    async_hive.run(threaded=True)
    start = time.time()
    while len(events) < 5 and time.time() - start < 2:
        time.sleep(1e-4)
    async_hive.close()
    assert len(events) >= 5, "Hive did not process all events"
    for i, e in enumerate(events):
        assert i == e.data, "Event data was not parsed by listener"
Ejemplo n.º 13
0
 async def parse_event(self, event):
     event = pybeehive.Event(event.data + 1,
                             created_at=event.created_at)
     events.append(event)
     return event
Ejemplo n.º 14
0
def test_event_string_conversion(data, topic, created_at):
    # for data, created_at, topic in test_event_data:
    event = pybeehive.Event(data, topic=topic, created_at=created_at)
    event_string = event.tostring()
    c_event = pybeehive.Event.fromstring(event_string)
    assert event == c_event, "String converted event not equal to original"