Verified Commit 32da223a authored by Dom Sekotill's avatar Dom Sekotill
Browse files

Fix off-by-one indexes in Session.headers.insert

For real this time, hopefully. At least the tests pass now.
parent cf597832
Loading
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -445,16 +445,16 @@ class HeadersAccessor(AsyncContextManager["HeaderIterator"]):
			case Position(subject="end"):
				index = len(self._table)
			case Before():
				index = self._table.index(position.subject) + 1
				index = self._table.index(position.subject)
			case After():  # pragma: no-branch
				index = self._table.index(position.subject) + 2
				index = self._table.index(position.subject) + 1
			case _:
				raise TypeError("Expect a Position")
		if index >= len(self._table):
			await self._editor.asend(AddHeader(header.name, header.value))
			self._table.append(header)
		else:
			await self._editor.asend(InsertHeader(index, header.name, header.value))
			await self._editor.asend(InsertHeader(index + 1, header.name, header.value))
			self._table.insert(index, header)


+5 −5
Original line number Diff line number Diff line
@@ -248,7 +248,7 @@ class HeaderAccessorTests(AsyncTestCase):
			await session.deliver(EndOfHeaders())
			await session.deliver(EndOfMessage(b""))

		sender._asend.assert_awaited_with(InsertHeader(0, "Ham", b"and eggs"))
		sender._asend.assert_awaited_with(InsertHeader(1, "Ham", b"and eggs"))
		assert result == [
			Header("Ham", b"and eggs"),
			Header("Spam", b"spam spam spam"),
@@ -311,7 +311,7 @@ class HeaderAccessorTests(AsyncTestCase):
			await session.deliver(EndOfHeaders())
			await session.deliver(EndOfMessage(b""))

		sender._asend.assert_awaited_with(InsertHeader(1, "Ham", b"and eggs"))
		sender._asend.assert_awaited_with(InsertHeader(2, "Ham", b"and eggs"))
		assert result == [
			Header("Spam", b"spam spam spam"),
			Header("Ham", b"and eggs"),
@@ -344,7 +344,7 @@ class HeaderAccessorTests(AsyncTestCase):
			await session.deliver(EndOfHeaders())
			await session.deliver(EndOfMessage(b""))

		sender._asend.assert_awaited_with(InsertHeader(1, "Ham", b"and eggs"))
		sender._asend.assert_awaited_with(InsertHeader(2, "Ham", b"and eggs"))
		assert result == [
			Header("Spam", b"spam spam spam"),
			Header("Ham", b"and eggs"),
@@ -415,8 +415,8 @@ class HeaderAccessorTests(AsyncTestCase):
			await session.deliver(EndOfMessage(b""))

		sender._asend.assert_has_awaits([
			call(InsertHeader(1, "Ham", b"and eggs")),
			call(InsertHeader(2, "Ham", b"and spam")),
			call(InsertHeader(2, "Ham", b"and eggs")),
			call(InsertHeader(3, "Ham", b"and spam")),
		])
		assert result == [
			Header("Spam", b"spam spam spam"),