Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(135)

Unified Diff: chromeos/disks/disk_mount_manager_unittest.cc

Issue 2343593002: Revert of Add a mock class for DiskMountManagerObserver. disk_mount_manager_observer_unittests. (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 3bb583e0180d22f85934cb0101debd909e57dfc1..314f9d2ba960da25d1cfa88672eaefebfb2dc5f3 100644
--- a/chromeos/disks/disk_mount_manager_unittest.cc
+++ b/chromeos/disks/disk_mount_manager_unittest.cc
@@ -6,23 +6,22 @@
#include <stdint.h>
#include "base/bind.h"
-#include "base/memory/ptr_util.h"
#include "base/message_loop/message_loop.h"
#include "base/run_loop.h"
-#include "base/strings/stringprintf.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/fake_cros_disks_client.h"
#include "chromeos/disks/disk_mount_manager.h"
+#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
-using base::MakeUnique;
-using base::StringPrintf;
using chromeos::disks::DiskMountManager;
using chromeos::CrosDisksClient;
using chromeos::DBusThreadManager;
using chromeos::FakeCrosDisksClient;
-using chromeos::MountType;
-using chromeos::disks::MountCondition;
+using testing::_;
+using testing::Field;
+using testing::InSequence;
+using testing::InvokeWithoutArgs;
namespace {
@@ -153,259 +152,31 @@
},
};
-// Represents which function in |DiskMountManager::Observer| was invoked.
-enum ObserverEventType {
- DEVICE_EVENT, // OnDeviceEvent()
- DISK_EVENT, // OnDiskEvent()
- FORMAT_EVENT, // OnFormatEvent()
- MOUNT_EVENT // OnMountEvent()
-};
-
-// Represents every event notified to |DiskMountManager::Observer|.
-struct ObserverEvent {
- public:
- virtual ObserverEventType type() const = 0;
-};
-
-// Represents an invocation of |DiskMountManager::Observer::OnDeviceEvent()|.
-struct DeviceEvent : public ObserverEvent {
- DiskMountManager::DeviceEvent event;
- std::string device_path;
-
- DeviceEvent() {}
-
- DeviceEvent(DiskMountManager::DeviceEvent event,
- const std::string& device_path)
- : event(event), device_path(device_path) {}
-
- ObserverEventType type() const override { return DEVICE_EVENT; }
-
- bool operator==(const DeviceEvent& other) const {
- return event == other.event && device_path == other.device_path;
- }
-
- std::string DebugString() const {
- return StringPrintf("OnDeviceEvent(%d, %s)", event, device_path.c_str());
- }
-};
-
-// Represents an invocation of |DiskMountManager::Observer::OnDiskEvent()|.
-struct DiskEvent : public ObserverEvent {
- DiskMountManager::DiskEvent event;
- std::unique_ptr<DiskMountManager::Disk> disk;
-
- DiskEvent(DiskMountManager::DiskEvent event,
- const DiskMountManager::Disk& disk)
- : event(event),
- disk(std::unique_ptr<DiskMountManager::Disk>(
- new DiskMountManager::Disk(disk))) {}
-
- DiskEvent(DiskEvent&& other)
- : event(other.event), disk(std::move(other.disk)) {}
-
- ObserverEventType type() const override { return DISK_EVENT; }
-
- bool operator==(const DiskEvent& other) const {
- return event == other.event && disk == other.disk;
- }
-
- std::string DebugString() const {
- return StringPrintf("OnDiskEvent(event=%d, device_path=%s, mount_path=%s",
- event, disk->device_path().c_str(),
- disk->mount_path().c_str());
- }
-};
-
-// Represents an invocation of |DiskMountManager::Observer::OnFormatEvent()|.
-struct FormatEvent : public ObserverEvent {
- DiskMountManager::FormatEvent event;
- chromeos::FormatError error_code;
- std::string device_path;
-
- FormatEvent() {}
- FormatEvent(DiskMountManager::FormatEvent event,
- chromeos::FormatError error_code,
- const std::string& device_path)
- : event(event), error_code(error_code), device_path(device_path) {}
-
- ObserverEventType type() const override { return FORMAT_EVENT; }
-
- bool operator==(const FormatEvent& other) const {
- return event == other.event && error_code == other.error_code &&
- device_path == other.device_path;
- }
-
- std::string DebugString() const {
- return StringPrintf("OnFormatEvent(%d, %d, %s)", event, error_code,
- device_path.c_str());
- }
-};
-
-// Represents an invocation of |DiskMountManager::Observer::OnMountEvent()|.
-struct MountEvent : public ObserverEvent {
- DiskMountManager::MountEvent event;
- chromeos::MountError error_code;
- DiskMountManager::MountPointInfo mount_point;
-
- // Not passed to callback, but read by handlers. So it's captured upon
- // callback.
- std::unique_ptr<DiskMountManager::Disk> disk;
-
- MountEvent(MountEvent&& other)
- : event(other.event),
- error_code(other.error_code),
- mount_point(other.mount_point),
- disk(std::move(other.disk)) {}
- MountEvent(DiskMountManager::MountEvent event,
- chromeos::MountError error_code,
- const DiskMountManager::MountPointInfo& mount_point,
- const DiskMountManager::Disk& disk)
- : event(event),
- error_code(error_code),
- mount_point(mount_point),
- disk(new DiskMountManager::Disk(disk)) {}
-
- ObserverEventType type() const override { return MOUNT_EVENT; }
-
- bool operator==(const MountEvent& other) const;
-
- std::string DebugString() const {
- return StringPrintf("OnMountEvent(%d, %d, %s, %s, %d, %d)", event,
- error_code, mount_point.source_path.c_str(),
- mount_point.mount_path.c_str(), mount_point.mount_type,
- mount_point.mount_condition);
- }
-};
-
-// A mock |Observer| class which records all invocation of the methods invoked
-// from DiskMountManager and all the arguments passed to them.
+// Mocks DiskMountManager observer.
class MockDiskMountManagerObserver : public DiskMountManager::Observer {
public:
- MockDiskMountManagerObserver(const DiskMountManager* manager)
- : manager_(manager) {}
- ~MockDiskMountManagerObserver() override {}
-
- // Mock notify methods.
- void OnDeviceEvent(DiskMountManager::DeviceEvent event,
- const std::string& device_path) override {
- events_.push_back(MakeUnique<DeviceEvent>(event, device_path));
- }
-
- void OnDiskEvent(DiskMountManager::DiskEvent event,
- const DiskMountManager::Disk* disk) override {
- // Take a snapshot (copy) of the Disk object at the time of invocation for
- // later verification.
- events_.push_back(MakeUnique<DiskEvent>(event, *disk));
- }
-
- void OnFormatEvent(DiskMountManager::FormatEvent event,
- chromeos::FormatError error_code,
- const std::string& device_path) override {
- events_.push_back(MakeUnique<FormatEvent>(event, error_code, device_path));
- }
-
- void OnMountEvent(
- DiskMountManager::MountEvent event,
- chromeos::MountError error_code,
- const DiskMountManager::MountPointInfo& mount_point) override {
- // Take a snapshot (copy) of a Disk object at the time of invocation.
- // It can be verified later besides the arguments.
- events_.push_back(MakeUnique<MountEvent>(
- event, error_code, mount_point,
- *manager_->disks().find(mount_point.source_path)->second));
- }
-
- // Gets invocation history to be verified by testcases.
- // Verifies if the |index|th invocation is OnDeviceEvent() and returns
- // details.
- const DeviceEvent& GetDeviceEvent(size_t index) {
- DCHECK_GT(events_.size(), index);
- DCHECK_EQ(DEVICE_EVENT, events_[index]->type());
- return static_cast<const DeviceEvent&>(*events_[index]);
- }
-
- // Verifies if the |index|th invocation is OnDiskEvent() and returns details.
- const DiskEvent& GetDiskEvent(size_t index) {
- DCHECK_GT(events_.size(), index);
- DCHECK_EQ(DISK_EVENT, events_[index]->type());
- return static_cast<const DiskEvent&>(*events_[index]);
- }
-
- // Verifies if the |index|th invocation is OnFormatEvent() and returns
- // details.
- const FormatEvent& GetFormatEvent(size_t index) {
- DCHECK_GT(events_.size(), index);
- DCHECK_EQ(FORMAT_EVENT, events_[index]->type());
- return static_cast<const FormatEvent&>(*events_[index]);
- }
-
- // Verifies if the |index|th invocation is OnMountEvent() and returns details.
- const MountEvent& GetMountEvent(size_t index) {
- DCHECK_GT(events_.size(), index);
- DCHECK_EQ(MOUNT_EVENT, events_[index]->type());
- return static_cast<const MountEvent&>(*events_[index]);
- }
-
- // Returns number of callback invocations happened so far.
- size_t GetEventCount() { return events_.size(); }
-
- // Counts the number of |MountEvent| recorded so far that matches the given
- // condition.
- size_t CountMountEvents(DiskMountManager::MountEvent mount_event_type,
- chromeos::MountError error_code,
- const std::string& mount_path) {
- size_t num_matched = 0;
- for (const auto& it : events_) {
- if (it->type() != MOUNT_EVENT)
- continue;
- const MountEvent& mount_event = static_cast<const MountEvent&>(*it);
- if (mount_event.event == mount_event_type &&
- mount_event.error_code == error_code &&
- mount_event.mount_point.mount_path == mount_path)
- num_matched++;
- }
- return num_matched;
- }
-
- // Counts the number of |FormatEvent| recorded so far that matches with
- // |format_event|.
- size_t CountFormatEvents(const FormatEvent& exptected_format_event) {
- size_t num_matched = 0;
- for (const auto& it : events_) {
- if (it->type() != FORMAT_EVENT)
- continue;
- if (static_cast<const FormatEvent&>(*it) == exptected_format_event)
- num_matched++;
- }
- return num_matched;
- }
-
- private:
- // Pointer to the manager object to which this |Observer| is registered.
- const DiskMountManager* manager_;
-
- // Records all invocations.
- std::vector<std::unique_ptr<ObserverEvent>> events_;
+ virtual ~MockDiskMountManagerObserver() {}
+
+ MOCK_METHOD2(OnDiskEvent, void(DiskMountManager::DiskEvent event,
+ const DiskMountManager::Disk* disk));
+ MOCK_METHOD2(OnDeviceEvent, void(DiskMountManager::DeviceEvent event,
+ const std::string& device_path));
+ MOCK_METHOD3(OnMountEvent,
+ void(DiskMountManager::MountEvent event,
+ chromeos::MountError error_code,
+ const DiskMountManager::MountPointInfo& mount_point));
+ MOCK_METHOD3(OnFormatEvent,
+ void(DiskMountManager::FormatEvent event,
+ chromeos::FormatError error_code,
+ const std::string& device_path));
};
-// Shift operators of ostream.
-// Needed to print values in case of EXPECT_* failure in gtest.
-std::ostream& operator<<(std::ostream& stream,
- const DeviceEvent& device_event) {
- return stream << device_event.DebugString();
-}
-
-std::ostream& operator<<(std::ostream& stream, const DiskEvent& disk_event) {
- return stream << disk_event.DebugString();
-}
-
-std::ostream& operator<<(std::ostream& stream,
- const FormatEvent& format_event) {
- return stream << format_event.DebugString();
-}
-
-std::ostream& operator<<(std::ostream& stream, const MountEvent& mount_event) {
- return stream << mount_event.DebugString();
+// 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 {
@@ -425,14 +196,12 @@
InitDisksAndMountPoints();
- observer_.reset(
- new MockDiskMountManagerObserver(DiskMountManager::GetInstance()));
- DiskMountManager::GetInstance()->AddObserver(observer_.get());
+ DiskMountManager::GetInstance()->AddObserver(&observer_);
}
// Shuts down dbus thread manager and disk moutn manager used in the test.
void TearDown() override {
- DiskMountManager::GetInstance()->RemoveObserver(observer_.get());
+ DiskMountManager::GetInstance()->RemoveObserver(&observer_);
DiskMountManager::Shutdown();
DBusThreadManager::Shutdown();
}
@@ -496,38 +265,39 @@
protected:
chromeos::FakeCrosDisksClient* fake_cros_disks_client_;
- std::unique_ptr<MockDiskMountManagerObserver> observer_;
+ MockDiskMountManagerObserver observer_;
base::MessageLoopForUI message_loop_;
};
// Tests that the observer gets notified on attempt to format non existent mount
// point.
TEST_F(DiskMountManagerTest, Format_NotMounted) {
+ EXPECT_CALL(observer_, OnFormatEvent(DiskMountManager::FORMAT_COMPLETED,
+ chromeos::FORMAT_ERROR_UNKNOWN,
+ "/mount/non_existent"))
+ .Times(1);
DiskMountManager::GetInstance()->FormatMountedDevice("/mount/non_existent");
- ASSERT_EQ(1U, observer_->GetEventCount());
- EXPECT_EQ(FormatEvent(DiskMountManager::FORMAT_COMPLETED,
- chromeos::FORMAT_ERROR_UNKNOWN, "/mount/non_existent"),
- observer_->GetFormatEvent(0));
}
// Tests that the observer gets notified on attempt to format read-only mount
// point.
TEST_F(DiskMountManagerTest, Format_ReadOnly) {
+ EXPECT_CALL(observer_,
+ OnFormatEvent(DiskMountManager::FORMAT_COMPLETED,
+ chromeos::FORMAT_ERROR_DEVICE_NOT_ALLOWED,
+ kReadOnlyMountpath))
+ .Times(1);
DiskMountManager::GetInstance()->FormatMountedDevice(kReadOnlyMountpath);
- ASSERT_EQ(1U, observer_->GetEventCount());
- EXPECT_EQ(FormatEvent(DiskMountManager::FORMAT_COMPLETED,
- chromeos::FORMAT_ERROR_DEVICE_NOT_ALLOWED,
- kReadOnlyMountpath),
- observer_->GetFormatEvent(0));
}
// Tests that it is not possible to format archive mount point.
TEST_F(DiskMountManagerTest, Format_Archive) {
+ EXPECT_CALL(observer_, OnFormatEvent(DiskMountManager::FORMAT_COMPLETED,
+ chromeos::FORMAT_ERROR_UNKNOWN,
+ "/archive/source_path"))
+ .Times(1);
+
DiskMountManager::GetInstance()->FormatMountedDevice("/archive/mount_path");
- ASSERT_EQ(1U, observer_->GetEventCount());
- EXPECT_EQ(FormatEvent(DiskMountManager::FORMAT_COMPLETED,
- chromeos::FORMAT_ERROR_UNKNOWN, "/archive/source_path"),
- observer_->GetFormatEvent(0));
}
// Tests that format fails if the device cannot be unmounted.
@@ -536,6 +306,25 @@
// In this test unmount will fail, and there should be no attempt to
// format the device.
+ // Set up expectations for observer mock.
+ // Observer should be notified that unmount attempt fails and format task
+ // failed to start.
+ {
+ InSequence s;
+
+ EXPECT_CALL(observer_,
+ OnMountEvent(DiskMountManager::UNMOUNTING,
+ chromeos::MOUNT_ERROR_INTERNAL,
+ Field(&DiskMountManager::MountPointInfo::mount_path,
+ "/device/mount_path")))
+ .Times(1);
+
+ EXPECT_CALL(observer_, OnFormatEvent(DiskMountManager::FORMAT_COMPLETED,
+ chromeos::FORMAT_ERROR_UNKNOWN,
+ "/device/source_path"))
+ .Times(1);
+ }
+
fake_cros_disks_client_->MakeUnmountFail();
// Start test.
DiskMountManager::GetInstance()->FormatMountedDevice("/device/mount_path");
@@ -543,17 +332,6 @@
// Cros disks will respond asynchronoulsy, so let's drain the message loop.
base::RunLoop().RunUntilIdle();
- // Observer should be notified that unmount attempt fails and format task
- // failed to start.
- ASSERT_EQ(2U, observer_->GetEventCount());
- const MountEvent& mount_event = observer_->GetMountEvent(0);
- EXPECT_EQ(DiskMountManager::UNMOUNTING, mount_event.event);
- EXPECT_EQ(chromeos::MOUNT_ERROR_INTERNAL, mount_event.error_code);
- EXPECT_EQ("/device/mount_path", mount_event.mount_point.mount_path);
-
- EXPECT_EQ(FormatEvent(DiskMountManager::FORMAT_COMPLETED,
- chromeos::FORMAT_ERROR_UNKNOWN, "/device/source_path"),
- observer_->GetFormatEvent(1));
EXPECT_EQ(1, fake_cros_disks_client_->unmount_call_count());
EXPECT_EQ("/device/mount_path",
fake_cros_disks_client_->last_unmount_device_path());
@@ -572,24 +350,31 @@
// In this test, unmount will succeed, but call to Format method will
// fail.
+ // Set up expectations for observer mock.
+ // Observer should be notified that the device was unmounted and format task
+ // failed to start.
+ {
+ InSequence s;
+
+ EXPECT_CALL(observer_,
+ OnMountEvent(DiskMountManager::UNMOUNTING,
+ chromeos::MOUNT_ERROR_NONE,
+ Field(&DiskMountManager::MountPointInfo::mount_path,
+ "/device/mount_path")))
+ .Times(1);
+
+ EXPECT_CALL(observer_, OnFormatEvent(DiskMountManager::FORMAT_COMPLETED,
+ chromeos::FORMAT_ERROR_UNKNOWN,
+ "/device/source_path"))
+ .Times(1);
+ }
+
fake_cros_disks_client_->MakeFormatFail();
// Start the test.
DiskMountManager::GetInstance()->FormatMountedDevice("/device/mount_path");
// Cros disks will respond asynchronoulsy, so let's drain the message loop.
base::RunLoop().RunUntilIdle();
-
- // Observer should be notified that the device was unmounted and format task
- // failed to start.
- ASSERT_EQ(2U, observer_->GetEventCount());
- const MountEvent& mount_event = observer_->GetMountEvent(0);
- EXPECT_EQ(DiskMountManager::UNMOUNTING, mount_event.event);
- EXPECT_EQ(chromeos::MOUNT_ERROR_NONE, mount_event.error_code);
- EXPECT_EQ("/device/mount_path", mount_event.mount_point.mount_path);
-
- EXPECT_EQ(FormatEvent(DiskMountManager::FORMAT_COMPLETED,
- chromeos::FORMAT_ERROR_UNKNOWN, "/device/source_path"),
- observer_->GetFormatEvent(1));
EXPECT_EQ(1, fake_cros_disks_client_->unmount_call_count());
EXPECT_EQ("/device/mount_path",
@@ -612,16 +397,7 @@
// CrosDisksClient will report that the format process for the first request
// is successfully started.
- fake_cros_disks_client_->set_unmount_listener(
- base::Bind(&FakeCrosDisksClient::MakeUnmountFail,
- base::Unretained(fake_cros_disks_client_)));
- // Start the test.
- DiskMountManager::GetInstance()->FormatMountedDevice("/device/mount_path");
- DiskMountManager::GetInstance()->FormatMountedDevice("/device/mount_path");
-
- // Cros disks will respond asynchronoulsy, so let's drain the message loop.
- base::RunLoop().RunUntilIdle();
-
+ // Set up expectations for observer mock.
// The observer should get a FORMAT_STARTED event for one format request and a
// FORMAT_COMPLETED with an error code for the other format request. The
// formatting will be started only for the first request.
@@ -631,18 +407,36 @@
//
// Note that in this test the format completion signal will not be simulated,
// so the observer should not get FORMAT_COMPLETED signal.
-
- ASSERT_EQ(3U, observer_->GetEventCount());
- const MountEvent& mount_event = observer_->GetMountEvent(0);
- EXPECT_EQ(DiskMountManager::UNMOUNTING, mount_event.event);
- EXPECT_EQ(chromeos::MOUNT_ERROR_NONE, mount_event.error_code);
- EXPECT_EQ("/device/mount_path", mount_event.mount_point.mount_path);
- EXPECT_EQ(FormatEvent(DiskMountManager::FORMAT_COMPLETED,
- chromeos::FORMAT_ERROR_UNKNOWN, "/device/source_path"),
- observer_->GetFormatEvent(1));
- EXPECT_EQ(FormatEvent(DiskMountManager::FORMAT_STARTED,
- chromeos::FORMAT_ERROR_NONE, "/device/source_path"),
- observer_->GetFormatEvent(2));
+ {
+ InSequence s;
+
+ EXPECT_CALL(observer_,
+ OnMountEvent(DiskMountManager::UNMOUNTING,
+ chromeos::MOUNT_ERROR_NONE,
+ Field(&DiskMountManager::MountPointInfo::mount_path,
+ "/device/mount_path")))
+ .Times(1);
+
+ EXPECT_CALL(observer_, OnFormatEvent(DiskMountManager::FORMAT_COMPLETED,
+ chromeos::FORMAT_ERROR_UNKNOWN,
+ "/device/source_path"))
+ .Times(1);
+
+ EXPECT_CALL(observer_, OnFormatEvent(DiskMountManager::FORMAT_STARTED,
+ chromeos::FORMAT_ERROR_NONE,
+ "/device/source_path"))
+ .Times(1);
+ }
+
+ fake_cros_disks_client_->set_unmount_listener(
+ base::Bind(&FakeCrosDisksClient::MakeUnmountFail,
+ base::Unretained(fake_cros_disks_client_)));
+ // Start the test.
+ DiskMountManager::GetInstance()->FormatMountedDevice("/device/mount_path");
+ DiskMountManager::GetInstance()->FormatMountedDevice("/device/mount_path");
+
+ // Cros disks will respond asynchronoulsy, so let's drain the message loop.
+ base::RunLoop().RunUntilIdle();
EXPECT_EQ(2, fake_cros_disks_client_->unmount_call_count());
EXPECT_EQ("/device/mount_path",
@@ -659,21 +453,36 @@
EXPECT_FALSE(HasMountPoint("/device/mount_path"));
}
-// Verifies a |MountEvent| with the given condition. This function only checks
-// the |mount_path| in |MountPointInfo| to make sure to match the event with
-// preceding mount invocations.
-void VerifyMountEvent(const MountEvent& mount_event,
- DiskMountManager::MountEvent mount_event_type,
- chromeos::MountError error_code,
- const std::string& mount_path) {
- EXPECT_EQ(mount_event_type, mount_event.event);
- EXPECT_EQ(error_code, mount_event.error_code);
- EXPECT_EQ(mount_path, mount_event.mount_point.mount_path);
-}
-
// Tests the case when the format process actually starts and fails.
TEST_F(DiskMountManagerTest, Format_FormatFails) {
// Both unmount and format device cals are successful in this test.
+
+ // Set up expectations for observer mock.
+ // The observer should get notified that the device was unmounted and that
+ // formatting has started.
+ // After the formatting starts, the test will simulate failing
+ // FORMAT_COMPLETED signal, so the observer should also be notified the
+ // formatting has failed (FORMAT_COMPLETED event).
+ {
+ InSequence s;
+
+ EXPECT_CALL(observer_,
+ OnMountEvent(DiskMountManager::UNMOUNTING,
+ chromeos::MOUNT_ERROR_NONE,
+ Field(&DiskMountManager::MountPointInfo::mount_path,
+ "/device/mount_path")))
+ .Times(1);
+
+ EXPECT_CALL(observer_, OnFormatEvent(DiskMountManager::FORMAT_STARTED,
+ chromeos::FORMAT_ERROR_NONE,
+ "/device/source_path"))
+ .Times(1);
+
+ EXPECT_CALL(observer_, OnFormatEvent(DiskMountManager::FORMAT_COMPLETED,
+ chromeos::FORMAT_ERROR_UNKNOWN,
+ "/device/source_path"))
+ .Times(1);
+ }
// Start the test.
DiskMountManager::GetInstance()->FormatMountedDevice("/device/mount_path");
@@ -699,27 +508,36 @@
// soon).
fake_cros_disks_client_->SendFormatCompletedEvent(
chromeos::FORMAT_ERROR_UNKNOWN, "/device/source_path");
-
- // The observer should get notified that the device was unmounted and that
- // formatting has started.
- // After the formatting starts, the test will simulate failing
- // FORMAT_COMPLETED signal, so the observer should also be notified the
- // formatting has failed (FORMAT_COMPLETED event).
- ASSERT_EQ(3U, observer_->GetEventCount());
- VerifyMountEvent(observer_->GetMountEvent(0), DiskMountManager::UNMOUNTING,
- chromeos::MOUNT_ERROR_NONE, "/device/mount_path");
- EXPECT_EQ(FormatEvent(DiskMountManager::FORMAT_STARTED,
- chromeos::FORMAT_ERROR_NONE, "/device/source_path"),
- observer_->GetFormatEvent(1));
- EXPECT_EQ(FormatEvent(DiskMountManager::FORMAT_COMPLETED,
- chromeos::FORMAT_ERROR_UNKNOWN, "/device/source_path"),
- observer_->GetFormatEvent(2));
}
// Tests the case when formatting completes successfully.
TEST_F(DiskMountManagerTest, Format_FormatSuccess) {
// Set up cros disks client mocks.
// Both unmount and format device cals are successful in this test.
+
+ // Set up expectations for observer mock.
+ // The observer should receive UNMOUNTING, FORMAT_STARTED and FORMAT_COMPLETED
+ // events (all of them without an error set).
+ {
+ InSequence s;
+
+ EXPECT_CALL(observer_,
+ OnMountEvent(DiskMountManager::UNMOUNTING,
+ chromeos::MOUNT_ERROR_NONE,
+ Field(&DiskMountManager::MountPointInfo::mount_path,
+ "/device/mount_path")))
+ .Times(1);
+
+ EXPECT_CALL(observer_, OnFormatEvent(DiskMountManager::FORMAT_STARTED,
+ chromeos::FORMAT_ERROR_NONE,
+ "/device/source_path"))
+ .Times(1);
+
+ EXPECT_CALL(observer_, OnFormatEvent(DiskMountManager::FORMAT_COMPLETED,
+ chromeos::FORMAT_ERROR_NONE,
+ "/device/source_path"))
+ .Times(1);
+ }
// Start the test.
DiskMountManager::GetInstance()->FormatMountedDevice("/device/mount_path");
@@ -743,18 +561,6 @@
// Simulate cros_disks reporting success.
fake_cros_disks_client_->SendFormatCompletedEvent(
chromeos::FORMAT_ERROR_NONE, "/device/source_path");
-
- // The observer should receive UNMOUNTING, FORMAT_STARTED and FORMAT_COMPLETED
- // events (all of them without an error set).
- ASSERT_EQ(3U, observer_->GetEventCount());
- VerifyMountEvent(observer_->GetMountEvent(0), DiskMountManager::UNMOUNTING,
- chromeos::MOUNT_ERROR_NONE, "/device/mount_path");
- EXPECT_EQ(FormatEvent(DiskMountManager::FORMAT_STARTED,
- chromeos::FORMAT_ERROR_NONE, "/device/source_path"),
- observer_->GetFormatEvent(1));
- EXPECT_EQ(FormatEvent(DiskMountManager::FORMAT_COMPLETED,
- chromeos::FORMAT_ERROR_NONE, "/device/source_path"),
- observer_->GetFormatEvent(2));
}
// Tests that it's possible to format the device twice in a row (this may not be
@@ -762,6 +568,36 @@
TEST_F(DiskMountManagerTest, Format_ConsecutiveFormatCalls) {
// All unmount and format device cals are successful in this test.
// Each of the should be made twice (once for each formatting task).
+
+ // Set up expectations for observer mock.
+ // The observer should receive UNMOUNTING, FORMAT_STARTED and FORMAT_COMPLETED
+ // events (all of them without an error set) twice (once for each formatting
+ // task).
+ // Also, there should be a MOUNTING event when the device remounting is
+ // simulated.
+ EXPECT_CALL(observer_, OnFormatEvent(DiskMountManager::FORMAT_COMPLETED,
+ chromeos::FORMAT_ERROR_NONE,
+ "/device/source_path"))
+ .Times(2);
+
+ EXPECT_CALL(observer_, OnFormatEvent(DiskMountManager::FORMAT_STARTED,
+ chromeos::FORMAT_ERROR_NONE,
+ "/device/source_path"))
+ .Times(2);
+
+ EXPECT_CALL(observer_,
+ OnMountEvent(DiskMountManager::UNMOUNTING,
+ chromeos::MOUNT_ERROR_NONE,
+ Field(&DiskMountManager::MountPointInfo::mount_path,
+ "/device/mount_path")))
+ .Times(2);
+
+ EXPECT_CALL(observer_,
+ OnMountEvent(DiskMountManager::MOUNTING,
+ chromeos::MOUNT_ERROR_NONE,
+ Field(&DiskMountManager::MountPointInfo::mount_path,
+ "/device/mount_path")))
+ .Times(1);
// Start the test.
DiskMountManager::GetInstance()->FormatMountedDevice("/device/mount_path");
@@ -814,29 +650,6 @@
// Simulate cros_disks reporting success.
fake_cros_disks_client_->SendFormatCompletedEvent(
chromeos::FORMAT_ERROR_NONE, "/device/source_path");
-
- // The observer should receive UNMOUNTING, FORMAT_STARTED and FORMAT_COMPLETED
- // events (all of them without an error set) twice (once for each formatting
- // task).
- // Also, there should be a MOUNTING event when the device remounting is
- // simulated.
- EXPECT_EQ(7U, observer_->GetEventCount());
-
- EXPECT_EQ(2U, observer_->CountFormatEvents(FormatEvent(
- DiskMountManager::FORMAT_COMPLETED,
- chromeos::FORMAT_ERROR_NONE, "/device/source_path")));
-
- EXPECT_EQ(2U, observer_->CountFormatEvents(FormatEvent(
- DiskMountManager::FORMAT_STARTED,
- chromeos::FORMAT_ERROR_NONE, "/device/source_path")));
-
- EXPECT_EQ(2U, observer_->CountMountEvents(DiskMountManager::UNMOUNTING,
- chromeos::MOUNT_ERROR_NONE,
- "/device/mount_path"));
-
- EXPECT_EQ(1U, observer_->CountMountEvents(DiskMountManager::MOUNTING,
- chromeos::MOUNT_ERROR_NONE,
- "/device/mount_path"));
}
TEST_F(DiskMountManagerTest, MountPath_RecordAccessMode) {
@@ -848,6 +661,27 @@
// For MountCompleted. Must be non-empty strings.
const std::string kMountPath1 = "/media/foo";
const std::string kMountPath2 = "/media/bar";
+
+ // Event handlers of observers should be called.
+ EXPECT_CALL(
+ observer_,
+ OnMountEvent(
+ DiskMountManager::MOUNTING, chromeos::MOUNT_ERROR_NONE,
+ Field(&DiskMountManager::MountPointInfo::mount_path, kMountPath1)));
+ // For the 2nd source, the disk (block device) is not read-only but the
+ // test will mount it in read-only mode.
+ // Observers query |disks_| from |DiskMountManager| in its event handler for
+ // a mount completion event. Therefore |disks_| must be updated with correct
+ // |read_only| value before notifying to observers.
+ EXPECT_CALL(
+ observer_,
+ OnMountEvent(
+ DiskMountManager::MOUNTING, chromeos::MOUNT_ERROR_NONE,
+ Field(&DiskMountManager::MountPointInfo::mount_path, kMountPath2)))
+ .WillOnce(InvokeWithoutArgs(
+ // Verify if the disk appears read-only at the time of notification
+ // to observers.
+ [&]() { ExpectDiskReadOnly(manager, kSourcePath2, true); }));
manager->MountPath(kSourcePath1, kSourceFormat, std::string(),
chromeos::MOUNT_TYPE_DEVICE,
@@ -863,24 +697,6 @@
chromeos::MOUNT_ERROR_NONE, kSourcePath2, chromeos::MOUNT_TYPE_DEVICE,
kMountPath2);
- // Event handlers of observers should be called.
- ASSERT_EQ(2U, observer_->GetEventCount());
- VerifyMountEvent(observer_->GetMountEvent(0), DiskMountManager::MOUNTING,
- chromeos::MOUNT_ERROR_NONE, kMountPath1);
- // For the 2nd source, the disk (block device) is not read-only but the
- // test will mount it in read-only mode.
- // Observers query |disks_| from |DiskMountManager| in its event handler for
- // a mount completion event. Therefore |disks_| must be updated with correct
- // |read_only| value before notifying to observers.
- const MountEvent& secondMountEvent = observer_->GetMountEvent(1);
- EXPECT_EQ(DiskMountManager::MOUNTING, secondMountEvent.event);
- EXPECT_EQ(chromeos::MOUNT_ERROR_NONE, secondMountEvent.error_code);
- EXPECT_EQ(kMountPath2, secondMountEvent.mount_point.mount_path);
- // Verify if the disk appears read-only at the time of notification to
- // observers.
- EXPECT_TRUE(secondMountEvent.disk->is_read_only());
-
- // Verify the final state of manager->disks.
const DiskMountManager::DiskMap& disks = manager->disks();
ASSERT_GT(disks.count(kSourcePath1), 0U);
EXPECT_FALSE(disks.find(kSourcePath1)->second->is_read_only());
@@ -892,6 +708,13 @@
DiskMountManager* manager = DiskMountManager::GetInstance();
const std::string kSourceFormat = std::string();
const std::string kMountLabel = std::string(); // N/A for MOUNT_TYPE_DEVICE
+
+ // Event handlers of observers should be called.
+ EXPECT_CALL(
+ observer_,
+ OnMountEvent(DiskMountManager::MOUNTING, chromeos::MOUNT_ERROR_NONE,
+ Field(&DiskMountManager::MountPointInfo::mount_path,
+ kReadOnlyMountpath)));
// Attempt to mount a read-only device in read-write mode.
manager->MountPath(kReadOnlyDeviceSource, kSourceFormat, std::string(),
@@ -902,10 +725,6 @@
chromeos::MOUNT_ERROR_NONE, kReadOnlyDeviceSource,
chromeos::MOUNT_TYPE_DEVICE, kReadOnlyMountpath);
- // Event handlers of observers should be called.
- ASSERT_EQ(1U, observer_->GetEventCount());
- VerifyMountEvent(observer_->GetMountEvent(0), DiskMountManager::MOUNTING,
- chromeos::MOUNT_ERROR_NONE, kReadOnlyMountpath);
const DiskMountManager::DiskMap& disks = manager->disks();
ASSERT_GT(disks.count(kReadOnlyDeviceSource), 0U);
// The mounted disk should preserve the read-only flag of the block device.
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698