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

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

Issue 10780023: Change base::SystemMonitor's media device functions to take a type and string16 instead of a FilePa… (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: fix cros Created 8 years, 5 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>
11 11
12 #include <string> 12 #include <string>
13 13
14 #include "base/file_util.h" 14 #include "base/file_util.h"
15 #include "base/logging.h" 15 #include "base/logging.h"
16 #include "base/memory/scoped_ptr.h" 16 #include "base/memory/scoped_ptr.h"
17 #include "base/message_loop.h" 17 #include "base/message_loop.h"
18 #include "base/scoped_temp_dir.h" 18 #include "base/scoped_temp_dir.h"
19 #include "base/system_monitor/system_monitor.h" 19 #include "base/system_monitor/system_monitor.h"
20 #include "base/test/mock_devices_changed_observer.h" 20 #include "base/test/mock_devices_changed_observer.h"
21 #include "base/utf_string_conversions.h"
21 #include "content/public/test/test_browser_thread.h" 22 #include "content/public/test/test_browser_thread.h"
22 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
23 24
24 namespace chrome { 25 namespace chrome {
25 26
26 namespace { 27 namespace {
27 28
28 using testing::_; 29 using testing::_;
29 30
30 const char kValidFS[] = "vfat"; 31 const char kValidFS[] = "vfat";
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 229
229 // Simple test case where we attach and detach a media device. 230 // Simple test case where we attach and detach a media device.
230 TEST_F(MediaDeviceNotificationsLinuxTest, BasicAttachDetach) { 231 TEST_F(MediaDeviceNotificationsLinuxTest, BasicAttachDetach) {
231 testing::Sequence mock_sequence; 232 testing::Sequence mock_sequence;
232 FilePath test_path = CreateMountPointWithDCIMDir(kMountPointA); 233 FilePath test_path = CreateMountPointWithDCIMDir(kMountPointA);
233 ASSERT_FALSE(test_path.empty()); 234 ASSERT_FALSE(test_path.empty());
234 MtabTestData test_data[] = { 235 MtabTestData test_data[] = {
235 MtabTestData(kDevice1, kInvalidPath, kValidFS), 236 MtabTestData(kDevice1, kInvalidPath, kValidFS),
236 MtabTestData(kDevice2, test_path.value(), kValidFS), 237 MtabTestData(kDevice2, test_path.value(), kValidFS),
237 }; 238 };
239 const std::string kDeviceId = "0";
238 // Only |kDevice2| should be attached, since |kDevice1| has a bad path. 240 // Only |kDevice2| should be attached, since |kDevice1| has a bad path.
239 EXPECT_CALL(observer(), OnMediaDeviceAttached(0, kDevice2, test_path)) 241 EXPECT_CALL(observer(),
242 OnMediaDeviceAttached(kDeviceId,
243 ASCIIToUTF16(kDevice2),
244 base::SystemMonitor::TYPE_PATH,
245 test_path.value()))
240 .InSequence(mock_sequence); 246 .InSequence(mock_sequence);
241 AppendToMtabAndRunLoop(test_data, arraysize(test_data)); 247 AppendToMtabAndRunLoop(test_data, arraysize(test_data));
242 248
243 // |kDevice2| should be detached here. 249 // |kDevice2| should be detached here.
244 EXPECT_CALL(observer(), OnMediaDeviceDetached(0)).InSequence(mock_sequence); 250 EXPECT_CALL(observer(), OnMediaDeviceDetached(kDeviceId))
251 .InSequence(mock_sequence);
245 WriteEmptyMtabAndRunLoop(); 252 WriteEmptyMtabAndRunLoop();
246 } 253 }
247 254
248 // Only mount points with DCIM directories are recognized. 255 // Only mount points with DCIM directories are recognized.
249 TEST_F(MediaDeviceNotificationsLinuxTest, DCIM) { 256 TEST_F(MediaDeviceNotificationsLinuxTest, DCIM) {
250 testing::Sequence mock_sequence; 257 testing::Sequence mock_sequence;
251 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); 258 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA);
252 ASSERT_FALSE(test_path_a.empty()); 259 ASSERT_FALSE(test_path_a.empty());
253 MtabTestData test_data1[] = { 260 MtabTestData test_data1[] = {
254 MtabTestData(kDevice1, test_path_a.value(), kValidFS), 261 MtabTestData(kDevice1, test_path_a.value(), kValidFS),
255 }; 262 };
263 const std::string kDeviceId = "0";
256 // |kDevice1| should be attached as expected. 264 // |kDevice1| should be attached as expected.
257 EXPECT_CALL(observer(), OnMediaDeviceAttached(0, kDevice1, test_path_a)) 265 EXPECT_CALL(observer(),
266 OnMediaDeviceAttached(kDeviceId,
267 ASCIIToUTF16(kDevice1),
268 base::SystemMonitor::TYPE_PATH,
269 test_path_a.value()))
258 .InSequence(mock_sequence); 270 .InSequence(mock_sequence);
259 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1)); 271 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1));
260 272
261 // 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.
262 FilePath test_path_b = CreateMountPointWithoutDCIMDir(kMountPointB); 274 FilePath test_path_b = CreateMountPointWithoutDCIMDir(kMountPointB);
263 ASSERT_FALSE(test_path_b.empty()); 275 ASSERT_FALSE(test_path_b.empty());
264 MtabTestData test_data2[] = { 276 MtabTestData test_data2[] = {
265 MtabTestData(kDevice2, test_path_b.value(), kValidFS), 277 MtabTestData(kDevice2, test_path_b.value(), kValidFS),
266 }; 278 };
267 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2)); 279 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2));
268 280
269 // |kDevice1| should be detached as expected. 281 // |kDevice1| should be detached as expected.
270 EXPECT_CALL(observer(), OnMediaDeviceDetached(0)).InSequence(mock_sequence); 282 EXPECT_CALL(observer(), OnMediaDeviceDetached(kDeviceId))
283 .InSequence(mock_sequence);
271 WriteEmptyMtabAndRunLoop(); 284 WriteEmptyMtabAndRunLoop();
272 } 285 }
273 286
274 // More complicated test case with multiple devices on multiple mount points. 287 // More complicated test case with multiple devices on multiple mount points.
275 TEST_F(MediaDeviceNotificationsLinuxTest, MultiDevicesMultiMountPoints) { 288 TEST_F(MediaDeviceNotificationsLinuxTest, MultiDevicesMultiMountPoints) {
276 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); 289 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA);
277 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB); 290 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB);
278 ASSERT_FALSE(test_path_a.empty()); 291 ASSERT_FALSE(test_path_a.empty());
279 ASSERT_FALSE(test_path_b.empty()); 292 ASSERT_FALSE(test_path_b.empty());
280 293
281 // Attach two devices. 294 // Attach two devices.
282 // kDevice1 -> kMountPointA 295 // kDevice1 -> kMountPointA
283 // kDevice2 -> kMountPointB 296 // kDevice2 -> kMountPointB
284 MtabTestData test_data1[] = { 297 MtabTestData test_data1[] = {
285 MtabTestData(kDevice1, test_path_a.value(), kValidFS), 298 MtabTestData(kDevice1, test_path_a.value(), kValidFS),
286 MtabTestData(kDevice2, test_path_b.value(), kValidFS), 299 MtabTestData(kDevice2, test_path_b.value(), kValidFS),
287 }; 300 };
288 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(2); 301 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(2);
289 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0); 302 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0);
290 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1)); 303 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1));
291 304
292 // Attach |kDevice1| to |kMountPointB|. 305 // Attach |kDevice1| to |kMountPointB|.
293 // |kDevice2| is inaccessible, so it is detached. |kDevice1| has been 306 // |kDevice2| is inaccessible, so it is detached. |kDevice1| has been
294 // re-attached at |kMountPointB|, so it is 'detached' from kMountPointA. 307 // re-attached at |kMountPointB|, so it is 'detached' from kMountPointA.
295 // kDevice1 -> kMountPointA 308 // kDevice1 -> kMountPointA
296 // kDevice2 -> kMountPointB 309 // kDevice2 -> kMountPointB
297 // kDevice1 -> kMountPointB 310 // kDevice1 -> kMountPointB
298 MtabTestData test_data2[] = { 311 MtabTestData test_data2[] = {
299 MtabTestData(kDevice1, test_path_b.value(), kValidFS), 312 MtabTestData(kDevice1, test_path_b.value(), kValidFS),
300 }; 313 };
301 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(1); 314 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(1);
302 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(2); 315 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(2);
303 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2)); 316 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2));
304 317
305 // Attach |kDevice2| to |kMountPointA|. 318 // Attach |kDevice2| to |kMountPointA|.
306 // kDevice1 -> kMountPointA 319 // kDevice1 -> kMountPointA
307 // kDevice2 -> kMountPointB 320 // kDevice2 -> kMountPointB
308 // kDevice1 -> kMountPointB 321 // kDevice1 -> kMountPointB
309 // kDevice2 -> kMountPointA 322 // kDevice2 -> kMountPointA
310 MtabTestData test_data3[] = { 323 MtabTestData test_data3[] = {
311 MtabTestData(kDevice2, test_path_a.value(), kValidFS), 324 MtabTestData(kDevice2, test_path_a.value(), kValidFS),
312 }; 325 };
313 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(1); 326 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(1);
314 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0); 327 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0);
315 AppendToMtabAndRunLoop(test_data3, arraysize(test_data3)); 328 AppendToMtabAndRunLoop(test_data3, arraysize(test_data3));
316 329
317 // Detach |kDevice2| from |kMountPointA|. 330 // Detach |kDevice2| from |kMountPointA|.
318 // kDevice1 -> kMountPointA 331 // kDevice1 -> kMountPointA
319 // kDevice2 -> kMountPointB 332 // kDevice2 -> kMountPointB
320 // kDevice1 -> kMountPointB 333 // kDevice1 -> kMountPointB
321 MtabTestData test_data4[] = { 334 MtabTestData test_data4[] = {
322 MtabTestData(kDevice1, test_path_a.value(), kValidFS), 335 MtabTestData(kDevice1, test_path_a.value(), kValidFS),
323 MtabTestData(kDevice2, test_path_b.value(), kValidFS), 336 MtabTestData(kDevice2, test_path_b.value(), kValidFS),
324 MtabTestData(kDevice1, test_path_b.value(), kValidFS), 337 MtabTestData(kDevice1, test_path_b.value(), kValidFS),
325 }; 338 };
326 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(0); 339 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(0);
327 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(1); 340 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(1);
328 OverwriteMtabAndRunLoop(test_data4, arraysize(test_data4)); 341 OverwriteMtabAndRunLoop(test_data4, arraysize(test_data4));
329 342
330 // Detach |kDevice1| from |kMountPointB|. 343 // Detach |kDevice1| from |kMountPointB|.
331 // kDevice1 -> kMountPointA 344 // kDevice1 -> kMountPointA
332 // kDevice2 -> kMountPointB 345 // kDevice2 -> kMountPointB
333 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(2); 346 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(2);
334 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(1); 347 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(1);
335 OverwriteMtabAndRunLoop(test_data1, arraysize(test_data1)); 348 OverwriteMtabAndRunLoop(test_data1, arraysize(test_data1));
336 349
337 // Detach all devices. 350 // Detach all devices.
338 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(0); 351 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(0);
339 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(2); 352 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(2);
340 WriteEmptyMtabAndRunLoop(); 353 WriteEmptyMtabAndRunLoop();
341 } 354 }
342 355
343 // More complicated test case with multiple devices on one mount point. 356 // More complicated test case with multiple devices on one mount point.
344 TEST_F(MediaDeviceNotificationsLinuxTest, MultiDevicesOneMountPoint) { 357 TEST_F(MediaDeviceNotificationsLinuxTest, MultiDevicesOneMountPoint) {
345 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); 358 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA);
346 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB); 359 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB);
347 ASSERT_FALSE(test_path_a.empty()); 360 ASSERT_FALSE(test_path_a.empty());
348 ASSERT_FALSE(test_path_b.empty()); 361 ASSERT_FALSE(test_path_b.empty());
362 const std::string kDeviceId0 = "0";
363 const std::string kDeviceId1 = "1";
349 364
350 // |kDevice1| is most recently mounted at |kMountPointB|. 365 // |kDevice1| is most recently mounted at |kMountPointB|.
351 // kDevice1 -> kMountPointA 366 // kDevice1 -> kMountPointA
352 // kDevice2 -> kMountPointB 367 // kDevice2 -> kMountPointB
353 // kDevice1 -> kMountPointB 368 // kDevice1 -> kMountPointB
354 MtabTestData test_data1[] = { 369 MtabTestData test_data1[] = {
355 MtabTestData(kDevice1, test_path_a.value(), kValidFS), 370 MtabTestData(kDevice1, test_path_a.value(), kValidFS),
356 MtabTestData(kDevice2, test_path_b.value(), kValidFS), 371 MtabTestData(kDevice2, test_path_b.value(), kValidFS),
357 MtabTestData(kDevice1, test_path_b.value(), kValidFS), 372 MtabTestData(kDevice1, test_path_b.value(), kValidFS),
358 }; 373 };
359 EXPECT_CALL(observer(), OnMediaDeviceAttached(0, kDevice1, test_path_b)) 374 EXPECT_CALL(observer(),
375 OnMediaDeviceAttached(kDeviceId0,
376 ASCIIToUTF16(kDevice1),
377 base::SystemMonitor::TYPE_PATH,
378 test_path_b.value()))
360 .Times(1); 379 .Times(1);
361 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0); 380 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0);
362 OverwriteMtabAndRunLoop(test_data1, arraysize(test_data1)); 381 OverwriteMtabAndRunLoop(test_data1, arraysize(test_data1));
363 382
364 // Attach |kDevice3| to |kMountPointB|. 383 // Attach |kDevice3| to |kMountPointB|.
365 // |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
366 // detached and unavailable, even though it is still accessible via 385 // detached and unavailable, even though it is still accessible via
367 // |kMountPointA|. 386 // |kMountPointA|.
368 // kDevice1 -> kMountPointA 387 // kDevice1 -> kMountPointA
369 // kDevice2 -> kMountPointB 388 // kDevice2 -> kMountPointB
370 // kDevice1 -> kMountPointB 389 // kDevice1 -> kMountPointB
371 // kDevice3 -> kMountPointB 390 // kDevice3 -> kMountPointB
372 MtabTestData test_data2[] = { 391 MtabTestData test_data2[] = {
373 MtabTestData(kDevice3, test_path_b.value(), kValidFS), 392 MtabTestData(kDevice3, test_path_b.value(), kValidFS),
374 }; 393 };
375 EXPECT_CALL(observer(), OnMediaDeviceDetached(0)).Times(1); 394 EXPECT_CALL(observer(), OnMediaDeviceDetached(kDeviceId0)).Times(1);
376 EXPECT_CALL(observer(), OnMediaDeviceAttached(1, kDevice3, test_path_b)) 395 EXPECT_CALL(observer(),
396 OnMediaDeviceAttached(kDeviceId1,
397 ASCIIToUTF16(kDevice3),
398 base::SystemMonitor::TYPE_PATH,
399 test_path_b.value()))
377 .Times(1); 400 .Times(1);
378 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2)); 401 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2));
379 402
380 // Detach all devices. 403 // Detach all devices.
381 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(0); 404 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(0);
382 EXPECT_CALL(observer(), OnMediaDeviceDetached(1)).Times(1); 405 EXPECT_CALL(observer(), OnMediaDeviceDetached(kDeviceId1)).Times(1);
383 WriteEmptyMtabAndRunLoop(); 406 WriteEmptyMtabAndRunLoop();
384 } 407 }
385 408
386 } // namespace 409 } // namespace
387 410
388 } // namespace chrome 411 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698