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