volume_manager_unittest.cc revision 58537e28ecd584eab876aee8be7156509866d23a
18b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen// Copyright 2013 The Chromium Authors. All rights reserved. 28b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen// Use of this source code is governed by a BSD-style license that can be 38b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen// found in the LICENSE file. 48b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 54ee451de366474b9c228b4e5fa573795a715216dChris Lattner#include "chrome/browser/chromeos/file_manager/volume_manager.h" 64ee451de366474b9c228b4e5fa573795a715216dChris Lattner 78b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include <string> 88b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include <vector> 98b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 108b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include "base/basictypes.h" 118b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include "base/prefs/pref_service.h" 128b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include "chrome/browser/chromeos/file_manager/fake_disk_mount_manager.h" 138b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include "chrome/browser/chromeos/file_manager/volume_manager_observer.h" 148b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include "chrome/common/pref_names.h" 158b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include "chrome/test/base/testing_profile.h" 168b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include "chromeos/dbus/fake_power_manager_client.h" 178b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include "chromeos/disks/disk_mount_manager.h" 188b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include "content/public/test/test_browser_thread_bundle.h" 198b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen#include "testing/gtest/include/gtest/gtest.h" 20851ba39dab544ad986f150aec9573add9d978397Chris Lattner 218b477ed579794ba6d76915d56b3f448a7dd20120Owen Andersonnamespace file_manager { 2246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksennamespace { 231ae6135fa37eb061499d079b9b33dc82dcc1283fGordon Henriksen 24851ba39dab544ad986f150aec9573add9d978397Chris Lattnerclass LoggingObserver : public VolumeManagerObserver { 252a9c671a51126def8020870103316e6aedc73edfGordon Henriksen public: 26da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen struct Event { 27e2435da8abe5ca62c7f08f29c242b6b98e0ec7afGordon Henriksen enum EventType { 288b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen DISK_ADDED, 29da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen DISK_REMOVED, 30ae9f3a3b7c915f725aef5a7250e88eaeddda03c6Anton Korobeynikov DEVICE_ADDED, 318b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen DEVICE_REMOVED, 328b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen VOLUME_MOUNTED, 338b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen VOLUME_UNMOUNTED, 348b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen FORMAT_STARTED, 35da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen FORMAT_COMPLETED, 36da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen } type; 37da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 38da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen // Available on DEVICE_ADDED, DEVICE_REMOVED, VOLUME_MOUNTED, 39da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen // VOLUME_UNMOUNTED, FORMAT_STARTED and FORMAT_COMPLETED. 40da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen std::string device_path; 41da1435f86ebc9886dd7704294e01d192d79e069cGordon Henriksen 428b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson // Available on DISK_ADDED. 438b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson bool mounting; 448b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson 458b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson // Available on VOLUME_MOUNTED and VOLUME_UNMOUNTED. 468b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson chromeos::MountError mount_error; 478b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson 48c70e62110b7e165ab8f04c38ffd97f905dcda95dOwen Anderson // Available on VOLUME_MOUNTED. 49c70e62110b7e165ab8f04c38ffd97f905dcda95dOwen Anderson bool is_remounting; 50c70e62110b7e165ab8f04c38ffd97f905dcda95dOwen Anderson 51c70e62110b7e165ab8f04c38ffd97f905dcda95dOwen Anderson // Available on FORMAT_STARTED and FORMAT_COMPLETED. 528b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson bool success; 538b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson }; 548b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson 558b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson LoggingObserver() {} 568b477ed579794ba6d76915d56b3f448a7dd20120Owen Anderson virtual ~LoggingObserver() {} 578b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 588b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen const std::vector<Event>& events() const { return events_; } 59c8897d9c2f9fcee6061a2c2d380028269026a836Owen Anderson 60c8897d9c2f9fcee6061a2c2d380028269026a836Owen Anderson // VolumeManagerObserver overrides. 61c8897d9c2f9fcee6061a2c2d380028269026a836Owen Anderson virtual void OnDiskAdded(const chromeos::disks::DiskMountManager::Disk& disk, 62c8897d9c2f9fcee6061a2c2d380028269026a836Owen Anderson bool mounting) OVERRIDE { 63c8897d9c2f9fcee6061a2c2d380028269026a836Owen Anderson Event event; 64c8897d9c2f9fcee6061a2c2d380028269026a836Owen Anderson event.type = Event::DISK_ADDED; 6531895e73591d3c9ceae731a1274c8f56194b9616Owen Anderson event.device_path = disk.device_path(); // Keep only device_path. 668b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen event.mounting = mounting; 678b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen events_.push_back(event); 688b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen } 698b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 708b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen virtual void OnDiskRemoved( 718b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen const chromeos::disks::DiskMountManager::Disk& disk) OVERRIDE { 72a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen Event event; 73a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen event.type = Event::DISK_REMOVED; 74a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen event.device_path = disk.device_path(); // Keep only device_path. 75a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen events_.push_back(event); 76a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen } 77a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen 78a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen virtual void OnDeviceAdded(const std::string& device_path) OVERRIDE { 79a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen Event event; 80a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen event.type = Event::DEVICE_ADDED; 81a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen event.device_path = device_path; 82a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen events_.push_back(event); 83a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen } 84a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen 85a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen virtual void OnDeviceRemoved(const std::string& device_path) OVERRIDE { 86a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen Event event; 87a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen event.type = Event::DEVICE_REMOVED; 88a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen event.device_path = device_path; 89a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen events_.push_back(event); 90a353ffa7e556bfd2864474911174da691117f691Gordon Henriksen } 918b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 928b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen virtual void OnVolumeMounted(chromeos::MountError error_code, 938b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen const VolumeInfo& volume_info, 948b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen bool is_remounting) OVERRIDE { 9546abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen Event event; 9646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen event.type = Event::VOLUME_MOUNTED; 9746abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen event.device_path = volume_info.source_path.AsUTF8Unsafe(); 9846abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen event.mount_error = error_code; 9946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen event.is_remounting = is_remounting; 10046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen events_.push_back(event); 10146abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen } 10246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen 10346abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen virtual void OnVolumeUnmounted(chromeos::MountError error_code, 104e4840bc611f8260065d3879a412ea3b501550995Chris Lattner const VolumeInfo& volume_info) OVERRIDE { 105e4840bc611f8260065d3879a412ea3b501550995Chris Lattner Event event; 106e4840bc611f8260065d3879a412ea3b501550995Chris Lattner event.type = Event::VOLUME_UNMOUNTED; 107e4840bc611f8260065d3879a412ea3b501550995Chris Lattner event.device_path = volume_info.source_path.AsUTF8Unsafe(); 108e4840bc611f8260065d3879a412ea3b501550995Chris Lattner event.mount_error = error_code; 109af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen events_.push_back(event); 110af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen } 111af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen 112af59b105bb3f9a31f1812e470eb9db28a8a1b491Gordon Henriksen virtual void OnFormatStarted( 1138b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen const std::string& device_path, bool success) OVERRIDE { 1148b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen Event event; 1158b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen event.type = Event::FORMAT_STARTED; 1168b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen event.device_path = device_path; 1178b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen event.success = success; 1188b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen events_.push_back(event); 1198b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen } 1208b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 1218b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen virtual void OnFormatCompleted( 1228b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen const std::string& device_path, bool success) OVERRIDE { 1238b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen Event event; 12416c1f44d91211a225497062ea508d58fd25085a9Gordon Henriksen event.type = Event::FORMAT_COMPLETED; 12516c1f44d91211a225497062ea508d58fd25085a9Gordon Henriksen event.device_path = device_path; 12616c1f44d91211a225497062ea508d58fd25085a9Gordon Henriksen event.success = success; 12716c1f44d91211a225497062ea508d58fd25085a9Gordon Henriksen events_.push_back(event); 12816c1f44d91211a225497062ea508d58fd25085a9Gordon Henriksen } 1298b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 13081a788176ecf158432af2b208b0a85321e5ec74aGordon Henriksen private: 1318b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen std::vector<Event> events_; 1328b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 1338b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen DISALLOW_COPY_AND_ASSIGN(LoggingObserver); 13446abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen}; 1358b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 1368b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen} // namespace 1378b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 1388b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksenclass VolumeManagerTest : public testing::Test { 1398b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen protected: 14016c1f44d91211a225497062ea508d58fd25085a9Gordon Henriksen VolumeManagerTest() { 14116c1f44d91211a225497062ea508d58fd25085a9Gordon Henriksen } 14216c1f44d91211a225497062ea508d58fd25085a9Gordon Henriksen virtual ~VolumeManagerTest() { 14316c1f44d91211a225497062ea508d58fd25085a9Gordon Henriksen } 14416c1f44d91211a225497062ea508d58fd25085a9Gordon Henriksen 1458b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen virtual void SetUp() OVERRIDE { 1468b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen power_manager_client_.reset(new chromeos::FakePowerManagerClient); 1478b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen disk_mount_manager_.reset(new FakeDiskMountManager); 14881a788176ecf158432af2b208b0a85321e5ec74aGordon Henriksen profile_.reset(new TestingProfile); 14981a788176ecf158432af2b208b0a85321e5ec74aGordon Henriksen volume_manager_.reset(new VolumeManager(profile_.get(), 15081a788176ecf158432af2b208b0a85321e5ec74aGordon Henriksen power_manager_client_.get(), 1518b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen disk_mount_manager_.get())); 1528b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen } 1538b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 1548b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen content::TestBrowserThreadBundle thread_bundle_; 1558b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen scoped_ptr<chromeos::FakePowerManagerClient> power_manager_client_; 1568b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen scoped_ptr<FakeDiskMountManager> disk_mount_manager_; 1578b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen scoped_ptr<TestingProfile> profile_; 1588b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen scoped_ptr<VolumeManager> volume_manager_; 1598b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen}; 1608b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 1618b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenTEST_F(VolumeManagerTest, OnDiskEvent_Hidden) { 16246abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LoggingObserver observer; 1638b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen volume_manager_->AddObserver(&observer); 1648b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 1658b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen const bool kIsHidden = true; 16646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen const chromeos::disks::DiskMountManager::Disk kDisk( 1678b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen "device1", "", "", "", "", "", "", "", "", "", "", "", 1688b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen chromeos::DEVICE_TYPE_UNKNOWN, 0, false, false, false, false, kIsHidden); 1698b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 17046abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen volume_manager_->OnDiskEvent( 1718b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen chromeos::disks::DiskMountManager::DISK_ADDED, &kDisk); 1728b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen EXPECT_EQ(0U, observer.events().size()); 1738b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 1748b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen volume_manager_->OnDiskEvent( 1758b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen chromeos::disks::DiskMountManager::DISK_REMOVED, &kDisk); 1768b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen EXPECT_EQ(0U, observer.events().size()); 1778b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 1788b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen volume_manager_->OnDiskEvent( 17981a788176ecf158432af2b208b0a85321e5ec74aGordon Henriksen chromeos::disks::DiskMountManager::DISK_CHANGED, &kDisk); 18081a788176ecf158432af2b208b0a85321e5ec74aGordon Henriksen EXPECT_EQ(0U, observer.events().size()); 1818b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 1828b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen volume_manager_->RemoveObserver(&observer); 1838b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen} 1848b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 1858b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenTEST_F(VolumeManagerTest, OnDiskEvent_Added) { 1868b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen // Enable external storage. 1878b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen profile_->GetPrefs()->SetBoolean(prefs::kExternalStorageDisabled, false); 1888b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 18946abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen LoggingObserver observer; 1908b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen volume_manager_->AddObserver(&observer); 1918b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 1928b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen const chromeos::disks::DiskMountManager::Disk kEmptyDevicePathDisk( 1938b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen "", // empty device path. 1948b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen "", "", "", "", "", "", "", "", "", "", "", 1958b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen chromeos::DEVICE_TYPE_UNKNOWN, 0, false, false, false, false, false); 1968b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen volume_manager_->OnDiskEvent( 1978b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen chromeos::disks::DiskMountManager::DISK_ADDED, &kEmptyDevicePathDisk); 1988b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen EXPECT_EQ(0U, observer.events().size()); 1998b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 2008b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen const bool kHasMedia = true; 2018b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen const chromeos::disks::DiskMountManager::Disk kMediaDisk( 2028b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen "device1", "", "", "", "", "", "", "", "", "", "", "", 2038b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen chromeos::DEVICE_TYPE_UNKNOWN, 0, false, false, kHasMedia, false, false); 2048b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen volume_manager_->OnDiskEvent( 2058b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen chromeos::disks::DiskMountManager::DISK_ADDED, &kMediaDisk); 20657cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen ASSERT_EQ(1U, observer.events().size()); 2078b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen const LoggingObserver::Event& event = observer.events()[0]; 2088b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen EXPECT_EQ(LoggingObserver::Event::DISK_ADDED, event.type); 2098b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen EXPECT_EQ("device1", event.device_path); 21057cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen EXPECT_TRUE(event.mounting); 21157cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen 2128b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen ASSERT_EQ(1U, disk_mount_manager_->mount_requests().size()); 2138b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen const FakeDiskMountManager::MountRequest& mount_request = 21457cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen disk_mount_manager_->mount_requests()[0]; 2158b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen EXPECT_EQ("device1", mount_request.source_path); 2168b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen EXPECT_EQ("", mount_request.source_format); 2178b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen EXPECT_EQ("", mount_request.mount_label); 2188b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen EXPECT_EQ(chromeos::MOUNT_TYPE_DEVICE, mount_request.type); 2198b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 2208b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen volume_manager_->RemoveObserver(&observer); 2218b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen} 2228b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 2238b94a14a782867b1da1f272b6f502562d0c2a1aaGordon HenriksenTEST_F(VolumeManagerTest, OnDiskEvent_AddedNonMounting) { 2248b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen // Enable external storage. 2258b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen profile_->GetPrefs()->SetBoolean(prefs::kExternalStorageDisabled, false); 22657cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen 22757cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen // Device which is already mounted. 22857cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen { 22957cebeec7ba08b55f29f5bf98ad0a3a17e9d0c71Gordon Henriksen LoggingObserver observer; 2308b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen volume_manager_->AddObserver(&observer); 2318b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 2328b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen const bool kHasMedia = true; 2338b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen const chromeos::disks::DiskMountManager::Disk kMountedMediaDisk( 2348b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen "device1", "mounted", "", "", "", "", "", "", "", "", "", "", 2358b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen chromeos::DEVICE_TYPE_UNKNOWN, 0, false, false, 23616c1f44d91211a225497062ea508d58fd25085a9Gordon Henriksen kHasMedia, false, false); 23716c1f44d91211a225497062ea508d58fd25085a9Gordon Henriksen volume_manager_->OnDiskEvent( 2388b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen chromeos::disks::DiskMountManager::DISK_ADDED, &kMountedMediaDisk); 23916c1f44d91211a225497062ea508d58fd25085a9Gordon Henriksen ASSERT_EQ(1U, observer.events().size()); 2408b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen const LoggingObserver::Event& event = observer.events()[0]; 2418b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen EXPECT_EQ(LoggingObserver::Event::DISK_ADDED, event.type); 2428b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen EXPECT_EQ("device1", event.device_path); 243dc1ce7bdc6e32e7a4c4a110caa32834730183c1bGordon Henriksen EXPECT_FALSE(event.mounting); 2441cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen 2451cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen ASSERT_EQ(0U, disk_mount_manager_->mount_requests().size()); 2461cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen 2471cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen volume_manager_->RemoveObserver(&observer); 2481cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen } 2491cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen 2501cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen // Device without media. 2511cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen { 2521cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen LoggingObserver observer; 2531cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen volume_manager_->AddObserver(&observer); 2541cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen 2551cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen const bool kWithoutMedia = false; 2561cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen const chromeos::disks::DiskMountManager::Disk kNoMediaDisk( 2571cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen "device1", "", "", "", "", "", "", "", "", "", "", "", 2581cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen chromeos::DEVICE_TYPE_UNKNOWN, 0, false, false, 2591cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen kWithoutMedia, false, false); 2601cf08fddc7413076dedad58dbb8d8d67e69a490fGordon Henriksen volume_manager_->OnDiskEvent( 2618b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen chromeos::disks::DiskMountManager::DISK_ADDED, &kNoMediaDisk); 2628b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen ASSERT_EQ(1U, observer.events().size()); 2638b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen const LoggingObserver::Event& event = observer.events()[0]; 2648b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen EXPECT_EQ(LoggingObserver::Event::DISK_ADDED, event.type); 2658b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen EXPECT_EQ("device1", event.device_path); 26646abf91f7378fb7bb118d66fe6d69b5d3af1e9d5Gordon Henriksen EXPECT_FALSE(event.mounting); 2678b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 2688b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen ASSERT_EQ(0U, disk_mount_manager_->mount_requests().size()); 2698b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 2708b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen volume_manager_->RemoveObserver(&observer); 2718b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen } 2728b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 2738b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen // External storage is disabled. 2748b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen { 2758b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen profile_->GetPrefs()->SetBoolean(prefs::kExternalStorageDisabled, true); 2768b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 2778b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen LoggingObserver observer; 27888cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen volume_manager_->AddObserver(&observer); 27988cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen 28088cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen const bool kHasMedia = true; 28188cc699942f7f972ef9bc3afa1df0a44d059e1d8Gordon Henriksen const chromeos::disks::DiskMountManager::Disk kMediaDisk( 2822a9c671a51126def8020870103316e6aedc73edfGordon Henriksen "device1", "", "", "", "", "", "", "", "", "", "", "", 2832a9c671a51126def8020870103316e6aedc73edfGordon Henriksen chromeos::DEVICE_TYPE_UNKNOWN, 0, false, false, 2842a9c671a51126def8020870103316e6aedc73edfGordon Henriksen kHasMedia, false, false); 2852a9c671a51126def8020870103316e6aedc73edfGordon Henriksen volume_manager_->OnDiskEvent( 2862a9c671a51126def8020870103316e6aedc73edfGordon Henriksen chromeos::disks::DiskMountManager::DISK_ADDED, &kMediaDisk); 2872a9c671a51126def8020870103316e6aedc73edfGordon Henriksen ASSERT_EQ(1U, observer.events().size()); 2882a9c671a51126def8020870103316e6aedc73edfGordon Henriksen const LoggingObserver::Event& event = observer.events()[0]; 2892a9c671a51126def8020870103316e6aedc73edfGordon Henriksen EXPECT_EQ(LoggingObserver::Event::DISK_ADDED, event.type); 2902a9c671a51126def8020870103316e6aedc73edfGordon Henriksen EXPECT_EQ("device1", event.device_path); 2912a9c671a51126def8020870103316e6aedc73edfGordon Henriksen EXPECT_FALSE(event.mounting); 2922a9c671a51126def8020870103316e6aedc73edfGordon Henriksen 2938b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen ASSERT_EQ(0U, disk_mount_manager_->mount_requests().size()); 2948b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 295e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen volume_manager_->RemoveObserver(&observer); 2968b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen } 2978b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen} 2988b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 299e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenTEST_F(VolumeManagerTest, OnDiskEvent_Removed) { 3008b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen LoggingObserver observer; 3018b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen volume_manager_->AddObserver(&observer); 3028b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 3038b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen const chromeos::disks::DiskMountManager::Disk kMountedDisk( 3048b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen "device1", "mount_path", "", "", "", "", "", "", "", "", "", "", 3058b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen chromeos::DEVICE_TYPE_UNKNOWN, 0, false, false, false, false, false); 3068b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen volume_manager_->OnDiskEvent( 307344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen chromeos::disks::DiskMountManager::DISK_REMOVED, &kMountedDisk); 308344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen 309344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen ASSERT_EQ(1U, observer.events().size()); 310344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen const LoggingObserver::Event& event = observer.events()[0]; 3118b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen EXPECT_EQ(LoggingObserver::Event::DISK_REMOVED, event.type); 3128b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen EXPECT_EQ("device1", event.device_path); 3138b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 3148b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen ASSERT_EQ(1U, disk_mount_manager_->unmount_requests().size()); 3158b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen const FakeDiskMountManager::UnmountRequest& unmount_request = 3168b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen disk_mount_manager_->unmount_requests()[0]; 317344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen EXPECT_EQ("mount_path", unmount_request.mount_path); 318344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen EXPECT_EQ(chromeos::UNMOUNT_OPTIONS_LAZY, unmount_request.options); 319344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen 320344be5fbecec9908bab611eafeae0549ba3be6d7Gordon Henriksen volume_manager_->RemoveObserver(&observer); 321e4840bc611f8260065d3879a412ea3b501550995Chris Lattner} 322e4840bc611f8260065d3879a412ea3b501550995Chris Lattner 323e4840bc611f8260065d3879a412ea3b501550995Chris LattnerTEST_F(VolumeManagerTest, OnDiskEvent_RemovedNotMounted) { 324e4840bc611f8260065d3879a412ea3b501550995Chris Lattner LoggingObserver observer; 3258b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen volume_manager_->AddObserver(&observer); 3268b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 327e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen const chromeos::disks::DiskMountManager::Disk kNotMountedDisk( 328e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen "device1", "", "", "", "", "", "", "", "", "", "", "", 3298b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen chromeos::DEVICE_TYPE_UNKNOWN, 0, false, false, false, false, false); 3308b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen volume_manager_->OnDiskEvent( 3318b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen chromeos::disks::DiskMountManager::DISK_REMOVED, &kNotMountedDisk); 332e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen 333e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen ASSERT_EQ(1U, observer.events().size()); 334e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen const LoggingObserver::Event& event = observer.events()[0]; 335e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen EXPECT_EQ(LoggingObserver::Event::DISK_REMOVED, event.type); 336e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen EXPECT_EQ("device1", event.device_path); 337e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen 338e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen ASSERT_EQ(0U, disk_mount_manager_->unmount_requests().size()); 339e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen 340e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen volume_manager_->RemoveObserver(&observer); 341e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen} 342e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen 343e62a8a353c3b21b551c00b9025800d3352e5349eGordon HenriksenTEST_F(VolumeManagerTest, OnDiskEvent_Changed) { 344e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen // Changed event is just ignored. 345e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen LoggingObserver observer; 346e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen volume_manager_->AddObserver(&observer); 347e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen 348e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen const chromeos::disks::DiskMountManager::Disk kDisk( 34923a98551ab65eeb8fe5019df8b7db4891582a4bdDale Johannesen "device1", "", "", "", "", "", "", "", "", "", "", "", 35023a98551ab65eeb8fe5019df8b7db4891582a4bdDale Johannesen chromeos::DEVICE_TYPE_UNKNOWN, 0, false, false, false, false, false); 35123a98551ab65eeb8fe5019df8b7db4891582a4bdDale Johannesen volume_manager_->OnDiskEvent( 352eb9c8e1e3fd81607f8aa71f2b8b1592d6d333337Chris Lattner chromeos::disks::DiskMountManager::DISK_CHANGED, &kDisk); 353e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen 354e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen EXPECT_EQ(0U, observer.events().size()); 355e62a8a353c3b21b551c00b9025800d3352e5349eGordon Henriksen EXPECT_EQ(0U, disk_mount_manager_->mount_requests().size()); 356eb9c8e1e3fd81607f8aa71f2b8b1592d6d333337Chris Lattner EXPECT_EQ(0U, disk_mount_manager_->unmount_requests().size()); 3578b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 3588b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen volume_manager_->RemoveObserver(&observer); 3598b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen} 3608b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 361e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenTEST_F(VolumeManagerTest, OnDeviceEvent_Added) { 362e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen LoggingObserver observer; 3638b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen volume_manager_->AddObserver(&observer); 3648b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 3658b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen volume_manager_->OnDeviceEvent( 3668b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen chromeos::disks::DiskMountManager::DEVICE_ADDED, "device1"); 3678b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 3688b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen ASSERT_EQ(1U, observer.events().size()); 369e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen const LoggingObserver::Event& event = observer.events()[0]; 370e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen EXPECT_EQ(LoggingObserver::Event::DEVICE_ADDED, event.type); 3718b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen EXPECT_EQ("device1", event.device_path); 3728b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 3738b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen volume_manager_->RemoveObserver(&observer); 3748b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen} 3758b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 376e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon HenriksenTEST_F(VolumeManagerTest, OnDeviceEvent_Removed) { 377e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen LoggingObserver observer; 3788b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen volume_manager_->AddObserver(&observer); 3798b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen 3808b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen volume_manager_->OnDeviceEvent( 3818b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen chromeos::disks::DiskMountManager::DEVICE_REMOVED, "device1"); 382e3b989d4a4ba47f77d5d38c35ff17e9673d9f87bGordon Henriksen 3838b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen ASSERT_EQ(1U, observer.events().size()); 3848b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen const LoggingObserver::Event& event = observer.events()[0]; 3858b94a14a782867b1da1f272b6f502562d0c2a1aaGordon Henriksen EXPECT_EQ(LoggingObserver::Event::DEVICE_REMOVED, event.type); 3864647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ("device1", event.device_path); 3874647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 3884647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->RemoveObserver(&observer); 389ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands} 390ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands 391ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan SandsTEST_F(VolumeManagerTest, OnDeviceEvent_Scanned) { 392ef854af5bd231ae0c059eb4f07d13352d2a50a9dDuncan Sands LoggingObserver observer; 3934647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->AddObserver(&observer); 3944647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 3954647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->OnDeviceEvent( 3964647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen chromeos::disks::DiskMountManager::DEVICE_SCANNED, "device1"); 3974647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 3984647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen // SCANNED event is just ignored. 3994647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ(0U, observer.events().size()); 4004647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 4014647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->RemoveObserver(&observer); 4024647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen} 4034647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 4044647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenTEST_F(VolumeManagerTest, OnMountEvent_Mounting) { 4054647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen LoggingObserver observer; 4064647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->AddObserver(&observer); 4074647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 4084647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen const chromeos::disks::DiskMountManager::MountPointInfo kMountPoint( 4094647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen "device1", 4104647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen "mount1", 4114647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen chromeos::MOUNT_TYPE_DEVICE, 4124647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen chromeos::disks::MOUNT_CONDITION_NONE); 4134647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 4144647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->OnMountEvent(chromeos::disks::DiskMountManager::MOUNTING, 4154647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen chromeos::MOUNT_ERROR_NONE, 4164647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen kMountPoint); 4174647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 4184647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen ASSERT_EQ(1U, observer.events().size()); 4194647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen const LoggingObserver::Event& event = observer.events()[0]; 4204647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ(LoggingObserver::Event::VOLUME_MOUNTED, event.type); 4214647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ("device1", event.device_path); 4224647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ(chromeos::MOUNT_ERROR_NONE, event.mount_error); 4234647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_FALSE(event.is_remounting); 4244647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 4254647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->RemoveObserver(&observer); 4264647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen} 4274647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 4284647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenTEST_F(VolumeManagerTest, OnMountEvent_Remounting) { 4294647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen scoped_ptr<chromeos::disks::DiskMountManager::Disk> disk( 4304647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen new chromeos::disks::DiskMountManager::Disk( 4314647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen "device1", "", "", "", "", "", "", "", "", "", "uuid1", "", 4324647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen chromeos::DEVICE_TYPE_UNKNOWN, 0, 4334647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen false, false, false, false, false)); 4344647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen disk_mount_manager_->AddDiskForTest(disk.release()); 4354647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen disk_mount_manager_->MountPath( 4364647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen "device1", "", "", chromeos::MOUNT_TYPE_DEVICE); 4374647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 4384647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen // Emulate system suspend and then resume. 4394647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen { 4404647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen power_manager_client_->SendSuspendImminent(); 4414647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen power_manager::SuspendState state; 4424647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen state.set_type(power_manager::SuspendState_Type_SUSPEND_TO_MEMORY); 4434647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen state.set_wall_time(0); 4444647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen power_manager_client_->SendSuspendStateChanged(state); 4454647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen state.set_type(power_manager::SuspendState_Type_RESUME); 4464647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen power_manager_client_->SendSuspendStateChanged(state); 4474647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 4484647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen // After resume, the device is unmounted and then mounted. 4494647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen disk_mount_manager_->UnmountPath( 4504647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen "device1", chromeos::UNMOUNT_OPTIONS_NONE, 4514647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen chromeos::disks::DiskMountManager::UnmountPathCallback()); 4524647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen disk_mount_manager_->MountPath( 4534647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen "device1", "", "", chromeos::MOUNT_TYPE_DEVICE); 4544647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen } 4554647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 4564647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen LoggingObserver observer; 4574647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->AddObserver(&observer); 4584647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 4594647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen const chromeos::disks::DiskMountManager::MountPointInfo kMountPoint( 4604647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen "device1", 4614647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen "mount1", 4624647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen chromeos::MOUNT_TYPE_DEVICE, 4634647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen chromeos::disks::MOUNT_CONDITION_NONE); 4644647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 4654647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->OnMountEvent(chromeos::disks::DiskMountManager::MOUNTING, 4664647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen chromeos::MOUNT_ERROR_NONE, 4674647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen kMountPoint); 4684647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 4694647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen ASSERT_EQ(1U, observer.events().size()); 4704647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen const LoggingObserver::Event& event = observer.events()[0]; 4714647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ(LoggingObserver::Event::VOLUME_MOUNTED, event.type); 4724647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ("device1", event.device_path); 4734647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ(chromeos::MOUNT_ERROR_NONE, event.mount_error); 4744647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_TRUE(event.is_remounting); 4754647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 4764647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->RemoveObserver(&observer); 4774647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen} 4784647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 4794647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenTEST_F(VolumeManagerTest, OnMountEvent_Unmounting) { 4804647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen LoggingObserver observer; 4814647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->AddObserver(&observer); 4824647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 4834647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen const chromeos::disks::DiskMountManager::MountPointInfo kMountPoint( 4844647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen "device1", 4854647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen "mount1", 4864647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen chromeos::MOUNT_TYPE_DEVICE, 4874647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen chromeos::disks::MOUNT_CONDITION_NONE); 4884647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 4894647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->OnMountEvent(chromeos::disks::DiskMountManager::UNMOUNTING, 4904647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen chromeos::MOUNT_ERROR_NONE, 4914647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen kMountPoint); 4924647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 4934647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen ASSERT_EQ(1U, observer.events().size()); 4944647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen const LoggingObserver::Event& event = observer.events()[0]; 4954647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ(LoggingObserver::Event::VOLUME_UNMOUNTED, event.type); 4964647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ("device1", event.device_path); 4974647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ(chromeos::MOUNT_ERROR_NONE, event.mount_error); 4984647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 4994647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->RemoveObserver(&observer); 5004647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen} 5014647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 5024647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenTEST_F(VolumeManagerTest, OnFormatEvent_Started) { 5034647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen LoggingObserver observer; 5044647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->AddObserver(&observer); 5054647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 5064647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->OnFormatEvent( 5074647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen chromeos::disks::DiskMountManager::FORMAT_STARTED, 5084647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen chromeos::FORMAT_ERROR_NONE, 5094647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen "device1"); 5104647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 5114647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen ASSERT_EQ(1U, observer.events().size()); 5124647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen const LoggingObserver::Event& event = observer.events()[0]; 5134647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ(LoggingObserver::Event::FORMAT_STARTED, event.type); 5144647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ("device1", event.device_path); 5154647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_TRUE(event.success); 5164647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 5174647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->RemoveObserver(&observer); 5184647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen} 5194647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 5204647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenTEST_F(VolumeManagerTest, OnFormatEvent_StartFailed) { 5214647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen LoggingObserver observer; 5224647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->AddObserver(&observer); 5234647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 5244647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->OnFormatEvent( 5254647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen chromeos::disks::DiskMountManager::FORMAT_STARTED, 5264647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen chromeos::FORMAT_ERROR_UNKNOWN, 5274647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen "device1"); 5284647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 5294647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen ASSERT_EQ(1U, observer.events().size()); 5304647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen const LoggingObserver::Event& event = observer.events()[0]; 5314647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ(LoggingObserver::Event::FORMAT_STARTED, event.type); 5324647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ("device1", event.device_path); 5334647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_FALSE(event.success); 5344647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 5354647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->RemoveObserver(&observer); 5364647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen} 5374647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 5384647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenTEST_F(VolumeManagerTest, OnFormatEvent_Completed) { 5394647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen LoggingObserver observer; 5404647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->AddObserver(&observer); 5414647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 5424647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->OnFormatEvent( 5434647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen chromeos::disks::DiskMountManager::FORMAT_COMPLETED, 5444647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen chromeos::FORMAT_ERROR_NONE, 5454647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen "device1"); 5464647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 5474647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen ASSERT_EQ(1U, observer.events().size()); 5484647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen const LoggingObserver::Event& event = observer.events()[0]; 5494647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ(LoggingObserver::Event::FORMAT_COMPLETED, event.type); 5504647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ("device1", event.device_path); 5514647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_TRUE(event.success); 5524647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 5534647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen // When "format" is successfully done, VolumeManager requests to mount it. 5544647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen ASSERT_EQ(1U, disk_mount_manager_->mount_requests().size()); 5554647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen const FakeDiskMountManager::MountRequest& mount_request = 5564647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen disk_mount_manager_->mount_requests()[0]; 5574647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ("device1", mount_request.source_path); 5584647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ("", mount_request.source_format); 5594647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ("", mount_request.mount_label); 5604647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ(chromeos::MOUNT_TYPE_DEVICE, mount_request.type); 5614647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 5624647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->RemoveObserver(&observer); 5634647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen} 5644647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 5654647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon HenriksenTEST_F(VolumeManagerTest, OnFormatEvent_CompletedFailed) { 5664647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen LoggingObserver observer; 5674647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->AddObserver(&observer); 5684647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 5694647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->OnFormatEvent( 5704647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen chromeos::disks::DiskMountManager::FORMAT_COMPLETED, 5714647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen chromeos::FORMAT_ERROR_UNKNOWN, 5724647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen "device1"); 5734647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 5744647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen ASSERT_EQ(1U, observer.events().size()); 5754647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen const LoggingObserver::Event& event = observer.events()[0]; 5764647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ(LoggingObserver::Event::FORMAT_COMPLETED, event.type); 5774647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ("device1", event.device_path); 5784647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_FALSE(event.success); 5794647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 5804647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen EXPECT_EQ(0U, disk_mount_manager_->mount_requests().size()); 5814647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 5824647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen volume_manager_->RemoveObserver(&observer); 5834647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen} 5844647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen 5854647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen} // namespace file_manager 5864647569fe7706e76135a08ca0e5f90a447ccc5b4Gordon Henriksen