summaryrefslogtreecommitdiffstats
path: root/net/quic/quic_connection_helper_test.cc
diff options
context:
space:
mode:
authorrch@chromium.org <rch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-15 06:58:11 +0000
committerrch@chromium.org <rch@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-10-15 06:58:11 +0000
commit9d0e0d1a57de7005d8ae3acd102de6eb1ee6b469 (patch)
tree5a065a2cdd9acc8bee5bc8c89bd7347b9316014a /net/quic/quic_connection_helper_test.cc
parent2953a81bbb82a5994732343499b83bfa9d6b4a34 (diff)
downloadchromium_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.cc30
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));