blob: 541795475f08514358afc3bac0a11b6e7dc966fb [file] [log] [blame]
// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "cros-disks/mounter.h"
#include <string>
#include <vector>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "cros-disks/mount_options.h"
using std::string;
using std::vector;
using testing::Return;
namespace cros_disks {
// A mock mounter class for testing the mounter base class.
class MounterUnderTest : public Mounter {
public:
MounterUnderTest(const string& source_path,
const string& target_path,
const string& filesystem_type,
const MountOptions& mount_options)
: Mounter(source_path, target_path, filesystem_type, mount_options) {
}
// Mocks mount implementation.
MOCK_METHOD0(MountImpl, MountErrorType());
};
class MounterTest : public ::testing::Test {
protected:
void SetUp() override {
source_path_ = "/dev/sdb1";
target_path_ = "/media/disk";
filesystem_type_ = "vfat";
}
string filesystem_type_;
string source_path_;
string target_path_;
MountOptions mount_options_;
vector<string> options_;
};
TEST_F(MounterTest, MountReadOnlySucceeded) {
mount_options_.Initialize(options_, false, "", "");
MounterUnderTest mounter(source_path_, target_path_,
filesystem_type_, mount_options_);
EXPECT_CALL(mounter, MountImpl()).WillOnce(Return(MOUNT_ERROR_NONE));
EXPECT_TRUE(mounter.mount_options().IsReadOnlyOptionSet());
EXPECT_EQ(MOUNT_ERROR_NONE, mounter.Mount());
}
TEST_F(MounterTest, MountReadOnlyFailed) {
mount_options_.Initialize(options_, false, "", "");
MounterUnderTest mounter(source_path_, target_path_,
filesystem_type_, mount_options_);
EXPECT_CALL(mounter, MountImpl()).WillOnce(Return(MOUNT_ERROR_INTERNAL));
EXPECT_TRUE(mounter.mount_options().IsReadOnlyOptionSet());
EXPECT_EQ(MOUNT_ERROR_INTERNAL, mounter.Mount());
}
TEST_F(MounterTest, MountReadWriteSucceeded) {
options_.push_back("rw");
mount_options_.Initialize(options_, false, "", "");
MounterUnderTest mounter(source_path_, target_path_,
filesystem_type_, mount_options_);
EXPECT_CALL(mounter, MountImpl()).WillOnce(Return(MOUNT_ERROR_NONE));
EXPECT_FALSE(mounter.mount_options().IsReadOnlyOptionSet());
EXPECT_EQ(MOUNT_ERROR_NONE, mounter.Mount());
}
TEST_F(MounterTest, MountReadWriteFailedButReadOnlySucceeded) {
options_.push_back("rw");
mount_options_.Initialize(options_, false, "", "");
MounterUnderTest mounter(source_path_, target_path_,
filesystem_type_, mount_options_);
EXPECT_CALL(mounter, MountImpl())
.WillOnce(Return(MOUNT_ERROR_INTERNAL))
.WillOnce(Return(MOUNT_ERROR_NONE));
EXPECT_FALSE(mounter.mount_options().IsReadOnlyOptionSet());
EXPECT_EQ(MOUNT_ERROR_NONE, mounter.Mount());
EXPECT_TRUE(mounter.mount_options().IsReadOnlyOptionSet());
}
TEST_F(MounterTest, MountReadWriteAndReadOnlyFailed) {
options_.push_back("rw");
mount_options_.Initialize(options_, false, "", "");
MounterUnderTest mounter(source_path_, target_path_,
filesystem_type_, mount_options_);
EXPECT_CALL(mounter, MountImpl())
.WillOnce(Return(MOUNT_ERROR_INTERNAL))
.WillOnce(Return(MOUNT_ERROR_INTERNAL));
EXPECT_FALSE(mounter.mount_options().IsReadOnlyOptionSet());
EXPECT_EQ(MOUNT_ERROR_INTERNAL, mounter.Mount());
EXPECT_TRUE(mounter.mount_options().IsReadOnlyOptionSet());
}
} // namespace cros_disks