OLD | NEW |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |