Example #1
0
File: tests.py Project: pmdz/smite
def test_default_handler():
    ipc_name = 'smite-test-{}'.format(uuid.uuid1().hex)
    default_handler = lambda t: t

    servant = Servant()
    servant.set_default_handler(default_handler)
    servant.bind_ipc(ipc_name)
    servant.run(True)

    msg_num = 10

    client = RClient('ipc://{}'.format(ipc_name))
    for _ in range(msg_num):
        msg_txt = uuid.uuid1().hex
        random_msg_name = uuid.uuid1().hex
        rep = client.send(random_msg_name, msg_txt)
        assert rep == msg_txt

    assert servant.stats['summary']['exceptions'] == 0
    assert servant.stats['summary']['malicious_messages'] == 0
    assert servant.stats['summary']['received_messages'] == msg_num
    assert servant.stats['summary']['processed_messages'] == msg_num

    client.close()
    servant.stop()
Example #2
0
File: tests.py Project: pmdz/smite
def test_exception_response():
    exc_message = 'This is dummy exception message'

    class DummyException(Exception):
        pass

    def raise_dummy_exc():
        raise DummyException(exc_message)

    servant = Servant({'raise_dummy_exc': raise_dummy_exc})
    servant.bind_tcp(HOST, PORT)
    servant.run(True)

    client = Client()
    client.connect(CONNECTION_URI)

    raised = False
    try:
        client.send('raise_dummy_exc')
    except MessageException, e:
        assert e.message == exc_message
        raised = True
Example #3
0
File: tests.py Project: pmdz/smite
def test_rclient():
    ipc_name = 'smite-test-{}'.format(uuid.uuid1().hex)

    servant = Servant({'echo': lambda t: t})
    servant.bind_ipc(ipc_name)
    servant.run(True)

    msg_num = 10

    client = RClient('ipc://{}'.format(ipc_name))
    for _ in range(msg_num):
        echo_txt = uuid.uuid1().hex
        rep = client.send('echo', echo_txt)
        assert rep == echo_txt

    assert servant.stats['summary']['exceptions'] == 0
    assert servant.stats['summary']['malicious_messages'] == 0
    assert servant.stats['summary']['received_messages'] == msg_num
    assert servant.stats['summary']['processed_messages'] == msg_num

    client.close()
    servant.stop()
Example #4
0
File: tests.py Project: pmdz/smite
def test_multiple_clients():

    def short_echo(text):
        time.sleep(1)
        return text

    def long_echo(text):
        time.sleep(2)
        return text

    called = {
        'extract_one': False,
        'extract_two': False,
        'process_one': False,
        'process_two': False,
    }

    def extract_one(msg):
        called['extract_one'] = True
        # 'foo:bar:real_message' -> 'bar:real_message'
        return msg.split(':', 1)[1]

    def extract_two(msg):
        called['extract_two'] = True
        # 'bar:real_message' -> 'real_message'
        return msg.split('-', 1)[1]

    servant = Servant(
        {'short_echo': short_echo, 'long_echo': long_echo},
        message_extractors=(extract_one, extract_two),
    )
    servant.bind_tcp(HOST, PORT)
    servant.run(run_in_background=True)

    def process_one(msg):
        called['process_one'] = True
        return 'bar-{}'.format(msg)

    def process_two(msg):
        called['process_two'] = True
        return 'foo:{}'.format(msg)

    def send_msg(msg_name):
        client = Client(message_processors=(process_one, process_two))
        client.connect(CONNECTION_URI)

        msg_txt = uuid.uuid4().hex
        res = client.send(msg_name, args=(msg_txt,))
        assert res == msg_txt
        client.close()

    client_threads = []

    # send short_echo
    thread = Thread(target=send_msg('short_echo'))
    client_threads.append(thread)
    thread.start()

    # send long_echo
    thread = Thread(target=send_msg('long_echo'))
    client_threads.append(thread)
    thread.start()

    # long echo takes 2 seconds
    time.sleep(2.5)

    assert servant.stats['summary']['received_messages'] == 2
    assert servant.stats['summary']['processed_messages'] == 2
    assert servant.stats['summary']['exceptions'] == 0

    for was_called in called.values():
        assert was_called

    servant.stop()

    for client_thread in client_threads:
        client_thread.join()