1f6603c60Sopenharmony_ci/* 2f6603c60Sopenharmony_ci * Copyright (c) 2020-2021 Huawei Device Co., Ltd. 3f6603c60Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4f6603c60Sopenharmony_ci * you may not use this file except in compliance with the License. 5f6603c60Sopenharmony_ci * You may obtain a copy of the License at 6f6603c60Sopenharmony_ci * 7f6603c60Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8f6603c60Sopenharmony_ci * 9f6603c60Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10f6603c60Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11f6603c60Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12f6603c60Sopenharmony_ci * See the License for the specific language governing permissions and * limitations under the License. 13f6603c60Sopenharmony_ci */ 14f6603c60Sopenharmony_ci#include "FileSystemTest.h" 15f6603c60Sopenharmony_ci#include <stdio.h> 16f6603c60Sopenharmony_ci#include <string.h> 17f6603c60Sopenharmony_ci#include <stdlib.h> 18f6603c60Sopenharmony_ci 19f6603c60Sopenharmony_ci#include <sys/stat.h> 20f6603c60Sopenharmony_ci#include <sys/types.h> 21f6603c60Sopenharmony_ci#include <fcntl.h> 22f6603c60Sopenharmony_ci#include <unistd.h> 23f6603c60Sopenharmony_ci#include <dirent.h> 24f6603c60Sopenharmony_ci#include <ftw.h> 25f6603c60Sopenharmony_ci#include <libgen.h> 26f6603c60Sopenharmony_ci 27f6603c60Sopenharmony_ci#include <gtest/gtest.h> 28f6603c60Sopenharmony_ci 29f6603c60Sopenharmony_ci#include "utils.h" 30f6603c60Sopenharmony_ci#include "log.h" 31f6603c60Sopenharmony_ci#include "KernelConstants.h" 32f6603c60Sopenharmony_ci#include "libfs.h" 33f6603c60Sopenharmony_ci 34f6603c60Sopenharmony_ciusing namespace testing::ext; 35f6603c60Sopenharmony_ci 36f6603c60Sopenharmony_ci/** 37f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_FS_UNISTD_0100 38f6603c60Sopenharmony_ci * @tc.name basic function test : access check file exists. 39f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 40f6603c60Sopenharmony_ci */ 41f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testAccess, Function | MediumTest | Level0) 42f6603c60Sopenharmony_ci{ 43f6603c60Sopenharmony_ci int fd = 0; 44f6603c60Sopenharmony_ci fd = creat(FILE0, 0777); 45f6603c60Sopenharmony_ci EXPECT_NE(fd, -1) << "> creat faild errno = " << errno; 46f6603c60Sopenharmony_ci EXPECT_NE(close(fd), -1) << "> close errno = " << errno; 47f6603c60Sopenharmony_ci EXPECT_EQ(access(FILE0, F_OK), 0) << "> access F_OK errno = " << errno; 48f6603c60Sopenharmony_ci} 49f6603c60Sopenharmony_ci 50f6603c60Sopenharmony_ci/** 51f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_FS_UNISTD_0110 52f6603c60Sopenharmony_ci * @tc.name basic function test : test access with ENOENT 53f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 54f6603c60Sopenharmony_ci */ 55f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testAccessEnoent, Function | MediumTest | Level0) 56f6603c60Sopenharmony_ci{ 57f6603c60Sopenharmony_ci EXPECT_EQ(access(FILE0, F_OK), -1) << "> access F_OK expect faild but success"; 58f6603c60Sopenharmony_ci EXPECT_EQ(errno, ENOENT); 59f6603c60Sopenharmony_ci} 60f6603c60Sopenharmony_ci 61f6603c60Sopenharmony_ci#if defined(LITE_FS_JFFS2) 62f6603c60Sopenharmony_ci/** 63f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_FS_UNISTD_0120 64f6603c60Sopenharmony_ci * @tc.name basic function test : access check file R_OK. 65f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 66f6603c60Sopenharmony_ci */ 67f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testAccessRok, Function | MediumTest | Level1) 68f6603c60Sopenharmony_ci{ 69f6603c60Sopenharmony_ci int fd = 0; 70f6603c60Sopenharmony_ci fd = creat(FILE0, 0777); 71f6603c60Sopenharmony_ci EXPECT_NE(fd, -1) << "> creat faild errno = " << errno; 72f6603c60Sopenharmony_ci EXPECT_NE(close(fd), -1) << "> close errno = " << errno; 73f6603c60Sopenharmony_ci EXPECT_EQ(access(FILE0, R_OK), 0) << "> access F_OK errno = " << errno; 74f6603c60Sopenharmony_ci} 75f6603c60Sopenharmony_ci#endif 76f6603c60Sopenharmony_ci 77f6603c60Sopenharmony_ci#if defined(LITE_FS_JFFS2) 78f6603c60Sopenharmony_ci/** 79f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_FS_UNISTD_0130 80f6603c60Sopenharmony_ci * @tc.name basic function test : access check file W_OK. 81f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 82f6603c60Sopenharmony_ci */ 83f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testAccessWok, Function | MediumTest | Level1) 84f6603c60Sopenharmony_ci{ 85f6603c60Sopenharmony_ci int fd = 0; 86f6603c60Sopenharmony_ci fd = creat(FILE0, 0777); 87f6603c60Sopenharmony_ci EXPECT_NE(fd, -1) << "> creat faild errno = " << errno; 88f6603c60Sopenharmony_ci EXPECT_NE(close(fd), -1) << "> close errno = " << errno; 89f6603c60Sopenharmony_ci EXPECT_EQ(access(FILE0, W_OK), 0) << "> access F_OK errno = " << errno; 90f6603c60Sopenharmony_ci} 91f6603c60Sopenharmony_ci#endif 92f6603c60Sopenharmony_ci 93f6603c60Sopenharmony_ci#if defined(LITE_FS_JFFS2) 94f6603c60Sopenharmony_ci/** 95f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_FS_UNISTD_0140 96f6603c60Sopenharmony_ci * @tc.name basic function test : access check file X_OK 97f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 98f6603c60Sopenharmony_ci */ 99f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testAccessXok, Function | MediumTest | Level1) 100f6603c60Sopenharmony_ci{ 101f6603c60Sopenharmony_ci int fd = 0; 102f6603c60Sopenharmony_ci fd = creat(FILE0, 0777); 103f6603c60Sopenharmony_ci EXPECT_NE(fd, -1) << "> creat faild errno = " << errno; 104f6603c60Sopenharmony_ci EXPECT_NE(close(fd), -1) << "> close errno = " << errno; 105f6603c60Sopenharmony_ci EXPECT_EQ(access(FILE0, X_OK), 0) << "> access F_OK errno = " << errno; 106f6603c60Sopenharmony_ci} 107f6603c60Sopenharmony_ci#endif 108f6603c60Sopenharmony_ci 109f6603c60Sopenharmony_ci/** 110f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_FS_UNISTD_0200 111f6603c60Sopenharmony_ci * @tc.name basic function test : switch to the current working directory. 112f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 113f6603c60Sopenharmony_ci */ 114f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testChdir, Function | MediumTest | Level1) 115f6603c60Sopenharmony_ci{ 116f6603c60Sopenharmony_ci char testDir[MAX_PATH_SIZE]; 117f6603c60Sopenharmony_ci const char *expectDirStandard = TOP_DIR "/" DIR0; 118f6603c60Sopenharmony_ci EXPECT_NE(mkdir(DIR0, 0777), -1) << "> mkdir errno = " << errno; 119f6603c60Sopenharmony_ci EXPECT_NE(chdir(DIR0), -1) << "> chdir errno = " << errno; 120f6603c60Sopenharmony_ci EXPECT_NE(getcwd(testDir, sizeof(testDir)), nullptr) << "> getcwd errno = " << errno; 121f6603c60Sopenharmony_ci EXPECT_NE(chdir(TOP_DIR), -1) << "> chdir errno = " << errno; 122f6603c60Sopenharmony_ci 123f6603c60Sopenharmony_ci EXPECT_STREQ(testDir, expectDirStandard); 124f6603c60Sopenharmony_ci LOG("> expectDirStandard = %s", expectDirStandard); 125f6603c60Sopenharmony_ci LOG("> testDir = %s", testDir); 126f6603c60Sopenharmony_ci} 127f6603c60Sopenharmony_ci 128f6603c60Sopenharmony_ci/** 129f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_FS_UNISTD_0210 130f6603c60Sopenharmony_ci * @tc.name basic function test : test chdir with ENOENT 131f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 132f6603c60Sopenharmony_ci */ 133f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testChdirEnoent, Function | MediumTest | Level3) 134f6603c60Sopenharmony_ci{ 135f6603c60Sopenharmony_ci const char *fileName = "not_exist_file"; 136f6603c60Sopenharmony_ci EXPECT_EQ(chdir(fileName), -1) << "> chdir errno = " << errno; 137f6603c60Sopenharmony_ci EXPECT_EQ(errno, ENOENT); 138f6603c60Sopenharmony_ci EXPECT_NE(chdir(TOP_DIR), -1) << "> chdir errno = " << errno; 139f6603c60Sopenharmony_ci} 140f6603c60Sopenharmony_ci 141f6603c60Sopenharmony_ci/** 142f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_FS_UNISTD_0220 143f6603c60Sopenharmony_ci * @tc.name basic function test : test chdir with ENAMETOOLONG 144f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 145f6603c60Sopenharmony_ci */ 146f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testChdirEnametoolong, Function | MediumTest | Level3) 147f6603c60Sopenharmony_ci{ 148f6603c60Sopenharmony_ci const char *fileName = "12345678901234567890123456789012345678901234567890\ 149f6603c60Sopenharmony_ci 12345678901234567890123456789012345678901234567890\ 150f6603c60Sopenharmony_ci 12345678901234567890123456789012345678901234567890\ 151f6603c60Sopenharmony_ci 12345678901234567890123456789012345678901234567890\ 152f6603c60Sopenharmony_ci 12345678901234567890123456789012345678901234567890\ 153f6603c60Sopenharmony_ci 12345678901234567890123456789012345678901234567890\ 154f6603c60Sopenharmony_ci 12345678901234567890123456789012345678901234567890\ 155f6603c60Sopenharmony_ci 12345678901234567890123456789012345678901234567890"; 156f6603c60Sopenharmony_ci EXPECT_EQ(chdir(fileName), -1) << "> chdir errno = " << errno; 157f6603c60Sopenharmony_ci EXPECT_EQ(errno, ENAMETOOLONG); 158f6603c60Sopenharmony_ci EXPECT_NE(chdir(TOP_DIR), -1) << "> chdir errno = " << errno; 159f6603c60Sopenharmony_ci} 160f6603c60Sopenharmony_ci 161f6603c60Sopenharmony_ci/** 162f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_FS_UNISTD_0230 163f6603c60Sopenharmony_ci * @tc.name basic function test : test chdir with ENOTDIR 164f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 165f6603c60Sopenharmony_ci */ 166f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testChdirEnotdir, Function | MediumTest | Level3) 167f6603c60Sopenharmony_ci{ 168f6603c60Sopenharmony_ci int fd = 0; 169f6603c60Sopenharmony_ci const char *fileName = FILE0; 170f6603c60Sopenharmony_ci fd = creat(FILE0, 0777); 171f6603c60Sopenharmony_ci EXPECT_NE(fd, -1) << "> creat faild errno = " << errno; 172f6603c60Sopenharmony_ci EXPECT_NE(close(fd), -1) << "> close errno = " << errno; 173f6603c60Sopenharmony_ci EXPECT_EQ(chdir(fileName), -1) << "> chdir errno = " << errno; 174f6603c60Sopenharmony_ci EXPECT_EQ(errno, ENOTDIR); 175f6603c60Sopenharmony_ci EXPECT_NE(chdir(TOP_DIR), -1) << "> chdir errno = " << errno; 176f6603c60Sopenharmony_ci} 177f6603c60Sopenharmony_ci#if defined(LITE_FS_VFAT) 178f6603c60Sopenharmony_ci/** 179f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_FS_UNISTD_0500 180f6603c60Sopenharmony_ci * @tc.name basic function test : using ftruncate to change the file size 181f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 182f6603c60Sopenharmony_ci */ 183f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testFtruncate, Function | MediumTest | Level1) 184f6603c60Sopenharmony_ci{ 185f6603c60Sopenharmony_ci struct stat statbuf; 186f6603c60Sopenharmony_ci char writeBuf[] = "this is a file"; 187f6603c60Sopenharmony_ci int fd = 0; 188f6603c60Sopenharmony_ci 189f6603c60Sopenharmony_ci fd = open(FILE0, O_CREAT | O_RDWR, 0777); 190f6603c60Sopenharmony_ci EXPECT_NE(fd, -1) << "> open faild errno = " << errno; 191f6603c60Sopenharmony_ci EXPECT_NE(write(fd, writeBuf, sizeof(writeBuf)), -1) << "> write errno = " << errno; 192f6603c60Sopenharmony_ci 193f6603c60Sopenharmony_ci EXPECT_NE(ftruncate(fd, 1000), -1) << "truncate errno = " << errno; 194f6603c60Sopenharmony_ci EXPECT_NE(close(fd), -1) << "> close errno = " << errno; 195f6603c60Sopenharmony_ci 196f6603c60Sopenharmony_ci EXPECT_NE(stat(FILE0, &statbuf), -1) << "> fstat errno = " << errno; 197f6603c60Sopenharmony_ci EXPECT_EQ(statbuf.st_size, 1000); 198f6603c60Sopenharmony_ci} 199f6603c60Sopenharmony_ci#endif 200f6603c60Sopenharmony_ci 201f6603c60Sopenharmony_ci#if defined(LITE_FS_VFAT) 202f6603c60Sopenharmony_ci/** 203f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_FS_UNISTD_0501 204f6603c60Sopenharmony_ci * @tc.name basic function test : test ftruncate with EINVAL 205f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 206f6603c60Sopenharmony_ci */ 207f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testFtruncateEinval, Function | MediumTest | Level3) 208f6603c60Sopenharmony_ci{ 209f6603c60Sopenharmony_ci char writeBuf[] = "this is a file"; 210f6603c60Sopenharmony_ci int fd = 0; 211f6603c60Sopenharmony_ci 212f6603c60Sopenharmony_ci fd = open(FILE0, O_CREAT | O_RDWR, 0777); 213f6603c60Sopenharmony_ci EXPECT_NE(fd, -1) << "> open faild errno = " << errno; 214f6603c60Sopenharmony_ci EXPECT_NE(write(fd, writeBuf, sizeof(writeBuf)), -1) << "> write errno = " << errno; 215f6603c60Sopenharmony_ci 216f6603c60Sopenharmony_ci EXPECT_EQ(ftruncate(fd, -1), -1); 217f6603c60Sopenharmony_ci EXPECT_EQ(errno, EINVAL); 218f6603c60Sopenharmony_ci EXPECT_NE(close(fd), -1) << "> close errno = " << errno; 219f6603c60Sopenharmony_ci} 220f6603c60Sopenharmony_ci#endif 221f6603c60Sopenharmony_ci 222f6603c60Sopenharmony_ci#if defined(LITE_FS_VFAT) 223f6603c60Sopenharmony_ci/** 224f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_FS_UNISTD_0502 225f6603c60Sopenharmony_ci * @tc.name basic function test : test ftruncate with ENOSYS 226f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 227f6603c60Sopenharmony_ci */ 228f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testFtruncateEacces, Function | MediumTest | Level3) 229f6603c60Sopenharmony_ci{ 230f6603c60Sopenharmony_ci EXPECT_EQ(ftruncate(STDERR_FILENO, 10), -1); 231f6603c60Sopenharmony_ci EXPECT_EQ(errno, ENOSYS); 232f6603c60Sopenharmony_ci} 233f6603c60Sopenharmony_ci#endif 234f6603c60Sopenharmony_ci 235f6603c60Sopenharmony_ci#if defined(LITE_FS_VFAT) 236f6603c60Sopenharmony_ci/** 237f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_FS_UNISTD_0503 238f6603c60Sopenharmony_ci * @tc.name basic function test : test ftruncate with EBADF 239f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 240f6603c60Sopenharmony_ci */ 241f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testFtruncateEbadf, Function | MediumTest | Level3) 242f6603c60Sopenharmony_ci{ 243f6603c60Sopenharmony_ci int invalidFd = 99999; 244f6603c60Sopenharmony_ci EXPECT_EQ(ftruncate(invalidFd, 10), -1); 245f6603c60Sopenharmony_ci EXPECT_EQ(errno, EBADF); 246f6603c60Sopenharmony_ci} 247f6603c60Sopenharmony_ci#endif 248f6603c60Sopenharmony_ci 249f6603c60Sopenharmony_ci#if defined(LITE_FS_VFAT) 250f6603c60Sopenharmony_ci/** 251f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_FS_UNISTD_0510 252f6603c60Sopenharmony_ci * @tc.name basic function test : using truncate functions to change the file size 253f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 254f6603c60Sopenharmony_ci */ 255f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testTruncate, Function | MediumTest | Level1) 256f6603c60Sopenharmony_ci{ 257f6603c60Sopenharmony_ci struct stat statbuf; 258f6603c60Sopenharmony_ci char writeBuf[] = "this is a file"; 259f6603c60Sopenharmony_ci int fd = 0; 260f6603c60Sopenharmony_ci 261f6603c60Sopenharmony_ci fd = open(FILE0, O_CREAT | O_RDWR, 0777); 262f6603c60Sopenharmony_ci EXPECT_NE(fd, -1) << "> open faild errno = " << errno; 263f6603c60Sopenharmony_ci EXPECT_NE(write(fd, writeBuf, sizeof(writeBuf)), -1) << "> write errno = " << errno; 264f6603c60Sopenharmony_ci EXPECT_NE(close(fd), -1) << "> close errno = " << errno; 265f6603c60Sopenharmony_ci 266f6603c60Sopenharmony_ci EXPECT_NE(truncate(FILE0, 100), -1) << "truncate errno = " << errno; 267f6603c60Sopenharmony_ci EXPECT_NE(stat(FILE0, &statbuf), -1) << "> fstat errno = " << errno; 268f6603c60Sopenharmony_ci EXPECT_EQ(statbuf.st_size, 100); 269f6603c60Sopenharmony_ci} 270f6603c60Sopenharmony_ci#endif 271f6603c60Sopenharmony_ci 272f6603c60Sopenharmony_ci#if defined(LITE_FS_VFAT) 273f6603c60Sopenharmony_ci/** 274f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_FS_UNISTD_0511 275f6603c60Sopenharmony_ci * @tc.name basic function test : test truncate with EINVAL 276f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 277f6603c60Sopenharmony_ci */ 278f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testTruncateEinval, Function | MediumTest | Level3) 279f6603c60Sopenharmony_ci{ 280f6603c60Sopenharmony_ci char writeBuf[] = "this is a file"; 281f6603c60Sopenharmony_ci int fd = 0; 282f6603c60Sopenharmony_ci 283f6603c60Sopenharmony_ci fd = open(FILE0, O_CREAT | O_RDWR, 0777); 284f6603c60Sopenharmony_ci EXPECT_NE(fd, -1) << "> open faild errno = " << errno; 285f6603c60Sopenharmony_ci EXPECT_NE(write(fd, writeBuf, sizeof(writeBuf)), -1) << "> write errno = " << errno; 286f6603c60Sopenharmony_ci EXPECT_NE(close(fd), -1) << "> close errno = " << errno; 287f6603c60Sopenharmony_ci 288f6603c60Sopenharmony_ci EXPECT_EQ(truncate(FILE0, -1), -1); 289f6603c60Sopenharmony_ci EXPECT_EQ(errno, EINVAL); 290f6603c60Sopenharmony_ci} 291f6603c60Sopenharmony_ci#endif 292f6603c60Sopenharmony_ci 293f6603c60Sopenharmony_ci#if defined(LITE_FS_VFAT) 294f6603c60Sopenharmony_ci/** 295f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_FS_UNISTD_0512 296f6603c60Sopenharmony_ci * @tc.name basic function test : test truncate with EACCES 297f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 298f6603c60Sopenharmony_ci */ 299f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testTruncateEacces, Function | MediumTest | Level3) 300f6603c60Sopenharmony_ci{ 301f6603c60Sopenharmony_ci EXPECT_EQ(truncate("/", 10), -1); 302f6603c60Sopenharmony_ci printf("errno = %d\n", errno); 303f6603c60Sopenharmony_ci EXPECT_EQ(errno, EISDIR); 304f6603c60Sopenharmony_ci} 305f6603c60Sopenharmony_ci#endif 306f6603c60Sopenharmony_ci 307f6603c60Sopenharmony_ci#if defined(LITE_FS_VFAT) 308f6603c60Sopenharmony_ci/** 309f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_FS_UNISTD_0513 310f6603c60Sopenharmony_ci * @tc.name basic function test : test truncate with ENAMETOOLONG 311f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 312f6603c60Sopenharmony_ci */ 313f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testTruncateEnametoolong, Function | MediumTest | Level3) 314f6603c60Sopenharmony_ci{ 315f6603c60Sopenharmony_ci const char *fileName = "12345678901234567890123456789012345678901234567890\ 316f6603c60Sopenharmony_ci 12345678901234567890123456789012345678901234567890\ 317f6603c60Sopenharmony_ci 12345678901234567890123456789012345678901234567890\ 318f6603c60Sopenharmony_ci 12345678901234567890123456789012345678901234567890\ 319f6603c60Sopenharmony_ci 12345678901234567890123456789012345678901234567890\ 320f6603c60Sopenharmony_ci 12345678901234567890123456789012345678901234567890\ 321f6603c60Sopenharmony_ci 12345678901234567890123456789012345678901234567890\ 322f6603c60Sopenharmony_ci 12345678901234567890123456789012345678901234567890"; 323f6603c60Sopenharmony_ci EXPECT_EQ(truncate(fileName, 10), -1); 324f6603c60Sopenharmony_ci EXPECT_EQ(errno, ENAMETOOLONG); 325f6603c60Sopenharmony_ci} 326f6603c60Sopenharmony_ci#endif 327f6603c60Sopenharmony_ci 328f6603c60Sopenharmony_ci#if defined(LITE_FS_VFAT) 329f6603c60Sopenharmony_ci/** 330f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_FS_UNISTD_0514 331f6603c60Sopenharmony_ci * @tc.name basic function test : test truncate with ENOENT 332f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 333f6603c60Sopenharmony_ci */ 334f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testTruncateEnoent, Function | MediumTest | Level3) 335f6603c60Sopenharmony_ci{ 336f6603c60Sopenharmony_ci const char invalidPath[] = "noExit"; 337f6603c60Sopenharmony_ci EXPECT_EQ(truncate(invalidPath, 10), -1); 338f6603c60Sopenharmony_ci EXPECT_EQ(errno, ENOENT); 339f6603c60Sopenharmony_ci} 340f6603c60Sopenharmony_ci#endif 341f6603c60Sopenharmony_ci 342f6603c60Sopenharmony_ci#ifdef LITE_FS_PATHCONF 343f6603c60Sopenharmony_ci/** 344f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_FS_UNISTD_0600 345f6603c60Sopenharmony_ci * @tc.name basic function test : Use the pathconf function to get the configuration value of the file 346f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 347f6603c60Sopenharmony_ci */ 348f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testPathconf, Function | MediumTest | Level2) 349f6603c60Sopenharmony_ci{ 350f6603c60Sopenharmony_ci const char filePath[] = TOP_DIR "/" DIR0 "/" DIR0_FILE0; 351f6603c60Sopenharmony_ci CreateTestFolder(); 352f6603c60Sopenharmony_ci 353f6603c60Sopenharmony_ci // use correctly 354f6603c60Sopenharmony_ci int param[] = { 355f6603c60Sopenharmony_ci _PC_LINK_MAX, 356f6603c60Sopenharmony_ci _PC_MAX_CANON, 357f6603c60Sopenharmony_ci _PC_MAX_INPUT, 358f6603c60Sopenharmony_ci _PC_NAME_MAX, 359f6603c60Sopenharmony_ci _PC_PATH_MAX, 360f6603c60Sopenharmony_ci _PC_PIPE_BUF, 361f6603c60Sopenharmony_ci _PC_CHOWN_RESTRICTED, 362f6603c60Sopenharmony_ci _PC_NO_TRUNC, 363f6603c60Sopenharmony_ci _PC_VDISABLE, 364f6603c60Sopenharmony_ci _PC_SYNC_IO, 365f6603c60Sopenharmony_ci _PC_ASYNC_IO, 366f6603c60Sopenharmony_ci _PC_PRIO_IO, 367f6603c60Sopenharmony_ci _PC_SOCK_MAXBUF, 368f6603c60Sopenharmony_ci _PC_FILESIZEBITS, 369f6603c60Sopenharmony_ci _PC_REC_INCR_XFER_SIZE, 370f6603c60Sopenharmony_ci _PC_REC_MAX_XFER_SIZE, 371f6603c60Sopenharmony_ci _PC_REC_MIN_XFER_SIZE, 372f6603c60Sopenharmony_ci _PC_REC_XFER_ALIGN, 373f6603c60Sopenharmony_ci _PC_ALLOC_SIZE_MIN, 374f6603c60Sopenharmony_ci _PC_SYMLINK_MAX, 375f6603c60Sopenharmony_ci _PC_2_SYMLINKS 376f6603c60Sopenharmony_ci }; 377f6603c60Sopenharmony_ci int size = sizeof(param) / sizeof(int); 378f6603c60Sopenharmony_ci for (int i = 0; i < size; i++) { 379f6603c60Sopenharmony_ci errno = 0; 380f6603c60Sopenharmony_ci if (pathconf(filePath, param[i]) == -1) { 381f6603c60Sopenharmony_ci EXPECT_EQ(errno, 0) << "fpathconf i = " << i << " errno = " << errno; 382f6603c60Sopenharmony_ci } 383f6603c60Sopenharmony_ci } 384f6603c60Sopenharmony_ci} 385f6603c60Sopenharmony_ci#endif 386f6603c60Sopenharmony_ci 387f6603c60Sopenharmony_ci#ifdef LITE_FS_PATHCONF 388f6603c60Sopenharmony_ci/** 389f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_FS_UNISTD_0610 390f6603c60Sopenharmony_ci * @tc.name basic function test : test pathconf function with error number EINVAL 391f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 392f6603c60Sopenharmony_ci */ 393f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testPathconfEinval, Function | MediumTest | Level2) 394f6603c60Sopenharmony_ci{ 395f6603c60Sopenharmony_ci const char filePath[] = TOP_DIR "/" DIR0 "/" DIR0_FILE0; 396f6603c60Sopenharmony_ci CreateTestFolder(); 397f6603c60Sopenharmony_ci 398f6603c60Sopenharmony_ci // invalid name 399f6603c60Sopenharmony_ci EXPECT_EQ(pathconf(filePath, -100), -1); 400f6603c60Sopenharmony_ci EXPECT_EQ(errno, EINVAL) << "fpathconf invalidPath errno = " << errno; 401f6603c60Sopenharmony_ci} 402f6603c60Sopenharmony_ci#endif 403f6603c60Sopenharmony_ci 404f6603c60Sopenharmony_ci#ifdef LITE_FS_PATHCONF 405f6603c60Sopenharmony_ci/** 406f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_FS_UNISTD_0620 407f6603c60Sopenharmony_ci * @tc.name basic function test : test pathconf function with error number EFAULT 408f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 409f6603c60Sopenharmony_ci */ 410f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testPathconfEfault, Function | MediumTest | Level2) 411f6603c60Sopenharmony_ci{ 412f6603c60Sopenharmony_ci // null path 413f6603c60Sopenharmony_ci EXPECT_EQ(pathconf(nullptr, _PC_LINK_MAX), -1); 414f6603c60Sopenharmony_ci EXPECT_EQ(errno, EFAULT) << "fpathconf invalidPath errno = " << errno; 415f6603c60Sopenharmony_ci} 416f6603c60Sopenharmony_ci#endif 417f6603c60Sopenharmony_ci 418f6603c60Sopenharmony_ci#ifdef LITE_FS_PATHCONF 419f6603c60Sopenharmony_ci/** 420f6603c60Sopenharmony_ci * @tc.number SUB_KERNEL_FS_UNISTD_0630 421f6603c60Sopenharmony_ci * @tc.name basic function test : test pathconf function with error number ENOENT 422f6603c60Sopenharmony_ci * @tc.desc [C- SOFTWARE -0200] 423f6603c60Sopenharmony_ci */ 424f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testPathconfEnoent, Function | MediumTest | Level2) 425f6603c60Sopenharmony_ci{ 426f6603c60Sopenharmony_ci // path not exit 427f6603c60Sopenharmony_ci const char invalidPath[] = "noExit"; 428f6603c60Sopenharmony_ci EXPECT_EQ(pathconf(invalidPath, _PC_LINK_MAX), -1); 429f6603c60Sopenharmony_ci EXPECT_EQ(errno, ENOENT) << "fpathconf invalidPath errno = " << errno; 430f6603c60Sopenharmony_ci} 431f6603c60Sopenharmony_ci#endif 432f6603c60Sopenharmony_ci 433f6603c60Sopenharmony_ci#ifdef LITE_FS_PATHCONF 434f6603c60Sopenharmony_ci/** 435f6603c60Sopenharmony_ci* @tc.number SUB_KERNEL_FS_UNISTD_0700 436f6603c60Sopenharmony_ci* @tc.name basic function test : Use the fpathconf function to get the configuration value of the file 437f6603c60Sopenharmony_ci* @tc.desc [C- SOFTWARE -0200] 438f6603c60Sopenharmony_ci*/ 439f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testFpathconf, Function | MediumTest | Level2) 440f6603c60Sopenharmony_ci{ 441f6603c60Sopenharmony_ci int fd = open(FILE0, O_CREAT | O_RDWR, 0777); 442f6603c60Sopenharmony_ci EXPECT_NE(fd, -1) << "> open errno = " << errno; 443f6603c60Sopenharmony_ci 444f6603c60Sopenharmony_ci // use correctly 445f6603c60Sopenharmony_ci int param[] = { 446f6603c60Sopenharmony_ci _PC_LINK_MAX, 447f6603c60Sopenharmony_ci _PC_MAX_CANON, 448f6603c60Sopenharmony_ci _PC_MAX_INPUT, 449f6603c60Sopenharmony_ci _PC_NAME_MAX, 450f6603c60Sopenharmony_ci _PC_PATH_MAX, 451f6603c60Sopenharmony_ci _PC_PIPE_BUF, 452f6603c60Sopenharmony_ci _PC_CHOWN_RESTRICTED, 453f6603c60Sopenharmony_ci _PC_NO_TRUNC, 454f6603c60Sopenharmony_ci _PC_VDISABLE, 455f6603c60Sopenharmony_ci _PC_SYNC_IO, 456f6603c60Sopenharmony_ci _PC_ASYNC_IO, 457f6603c60Sopenharmony_ci _PC_PRIO_IO, 458f6603c60Sopenharmony_ci _PC_SOCK_MAXBUF, 459f6603c60Sopenharmony_ci _PC_FILESIZEBITS, 460f6603c60Sopenharmony_ci _PC_REC_INCR_XFER_SIZE, 461f6603c60Sopenharmony_ci _PC_REC_MAX_XFER_SIZE, 462f6603c60Sopenharmony_ci _PC_REC_MIN_XFER_SIZE, 463f6603c60Sopenharmony_ci _PC_REC_XFER_ALIGN, 464f6603c60Sopenharmony_ci _PC_ALLOC_SIZE_MIN, 465f6603c60Sopenharmony_ci _PC_SYMLINK_MAX, 466f6603c60Sopenharmony_ci _PC_2_SYMLINKS 467f6603c60Sopenharmony_ci }; 468f6603c60Sopenharmony_ci int size = sizeof(param) / sizeof(int); 469f6603c60Sopenharmony_ci for (int i = 0; i < size; i++) { 470f6603c60Sopenharmony_ci errno = 0; 471f6603c60Sopenharmony_ci if (fpathconf(fd, param[i]) == -1) { 472f6603c60Sopenharmony_ci EXPECT_EQ(errno, 0) << "fpathconf i = " << i << " errno = " << errno; 473f6603c60Sopenharmony_ci } 474f6603c60Sopenharmony_ci } 475f6603c60Sopenharmony_ci EXPECT_NE(close(fd), -1) << "> close errno = " << errno; 476f6603c60Sopenharmony_ci} 477f6603c60Sopenharmony_ci#endif 478f6603c60Sopenharmony_ci 479f6603c60Sopenharmony_ci#ifdef LITE_FS_PATHCONF 480f6603c60Sopenharmony_ci/** 481f6603c60Sopenharmony_ci* @tc.number SUB_KERNEL_FS_UNISTD_0710 482f6603c60Sopenharmony_ci* @tc.name basic function test : test fpathconf function with error number EINVAL 483f6603c60Sopenharmony_ci* @tc.desc [C- SOFTWARE -0200] 484f6603c60Sopenharmony_ci*/ 485f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testFpathconfEinval, Function | MediumTest | Level2) 486f6603c60Sopenharmony_ci{ 487f6603c60Sopenharmony_ci int fd = open(FILE0, O_CREAT | O_RDWR, 0777); 488f6603c60Sopenharmony_ci EXPECT_NE(fd, -1) << "> open errno = " << errno; 489f6603c60Sopenharmony_ci 490f6603c60Sopenharmony_ci // invalid name 491f6603c60Sopenharmony_ci errno = 0; 492f6603c60Sopenharmony_ci EXPECT_EQ(fpathconf(fd, -100), -1); 493f6603c60Sopenharmony_ci EXPECT_EQ(errno, EINVAL) << "fpathconf invalidPath errno = " << errno; 494f6603c60Sopenharmony_ci 495f6603c60Sopenharmony_ci EXPECT_NE(close(fd), -1) << "> close errno = " << errno; 496f6603c60Sopenharmony_ci} 497f6603c60Sopenharmony_ci#endif 498f6603c60Sopenharmony_ci 499f6603c60Sopenharmony_ci#ifdef LITE_FS_PATHCONF 500f6603c60Sopenharmony_ci/** 501f6603c60Sopenharmony_ci* @tc.number SUB_KERNEL_FS_UNISTD_0720 502f6603c60Sopenharmony_ci* @tc.name basic function test : test fpathconf function with error number EBADF 503f6603c60Sopenharmony_ci* @tc.desc [C- SOFTWARE -0200] 504f6603c60Sopenharmony_ci*/ 505f6603c60Sopenharmony_ciHWTEST_F(FileSystemTest, testFpathconfEbadf, Function | MediumTest | Level2) 506f6603c60Sopenharmony_ci{ 507f6603c60Sopenharmony_ci // invalid file description 508f6603c60Sopenharmony_ci EXPECT_EQ(fpathconf(-100, _PC_LINK_MAX), -1); 509f6603c60Sopenharmony_ci EXPECT_EQ(errno, EBADF) << "fpathconf invalidPath errno = " << errno; 510f6603c60Sopenharmony_ci} 511f6603c60Sopenharmony_ci#endif 512