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

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 win 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 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 };
238 // Only |kDevice2| should be attached, since |kDevice1| has a bad path. 239 // Only |kDevice2| should be attached, since |kDevice1| has a bad path.
239 EXPECT_CALL(observer(), OnMediaDeviceAttached(0, kDevice2, test_path)) 240 EXPECT_CALL(observer(),
241 OnMediaDeviceAttached(0,
242 kDevice2,
243 base::SystemMonitor::TYPE_PATH,
244 UTF8ToUTF16(test_path.value())))
240 .InSequence(mock_sequence); 245 .InSequence(mock_sequence);
241 AppendToMtabAndRunLoop(test_data, arraysize(test_data)); 246 AppendToMtabAndRunLoop(test_data, arraysize(test_data));
242 247
243 // |kDevice2| should be detached here. 248 // |kDevice2| should be detached here.
244 EXPECT_CALL(observer(), OnMediaDeviceDetached(0)).InSequence(mock_sequence); 249 EXPECT_CALL(observer(), OnMediaDeviceDetached(0)).InSequence(mock_sequence);
245 WriteEmptyMtabAndRunLoop(); 250 WriteEmptyMtabAndRunLoop();
246 } 251 }
247 252
248 // Only mount points with DCIM directories are recognized. 253 // Only mount points with DCIM directories are recognized.
249 TEST_F(MediaDeviceNotificationsLinuxTest, DCIM) { 254 TEST_F(MediaDeviceNotificationsLinuxTest, DCIM) {
250 testing::Sequence mock_sequence; 255 testing::Sequence mock_sequence;
251 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); 256 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA);
252 ASSERT_FALSE(test_path_a.empty()); 257 ASSERT_FALSE(test_path_a.empty());
253 MtabTestData test_data1[] = { 258 MtabTestData test_data1[] = {
254 MtabTestData(kDevice1, test_path_a.value(), kValidFS), 259 MtabTestData(kDevice1, test_path_a.value(), kValidFS),
255 }; 260 };
256 // |kDevice1| should be attached as expected. 261 // |kDevice1| should be attached as expected.
257 EXPECT_CALL(observer(), OnMediaDeviceAttached(0, kDevice1, test_path_a)) 262 EXPECT_CALL(observer(),
263 OnMediaDeviceAttached(0,
264 kDevice1,
265 base::SystemMonitor::TYPE_PATH,
266 UTF8ToUTF16(test_path_a.value())))
258 .InSequence(mock_sequence); 267 .InSequence(mock_sequence);
259 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1)); 268 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1));
260 269
261 // This should do nothing, since |kMountPointB| does not have a DCIM dir. 270 // This should do nothing, since |kMountPointB| does not have a DCIM dir.
262 FilePath test_path_b = CreateMountPointWithoutDCIMDir(kMountPointB); 271 FilePath test_path_b = CreateMountPointWithoutDCIMDir(kMountPointB);
263 ASSERT_FALSE(test_path_b.empty()); 272 ASSERT_FALSE(test_path_b.empty());
264 MtabTestData test_data2[] = { 273 MtabTestData test_data2[] = {
265 MtabTestData(kDevice2, test_path_b.value(), kValidFS), 274 MtabTestData(kDevice2, test_path_b.value(), kValidFS),
266 }; 275 };
267 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2)); 276 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2));
(...skipping 10 matching lines...) Expand all
278 ASSERT_FALSE(test_path_a.empty()); 287 ASSERT_FALSE(test_path_a.empty());
279 ASSERT_FALSE(test_path_b.empty()); 288 ASSERT_FALSE(test_path_b.empty());
280 289
281 // Attach two devices. 290 // Attach two devices.
282 // kDevice1 -> kMountPointA 291 // kDevice1 -> kMountPointA
283 // kDevice2 -> kMountPointB 292 // kDevice2 -> kMountPointB
284 MtabTestData test_data1[] = { 293 MtabTestData test_data1[] = {
285 MtabTestData(kDevice1, test_path_a.value(), kValidFS), 294 MtabTestData(kDevice1, test_path_a.value(), kValidFS),
286 MtabTestData(kDevice2, test_path_b.value(), kValidFS), 295 MtabTestData(kDevice2, test_path_b.value(), kValidFS),
287 }; 296 };
288 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(2); 297 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(2);
289 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0); 298 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0);
290 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1)); 299 AppendToMtabAndRunLoop(test_data1, arraysize(test_data1));
291 300
292 // Attach |kDevice1| to |kMountPointB|. 301 // Attach |kDevice1| to |kMountPointB|.
293 // |kDevice2| is inaccessible, so it is detached. |kDevice1| has been 302 // |kDevice2| is inaccessible, so it is detached. |kDevice1| has been
294 // re-attached at |kMountPointB|, so it is 'detached' from kMountPointA. 303 // re-attached at |kMountPointB|, so it is 'detached' from kMountPointA.
295 // kDevice1 -> kMountPointA 304 // kDevice1 -> kMountPointA
296 // kDevice2 -> kMountPointB 305 // kDevice2 -> kMountPointB
297 // kDevice1 -> kMountPointB 306 // kDevice1 -> kMountPointB
298 MtabTestData test_data2[] = { 307 MtabTestData test_data2[] = {
299 MtabTestData(kDevice1, test_path_b.value(), kValidFS), 308 MtabTestData(kDevice1, test_path_b.value(), kValidFS),
300 }; 309 };
301 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(1); 310 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(1);
302 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(2); 311 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(2);
303 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2)); 312 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2));
304 313
305 // Attach |kDevice2| to |kMountPointA|. 314 // Attach |kDevice2| to |kMountPointA|.
306 // kDevice1 -> kMountPointA 315 // kDevice1 -> kMountPointA
307 // kDevice2 -> kMountPointB 316 // kDevice2 -> kMountPointB
308 // kDevice1 -> kMountPointB 317 // kDevice1 -> kMountPointB
309 // kDevice2 -> kMountPointA 318 // kDevice2 -> kMountPointA
310 MtabTestData test_data3[] = { 319 MtabTestData test_data3[] = {
311 MtabTestData(kDevice2, test_path_a.value(), kValidFS), 320 MtabTestData(kDevice2, test_path_a.value(), kValidFS),
312 }; 321 };
313 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(1); 322 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(1);
314 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0); 323 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0);
315 AppendToMtabAndRunLoop(test_data3, arraysize(test_data3)); 324 AppendToMtabAndRunLoop(test_data3, arraysize(test_data3));
316 325
317 // Detach |kDevice2| from |kMountPointA|. 326 // Detach |kDevice2| from |kMountPointA|.
318 // kDevice1 -> kMountPointA 327 // kDevice1 -> kMountPointA
319 // kDevice2 -> kMountPointB 328 // kDevice2 -> kMountPointB
320 // kDevice1 -> kMountPointB 329 // kDevice1 -> kMountPointB
321 MtabTestData test_data4[] = { 330 MtabTestData test_data4[] = {
322 MtabTestData(kDevice1, test_path_a.value(), kValidFS), 331 MtabTestData(kDevice1, test_path_a.value(), kValidFS),
323 MtabTestData(kDevice2, test_path_b.value(), kValidFS), 332 MtabTestData(kDevice2, test_path_b.value(), kValidFS),
324 MtabTestData(kDevice1, test_path_b.value(), kValidFS), 333 MtabTestData(kDevice1, test_path_b.value(), kValidFS),
325 }; 334 };
326 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(0); 335 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(0);
327 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(1); 336 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(1);
328 OverwriteMtabAndRunLoop(test_data4, arraysize(test_data4)); 337 OverwriteMtabAndRunLoop(test_data4, arraysize(test_data4));
329 338
330 // Detach |kDevice1| from |kMountPointB|. 339 // Detach |kDevice1| from |kMountPointB|.
331 // kDevice1 -> kMountPointA 340 // kDevice1 -> kMountPointA
332 // kDevice2 -> kMountPointB 341 // kDevice2 -> kMountPointB
333 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(2); 342 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(2);
334 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(1); 343 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(1);
335 OverwriteMtabAndRunLoop(test_data1, arraysize(test_data1)); 344 OverwriteMtabAndRunLoop(test_data1, arraysize(test_data1));
336 345
337 // Detach all devices. 346 // Detach all devices.
338 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(0); 347 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(0);
339 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(2); 348 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(2);
340 WriteEmptyMtabAndRunLoop(); 349 WriteEmptyMtabAndRunLoop();
341 } 350 }
342 351
343 // More complicated test case with multiple devices on one mount point. 352 // More complicated test case with multiple devices on one mount point.
344 TEST_F(MediaDeviceNotificationsLinuxTest, MultiDevicesOneMountPoint) { 353 TEST_F(MediaDeviceNotificationsLinuxTest, MultiDevicesOneMountPoint) {
345 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA); 354 FilePath test_path_a = CreateMountPointWithDCIMDir(kMountPointA);
346 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB); 355 FilePath test_path_b = CreateMountPointWithDCIMDir(kMountPointB);
356 string16 test_path_b_str16 = UTF8ToUTF16(test_path_b.value());
347 ASSERT_FALSE(test_path_a.empty()); 357 ASSERT_FALSE(test_path_a.empty());
348 ASSERT_FALSE(test_path_b.empty()); 358 ASSERT_FALSE(test_path_b.empty());
349 359
350 // |kDevice1| is most recently mounted at |kMountPointB|. 360 // |kDevice1| is most recently mounted at |kMountPointB|.
351 // kDevice1 -> kMountPointA 361 // kDevice1 -> kMountPointA
352 // kDevice2 -> kMountPointB 362 // kDevice2 -> kMountPointB
353 // kDevice1 -> kMountPointB 363 // kDevice1 -> kMountPointB
354 MtabTestData test_data1[] = { 364 MtabTestData test_data1[] = {
355 MtabTestData(kDevice1, test_path_a.value(), kValidFS), 365 MtabTestData(kDevice1, test_path_a.value(), kValidFS),
356 MtabTestData(kDevice2, test_path_b.value(), kValidFS), 366 MtabTestData(kDevice2, test_path_b.value(), kValidFS),
357 MtabTestData(kDevice1, test_path_b.value(), kValidFS), 367 MtabTestData(kDevice1, test_path_b.value(), kValidFS),
358 }; 368 };
359 EXPECT_CALL(observer(), OnMediaDeviceAttached(0, kDevice1, test_path_b)) 369 EXPECT_CALL(observer(),
370 OnMediaDeviceAttached(0,
371 kDevice1,
372 base::SystemMonitor::TYPE_PATH,
373 test_path_b_str16))
360 .Times(1); 374 .Times(1);
361 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0); 375 EXPECT_CALL(observer(), OnMediaDeviceDetached(_)).Times(0);
362 OverwriteMtabAndRunLoop(test_data1, arraysize(test_data1)); 376 OverwriteMtabAndRunLoop(test_data1, arraysize(test_data1));
363 377
364 // Attach |kDevice3| to |kMountPointB|. 378 // Attach |kDevice3| to |kMountPointB|.
365 // |kDevice1| is inaccessible at its most recent mount point, so it is 379 // |kDevice1| is inaccessible at its most recent mount point, so it is
366 // detached and unavailable, even though it is still accessible via 380 // detached and unavailable, even though it is still accessible via
367 // |kMountPointA|. 381 // |kMountPointA|.
368 // kDevice1 -> kMountPointA 382 // kDevice1 -> kMountPointA
369 // kDevice2 -> kMountPointB 383 // kDevice2 -> kMountPointB
370 // kDevice1 -> kMountPointB 384 // kDevice1 -> kMountPointB
371 // kDevice3 -> kMountPointB 385 // kDevice3 -> kMountPointB
372 MtabTestData test_data2[] = { 386 MtabTestData test_data2[] = {
373 MtabTestData(kDevice3, test_path_b.value(), kValidFS), 387 MtabTestData(kDevice3, test_path_b.value(), kValidFS),
374 }; 388 };
375 EXPECT_CALL(observer(), OnMediaDeviceDetached(0)).Times(1); 389 EXPECT_CALL(observer(), OnMediaDeviceDetached(0)).Times(1);
376 EXPECT_CALL(observer(), OnMediaDeviceAttached(1, kDevice3, test_path_b)) 390 EXPECT_CALL(observer(),
391 OnMediaDeviceAttached(1,
392 kDevice3,
393 base::SystemMonitor::TYPE_PATH,
394 test_path_b_str16))
377 .Times(1); 395 .Times(1);
378 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2)); 396 AppendToMtabAndRunLoop(test_data2, arraysize(test_data2));
379 397
380 // Detach all devices. 398 // Detach all devices.
381 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _)).Times(0); 399 EXPECT_CALL(observer(), OnMediaDeviceAttached(_, _, _, _)).Times(0);
382 EXPECT_CALL(observer(), OnMediaDeviceDetached(1)).Times(1); 400 EXPECT_CALL(observer(), OnMediaDeviceDetached(1)).Times(1);
383 WriteEmptyMtabAndRunLoop(); 401 WriteEmptyMtabAndRunLoop();
384 } 402 }
385 403
386 } // namespace 404 } // namespace
387 405
388 } // namespace chrome 406 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698