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 "functionalext.h"
17 #include <unistd.h>
18 #include <fcntl.h>
19 #include <stdlib.h>
20
21 const char *path = "/data/test.txt";
22
23 /**
24 * @tc.name : fwrite_0100
25 * @tc.desc : File pointer at the end of a file, the position to which the current file pointer points
26 * @tc.level : Level 0
27 */
fwrite_0100(void)28 void fwrite_0100(void)
29 {
30 FILE *fptr = fopen(path, "w+");
31 EXPECT_PTRNE("fwrite_0100", fptr, NULL);
32
33 char buf[] = "this is test";
34 int result = fwrite(buf, sizeof(char), strlen(buf), fptr);
35 EXPECT_TRUE("fwrite_0100", result == strlen(buf));
36
37 fclose(fptr);
38 remove(path);
39 }
40
41 /**
42 * @tc.name : fwrite_0200
43 * @tc.desc : File pointer at the beginning of a file, the location to which the current file pointer points
44 * @tc.level : Level 0
45 */
fwrite_0200(void)46 void fwrite_0200(void)
47 {
48 FILE *fptr = fopen(path, "w+");
49 EXPECT_PTRNE("fwrite_0200", fptr, NULL);
50
51 char buf[] = "this is test";
52 int result = fwrite(buf, 0, strlen(buf), fptr);
53 EXPECT_EQ("fwrite_0200", result, 0);
54
55 fclose(fptr);
56 remove(path);
57 }
58
59 /**
60 * @tc.name : fwrite_0300
61 * @tc.desc : Invalid argument. Cannot get the location of the current file pointer
62 * @tc.level : Level 2
63 */
fwrite_0300(void)64 void fwrite_0300(void)
65 {
66 FILE *fptr = fopen(path, "w+");
67 EXPECT_PTRNE("fwrite_0300", fptr, NULL);
68
69 char buf[] = "this is test";
70 int result = fwrite(buf, sizeof(char), 0, fptr);
71 EXPECT_EQ("fwrite_0300", result, 0);
72
73 fclose(fptr);
74 remove(path);
75 }
76
fwrite_0400(void)77 void fwrite_0400(void)
78 {
79 pid_t childPid = 0;
80 int fds[2] = {0};
81 pipe(fds);
82 int pipeRead = 0;
83 int pipeWrite = 1;
84
85 char buf[1024] = {0};
86
87 childPid = fork();
88 EXPECT_NE("fwrite_0400", childPid, -1);
89 if (childPid == 0) {
90 // childr
91 dup2(fds[pipeWrite], STDOUT_FILENO);
92 dup2(fds[pipeRead], STDIN_FILENO);
93
94 close(fds[pipeWrite]);
95 close(fds[pipeRead]);
96
97 // exec
98 execl("/bin/sh", "/bin/sh", "-c", "/system/bin/bm get -u", NULL);
99 exit(0);
100 } else {
101 // parent
102 close(fds[pipeWrite]);
103 fcntl(fds[pipeRead], F_SETFD, F_DUPFD_CLOEXEC);
104 int cn = read(fds[pipeRead], buf, sizeof(buf));
105 EXPECT_MT("fwrite_0400", cn, 0);
106 }
107 }
108
main(int argc,char * argv[])109 int main(int argc, char *argv[])
110 {
111 fwrite_0100();
112 fwrite_0200();
113 fwrite_0300();
114 return t_status;
115 }
116