| 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 |