• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
4 
5 #include "chromeos/disks/mock_disk_mount_manager.h"
6 
7 #include <utility>
8 
9 #include "base/message_loop/message_loop.h"
10 #include "base/stl_util.h"
11 #include "base/strings/string_util.h"
12 
13 using testing::_;
14 using testing::AnyNumber;
15 using testing::Invoke;
16 using testing::ReturnRef;
17 
18 namespace chromeos {
19 namespace disks {
20 
21 namespace {
22 
23 const char* kTestSystemPath = "/this/system/path";
24 const char* kTestSystemPathPrefix = "/this/system";
25 const char* kTestDevicePath = "/this/device/path";
26 const char* kTestMountPath = "/media/foofoo";
27 const char* kTestFilePath = "/this/file/path";
28 const char* kTestDeviceLabel = "A label";
29 const char* kTestDriveLabel = "Another label";
30 const char* kTestVendorId = "0123";
31 const char* kTestVendorName = "A vendor";
32 const char* kTestProductId = "abcd";
33 const char* kTestProductName = "A product";
34 const char* kTestUuid = "FFFF-FFFF";
35 
36 }  // namespace
37 
AddObserverInternal(DiskMountManager::Observer * observer)38 void MockDiskMountManager::AddObserverInternal(
39     DiskMountManager::Observer* observer) {
40   observers_.AddObserver(observer);
41 }
42 
RemoveObserverInternal(DiskMountManager::Observer * observer)43 void MockDiskMountManager::RemoveObserverInternal(
44     DiskMountManager::Observer* observer) {
45   observers_.RemoveObserver(observer);
46 }
47 
MockDiskMountManager()48 MockDiskMountManager::MockDiskMountManager() {
49   ON_CALL(*this, AddObserver(_))
50       .WillByDefault(Invoke(this, &MockDiskMountManager::AddObserverInternal));
51   ON_CALL(*this, RemoveObserver(_))
52       .WillByDefault(Invoke(this,
53                             &MockDiskMountManager::RemoveObserverInternal));
54   ON_CALL(*this, disks())
55       .WillByDefault(Invoke(this, &MockDiskMountManager::disksInternal));
56   ON_CALL(*this, mount_points())
57       .WillByDefault(Invoke(this, &MockDiskMountManager::mountPointsInternal));
58   ON_CALL(*this, FindDiskBySourcePath(_))
59       .WillByDefault(Invoke(
60           this, &MockDiskMountManager::FindDiskBySourcePathInternal));
61   ON_CALL(*this, EnsureMountInfoRefreshed(_))
62       .WillByDefault(Invoke(
63           this, &MockDiskMountManager::EnsureMountInfoRefreshedInternal));
64 }
65 
~MockDiskMountManager()66 MockDiskMountManager::~MockDiskMountManager() {
67   STLDeleteContainerPairSecondPointers(disks_.begin(), disks_.end());
68   disks_.clear();
69 }
70 
NotifyDeviceInsertEvents()71 void MockDiskMountManager::NotifyDeviceInsertEvents() {
72   scoped_ptr<DiskMountManager::Disk> disk1(new DiskMountManager::Disk(
73       std::string(kTestDevicePath),
74       std::string(),
75       std::string(kTestSystemPath),
76       std::string(kTestFilePath),
77       std::string(),
78       std::string(kTestDriveLabel),
79       std::string(kTestVendorId),
80       std::string(kTestVendorName),
81       std::string(kTestProductId),
82       std::string(kTestProductName),
83       std::string(kTestUuid),
84       std::string(kTestSystemPathPrefix),
85       DEVICE_TYPE_USB,
86       4294967295U,
87       false,  // is_parent
88       false,  // is_read_only
89       true,  // has_media
90       false,  // on_boot_device
91       true,  // on_removable_device
92       false));  // is_hidden
93 
94   disks_.clear();
95   disks_.insert(std::pair<std::string, DiskMountManager::Disk*>(
96       std::string(kTestDevicePath), disk1.get()));
97 
98   // Device Added
99   NotifyDeviceChanged(DEVICE_ADDED, kTestSystemPath);
100 
101   // Disk Added
102   NotifyDiskChanged(DISK_ADDED, disk1.get());
103 
104   // Disk Changed
105   scoped_ptr<DiskMountManager::Disk> disk2(new DiskMountManager::Disk(
106       std::string(kTestDevicePath),
107       std::string(kTestMountPath),
108       std::string(kTestSystemPath),
109       std::string(kTestFilePath),
110       std::string(kTestDeviceLabel),
111       std::string(kTestDriveLabel),
112       std::string(kTestVendorId),
113       std::string(kTestVendorName),
114       std::string(kTestProductId),
115       std::string(kTestProductName),
116       std::string(kTestUuid),
117       std::string(kTestSystemPathPrefix),
118       DEVICE_TYPE_MOBILE,
119       1073741824,
120       false,  // is_parent
121       false,  // is_read_only
122       true,  // has_media
123       false,  // on_boot_device
124       true,  // on_removable_device
125       false));  // is_hidden
126   disks_.clear();
127   disks_.insert(std::pair<std::string, DiskMountManager::Disk*>(
128       std::string(kTestDevicePath), disk2.get()));
129   NotifyDiskChanged(DISK_CHANGED, disk2.get());
130 }
131 
NotifyDeviceRemoveEvents()132 void MockDiskMountManager::NotifyDeviceRemoveEvents() {
133   scoped_ptr<DiskMountManager::Disk> disk(new DiskMountManager::Disk(
134       std::string(kTestDevicePath),
135       std::string(kTestMountPath),
136       std::string(kTestSystemPath),
137       std::string(kTestFilePath),
138       std::string(kTestDeviceLabel),
139       std::string(kTestDriveLabel),
140       std::string(kTestVendorId),
141       std::string(kTestVendorName),
142       std::string(kTestProductId),
143       std::string(kTestProductName),
144       std::string(kTestUuid),
145       std::string(kTestSystemPathPrefix),
146       DEVICE_TYPE_SD,
147       1073741824,
148       false,  // is_parent
149       false,  // is_read_only
150       true,  // has_media
151       false,  // on_boot_device
152       true,  // on_removable_device
153       false));  // is_hidden
154   disks_.clear();
155   disks_.insert(std::pair<std::string, DiskMountManager::Disk*>(
156       std::string(kTestDevicePath), disk.get()));
157   NotifyDiskChanged(DISK_REMOVED, disk.get());
158 }
159 
SetupDefaultReplies()160 void MockDiskMountManager::SetupDefaultReplies() {
161   EXPECT_CALL(*this, AddObserver(_))
162       .Times(AnyNumber());
163   EXPECT_CALL(*this, RemoveObserver(_))
164       .Times(AnyNumber());
165   EXPECT_CALL(*this, disks())
166       .WillRepeatedly(ReturnRef(disks_));
167   EXPECT_CALL(*this, mount_points())
168       .WillRepeatedly(ReturnRef(mount_points_));
169   EXPECT_CALL(*this, FindDiskBySourcePath(_))
170       .Times(AnyNumber());
171   EXPECT_CALL(*this, EnsureMountInfoRefreshed(_))
172       .Times(AnyNumber());
173   EXPECT_CALL(*this, MountPath(_, _, _, _))
174       .Times(AnyNumber());
175   EXPECT_CALL(*this, UnmountPath(_, _, _))
176       .Times(AnyNumber());
177   EXPECT_CALL(*this, FormatMountedDevice(_))
178       .Times(AnyNumber());
179   EXPECT_CALL(*this, UnmountDeviceRecursively(_, _))
180       .Times(AnyNumber());
181 }
182 
CreateDiskEntryForMountDevice(const DiskMountManager::MountPointInfo & mount_info,const std::string & device_id,const std::string & device_label,const std::string & vendor_name,const std::string & product_name,DeviceType device_type,uint64 total_size_in_bytes,bool is_parent,bool has_media,bool on_boot_device,bool on_removable_device)183 void MockDiskMountManager::CreateDiskEntryForMountDevice(
184     const DiskMountManager::MountPointInfo& mount_info,
185     const std::string& device_id,
186     const std::string& device_label,
187     const std::string& vendor_name,
188     const std::string& product_name,
189     DeviceType device_type,
190     uint64 total_size_in_bytes,
191     bool is_parent,
192     bool has_media,
193     bool on_boot_device,
194     bool on_removable_device) {
195   Disk* disk = new DiskMountManager::Disk(mount_info.source_path,
196                                           mount_info.mount_path,
197                                           std::string(),  // system_path
198                                           mount_info.source_path,
199                                           device_label,
200                                           std::string(),  // drive_label
201                                           std::string(),  // vendor_id
202                                           vendor_name,
203                                           std::string(),  // product_id
204                                           product_name,
205                                           device_id,      // fs_uuid
206                                           std::string(),  // system_path_prefix
207                                           device_type,
208                                           total_size_in_bytes,
209                                           is_parent,
210                                           false,  // is_read_only
211                                           has_media,
212                                           on_boot_device,
213                                           on_removable_device,
214                                           false);  // is_hidden
215   DiskMountManager::DiskMap::iterator it = disks_.find(mount_info.source_path);
216   if (it == disks_.end()) {
217     disks_.insert(std::make_pair(std::string(mount_info.source_path), disk));
218   } else {
219     delete it->second;
220     it->second = disk;
221   }
222 }
223 
RemoveDiskEntryForMountDevice(const DiskMountManager::MountPointInfo & mount_info)224 void MockDiskMountManager::RemoveDiskEntryForMountDevice(
225     const DiskMountManager::MountPointInfo& mount_info) {
226   DiskMountManager::DiskMap::iterator it = disks_.find(mount_info.source_path);
227   if (it != disks_.end()) {
228     delete it->second;
229     disks_.erase(it);
230   }
231 }
232 
233 const DiskMountManager::MountPointMap&
mountPointsInternal() const234 MockDiskMountManager::mountPointsInternal() const {
235   return mount_points_;
236 }
237 
238 const DiskMountManager::Disk*
FindDiskBySourcePathInternal(const std::string & source_path) const239 MockDiskMountManager::FindDiskBySourcePathInternal(
240     const std::string& source_path) const {
241   DiskMap::const_iterator disk_it = disks_.find(source_path);
242   return disk_it == disks_.end() ? NULL : disk_it->second;
243 }
244 
EnsureMountInfoRefreshedInternal(const EnsureMountInfoRefreshedCallback & callback)245 void MockDiskMountManager::EnsureMountInfoRefreshedInternal(
246     const EnsureMountInfoRefreshedCallback& callback) {
247   callback.Run(true);
248 }
249 
NotifyDiskChanged(DiskEvent event,const DiskMountManager::Disk * disk)250 void MockDiskMountManager::NotifyDiskChanged(
251     DiskEvent event,
252     const DiskMountManager::Disk* disk) {
253   FOR_EACH_OBSERVER(Observer, observers_, OnDiskEvent(event, disk));
254 }
255 
NotifyDeviceChanged(DeviceEvent event,const std::string & path)256 void MockDiskMountManager::NotifyDeviceChanged(DeviceEvent event,
257                                                const std::string& path) {
258   FOR_EACH_OBSERVER(Observer, observers_, OnDeviceEvent(event, path));
259 }
260 
261 }  // namespace disks
262 }  // namespace chromeos
263