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

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

Issue 10829228: [LINUX] Extract the name and id of the device and send it along the device attach message. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed review comments 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 19 matching lines...) Expand all
30 30
31 const char kValidFS[] = "vfat"; 31 const char kValidFS[] = "vfat";
32 const char kInvalidFS[] = "invalidfs"; 32 const char kInvalidFS[] = "invalidfs";
33 33
34 const char kInvalidPath[] = "invalid path does not exist"; 34 const char kInvalidPath[] = "invalid path does not exist";
35 35
36 const char kDevice1[] = "d1"; 36 const char kDevice1[] = "d1";
37 const char kDevice2[] = "d2"; 37 const char kDevice2[] = "d2";
38 const char kDevice3[] = "d3"; 38 const char kDevice3[] = "d3";
39 39
40 const char kDeviceId1[] = "uuid: FFF0-000F";
41 const char kDeviceId2[] = "uuid: FFF0-00F0";
42 const char kDeviceId3[] = "uuid: FFF0-0F00";
43
44 const char kDeviceLabel1[] = "TEST_USB_MODEL_1";
45 const char kDeviceLabel2[] = "TEST_USB_MODEL_2";
46 const char kDeviceLabel3[] = "TEST_USB_MODEL_3";
47
40 const char kMountPointA[] = "mnt_a"; 48 const char kMountPointA[] = "mnt_a";
41 const char kMountPointB[] = "mnt_b"; 49 const char kMountPointB[] = "mnt_b";
42 50
51 bool GetDeviceInfo(const std::string& dev_path,
52 base::SystemMonitor::MediaDeviceType media_device_type,
53 std::string* id,
54 string16* name) {
55 std::string device_name;
56 if (dev_path == kDevice1) {
57 *id = std::string(kDeviceId1);
58 device_name = kDeviceLabel1;
59 } else if (dev_path == kDevice2) {
60 *id = std::string(kDeviceId2);
61 device_name = kDeviceLabel2;
62 } else if (dev_path == kDevice3) {
63 *id = std::string(kDeviceId3);
64 device_name = kDeviceLabel3;
65 } else {
66 return false;
67 }
68
69 *name = ASCIIToUTF16(device_name);
70 return true;
71 }
72
43 class MediaDeviceNotificationsLinuxTestWrapper 73 class MediaDeviceNotificationsLinuxTestWrapper
44 : public MediaDeviceNotificationsLinux { 74 : public MediaDeviceNotificationsLinux {
45 public: 75 public:
46 MediaDeviceNotificationsLinuxTestWrapper(const FilePath& path, 76 MediaDeviceNotificationsLinuxTestWrapper(const FilePath& path,
47 MessageLoop* message_loop) 77 MessageLoop* message_loop)
48 : MediaDeviceNotificationsLinux(path), 78 : MediaDeviceNotificationsLinux(path, &GetDeviceInfo),
49 message_loop_(message_loop) { 79 message_loop_(message_loop) {
50 } 80 }
51 81
52 private: 82 private:
53 // Avoids code deleting the object while there are references to it. 83 // Avoids code deleting the object while there are references to it.
54 // Aside from the base::RefCountedThreadSafe friend class, any attempts to 84 // Aside from the base::RefCountedThreadSafe friend class, any attempts to
55 // call this dtor will result in a compile-time error. 85 // call this dtor will result in a compile-time error.
56 ~MediaDeviceNotificationsLinuxTestWrapper() {} 86 ~MediaDeviceNotificationsLinuxTestWrapper() {}
57 87
58 virtual void OnFilePathChanged(const FilePath& path, bool error) OVERRIDE { 88 virtual void OnFilePathChanged(const FilePath& path, bool error) OVERRIDE {
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 259
230 // Simple test case where we attach and detach a media device. 260 // Simple test case where we attach and detach a media device.
231 TEST_F(MediaDeviceNotificationsLinuxTest, BasicAttachDetach) { 261 TEST_F(MediaDeviceNotificationsLinuxTest, BasicAttachDetach) {
232 testing::Sequence mock_sequence; 262 testing::Sequence mock_sequence;
233 FilePath test_path = CreateMountPointWithDCIMDir(kMountPointA); 263 FilePath test_path = CreateMountPointWithDCIMDir(kMountPointA);
234 ASSERT_FALSE(test_path.empty()); 264 ASSERT_FALSE(test_path.empty());
235 MtabTestData test_data[] = { 265 MtabTestData test_data[] = {
236 MtabTestData(kDevice1, kInvalidPath, kValidFS), 266 MtabTestData(kDevice1, kInvalidPath, kValidFS),
237 MtabTestData(kDevice2, test_path.value(), kValidFS), 267 MtabTestData(kDevice2, test_path.value(), kValidFS),
238 }; 268 };
239 const std::string kDeviceId = "0";
240 // Only |kDevice2| should be attached, since |kDevice1| has a bad path. 269 // Only |kDevice2| should be attached, since |kDevice1| has a bad path.
241 EXPECT_CALL(observer(), 270 EXPECT_CALL(observer(),
242 OnMediaDeviceAttached(kDeviceId, 271 OnMediaDeviceAttached(kDeviceId2,
243 ASCIIToUTF16(kDevice2), 272 ASCIIToUTF16(kDeviceLabel2),
244 base::SystemMonitor::TYPE_PATH, 273 base::SystemMonitor::TYPE_PATH,
245 test_path.value())) 274 test_path.value()))
246 .InSequence(mock_sequence); 275 .InSequence(mock_sequence);
247 AppendToMtabAndRunLoop(test_data, arraysize(test_data)); 276 AppendToMtabAndRunLoop(test_data, arraysize(test_data));
248 277
249 // |kDevice2| should be detached here. 278 // |kDevice2| should be detached here.
250 EXPECT_CALL(observer(), OnMediaDeviceDetached(kDeviceId)) 279 EXPECT_CALL(observer(), OnMediaDeviceDetached(kDeviceId2))
251 .InSequence(mock_sequence); 280 .InSequence(mock_sequence);
252 WriteEmptyMtabAndRunLoop(); 281 WriteEmptyMtabAndRunLoop();
253 } 282 }
254 283
255 // Only mount points with DCIM directories are recognized. 284 // Only mount points with DCIM directories are recognized.
256 TEST_F(MediaDeviceNotificationsLinuxTest, DCIM) { 285 TEST_F(MediaDeviceNotificationsLinuxTest, DCIM) {
257 testing::Sequence mock_sequence; 286 testing::Sequence mock_sequence;
258 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); 287 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA);
259 ASSERT_FALSE(test_path_a.empty()); 288 ASSERT_FALSE(test_path_a.empty());
260 MtabTestData test_data1[] = { 289 MtabTestData test_data1[] = {
261 MtabTestData(kDevice1, test_path_a.value(), kValidFS), 290 MtabTestData(kDevice1, test_path_a.value(), kValidFS),
262 }; 291 };
263 const std::string kDeviceId = "0";
264 // |kDevice1| should be attached as expected. 292 // |kDevice1| should be attached as expected.
265 EXPECT_CALL(observer(), 293 EXPECT_CALL(observer(),
266 OnMediaDeviceAttached(kDeviceId, 294 OnMediaDeviceAttached(kDeviceId1,
267 ASCIIToUTF16(kDevice1), 295 ASCIIToUTF16(kDeviceLabel1),
268 base::SystemMonitor::TYPE_PATH, 296 base::SystemMonitor::TYPE_PATH,
269 test_path_a.value())) 297 test_path_a.value()))
270 .InSequence(mock_sequence); 298 .InSequence(mock_sequence);
271 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1)); 299 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1));
272 300
273 // This should do nothing, since |kMountPointB| does not have a DCIM dir. 301 // This should do nothing, since |kMountPointB| does not have a DCIM dir.
274 FilePath test_path_b = CreateMountPointWithoutDCIMDir(kMountPointB); 302 FilePath test_path_b = CreateMountPointWithoutDCIMDir(kMountPointB);
275 ASSERT_FALSE(test_path_b.empty()); 303 ASSERT_FALSE(test_path_b.empty());
276 MtabTestData test_data2[] = { 304 MtabTestData test_data2[] = {
277 MtabTestData(kDevice2, test_path_b.value(), kValidFS), 305 MtabTestData(kDevice2, test_path_b.value(), kValidFS),
278 }; 306 };
279 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2)); 307 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2));
280 308
281 // |kDevice1| should be detached as expected. 309 // |kDevice1| should be detached as expected.
282 EXPECT_CALL(observer(), OnMediaDeviceDetached(kDeviceId)) 310 EXPECT_CALL(observer(), OnMediaDeviceDetached(kDeviceId1))
283 .InSequence(mock_sequence); 311 .InSequence(mock_sequence);
284 WriteEmptyMtabAndRunLoop(); 312 WriteEmptyMtabAndRunLoop();
285 } 313 }
286 314
287 // More complicated test case with multiple devices on multiple mount points. 315 // More complicated test case with multiple devices on multiple mount points.
316 TEST_F(MediaDeviceNotificationsLinuxTest, SwapMountPoints) {
317 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA);
318 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB);
319 ASSERT_FALSE(test_path_a.empty());
320 ASSERT_FALSE(test_path_b.empty());
321
322 // Attach two devices.
323 // kDevice1 -> kMountPointA
324 // kDevice2 -> kMountPointB
325 MtabTestData test_data1[] = {
326 MtabTestData(kDevice1, test_path_a.value(), kValidFS),
327 MtabTestData(kDevice2, test_path_b.value(), kValidFS),
328 };
329 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(2);
330 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0);
331 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1));
332
333 // Detach two devices from old mount points and attach the devices at new
334 // mount points.
335 // kDevice1 -> kMountPointB
336 // kDevice2 -> kMountPointA
337 MtabTestData test_data2[] = {
338 MtabTestData(kDevice1, test_path_b.value(), kValidFS),
339 MtabTestData(kDevice2, test_path_a.value(), kValidFS),
340 };
341 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(2);
342 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(2);
343 OverwriteMtabAndRunLoop(test_data2, arraysize(test_data2));
344
345 // Detach all devices.
346 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(0);
347 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(2);
348 WriteEmptyMtabAndRunLoop();
349 }
350
351 // More complicated test case with multiple devices on multiple mount points.
288 TEST_F(MediaDeviceNotificationsLinuxTest, MultiDevicesMultiMountPoints) { 352 TEST_F(MediaDeviceNotificationsLinuxTest, MultiDevicesMultiMountPoints) {
289 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); 353 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA);
290 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB); 354 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB);
291 ASSERT_FALSE(test_path_a.empty()); 355 ASSERT_FALSE(test_path_a.empty());
292 ASSERT_FALSE(test_path_b.empty()); 356 ASSERT_FALSE(test_path_b.empty());
293 357
294 // Attach two devices. 358 // Attach two devices.
295 // kDevice1 -> kMountPointA 359 // kDevice1 -> kMountPointA
296 // kDevice2 -> kMountPointB 360 // kDevice2 -> kMountPointB
297 MtabTestData test_data1[] = { 361 MtabTestData test_data1[] = {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(2); 416 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(2);
353 WriteEmptyMtabAndRunLoop(); 417 WriteEmptyMtabAndRunLoop();
354 } 418 }
355 419
356 // More complicated test case with multiple devices on one mount point. 420 // More complicated test case with multiple devices on one mount point.
357 TEST_F(MediaDeviceNotificationsLinuxTest, MultiDevicesOneMountPoint) { 421 TEST_F(MediaDeviceNotificationsLinuxTest, MultiDevicesOneMountPoint) {
358 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); 422 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA);
359 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB); 423 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB);
360 ASSERT_FALSE(test_path_a.empty()); 424 ASSERT_FALSE(test_path_a.empty());
361 ASSERT_FALSE(test_path_b.empty()); 425 ASSERT_FALSE(test_path_b.empty());
362 const std::string kDeviceId0 = "0";
363 const std::string kDeviceId1 = "1";
364 426
365 // |kDevice1| is most recently mounted at |kMountPointB|. 427 // |kDevice1| is most recently mounted at |kMountPointB|.
366 // kDevice1 -> kMountPointA 428 // kDevice1 -> kMountPointA
367 // kDevice2 -> kMountPointB 429 // kDevice2 -> kMountPointB
368 // kDevice1 -> kMountPointB 430 // kDevice1 -> kMountPointB
369 MtabTestData test_data1[] = { 431 MtabTestData test_data1[] = {
370 MtabTestData(kDevice1, test_path_a.value(), kValidFS), 432 MtabTestData(kDevice1, test_path_a.value(), kValidFS),
371 MtabTestData(kDevice2, test_path_b.value(), kValidFS), 433 MtabTestData(kDevice2, test_path_b.value(), kValidFS),
372 MtabTestData(kDevice1, test_path_b.value(), kValidFS), 434 MtabTestData(kDevice1, test_path_b.value(), kValidFS),
373 }; 435 };
374 EXPECT_CALL(observer(), 436 EXPECT_CALL(observer(),
375 OnMediaDeviceAttached(kDeviceId0, 437 OnMediaDeviceAttached(kDeviceId1,
376 ASCIIToUTF16(kDevice1), 438 ASCIIToUTF16(kDeviceLabel1),
377 base::SystemMonitor::TYPE_PATH, 439 base::SystemMonitor::TYPE_PATH,
378 test_path_b.value())) 440 test_path_b.value()))
379 .Times(1); 441 .Times(1);
380 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0); 442 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0);
381 OverwriteMtabAndRunLoop(test_data1, arraysize(test_data1)); 443 OverwriteMtabAndRunLoop(test_data1, arraysize(test_data1));
382 444
383 // Attach |kDevice3| to |kMountPointB|. 445 // Attach |kDevice3| to |kMountPointB|.
384 // |kDevice1| is inaccessible at its most recent mount point, so it is 446 // |kDevice1| is inaccessible at its most recent mount point, so it is
385 // detached and unavailable, even though it is still accessible via 447 // detached and unavailable, even though it is still accessible via
386 // |kMountPointA|. 448 // |kMountPointA|.
387 // kDevice1 -> kMountPointA 449 // kDevice1 -> kMountPointA
388 // kDevice2 -> kMountPointB 450 // kDevice2 -> kMountPointB
389 // kDevice1 -> kMountPointB 451 // kDevice1 -> kMountPointB
390 // kDevice3 -> kMountPointB 452 // kDevice3 -> kMountPointB
391 MtabTestData test_data2[] = { 453 MtabTestData test_data2[] = {
392 MtabTestData(kDevice3, test_path_b.value(), kValidFS), 454 MtabTestData(kDevice3, test_path_b.value(), kValidFS),
393 }; 455 };
394 EXPECT_CALL(observer(), OnMediaDeviceDetached(kDeviceId0)).Times(1); 456 EXPECT_CALL(observer(), OnMediaDeviceDetached(kDeviceId1)).Times(1);
395 EXPECT_CALL(observer(), 457 EXPECT_CALL(observer(),
396 OnMediaDeviceAttached(kDeviceId1, 458 OnMediaDeviceAttached(kDeviceId3,
397 ASCIIToUTF16(kDevice3), 459 ASCIIToUTF16(kDeviceLabel3),
398 base::SystemMonitor::TYPE_PATH, 460 base::SystemMonitor::TYPE_PATH,
399 test_path_b.value())) 461 test_path_b.value()))
400 .Times(1); 462 .Times(1);
401 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2)); 463 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2));
402 464
403 // Detach all devices. 465 // Detach all devices.
404 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(0); 466 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(0);
405 EXPECT_CALL(observer(), OnMediaDeviceDetached(kDeviceId1)).Times(1); 467 EXPECT_CALL(observer(), OnMediaDeviceDetached(kDeviceId3)).Times(1);
406 WriteEmptyMtabAndRunLoop(); 468 WriteEmptyMtabAndRunLoop();
407 } 469 }
408 470
409 } // namespace 471 } // namespace
410 472
411 } // namespace chrome 473 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698