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 <string> | 5 #include <string> |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/callback.h" | 9 #include "base/callback.h" |
10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
110 TEST_F(MessageReaderTest, OneMessage_Delay) { | 110 TEST_F(MessageReaderTest, OneMessage_Delay) { |
111 base::Closure done_task; | 111 base::Closure done_task; |
112 | 112 |
113 AddMessage(kTestMessage1); | 113 AddMessage(kTestMessage1); |
114 | 114 |
115 EXPECT_CALL(callback_, OnMessage(_)) | 115 EXPECT_CALL(callback_, OnMessage(_)) |
116 .Times(1) | 116 .Times(1) |
117 .WillOnce(SaveArg<0>(&done_task)); | 117 .WillOnce(SaveArg<0>(&done_task)); |
118 | 118 |
119 InitReader(); | 119 InitReader(); |
120 message_loop_.RunAllPending(); | 120 message_loop_.RunUntilIdle(); |
121 | 121 |
122 Mock::VerifyAndClearExpectations(&callback_); | 122 Mock::VerifyAndClearExpectations(&callback_); |
123 Mock::VerifyAndClearExpectations(&socket_); | 123 Mock::VerifyAndClearExpectations(&socket_); |
124 | 124 |
125 EXPECT_TRUE(CompareResult(messages_[0], kTestMessage1)); | 125 EXPECT_TRUE(CompareResult(messages_[0], kTestMessage1)); |
126 | 126 |
127 // Verify that the reader starts reading again only after we've | 127 // Verify that the reader starts reading again only after we've |
128 // finished processing the previous message. | 128 // finished processing the previous message. |
129 EXPECT_FALSE(socket_.read_pending()); | 129 EXPECT_FALSE(socket_.read_pending()); |
130 | 130 |
131 done_task.Run(); | 131 done_task.Run(); |
132 | 132 |
133 EXPECT_TRUE(socket_.read_pending()); | 133 EXPECT_TRUE(socket_.read_pending()); |
134 } | 134 } |
135 | 135 |
136 // Receive one message and process it instantly. | 136 // Receive one message and process it instantly. |
137 TEST_F(MessageReaderTest, OneMessage_Instant) { | 137 TEST_F(MessageReaderTest, OneMessage_Instant) { |
138 AddMessage(kTestMessage1); | 138 AddMessage(kTestMessage1); |
139 | 139 |
140 EXPECT_CALL(callback_, OnMessage(_)) | 140 EXPECT_CALL(callback_, OnMessage(_)) |
141 .Times(1) | 141 .Times(1) |
142 .WillOnce(CallDoneTask()); | 142 .WillOnce(CallDoneTask()); |
143 | 143 |
144 InitReader(); | 144 InitReader(); |
145 message_loop_.RunAllPending(); | 145 message_loop_.RunUntilIdle(); |
146 | 146 |
147 EXPECT_TRUE(socket_.read_pending()); | 147 EXPECT_TRUE(socket_.read_pending()); |
148 EXPECT_EQ(1U, messages_.size()); | 148 EXPECT_EQ(1U, messages_.size()); |
149 } | 149 } |
150 | 150 |
151 // Receive two messages in one packet. | 151 // Receive two messages in one packet. |
152 TEST_F(MessageReaderTest, TwoMessages_Together) { | 152 TEST_F(MessageReaderTest, TwoMessages_Together) { |
153 base::Closure done_task1; | 153 base::Closure done_task1; |
154 base::Closure done_task2; | 154 base::Closure done_task2; |
155 | 155 |
156 AddMessage(kTestMessage1); | 156 AddMessage(kTestMessage1); |
157 AddMessage(kTestMessage2); | 157 AddMessage(kTestMessage2); |
158 | 158 |
159 EXPECT_CALL(callback_, OnMessage(_)) | 159 EXPECT_CALL(callback_, OnMessage(_)) |
160 .Times(2) | 160 .Times(2) |
161 .WillOnce(SaveArg<0>(&done_task1)) | 161 .WillOnce(SaveArg<0>(&done_task1)) |
162 .WillOnce(SaveArg<0>(&done_task2)); | 162 .WillOnce(SaveArg<0>(&done_task2)); |
163 | 163 |
164 InitReader(); | 164 InitReader(); |
165 message_loop_.RunAllPending(); | 165 message_loop_.RunUntilIdle(); |
166 | 166 |
167 Mock::VerifyAndClearExpectations(&callback_); | 167 Mock::VerifyAndClearExpectations(&callback_); |
168 Mock::VerifyAndClearExpectations(&socket_); | 168 Mock::VerifyAndClearExpectations(&socket_); |
169 | 169 |
170 EXPECT_TRUE(CompareResult(messages_[0], kTestMessage1)); | 170 EXPECT_TRUE(CompareResult(messages_[0], kTestMessage1)); |
171 EXPECT_TRUE(CompareResult(messages_[1], kTestMessage2)); | 171 EXPECT_TRUE(CompareResult(messages_[1], kTestMessage2)); |
172 | 172 |
173 // Verify that the reader starts reading again only after we've | 173 // Verify that the reader starts reading again only after we've |
174 // finished processing the previous message. | 174 // finished processing the previous message. |
175 EXPECT_FALSE(socket_.read_pending()); | 175 EXPECT_FALSE(socket_.read_pending()); |
176 | 176 |
177 done_task1.Run(); | 177 done_task1.Run(); |
178 message_loop_.RunAllPending(); | 178 message_loop_.RunUntilIdle(); |
179 | 179 |
180 EXPECT_FALSE(socket_.read_pending()); | 180 EXPECT_FALSE(socket_.read_pending()); |
181 | 181 |
182 done_task2.Run(); | 182 done_task2.Run(); |
183 message_loop_.RunAllPending(); | 183 message_loop_.RunUntilIdle(); |
184 | 184 |
185 EXPECT_TRUE(socket_.read_pending()); | 185 EXPECT_TRUE(socket_.read_pending()); |
186 } | 186 } |
187 | 187 |
188 // Receive two messages in one packet, and process the first one | 188 // Receive two messages in one packet, and process the first one |
189 // instantly. | 189 // instantly. |
190 TEST_F(MessageReaderTest, TwoMessages_Instant) { | 190 TEST_F(MessageReaderTest, TwoMessages_Instant) { |
191 base::Closure done_task2; | 191 base::Closure done_task2; |
192 | 192 |
193 AddMessage(kTestMessage1); | 193 AddMessage(kTestMessage1); |
194 AddMessage(kTestMessage2); | 194 AddMessage(kTestMessage2); |
195 | 195 |
196 EXPECT_CALL(callback_, OnMessage(_)) | 196 EXPECT_CALL(callback_, OnMessage(_)) |
197 .Times(2) | 197 .Times(2) |
198 .WillOnce(CallDoneTask()) | 198 .WillOnce(CallDoneTask()) |
199 .WillOnce(SaveArg<0>(&done_task2)); | 199 .WillOnce(SaveArg<0>(&done_task2)); |
200 | 200 |
201 InitReader(); | 201 InitReader(); |
202 message_loop_.RunAllPending(); | 202 message_loop_.RunUntilIdle(); |
203 | 203 |
204 Mock::VerifyAndClearExpectations(&callback_); | 204 Mock::VerifyAndClearExpectations(&callback_); |
205 Mock::VerifyAndClearExpectations(&socket_); | 205 Mock::VerifyAndClearExpectations(&socket_); |
206 | 206 |
207 EXPECT_TRUE(CompareResult(messages_[1], kTestMessage2)); | 207 EXPECT_TRUE(CompareResult(messages_[1], kTestMessage2)); |
208 | 208 |
209 // Verify that the reader starts reading again only after we've | 209 // Verify that the reader starts reading again only after we've |
210 // finished processing the second message. | 210 // finished processing the second message. |
211 EXPECT_FALSE(socket_.read_pending()); | 211 EXPECT_FALSE(socket_.read_pending()); |
212 | 212 |
213 done_task2.Run(); | 213 done_task2.Run(); |
214 | 214 |
215 EXPECT_TRUE(socket_.read_pending()); | 215 EXPECT_TRUE(socket_.read_pending()); |
216 } | 216 } |
217 | 217 |
218 // Receive two messages in one packet, and process both of them | 218 // Receive two messages in one packet, and process both of them |
219 // instantly. | 219 // instantly. |
220 TEST_F(MessageReaderTest, TwoMessages_Instant2) { | 220 TEST_F(MessageReaderTest, TwoMessages_Instant2) { |
221 AddMessage(kTestMessage1); | 221 AddMessage(kTestMessage1); |
222 AddMessage(kTestMessage2); | 222 AddMessage(kTestMessage2); |
223 | 223 |
224 EXPECT_CALL(callback_, OnMessage(_)) | 224 EXPECT_CALL(callback_, OnMessage(_)) |
225 .Times(2) | 225 .Times(2) |
226 .WillOnce(CallDoneTask()) | 226 .WillOnce(CallDoneTask()) |
227 .WillOnce(CallDoneTask()); | 227 .WillOnce(CallDoneTask()); |
228 | 228 |
229 InitReader(); | 229 InitReader(); |
230 message_loop_.RunAllPending(); | 230 message_loop_.RunUntilIdle(); |
231 | 231 |
232 EXPECT_TRUE(socket_.read_pending()); | 232 EXPECT_TRUE(socket_.read_pending()); |
233 } | 233 } |
234 | 234 |
235 // Receive two messages in separate packets. | 235 // Receive two messages in separate packets. |
236 TEST_F(MessageReaderTest, TwoMessages_Separately) { | 236 TEST_F(MessageReaderTest, TwoMessages_Separately) { |
237 base::Closure done_task; | 237 base::Closure done_task; |
238 | 238 |
239 AddMessage(kTestMessage1); | 239 AddMessage(kTestMessage1); |
240 | 240 |
241 EXPECT_CALL(callback_, OnMessage(_)) | 241 EXPECT_CALL(callback_, OnMessage(_)) |
242 .Times(1) | 242 .Times(1) |
243 .WillOnce(SaveArg<0>(&done_task)); | 243 .WillOnce(SaveArg<0>(&done_task)); |
244 | 244 |
245 InitReader(); | 245 InitReader(); |
246 message_loop_.RunAllPending(); | 246 message_loop_.RunUntilIdle(); |
247 | 247 |
248 Mock::VerifyAndClearExpectations(&callback_); | 248 Mock::VerifyAndClearExpectations(&callback_); |
249 Mock::VerifyAndClearExpectations(&socket_); | 249 Mock::VerifyAndClearExpectations(&socket_); |
250 | 250 |
251 EXPECT_TRUE(CompareResult(messages_[0], kTestMessage1)); | 251 EXPECT_TRUE(CompareResult(messages_[0], kTestMessage1)); |
252 | 252 |
253 // Verify that the reader starts reading again only after we've | 253 // Verify that the reader starts reading again only after we've |
254 // finished processing the previous message. | 254 // finished processing the previous message. |
255 EXPECT_FALSE(socket_.read_pending()); | 255 EXPECT_FALSE(socket_.read_pending()); |
256 | 256 |
257 done_task.Run(); | 257 done_task.Run(); |
258 message_loop_.RunAllPending(); | 258 message_loop_.RunUntilIdle(); |
259 | 259 |
260 EXPECT_TRUE(socket_.read_pending()); | 260 EXPECT_TRUE(socket_.read_pending()); |
261 | 261 |
262 // Write another message and verify that we receive it. | 262 // Write another message and verify that we receive it. |
263 EXPECT_CALL(callback_, OnMessage(_)) | 263 EXPECT_CALL(callback_, OnMessage(_)) |
264 .Times(1) | 264 .Times(1) |
265 .WillOnce(SaveArg<0>(&done_task)); | 265 .WillOnce(SaveArg<0>(&done_task)); |
266 AddMessage(kTestMessage2); | 266 AddMessage(kTestMessage2); |
267 message_loop_.RunAllPending(); | 267 message_loop_.RunUntilIdle(); |
268 | 268 |
269 EXPECT_TRUE(CompareResult(messages_[1], kTestMessage2)); | 269 EXPECT_TRUE(CompareResult(messages_[1], kTestMessage2)); |
270 | 270 |
271 // Verify that the reader starts reading again only after we've | 271 // Verify that the reader starts reading again only after we've |
272 // finished processing the previous message. | 272 // finished processing the previous message. |
273 EXPECT_FALSE(socket_.read_pending()); | 273 EXPECT_FALSE(socket_.read_pending()); |
274 | 274 |
275 done_task.Run(); | 275 done_task.Run(); |
276 | 276 |
277 EXPECT_TRUE(socket_.read_pending()); | 277 EXPECT_TRUE(socket_.read_pending()); |
(...skipping 15 matching lines...) Expand all Loading... |
293 // Verify that we the OnMessage callback is not reentered. | 293 // Verify that we the OnMessage callback is not reentered. |
294 TEST_F(MessageReaderTest, ReadFromCallback) { | 294 TEST_F(MessageReaderTest, ReadFromCallback) { |
295 AddMessage(kTestMessage1); | 295 AddMessage(kTestMessage1); |
296 | 296 |
297 EXPECT_CALL(callback_, OnMessage(_)) | 297 EXPECT_CALL(callback_, OnMessage(_)) |
298 .Times(2) | 298 .Times(2) |
299 .WillOnce(Invoke(this, &MessageReaderTest::AddSecondMessage)) | 299 .WillOnce(Invoke(this, &MessageReaderTest::AddSecondMessage)) |
300 .WillOnce(Invoke(this, &MessageReaderTest::OnSecondMessage)); | 300 .WillOnce(Invoke(this, &MessageReaderTest::OnSecondMessage)); |
301 | 301 |
302 InitReader(); | 302 InitReader(); |
303 message_loop_.RunAllPending(); | 303 message_loop_.RunUntilIdle(); |
304 | 304 |
305 EXPECT_TRUE(socket_.read_pending()); | 305 EXPECT_TRUE(socket_.read_pending()); |
306 } | 306 } |
307 | 307 |
308 // Verify that we stop getting callbacks after deleting MessageReader. | 308 // Verify that we stop getting callbacks after deleting MessageReader. |
309 TEST_F(MessageReaderTest, DeleteFromCallback) { | 309 TEST_F(MessageReaderTest, DeleteFromCallback) { |
310 base::Closure done_task1; | 310 base::Closure done_task1; |
311 base::Closure done_task2; | 311 base::Closure done_task2; |
312 | 312 |
313 AddMessage(kTestMessage1); | 313 AddMessage(kTestMessage1); |
314 AddMessage(kTestMessage2); | 314 AddMessage(kTestMessage2); |
315 | 315 |
316 // OnMessage() should never be called for the second message. | 316 // OnMessage() should never be called for the second message. |
317 EXPECT_CALL(callback_, OnMessage(_)) | 317 EXPECT_CALL(callback_, OnMessage(_)) |
318 .Times(1) | 318 .Times(1) |
319 .WillOnce(Invoke(this, &MessageReaderTest::DeleteReader)); | 319 .WillOnce(Invoke(this, &MessageReaderTest::DeleteReader)); |
320 | 320 |
321 InitReader(); | 321 InitReader(); |
322 message_loop_.RunAllPending(); | 322 message_loop_.RunUntilIdle(); |
323 } | 323 } |
324 | 324 |
325 } // namespace protocol | 325 } // namespace protocol |
326 } // namespace remoting | 326 } // namespace remoting |
OLD | NEW |