// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "net/quic/quic_ack_notifier.h" #include "net/quic/test_tools/quic_test_utils.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" namespace net { namespace test { namespace { class QuicAckNotifierTest : public ::testing::Test { protected: virtual void SetUp() { notifier_.reset(new QuicAckNotifier(&delegate_)); sequence_numbers_.insert(26); sequence_numbers_.insert(99); sequence_numbers_.insert(1234); notifier_->AddSequenceNumbers(sequence_numbers_); } SequenceNumberSet sequence_numbers_; MockAckNotifierDelegate delegate_; scoped_ptr notifier_; }; // Should trigger callback when we receive acks for all the registered seqnums. TEST_F(QuicAckNotifierTest, TriggerCallback) { EXPECT_CALL(delegate_, OnAckNotification()).Times(1); EXPECT_FALSE(notifier_->OnAck(26)); EXPECT_FALSE(notifier_->OnAck(99)); EXPECT_TRUE(notifier_->OnAck(1234)); } // Should not trigger callback if we never provide all the seqnums. TEST_F(QuicAckNotifierTest, DoesNotTrigger) { // Should not trigger callback as not all packets have been seen. EXPECT_CALL(delegate_, OnAckNotification()).Times(0); EXPECT_FALSE(notifier_->OnAck(26)); EXPECT_FALSE(notifier_->OnAck(99)); } // Should trigger even after updating sequence numbers and receiving ACKs for // new sequeunce numbers. TEST_F(QuicAckNotifierTest, UpdateSeqNums) { // Update a couple of the sequence numbers (i.e. retransmitted packets) notifier_->UpdateSequenceNumber(99, 3000); notifier_->UpdateSequenceNumber(1234, 3001); EXPECT_CALL(delegate_, OnAckNotification()).Times(1); EXPECT_FALSE(notifier_->OnAck(26)); // original EXPECT_FALSE(notifier_->OnAck(3000)); // updated EXPECT_TRUE(notifier_->OnAck(3001)); // updated } } // namespace } // namespace test } // namespace net