1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
|
from nose.tools import *
from lamson.routing import *
from lamson.mail import MailRequest
from lamson import queue, routing, encoding
from mock import *
def setup():
Router.clear_states()
Router.clear_routes()
def teardown():
setup()
def test_MemoryStorage():
store = MemoryStorage()
store.set(test_MemoryStorage.__module__, "tester@localhost", "TESTED")
assert store.get(test_MemoryStorage.__module__, "tester@localhost") == "TESTED"
assert store.get(test_MemoryStorage.__module__, "tester2@localhost") == "START"
store.clear()
assert store.get(test_MemoryStorage.__module__, "tester@localhost") == "START"
def test_ShelveStorage():
store = ShelveStorage("tests/statesdb")
store.set(test_ShelveStorage.__module__, "tester@localhost", "TESTED")
assert store.get(test_MemoryStorage.__module__, "tester@localhost") == "TESTED"
assert store.get(test_MemoryStorage.__module__, "tester2@localhost") == "START"
store.clear()
assert store.get(test_MemoryStorage.__module__, "tester@localhost") == "START"
def test_RoutingBase():
assert len(Router.ORDER) == 0
assert len(Router.REGISTERED) == 0
Router.load(['lamson_tests.simple_fsm_mod'])
import simple_fsm_mod
assert len(Router.ORDER) > 0
assert len(Router.REGISTERED) > 0
message = MailRequest('fakepeer', 'zedshaw@localhost', 'users-subscribe@localhost', "")
Router.deliver(message)
assert Router.in_state(simple_fsm_mod.CONFIRM, message)
confirm = MailRequest('fakepeer', '"Zed Shaw" <zedshaw@localhost>', 'users-confirm-1@localhost', "")
Router.deliver(confirm)
assert Router.in_state(simple_fsm_mod.POSTING, message)
Router.deliver(message)
assert Router.in_state(simple_fsm_mod.NEXT, message)
Router.deliver(message)
assert Router.in_state(simple_fsm_mod.END, message)
Router.deliver(message)
assert Router.in_state(simple_fsm_mod.START, message)
Router.clear_states()
explosion = MailRequest('fakepeer', '<hacker@localhost>', 'start-explode@localhost', "")
Router.LOG_EXCEPTIONS=True
Router.deliver(explosion)
assert Router.in_error(simple_fsm_mod.END, explosion)
Router.clear_states()
Router.LOG_EXCEPTIONS=False
explosion = MailRequest('fakepeer', 'hacker@localhost', 'start-explode@localhost', "")
assert_raises(RuntimeError, Router.deliver, explosion)
Router.reload()
assert 'lamson_tests.simple_fsm_mod' in Router.HANDLERS
assert len(Router.ORDER)
assert len(Router.REGISTERED)
message = MailRequest('fakepeer', 'zedshaw@localhost',
['users-subscribe@localhost',
'users-confirm-1@localhost'], "Fake body.")
Router.deliver(message)
assert Router.in_state(simple_fsm_mod.POSTING, message), "Router state: %r" % Router.get_state('simple_fsm_mod', message)
def test_Router_undeliverable_queue():
Router.clear_routes()
Router.clear_states()
Router.UNDELIVERABLE_QUEUE = Mock()
msg = MailRequest('fakepeer', 'from@localhost', 'to@localhost', "Nothing")
Router.deliver(msg)
assert Router.UNDELIVERABLE_QUEUE.push.called
@raises(NotImplementedError)
def test_StateStorage_get_raises():
s = StateStorage()
s.get("raises", "raises")
@raises(NotImplementedError)
def test_StateStorage_set_raises():
s = StateStorage()
s.set("raises", "raises", "raises")
@raises(NotImplementedError)
def test_StateStorage_clear_raises():
s = StateStorage()
s.clear()
@raises(TypeError)
def test_route___get___raises():
class BadRoute(object):
@route("test")
def wont_work(message, **kw):
pass
br = BadRoute()
br.wont_work("raises")
def raises_ImportError(*args):
raise ImportError()
@patch('__builtin__.reload', new=Mock())
@patch('__builtin__.__import__', new=Mock())
@patch('lamson.routing.LOG', new=Mock())
def test_reload_raises():
reload.side_effect = raises_ImportError
__import__.side_effect = raises_ImportError
Router.LOG_EXCEPTIONS=True
Router.reload()
assert routing.LOG.exception.called
Router.LOG_EXCEPTIONS=False
routing.LOG.exception.reset_mock()
assert_raises(ImportError, Router.reload)
assert not routing.LOG.exception.called
routing.LOG.exception.reset_mock()
Router.LOG_EXCEPTIONS=True
Router.load(['fake.handler'])
assert routing.LOG.exception.called
Router.LOG_EXCEPTIONS=False
routing.LOG.exception.reset_mock()
assert_raises(ImportError, Router.load, ['fake.handler'])
assert not routing.LOG.exception.called
|