def test_appendExtendQueueStart3(self): q = Queue() q.append('zero') q.extend(['one', 'two']) self.assertEqual([], list(q.iterItems(start=3))) # iterItems is idempotent self.assertEqual([], list(q.iterItems(start=3)))
def test_appendExtendQueue(self): q = Queue() q.append('zero') q.extend(['one', 'two']) self.assertEqual([(0, 'zero'), (1, 'one'), (2, 'two')], list(q.iterItems(start=0))) # iterItems is idempotent self.assertEqual([(0, 'zero'), (1, 'one'), (2, 'two')], list(q.iterItems(start=0)))
def test_handleSACKOnlyAckNumber(self): q = Queue() q.append('zero') q.extend(['one', 'two']) self.assertEqual(False, q.handleSACK(SACK(0, ()))) self.assertEqual([(1, 'one'), (2, 'two')], list(q.iterItems(start=1))) # Removing again is idempotent self.assertEqual(False, q.handleSACK(SACK(0, ()))) self.assertEqual([(1, 'one'), (2, 'two')], list(q.iterItems(start=1)))
def test_iterItemsNoStartNumber(self): """ A L{start} for iterItems is not required. """ q = Queue() q.append('zero') q.extend(['one', 'two']) self.assertEqual([(0, 'zero'), (1, 'one'), (2, 'two')], list(q.iterItems())) self.assertEqual(False, q.handleSACK(SACK(-1, ()))) self.assertEqual([(0, 'zero'), (1, 'one'), (2, 'two')], list(q.iterItems())) self.assertEqual(False, q.handleSACK(SACK(0, ()))) self.assertEqual([(1, 'one'), (2, 'two')], list(q.iterItems()))
def test_ackNumberTooHigh1(self): q = Queue() q.append('zero') badSACK = q.handleSACK(SACK(1, ())) self.assertEqual(True, badSACK) # Items were still removed, despite it being a bad SACK self.assertEqual([], list(q.iterItems()))
def test_sackNumberTooHigh(self): q = Queue() q.extend(['zero', 'one', 'two', 'three']) badSACK = q.handleSACK(SACK(0, (2, 5))) self.assertEqual(True, badSACK) # Items were still removed, despite it being a bad SACK self.assertEqual([(1, 'one'), (3, 'three')], list(q.iterItems()))
def test_handleSACKBothAckAndSackNumRemoveItems(self): """ Another handleSACK test. This covers a wrong-variable-in-loop bug we had. """ q = Queue() q.extend(['zero', 'one', 'two', 'three', 'four']) self.assertEqual(False, q.handleSACK(SACK(0, (1, 3)))) self.assertEqual([(2, 'two'), (4, 'four')], list(q.iterItems()))
def test_handleSACK(self): """ handleSACK actually removes the selectively-acknowledged items from the queue """ q = Queue() q.append('zero') q.extend(['one', 'two', 'three']) self.assertEqual([(0, 'zero'), (1, 'one'), (2, 'two'), (3, 'three')], list(q.iterItems())) self.assertEqual(False, q.handleSACK(SACK(-1, (1,)))) self.assertEqual([(0, 'zero'), (2, 'two'), (3, 'three')], list(q.iterItems())) self.assertEqual(False, q.handleSACK(SACK(0, (3,)))) self.assertEqual([(2, 'two')], list(q.iterItems())) q.append('four') self.assertEqual([(2, 'two'), (4, 'four')], list(q.iterItems())) # although this is a very strange SACK because it should have # been (4, ()), it is still legal self.assertEqual(False, q.handleSACK(SACK(0, (2, 4)))) self.assertEqual([], list(q.iterItems())) q.append('five') self.assertEqual([(5, 'five')], list(q.iterItems()))
def test_iterEmptyQueue(self): q = Queue() self.assertEqual([], list(q.iterItems(start=0)))
def test_handleSACKToHigherNum(self): q = Queue() q.extend(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10']) self.assertEqual(False, q.handleSACK(SACK(1, ()))) self.assertEqual(False, q.handleSACK(SACK(3, ()))) # There should be 5 items left in the queue self.assertEqual([(4,'4'), (5,'5'), (6,'6'), (7,'7'), (8,'8'), (9,'9'), (10,'10')], list(q.iterItems(start=4)))