• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include <fcntl.h>
2 #include <gtest/gtest.h>
3 #include <sys/stat.h>
4 
5 using namespace testing::ext;
6 
7 class StatFstatatTest : public testing::Test {
SetUp()8     void SetUp() override {}
TearDown()9     void TearDown() override {}
10 };
11 
12 /**
13  * @tc.name: fstatat_001
14  * @tc.desc: Verify that the fstatat function successfully retrieves file status information, including file mode
15  *           permissions, when used with appropriate parameters.
16  * @tc.type: FUNC
17  **/
18 HWTEST_F(StatFstatatTest, fstatat_001, TestSize.Level1)
19 {
20     const char* dirname = "test_fstatat";
21     mode_t mode = S_IRWXU | S_IRWXG | S_IRWXO;
22     ASSERT_NE(-1, mkdir(dirname, mode));
23 
24     struct stat st;
25     const char* linkname = "test_fstatat";
26 
27     EXPECT_EQ(0, fstatat(AT_FDCWD, linkname, &st, AT_NO_AUTOMOUNT));
28     mode_t mask = S_IRWXU | S_IRWXG | S_IRWXO;
29     EXPECT_EQ(0755 & mask, static_cast<mode_t>(st.st_mode) & mask);
30 
31     remove("test_fstatat");
32 }
33 
34 /**
35  * @tc.name: fstatat_002
36  * @tc.desc: Test whether the return value of the fstatat() function is 0, and check if the obtained file or
37  *           directory permissions match the expected value.
38  * @tc.type: FUNC
39  **/
40 HWTEST_F(StatFstatatTest, fstatat_002, TestSize.Level1)
41 {
42     const char* dirname = "test_fstatat";
43     mode_t mode = S_IRWXU | S_IRWXG | S_IRWXO;
44     EXPECT_NE(-1, mkdir(dirname, mode));
45 
46     struct stat st;
47     const char* linkname = "test_fstatat";
48 
49     EXPECT_EQ(0, fstatat(AT_FDCWD, linkname, &st, AT_SYMLINK_NOFOLLOW));
50     mode_t mask = S_IRWXU | S_IRWXG | S_IRWXO;
51     EXPECT_EQ(0755 & mask, static_cast<mode_t>(st.st_mode) & mask);
52     remove("test_fstatat");
53 }