Verified Commit 2fb0064e authored by Dom Sekotill's avatar Dom Sekotill
Browse files

Modify tests to mimic yielded message buffers

kilter.protocol 0.6 makes a change that necessitates an assertion that
messages with bytes data exclusively use memoryviews, at least until
`freeze()` is called on them.

There should be a typing solution to this problem but it may have it's
own issues.
parent 70671606
Loading
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -310,6 +310,7 @@ class Session:
			match message:
				case Unknown():
					if message.content[:len(bname)] == bname:
						assert isinstance(message.content, memoryview)
						return message.content
				# fake buffers for MAIL and RCPT commands
				case EnvelopeFrom() if name == "MAIL":
@@ -528,12 +529,14 @@ class BodyAccessor(AsyncContextManager[AsyncIterator[memoryview]]):
			match (await self.session.broadcast.receive()):
				case Body() as body:
					try:
						assert isinstance(body.content, memoryview)
						yield body.content
					except GeneratorExit:
						self.skip = True
						raise
				case EndOfMessage() as eom:
					if not self.skip:
						assert isinstance(eom.content, memoryview)
						yield eom.content

	async def write(self, chunk: bytes) -> None:
+8 −7
Original line number Diff line number Diff line
from builtins import memoryview as mv
from ipaddress import IPv4Address
from pathlib import Path

@@ -36,9 +37,9 @@ class HeaderAccessorTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			tg.start_soon(test_filter)
			await trio.testing.wait_all_tasks_blocked()
			await session.deliver(Body(b"Spam, "))
			await session.deliver(Body(b"spam, "))
			await session.deliver(EndOfMessage(b"and eggs"))
			await session.deliver(Body(mv(b"Spam, ")))
			await session.deliver(Body(mv(b"spam, ")))
			await session.deliver(EndOfMessage(mv(b"and eggs")))

		assert result == b"Spam, spam, and eggs"

@@ -68,10 +69,10 @@ class HeaderAccessorTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			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, "))
			assert Skip == await session.deliver(Body(b"spam, "))
			assert Continue == await session.deliver(EndOfMessage(b"and eggs"))
			assert Continue == await session.deliver(Body(mv(b"Spam, ")))
			assert Skip == await session.deliver(Body(mv(b"spam, ")))
			assert Skip == await session.deliver(Body(mv(b"spam, ")))
			assert Continue == await session.deliver(EndOfMessage(mv(b"and eggs")))

		assert result1 == b"Spam, "
		assert result2 == b""
+48 −47
Original line number Diff line number Diff line
from builtins import memoryview as mv
from ipaddress import IPv4Address
from unittest.mock import call

@@ -35,13 +36,13 @@ class HeaderAccessorTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			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?"))
			await session.deliver(Header("Eggs", b"and spam"))
			await session.deliver(Header("Spam", mv(b"spam spam spam")))
			await session.deliver(Header("Spam", mv(b"spam?")))
			await session.deliver(Header("Eggs", mv(b"and spam")))
			await session.deliver(EndOfHeaders())

			# try and throw the iterator off!
			await session.deliver(Header("Dead-Parrot", b"and spam"))
			await session.deliver(Header("Dead-Parrot", mv(b"and spam")))

		assert result == ["Spam", "Spam", "Eggs"]

@@ -70,15 +71,15 @@ class HeaderAccessorTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			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?"))
			await session.deliver(Header("Eggs", b"and spam"))
			await session.deliver(Header("Spam", b"spam spam spam"))
			await session.deliver(Header("Spam", mv(b"spam spam spam")))
			await session.deliver(Header("Spam", mv(b"spam?")))
			await session.deliver(Header("Eggs", mv(b"and spam")))
			await session.deliver(Header("Spam", mv(b"spam spam spam")))
			await session.deliver(EndOfHeaders())

			# Try and throw the iterator off!  The filter should not await any further
			# messages after the EndOfHeaders one.
			await session.deliver(Header("Dead-Parrot", b"and spam"))
			await session.deliver(Header("Dead-Parrot", mv(b"and spam")))

		assert result1 == ["Spam", "Spam", "Eggs"]
		assert result2 == ["Spam", "Spam", "Eggs", "Spam"]
@@ -102,9 +103,9 @@ class HeaderAccessorTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			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?"))
			await session.deliver(Header("Eggs", b"and spam"))
			await session.deliver(Header("Spam", mv(b"spam spam spam")))
			await session.deliver(Header("Spam", mv(b"spam?")))
			await session.deliver(Header("Eggs", mv(b"and spam")))
			await session.deliver(EndOfHeaders())

		assert result == ["Spam", "Spam", "Eggs"]
@@ -128,9 +129,9 @@ class HeaderAccessorTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			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?"))
			await session.deliver(Header("Eggs", b"and spam"))
			await session.deliver(Header("Spam", mv(b"spam spam spam")))
			await session.deliver(Header("Spam", mv(b"spam?")))
			await session.deliver(Header("Eggs", mv(b"and spam")))
			await session.deliver(Body(b""))

		assert result == ["Spam", "Spam", "Eggs"]
@@ -151,10 +152,10 @@ class HeaderAccessorTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			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?"))
			await session.deliver(Header("Eggs", b"and spam"))
			await session.deliver(Header("Ham", b"and spam"))
			await session.deliver(Header("Spam", mv(b"spam spam spam")))
			await session.deliver(Header("Spam", mv(b"spam?")))
			await session.deliver(Header("Eggs", mv(b"and spam")))
			await session.deliver(Header("Ham", mv(b"and spam")))
			await session.deliver(EndOfHeaders())

		assert result == ["Spam", "Spam", "Ham"], result
@@ -178,10 +179,10 @@ class HeaderAccessorTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			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?"))
			await session.deliver(Header("Eggs", b"and spam"))
			await session.deliver(Header("Ham", b"and spam"))
			await session.deliver(Header("Spam", mv(b"spam spam spam")))
			await session.deliver(Header("Spam", mv(b"spam?")))
			await session.deliver(Header("Eggs", mv(b"and spam")))
			await session.deliver(Header("Ham", mv(b"and spam")))
			await session.deliver(EndOfHeaders())
			await session.deliver(EndOfMessage(b""))

@@ -210,10 +211,10 @@ class HeaderAccessorTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			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?"))
			await session.deliver(Header("Eggs", b"and spam"))
			await session.deliver(Header("Ham", b"and spam"))
			await session.deliver(Header("Spam", mv(b"spam spam spam")))
			await session.deliver(Header("Spam", mv(b"spam?")))
			await session.deliver(Header("Eggs", mv(b"and spam")))
			await session.deliver(Header("Ham", mv(b"and spam")))
			await session.deliver(EndOfHeaders())
			await session.deliver(EndOfMessage(b""))

@@ -243,8 +244,8 @@ class HeaderAccessorTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			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"))
			await session.deliver(Header("Spam", mv(b"spam spam spam")))
			await session.deliver(Header("Eggs", mv(b"and spam")))
			await session.deliver(EndOfHeaders())
			await session.deliver(EndOfMessage(b""))

@@ -273,8 +274,8 @@ class HeaderAccessorTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			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"))
			await session.deliver(Header("Spam", mv(b"spam spam spam")))
			await session.deliver(Header("Eggs", mv(b"and spam")))
			await session.deliver(EndOfHeaders())
			await session.deliver(EndOfMessage(b""))

@@ -306,8 +307,8 @@ class HeaderAccessorTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			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"))
			await session.deliver(Header("Spam", mv(b"spam spam spam")))
			await session.deliver(Header("Eggs", mv(b"and spam")))
			await session.deliver(EndOfHeaders())
			await session.deliver(EndOfMessage(b""))

@@ -339,8 +340,8 @@ class HeaderAccessorTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			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"))
			await session.deliver(Header("Spam", mv(b"spam spam spam")))
			await session.deliver(Header("Eggs", mv(b"and spam")))
			await session.deliver(EndOfHeaders())
			await session.deliver(EndOfMessage(b""))

@@ -372,8 +373,8 @@ class HeaderAccessorTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			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"))
			await session.deliver(Header("Spam", mv(b"spam spam spam")))
			await session.deliver(Header("Eggs", mv(b"and spam")))
			await session.deliver(EndOfHeaders())
			await session.deliver(EndOfMessage(b""))

@@ -409,8 +410,8 @@ class HeaderAccessorTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			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"))
			await session.deliver(Header("Spam", mv(b"spam spam spam")))
			await session.deliver(Header("Eggs", mv(b"and spam")))
			await session.deliver(EndOfHeaders())
			await session.deliver(EndOfMessage(b""))

@@ -440,8 +441,8 @@ class HeaderAccessorTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			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"))
			await session.deliver(Header("From", mv(b"test@example.com")))
			await session.deliver(Header("To", mv(b"test@example.com")))
			await session.deliver(EndOfHeaders())

	async def test_athrow_type(self) -> None:
@@ -462,8 +463,8 @@ class HeaderAccessorTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			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"))
			await session.deliver(Header("From", mv(b"test@example.com")))
			await session.deliver(Header("To", mv(b"test@example.com")))
			await session.deliver(EndOfHeaders())

	async def test_athrow_type_msg(self) -> None:
@@ -485,8 +486,8 @@ class HeaderAccessorTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			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"))
			await session.deliver(Header("From", mv(b"test@example.com")))
			await session.deliver(Header("To", mv(b"test@example.com")))
			await session.deliver(EndOfHeaders())

	async def test_athrow_inst(self) -> None:
@@ -508,6 +509,6 @@ class HeaderAccessorTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			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"))
			await session.deliver(Header("From", mv(b"test@example.com")))
			await session.deliver(Header("To", mv(b"test@example.com")))
			await session.deliver(EndOfHeaders())
+21 −20
Original line number Diff line number Diff line
from builtins import memoryview as mv
from ipaddress import IPv4Address
from unittest.mock import call

@@ -30,7 +31,7 @@ class SessionTests(AsyncTestCase):
		await session.deliver(Helo("example.com"))
		self.assertEqual(session.phase, Phase.MAIL)

		await session.deliver(EnvelopeFrom(b"test@example.com"))
		await session.deliver(EnvelopeFrom(mv(b"test@example.com")))
		self.assertEqual(session.phase, Phase.ENVELOPE)

		await session.deliver(Data())
@@ -49,10 +50,10 @@ class SessionTests(AsyncTestCase):
		session = Session(Connect("example.com", LOCALHOST, 1025), MockEditor())
		self.assertEqual(session.phase, Phase.CONNECT)

		await session.deliver(EnvelopeRecipient(b"test@example.com", []))
		await session.deliver(EnvelopeRecipient(mv(b"test@example.com"), []))
		self.assertEqual(session.phase, Phase.ENVELOPE)

		await session.deliver(Header("To", b"test@example.com"))
		await session.deliver(Header("To", mv(b"test@example.com")))
		self.assertEqual(session.phase, Phase.HEADERS)

		await session.deliver(EndOfHeaders())
@@ -75,7 +76,7 @@ class SessionTests(AsyncTestCase):
			await trio.testing.wait_all_tasks_blocked()
			await session.deliver(Helo("ham"))
			assert result == "spam"
			await session.deliver(EnvelopeFrom(b"eggs"))
			await session.deliver(EnvelopeFrom(mv(b"eggs")))

		assert result == "eggs"

@@ -115,7 +116,7 @@ class SessionTests(AsyncTestCase):
			tg.start_soon(test_filter)
			await trio.testing.wait_all_tasks_blocked()
			await session.deliver(Helo("ham"))
			await session.deliver(EnvelopeFrom(b"eggs"))
			await session.deliver(EnvelopeFrom(mv(b"eggs")))

	async def test_await_helo_missing(self) -> None:
		"""
@@ -132,7 +133,7 @@ class SessionTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			tg.start_soon(test_filter)
			await trio.testing.wait_all_tasks_blocked()
			await session.deliver(EnvelopeFrom(b"eggs"))
			await session.deliver(EnvelopeFrom(mv(b"eggs")))

	async def test_await_mail(self) -> None:
		"""
@@ -149,7 +150,7 @@ class SessionTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			tg.start_soon(test_filter)
			await trio.testing.wait_all_tasks_blocked()
			await session.deliver(EnvelopeFrom(b"eggs"))
			await session.deliver(EnvelopeFrom(mv(b"eggs")))

		assert result == "eggs"

@@ -169,7 +170,7 @@ class SessionTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			tg.start_soon(test_filter)
			await trio.testing.wait_all_tasks_blocked()
			await session.deliver(Header("Spam", b"eggs"))
			await session.deliver(Header("Spam", mv(b"eggs")))
			await session.deliver(EndOfHeaders())

	async def test_await_from_missing(self) -> None:
@@ -204,9 +205,9 @@ class SessionTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			tg.start_soon(test_filter)
			await trio.testing.wait_all_tasks_blocked()
			await session.deliver(EnvelopeRecipient(b"spam", []))
			await session.deliver(EnvelopeRecipient(b"spam", []))
			await session.deliver(EnvelopeRecipient(b"eggs", []))
			await session.deliver(EnvelopeRecipient(mv(b"spam"), []))
			await session.deliver(EnvelopeRecipient(mv(b"spam"), []))
			await session.deliver(EnvelopeRecipient(mv(b"eggs"), []))
			await session.deliver(Data())

		assert result == ["spam", "spam", "eggs"]
@@ -228,7 +229,7 @@ class SessionTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			tg.start_soon(test_filter)
			await trio.testing.wait_all_tasks_blocked()
			await session.deliver(Header("Spam", b"eggs"))
			await session.deliver(Header("Spam", mv(b"eggs")))
			await session.deliver(EndOfHeaders())

	async def test_await_extension(self) -> None:
@@ -248,11 +249,11 @@ class SessionTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			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"]))
			await session.deliver(Unknown(b"HAM green eggs"))
			await session.deliver(EnvelopeRecipient(b"spam", [b"spam", b"eggs"]))
			await session.deliver(EnvelopeRecipient(b"spam", []))
			await session.deliver(Unknown(mv(b"SPAM spam eggs")))
			await session.deliver(EnvelopeFrom(mv(b"spam"), [mv(b"spam"), mv(b"eggs")]))
			await session.deliver(Unknown(mv(b"HAM green eggs")))
			await session.deliver(EnvelopeRecipient(mv(b"spam"), [mv(b"spam"), mv(b"eggs")]))
			await session.deliver(EnvelopeRecipient(mv(b"spam"), []))
			await session.deliver(Data())

		assert result == [
@@ -278,7 +279,7 @@ class SessionTests(AsyncTestCase):
		async with trio.open_nursery() as tg:
			tg.start_soon(test_filter)
			await trio.testing.wait_all_tasks_blocked()
			await session.deliver(Header("Spam", b"eggs"))
			await session.deliver(Header("Spam", mv(b"eggs")))
			await session.deliver(EndOfHeaders())

	async def test_await_extension_missing(self) -> None:
@@ -390,7 +391,7 @@ class SessionTests(AsyncTestCase):
			await session.deliver(Macro(Helo.ident, {"{spam}": "yes", "{eggs}": "yes"}))
			await session.deliver(Helo("test.example.com"))
			await session.deliver(Macro(Helo.ident, {"{spam}": "no", "{ham}": "maybe"}))
			await session.deliver(EnvelopeFrom(b"test@example.com"))
			await session.deliver(EnvelopeFrom(mv(b"test@example.com")))

	async def test_delay(self) -> None:
		"""
@@ -410,7 +411,7 @@ class SessionTests(AsyncTestCase):
			await trio.testing.wait_all_tasks_blocked()

			await session.deliver(Helo("test.example.com"))
			await session.deliver(EnvelopeFrom(b"test@example.com"))
			await session.deliver(EnvelopeFrom(mv(b"test@example.com")))

	async def test_abort_in_helo(self) -> None:
		"""