Commit a5ee4472 authored by Dom Sekotill's avatar Dom Sekotill
Browse files

Simplify test filter functions' signatures

parent d219ddfb
Loading
Loading
Loading
Loading
+6 −9
Original line number Diff line number Diff line
@@ -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, "))
@@ -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

@@ -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, "))
@@ -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""))

+34 −51
Original line number Diff line number Diff line
@@ -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?"))
@@ -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)
@@ -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?"))
@@ -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:
@@ -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?"))
@@ -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:
@@ -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?"))
@@ -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?"))
@@ -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?"))
@@ -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?"))
@@ -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"))
@@ -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"))
@@ -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")),
@@ -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"))
@@ -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")),
@@ -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"))
@@ -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")),
@@ -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"))
@@ -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")),
@@ -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"))
@@ -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"))
@@ -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"))
@@ -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:
@@ -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"))
@@ -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:
@@ -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"))
+34 −51
Original line number Diff line number Diff line
@@ -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"
@@ -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"))

@@ -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"))
@@ -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"))

@@ -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"))

@@ -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())
@@ -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())

@@ -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", []))
@@ -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())
@@ -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"]))
@@ -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())
@@ -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())

@@ -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""))

@@ -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""))

@@ -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""))

@@ -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"}))
@@ -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"))