From c31bd404e2c1fd64c80c9ac9caba5b0fbb74b521 Mon Sep 17 00:00:00 2001 From: Joel Cunningham Date: Thu, 9 Mar 2017 16:40:54 -0600 Subject: [PATCH] Fix unit test with assumed congestion avoidance test_tcp_fast_rexmit_wraparound correctness relied on the congestion window being in congestion avoidance so that only a single TCP_MSS segment is sent upon ACKing the first segment. It's not known whether the test was relying tcp_alloc() to set ssthresh to 0 and thus start in congestion avoidance or if the test was working by accident until changes in b90a54f989d0edafa36b29bb0c346d1b30e1bf8f This fixes the test by enforcing the requirement of starting in congestion avoidance Signed-off-by: goldsimon (cherry picked from commit 8bf402fd678def9396d7f951531e75a239de8a12) --- test/unit/tcp/test_tcp.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/unit/tcp/test_tcp.c b/test/unit/tcp/test_tcp.c index 4abf4c87..d99b807d 100644 --- a/test/unit/tcp/test_tcp.c +++ b/test/unit/tcp/test_tcp.c @@ -422,6 +422,8 @@ START_TEST(test_tcp_fast_rexmit_wraparound) pcb->mss = TCP_MSS; /* disable initial congestion window (we don't send a SYN here...) */ pcb->cwnd = 2*TCP_MSS; + /* start in congestion advoidance */ + pcb->ssthresh = pcb->cwnd; /* send 6 mss-sized segments */ for (i = 0; i < 6; i++) { @@ -442,7 +444,9 @@ START_TEST(test_tcp_fast_rexmit_wraparound) /* ACK the first segment */ p = tcp_create_rx_segment(pcb, NULL, 0, 0, TCP_MSS, TCP_ACK); test_tcp_input(p, &netif); - /* ensure this didn't trigger a retransmission */ + /* ensure this didn't trigger a retransmission. Only one + segment should be transmitted because cwnd opened up by + TCP_MSS and a fraction since we are in congestion avoidance */ EXPECT(txcounters.num_tx_calls == 1); EXPECT(txcounters.num_tx_bytes == TCP_MSS + 40U); memset(&txcounters, 0, sizeof(txcounters));