diff options
author | rch@chromium.org <rch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-15 06:58:11 +0000 |
---|---|---|
committer | rch@chromium.org <rch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-10-15 06:58:11 +0000 |
commit | 9d0e0d1a57de7005d8ae3acd102de6eb1ee6b469 (patch) | |
tree | 5a065a2cdd9acc8bee5bc8c89bd7347b9316014a /net/quic/quic_connection_helper_test.cc | |
parent | 2953a81bbb82a5994732343499b83bfa9d6b4a34 (diff) | |
download | chromium_src-9d0e0d1a57de7005d8ae3acd102de6eb1ee6b469.zip chromium_src-9d0e0d1a57de7005d8ae3acd102de6eb1ee6b469.tar.gz chromium_src-9d0e0d1a57de7005d8ae3acd102de6eb1ee6b469.tar.bz2 |
Fix QuicConnectionHelper's alarm implementation
to properly allow alarms to be re-secheduled for an earlier time.
Review URL: https://codereview.chromium.org/26331009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@228641 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/quic/quic_connection_helper_test.cc')
-rw-r--r-- | net/quic/quic_connection_helper_test.cc | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/net/quic/quic_connection_helper_test.cc b/net/quic/quic_connection_helper_test.cc index 4f26f28..22b8e7d 100644 --- a/net/quic/quic_connection_helper_test.cc +++ b/net/quic/quic_connection_helper_test.cc @@ -39,6 +39,7 @@ class TestDelegate : public QuicAlarm::Delegate { } bool fired() const { return fired_; } + void Clear() { fired_= false; } private: bool fired_; @@ -308,6 +309,35 @@ TEST_F(QuicConnectionHelperTest, CreateAlarmAndReset) { EXPECT_TRUE(delegate->fired()); } +TEST_F(QuicConnectionHelperTest, CreateAlarmAndResetEarlier) { + TestDelegate* delegate = new TestDelegate(); + scoped_ptr<QuicAlarm> alarm(helper_->CreateAlarm(delegate)); + + QuicTime::Delta delta = QuicTime::Delta::FromMicroseconds(3); + alarm->Set(clock_.Now().Add(delta)); + alarm->Cancel(); + QuicTime::Delta new_delta = QuicTime::Delta::FromMicroseconds(1); + alarm->Set(clock_.Now().Add(new_delta)); + + // Both alarm tasks will be posted. + ASSERT_EQ(3u, runner_->GetPostedTasks().size()); + + // The earlier task will execute and will fire the alarm. + runner_->RunNextTask(); + EXPECT_EQ(QuicTime::Zero().Add(new_delta), clock_.Now()); + EXPECT_TRUE(delegate->fired()); + delegate->Clear(); + + // The latter task is still posted. + ASSERT_EQ(2u, runner_->GetPostedTasks().size()); + + // When the latter task is executed, the weak ptr will be invalid and + // the alarm will not fire. + runner_->RunNextTask(); + EXPECT_EQ(QuicTime::Zero().Add(delta), clock_.Now()); + EXPECT_FALSE(delegate->fired()); +} + TEST_F(QuicConnectionHelperTest, TestRTORetransmission) { AddWrite(SYNCHRONOUS, ConstructDataPacket(1)); AddWrite(SYNCHRONOUS, ConstructDataPacket(2)); |