| // Copyright (c) 2012 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/external_mounter.h" | |
| #include <sys/mount.h> | |
| #include <string> | |
| #include <vector> | |
| #include <base/files/scoped_temp_dir.h> | |
| #include <base/logging.h> | |
| #include <gtest/gtest.h> | |
| #include "cros-disks/mount_options.h" | |
| using std::string; | |
| using std::vector; | |
| namespace cros_disks { | |
| class ExternalMounterTest : public ::testing::Test { | |
| }; | |
| TEST_F(ExternalMounterTest, RunAsRootMount) { | |
| base::ScopedTempDir temp_dir; | |
| ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | |
| ExternalMounter mounter("/dev/null", temp_dir.path().value(), | |
| "tmpfs", MountOptions()); | |
| EXPECT_FALSE(mounter.GetMountProgramPath().empty()); | |
| if (!mounter.GetMountProgramPath().empty()) { | |
| EXPECT_EQ(MOUNT_ERROR_NONE, mounter.Mount()); | |
| umount2(temp_dir.path().value().c_str(), MNT_FORCE); | |
| } else { | |
| LOG(WARNING) << "Could not find an external mount program for testing."; | |
| } | |
| } | |
| TEST_F(ExternalMounterTest, RunAsRootMountWithNonexistentSourcePath) { | |
| base::ScopedTempDir temp_dir; | |
| ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | |
| // To test mounting a nonexistent source path, use ext2 as the | |
| // filesystem type instead of tmpfs since tmpfs does not care | |
| // about source path. | |
| ExternalMounter mounter("/nonexistent", temp_dir.path().value(), | |
| "ext2", MountOptions()); | |
| EXPECT_EQ(MOUNT_ERROR_MOUNT_PROGRAM_FAILED, mounter.Mount()); | |
| } | |
| TEST_F(ExternalMounterTest, RunAsRootMountWithNonexistentTargetPath) { | |
| ExternalMounter mounter("/dev/null", "/nonexistent", "tmpfs", MountOptions()); | |
| EXPECT_EQ(MOUNT_ERROR_MOUNT_PROGRAM_FAILED, mounter.Mount()); | |
| } | |
| TEST_F(ExternalMounterTest, RunAsRootMountWithNonexistentFilesystemType) { | |
| base::ScopedTempDir temp_dir; | |
| ASSERT_TRUE(temp_dir.CreateUniqueTempDir()); | |
| ExternalMounter mounter("/dev/null", temp_dir.path().value(), | |
| "nonexistentfs", MountOptions()); | |
| EXPECT_EQ(MOUNT_ERROR_MOUNT_PROGRAM_FAILED, mounter.Mount()); | |
| } | |
| } // namespace cros_disks |