PROTON-2005: extra test case for transfer broken up for max frame size
diff --git a/python/tests/proton_tests/engine.py b/python/tests/proton_tests/engine.py
index 5f9543f..48bee6b 100644
--- a/python/tests/proton_tests/engine.py
+++ b/python/tests/proton_tests/engine.py
@@ -1242,6 +1242,60 @@
     binary = self.rcv.recv(1024)
     assert binary == None
 
+  def testMaxFrameAbort(self):
+    self.snd, self.rcv = self.link("test-link", max_frame=[0,512])
+    self.c1 = self.snd.session.connection
+    self.c2 = self.rcv.session.connection
+    self.snd.open()
+    self.rcv.open()
+    self.rcv.flow(1)
+    sndt = self.snd.transport
+    dblfrmbytes = ("0123456789" * 52).encode('utf-8')
+    assert 520 == len(dblfrmbytes)
+    self.pump()
+
+    # Part 1: abort a delivery that would generate two frames - before they are generated.
+    # Expect that no output is generated and credit is unaffected.
+    assert self.snd.credit == 1
+    sd = self.snd.delivery("tag_0")
+    n = self.snd.send(dblfrmbytes)
+    assert n == len(dblfrmbytes)
+    sd.abort()
+    generated = sndt.peek(2048)
+    assert generated == b""
+    assert self.snd.credit == 1
+
+    # Part 2: abort a streaming delivery whose last content would generate two frames.
+    # First send some un-aborted data across the wire.
+    sd = self.snd.delivery("tag_1")
+    n = self.snd.send(dblfrmbytes)
+    assert n == len(dblfrmbytes)
+    self.pump()
+    binary = self.rcv.recv(2048)
+    assert binary == dblfrmbytes, (binary, dblfrmbytes)
+    # Now send more data spanning two frames and immediately abort.
+    # Unlike part 1, an abort frame is required to sync with peer.
+    n = self.snd.send(dblfrmbytes)
+    assert n == len(dblfrmbytes)
+    sd.abort()
+    assert sd.aborted
+    # Expect a single abort transfer frame with no content.  One credit is consumed.
+    # @transfer(20) [handle=0, delivery-id=0, delivery-tag=b"tag_1", message-format=0, settled=true, aborted=true]
+    wanted = b"\x00\x00\x00\x27\x02\x00\x00\x00\x00S\x14\xd0\x00\x00\x00\x17\x00\x00\x00\nR\x00R\x00\xa0\x05tag_1R\x00A@@@@A"
+    t = self.snd.transport
+    wire_bytes = t.peek(2048)
+    assert wanted == wire_bytes
+    assert self.snd.credit == 0
+    self.pump()
+    assert self.rcv.current.aborted
+    # Confirm no lingering transfers by closing the link.
+    self.snd.close()
+    # Expect just the detach frame.
+    # @detach(22) [handle=0, closed=true]
+    wanted = b"\x00\x00\x00\x17\x02\x00\x00\x00\x00S\x16\xd0\x00\x00\x00\x07\x00\x00\x00\x02R\x00A"
+    wire_bytes = t.peek(2048)
+    assert wanted == wire_bytes
+
 
 class IdleTimeoutTest(Test):