• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023-2023 Huawei Device Co., Ltd. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without modification,
5  * are permitted provided that the following conditions are met:
6  *
7  * 1. Redistributions of source code must retain the above copyright notice, this list of
8  *    conditions and the following disclaimer.
9  *
10  * 2. Redistributions in binary form must reproduce the above copyright notice, this list
11  *    of conditions and the following disclaimer in the documentation and/or other materials
12  *    provided with the distribution.
13  *
14  * 3. Neither the name of the copyright holder nor the names of its contributors may be used
15  *    to endorse or promote products derived from this software without specific prior written
16  *    permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
20  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
22  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
25  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
26  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
27  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
28  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30 
31 #include "posix_fs_test.h"
32 #include "vfs_config.h"
33 
34 /* *
35  * @tc.number   SUB_KERNEL_FS_FSTAT_OK
36  * @tc.name     fstat
37  * @tc.desc     [C- SOFTWARE -0200]
38  */
39 LITE_TEST_CASE(PosixFsFuncTestSuite, TestFsFstatOK, Function | MediumTest | Level1)
40 {
41     int32_t ret;
42     struct stat buf = { 0 };
43     const char tmpFileName[TEST_BUF_SIZE] = FILE1;
44 
45     int32_t fd = open(tmpFileName, O_CREAT | O_RDWR);
46     ICUNIT_ASSERT_NOT_EQUAL(fd, POSIX_FS_IS_ERROR, fd);
47 
48     ret = fstat(fd, &buf);
49     ICUNIT_ASSERT_NOT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
50 
51     ret = close(fd);
52     ICUNIT_ASSERT_NOT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
53 
54     ret = unlink(tmpFileName);
55     ICUNIT_ASSERT_NOT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
56 
57     return POSIX_FS_NO_ERROR;
58 }
59 
60 /* *
61  * @tc.number   SUB_KERNEL_FS_FSTAT_EBADF001
62  * @tc.name     fstat
63  * @tc.desc     [C- SOFTWARE -0200]
64  */
65 LITE_TEST_CASE(PosixFsFuncTestSuite, TestFsFstatEBADF001, Function | MediumTest | Level1)
66 {
67     struct stat buf = { 0 };
68 
69     int32_t ret = fstat(-1, &buf);  /* -1, bad fd  */
70     ICUNIT_ASSERT_EQUAL(errno, EBADF, POSIX_FS_IS_ERROR);
71     ICUNIT_ASSERT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
72 
73     return POSIX_FS_NO_ERROR;
74 }
75 
76 /* *
77  * @tc.number   SUB_KERNEL_FS_FSTAT_EBADF002
78  * @tc.name     fstat
79  * @tc.desc     [C- SOFTWARE -0200]
80  */
81 LITE_TEST_CASE(PosixFsFuncTestSuite, TestFsFstatEBADF002, Function | MediumTest | Level1)
82 {
83     struct stat buf = { 0 };
84 
85     int32_t ret = fstat(ERROR_CONFIG_NFILE_DESCRIPTORS, &buf);
86     ICUNIT_ASSERT_EQUAL(errno, EBADF, POSIX_FS_IS_ERROR);
87     ICUNIT_ASSERT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
88 
89     return POSIX_FS_NO_ERROR;
90 }
91 
92 /* *
93  * @tc.number   SUB_KERNEL_FS_FSTAT_EBADF003
94  * @tc.name     fstat
95  * @tc.desc     [C- SOFTWARE -0200]
96  */
97 LITE_TEST_CASE(PosixFsFuncTestSuite, TestFsFstatEBADF003, Function | MediumTest | Level1)
98 {
99     struct stat buf = { 0 };
100 
101     int32_t ret = fstat(0, &buf);   /* 0, used for stdin */
102     ICUNIT_ASSERT_EQUAL(errno, EBADF, POSIX_FS_IS_ERROR);
103     ICUNIT_ASSERT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
104 
105     ret = fstat(1, &buf);   /* 1, used for stdout */
106     ICUNIT_ASSERT_EQUAL(errno, EBADF, POSIX_FS_IS_ERROR);
107     ICUNIT_ASSERT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
108 
109     ret = fstat(2, &buf);   /* 2, used for stderr */
110     ICUNIT_ASSERT_EQUAL(errno, EBADF, POSIX_FS_IS_ERROR);
111     ICUNIT_ASSERT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
112 
113     return POSIX_FS_NO_ERROR;
114 }
115 
116 /* *
117  * @tc.number   SUB_KERNEL_FS_FSTAT_EINVAL
118  * @tc.name     fstat
119  * @tc.desc     [C- SOFTWARE -0200]
120  */
121 LITE_TEST_CASE(PosixFsFuncTestSuite, TestFsFstatEINVAL, Function | MediumTest | Level1)
122 {
123     int32_t ret;
124     struct stat *buf = NULL;
125     const char tmpFileName[TEST_BUF_SIZE] = FILE1;
126 
127     int32_t fd = open(tmpFileName, O_CREAT | O_RDWR);
128     ICUNIT_ASSERT_NOT_EQUAL(fd, POSIX_FS_IS_ERROR, fd);
129 
130     ret = fstat(fd, buf);
131     ICUNIT_ASSERT_EQUAL(errno, EINVAL, POSIX_FS_IS_ERROR);
132     ICUNIT_ASSERT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
133 
134     ret = close(fd);
135     ICUNIT_ASSERT_NOT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
136 
137     ret = unlink(tmpFileName);
138     ICUNIT_ASSERT_NOT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
139 
140     return POSIX_FS_NO_ERROR;
141 }
142 
143 /* *
144  * @tc.number   SUB_KERNEL_FS_FSTAT_ENOENT
145  * @tc.name     fstat
146  * @tc.desc     [C- SOFTWARE -0200]
147  */
148 LITE_TEST_CASE(PosixFsFuncTestSuite, TestFsFstatENOENT, Function | MediumTest | Level1)
149 {
150     int32_t ret;
151     struct stat buf = { 0 };
152     const char tmpFileName[TEST_BUF_SIZE] = FILE1;
153 
154     int32_t fd = open(tmpFileName, O_CREAT | O_RDWR);
155     ICUNIT_ASSERT_NOT_EQUAL(fd, POSIX_FS_IS_ERROR, fd);
156 
157     struct MountPoint *mountBak = g_mountPoints;
158     g_mountPoints = NULL;
159     ret = fstat(fd, &buf);
160     g_mountPoints = mountBak;
161     ICUNIT_ASSERT_EQUAL(errno, ENOENT, POSIX_FS_IS_ERROR);
162     ICUNIT_ASSERT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
163 
164     ret = close(fd);
165     ICUNIT_ASSERT_NOT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
166 
167     ret = unlink(tmpFileName);
168     ICUNIT_ASSERT_NOT_EQUAL(ret, POSIX_FS_IS_ERROR, ret);
169 
170     return POSIX_FS_NO_ERROR;
171 }
172 
PosixFsFstatTest(void)173 void PosixFsFstatTest(void)
174 {
175     RUN_ONE_TESTCASE(TestFsFstatOK);
176     RUN_ONE_TESTCASE(TestFsFstatEBADF001);
177     RUN_ONE_TESTCASE(TestFsFstatEBADF002);
178     RUN_ONE_TESTCASE(TestFsFstatEBADF003);
179     RUN_ONE_TESTCASE(TestFsFstatEINVAL);
180     RUN_ONE_TESTCASE(TestFsFstatENOENT);
181 }
182