Index: chromeos/disks/disk_mount_manager_unittest.cc |
diff --git a/chromeos/disks/disk_mount_manager_unittest.cc b/chromeos/disks/disk_mount_manager_unittest.cc |
index 3e9cdfecf8fc7a58096a34872c6c13441763772b..8fe8d04ef5d2f39e78f91a2ce82c5191196bc619 100644 |
--- a/chromeos/disks/disk_mount_manager_unittest.cc |
+++ b/chromeos/disks/disk_mount_manager_unittest.cc |
@@ -20,6 +20,7 @@ using chromeos::FakeCrosDisksClient; |
using testing::_; |
using testing::Field; |
using testing::InSequence; |
+using testing::InvokeWithoutArgs; |
namespace { |
@@ -75,34 +76,56 @@ const TestDiskInfo kTestDisks[] = { |
"/device/prefix", |
chromeos::DEVICE_TYPE_USB, |
1073741824, // size in bytes |
- false, // is parent |
- false, // is read only |
- true, // has media |
- false, // is on boot device |
- true, // is on removable device |
- false // is hidden |
+ false, // is parent |
+ false, // is read only |
+ true, // has media |
+ false, // is on boot device |
+ true, // is on removable device |
+ false // is hidden |
+ }, |
+ { |
+ "/device/source_path2", |
+ "/device/mount_path2", |
+ "/device/prefix/system_path2", |
+ "/device/file_path2", |
+ "/device/device_label2", |
+ "/device/drive_label2", |
+ "/device/vendor_id2", |
+ "/device/vendor_name2", |
+ "/device/product_id2", |
+ "/device/product_name2", |
+ "/device/fs_uuid2", |
+ "/device/prefix2", |
+ chromeos::DEVICE_TYPE_SD, |
+ 1073741824, // size in bytes |
+ false, // is parent |
+ false, // is read only |
+ true, // has media |
+ false, // is on boot device |
+ true, // is on removable device |
+ false // is hidden |
}, |
{ |
kReadOnlyDeviceSource, |
kReadOnlyMountpath, |
- "/device/prefix/system_path_2", |
- "/device/file_path_2", |
- "/device/device_label_2", |
- "/device/drive_label_2", |
- "/device/vendor_id_2", |
- "/device/vendor_name_2", |
- "/device/product_id_2", |
- "/device/product_name_2", |
- "/device/fs_uuid_2", |
+ "/device/prefix/system_path_3", |
+ "/device/file_path_3", |
+ "/device/device_label_3", |
+ "/device/drive_label_3", |
+ "/device/vendor_id_3", |
+ "/device/vendor_name_3", |
+ "/device/product_id_3", |
+ "/device/product_name_3", |
+ "/device/fs_uuid_3", |
"/device/prefix", |
chromeos::DEVICE_TYPE_USB, |
1073741824, // size in bytes |
- false, // is parent |
- true, // is read only |
- true, // has media |
- false, // is on boot device |
- true, // is on removable device |
- false // is hidden |
+ false, // is parent |
+ true, // is read only |
+ true, // has media |
+ false, // is on boot device |
+ true, // is on removable device |
+ false // is hidden |
}, |
}; |
@@ -147,6 +170,14 @@ class MockDiskMountManagerObserver : public DiskMountManager::Observer { |
const std::string& device_path)); |
}; |
+// Expect |is_read_only| value of a disk object keyed by |source_path|. |
+void ExpectDiskReadOnly(const DiskMountManager* manager, |
+ const std::string& source_path, |
+ bool expected) { |
+ EXPECT_EQ(expected, |
+ manager->disks().find(source_path)->second->is_read_only()); |
+} |
+ |
class DiskMountManagerTest : public testing::Test { |
public: |
DiskMountManagerTest() {} |
@@ -620,4 +651,49 @@ TEST_F(DiskMountManagerTest, Format_ConsecutiveFormatCalls) { |
chromeos::FORMAT_ERROR_NONE, "/device/source_path"); |
} |
+TEST_F(DiskMountManagerTest, MountPath_RecordAccessMode) { |
+ DiskMountManager* manager = DiskMountManager::GetInstance(); |
+ const std::string kSourcePath1 = "/device/source_path"; |
+ const std::string kSourcePath2 = "/device/source_path2"; |
+ const std::string kSourceFormat = std::string(); |
+ const std::string kMountLabel = std::string(); // N/A for MOUNT_TYPE_DEVICE |
+ // For MountCompleted. Must be non-empty strings. |
+ const std::string kMountPath1 = "/media/foo"; |
+ const std::string kMountPath2 = "/media/bar"; |
+ |
+ EXPECT_CALL( |
+ observer_, |
+ OnMountEvent( |
+ DiskMountManager::MOUNTING, chromeos::MOUNT_ERROR_NONE, |
+ Field(&DiskMountManager::MountPointInfo::mount_path, kMountPath1))); |
+ // Observers should see updated disks_ object reflecting mount option. |
+ EXPECT_CALL( |
+ observer_, |
+ OnMountEvent( |
+ DiskMountManager::MOUNTING, chromeos::MOUNT_ERROR_NONE, |
+ Field(&DiskMountManager::MountPointInfo::mount_path, kMountPath2))) |
+ .WillOnce(InvokeWithoutArgs( |
+ [&]() { ExpectDiskReadOnly(manager, kSourcePath2, true); })); |
satorux1
2016/08/24 22:05:50
hmm, this is hard to read... Please add some comme
|
+ |
+ manager->MountPath(kSourcePath1, kSourceFormat, std::string(), |
+ chromeos::MOUNT_TYPE_DEVICE, |
+ chromeos::MOUNT_ACCESS_MODE_READ_WRITE); |
+ manager->MountPath(kSourcePath2, kSourceFormat, std::string(), |
+ chromeos::MOUNT_TYPE_DEVICE, |
+ chromeos::MOUNT_ACCESS_MODE_READ_ONLY); |
+ // Simulate cros_disks reporting mount completed. |
+ fake_cros_disks_client_->SendMountCompletedEvent( |
+ chromeos::MOUNT_ERROR_NONE, kSourcePath1, chromeos::MOUNT_TYPE_DEVICE, |
+ kMountPath1); |
+ fake_cros_disks_client_->SendMountCompletedEvent( |
+ chromeos::MOUNT_ERROR_NONE, kSourcePath2, chromeos::MOUNT_TYPE_DEVICE, |
+ kMountPath2); |
+ |
+ const DiskMountManager::DiskMap& disks = manager->disks(); |
+ ASSERT_GT(disks.count(kSourcePath1), 0U); |
+ EXPECT_FALSE(disks.find(kSourcePath1)->second->is_read_only()); |
+ ASSERT_GT(disks.count(kSourcePath2), 0U); |
+ EXPECT_TRUE(disks.find(kSourcePath2)->second->is_read_only()); |
+} |
+ |
} // namespace |