OLD | NEW |
| (Empty) |
1 // Copyright 2016 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/tools/quic/quic_epoll_alarm_factory.h" | |
6 | |
7 #include "net/gfe2/test_tools/mock_epoll_server.h" | |
8 #include "testing/base/public/gmock.h" | |
9 #include "testing/base/public/gunit.h" | |
10 | |
11 namespace net { | |
12 namespace test { | |
13 namespace { | |
14 | |
15 // The boolean parameter denotes whether or not to use an arena. | |
16 class QuicEpollAlarmFactoryTest : public ::testing::TestWithParam<bool> { | |
17 protected: | |
18 QuicEpollAlarmFactoryTest() | |
19 : clock_(&epoll_server_), alarm_factory_(&epoll_server_) {} | |
20 | |
21 QuicConnectionArena* GetArenaParam() { | |
22 return GetParam() ? &arena_ : nullptr; | |
23 } | |
24 | |
25 const QuicEpollClock clock_; | |
26 QuicEpollAlarmFactory alarm_factory_; | |
27 test::MockEpollServer epoll_server_; | |
28 QuicConnectionArena arena_; | |
29 }; | |
30 | |
31 TEST_P(QuicEpollAlarmFactoryTest, CreateAlarm) { | |
32 QuicArenaScopedPtr<TestDelegate> delegate = | |
33 QuicArenaScopedPtr<TestDelegate>(new TestDelegate()); | |
34 QuicArenaScopedPtr<QuicAlarm> alarm( | |
35 alarm_factory_.CreateAlarm(std::move(delegate), GetArenaParam())); | |
36 | |
37 QuicTime start = clock_.Now(); | |
38 QuicTime::Delta delta = QuicTime::Delta::FromMicroseconds(1); | |
39 alarm->Set(start.Add(delta)); | |
40 | |
41 epoll_server_.AdvanceByAndWaitForEventsAndExecuteCallbacks( | |
42 delta.ToMicroseconds()); | |
43 EXPECT_EQ(start.Add(delta), clock_.Now()); | |
44 } | |
45 | |
46 TEST_P(QuicEpollAlarmFactoryTest, CreateAlarmAndCancel) { | |
47 QuicArenaScopedPtr<TestDelegate> delegate = | |
48 QuicArenaScopedPtr<TestDelegate>(new TestDelegate()); | |
49 TestDelegate* unowned_delegate = delegate.get(); | |
50 QuicArenaScopedPtr<QuicAlarm> alarm( | |
51 alarm_factory_.CreateAlarm(std::move(delegate), GetArenaParam())); | |
52 | |
53 QuicTime start = clock_.Now(); | |
54 QuicTime::Delta delta = QuicTime::Delta::FromMicroseconds(1); | |
55 alarm->Set(start.Add(delta)); | |
56 alarm->Cancel(); | |
57 | |
58 epoll_server_.AdvanceByExactlyAndCallCallbacks(delta.ToMicroseconds()); | |
59 EXPECT_EQ(start.Add(delta), clock_.Now()); | |
60 EXPECT_FALSE(unowned_delegate->fired()); | |
61 } | |
62 | |
63 TEST_P(QuicEpollAlarmFactoryTest, CreateAlarmAndReset) { | |
64 QuicArenaScopedPtr<TestDelegate> delegate = | |
65 QuicArenaScopedPtr<TestDelegate>(new TestDelegate()); | |
66 TestDelegate* unowned_delegate = delegate.get(); | |
67 QuicArenaScopedPtr<QuicAlarm> alarm( | |
68 alarm_factory_.CreateAlarm(std::move(delegate), GetArenaParam())); | |
69 | |
70 QuicTime start = clock_.Now(); | |
71 QuicTime::Delta delta = QuicTime::Delta::FromMicroseconds(1); | |
72 alarm->Set(clock_.Now().Add(delta)); | |
73 alarm->Cancel(); | |
74 QuicTime::Delta new_delta = QuicTime::Delta::FromMicroseconds(3); | |
75 alarm->Set(clock_.Now().Add(new_delta)); | |
76 | |
77 epoll_server_.AdvanceByExactlyAndCallCallbacks(delta.ToMicroseconds()); | |
78 EXPECT_EQ(start.Add(delta), clock_.Now()); | |
79 EXPECT_FALSE(unowned_delegate->fired()); | |
80 | |
81 epoll_server_.AdvanceByExactlyAndCallCallbacks( | |
82 new_delta.Subtract(delta).ToMicroseconds()); | |
83 EXPECT_EQ(start.Add(new_delta), clock_.Now()); | |
84 EXPECT_TRUE(unowned_delegate->fired()); | |
85 } | |
86 | |
87 TEST_P(QuicEpollAlarmFactoryTest, CreateAlarmAndUpdate) { | |
88 QuicArenaScopedPtr<TestDelegate> delegate = | |
89 QuicArenaScopedPtr<TestDelegate>(new TestDelegate()); | |
90 TestDelegate* unowned_delegate = delegate.get(); | |
91 QuicArenaScopedPtr<QuicAlarm> alarm( | |
92 alarm_factory_.CreateAlarm(std::move(delegate), GetArenaParam())); | |
93 | |
94 QuicTime start = clock_.Now(); | |
95 QuicTime::Delta delta = QuicTime::Delta::FromMicroseconds(1); | |
96 alarm->Set(clock_.Now().Add(delta)); | |
97 QuicTime::Delta new_delta = QuicTime::Delta::FromMicroseconds(3); | |
98 alarm->Update(clock_.Now().Add(new_delta), | |
99 QuicTime::Delta::FromMicroseconds(1)); | |
100 | |
101 epoll_server_.AdvanceByExactlyAndCallCallbacks(delta.ToMicroseconds()); | |
102 EXPECT_EQ(start.Add(delta), clock_.Now()); | |
103 EXPECT_FALSE(unowned_delegate->fired()); | |
104 | |
105 // Move the alarm forward 1us and ensure it doesn't move forward. | |
106 alarm->Update(clock_.Now().Add(new_delta), | |
107 QuicTime::Delta::FromMicroseconds(2)); | |
108 | |
109 epoll_server_.AdvanceByExactlyAndCallCallbacks( | |
110 new_delta.Subtract(delta).ToMicroseconds()); | |
111 EXPECT_EQ(start.Add(new_delta), clock_.Now()); | |
112 EXPECT_TRUE(unowned_delegate->fired()); | |
113 | |
114 // Set the alarm via an update call. | |
115 new_delta = QuicTime::Delta::FromMicroseconds(5); | |
116 alarm->Update(clock_.Now().Add(new_delta), | |
117 QuicTime::Delta::FromMicroseconds(1)); | |
118 EXPECT_TRUE(alarm->IsSet()); | |
119 | |
120 // Update it with an uninitialized time and ensure it's cancelled. | |
121 alarm->Update(QuicTime::Zero(), QuicTime::Delta::FromMicroseconds(1)); | |
122 EXPECT_FALSE(alarm->IsSet()); | |
123 } | |
124 | |
125 } // namespace | |
126 } // namespace test | |
127 } // namespace net | |
OLD | NEW |