blob: 161c85abfdc5c22b8f8fbce52c926387cb1b1857 [file] [log] [blame]
Ben Chanbeefd0d2011-07-25 09:31:34 -07001// Copyright (c) 2011 The Chromium OS 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
Ben Chan5ccd9fe2013-11-13 18:28:27 -08005#include "cros-disks/mount_info.h"
Ben Chanbeefd0d2011-07-25 09:31:34 -07006
Ben Chancd8fda42014-09-05 08:21:06 -07007#include <base/files/file_util.h>
Ben Chan97e20d42014-02-05 18:38:07 -08008#include <base/strings/stringprintf.h>
Ben Chanbeefd0d2011-07-25 09:31:34 -07009#include <gtest/gtest.h>
10
Ben Chanbeefd0d2011-07-25 09:31:34 -070011namespace cros_disks {
12
13class MountInfoTest : public ::testing::Test {
14 public:
Ben Chan1c6c1942014-08-12 09:48:29 -070015 void SetUp() override {
Ben Chan213c6d92019-04-10 16:21:52 -070016 std::string content =
Ben Chande0e3f62017-09-26 06:28:39 -070017 "14 12 0:3 / /proc rw,noexec - proc none rw\n"
18 "15 12 0:12 / /sys rw,noexec - sysfs none rw\n"
19 "16 12 0:13 / /tmp rw,nodev - tmpfs /tmp rw\n"
20 "18 13 0:14 / /dev/shm rw,noexec - tmpfs shmfs rw\n"
21 "21 12 8:1 /var /var rw,noexec - ext3 /dev/sda1 rw\n"
22 "22 12 8:1 /home /home rw,nodev - ext3 /dev/sda1 rw\n"
23 "30 26 11:0 / /media/Test\\0401 ro - vfat /dev/sdb1 ro\n";
Ben Chanbeefd0d2011-07-25 09:31:34 -070024
Ben Chan213c6d92019-04-10 16:21:52 -070025 base::FilePath mount_file;
Ben Chan97e20d42014-02-05 18:38:07 -080026 ASSERT_TRUE(base::CreateTemporaryFile(&mount_file));
Ben Chanbeefd0d2011-07-25 09:31:34 -070027 ASSERT_EQ(content.size(),
Ben Chanaf25ddb2014-05-21 18:32:47 -070028 base::WriteFile(mount_file, content.c_str(), content.size()));
Ben Chanbeefd0d2011-07-25 09:31:34 -070029 mount_file_ = mount_file.value();
30 }
31
Ben Chan1c6c1942014-08-12 09:48:29 -070032 void TearDown() override {
hscham53cf73a2020-11-30 15:58:42 +090033 ASSERT_TRUE(base::DeleteFile(base::FilePath(mount_file_)));
Ben Chanbeefd0d2011-07-25 09:31:34 -070034 }
35
36 protected:
Ben Chan213c6d92019-04-10 16:21:52 -070037 std::string mount_file_;
Ben Chanbeefd0d2011-07-25 09:31:34 -070038 MountInfo manager_;
39};
40
41TEST_F(MountInfoTest, ConvertOctalStringToInt) {
42 EXPECT_EQ(-1, manager_.ConvertOctalStringToInt(""));
43 EXPECT_EQ(-1, manager_.ConvertOctalStringToInt("0"));
44 EXPECT_EQ(-1, manager_.ConvertOctalStringToInt("00"));
45 EXPECT_EQ(-1, manager_.ConvertOctalStringToInt("0000"));
46 EXPECT_EQ(-1, manager_.ConvertOctalStringToInt("800"));
47 EXPECT_EQ(-1, manager_.ConvertOctalStringToInt("080"));
48 EXPECT_EQ(-1, manager_.ConvertOctalStringToInt("008"));
49
50 for (int decimal = 0; decimal < 256; ++decimal) {
Ben Chan213c6d92019-04-10 16:21:52 -070051 std::string octal = base::StringPrintf("%03o", decimal);
Ben Chanbeefd0d2011-07-25 09:31:34 -070052 EXPECT_EQ(decimal, manager_.ConvertOctalStringToInt(octal));
53 }
54}
55
56TEST_F(MountInfoTest, DecodePath) {
57 EXPECT_EQ("Test", manager_.DecodePath("Test"));
58 EXPECT_EQ("Test ", manager_.DecodePath("Test\\040"));
59 EXPECT_EQ("Test 1", manager_.DecodePath("Test\\0401"));
60 EXPECT_EQ(" Test 1", manager_.DecodePath("\\040Test\\0401"));
61 EXPECT_EQ("Test\\040", manager_.DecodePath("Test\\134040"));
62 EXPECT_EQ("Test\\04", manager_.DecodePath("Test\\04"));
63 EXPECT_EQ("Test\\800", manager_.DecodePath("Test\\800"));
64}
65
66TEST_F(MountInfoTest, GetMountPaths) {
67 EXPECT_TRUE(manager_.RetrieveFromFile(mount_file_));
68
Ben Chan213c6d92019-04-10 16:21:52 -070069 std::vector<std::string> expected_paths = {"/var", "/home"};
Ben Chanbeefd0d2011-07-25 09:31:34 -070070 EXPECT_TRUE(expected_paths == manager_.GetMountPaths("/dev/sda1"));
71
Ben Chan63ec9c42014-04-21 19:13:23 -070072 expected_paths = {"/media/Test 1"};
Ben Chanbeefd0d2011-07-25 09:31:34 -070073 EXPECT_TRUE(expected_paths == manager_.GetMountPaths("/dev/sdb1"));
74
75 expected_paths.clear();
76 EXPECT_TRUE(expected_paths == manager_.GetMountPaths("/dev/sdc1"));
77}
78
Ben Chan8dcede82011-07-25 20:56:13 -070079TEST_F(MountInfoTest, HasMountPath) {
80 EXPECT_TRUE(manager_.RetrieveFromFile(mount_file_));
81 EXPECT_FALSE(manager_.HasMountPath(""));
82 EXPECT_FALSE(manager_.HasMountPath("/"));
83 EXPECT_FALSE(manager_.HasMountPath("/dev/sda1"));
84 EXPECT_FALSE(manager_.HasMountPath("/dev/sdb1"));
85 EXPECT_FALSE(manager_.HasMountPath("/nonexistent-path"));
86 EXPECT_TRUE(manager_.HasMountPath("/dev/shm"));
87 EXPECT_TRUE(manager_.HasMountPath("/home"));
88 EXPECT_TRUE(manager_.HasMountPath("/media/Test 1"));
89 EXPECT_TRUE(manager_.HasMountPath("/proc"));
90 EXPECT_TRUE(manager_.HasMountPath("/sys"));
91 EXPECT_TRUE(manager_.HasMountPath("/tmp"));
92 EXPECT_TRUE(manager_.HasMountPath("/var"));
93}
94
Ben Chanbeefd0d2011-07-25 09:31:34 -070095TEST_F(MountInfoTest, RetrieveFromFile) {
96 EXPECT_TRUE(manager_.RetrieveFromFile(mount_file_));
97}
98
99TEST_F(MountInfoTest, RetrieveFromCurrentProcess) {
100 EXPECT_TRUE(manager_.RetrieveFromCurrentProcess());
Ben Chan8dcede82011-07-25 20:56:13 -0700101 EXPECT_TRUE(manager_.HasMountPath("/proc"));
Ben Chanbeefd0d2011-07-25 09:31:34 -0700102}
103
104} // namespace cros_disks