| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 #include "chrome/browser/chromeos/file_manager/mounted_disk_monitor.h" | 5 #include "chrome/browser/chromeos/file_manager/mounted_disk_monitor.h" |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "base/stl_util.h" | |
| 11 #include "chrome/browser/chromeos/file_manager/fake_disk_mount_manager.h" | |
| 12 #include "chromeos/dbus/fake_power_manager_client.h" | 10 #include "chromeos/dbus/fake_power_manager_client.h" |
| 13 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
| 14 | 12 |
| 15 namespace file_manager { | 13 namespace file_manager { |
| 16 namespace { | 14 namespace { |
| 17 | 15 |
| 18 // Creates a fake disk with |device_path| and |fs_uuid|. | 16 // Creates a fake disk with |device_path| and |fs_uuid|. |
| 19 scoped_ptr<chromeos::disks::DiskMountManager::Disk> CreateDisk( | 17 scoped_ptr<chromeos::disks::DiskMountManager::Disk> CreateDisk( |
| 20 const std::string& device_path, | 18 const std::string& device_path, |
| 21 const std::string& fs_uuid) { | 19 const std::string& fs_uuid) { |
| 22 return make_scoped_ptr( | 20 return make_scoped_ptr( |
| 23 new chromeos::disks::DiskMountManager::Disk( | 21 new chromeos::disks::DiskMountManager::Disk( |
| 24 device_path, "", "", "", "", "", "", "", "", "", fs_uuid, "", | 22 device_path, "", "", "", "", "", "", "", "", "", fs_uuid, "", |
| 25 chromeos::DEVICE_TYPE_USB, 0, false, false, false, false, false)); | 23 chromeos::DEVICE_TYPE_USB, 0, false, false, false, false, false)); |
| 26 } | 24 } |
| 27 | 25 |
| 28 } // namespace | 26 } // namespace |
| 29 | 27 |
| 30 class MountedDiskMonitorTest : public testing::Test { | 28 class MountedDiskMonitorTest : public testing::Test { |
| 31 protected: | 29 protected: |
| 32 MountedDiskMonitorTest() { | |
| 33 } | |
| 34 | |
| 35 virtual ~MountedDiskMonitorTest() { | |
| 36 } | |
| 37 | |
| 38 virtual void SetUp() OVERRIDE { | 30 virtual void SetUp() OVERRIDE { |
| 39 power_manager_client_.reset(new chromeos::FakePowerManagerClient); | 31 power_manager_client_.reset(new chromeos::FakePowerManagerClient); |
| 40 disk_mount_manager_.reset(new FakeDiskMountManager); | |
| 41 mounted_disk_monitor_.reset(new MountedDiskMonitor( | 32 mounted_disk_monitor_.reset(new MountedDiskMonitor( |
| 42 power_manager_client_.get(), | 33 power_manager_client_.get())); |
| 43 disk_mount_manager_.get())); | |
| 44 mounted_disk_monitor_->set_resuming_time_span_for_testing( | 34 mounted_disk_monitor_->set_resuming_time_span_for_testing( |
| 45 base::TimeDelta::FromSeconds(0)); | 35 base::TimeDelta::FromSeconds(0)); |
| 46 } | 36 } |
| 47 | 37 |
| 48 base::MessageLoop message_loop_; | 38 base::MessageLoop message_loop_; |
| 49 scoped_ptr<chromeos::FakePowerManagerClient> power_manager_client_; | 39 scoped_ptr<chromeos::FakePowerManagerClient> power_manager_client_; |
| 50 scoped_ptr<FakeDiskMountManager> disk_mount_manager_; | |
| 51 scoped_ptr<MountedDiskMonitor> mounted_disk_monitor_; | 40 scoped_ptr<MountedDiskMonitor> mounted_disk_monitor_; |
| 52 }; | 41 }; |
| 53 | 42 |
| 54 // Makes sure that just mounting and unmounting repeatedly doesn't affect to | 43 // Makes sure that just mounting and unmounting repeatedly doesn't affect to |
| 55 // "remounting" state. | 44 // "remounting" state. |
| 56 TEST_F(MountedDiskMonitorTest, WithoutSuspend) { | 45 TEST_F(MountedDiskMonitorTest, WithoutSuspend) { |
| 57 scoped_ptr<chromeos::disks::DiskMountManager::Disk> disk( | 46 scoped_ptr<chromeos::disks::DiskMountManager::Disk> disk( |
| 58 CreateDisk("removable_device1", "uuid1")); | 47 CreateDisk("removable_device1", "uuid1")); |
| 59 | 48 |
| 60 chromeos::disks::DiskMountManager::Disk* disk_ptr = disk.get(); | |
| 61 | |
| 62 const chromeos::disks::DiskMountManager::MountPointInfo kMountPoint( | 49 const chromeos::disks::DiskMountManager::MountPointInfo kMountPoint( |
| 63 "removable_device1", "/tmp/removable_device1", | 50 "removable_device1", "/tmp/removable_device1", |
| 64 chromeos::MOUNT_TYPE_DEVICE, chromeos::disks::MOUNT_CONDITION_NONE); | 51 chromeos::MOUNT_TYPE_DEVICE, chromeos::disks::MOUNT_CONDITION_NONE); |
| 65 | 52 |
| 66 ASSERT_TRUE(disk_mount_manager_->AddDiskForTest(disk.release())); | |
| 67 | |
| 68 // First, the disk is not remounting. | 53 // First, the disk is not remounting. |
| 69 EXPECT_FALSE(mounted_disk_monitor_->DiskIsRemounting(*disk_ptr)); | 54 EXPECT_FALSE(mounted_disk_monitor_->DiskIsRemounting(*disk)); |
| 70 | 55 |
| 71 // Simple mounting and unmounting doesn't affect remounting state. | 56 // Simple mounting and unmounting doesn't affect remounting state. |
| 72 mounted_disk_monitor_->OnMountEvent( | 57 mounted_disk_monitor_->OnMountEvent( |
| 73 chromeos::disks::DiskMountManager::MOUNTING, | 58 chromeos::disks::DiskMountManager::MOUNTING, |
| 74 chromeos::MOUNT_ERROR_NONE, | 59 chromeos::MOUNT_ERROR_NONE, |
| 75 kMountPoint); | 60 kMountPoint, |
| 76 EXPECT_FALSE(mounted_disk_monitor_->DiskIsRemounting(*disk_ptr)); | 61 disk.get()); |
| 62 EXPECT_FALSE(mounted_disk_monitor_->DiskIsRemounting(*disk)); |
| 77 | 63 |
| 78 mounted_disk_monitor_->OnMountEvent( | 64 mounted_disk_monitor_->OnMountEvent( |
| 79 chromeos::disks::DiskMountManager::UNMOUNTING, | 65 chromeos::disks::DiskMountManager::UNMOUNTING, |
| 80 chromeos::MOUNT_ERROR_NONE, | 66 chromeos::MOUNT_ERROR_NONE, |
| 81 kMountPoint); | 67 kMountPoint, |
| 82 EXPECT_FALSE(mounted_disk_monitor_->DiskIsRemounting(*disk_ptr)); | 68 disk.get()); |
| 69 EXPECT_FALSE(mounted_disk_monitor_->DiskIsRemounting(*disk)); |
| 83 | 70 |
| 84 // Mounting again also should not affect remounting state. | 71 // Mounting again also should not affect remounting state. |
| 85 mounted_disk_monitor_->OnMountEvent( | 72 mounted_disk_monitor_->OnMountEvent( |
| 86 chromeos::disks::DiskMountManager::MOUNTING, | 73 chromeos::disks::DiskMountManager::MOUNTING, |
| 87 chromeos::MOUNT_ERROR_NONE, | 74 chromeos::MOUNT_ERROR_NONE, |
| 88 kMountPoint); | 75 kMountPoint, |
| 89 EXPECT_FALSE(mounted_disk_monitor_->DiskIsRemounting(*disk_ptr)); | 76 disk.get()); |
| 77 EXPECT_FALSE(mounted_disk_monitor_->DiskIsRemounting(*disk)); |
| 90 } | 78 } |
| 91 | 79 |
| 92 // Makes sure that the unmounting after system resuming triggers the | 80 // Makes sure that the unmounting after system resuming triggers the |
| 93 // "remounting" state, then after some period, the state is reset. | 81 // "remounting" state, then after some period, the state is reset. |
| 94 TEST_F(MountedDiskMonitorTest, SuspendAndResume) { | 82 TEST_F(MountedDiskMonitorTest, SuspendAndResume) { |
| 95 scoped_ptr<chromeos::disks::DiskMountManager::Disk> disk1( | 83 scoped_ptr<chromeos::disks::DiskMountManager::Disk> disk1( |
| 96 CreateDisk("removable_device1", "uuid1")); | 84 CreateDisk("removable_device1", "uuid1")); |
| 97 scoped_ptr<chromeos::disks::DiskMountManager::Disk> disk2( | 85 scoped_ptr<chromeos::disks::DiskMountManager::Disk> disk2( |
| 98 CreateDisk("removable_device2", "uuid2")); | 86 CreateDisk("removable_device2", "uuid2")); |
| 99 | 87 |
| 100 chromeos::disks::DiskMountManager::Disk* disk1_ptr = disk1.get(); | |
| 101 chromeos::disks::DiskMountManager::Disk* disk2_ptr = disk2.get(); | |
| 102 | |
| 103 const chromeos::disks::DiskMountManager::MountPointInfo kMountPoint1( | 88 const chromeos::disks::DiskMountManager::MountPointInfo kMountPoint1( |
| 104 "removable_device1", "/tmp/removable_device1", | 89 "removable_device1", "/tmp/removable_device1", |
| 105 chromeos::MOUNT_TYPE_DEVICE, chromeos::disks::MOUNT_CONDITION_NONE); | 90 chromeos::MOUNT_TYPE_DEVICE, chromeos::disks::MOUNT_CONDITION_NONE); |
| 106 const chromeos::disks::DiskMountManager::MountPointInfo kMountPoint2( | 91 const chromeos::disks::DiskMountManager::MountPointInfo kMountPoint2( |
| 107 "removable_device2", "/tmp/removable_device2", | 92 "removable_device2", "/tmp/removable_device2", |
| 108 chromeos::MOUNT_TYPE_DEVICE, chromeos::disks::MOUNT_CONDITION_NONE); | 93 chromeos::MOUNT_TYPE_DEVICE, chromeos::disks::MOUNT_CONDITION_NONE); |
| 109 | 94 |
| 110 ASSERT_TRUE(disk_mount_manager_->AddDiskForTest(disk1.release())); | |
| 111 ASSERT_TRUE(disk_mount_manager_->AddDiskForTest(disk2.release())); | |
| 112 | |
| 113 // Mount |disk1|. | 95 // Mount |disk1|. |
| 114 mounted_disk_monitor_->OnMountEvent( | 96 mounted_disk_monitor_->OnMountEvent( |
| 115 chromeos::disks::DiskMountManager::MOUNTING, | 97 chromeos::disks::DiskMountManager::MOUNTING, |
| 116 chromeos::MOUNT_ERROR_NONE, | 98 chromeos::MOUNT_ERROR_NONE, |
| 117 kMountPoint1); | 99 kMountPoint1, |
| 118 EXPECT_FALSE(mounted_disk_monitor_->DiskIsRemounting(*disk1_ptr)); | 100 disk1.get()); |
| 101 EXPECT_FALSE(mounted_disk_monitor_->DiskIsRemounting(*disk1)); |
| 119 | 102 |
| 120 // Pseudo system suspend and resume. | 103 // Pseudo system suspend and resume. |
| 121 mounted_disk_monitor_->SuspendImminent(); | 104 mounted_disk_monitor_->SuspendImminent(); |
| 122 mounted_disk_monitor_->SuspendDone(base::TimeDelta::FromSeconds(0)); | 105 mounted_disk_monitor_->SuspendDone(base::TimeDelta::FromSeconds(0)); |
| 123 | 106 |
| 124 // On system resume, we expect unmount and then mount immediately. | 107 // On system resume, we expect unmount and then mount immediately. |
| 125 // During the phase, we expect the disk is remounting. | 108 // During the phase, we expect the disk is remounting. |
| 126 mounted_disk_monitor_->OnMountEvent( | 109 mounted_disk_monitor_->OnMountEvent( |
| 127 chromeos::disks::DiskMountManager::UNMOUNTING, | 110 chromeos::disks::DiskMountManager::UNMOUNTING, |
| 128 chromeos::MOUNT_ERROR_NONE, | 111 chromeos::MOUNT_ERROR_NONE, |
| 129 kMountPoint1); | 112 kMountPoint1, |
| 130 EXPECT_TRUE(mounted_disk_monitor_->DiskIsRemounting(*disk1_ptr)); | 113 disk1.get()); |
| 114 EXPECT_TRUE(mounted_disk_monitor_->DiskIsRemounting(*disk1)); |
| 131 | 115 |
| 132 mounted_disk_monitor_->OnMountEvent( | 116 mounted_disk_monitor_->OnMountEvent( |
| 133 chromeos::disks::DiskMountManager::MOUNTING, | 117 chromeos::disks::DiskMountManager::MOUNTING, |
| 134 chromeos::MOUNT_ERROR_NONE, | 118 chromeos::MOUNT_ERROR_NONE, |
| 135 kMountPoint1); | 119 kMountPoint1, |
| 136 EXPECT_TRUE(mounted_disk_monitor_->DiskIsRemounting(*disk1_ptr)); | 120 disk1.get()); |
| 121 EXPECT_TRUE(mounted_disk_monitor_->DiskIsRemounting(*disk1)); |
| 137 | 122 |
| 138 // New disk should not be "remounting." | 123 // New disk should not be "remounting." |
| 139 EXPECT_FALSE(mounted_disk_monitor_->DiskIsRemounting(*disk2_ptr)); | 124 EXPECT_FALSE(mounted_disk_monitor_->DiskIsRemounting(*disk2)); |
| 140 mounted_disk_monitor_->OnMountEvent( | 125 mounted_disk_monitor_->OnMountEvent( |
| 141 chromeos::disks::DiskMountManager::MOUNTING, | 126 chromeos::disks::DiskMountManager::MOUNTING, |
| 142 chromeos::MOUNT_ERROR_NONE, | 127 chromeos::MOUNT_ERROR_NONE, |
| 143 kMountPoint2); | 128 kMountPoint2, |
| 144 EXPECT_FALSE(mounted_disk_monitor_->DiskIsRemounting(*disk2_ptr)); | 129 disk2.get()); |
| 130 EXPECT_FALSE(mounted_disk_monitor_->DiskIsRemounting(*disk2)); |
| 145 | 131 |
| 146 // After certain period, remounting state should be cleared. | 132 // After certain period, remounting state should be cleared. |
| 147 base::RunLoop().RunUntilIdle(); // Emulate time passage. | 133 base::RunLoop().RunUntilIdle(); // Emulate time passage. |
| 148 EXPECT_FALSE(mounted_disk_monitor_->DiskIsRemounting(*disk1_ptr)); | 134 EXPECT_FALSE(mounted_disk_monitor_->DiskIsRemounting(*disk1)); |
| 149 EXPECT_FALSE(mounted_disk_monitor_->DiskIsRemounting(*disk2_ptr)); | 135 EXPECT_FALSE(mounted_disk_monitor_->DiskIsRemounting(*disk2)); |
| 150 } | 136 } |
| 151 | 137 |
| 152 } // namespace file_manager | 138 } // namespace file_manager |
| OLD | NEW |