def test_fast_recovery_reno4( self ): packet_size = DEFAULT_MSS tcp = TcpProtocol( DEFAULT_SSHTRESH , DEFAULT_MSS , True ) tcp.send( packet_size ) pack = tcp.do_send( ) base = pack[0] self.assertEqual( tcp.next_to_ack( ) , base+packet_size ) count = 1 self.assertEqual( tcp.next_to_ack( ) , base+packet_size ) while ( tcp.get_cwnd() < DEFAULT_SSHTRESH ): tcp.ack( base+(count*packet_size) ) self.assertEqual( tcp.get_cwnd( ) , (count+1)*DEFAULT_MSS ) tcp.send( packet_size ) pack = tcp.do_send( ) self.assertEqual( pack , (base+(count*packet_size) , packet_size ) ) count += 1 tcp.ack( base+(count*packet_size) ) cwnd = tcp.get_cwnd( ) self.assertEqual( cwnd , count*DEFAULT_MSS+max( (DEFAULT_MSS*DEFAULT_MSS)/(count*DEFAULT_MSS) , 1 ) ) tcp.send( packet_size ) tcp.do_send( ) tcp.ack( base+(count*packet_size) ) tcp.ack( base+(count*packet_size) ) tcp.ack( base+(count*packet_size) ) self.assertEqual( tcp.get_duplicated_ack_count( ) , 3 ) self.assertEqual( tcp.get_ssthresh( ) , cwnd/2 ) self.assertEqual( tcp.get_cwnd( ) , (cwnd/2)+3*DEFAULT_MSS ) tcp.ack( base+((count+1)*packet_size) ) self.assertEqual( tcp.get_ssthresh() , cwnd/2 ) self.assertEqual( tcp.get_cwnd() , tcp.get_ssthresh( ) )
def test_init_tahoe(self): tcp = TcpProtocol( DEFAULT_SSHTRESH , DEFAULT_MSS , False ) self.assertEqual( tcp.get_ssthresh( ) , DEFAULT_SSHTRESH ) self.assertEqual( tcp.get_cwnd( ) , DEFAULT_MSS ) self.assertEqual( tcp.next_to_ack( ) , -1 ) pack = tcp.next_to_send() self.assertEqual( pack[1] , -1 ) self.assertEqual( tcp.get_duplicated_ack_count( ) , 0 )
def test_time_out_tahoe( self ): packet_size = DEFAULT_MSS tcp = TcpProtocol( DEFAULT_SSHTRESH , DEFAULT_MSS , False ) tcp.send( packet_size ) pack = tcp.do_send( ) base = pack[0] self.assertEqual( tcp.next_to_ack( ) , base+packet_size ) for count in range(1,25): tcp.ack( base+(count*packet_size) ) self.assertEqual( tcp.get_cwnd( ) , (count+1)*DEFAULT_MSS ) tcp.send( packet_size ) pack = tcp.do_send( ) self.assertEqual( pack , (base+(count*packet_size) , packet_size ) ) tcp.ack( base+(count*packet_size) ) cwnd = tcp.get_cwnd() tcp.time_out() self.assertEqual( tcp.get_ssthresh() , cwnd/2 ) self.assertEqual( tcp.get_cwnd() , DEFAULT_MSS )