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 "functionalext.h"
18
19 /**
20 * @tc.name : mktemp_0100
21 * @tc.desc : Create a temporary file with the correct parameters
22 * @tc.level : Level 0
23 */
mktemp_0100(void)24 void mktemp_0100(void)
25 {
26 char temp_file[] = "test-XXXXXX";
27 char *ret = mktemp(temp_file);
28 EXPECT_PTRNE("mktemp_0100", ret, NULL);
29 if (ret) {
30 EXPECT_NE("mktemp_0100", ret[0], 0);
31 }
32 }
33
34 /**
35 * @tc.name : mktemp_0200
36 * @tc.desc : Create temp file with wrong template parameter
37 * @tc.level : Level 2
38 */
mktemp_0200(void)39 void mktemp_0200(void)
40 {
41 char temp_file[] = "test";
42 char *ret = mktemp(temp_file);
43 EXPECT_PTRNE("mktemp_0200", ret, NULL);
44 if (ret) {
45 EXPECT_EQ("mktemp_0200", ret[0], 0);
46 }
47 }
48
49 /**
50 * @tc.name : mktemp_0300
51 * @tc.desc : Create temp file with wrong template argument (wrong template length)
52 * @tc.level : Level 2
53 */
mktemp_0300(void)54 void mktemp_0300(void)
55 {
56 char temp_file[] = "test-XX";
57 char *ret = mktemp(temp_file);
58 EXPECT_PTRNE("mktemp_0300", ret, NULL);
59 if (ret) {
60 EXPECT_EQ("mktemp_0300", ret[0], 0);
61 }
62 }
63
64 /**
65 * @tc.name : mktemp_0400
66 * @tc.desc : Create temp file with template argument ('XXXXXX' not at the end)
67 * @tc.level : Level 2
68 */
mktemp_0400(void)69 void mktemp_0400(void)
70 {
71 char temp_file[] = "test-XXXXXX-dir";
72 char *ret = mktemp(temp_file);
73 EXPECT_PTRNE("mktemp_0400", ret, NULL);
74 //XXXXXX is not at the end, mktemp() will fail
75 if (ret) {
76 EXPECT_EQ("mktemp_0400", errno, EINVAL);
77 }
78 }
79
80 /**
81 * @tc.name : mktemp_0500
82 * @tc.desc : Repeated calls generate unique file
83 * @tc.level : Level 1
84 */
mktemp_0500(void)85 void mktemp_0500(void)
86 {
87 char temp_file1[] = "test-XXXXXX";
88 char temp_file2[] = "test-XXXXXX";
89 char *ret1 = mktemp(temp_file1);
90 char *ret2 = mktemp(temp_file2);
91 EXPECT_PTRNE("mktemp_0500", ret1, NULL);
92 EXPECT_PTRNE("mktemp_0500", ret2, NULL);
93 if (ret1 && ret2) {
94 EXPECT_STRNE("mktemp_0500", ret1, ret2); // The two results should be different
95 }
96 }
97
98 /**
99 * @tc.name : mktemp_0600
100 * @tc.desc : Verify mktemp retries when file exists
101 * @tc.level : Level 1
102 */
mktemp_0600(void)103 void mktemp_0600(void)
104 {
105 char temp_file[] = "test-XXXXXX";
106 char new_file[256] = {0};
107 int fd = mkstemp(temp_file); // create file
108 if (fd != -1) {
109 strcpy(new_file, temp_file); // get the file name
110 char *ret = mktemp(temp_file);
111 EXPECT_PTRNE("mktemp_0600", ret, NULL);
112 if (ret) {
113 EXPECT_EQ("mktemp_0600", ret[0], 0);
114 }
115 close(fd);
116 unlink(new_file); // clean file
117 }
118 }
119
main(void)120 int main(void)
121 {
122 mktemp_0100();
123 mktemp_0200();
124 mktemp_0300();
125 mktemp_0400();
126 mktemp_0500();
127 mktemp_0600();
128 return t_status;
129 }