OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/tools/quic/quic_epoll_connection_helper.h" | 5 #include "net/tools/quic/quic_epoll_connection_helper.h" |
6 | 6 |
7 #include "net/quic/crypto/quic_random.h" | 7 #include "net/quic/crypto/quic_random.h" |
8 #include "net/tools/quic/test_tools/mock_epoll_server.h" | 8 #include "net/tools/quic/test_tools/mock_epoll_server.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 | 10 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 epoll_server_.AdvanceBy(delta.ToMicroseconds()); | 46 epoll_server_.AdvanceBy(delta.ToMicroseconds()); |
47 | 47 |
48 EXPECT_EQ(start.Add(delta), clock->Now()); | 48 EXPECT_EQ(start.Add(delta), clock->Now()); |
49 } | 49 } |
50 | 50 |
51 TEST_F(QuicEpollConnectionHelperTest, GetRandomGenerator) { | 51 TEST_F(QuicEpollConnectionHelperTest, GetRandomGenerator) { |
52 QuicRandom* random = helper_.GetRandomGenerator(); | 52 QuicRandom* random = helper_.GetRandomGenerator(); |
53 EXPECT_EQ(QuicRandom::GetInstance(), random); | 53 EXPECT_EQ(QuicRandom::GetInstance(), random); |
54 } | 54 } |
55 | 55 |
56 TEST_F(QuicEpollConnectionHelperTest, CreateAlarm) { | 56 // The boolean parameter denotes whether or not to use an arena. |
57 TestDelegate* delegate = new TestDelegate(); | 57 class QuicEpollConnectionHelperAlarmTest |
58 scoped_ptr<QuicAlarm> alarm(helper_.CreateAlarm(delegate)); | 58 : public QuicEpollConnectionHelperTest, |
| 59 public ::testing::WithParamInterface<bool> { |
| 60 protected: |
| 61 QuicConnectionArena* GetArenaParam() { |
| 62 return GetParam() ? &arena_ : nullptr; |
| 63 } |
| 64 |
| 65 private: |
| 66 QuicConnectionArena arena_; |
| 67 }; |
| 68 |
| 69 INSTANTIATE_TEST_CASE_P(QuicEpollConnectionHelperAlarmTest, |
| 70 QuicEpollConnectionHelperAlarmTest, |
| 71 ::testing::Bool()); |
| 72 |
| 73 TEST_P(QuicEpollConnectionHelperAlarmTest, CreateAlarm) { |
| 74 QuicArenaScopedPtr<TestDelegate> delegate = |
| 75 QuicArenaScopedPtr<TestDelegate>(new TestDelegate()); |
| 76 QuicArenaScopedPtr<QuicAlarm> alarm( |
| 77 helper_.CreateAlarm(std::move(delegate), GetArenaParam())); |
59 | 78 |
60 const QuicClock* clock = helper_.GetClock(); | 79 const QuicClock* clock = helper_.GetClock(); |
61 QuicTime start = clock->Now(); | 80 QuicTime start = clock->Now(); |
62 QuicTime::Delta delta = QuicTime::Delta::FromMicroseconds(1); | 81 QuicTime::Delta delta = QuicTime::Delta::FromMicroseconds(1); |
63 alarm->Set(start.Add(delta)); | 82 alarm->Set(start.Add(delta)); |
64 | 83 |
65 epoll_server_.AdvanceByAndWaitForEventsAndExecuteCallbacks( | 84 epoll_server_.AdvanceByAndWaitForEventsAndExecuteCallbacks( |
66 delta.ToMicroseconds()); | 85 delta.ToMicroseconds()); |
67 EXPECT_EQ(start.Add(delta), clock->Now()); | 86 EXPECT_EQ(start.Add(delta), clock->Now()); |
68 } | 87 } |
69 | 88 |
70 TEST_F(QuicEpollConnectionHelperTest, CreateAlarmAndCancel) { | 89 TEST_P(QuicEpollConnectionHelperAlarmTest, CreateAlarmAndCancel) { |
71 TestDelegate* delegate = new TestDelegate(); | 90 QuicArenaScopedPtr<TestDelegate> delegate = |
72 scoped_ptr<QuicAlarm> alarm(helper_.CreateAlarm(delegate)); | 91 QuicArenaScopedPtr<TestDelegate>(new TestDelegate()); |
| 92 TestDelegate* unowned_delegate = delegate.get(); |
| 93 QuicArenaScopedPtr<QuicAlarm> alarm( |
| 94 helper_.CreateAlarm(std::move(delegate), GetArenaParam())); |
73 | 95 |
74 const QuicClock* clock = helper_.GetClock(); | 96 const QuicClock* clock = helper_.GetClock(); |
75 QuicTime start = clock->Now(); | 97 QuicTime start = clock->Now(); |
76 QuicTime::Delta delta = QuicTime::Delta::FromMicroseconds(1); | 98 QuicTime::Delta delta = QuicTime::Delta::FromMicroseconds(1); |
77 alarm->Set(start.Add(delta)); | 99 alarm->Set(start.Add(delta)); |
78 alarm->Cancel(); | 100 alarm->Cancel(); |
79 | 101 |
80 epoll_server_.AdvanceByExactlyAndCallCallbacks(delta.ToMicroseconds()); | 102 epoll_server_.AdvanceByExactlyAndCallCallbacks(delta.ToMicroseconds()); |
81 EXPECT_EQ(start.Add(delta), clock->Now()); | 103 EXPECT_EQ(start.Add(delta), clock->Now()); |
82 EXPECT_FALSE(delegate->fired()); | 104 EXPECT_FALSE(unowned_delegate->fired()); |
83 } | 105 } |
84 | 106 |
85 TEST_F(QuicEpollConnectionHelperTest, CreateAlarmAndReset) { | 107 TEST_P(QuicEpollConnectionHelperAlarmTest, CreateAlarmAndReset) { |
86 TestDelegate* delegate = new TestDelegate(); | 108 QuicArenaScopedPtr<TestDelegate> delegate = |
87 scoped_ptr<QuicAlarm> alarm(helper_.CreateAlarm(delegate)); | 109 QuicArenaScopedPtr<TestDelegate>(new TestDelegate()); |
| 110 TestDelegate* unowned_delegate = delegate.get(); |
| 111 QuicArenaScopedPtr<QuicAlarm> alarm( |
| 112 helper_.CreateAlarm(std::move(delegate), GetArenaParam())); |
88 | 113 |
89 const QuicClock* clock = helper_.GetClock(); | 114 const QuicClock* clock = helper_.GetClock(); |
90 QuicTime start = clock->Now(); | 115 QuicTime start = clock->Now(); |
91 QuicTime::Delta delta = QuicTime::Delta::FromMicroseconds(1); | 116 QuicTime::Delta delta = QuicTime::Delta::FromMicroseconds(1); |
92 alarm->Set(clock->Now().Add(delta)); | 117 alarm->Set(clock->Now().Add(delta)); |
93 alarm->Cancel(); | 118 alarm->Cancel(); |
94 QuicTime::Delta new_delta = QuicTime::Delta::FromMicroseconds(3); | 119 QuicTime::Delta new_delta = QuicTime::Delta::FromMicroseconds(3); |
95 alarm->Set(clock->Now().Add(new_delta)); | 120 alarm->Set(clock->Now().Add(new_delta)); |
96 | 121 |
97 epoll_server_.AdvanceByExactlyAndCallCallbacks(delta.ToMicroseconds()); | 122 epoll_server_.AdvanceByExactlyAndCallCallbacks(delta.ToMicroseconds()); |
98 EXPECT_EQ(start.Add(delta), clock->Now()); | 123 EXPECT_EQ(start.Add(delta), clock->Now()); |
99 EXPECT_FALSE(delegate->fired()); | 124 EXPECT_FALSE(unowned_delegate->fired()); |
100 | 125 |
101 epoll_server_.AdvanceByExactlyAndCallCallbacks( | 126 epoll_server_.AdvanceByExactlyAndCallCallbacks( |
102 new_delta.Subtract(delta).ToMicroseconds()); | 127 new_delta.Subtract(delta).ToMicroseconds()); |
103 EXPECT_EQ(start.Add(new_delta), clock->Now()); | 128 EXPECT_EQ(start.Add(new_delta), clock->Now()); |
104 EXPECT_TRUE(delegate->fired()); | 129 EXPECT_TRUE(unowned_delegate->fired()); |
105 } | 130 } |
106 | 131 |
107 TEST_F(QuicEpollConnectionHelperTest, CreateAlarmAndUpdate) { | 132 TEST_P(QuicEpollConnectionHelperAlarmTest, CreateAlarmAndUpdate) { |
108 TestDelegate* delegate = new TestDelegate(); | 133 QuicArenaScopedPtr<TestDelegate> delegate = |
109 scoped_ptr<QuicAlarm> alarm(helper_.CreateAlarm(delegate)); | 134 QuicArenaScopedPtr<TestDelegate>(new TestDelegate()); |
| 135 TestDelegate* unowned_delegate = delegate.get(); |
| 136 QuicArenaScopedPtr<QuicAlarm> alarm( |
| 137 helper_.CreateAlarm(std::move(delegate), GetArenaParam())); |
110 | 138 |
111 const QuicClock* clock = helper_.GetClock(); | 139 const QuicClock* clock = helper_.GetClock(); |
112 QuicTime start = clock->Now(); | 140 QuicTime start = clock->Now(); |
113 QuicTime::Delta delta = QuicTime::Delta::FromMicroseconds(1); | 141 QuicTime::Delta delta = QuicTime::Delta::FromMicroseconds(1); |
114 alarm->Set(clock->Now().Add(delta)); | 142 alarm->Set(clock->Now().Add(delta)); |
115 QuicTime::Delta new_delta = QuicTime::Delta::FromMicroseconds(3); | 143 QuicTime::Delta new_delta = QuicTime::Delta::FromMicroseconds(3); |
116 alarm->Update(clock->Now().Add(new_delta), | 144 alarm->Update(clock->Now().Add(new_delta), |
117 QuicTime::Delta::FromMicroseconds(1)); | 145 QuicTime::Delta::FromMicroseconds(1)); |
118 | 146 |
119 epoll_server_.AdvanceByExactlyAndCallCallbacks(delta.ToMicroseconds()); | 147 epoll_server_.AdvanceByExactlyAndCallCallbacks(delta.ToMicroseconds()); |
120 EXPECT_EQ(start.Add(delta), clock->Now()); | 148 EXPECT_EQ(start.Add(delta), clock->Now()); |
121 EXPECT_FALSE(delegate->fired()); | 149 EXPECT_FALSE(unowned_delegate->fired()); |
122 | 150 |
123 // Move the alarm forward 1us and ensure it doesn't move forward. | 151 // Move the alarm forward 1us and ensure it doesn't move forward. |
124 alarm->Update(clock->Now().Add(new_delta), | 152 alarm->Update(clock->Now().Add(new_delta), |
125 QuicTime::Delta::FromMicroseconds(2)); | 153 QuicTime::Delta::FromMicroseconds(2)); |
126 | 154 |
127 epoll_server_.AdvanceByExactlyAndCallCallbacks( | 155 epoll_server_.AdvanceByExactlyAndCallCallbacks( |
128 new_delta.Subtract(delta).ToMicroseconds()); | 156 new_delta.Subtract(delta).ToMicroseconds()); |
129 EXPECT_EQ(start.Add(new_delta), clock->Now()); | 157 EXPECT_EQ(start.Add(new_delta), clock->Now()); |
130 EXPECT_TRUE(delegate->fired()); | 158 EXPECT_TRUE(unowned_delegate->fired()); |
131 | 159 |
132 // Set the alarm via an update call. | 160 // Set the alarm via an update call. |
133 new_delta = QuicTime::Delta::FromMicroseconds(5); | 161 new_delta = QuicTime::Delta::FromMicroseconds(5); |
134 alarm->Update(clock->Now().Add(new_delta), | 162 alarm->Update(clock->Now().Add(new_delta), |
135 QuicTime::Delta::FromMicroseconds(1)); | 163 QuicTime::Delta::FromMicroseconds(1)); |
136 EXPECT_TRUE(alarm->IsSet()); | 164 EXPECT_TRUE(alarm->IsSet()); |
137 | 165 |
138 // Update it with an uninitialized time and ensure it's cancelled. | 166 // Update it with an uninitialized time and ensure it's cancelled. |
139 alarm->Update(QuicTime::Zero(), QuicTime::Delta::FromMicroseconds(1)); | 167 alarm->Update(QuicTime::Zero(), QuicTime::Delta::FromMicroseconds(1)); |
140 EXPECT_FALSE(alarm->IsSet()); | 168 EXPECT_FALSE(alarm->IsSet()); |
141 } | 169 } |
142 | 170 |
143 } // namespace | 171 } // namespace |
144 } // namespace test | 172 } // namespace test |
145 } // namespace tools | 173 } // namespace tools |
146 } // namespace net | 174 } // namespace net |
OLD | NEW |