Example #1
0
def test_run(monkeypatch, tmpdir):
    zmq_mock = ZMQMock()

    def mock_zmq_context():
        nonlocal zmq_mock
        return zmq_mock

    monkeypatch.setattr(zmq.Context, "instance", mock_zmq_context)

    dbname = tmpdir.join('testing.sqlite3')
    db_url = "sqlite:///%s" % dbname
    db = DB({'url': db_url}, "inproc://test_run")
    with pytest.raises(IndexError):
        db.run()
    assert zmq_mock.sock.connected is True
    assert zmq_mock.sock.opts == {zmq.SUBSCRIBE: b''}

    # Test that wrong message will not make the process crash
    zmq_mock.sock.msgs = [[]]
    with pytest.raises(IndexError):
        db.run()

    # Check that the db is empty
    session = db.sessions()
    assert session.query(Message).count() == 0

    # Test that wrong message will not make the process crash
    zmq_mock.sock.msgs = [[
        "org.reactobus.1",
        str(uuid.uuid1()),
        datetime.datetime.utcnow().isoformat(), "lavaserver",
        json.dumps({})
    ],
                          [
                              "org.reactobus.2",
                              str(uuid.uuid1()),
                              datetime.datetime.utcnow().isoformat(),
                              "lavaserver",
                              json.dumps({})
                          ],
                          [
                              "org.reactobus.3",
                              str(uuid.uuid1()),
                              datetime.datetime.utcnow().isoformat(),
                              "lavaserver",
                              json.dumps({})
                          ],
                          [
                              "org.reactobus.4",
                              str(uuid.uuid1()), "2016/01/01", "lavaserver",
                              json.dumps({})
                          ],
                          [
                              "org.reactobus.5",
                              str(uuid.uuid1()),
                              datetime.datetime.utcnow().isoformat(),
                              "lavaserver",
                              json.dumps({})
                          ]]
    with pytest.raises(IndexError):
        db.run()

    # Check that the db is empty
    session = db.sessions()
    assert session.query(Message).count() == 4
    assert session.query(Message).get(1).topic == "org.reactobus.1"
    assert session.query(Message).get(2).topic == "org.reactobus.2"
    assert session.query(Message).get(3).topic == "org.reactobus.3"
    assert session.query(Message).get(4).topic == "org.reactobus.5"