Loading tests/test_body_accessor.py +6 −9 Original line number Diff line number Diff line Loading @@ -23,15 +23,14 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) result = b"" async def test_filter(session: Session) -> Accept: async def test_filter() -> None: nonlocal result async with session.body as body: async for chunk in body: result += chunk return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Body(b"Spam, ")) await session.deliver(Body(b"spam, ")) Loading @@ -47,7 +46,7 @@ class HeaderAccessorTests(AsyncTestCase): result1 = b"" result2 = b"" async def test_filter(session: Session) -> Accept: async def test_filter() -> None: nonlocal result1 nonlocal result2 Loading @@ -61,10 +60,9 @@ class HeaderAccessorTests(AsyncTestCase): async for chunk in body: result2 += chunk return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() assert Continue == await session.deliver(Body(b"Spam, ")) assert Skip == await session.deliver(Body(b"spam, ")) Loading @@ -88,12 +86,11 @@ class HeaderAccessorTests(AsyncTestCase): return s.content == o.content ReplaceBody.__eq__ = _eq # type: ignore async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.body.write(b"A new message") return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(EndOfMessage(b"")) Loading tests/test_header_accessor.py +34 −51 Original line number Diff line number Diff line Loading @@ -25,14 +25,13 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: async with session.headers as headers: async for header in headers: result.append(header.name) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Spam", b"spam?")) Loading @@ -52,7 +51,7 @@ class HeaderAccessorTests(AsyncTestCase): result1 = [] result2 = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: async with session.headers as headers: async for header in headers: result1.append(header.name) Loading @@ -65,10 +64,9 @@ class HeaderAccessorTests(AsyncTestCase): async for header in headers: result2.append(header.name) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Spam", b"spam?")) Loading @@ -90,7 +88,7 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.collect() async with session.headers as headers: Loading @@ -98,10 +96,9 @@ class HeaderAccessorTests(AsyncTestCase): assert session.phase == Phase.BODY result.append(header.name) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Spam", b"spam?")) Loading @@ -117,7 +114,7 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.collect() async with session.headers as headers: Loading @@ -125,10 +122,9 @@ class HeaderAccessorTests(AsyncTestCase): assert session.phase == Phase.BODY result.append(header.name) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Spam", b"spam?")) Loading @@ -144,14 +140,13 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: async with session.headers as headers: async for header in headers.restrict("Spam", "Ham"): result.append(header.name) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Spam", b"spam?")) Loading @@ -169,16 +164,15 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), sender) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.collect() await session.headers.delete(Header("Spam", b"spam?")) async with session.headers as headers: async for header in headers: result.append(header) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Spam", b"spam?")) Loading @@ -202,15 +196,14 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), sender) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.update(Header("Spam", b"spam?"), b"no spam!") async with session.headers as headers: async for header in headers: result.append(header) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Spam", b"spam?")) Loading @@ -235,15 +228,14 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), sender) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.insert(Header("Ham", b"and eggs"), START) async with session.headers as headers: async for header in headers: result.append(header) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Eggs", b"and spam")) Loading @@ -265,15 +257,14 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), sender) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.insert(Header("Ham", b"and eggs"), END) async with session.headers as headers: async for header in headers: result.append(header) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Eggs", b"and spam")) Loading @@ -295,7 +286,7 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), sender) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.insert( Header("Ham", b"and eggs"), Before(Header("Eggs", b"and spam")), Loading @@ -303,10 +294,9 @@ class HeaderAccessorTests(AsyncTestCase): async with session.headers as headers: async for header in headers: result.append(header) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Eggs", b"and spam")) Loading @@ -328,7 +318,7 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), sender) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.insert( Header("Ham", b"and eggs"), After(Header("Spam", b"spam spam spam")), Loading @@ -336,10 +326,9 @@ class HeaderAccessorTests(AsyncTestCase): async with session.headers as headers: async for header in headers: result.append(header) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Eggs", b"and spam")) Loading @@ -361,7 +350,7 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), sender) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.insert( Header("Ham", b"and eggs"), After(Header("Eggs", b"and spam")), Loading @@ -369,10 +358,9 @@ class HeaderAccessorTests(AsyncTestCase): async with session.headers as headers: async for header in headers: result.append(header) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Eggs", b"and spam")) Loading @@ -394,7 +382,7 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), sender) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.insert( Header("Ham", b"and eggs"), Before(Header("Eggs", b"and spam")), Loading @@ -406,10 +394,9 @@ class HeaderAccessorTests(AsyncTestCase): async with session.headers as headers: async for header in headers: result.append(header) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Eggs", b"and spam")) Loading @@ -433,14 +420,13 @@ class HeaderAccessorTests(AsyncTestCase): """ session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: async with session.headers as headers: assert Header("From", b"test@example.com") == await headers.asend() assert Header("To", b"test@example.com") == await headers.asend(None) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("From", b"test@example.com")) await session.deliver(Header("To", b"test@example.com")) Loading @@ -452,17 +438,16 @@ class HeaderAccessorTests(AsyncTestCase): """ session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: async with session.headers as headers: await headers.asend() with self.assertRaises(ValueError): await headers.athrow(ValueError) with self.assertRaises(StopAsyncIteration): await headers.asend() return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("From", b"test@example.com")) await session.deliver(Header("To", b"test@example.com")) Loading @@ -474,7 +459,7 @@ class HeaderAccessorTests(AsyncTestCase): """ session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: async with session.headers as headers: await headers.asend() with self.assertRaises(ValueError) as acm: Loading @@ -482,10 +467,9 @@ class HeaderAccessorTests(AsyncTestCase): assert "a message" == str(acm.exception), str(acm.exception) with self.assertRaises(StopAsyncIteration): await headers.asend() return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("From", b"test@example.com")) await session.deliver(Header("To", b"test@example.com")) Loading @@ -497,7 +481,7 @@ class HeaderAccessorTests(AsyncTestCase): """ session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: async with session.headers as headers: await headers.asend() with self.assertRaises(ValueError) as acm: Loading @@ -505,10 +489,9 @@ class HeaderAccessorTests(AsyncTestCase): assert "a message" == str(acm.exception), str(acm.exception) with self.assertRaises(StopAsyncIteration): await headers.asend() return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("From", b"test@example.com")) await session.deliver(Header("To", b"test@example.com")) Loading tests/test_session.py +34 −51 Original line number Diff line number Diff line Loading @@ -63,13 +63,12 @@ class SessionTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) result = "spam" async def test_filter(session: Session) -> Accept: async def test_filter() -> None: nonlocal result result = await session.envelope_from() return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Helo("ham")) assert result == "spam" Loading @@ -84,13 +83,12 @@ class SessionTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) result = "spam" async def test_filter(session: Session) -> Accept: async def test_filter() -> None: nonlocal result result = await session.helo() return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Helo("eggs")) Loading @@ -102,15 +100,14 @@ class SessionTests(AsyncTestCase): """ session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.envelope_from() with self.assertRaises(RuntimeError) as acm: await session.helo() assert "before" in str(acm.exception), str(acm.exception) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Helo("ham")) await session.deliver(EnvelopeFrom(b"eggs")) Loading @@ -121,14 +118,13 @@ class SessionTests(AsyncTestCase): """ session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: with self.assertRaises(RuntimeError) as acm: await session.helo() assert "event not received" in str(acm.exception), str(acm.exception) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(EnvelopeFrom(b"eggs")) Loading @@ -139,13 +135,12 @@ class SessionTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) result = "spam" async def test_filter(session: Session) -> Accept: async def test_filter() -> None: nonlocal result result = await session.envelope_from() return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(EnvelopeFrom(b"eggs")) Loading @@ -157,15 +152,14 @@ class SessionTests(AsyncTestCase): """ session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.collect() with self.assertRaises(RuntimeError) as acm: await session.envelope_from() assert "before" in str(acm.exception), str(acm.exception) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"eggs")) await session.deliver(EndOfHeaders()) Loading @@ -176,14 +170,13 @@ class SessionTests(AsyncTestCase): """ session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: with self.assertRaises(RuntimeError) as acm: await session.envelope_from() assert "event not received" in str(acm.exception), str(acm.exception) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Data()) Loading @@ -194,13 +187,12 @@ class SessionTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: async for rcpt in session.envelope_recipients(): result.append(rcpt) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(EnvelopeRecipient(b"spam", [])) await session.deliver(EnvelopeRecipient(b"spam", [])) Loading @@ -215,16 +207,15 @@ class SessionTests(AsyncTestCase): """ session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.collect() with self.assertRaises(RuntimeError) as acm: async for rcpt in session.envelope_recipients(): pass assert "before" in str(acm.exception), str(acm.exception) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"eggs")) await session.deliver(EndOfHeaders()) Loading @@ -236,15 +227,14 @@ class SessionTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: result.append(await session.extension("SPAM")) result.append(await session.extension("MAIL")) result.append(await session.extension("RCPT")) result.append(await session.extension("RCPT")) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Unknown(b"SPAM spam eggs")) await session.deliver(EnvelopeFrom(b"spam", [b"spam", b"eggs"])) Loading @@ -266,15 +256,14 @@ class SessionTests(AsyncTestCase): """ session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.collect() with self.assertRaises(RuntimeError) as acm: await session.extension("TEST") assert "before" in str(acm.exception), str(acm.exception) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"eggs")) await session.deliver(EndOfHeaders()) Loading @@ -285,14 +274,13 @@ class SessionTests(AsyncTestCase): """ session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: with self.assertRaises(RuntimeError) as acm: await session.extension("TEST") assert "event not received" in str(acm.exception), str(acm.exception) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Data()) Loading @@ -303,15 +291,14 @@ class SessionTests(AsyncTestCase): sender = MockEditor() session = Session(Connect("example.com", LOCALHOST, 1025), sender) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: assert session.phase == Phase.CONNECT await session.change_sender("test@example.com") assert session.phase == Phase.POST await session.change_sender("test@example.com", "SPAM") return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(EndOfMessage(b"")) Loading @@ -327,15 +314,14 @@ class SessionTests(AsyncTestCase): sender = MockEditor() session = Session(Connect("example.com", LOCALHOST, 1025), sender) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: assert session.phase == Phase.CONNECT await session.add_recipient("test@example.com") assert session.phase == Phase.POST await session.add_recipient("test@example.com", "SPAM") return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(EndOfMessage(b"")) Loading @@ -351,14 +337,13 @@ class SessionTests(AsyncTestCase): sender = MockEditor() session = Session(Connect("example.com", LOCALHOST, 1025), sender) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: assert session.phase == Phase.CONNECT await session.remove_recipient("test@example.com") assert session.phase == Phase.POST return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(EndOfMessage(b"")) Loading @@ -373,16 +358,15 @@ class SessionTests(AsyncTestCase): sender = MockEditor() session = Session(Connect("example.com", LOCALHOST, 1025), sender) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: self.assertDictEqual(session.macros, {}) await session.helo() self.assertDictEqual(session.macros, {"{spam}": "yes", "{eggs}": "yes"}) await session.envelope_from() self.assertDictEqual(session.macros, {"{spam}": "no", "{ham}": "maybe", "{eggs}": "yes"}) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Macro(Helo.ident, {"{spam}": "yes", "{eggs}": "yes"})) Loading @@ -397,14 +381,13 @@ class SessionTests(AsyncTestCase): sender = MockEditor() session = Session(Connect("example.com", LOCALHOST, 1025), sender) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await trio.sleep(0.1) assert await session.helo() == "test.example.com" assert await session.envelope_from() == "test@example.com" return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Helo("test.example.com")) Loading Loading
tests/test_body_accessor.py +6 −9 Original line number Diff line number Diff line Loading @@ -23,15 +23,14 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) result = b"" async def test_filter(session: Session) -> Accept: async def test_filter() -> None: nonlocal result async with session.body as body: async for chunk in body: result += chunk return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Body(b"Spam, ")) await session.deliver(Body(b"spam, ")) Loading @@ -47,7 +46,7 @@ class HeaderAccessorTests(AsyncTestCase): result1 = b"" result2 = b"" async def test_filter(session: Session) -> Accept: async def test_filter() -> None: nonlocal result1 nonlocal result2 Loading @@ -61,10 +60,9 @@ class HeaderAccessorTests(AsyncTestCase): async for chunk in body: result2 += chunk return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() assert Continue == await session.deliver(Body(b"Spam, ")) assert Skip == await session.deliver(Body(b"spam, ")) Loading @@ -88,12 +86,11 @@ class HeaderAccessorTests(AsyncTestCase): return s.content == o.content ReplaceBody.__eq__ = _eq # type: ignore async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.body.write(b"A new message") return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(EndOfMessage(b"")) Loading
tests/test_header_accessor.py +34 −51 Original line number Diff line number Diff line Loading @@ -25,14 +25,13 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: async with session.headers as headers: async for header in headers: result.append(header.name) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Spam", b"spam?")) Loading @@ -52,7 +51,7 @@ class HeaderAccessorTests(AsyncTestCase): result1 = [] result2 = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: async with session.headers as headers: async for header in headers: result1.append(header.name) Loading @@ -65,10 +64,9 @@ class HeaderAccessorTests(AsyncTestCase): async for header in headers: result2.append(header.name) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Spam", b"spam?")) Loading @@ -90,7 +88,7 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.collect() async with session.headers as headers: Loading @@ -98,10 +96,9 @@ class HeaderAccessorTests(AsyncTestCase): assert session.phase == Phase.BODY result.append(header.name) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Spam", b"spam?")) Loading @@ -117,7 +114,7 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.collect() async with session.headers as headers: Loading @@ -125,10 +122,9 @@ class HeaderAccessorTests(AsyncTestCase): assert session.phase == Phase.BODY result.append(header.name) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Spam", b"spam?")) Loading @@ -144,14 +140,13 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: async with session.headers as headers: async for header in headers.restrict("Spam", "Ham"): result.append(header.name) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Spam", b"spam?")) Loading @@ -169,16 +164,15 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), sender) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.collect() await session.headers.delete(Header("Spam", b"spam?")) async with session.headers as headers: async for header in headers: result.append(header) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Spam", b"spam?")) Loading @@ -202,15 +196,14 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), sender) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.update(Header("Spam", b"spam?"), b"no spam!") async with session.headers as headers: async for header in headers: result.append(header) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Spam", b"spam?")) Loading @@ -235,15 +228,14 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), sender) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.insert(Header("Ham", b"and eggs"), START) async with session.headers as headers: async for header in headers: result.append(header) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Eggs", b"and spam")) Loading @@ -265,15 +257,14 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), sender) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.insert(Header("Ham", b"and eggs"), END) async with session.headers as headers: async for header in headers: result.append(header) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Eggs", b"and spam")) Loading @@ -295,7 +286,7 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), sender) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.insert( Header("Ham", b"and eggs"), Before(Header("Eggs", b"and spam")), Loading @@ -303,10 +294,9 @@ class HeaderAccessorTests(AsyncTestCase): async with session.headers as headers: async for header in headers: result.append(header) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Eggs", b"and spam")) Loading @@ -328,7 +318,7 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), sender) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.insert( Header("Ham", b"and eggs"), After(Header("Spam", b"spam spam spam")), Loading @@ -336,10 +326,9 @@ class HeaderAccessorTests(AsyncTestCase): async with session.headers as headers: async for header in headers: result.append(header) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Eggs", b"and spam")) Loading @@ -361,7 +350,7 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), sender) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.insert( Header("Ham", b"and eggs"), After(Header("Eggs", b"and spam")), Loading @@ -369,10 +358,9 @@ class HeaderAccessorTests(AsyncTestCase): async with session.headers as headers: async for header in headers: result.append(header) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Eggs", b"and spam")) Loading @@ -394,7 +382,7 @@ class HeaderAccessorTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), sender) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.insert( Header("Ham", b"and eggs"), Before(Header("Eggs", b"and spam")), Loading @@ -406,10 +394,9 @@ class HeaderAccessorTests(AsyncTestCase): async with session.headers as headers: async for header in headers: result.append(header) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"spam spam spam")) await session.deliver(Header("Eggs", b"and spam")) Loading @@ -433,14 +420,13 @@ class HeaderAccessorTests(AsyncTestCase): """ session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: async with session.headers as headers: assert Header("From", b"test@example.com") == await headers.asend() assert Header("To", b"test@example.com") == await headers.asend(None) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("From", b"test@example.com")) await session.deliver(Header("To", b"test@example.com")) Loading @@ -452,17 +438,16 @@ class HeaderAccessorTests(AsyncTestCase): """ session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: async with session.headers as headers: await headers.asend() with self.assertRaises(ValueError): await headers.athrow(ValueError) with self.assertRaises(StopAsyncIteration): await headers.asend() return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("From", b"test@example.com")) await session.deliver(Header("To", b"test@example.com")) Loading @@ -474,7 +459,7 @@ class HeaderAccessorTests(AsyncTestCase): """ session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: async with session.headers as headers: await headers.asend() with self.assertRaises(ValueError) as acm: Loading @@ -482,10 +467,9 @@ class HeaderAccessorTests(AsyncTestCase): assert "a message" == str(acm.exception), str(acm.exception) with self.assertRaises(StopAsyncIteration): await headers.asend() return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("From", b"test@example.com")) await session.deliver(Header("To", b"test@example.com")) Loading @@ -497,7 +481,7 @@ class HeaderAccessorTests(AsyncTestCase): """ session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: async with session.headers as headers: await headers.asend() with self.assertRaises(ValueError) as acm: Loading @@ -505,10 +489,9 @@ class HeaderAccessorTests(AsyncTestCase): assert "a message" == str(acm.exception), str(acm.exception) with self.assertRaises(StopAsyncIteration): await headers.asend() return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("From", b"test@example.com")) await session.deliver(Header("To", b"test@example.com")) Loading
tests/test_session.py +34 −51 Original line number Diff line number Diff line Loading @@ -63,13 +63,12 @@ class SessionTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) result = "spam" async def test_filter(session: Session) -> Accept: async def test_filter() -> None: nonlocal result result = await session.envelope_from() return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Helo("ham")) assert result == "spam" Loading @@ -84,13 +83,12 @@ class SessionTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) result = "spam" async def test_filter(session: Session) -> Accept: async def test_filter() -> None: nonlocal result result = await session.helo() return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Helo("eggs")) Loading @@ -102,15 +100,14 @@ class SessionTests(AsyncTestCase): """ session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.envelope_from() with self.assertRaises(RuntimeError) as acm: await session.helo() assert "before" in str(acm.exception), str(acm.exception) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Helo("ham")) await session.deliver(EnvelopeFrom(b"eggs")) Loading @@ -121,14 +118,13 @@ class SessionTests(AsyncTestCase): """ session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: with self.assertRaises(RuntimeError) as acm: await session.helo() assert "event not received" in str(acm.exception), str(acm.exception) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(EnvelopeFrom(b"eggs")) Loading @@ -139,13 +135,12 @@ class SessionTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) result = "spam" async def test_filter(session: Session) -> Accept: async def test_filter() -> None: nonlocal result result = await session.envelope_from() return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(EnvelopeFrom(b"eggs")) Loading @@ -157,15 +152,14 @@ class SessionTests(AsyncTestCase): """ session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.collect() with self.assertRaises(RuntimeError) as acm: await session.envelope_from() assert "before" in str(acm.exception), str(acm.exception) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"eggs")) await session.deliver(EndOfHeaders()) Loading @@ -176,14 +170,13 @@ class SessionTests(AsyncTestCase): """ session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: with self.assertRaises(RuntimeError) as acm: await session.envelope_from() assert "event not received" in str(acm.exception), str(acm.exception) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Data()) Loading @@ -194,13 +187,12 @@ class SessionTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: async for rcpt in session.envelope_recipients(): result.append(rcpt) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(EnvelopeRecipient(b"spam", [])) await session.deliver(EnvelopeRecipient(b"spam", [])) Loading @@ -215,16 +207,15 @@ class SessionTests(AsyncTestCase): """ session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.collect() with self.assertRaises(RuntimeError) as acm: async for rcpt in session.envelope_recipients(): pass assert "before" in str(acm.exception), str(acm.exception) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"eggs")) await session.deliver(EndOfHeaders()) Loading @@ -236,15 +227,14 @@ class SessionTests(AsyncTestCase): session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) result = [] async def test_filter(session: Session) -> Accept: async def test_filter() -> None: result.append(await session.extension("SPAM")) result.append(await session.extension("MAIL")) result.append(await session.extension("RCPT")) result.append(await session.extension("RCPT")) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Unknown(b"SPAM spam eggs")) await session.deliver(EnvelopeFrom(b"spam", [b"spam", b"eggs"])) Loading @@ -266,15 +256,14 @@ class SessionTests(AsyncTestCase): """ session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await session.headers.collect() with self.assertRaises(RuntimeError) as acm: await session.extension("TEST") assert "before" in str(acm.exception), str(acm.exception) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Header("Spam", b"eggs")) await session.deliver(EndOfHeaders()) Loading @@ -285,14 +274,13 @@ class SessionTests(AsyncTestCase): """ session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor()) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: with self.assertRaises(RuntimeError) as acm: await session.extension("TEST") assert "event not received" in str(acm.exception), str(acm.exception) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Data()) Loading @@ -303,15 +291,14 @@ class SessionTests(AsyncTestCase): sender = MockEditor() session = Session(Connect("example.com", LOCALHOST, 1025), sender) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: assert session.phase == Phase.CONNECT await session.change_sender("test@example.com") assert session.phase == Phase.POST await session.change_sender("test@example.com", "SPAM") return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(EndOfMessage(b"")) Loading @@ -327,15 +314,14 @@ class SessionTests(AsyncTestCase): sender = MockEditor() session = Session(Connect("example.com", LOCALHOST, 1025), sender) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: assert session.phase == Phase.CONNECT await session.add_recipient("test@example.com") assert session.phase == Phase.POST await session.add_recipient("test@example.com", "SPAM") return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(EndOfMessage(b"")) Loading @@ -351,14 +337,13 @@ class SessionTests(AsyncTestCase): sender = MockEditor() session = Session(Connect("example.com", LOCALHOST, 1025), sender) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: assert session.phase == Phase.CONNECT await session.remove_recipient("test@example.com") assert session.phase == Phase.POST return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(EndOfMessage(b"")) Loading @@ -373,16 +358,15 @@ class SessionTests(AsyncTestCase): sender = MockEditor() session = Session(Connect("example.com", LOCALHOST, 1025), sender) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: self.assertDictEqual(session.macros, {}) await session.helo() self.assertDictEqual(session.macros, {"{spam}": "yes", "{eggs}": "yes"}) await session.envelope_from() self.assertDictEqual(session.macros, {"{spam}": "no", "{ham}": "maybe", "{eggs}": "yes"}) return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Macro(Helo.ident, {"{spam}": "yes", "{eggs}": "yes"})) Loading @@ -397,14 +381,13 @@ class SessionTests(AsyncTestCase): sender = MockEditor() session = Session(Connect("example.com", LOCALHOST, 1025), sender) async def test_filter(session: Session) -> Accept: async def test_filter() -> None: await trio.sleep(0.1) assert await session.helo() == "test.example.com" assert await session.envelope_from() == "test@example.com" return Accept() async with trio.open_nursery() as tg: tg.start_soon(test_filter, session) tg.start_soon(test_filter) await trio.testing.wait_all_tasks_blocked() await session.deliver(Helo("test.example.com")) Loading