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
3 // found in the LICENSE file.
5 #include "base/stl_util.h"
6 #include "chrome/browser/chromeos/file_manager/drive_test_util.h"
7 #include "chrome/browser/extensions/extension_apitest.h"
8 #include "chromeos/dbus/cros_disks_client.h"
9 #include "chromeos/disks/mock_disk_mount_manager.h"
12 using ::testing::ReturnRef;
14 using chromeos::disks::DiskMountManager;
19 const char* system_path;
20 const char* file_path;
21 const char* device_label;
22 const char* drive_label;
23 const char* vendor_id;
24 const char* vendor_name;
25 const char* product_id;
26 const char* product_name;
28 const char* system_path_prefix;
29 chromeos::DeviceType device_type;
38 struct TestMountPoint {
39 std::string source_path;
40 std::string mount_path;
41 chromeos::MountType mount_type;
42 chromeos::disks::MountCondition mount_condition;
44 // -1 if there is no disk info.
48 TestDiskInfo kTestDisks[] = {
59 "system_path_prefix1",
60 chromeos::DEVICE_TYPE_USB,
78 "system_path_prefix2",
79 chromeos::DEVICE_TYPE_MOBILE,
97 "system_path_prefix3",
98 chromeos::DEVICE_TYPE_OPTICAL_DISC,
110 class FileBrowserPrivateApiTest : public ExtensionApiTest {
112 FileBrowserPrivateApiTest()
113 : disk_mount_manager_mock_(NULL) {
117 virtual ~FileBrowserPrivateApiTest() {
118 DCHECK(!disk_mount_manager_mock_);
119 STLDeleteValues(&volumes_);
122 // ExtensionApiTest override
123 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
124 ExtensionApiTest::SetUpInProcessBrowserTestFixture();
126 disk_mount_manager_mock_ = new chromeos::disks::MockDiskMountManager;
127 chromeos::disks::DiskMountManager::InitializeForTesting(
128 disk_mount_manager_mock_);
129 disk_mount_manager_mock_->SetupDefaultReplies();
131 // OVERRIDE FindDiskBySourcePath mock function.
132 ON_CALL(*disk_mount_manager_mock_, FindDiskBySourcePath(_)).
133 WillByDefault(Invoke(
134 this, &FileBrowserPrivateApiTest::FindVolumeBySourcePath));
137 // ExtensionApiTest override
138 virtual void TearDownInProcessBrowserTestFixture() OVERRIDE {
139 chromeos::disks::DiskMountManager::Shutdown();
140 disk_mount_manager_mock_ = NULL;
142 ExtensionApiTest::TearDownInProcessBrowserTestFixture();
146 void InitMountPoints() {
147 const TestMountPoint kTestMountPoints[] = {
150 chromeos::CrosDisksClient::GetRemovableDiskMountPoint().AppendASCII(
151 "mount_path1").AsUTF8Unsafe(),
152 chromeos::MOUNT_TYPE_DEVICE,
153 chromeos::disks::MOUNT_CONDITION_NONE,
158 chromeos::CrosDisksClient::GetRemovableDiskMountPoint().AppendASCII(
159 "mount_path2").AsUTF8Unsafe(),
160 chromeos::MOUNT_TYPE_DEVICE,
161 chromeos::disks::MOUNT_CONDITION_NONE,
166 chromeos::CrosDisksClient::GetRemovableDiskMountPoint().AppendASCII(
167 "mount_path3").AsUTF8Unsafe(),
168 chromeos::MOUNT_TYPE_DEVICE,
169 chromeos::disks::MOUNT_CONDITION_NONE,
174 chromeos::CrosDisksClient::GetArchiveMountPoint().AppendASCII(
175 "archive_mount_path").AsUTF8Unsafe(),
176 chromeos::MOUNT_TYPE_ARCHIVE,
177 chromeos::disks::MOUNT_CONDITION_NONE,
182 for (size_t i = 0; i < arraysize(kTestMountPoints); i++) {
183 mount_points_.insert(DiskMountManager::MountPointMap::value_type(
184 kTestMountPoints[i].mount_path,
185 DiskMountManager::MountPointInfo(kTestMountPoints[i].source_path,
186 kTestMountPoints[i].mount_path,
187 kTestMountPoints[i].mount_type,
188 kTestMountPoints[i].mount_condition)
190 int disk_info_index = kTestMountPoints[i].disk_info_index;
191 if (kTestMountPoints[i].disk_info_index >= 0) {
192 EXPECT_GT(arraysize(kTestDisks), static_cast<size_t>(disk_info_index));
193 if (static_cast<size_t>(disk_info_index) >= arraysize(kTestDisks))
196 volumes_.insert(DiskMountManager::DiskMap::value_type(
197 kTestMountPoints[i].source_path,
198 new DiskMountManager::Disk(
199 kTestMountPoints[i].source_path,
200 kTestMountPoints[i].mount_path,
201 kTestDisks[disk_info_index].system_path,
202 kTestDisks[disk_info_index].file_path,
203 kTestDisks[disk_info_index].device_label,
204 kTestDisks[disk_info_index].drive_label,
205 kTestDisks[disk_info_index].vendor_id,
206 kTestDisks[disk_info_index].vendor_name,
207 kTestDisks[disk_info_index].product_id,
208 kTestDisks[disk_info_index].product_name,
209 kTestDisks[disk_info_index].fs_uuid,
210 kTestDisks[disk_info_index].system_path_prefix,
211 kTestDisks[disk_info_index].device_type,
212 kTestDisks[disk_info_index].size_in_bytes,
213 kTestDisks[disk_info_index].is_parent,
214 kTestDisks[disk_info_index].is_read_only,
215 kTestDisks[disk_info_index].has_media,
216 kTestDisks[disk_info_index].on_boot_device,
217 kTestDisks[disk_info_index].is_hidden
224 const DiskMountManager::Disk* FindVolumeBySourcePath(
225 const std::string& source_path) {
226 DiskMountManager::DiskMap::const_iterator volume_it =
227 volumes_.find(source_path);
228 return (volume_it == volumes_.end()) ? NULL : volume_it->second;
232 chromeos::disks::MockDiskMountManager* disk_mount_manager_mock_;
233 DiskMountManager::DiskMap volumes_;
234 DiskMountManager::MountPointMap mount_points_;
237 IN_PROC_BROWSER_TEST_F(FileBrowserPrivateApiTest, Mount) {
238 file_manager::test_util::WaitUntilDriveMountPointIsAdded(
239 browser()->profile());
241 // We will call fileBrowserPrivate.unmountVolume once. To test that method, we
242 // check that UnmountPath is really called with the same value.
243 EXPECT_CALL(*disk_mount_manager_mock_, UnmountPath(_, _, _))
245 EXPECT_CALL(*disk_mount_manager_mock_,
247 chromeos::CrosDisksClient::GetArchiveMountPoint().AppendASCII(
248 "archive_mount_path").AsUTF8Unsafe(),
249 chromeos::UNMOUNT_OPTIONS_NONE, _)).Times(1);
251 EXPECT_CALL(*disk_mount_manager_mock_, disks())
252 .WillRepeatedly(ReturnRef(volumes_));
254 EXPECT_CALL(*disk_mount_manager_mock_, mount_points())
255 .WillRepeatedly(ReturnRef(mount_points_));
257 ASSERT_TRUE(RunComponentExtensionTest("file_browser/mount_test"))