1570af302Sopenharmony_ci/*
2570af302Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
3570af302Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4570af302Sopenharmony_ci * you may not use this file except in compliance with the License.
5570af302Sopenharmony_ci * You may obtain a copy of the License at
6570af302Sopenharmony_ci *
7570af302Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8570af302Sopenharmony_ci *
9570af302Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10570af302Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11570af302Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12570af302Sopenharmony_ci * See the License for the specific language governing permissions and
13570af302Sopenharmony_ci * limitations under the License.
14570af302Sopenharmony_ci */
15570af302Sopenharmony_ci
16570af302Sopenharmony_ci#include <fcntl.h>
17570af302Sopenharmony_ci#include "functionalext.h"
18570af302Sopenharmony_ci
19570af302Sopenharmony_ci/**
20570af302Sopenharmony_ci * @tc.name      : rename_0100
21570af302Sopenharmony_ci * @tc.desc      : Each parameter is valid, and the file name can be changed.
22570af302Sopenharmony_ci * @tc.level     : Level 0
23570af302Sopenharmony_ci */
24570af302Sopenharmony_civoid rename_0100(void)
25570af302Sopenharmony_ci{
26570af302Sopenharmony_ci    const char *oldname = "oldfile.txt";
27570af302Sopenharmony_ci    const char *newname = "newfile.txt";
28570af302Sopenharmony_ci    int fd = open(oldname, O_RDONLY | O_CREAT, TEST_MODE);
29570af302Sopenharmony_ci    EXPECT_TRUE("rename_0100", fd != -1);
30570af302Sopenharmony_ci    close(fd);
31570af302Sopenharmony_ci
32570af302Sopenharmony_ci    int ret = rename(oldname, newname);
33570af302Sopenharmony_ci    EXPECT_EQ("rename_0100", ret, 0);
34570af302Sopenharmony_ci    fd = open(oldname, O_RDONLY);
35570af302Sopenharmony_ci    EXPECT_EQ("rename_0100", fd, -1);
36570af302Sopenharmony_ci    fd = open(newname, O_RDONLY);
37570af302Sopenharmony_ci    EXPECT_NE("rename_0100", fd, -1);
38570af302Sopenharmony_ci    close(fd);
39570af302Sopenharmony_ci    remove(newname);
40570af302Sopenharmony_ci}
41570af302Sopenharmony_ci
42570af302Sopenharmony_ci/**
43570af302Sopenharmony_ci * @tc.name      : rename_0200
44570af302Sopenharmony_ci * @tc.desc      : Parameter 1 is invalid, the file name cannot be changed.
45570af302Sopenharmony_ci * @tc.level     : Level 2
46570af302Sopenharmony_ci */
47570af302Sopenharmony_civoid rename_0200(void)
48570af302Sopenharmony_ci{
49570af302Sopenharmony_ci    const char *oldname = "oldfile.txt";
50570af302Sopenharmony_ci    const char *newname = "newfile.txt";
51570af302Sopenharmony_ci    int ret = rename(oldname, newname);
52570af302Sopenharmony_ci    EXPECT_EQ("rename_0200", ret, -1);
53570af302Sopenharmony_ci}
54570af302Sopenharmony_ci
55570af302Sopenharmony_ci/**
56570af302Sopenharmony_ci * @tc.name      : rename_0300
57570af302Sopenharmony_ci * @tc.desc      : Newpath already exists, the file name can be changed.
58570af302Sopenharmony_ci * @tc.level     : Level 1
59570af302Sopenharmony_ci */
60570af302Sopenharmony_civoid rename_0300(void)
61570af302Sopenharmony_ci{
62570af302Sopenharmony_ci    const char *oldname = "oldfile.txt";
63570af302Sopenharmony_ci    const char *newname = "newfile.txt";
64570af302Sopenharmony_ci    int fd_old = open(oldname, O_RDWR | O_CREAT, TEST_MODE);
65570af302Sopenharmony_ci    EXPECT_TRUE("rename_0300", fd_old != -1);
66570af302Sopenharmony_ci
67570af302Sopenharmony_ci    char str_old[] = "old";
68570af302Sopenharmony_ci    int ret_old = write(fd_old, str_old, sizeof(str_old));
69570af302Sopenharmony_ci    EXPECT_TRUE("rename_0300", ret_old > 0);
70570af302Sopenharmony_ci    close(fd_old);
71570af302Sopenharmony_ci
72570af302Sopenharmony_ci    int fd_new = open(newname, O_RDWR | O_CREAT, TEST_MODE);
73570af302Sopenharmony_ci    EXPECT_TRUE("rename_0100", fd_new != -1);
74570af302Sopenharmony_ci
75570af302Sopenharmony_ci    char str_new[] = "new";
76570af302Sopenharmony_ci    int ret_new = write(fd_old, str_new, sizeof(str_new));
77570af302Sopenharmony_ci    EXPECT_TRUE("rename_0300", ret_new > 0);
78570af302Sopenharmony_ci    close(fd_new);
79570af302Sopenharmony_ci
80570af302Sopenharmony_ci    int result = rename(oldname, newname);
81570af302Sopenharmony_ci    EXPECT_EQ("rename_0300", result, 0);
82570af302Sopenharmony_ci
83570af302Sopenharmony_ci    int fd = open(newname, O_RDONLY);
84570af302Sopenharmony_ci    EXPECT_TRUE("rename_0300", fd != -1);
85570af302Sopenharmony_ci
86570af302Sopenharmony_ci    char buf[10];
87570af302Sopenharmony_ci    memset(buf, 0, sizeof(buf));
88570af302Sopenharmony_ci    int nread = read(fd, buf, sizeof(buf));
89570af302Sopenharmony_ci    EXPECT_TRUE("rename_0300", nread > 0);
90570af302Sopenharmony_ci    EXPECT_TRUE("rename_0300", strcmp(buf, "old") == 0);
91570af302Sopenharmony_ci
92570af302Sopenharmony_ci    remove(newname);
93570af302Sopenharmony_ci}
94570af302Sopenharmony_ci
95570af302Sopenharmony_ciint main(int argc, char *argv[])
96570af302Sopenharmony_ci{
97570af302Sopenharmony_ci    rename_0100();
98570af302Sopenharmony_ci    rename_0200();
99570af302Sopenharmony_ci    rename_0300();
100570af302Sopenharmony_ci    return t_status;
101570af302Sopenharmony_ci}