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 }