Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(138)

Side by Side Diff: content/child/shared_memory_data_consumer_handle_unittest.cc

Issue 1164493008: Implement WebDataConsumerHandle::Reader. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "content/child/shared_memory_data_consumer_handle.h" 5 #include "content/child/shared_memory_data_consumer_handle.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 100
101 void didGetReadable() override { operation_->ReadData(); } 101 void didGetReadable() override { operation_->ReadData(); }
102 102
103 private: 103 private:
104 ReadDataOperation* operation_; 104 ReadDataOperation* operation_;
105 }; 105 };
106 106
107 class ReadDataOperation final { 107 class ReadDataOperation final {
108 public: 108 public:
109 typedef WebDataConsumerHandle::Result Result; 109 typedef WebDataConsumerHandle::Result Result;
110 ReadDataOperation(scoped_ptr<WebDataConsumerHandle> handle, 110 ReadDataOperation(scoped_ptr<SharedMemoryDataConsumerHandle> handle,
111 base::MessageLoop* main_message_loop, 111 base::MessageLoop* main_message_loop,
112 const base::Closure& on_done) 112 const base::Closure& on_done)
113 : handle_(handle.Pass()), 113 : handle_(handle.Pass()),
114 main_message_loop_(main_message_loop), 114 main_message_loop_(main_message_loop),
115 on_done_(on_done) {} 115 on_done_(on_done) {}
116 116
117 const std::string& result() const { return result_; } 117 const std::string& result() const { return result_; }
118 118
119 void ReadData() { 119 void ReadData() {
120 if (!client_) { 120 if (!client_) {
121 client_.reset(new ClientImpl(this)); 121 client_.reset(new ClientImpl(this));
122 handle_->registerClient(client_.get()); 122 reader_ = handle_->obtainReaderImpl(client_.get());
123 } 123 }
124 124
125 Result rv = kOk; 125 Result rv = kOk;
126 size_t read_size = 0; 126 size_t read_size = 0;
127 127
128 while (true) { 128 while (true) {
129 char buffer[16]; 129 char buffer[16];
130 rv = handle_->read(&buffer, sizeof(buffer), kNone, &read_size); 130 rv = reader_->read(&buffer, sizeof(buffer), kNone, &read_size);
131 if (rv != kOk) 131 if (rv != kOk)
132 break; 132 break;
133 result_.insert(result_.size(), &buffer[0], read_size); 133 result_.insert(result_.size(), &buffer[0], read_size);
134 } 134 }
135 135
136 if (rv == kShouldWait) { 136 if (rv == kShouldWait) {
137 // Wait a while... 137 // Wait a while...
138 return; 138 return;
139 } 139 }
140 140
141 if (rv != kDone) { 141 if (rv != kDone) {
142 // Something is wrong. 142 // Something is wrong.
143 result_ = "error"; 143 result_ = "error";
144 } 144 }
145 145
146 // The operation is done. 146 // The operation is done.
147 reader_.reset();
147 main_message_loop_->PostTask(FROM_HERE, on_done_); 148 main_message_loop_->PostTask(FROM_HERE, on_done_);
148 } 149 }
149 150
150 private: 151 private:
151 scoped_ptr<WebDataConsumerHandle> handle_; 152 scoped_ptr<SharedMemoryDataConsumerHandle> handle_;
153 scoped_ptr<WebDataConsumerHandle::Reader> reader_;
152 scoped_ptr<WebDataConsumerHandle::Client> client_; 154 scoped_ptr<WebDataConsumerHandle::Client> client_;
153 base::MessageLoop* main_message_loop_; 155 base::MessageLoop* main_message_loop_;
154 base::Closure on_done_; 156 base::Closure on_done_;
155 std::string result_; 157 std::string result_;
156 }; 158 };
157 159
158 void SetUp() override { 160 void SetUp() override {
159 handle_.reset( 161 handle_.reset(
160 new SharedMemoryDataConsumerHandle(kApplyBackpressure, &writer_)); 162 new SharedMemoryDataConsumerHandle(kApplyBackpressure, &writer_));
161 } 163 }
162 164
163 StrictMock<MockClient> client_; 165 StrictMock<MockClient> client_;
164 scoped_ptr<WebDataConsumerHandle> handle_; 166 scoped_ptr<SharedMemoryDataConsumerHandle> handle_;
165 scoped_ptr<Writer> writer_; 167 scoped_ptr<Writer> writer_;
166 base::MessageLoop loop_; 168 base::MessageLoop loop_;
167 }; 169 };
168 170
169 class SharedMemoryDataConsumerHandleTest 171 class SharedMemoryDataConsumerHandleTest
170 : public ::testing::TestWithParam<BackpressureMode> { 172 : public ::testing::TestWithParam<BackpressureMode> {
171 protected: 173 protected:
172 void SetUp() override { 174 void SetUp() override {
173 handle_.reset(new SharedMemoryDataConsumerHandle(GetParam(), &writer_)); 175 handle_.reset(new SharedMemoryDataConsumerHandle(GetParam(), &writer_));
174 } 176 }
175 scoped_ptr<FixedReceivedData> NewFixedData(const char* s) { 177 scoped_ptr<FixedReceivedData> NewFixedData(const char* s) {
176 return make_scoped_ptr(new FixedReceivedData(s, strlen(s), strlen(s))); 178 return make_scoped_ptr(new FixedReceivedData(s, strlen(s), strlen(s)));
177 } 179 }
178 180
179 StrictMock<MockClient> client_; 181 StrictMock<MockClient> client_;
180 scoped_ptr<SharedMemoryDataConsumerHandle> handle_; 182 scoped_ptr<SharedMemoryDataConsumerHandle> handle_;
181 scoped_ptr<Writer> writer_; 183 scoped_ptr<Writer> writer_;
182 base::MessageLoop loop_; 184 base::MessageLoop loop_;
183 }; 185 };
184 186
185 TEST_P(SharedMemoryDataConsumerHandleTest, ReadFromEmpty) { 187 TEST_P(SharedMemoryDataConsumerHandleTest, ReadFromEmpty) {
186 char buffer[4]; 188 char buffer[4];
187 size_t read = 88; 189 size_t read = 88;
188 Result result = handle_->read(buffer, 4, kNone, &read); 190 auto reader = handle_->obtainReaderImpl(nullptr);
191 Result result = reader->read(buffer, 4, kNone, &read);
189 192
190 EXPECT_EQ(kShouldWait, result); 193 EXPECT_EQ(kShouldWait, result);
191 EXPECT_EQ(0u, read); 194 EXPECT_EQ(0u, read);
192 } 195 }
193 196
194 TEST_P(SharedMemoryDataConsumerHandleTest, AutoClose) { 197 TEST_P(SharedMemoryDataConsumerHandleTest, AutoClose) {
195 char buffer[4]; 198 char buffer[4];
196 size_t read = 88; 199 size_t read = 88;
197 200
198 writer_.reset(); 201 writer_.reset();
199 Result result = handle_->read(buffer, 4, kNone, &read); 202 auto reader = handle_->obtainReaderImpl(nullptr);
203 Result result = reader->read(buffer, 4, kNone, &read);
200 204
201 EXPECT_EQ(kDone, result); 205 EXPECT_EQ(kDone, result);
202 EXPECT_EQ(0u, read); 206 EXPECT_EQ(0u, read);
203 } 207 }
204 208
205 TEST_P(SharedMemoryDataConsumerHandleTest, ReadSimple) { 209 TEST_P(SharedMemoryDataConsumerHandleTest, ReadSimple) {
206 writer_->AddData(NewFixedData("hello")); 210 writer_->AddData(NewFixedData("hello"));
207 211
208 char buffer[4] = {}; 212 char buffer[4] = {};
209 size_t read = 88; 213 size_t read = 88;
210 Result result = handle_->read(buffer, 3, kNone, &read); 214 auto reader = handle_->obtainReaderImpl(nullptr);
215 Result result = reader->read(buffer, 3, kNone, &read);
211 216
212 EXPECT_EQ(kOk, result); 217 EXPECT_EQ(kOk, result);
213 EXPECT_EQ(3u, read); 218 EXPECT_EQ(3u, read);
214 EXPECT_STREQ("hel", buffer); 219 EXPECT_STREQ("hel", buffer);
215 220
216 result = handle_->read(buffer, 3, kNone, &read); 221 result = reader->read(buffer, 3, kNone, &read);
217 EXPECT_EQ(kOk, result); 222 EXPECT_EQ(kOk, result);
218 EXPECT_EQ(2u, read); 223 EXPECT_EQ(2u, read);
219 EXPECT_STREQ("lol", buffer); 224 EXPECT_STREQ("lol", buffer);
220 225
221 result = handle_->read(buffer, 3, kNone, &read); 226 result = reader->read(buffer, 3, kNone, &read);
222 EXPECT_EQ(kShouldWait, result); 227 EXPECT_EQ(kShouldWait, result);
223 EXPECT_EQ(0u, read); 228 EXPECT_EQ(0u, read);
224 229
225 writer_->Close(); 230 writer_->Close();
226 231
227 result = handle_->read(buffer, 3, kNone, &read); 232 result = reader->read(buffer, 3, kNone, &read);
228 EXPECT_EQ(kDone, result); 233 EXPECT_EQ(kDone, result);
229 EXPECT_EQ(0u, read); 234 EXPECT_EQ(0u, read);
230 } 235 }
236
237 TEST_P(SharedMemoryDataConsumerHandleTest, ReadAfterHandleIsGone) {
238 writer_->AddData(NewFixedData("hello"));
239
240 char buffer[8] = {};
241 size_t read = 88;
242 auto reader = handle_->obtainReaderImpl(nullptr);
243
244 handle_.reset();
245
246 Result result = reader->read(buffer, sizeof(buffer), kNone, &read);
247
248 EXPECT_EQ(kOk, result);
249 EXPECT_EQ(5u, read);
250 EXPECT_STREQ("hello", buffer);
251
252 result = reader->read(buffer, 3, kNone, &read);
253 EXPECT_EQ(kShouldWait, result);
254 EXPECT_EQ(0u, read);
255
256 writer_->Close();
257
258 result = reader->read(buffer, 3, kNone, &read);
259 EXPECT_EQ(kDone, result);
260 EXPECT_EQ(0u, read);
261 }
262
263 TEST_P(SharedMemoryDataConsumerHandleTest, ReobtainReaderImpl) {
264 writer_->AddData(NewFixedData("hello"));
265
266 char buffer[4] = {};
267 size_t read = 88;
268 auto reader = handle_->obtainReaderImpl(nullptr);
269 Result result = reader->read(buffer, 3, kNone, &read);
270
271 EXPECT_EQ(kOk, result);
272 EXPECT_EQ(3u, read);
273 EXPECT_STREQ("hel", buffer);
274
275 reader.reset();
276 reader = handle_->obtainReaderImpl(nullptr);
277
278 result = reader->read(buffer, 3, kNone, &read);
279 EXPECT_EQ(kOk, result);
280 EXPECT_EQ(2u, read);
281 EXPECT_STREQ("lol", buffer);
282
283 result = reader->read(buffer, 3, kNone, &read);
284 EXPECT_EQ(kShouldWait, result);
285 EXPECT_EQ(0u, read);
286
287 writer_->Close();
288
289 result = reader->read(buffer, 3, kNone, &read);
290 EXPECT_EQ(kDone, result);
291 EXPECT_EQ(0u, read);
292 }
231 293
232 TEST_P(SharedMemoryDataConsumerHandleTest, CloseBeforeReading) { 294 TEST_P(SharedMemoryDataConsumerHandleTest, CloseBeforeReading) {
233 writer_->AddData(NewFixedData("hello")); 295 writer_->AddData(NewFixedData("hello"));
234 writer_->Close(); 296 writer_->Close();
235 297
236 char buffer[20] = {}; 298 char buffer[20] = {};
237 size_t read = 88; 299 size_t read = 88;
238 Result result = handle_->read(buffer, sizeof(buffer), kNone, &read); 300 auto reader = handle_->obtainReaderImpl(nullptr);
301 Result result = reader->read(buffer, sizeof(buffer), kNone, &read);
239 302
240 EXPECT_EQ(kOk, result); 303 EXPECT_EQ(kOk, result);
241 EXPECT_EQ(5u, read); 304 EXPECT_EQ(5u, read);
242 EXPECT_STREQ("hello", buffer); 305 EXPECT_STREQ("hello", buffer);
243 306
244 result = handle_->read(buffer, sizeof(buffer), kNone, &read); 307 result = reader->read(buffer, sizeof(buffer), kNone, &read);
245 EXPECT_EQ(kDone, result); 308 EXPECT_EQ(kDone, result);
246 EXPECT_EQ(0u, read); 309 EXPECT_EQ(0u, read);
247 } 310 }
248 311
249 TEST_P(SharedMemoryDataConsumerHandleTest, AddMultipleData) { 312 TEST_P(SharedMemoryDataConsumerHandleTest, AddMultipleData) {
250 writer_->AddData(NewFixedData("Once ")); 313 writer_->AddData(NewFixedData("Once "));
251 writer_->AddData(NewFixedData("upon ")); 314 writer_->AddData(NewFixedData("upon "));
252 writer_->AddData(NewFixedData("a ")); 315 writer_->AddData(NewFixedData("a "));
253 writer_->AddData(NewFixedData("time ")); 316 writer_->AddData(NewFixedData("time "));
254 writer_->AddData(NewFixedData("there ")); 317 writer_->AddData(NewFixedData("there "));
255 writer_->AddData(NewFixedData("was ")); 318 writer_->AddData(NewFixedData("was "));
256 writer_->AddData(NewFixedData("a ")); 319 writer_->AddData(NewFixedData("a "));
257 writer_->Close(); 320 writer_->Close();
258 321
259 char buffer[20]; 322 char buffer[20];
260 size_t read; 323 size_t read;
261 Result result; 324 Result result;
262 325
326 auto reader = handle_->obtainReaderImpl(nullptr);
263 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); 327 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0);
264 result = handle_->read(buffer, 6, kNone, &read); 328 result = reader->read(buffer, 6, kNone, &read);
265 EXPECT_EQ(kOk, result); 329 EXPECT_EQ(kOk, result);
266 EXPECT_EQ(6u, read); 330 EXPECT_EQ(6u, read);
267 EXPECT_STREQ("Once u", buffer); 331 EXPECT_STREQ("Once u", buffer);
268 332
269 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); 333 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0);
270 result = handle_->read(buffer, 2, kNone, &read); 334 result = reader->read(buffer, 2, kNone, &read);
271 EXPECT_EQ(kOk, result); 335 EXPECT_EQ(kOk, result);
272 EXPECT_EQ(2u, read); 336 EXPECT_EQ(2u, read);
273 EXPECT_STREQ("po", buffer); 337 EXPECT_STREQ("po", buffer);
274 338
275 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); 339 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0);
276 result = handle_->read(buffer, 9, kNone, &read); 340 result = reader->read(buffer, 9, kNone, &read);
277 EXPECT_EQ(kOk, result); 341 EXPECT_EQ(kOk, result);
278 EXPECT_EQ(9u, read); 342 EXPECT_EQ(9u, read);
279 EXPECT_STREQ("n a time ", buffer); 343 EXPECT_STREQ("n a time ", buffer);
280 344
281 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); 345 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0);
282 result = handle_->read(buffer, 3, kNone, &read); 346 result = reader->read(buffer, 3, kNone, &read);
283 EXPECT_EQ(kOk, result); 347 EXPECT_EQ(kOk, result);
284 EXPECT_EQ(3u, read); 348 EXPECT_EQ(3u, read);
285 EXPECT_STREQ("the", buffer); 349 EXPECT_STREQ("the", buffer);
286 350
287 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); 351 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0);
288 result = handle_->read(buffer, 20, kNone, &read); 352 result = reader->read(buffer, 20, kNone, &read);
289 EXPECT_EQ(kOk, result); 353 EXPECT_EQ(kOk, result);
290 EXPECT_EQ(9u, read); 354 EXPECT_EQ(9u, read);
291 EXPECT_STREQ("re was a ", buffer); 355 EXPECT_STREQ("re was a ", buffer);
292 356
293 result = handle_->read(buffer, sizeof(buffer), kNone, &read); 357 result = reader->read(buffer, sizeof(buffer), kNone, &read);
294 EXPECT_EQ(kDone, result); 358 EXPECT_EQ(kDone, result);
295 EXPECT_EQ(0u, read); 359 EXPECT_EQ(0u, read);
296 } 360 }
297 361
298 TEST_P(SharedMemoryDataConsumerHandleTest, AddMultipleDataInteractively) { 362 TEST_P(SharedMemoryDataConsumerHandleTest, AddMultipleDataInteractively) {
299 writer_->AddData(NewFixedData("Once ")); 363 writer_->AddData(NewFixedData("Once "));
300 writer_->AddData(NewFixedData("upon ")); 364 writer_->AddData(NewFixedData("upon "));
301 365
302 char buffer[20]; 366 char buffer[20];
303 size_t read; 367 size_t read;
304 Result result; 368 Result result;
305 369
370 auto reader = handle_->obtainReaderImpl(nullptr);
306 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); 371 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0);
307 result = handle_->read(buffer, 6, kNone, &read); 372 result = reader->read(buffer, 6, kNone, &read);
308 EXPECT_EQ(kOk, result); 373 EXPECT_EQ(kOk, result);
309 EXPECT_EQ(6u, read); 374 EXPECT_EQ(6u, read);
310 EXPECT_STREQ("Once u", buffer); 375 EXPECT_STREQ("Once u", buffer);
311 376
312 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); 377 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0);
313 result = handle_->read(buffer, 2, kNone, &read); 378 result = reader->read(buffer, 2, kNone, &read);
314 EXPECT_EQ(kOk, result); 379 EXPECT_EQ(kOk, result);
315 EXPECT_EQ(2u, read); 380 EXPECT_EQ(2u, read);
316 EXPECT_STREQ("po", buffer); 381 EXPECT_STREQ("po", buffer);
317 382
318 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); 383 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0);
319 result = handle_->read(buffer, 9, kNone, &read); 384 result = reader->read(buffer, 9, kNone, &read);
320 EXPECT_EQ(kOk, result); 385 EXPECT_EQ(kOk, result);
321 EXPECT_EQ(2u, read); 386 EXPECT_EQ(2u, read);
322 EXPECT_STREQ("n ", buffer); 387 EXPECT_STREQ("n ", buffer);
323 388
324 writer_->AddData(NewFixedData("a ")); 389 writer_->AddData(NewFixedData("a "));
325 390
326 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); 391 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0);
327 result = handle_->read(buffer, 1, kNone, &read); 392 result = reader->read(buffer, 1, kNone, &read);
328 EXPECT_EQ(kOk, result); 393 EXPECT_EQ(kOk, result);
329 EXPECT_EQ(1u, read); 394 EXPECT_EQ(1u, read);
330 EXPECT_STREQ("a", buffer); 395 EXPECT_STREQ("a", buffer);
331 396
332 writer_->AddData(NewFixedData("time ")); 397 writer_->AddData(NewFixedData("time "));
333 writer_->AddData(NewFixedData("there ")); 398 writer_->AddData(NewFixedData("there "));
334 writer_->AddData(NewFixedData("was ")); 399 writer_->AddData(NewFixedData("was "));
335 writer_->AddData(NewFixedData("a ")); 400 writer_->AddData(NewFixedData("a "));
336 writer_->Close(); 401 writer_->Close();
337 402
338 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); 403 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0);
339 result = handle_->read(buffer, 9, kNone, &read); 404 result = reader->read(buffer, 9, kNone, &read);
340 EXPECT_EQ(kOk, result); 405 EXPECT_EQ(kOk, result);
341 EXPECT_EQ(9u, read); 406 EXPECT_EQ(9u, read);
342 EXPECT_STREQ(" time the", buffer); 407 EXPECT_STREQ(" time the", buffer);
343 408
344 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0); 409 std::fill(&buffer[0], &buffer[arraysize(buffer)], 0);
345 result = handle_->read(buffer, 20, kNone, &read); 410 result = reader->read(buffer, 20, kNone, &read);
346 EXPECT_EQ(kOk, result); 411 EXPECT_EQ(kOk, result);
347 EXPECT_EQ(9u, read); 412 EXPECT_EQ(9u, read);
348 EXPECT_STREQ("re was a ", buffer); 413 EXPECT_STREQ("re was a ", buffer);
349 414
350 result = handle_->read(buffer, sizeof(buffer), kNone, &read); 415 result = reader->read(buffer, sizeof(buffer), kNone, &read);
351 EXPECT_EQ(kDone, result); 416 EXPECT_EQ(kDone, result);
352 EXPECT_EQ(0u, read); 417 EXPECT_EQ(0u, read);
353 } 418 }
354 419
355 TEST_P(SharedMemoryDataConsumerHandleTest, RegisterClient) { 420 TEST_P(SharedMemoryDataConsumerHandleTest, RegisterClient) {
356 Checkpoint checkpoint; 421 Checkpoint checkpoint;
357 422
358 InSequence s; 423 InSequence s;
359 EXPECT_CALL(checkpoint, Call(0)); 424 EXPECT_CALL(checkpoint, Call(0));
360 EXPECT_CALL(checkpoint, Call(1)); 425 EXPECT_CALL(checkpoint, Call(1));
361 EXPECT_CALL(client_, didGetReadable()); 426 EXPECT_CALL(client_, didGetReadable());
362 EXPECT_CALL(checkpoint, Call(2)); 427 EXPECT_CALL(checkpoint, Call(2));
363 428
364 checkpoint.Call(0); 429 checkpoint.Call(0);
365 handle_->registerClient(&client_); 430 auto reader = handle_->obtainReaderImpl(&client_);
366 checkpoint.Call(1); 431 checkpoint.Call(1);
367 writer_->Close(); 432 writer_->Close();
368 checkpoint.Call(2); 433 checkpoint.Call(2);
369 } 434 }
370 435
371 TEST_P(SharedMemoryDataConsumerHandleTest, RegisterClientWhenDataExists) { 436 TEST_P(SharedMemoryDataConsumerHandleTest, RegisterClientWhenDataExists) {
372 Checkpoint checkpoint; 437 Checkpoint checkpoint;
373 438
374 InSequence s; 439 InSequence s;
375 EXPECT_CALL(checkpoint, Call(0)); 440 EXPECT_CALL(checkpoint, Call(0));
376 EXPECT_CALL(checkpoint, Call(1)); 441 EXPECT_CALL(checkpoint, Call(1));
377 EXPECT_CALL(client_, didGetReadable());
378 EXPECT_CALL(checkpoint, Call(2)); 442 EXPECT_CALL(checkpoint, Call(2));
hiroshige 2015/06/12 10:12:09 It would be better to test that didGetReadable() i
yhirano 2015/06/15 10:23:22 Done.
379 443
380 checkpoint.Call(0); 444 checkpoint.Call(0);
381 writer_->AddData(NewFixedData("Once ")); 445 writer_->AddData(NewFixedData("Once "));
382 checkpoint.Call(1); 446 checkpoint.Call(1);
383 handle_->registerClient(&client_); 447 auto reader = handle_->obtainReaderImpl(&client_);
384 checkpoint.Call(2); 448 checkpoint.Call(2);
385 } 449 }
386 450
387 TEST_P(SharedMemoryDataConsumerHandleTest, AddDataWhenClientIsRegistered) { 451 TEST_P(SharedMemoryDataConsumerHandleTest, AddDataWhenClientIsRegistered) {
388 Checkpoint checkpoint; 452 Checkpoint checkpoint;
389 char buffer[20]; 453 char buffer[20];
390 Result result; 454 Result result;
391 size_t size; 455 size_t size;
392 456
393 InSequence s; 457 InSequence s;
394 EXPECT_CALL(checkpoint, Call(0)); 458 EXPECT_CALL(checkpoint, Call(0));
395 EXPECT_CALL(checkpoint, Call(1)); 459 EXPECT_CALL(checkpoint, Call(1));
396 EXPECT_CALL(client_, didGetReadable()); 460 EXPECT_CALL(client_, didGetReadable());
397 EXPECT_CALL(checkpoint, Call(2)); 461 EXPECT_CALL(checkpoint, Call(2));
398 EXPECT_CALL(checkpoint, Call(3)); 462 EXPECT_CALL(checkpoint, Call(3));
399 EXPECT_CALL(checkpoint, Call(4)); 463 EXPECT_CALL(checkpoint, Call(4));
400 EXPECT_CALL(client_, didGetReadable()); 464 EXPECT_CALL(client_, didGetReadable());
401 EXPECT_CALL(checkpoint, Call(5)); 465 EXPECT_CALL(checkpoint, Call(5));
402 466
403 checkpoint.Call(0); 467 checkpoint.Call(0);
404 handle_->registerClient(&client_); 468 auto reader = handle_->obtainReaderImpl(&client_);
405 checkpoint.Call(1); 469 checkpoint.Call(1);
406 writer_->AddData(NewFixedData("Once ")); 470 writer_->AddData(NewFixedData("Once "));
407 checkpoint.Call(2); 471 checkpoint.Call(2);
408 writer_->AddData(NewFixedData("upon ")); 472 writer_->AddData(NewFixedData("upon "));
409 checkpoint.Call(3); 473 checkpoint.Call(3);
410 result = handle_->read(buffer, sizeof(buffer), kNone, &size); 474 result = reader->read(buffer, sizeof(buffer), kNone, &size);
411 EXPECT_EQ(kOk, result); 475 EXPECT_EQ(kOk, result);
412 EXPECT_EQ(10u, size); 476 EXPECT_EQ(10u, size);
413 checkpoint.Call(4); 477 checkpoint.Call(4);
414 writer_->AddData(NewFixedData("a ")); 478 writer_->AddData(NewFixedData("a "));
415 checkpoint.Call(5); 479 checkpoint.Call(5);
416 } 480 }
417 481
418 TEST_P(SharedMemoryDataConsumerHandleTest, CloseWithClientAndData) { 482 TEST_P(SharedMemoryDataConsumerHandleTest, CloseWithClientAndData) {
419 Checkpoint checkpoint; 483 Checkpoint checkpoint;
420 484
421 InSequence s; 485 InSequence s;
422 EXPECT_CALL(checkpoint, Call(0)); 486 EXPECT_CALL(checkpoint, Call(0));
423 EXPECT_CALL(checkpoint, Call(1)); 487 EXPECT_CALL(checkpoint, Call(1));
424 EXPECT_CALL(client_, didGetReadable()); 488 EXPECT_CALL(client_, didGetReadable());
425 EXPECT_CALL(checkpoint, Call(2)); 489 EXPECT_CALL(checkpoint, Call(2));
426 EXPECT_CALL(checkpoint, Call(3)); 490 EXPECT_CALL(checkpoint, Call(3));
427 491
428 checkpoint.Call(0); 492 checkpoint.Call(0);
429 handle_->registerClient(&client_); 493 auto reader = handle_->obtainReaderImpl(&client_);
430 checkpoint.Call(1); 494 checkpoint.Call(1);
431 writer_->AddData(NewFixedData("Once ")); 495 writer_->AddData(NewFixedData("Once "));
432 checkpoint.Call(2); 496 checkpoint.Call(2);
433 writer_->Close(); 497 writer_->Close();
434 checkpoint.Call(3); 498 checkpoint.Call(3);
435 } 499 }
436 500
437 TEST_P(SharedMemoryDataConsumerHandleTest, UnregisterClient) { 501 TEST_P(SharedMemoryDataConsumerHandleTest, ReleaseReader) {
438 Checkpoint checkpoint; 502 Checkpoint checkpoint;
439 503
440 InSequence s; 504 InSequence s;
441 EXPECT_CALL(checkpoint, Call(0)); 505 EXPECT_CALL(checkpoint, Call(0));
442 EXPECT_CALL(checkpoint, Call(1)); 506 EXPECT_CALL(checkpoint, Call(1));
443 EXPECT_CALL(checkpoint, Call(2)); 507 EXPECT_CALL(checkpoint, Call(2));
444 508
445 checkpoint.Call(0); 509 checkpoint.Call(0);
446 handle_->registerClient(&client_); 510 auto reader = handle_->obtainReaderImpl(&client_);
447 checkpoint.Call(1); 511 checkpoint.Call(1);
448 handle_->unregisterClient(); 512 reader.reset();
449 writer_->AddData(NewFixedData("Once ")); 513 writer_->AddData(NewFixedData("Once "));
450 checkpoint.Call(2); 514 checkpoint.Call(2);
451 } 515 }
452 516
453 TEST_P(SharedMemoryDataConsumerHandleTest, TwoPhaseReadShouldWait) { 517 TEST_P(SharedMemoryDataConsumerHandleTest, TwoPhaseReadShouldWait) {
454 Result result; 518 Result result;
455 const void* buffer = &result; 519 const void* buffer = &result;
456 size_t size = 99; 520 size_t size = 99;
457 521
458 result = handle_->beginRead(&buffer, kNone, &size); 522 auto reader = handle_->obtainReaderImpl(nullptr);
523 result = reader->beginRead(&buffer, kNone, &size);
459 EXPECT_EQ(kShouldWait, result); 524 EXPECT_EQ(kShouldWait, result);
460 EXPECT_EQ(nullptr, buffer); 525 EXPECT_EQ(nullptr, buffer);
461 EXPECT_EQ(0u, size); 526 EXPECT_EQ(0u, size);
462 } 527 }
463 528
464 TEST_P(SharedMemoryDataConsumerHandleTest, TwoPhaseReadSimple) { 529 TEST_P(SharedMemoryDataConsumerHandleTest, TwoPhaseReadSimple) {
465 writer_->AddData(NewFixedData("Once ")); 530 writer_->AddData(NewFixedData("Once "));
466 531
467 Result result; 532 Result result;
468 const void* buffer = &result; 533 const void* buffer = &result;
469 size_t size = 99; 534 size_t size = 99;
470 535
471 result = handle_->beginRead(&buffer, kNone, &size); 536 auto reader = handle_->obtainReaderImpl(nullptr);
537 result = reader->beginRead(&buffer, kNone, &size);
472 EXPECT_EQ(kOk, result); 538 EXPECT_EQ(kOk, result);
473 EXPECT_EQ(5u, size); 539 EXPECT_EQ(5u, size);
474 EXPECT_EQ("Once ", ToString(buffer, 5)); 540 EXPECT_EQ("Once ", ToString(buffer, 5));
475 541
476 handle_->endRead(1); 542 reader->endRead(1);
477 543
478 result = handle_->beginRead(&buffer, kNone, &size); 544 result = reader->beginRead(&buffer, kNone, &size);
479 EXPECT_EQ(kOk, result); 545 EXPECT_EQ(kOk, result);
480 EXPECT_EQ(4u, size); 546 EXPECT_EQ(4u, size);
481 EXPECT_EQ("nce ", ToString(buffer, 4)); 547 EXPECT_EQ("nce ", ToString(buffer, 4));
482 548
483 handle_->endRead(4); 549 reader->endRead(4);
484 550
485 result = handle_->beginRead(&buffer, kNone, &size); 551 result = reader->beginRead(&buffer, kNone, &size);
486 EXPECT_EQ(kShouldWait, result); 552 EXPECT_EQ(kShouldWait, result);
487 EXPECT_EQ(0u, size); 553 EXPECT_EQ(0u, size);
488 EXPECT_EQ(nullptr, buffer); 554 EXPECT_EQ(nullptr, buffer);
489 555
490 writer_->Close(); 556 writer_->Close();
491 557
492 result = handle_->beginRead(&buffer, kNone, &size); 558 result = reader->beginRead(&buffer, kNone, &size);
493 EXPECT_EQ(kDone, result); 559 EXPECT_EQ(kDone, result);
494 EXPECT_EQ(0u, size); 560 EXPECT_EQ(0u, size);
495 EXPECT_EQ(nullptr, buffer); 561 EXPECT_EQ(nullptr, buffer);
496 } 562 }
497 563
498 TEST_P(SharedMemoryDataConsumerHandleTest, TwoPhaseReadWithMultipleData) { 564 TEST_P(SharedMemoryDataConsumerHandleTest, TwoPhaseReadWithMultipleData) {
499 writer_->AddData(NewFixedData("Once ")); 565 writer_->AddData(NewFixedData("Once "));
500 writer_->AddData(NewFixedData("upon ")); 566 writer_->AddData(NewFixedData("upon "));
501 567
502 Result result; 568 Result result;
503 const void* buffer = &result; 569 const void* buffer = &result;
504 size_t size = 99; 570 size_t size = 99;
505 571
506 result = handle_->beginRead(&buffer, kNone, &size); 572 auto reader = handle_->obtainReaderImpl(nullptr);
573 result = reader->beginRead(&buffer, kNone, &size);
507 EXPECT_EQ(kOk, result); 574 EXPECT_EQ(kOk, result);
508 EXPECT_EQ(5u, size); 575 EXPECT_EQ(5u, size);
509 EXPECT_EQ("Once ", ToString(buffer, 5)); 576 EXPECT_EQ("Once ", ToString(buffer, 5));
510 577
511 handle_->endRead(1); 578 reader->endRead(1);
512 579
513 result = handle_->beginRead(&buffer, kNone, &size); 580 result = reader->beginRead(&buffer, kNone, &size);
514 EXPECT_EQ(kOk, result); 581 EXPECT_EQ(kOk, result);
515 EXPECT_EQ(4u, size); 582 EXPECT_EQ(4u, size);
516 EXPECT_EQ("nce ", ToString(buffer, 4)); 583 EXPECT_EQ("nce ", ToString(buffer, 4));
517 584
518 handle_->endRead(4); 585 reader->endRead(4);
519 586
520 result = handle_->beginRead(&buffer, kNone, &size); 587 result = reader->beginRead(&buffer, kNone, &size);
521 EXPECT_EQ(kOk, result); 588 EXPECT_EQ(kOk, result);
522 EXPECT_EQ(5u, size); 589 EXPECT_EQ(5u, size);
523 EXPECT_EQ("upon ", ToString(buffer, 5)); 590 EXPECT_EQ("upon ", ToString(buffer, 5));
524 591
525 handle_->endRead(5); 592 reader->endRead(5);
526 593
527 result = handle_->beginRead(&buffer, kNone, &size); 594 result = reader->beginRead(&buffer, kNone, &size);
528 EXPECT_EQ(kShouldWait, result); 595 EXPECT_EQ(kShouldWait, result);
529 EXPECT_EQ(0u, size); 596 EXPECT_EQ(0u, size);
530 EXPECT_EQ(nullptr, buffer); 597 EXPECT_EQ(nullptr, buffer);
531 598
532 writer_->Close(); 599 writer_->Close();
533 600
534 result = handle_->beginRead(&buffer, kNone, &size); 601 result = reader->beginRead(&buffer, kNone, &size);
535 EXPECT_EQ(kDone, result); 602 EXPECT_EQ(kDone, result);
536 EXPECT_EQ(0u, size); 603 EXPECT_EQ(0u, size);
537 EXPECT_EQ(nullptr, buffer); 604 EXPECT_EQ(nullptr, buffer);
538 } 605 }
539 606
540 TEST(SharedMemoryDataConsumerHandleBackpressureTest, Read) { 607 TEST(SharedMemoryDataConsumerHandleBackpressureTest, Read) {
541 base::MessageLoop loop; 608 base::MessageLoop loop;
542 char buffer[20]; 609 char buffer[20];
543 Result result; 610 Result result;
544 size_t size; 611 size_t size;
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
685 logger->log()); 752 logger->log());
686 } 753 }
687 754
688 INSTANTIATE_TEST_CASE_P(SharedMemoryDataConsumerHandleTest, 755 INSTANTIATE_TEST_CASE_P(SharedMemoryDataConsumerHandleTest,
689 SharedMemoryDataConsumerHandleTest, 756 SharedMemoryDataConsumerHandleTest,
690 ::testing::Values(kApplyBackpressure, 757 ::testing::Values(kApplyBackpressure,
691 kDoNotApplyBackpressure)); 758 kDoNotApplyBackpressure));
692 } // namespace 759 } // namespace
693 760
694 } // namespace content 761 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698