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

Side by Side Diff: chrome/browser/media_gallery/media_device_notifications_linux_unittest.cc

Issue 10781014: Isolated FS for media devices. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix shared_build compile error. Created 8 years, 4 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 | Annotate | Revision Log
OLDNEW
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 // MediaDeviceNotificationsLinux unit tests. 5 // MediaDeviceNotificationsLinux unit tests.
6 6
7 #include "chrome/browser/media_gallery/media_device_notifications_linux.h" 7 #include "chrome/browser/media_gallery/media_device_notifications_linux.h"
8 8
9 #include <mntent.h> 9 #include <mntent.h>
10 #include <stdio.h> 10 #include <stdio.h>
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 // Only |kDevice2| should be attached, since |kDevice1| has a bad path. 240 // Only |kDevice2| should be attached, since |kDevice1| has a bad path.
241 EXPECT_CALL(observer(), 241 EXPECT_CALL(observer(),
242 OnMediaDeviceAttached(kDeviceId, 242 OnMediaDeviceAttached(kDeviceId,
243 ASCIIToUTF16(kDevice2), 243 ASCIIToUTF16(kDevice2),
244 base::SystemMonitor::TYPE_PATH, 244 base::SystemMonitor::TYPE_PATH,
245 test_path.value())) 245 test_path.value()))
246 .InSequence(mock_sequence); 246 .InSequence(mock_sequence);
247 AppendToMtabAndRunLoop(test_data, arraysize(test_data)); 247 AppendToMtabAndRunLoop(test_data, arraysize(test_data));
248 248
249 // |kDevice2| should be detached here. 249 // |kDevice2| should be detached here.
250 EXPECT_CALL(observer(), OnMediaDeviceDetached(kDeviceId)) 250 EXPECT_CALL(observer(), OnMediaDeviceDetached(
251 .InSequence(mock_sequence); 251 kDeviceId, test_path.value())).InSequence(mock_sequence);
252 WriteEmptyMtabAndRunLoop(); 252 WriteEmptyMtabAndRunLoop();
253 } 253 }
254 254
255 // Only mount points with DCIM directories are recognized. 255 // Only mount points with DCIM directories are recognized.
256 TEST_F(MediaDeviceNotificationsLinuxTest, DCIM) { 256 TEST_F(MediaDeviceNotificationsLinuxTest, DCIM) {
257 testing::Sequence mock_sequence; 257 testing::Sequence mock_sequence;
258 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); 258 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA);
259 ASSERT_FALSE(test_path_a.empty()); 259 ASSERT_FALSE(test_path_a.empty());
260 MtabTestData test_data1[] = { 260 MtabTestData test_data1[] = {
261 MtabTestData(kDevice1, test_path_a.value(), kValidFS), 261 MtabTestData(kDevice1, test_path_a.value(), kValidFS),
(...skipping 10 matching lines...) Expand all
272 272
273 // This should do nothing, since |kMountPointB| does not have a DCIM dir. 273 // This should do nothing, since |kMountPointB| does not have a DCIM dir.
274 FilePath test_path_b = CreateMountPointWithoutDCIMDir(kMountPointB); 274 FilePath test_path_b = CreateMountPointWithoutDCIMDir(kMountPointB);
275 ASSERT_FALSE(test_path_b.empty()); 275 ASSERT_FALSE(test_path_b.empty());
276 MtabTestData test_data2[] = { 276 MtabTestData test_data2[] = {
277 MtabTestData(kDevice2, test_path_b.value(), kValidFS), 277 MtabTestData(kDevice2, test_path_b.value(), kValidFS),
278 }; 278 };
279 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2)); 279 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2));
280 280
281 // |kDevice1| should be detached as expected. 281 // |kDevice1| should be detached as expected.
282 EXPECT_CALL(observer(), OnMediaDeviceDetached(kDeviceId)) 282 EXPECT_CALL(observer(), OnMediaDeviceDetached(
283 .InSequence(mock_sequence); 283 kDeviceId, test_path_a.value())).InSequence(mock_sequence);
284 WriteEmptyMtabAndRunLoop(); 284 WriteEmptyMtabAndRunLoop();
285 } 285 }
286 286
287 // More complicated test case with multiple devices on multiple mount points. 287 // More complicated test case with multiple devices on multiple mount points.
288 TEST_F(MediaDeviceNotificationsLinuxTest, MultiDevicesMultiMountPoints) { 288 TEST_F(MediaDeviceNotificationsLinuxTest, MultiDevicesMultiMountPoints) {
289 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); 289 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA);
290 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB); 290 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB);
291 ASSERT_FALSE(test_path_a.empty()); 291 ASSERT_FALSE(test_path_a.empty());
292 ASSERT_FALSE(test_path_b.empty()); 292 ASSERT_FALSE(test_path_b.empty());
293 293
294 // Attach two devices. 294 // Attach two devices.
295 // kDevice1 -> kMountPointA 295 // kDevice1 -> kMountPointA
296 // kDevice2 -> kMountPointB 296 // kDevice2 -> kMountPointB
297 MtabTestData test_data1[] = { 297 MtabTestData test_data1[] = {
298 MtabTestData(kDevice1, test_path_a.value(), kValidFS), 298 MtabTestData(kDevice1, test_path_a.value(), kValidFS),
299 MtabTestData(kDevice2, test_path_b.value(), kValidFS), 299 MtabTestData(kDevice2, test_path_b.value(), kValidFS),
300 }; 300 };
301 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(2); 301 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(2);
302 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0); 302 EXPECT_CALL(observer(), OnMediaDeviceDetached(_, _)).Times(0);
303 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1)); 303 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1));
304 304
305 // Attach |kDevice1| to |kMountPointB|. 305 // Attach |kDevice1| to |kMountPointB|.
306 // |kDevice2| is inaccessible, so it is detached. |kDevice1| has been 306 // |kDevice2| is inaccessible, so it is detached. |kDevice1| has been
307 // re-attached at |kMountPointB|, so it is 'detached' from kMountPointA. 307 // re-attached at |kMountPointB|, so it is 'detached' from kMountPointA.
308 // kDevice1 -> kMountPointA 308 // kDevice1 -> kMountPointA
309 // kDevice2 -> kMountPointB 309 // kDevice2 -> kMountPointB
310 // kDevice1 -> kMountPointB 310 // kDevice1 -> kMountPointB
311 MtabTestData test_data2[] = { 311 MtabTestData test_data2[] = {
312 MtabTestData(kDevice1, test_path_b.value(), kValidFS), 312 MtabTestData(kDevice1, test_path_b.value(), kValidFS),
313 }; 313 };
314 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(1); 314 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(1);
315 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(2); 315 EXPECT_CALL(observer(), OnMediaDeviceDetached(_, _)).Times(2);
316 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2)); 316 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2));
317 317
318 // Attach |kDevice2| to |kMountPointA|. 318 // Attach |kDevice2| to |kMountPointA|.
319 // kDevice1 -> kMountPointA 319 // kDevice1 -> kMountPointA
320 // kDevice2 -> kMountPointB 320 // kDevice2 -> kMountPointB
321 // kDevice1 -> kMountPointB 321 // kDevice1 -> kMountPointB
322 // kDevice2 -> kMountPointA 322 // kDevice2 -> kMountPointA
323 MtabTestData test_data3[] = { 323 MtabTestData test_data3[] = {
324 MtabTestData(kDevice2, test_path_a.value(), kValidFS), 324 MtabTestData(kDevice2, test_path_a.value(), kValidFS),
325 }; 325 };
326 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(1); 326 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(1);
327 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0); 327 EXPECT_CALL(observer(), OnMediaDeviceDetached(_, _)).Times(0);
328 AppendToMtabAndRunLoop(test_data3, arraysize(test_data3)); 328 AppendToMtabAndRunLoop(test_data3, arraysize(test_data3));
329 329
330 // Detach |kDevice2| from |kMountPointA|. 330 // Detach |kDevice2| from |kMountPointA|.
331 // kDevice1 -> kMountPointA 331 // kDevice1 -> kMountPointA
332 // kDevice2 -> kMountPointB 332 // kDevice2 -> kMountPointB
333 // kDevice1 -> kMountPointB 333 // kDevice1 -> kMountPointB
334 MtabTestData test_data4[] = { 334 MtabTestData test_data4[] = {
335 MtabTestData(kDevice1, test_path_a.value(), kValidFS), 335 MtabTestData(kDevice1, test_path_a.value(), kValidFS),
336 MtabTestData(kDevice2, test_path_b.value(), kValidFS), 336 MtabTestData(kDevice2, test_path_b.value(), kValidFS),
337 MtabTestData(kDevice1, test_path_b.value(), kValidFS), 337 MtabTestData(kDevice1, test_path_b.value(), kValidFS),
338 }; 338 };
339 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(0); 339 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(0);
340 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(1); 340 EXPECT_CALL(observer(), OnMediaDeviceDetached(_, _)).Times(1);
341 OverwriteMtabAndRunLoop(test_data4, arraysize(test_data4)); 341 OverwriteMtabAndRunLoop(test_data4, arraysize(test_data4));
342 342
343 // Detach |kDevice1| from |kMountPointB|. 343 // Detach |kDevice1| from |kMountPointB|.
344 // kDevice1 -> kMountPointA 344 // kDevice1 -> kMountPointA
345 // kDevice2 -> kMountPointB 345 // kDevice2 -> kMountPointB
346 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(2); 346 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(2);
347 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(1); 347 EXPECT_CALL(observer(), OnMediaDeviceDetached(_, _)).Times(1);
348 OverwriteMtabAndRunLoop(test_data1, arraysize(test_data1)); 348 OverwriteMtabAndRunLoop(test_data1, arraysize(test_data1));
349 349
350 // Detach all devices. 350 // Detach all devices.
351 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(0); 351 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(0);
352 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(2); 352 EXPECT_CALL(observer(), OnMediaDeviceDetached(_, _)).Times(2);
353 WriteEmptyMtabAndRunLoop(); 353 WriteEmptyMtabAndRunLoop();
354 } 354 }
355 355
356 // More complicated test case with multiple devices on one mount point. 356 // More complicated test case with multiple devices on one mount point.
357 TEST_F(MediaDeviceNotificationsLinuxTest, MultiDevicesOneMountPoint) { 357 TEST_F(MediaDeviceNotificationsLinuxTest, MultiDevicesOneMountPoint) {
358 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); 358 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA);
359 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB); 359 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB);
360 ASSERT_FALSE(test_path_a.empty()); 360 ASSERT_FALSE(test_path_a.empty());
361 ASSERT_FALSE(test_path_b.empty()); 361 ASSERT_FALSE(test_path_b.empty());
362 const std::string kDeviceId0 = "0"; 362 const std::string kDeviceId0 = "0";
363 const std::string kDeviceId1 = "1"; 363 const std::string kDeviceId1 = "1";
364 364
365 // |kDevice1| is most recently mounted at |kMountPointB|. 365 // |kDevice1| is most recently mounted at |kMountPointB|.
366 // kDevice1 -> kMountPointA 366 // kDevice1 -> kMountPointA
367 // kDevice2 -> kMountPointB 367 // kDevice2 -> kMountPointB
368 // kDevice1 -> kMountPointB 368 // kDevice1 -> kMountPointB
369 MtabTestData test_data1[] = { 369 MtabTestData test_data1[] = {
370 MtabTestData(kDevice1, test_path_a.value(), kValidFS), 370 MtabTestData(kDevice1, test_path_a.value(), kValidFS),
371 MtabTestData(kDevice2, test_path_b.value(), kValidFS), 371 MtabTestData(kDevice2, test_path_b.value(), kValidFS),
372 MtabTestData(kDevice1, test_path_b.value(), kValidFS), 372 MtabTestData(kDevice1, test_path_b.value(), kValidFS),
373 }; 373 };
374 EXPECT_CALL(observer(), 374 EXPECT_CALL(observer(),
375 OnMediaDeviceAttached(kDeviceId0, 375 OnMediaDeviceAttached(kDeviceId0,
376 ASCIIToUTF16(kDevice1), 376 ASCIIToUTF16(kDevice1),
377 base::SystemMonitor::TYPE_PATH, 377 base::SystemMonitor::TYPE_PATH,
378 test_path_b.value())) 378 test_path_b.value()))
379 .Times(1); 379 .Times(1);
380 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0); 380 EXPECT_CALL(observer(), OnMediaDeviceDetached(_, _)).Times(0);
381 OverwriteMtabAndRunLoop(test_data1, arraysize(test_data1)); 381 OverwriteMtabAndRunLoop(test_data1, arraysize(test_data1));
382 382
383 // Attach |kDevice3| to |kMountPointB|. 383 // Attach |kDevice3| to |kMountPointB|.
384 // |kDevice1| is inaccessible at its most recent mount point, so it is 384 // |kDevice1| is inaccessible at its most recent mount point, so it is
385 // detached and unavailable, even though it is still accessible via 385 // detached and unavailable, even though it is still accessible via
386 // |kMountPointA|. 386 // |kMountPointA|.
387 // kDevice1 -> kMountPointA 387 // kDevice1 -> kMountPointA
388 // kDevice2 -> kMountPointB 388 // kDevice2 -> kMountPointB
389 // kDevice1 -> kMountPointB 389 // kDevice1 -> kMountPointB
390 // kDevice3 -> kMountPointB 390 // kDevice3 -> kMountPointB
391 MtabTestData test_data2[] = { 391 MtabTestData test_data2[] = {
392 MtabTestData(kDevice3, test_path_b.value(), kValidFS), 392 MtabTestData(kDevice3, test_path_b.value(), kValidFS),
393 }; 393 };
394 EXPECT_CALL(observer(), OnMediaDeviceDetached(kDeviceId0)).Times(1); 394 EXPECT_CALL(observer(), OnMediaDeviceDetached(kDeviceId0, _)).Times(1);
395 EXPECT_CALL(observer(), 395 EXPECT_CALL(observer(),
396 OnMediaDeviceAttached(kDeviceId1, 396 OnMediaDeviceAttached(kDeviceId1,
397 ASCIIToUTF16(kDevice3), 397 ASCIIToUTF16(kDevice3),
398 base::SystemMonitor::TYPE_PATH, 398 base::SystemMonitor::TYPE_PATH,
399 test_path_b.value())) 399 test_path_b.value()))
400 .Times(1); 400 .Times(1);
401 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2)); 401 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2));
402 402
403 // Detach all devices. 403 // Detach all devices.
404 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(0); 404 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(0);
405 EXPECT_CALL(observer(), OnMediaDeviceDetached(kDeviceId1)).Times(1); 405 EXPECT_CALL(observer(), OnMediaDeviceDetached(kDeviceId1, _)).Times(1);
406 WriteEmptyMtabAndRunLoop(); 406 WriteEmptyMtabAndRunLoop();
407 } 407 }
408 408
409 } // namespace 409 } // namespace
410 410
411 } // namespace chrome 411 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698