Verify drain/drained works regardless of ordering. See PROTON-401
(self)
| 1672 | assert drained == 10 |
| 1673 | |
| 1674 | def testDrainOrder(self): |
| 1675 | """ Verify drain/drained works regardless of ordering. See PROTON-401 |
| 1676 | """ |
| 1677 | assert self.snd.credit == 0 |
| 1678 | assert self.rcv.credit == 0 |
| 1679 | assert self.rcv.queued == 0 |
| 1680 | |
| 1681 | # self.rcv.session.connection.transport.trace(Transport.TRACE_FRM) |
| 1682 | # self.snd.session.connection.transport.trace(Transport.TRACE_FRM) |
| 1683 | |
| 1684 | # verify that a sender that has reached the drain state will respond |
| 1685 | # promptly to a drain issued by the peer. |
| 1686 | self.rcv.flow(10) |
| 1687 | self.pump() |
| 1688 | assert self.snd.credit == 10, self.snd.credit |
| 1689 | assert self.rcv.credit == 10, self.rcv.credit |
| 1690 | |
| 1691 | sd = self.snd.delivery("tagA") |
| 1692 | assert sd |
| 1693 | n = self.snd.send(b"A") |
| 1694 | assert n == 1 |
| 1695 | self.pump() |
| 1696 | self.snd.advance() |
| 1697 | |
| 1698 | # done sending, so signal that we are drained: |
| 1699 | self.snd.drained() |
| 1700 | self.pump() |
| 1701 | assert self.snd.credit == 9, self.snd.credit |
| 1702 | assert self.rcv.credit == 10, self.rcv.credit |
| 1703 | |
| 1704 | self.rcv.drain(0) |
| 1705 | self.pump() |
| 1706 | assert self.snd.credit == 9, self.snd.credit |
| 1707 | assert self.rcv.credit == 10, self.rcv.credit |
| 1708 | |
| 1709 | data = self.rcv.recv(10) |
| 1710 | assert data == b"A", data |
| 1711 | self.rcv.advance() |
| 1712 | self.pump() |
| 1713 | assert self.snd.credit == 9, self.snd.credit |
| 1714 | assert self.rcv.credit == 9, self.rcv.credit |
| 1715 | |
| 1716 | self.snd.drained() |
| 1717 | self.pump() |
| 1718 | assert self.snd.credit == 0, self.snd.credit |
| 1719 | assert self.rcv.credit == 0, self.rcv.credit |
| 1720 | |
| 1721 | # verify that a drain requested by the peer is not "acknowledged" until |
| 1722 | # after the sender has completed sending its pending messages |
| 1723 | |
| 1724 | self.rcv.flow(10) |
| 1725 | self.pump() |
| 1726 | assert self.snd.credit == 10, self.snd.credit |
| 1727 | assert self.rcv.credit == 10, self.rcv.credit |
| 1728 | |
| 1729 | sd = self.snd.delivery("tagB") |
| 1730 | assert sd |
| 1731 | n = self.snd.send(b"B") |