Home | History | Annotate | Download | only in quic
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "net/quic/quic_ack_notifier.h"
      6 
      7 #include "net/quic/test_tools/quic_test_utils.h"
      8 #include "testing/gmock/include/gmock/gmock.h"
      9 #include "testing/gtest/include/gtest/gtest.h"
     10 
     11 using testing::_;
     12 
     13 namespace net {
     14 namespace test {
     15 namespace {
     16 
     17 class QuicAckNotifierTest : public ::testing::Test {
     18  protected:
     19   QuicAckNotifierTest() : zero_(QuicTime::Delta::Zero()) {}
     20 
     21   virtual void SetUp() {
     22     delegate_ = new MockAckNotifierDelegate;
     23     notifier_.reset(new QuicAckNotifier(delegate_));
     24 
     25     notifier_->AddSequenceNumber(26, 100);
     26     notifier_->AddSequenceNumber(99, 20);
     27     notifier_->AddSequenceNumber(1234, 3);
     28   }
     29 
     30   MockAckNotifierDelegate* delegate_;
     31   scoped_ptr<QuicAckNotifier> notifier_;
     32   QuicTime::Delta zero_;
     33 };
     34 
     35 // Should trigger callback when we receive acks for all the registered seqnums.
     36 TEST_F(QuicAckNotifierTest, TriggerCallback) {
     37   EXPECT_CALL(*delegate_, OnAckNotification(3, 123, 0, 0, zero_)).Times(1);
     38   EXPECT_FALSE(notifier_->OnAck(26, zero_));
     39   EXPECT_FALSE(notifier_->OnAck(99, zero_));
     40   EXPECT_TRUE(notifier_->OnAck(1234, zero_));
     41 }
     42 
     43 // Should not trigger callback if we never provide all the seqnums.
     44 TEST_F(QuicAckNotifierTest, DoesNotTrigger) {
     45   // Should not trigger callback as not all packets have been seen.
     46   EXPECT_CALL(*delegate_, OnAckNotification(_, _, _, _, _)).Times(0);
     47   EXPECT_FALSE(notifier_->OnAck(26, zero_));
     48   EXPECT_FALSE(notifier_->OnAck(99, zero_));
     49 }
     50 
     51 // Should trigger even after updating sequence numbers and receiving ACKs for
     52 // new sequeunce numbers.
     53 TEST_F(QuicAckNotifierTest, UpdateSeqNums) {
     54   // Update a couple of the sequence numbers (i.e. retransmitted packets)
     55   notifier_->UpdateSequenceNumber(99, 3000);
     56   notifier_->UpdateSequenceNumber(1234, 3001);
     57 
     58   EXPECT_CALL(*delegate_, OnAckNotification(3, 123, 2, 20 + 3, _)).Times(1);
     59   EXPECT_FALSE(notifier_->OnAck(26, zero_));    // original
     60   EXPECT_FALSE(notifier_->OnAck(3000, zero_));  // updated
     61   EXPECT_TRUE(notifier_->OnAck(3001, zero_));   // updated
     62 }
     63 
     64 // Make sure the delegate is called with the delta time from the last ACK.
     65 TEST_F(QuicAckNotifierTest, DeltaTime) {
     66   const QuicTime::Delta first_delta = QuicTime::Delta::FromSeconds(5);
     67   const QuicTime::Delta second_delta = QuicTime::Delta::FromSeconds(33);
     68   const QuicTime::Delta third_delta = QuicTime::Delta::FromSeconds(10);
     69 
     70   EXPECT_CALL(*delegate_,
     71               OnAckNotification(3, 123, 0, 0, third_delta))
     72       .Times(1);
     73   EXPECT_FALSE(notifier_->OnAck(26, first_delta));
     74   EXPECT_FALSE(notifier_->OnAck(99, second_delta));
     75   EXPECT_TRUE(notifier_->OnAck(1234, third_delta));
     76 }
     77 
     78 }  // namespace
     79 }  // namespace test
     80 }  // namespace net
     81