• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright (c) 2022 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 <stdlib.h>
17 #include <sys/stat.h>
18 #include "functionalext.h"
19 
20 #define DIR_MODE 0700
21 /**
22  * @tc.name      : mkdtemp_0100
23  * @tc.desc      : Create a temporary directory with the correct parameters
24  * @tc.level     : Level 0
25  */
mkdtemp_0100(void)26 void mkdtemp_0100(void)
27 {
28     char temp_dir[] = "test-XXXXXX";
29     char *ret = mkdtemp(temp_dir);
30     EXPECT_PTRNE("mkdtemp_0100", ret, NULL);
31     if (ret) {
32         EXPECT_NE("mkdtemp_0100", ret[0], CMPFLAG);
33         rmdir(ret);
34     }
35 }
36 
37 /**
38  * @tc.name      : mkdtemp_0200
39  * @tc.desc      : Create temp directory with wrong template parameter
40  * @tc.level     : Level 2
41  */
mkdtemp_0200(void)42 void mkdtemp_0200(void)
43 {
44     char temp_dir[] = "test";
45     char *ret = mkdtemp(temp_dir);
46     EXPECT_PTREQ("mkdtemp_0200", ret, NULL);
47 }
48 
49 /**
50  * @tc.name      : mkdtemp_0300
51  * @tc.desc      : Create temp directory with wrong template argument (wrong template length)
52  * @tc.level     : Level 2
53  */
mkdtemp_0300(void)54 void mkdtemp_0300(void)
55 {
56     char temp_dir[] = "test-XX";
57     char *ret = mkdtemp(temp_dir);
58     EXPECT_PTREQ("mkdtemp_0300", ret, NULL);
59 }
60 
61 /**
62  * @tc.name      : mkdtemp_0400
63  * @tc.desc      : Template with 'XXXXXX' not at the end
64  * @tc.level     : Level 2
65  */
mkdtemp_0400(void)66 void mkdtemp_0400(void)
67 {
68     char temp_dir[] = "test-XXXXXX-dir";
69     char *ret = mkdtemp(temp_dir);
70     //XXXXXX is not at the end, mkdtemp() will fail and return NULL. Now template is unchanged.
71     EXPECT_PTREQ("mkdtemp_0400", ret, NULL);
72     if (ret == NULL) {
73         EXPECT_EQ("mkdtemp_0400", errno, EINVAL);
74         EXPECT_STREQ("mkdtemp_0400", temp_dir, "test-XXXXXX-dir");
75     }
76 }
77 
78 /**
79  * @tc.name      : mkdtemp_0500
80  * @tc.desc      : Repeated calls generate unique directories
81  * @tc.level     : Level 1
82  */
mkdtemp_0500(void)83 void mkdtemp_0500(void)
84 {
85     char temp_dir1[] = "test-XXXXXX";
86     char temp_dir2[] = "test-XXXXXX";
87     char *ret1 = mkdtemp(temp_dir1);
88     char *ret2 = mkdtemp(temp_dir2);
89     EXPECT_PTRNE("mkdtemp_0500", ret1, NULL);
90     EXPECT_PTRNE("mkdtemp_0500", ret2, NULL);
91     if (ret1 && ret2) {
92         EXPECT_STRNE("mkdtemp_0500", ret1, ret2); // The two results should be different
93         rmdir(ret1);
94         rmdir(ret2);
95     }
96 }
97 
98 /**
99  * @tc.name      : mkdtemp_0600
100  * @tc.desc      : Check directory permissions (should be 0700)
101  * @tc.level     : Level 2
102  */
mkdtemp_0600(void)103 void mkdtemp_0600(void)
104 {
105     char temp_dir[] = "test-XXXXXX";
106     char *ret = mkdtemp(temp_dir);
107     EXPECT_PTRNE("mkdtemp_0600", ret, NULL);
108     if (ret) {
109         struct stat st;
110         stat(ret, &st);
111         EXPECT_EQ("mkdtemp_0600", st.st_mode & DIR_MODE, DIR_MODE);
112         rmdir(ret);
113     }
114 }
115 
main(void)116 int main(void)
117 {
118     mkdtemp_0100();
119     mkdtemp_0200();
120     mkdtemp_0300();
121     mkdtemp_0400();
122     mkdtemp_0500();
123     mkdtemp_0600();
124     return t_status;
125 }