1 /*
2 * Copyright (c) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "fstabapi_unittest.h"
17 #include <cctype>
18 #include <cstdio>
19 #include <fstream>
20 #include <iostream>
21 #include <memory>
22 #include <string>
23 #include <sys/mount.h>
24 #include <unistd.h>
25 #include <vector>
26 #include "fs_manager/fs_manager.h"
27 #include "fs_manager/mount.h"
28 #include "log/log.h"
29 #include "utils.h"
30
31 using namespace testing::ext;
32 using namespace UpdaterUt;
33 using namespace Updater;
34 using namespace std;
35
36 namespace UpdaterUt {
SetUp(void)37 void FstabApiUnitTest::SetUp(void)
38 {
39 cout << "Updater Unit MountUnitTest Begin!" << endl;
40 }
41
42 // end
TearDown(void)43 void FstabApiUnitTest::TearDown(void)
44 {
45 cout << "Updater Unit MountUnitTest End!" << endl;
46 }
47
48 // do something at the each function begining
SetUpTestCase(void)49 void FstabApiUnitTest::SetUpTestCase(void) {}
50
51 // do something at the each function end
TearDownTestCase(void)52 void FstabApiUnitTest::TearDownTestCase(void) {}
53
54 HWTEST_F(FstabApiUnitTest, ReadFstabFromFile_unitest, TestSize.Level1)
55 {
56 Fstab *fstab = nullptr;
57 const std::string fstabFile1 = "/data/fstab.updater1";
58 fstab = ReadFstabFromFile(fstabFile1.c_str(), false);
59 EXPECT_EQ(fstab, nullptr);
60 const std::string fstabFile2 = "/data/updater/mount_unitest/ReadFstabFromFile1.fstable";
61 fstab = ReadFstabFromFile(fstabFile2.c_str(), false);
62 EXPECT_EQ(fstab, nullptr);
63 const std::string fstabFile3 = "/data/updater/mount_unitest/ReadFstabFromFile2.fstable";
64 fstab = ReadFstabFromFile(fstabFile3.c_str(), false);
65 EXPECT_EQ(fstab, nullptr);
66 const std::string fstabFile4 = "/data/updater/mount_unitest/ReadFstabFromFile3.fstable";
67 fstab = ReadFstabFromFile(fstabFile4.c_str(), false);
68 EXPECT_EQ(fstab, nullptr);
69 const std::string fstabFile5 = "/data/updater/mount_unitest/ReadFstabFromFile4.fstable";
70 fstab = ReadFstabFromFile(fstabFile5.c_str(), false);
71 EXPECT_EQ(fstab, nullptr);
72 const std::string fstabFile6 = "/data/updater/mount_unitest/ReadFstabFromFile5.fstable";
73 fstab = ReadFstabFromFile(fstabFile6.c_str(), false);
74 EXPECT_NE(fstab, nullptr);
75 ReleaseFstab(fstab);
76 }
77
78 HWTEST_F(FstabApiUnitTest, FindFstabItemForPath_unitest, TestSize.Level1)
79 {
80 const std::string fstabFile1 = "/data/updater/mount_unitest/FindFstabItemForPath1.fstable";
81 Fstab *fstab = nullptr;
82 fstab = ReadFstabFromFile(fstabFile1.c_str(), false);
83 ASSERT_NE(fstab, nullptr);
84 FstabItem* item = nullptr;
85 const std::string path1 = "";
86 item = FindFstabItemForPath(*fstab, path1.c_str());
87 if (item == nullptr) {
88 SUCCEED();
89 }
90 const std::string path2 = "/data";
91 item = FindFstabItemForPath(*fstab, path2.c_str());
92 if (item != nullptr) {
93 SUCCEED();
94 }
95 const std::string path3 = "/data2";
96 item = FindFstabItemForPath(*fstab, path3.c_str());
97 if (item == nullptr) {
98 SUCCEED();
99 }
100 const std::string path4 = "/data2/test";
101 item = FindFstabItemForPath(*fstab, path4.c_str());
102 if (item != nullptr) {
103 SUCCEED();
104 }
105 ReleaseFstab(fstab);
106 fstab = nullptr;
107 }
108
109 HWTEST_F(FstabApiUnitTest, FindFstabItemForMountPoint_unitest, TestSize.Level1)
110 {
111 const std::string fstabFile1 = "/data/updater/mount_unitest/FindFstabItemForMountPoint1.fstable";
112 Fstab *fstab = nullptr;
113 fstab = ReadFstabFromFile(fstabFile1.c_str(), false);
114 ASSERT_NE(fstab, nullptr);
115 FstabItem* item = nullptr;
116 const std::string mp1 = "/data";
117 const std::string mp2 = "/data2";
118 item = FindFstabItemForMountPoint(*fstab, mp2.c_str());
119 if (item == nullptr) {
120 SUCCEED();
121 }
122 const std::string mp3 = "/data";
123 item = FindFstabItemForMountPoint(*fstab, mp3.c_str());
124 if (item != nullptr) {
125 SUCCEED();
126 }
127 ReleaseFstab(fstab);
128 fstab = nullptr;
129 }
130
131 HWTEST_F(FstabApiUnitTest, GetMountFlags_unitest, TestSize.Level1)
132 {
133 const std::string fstabFile1 = "/data/updater/mount_unitest/GetMountFlags1.fstable";
134 Fstab *fstab = nullptr;
135 fstab = ReadFstabFromFile(fstabFile1.c_str(), false);
136 ASSERT_NE(fstab, nullptr);
137 struct FstabItem* item = nullptr;
138 const std::string mp = "/hos";
139 item = FindFstabItemForMountPoint(*fstab, mp.c_str());
140 if (item == nullptr) {
141 SUCCEED();
142 }
143 const int bufferSize = 512;
144 char fsSpecificOptions[bufferSize] = {0};
145 unsigned long flags = GetMountFlags(item->mountOptions, fsSpecificOptions, bufferSize, mp.c_str());
146 EXPECT_EQ(flags, static_cast<unsigned long>(MS_NOSUID | MS_NODEV | MS_NOATIME));
147 ReleaseFstab(fstab);
148 fstab = nullptr;
149 }
150 } // namespace updater_ut
151