1d9f0492fSopenharmony_ci/*
2d9f0492fSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd.
3d9f0492fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4d9f0492fSopenharmony_ci * you may not use this file except in compliance with the License.
5d9f0492fSopenharmony_ci * You may obtain a copy of the License at
6d9f0492fSopenharmony_ci *
7d9f0492fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
8d9f0492fSopenharmony_ci *
9d9f0492fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10d9f0492fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11d9f0492fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12d9f0492fSopenharmony_ci * See the License for the specific language governing permissions and
13d9f0492fSopenharmony_ci * limitations under the License.
14d9f0492fSopenharmony_ci */
15d9f0492fSopenharmony_ci
16d9f0492fSopenharmony_ci#include <sys/statvfs.h>
17d9f0492fSopenharmony_ci#include "init_cmds.h"
18d9f0492fSopenharmony_ci#include "init_param.h"
19d9f0492fSopenharmony_ci#include "init_group_manager.h"
20d9f0492fSopenharmony_ci#include "param_stub.h"
21d9f0492fSopenharmony_ci#include "init_utils.h"
22d9f0492fSopenharmony_ci#include "trigger_manager.h"
23d9f0492fSopenharmony_ci
24d9f0492fSopenharmony_ciusing namespace testing::ext;
25d9f0492fSopenharmony_ciusing namespace std;
26d9f0492fSopenharmony_ci
27d9f0492fSopenharmony_cistatic void DoCmdByName(const char *name, const char *cmdContent)
28d9f0492fSopenharmony_ci{
29d9f0492fSopenharmony_ci    int cmdIndex = 0;
30d9f0492fSopenharmony_ci    (void)GetMatchCmd(name, &cmdIndex);
31d9f0492fSopenharmony_ci    DoCmdByIndex(cmdIndex, cmdContent, nullptr);
32d9f0492fSopenharmony_ci}
33d9f0492fSopenharmony_ci
34d9f0492fSopenharmony_cinamespace init_ut {
35d9f0492fSopenharmony_ciclass CmdsUnitTest : public testing::Test {
36d9f0492fSopenharmony_cipublic:
37d9f0492fSopenharmony_ci    static void SetUpTestCase(void) {};
38d9f0492fSopenharmony_ci    static void TearDownTestCase(void) {};
39d9f0492fSopenharmony_ci    void SetUp() {};
40d9f0492fSopenharmony_ci    void TearDown() {};
41d9f0492fSopenharmony_ci};
42d9f0492fSopenharmony_ci
43d9f0492fSopenharmony_ciHWTEST_F(CmdsUnitTest, TestCmdExecByName1, TestSize.Level1)
44d9f0492fSopenharmony_ci{
45d9f0492fSopenharmony_ci    DoCmdByName("timer_start ", "media_service|5000");
46d9f0492fSopenharmony_ci    DoCmdByName("timer_start ", "|5000");
47d9f0492fSopenharmony_ci    DoCmdByName("timer_stop ", "media_service");
48d9f0492fSopenharmony_ci    DoCmdByName("exec ", "media_service");
49d9f0492fSopenharmony_ci    DoCmdByName("syncexec ", "/system/bin/toybox");
50d9f0492fSopenharmony_ci    DoCmdByName("load_access_token_id ", "media_service");
51d9f0492fSopenharmony_ci    DoCmdByName("load_access_token_id ", "");
52d9f0492fSopenharmony_ci    DoCmdByName("stopAllServices ", "false");
53d9f0492fSopenharmony_ci    DoCmdByName("stopAllServices ", "true");
54d9f0492fSopenharmony_ci    DoCmdByName("umount ", "/2222222");
55d9f0492fSopenharmony_ci    DoCmdByName("mount ", "/2222222");
56d9f0492fSopenharmony_ci    DoCmdByName("mount ", "ext4 /2222222 /data wait filecrypt=555");
57d9f0492fSopenharmony_ci    DoCmdByName("umount ", "/2222222");
58d9f0492fSopenharmony_ci    DoCmdByName("init_global_key ", "/data");
59d9f0492fSopenharmony_ci    DoCmdByName("init_global_key ", "arg0 arg1");
60d9f0492fSopenharmony_ci    DoCmdByName("init_main_user ", "testUser");
61d9f0492fSopenharmony_ci    DoCmdByName("init_main_user ", nullptr);
62d9f0492fSopenharmony_ci    DoCmdByName("mkswap ", "/data/init_ut");
63d9f0492fSopenharmony_ci    DoCmdByName("swapon ", "/data/init_ut");
64d9f0492fSopenharmony_ci    DoCmdByName("sync ", "");
65d9f0492fSopenharmony_ci    DoCmdByName("restorecon ", "");
66d9f0492fSopenharmony_ci    DoCmdByName("restorecon ", "/data  /data");
67d9f0492fSopenharmony_ci    DoCmdByName("suspend ", "");
68d9f0492fSopenharmony_ci    DoCmdByName("wait ", "1");
69d9f0492fSopenharmony_ci    DoCmdByName("wait ", "aaa 1");
70d9f0492fSopenharmony_ci    DoCmdByName("mksandbox", "/sandbox");
71d9f0492fSopenharmony_ci    DoCmdByName("mount_fstab ", "/2222222");
72d9f0492fSopenharmony_ci    DoCmdByName("umount_fstab ", "/2222222");
73d9f0492fSopenharmony_ci    DoCmdByName("mknode  ", "node1 node1 node1 node1 node1");
74d9f0492fSopenharmony_ci    DoCmdByName("makedev ", "/device1 device2");
75d9f0492fSopenharmony_ci    DoCmdByName("symlink ", "/xxx/xxx/xxx1 /xxx/xxx/xxx2");
76d9f0492fSopenharmony_ci    DoCmdByName("load_param ", "aaa onlyadd");
77d9f0492fSopenharmony_ci    DoCmdByName("load_persist_params ", "");
78d9f0492fSopenharmony_ci    DoCmdByName("load_param ", "");
79d9f0492fSopenharmony_ci    DoCmdByName("setparam ", "bbb 0");
80d9f0492fSopenharmony_ci    DoCmdByName("ifup ", "aaa, bbb");
81d9f0492fSopenharmony_ci    DoCmdByName("insmod ", "a b");
82d9f0492fSopenharmony_ci    DoCmdByName("insmod ", "/data /data");
83d9f0492fSopenharmony_ci}
84d9f0492fSopenharmony_ci
85d9f0492fSopenharmony_ciHWTEST_F(CmdsUnitTest, TestCommonMkdir, TestSize.Level1)
86d9f0492fSopenharmony_ci{
87d9f0492fSopenharmony_ci    auto checkMkdirCmd = [=](const char *mkdirFile, const char *cmdLine) {
88d9f0492fSopenharmony_ci        DoCmdByName("mkdir ", cmdLine);
89d9f0492fSopenharmony_ci        return access(mkdirFile, F_OK);
90d9f0492fSopenharmony_ci    };
91d9f0492fSopenharmony_ci    EXPECT_EQ(checkMkdirCmd("/data/init_ut/test_dir0", "/data/init_ut/test_dir0"), 0);
92d9f0492fSopenharmony_ci    EXPECT_EQ(checkMkdirCmd("/data/init_ut/test_dir1", "/data/init_ut/test_dir1 0755"), 0);
93d9f0492fSopenharmony_ci    EXPECT_EQ(checkMkdirCmd("/data/init_ut/test_dir2", "/data/init_ut/test_dir2 0755 system system"), 0);
94d9f0492fSopenharmony_ci
95d9f0492fSopenharmony_ci    // abnormal
96d9f0492fSopenharmony_ci    EXPECT_NE(checkMkdirCmd("/data/init_ut/test_dir3", ""), 0);
97d9f0492fSopenharmony_ci    EXPECT_NE(checkMkdirCmd("/data/init_ut/test_dir4", "/data/init_ut/test_dir4 0755 system"), 0);
98d9f0492fSopenharmony_ci    EXPECT_EQ(checkMkdirCmd("/data/init_ut/test_dir5", "/data/init_ut/test_dir5 0755 error error"), 0);
99d9f0492fSopenharmony_ci}
100d9f0492fSopenharmony_ci
101d9f0492fSopenharmony_ciHWTEST_F(CmdsUnitTest, TestCommonChown, TestSize.Level1)
102d9f0492fSopenharmony_ci{
103d9f0492fSopenharmony_ci    const char *testFile = "/data/init_ut/test_dir0";
104d9f0492fSopenharmony_ci    DoCmdByName("chown ", "system system /data/init_ut/test_dir0");
105d9f0492fSopenharmony_ci    struct stat info = {};
106d9f0492fSopenharmony_ci    stat(testFile, &info);
107d9f0492fSopenharmony_ci    const unsigned int systemUidGid = 1000;
108d9f0492fSopenharmony_ci    EXPECT_EQ(info.st_uid, systemUidGid);
109d9f0492fSopenharmony_ci    EXPECT_EQ(info.st_gid, systemUidGid);
110d9f0492fSopenharmony_ci
111d9f0492fSopenharmony_ci    // abnormal
112d9f0492fSopenharmony_ci    DoCmdByName("chown ", "error error /data/init_ut/test_dir0");
113d9f0492fSopenharmony_ci    stat(testFile, &info);
114d9f0492fSopenharmony_ci    EXPECT_EQ(info.st_uid, systemUidGid);
115d9f0492fSopenharmony_ci    EXPECT_EQ(info.st_gid, systemUidGid);
116d9f0492fSopenharmony_ci}
117d9f0492fSopenharmony_ci
118d9f0492fSopenharmony_ciHWTEST_F(CmdsUnitTest, TestCommonChmod, TestSize.Level1)
119d9f0492fSopenharmony_ci{
120d9f0492fSopenharmony_ci    const char *testFile = "/data/init_ut/test_dir0/test_file0";
121d9f0492fSopenharmony_ci    const mode_t testMode = S_IRWXU | S_IRWXG | S_IRWXO;
122d9f0492fSopenharmony_ci    int fd = open(testFile, O_CREAT | O_WRONLY, testMode);
123d9f0492fSopenharmony_ci    ASSERT_GE(fd, 0);
124d9f0492fSopenharmony_ci    DoCmdByName("chmod ", "777 /data/init_ut/test_dir0/test_file0");
125d9f0492fSopenharmony_ci    struct stat info;
126d9f0492fSopenharmony_ci    stat(testFile, &info);
127d9f0492fSopenharmony_ci    EXPECT_EQ(testMode, testMode & info.st_mode);
128d9f0492fSopenharmony_ci
129d9f0492fSopenharmony_ci    // abnormal
130d9f0492fSopenharmony_ci    DoCmdByName("chmod ", "999 /data/init_ut/test_dir0/test_file0");
131d9f0492fSopenharmony_ci    stat(testFile, &info);
132d9f0492fSopenharmony_ci    EXPECT_EQ(testMode, testMode & info.st_mode);
133d9f0492fSopenharmony_ci    DoCmdByName("chmod ", "777 /data/init_ut/test_dir0/test_file001");
134d9f0492fSopenharmony_ci
135d9f0492fSopenharmony_ci    close(fd);
136d9f0492fSopenharmony_ci}
137d9f0492fSopenharmony_ci
138d9f0492fSopenharmony_ciHWTEST_F(CmdsUnitTest, TestCommonCopy, TestSize.Level1)
139d9f0492fSopenharmony_ci{
140d9f0492fSopenharmony_ci    const char *testFile1 = "/data/init_ut/test_dir0/test_file_copy1";
141d9f0492fSopenharmony_ci    DoCmdByName("copy ", "/data/init_ut/test_dir0/test_file0 /data/init_ut/test_dir0/test_file_copy1");
142d9f0492fSopenharmony_ci    int fd = open(testFile1, O_RDWR);
143d9f0492fSopenharmony_ci    ASSERT_GE(fd, 0);
144d9f0492fSopenharmony_ci    write(fd, "aaa", strlen("aaa"));
145d9f0492fSopenharmony_ci
146d9f0492fSopenharmony_ci    const char *testFile2 = "/data/init_ut/test_dir0/test_file_copy2";
147d9f0492fSopenharmony_ci    DoCmdByName("copy ", "/data/init_ut/test_dir0/test_file_copy1 /data/init_ut/test_dir0/test_file_copy2");
148d9f0492fSopenharmony_ci    int ret = access(testFile2, F_OK);
149d9f0492fSopenharmony_ci    EXPECT_EQ(ret, 0);
150d9f0492fSopenharmony_ci    close(fd);
151d9f0492fSopenharmony_ci    // abnormal
152d9f0492fSopenharmony_ci    DoCmdByName("copy ", "/data/init_ut/test_dir0/test_file_copy1 /data/init_ut/test_dir0/test_file_copy1");
153d9f0492fSopenharmony_ci    DoCmdByName("copy ", "/data/init_ut/test_dir0/test_file_copy11 /data/init_ut/test_dir0/test_file_copy1");
154d9f0492fSopenharmony_ci    DoCmdByName("copy ", "a");
155d9f0492fSopenharmony_ci
156d9f0492fSopenharmony_ci    DoCmdByName("chmod ", "111 /data/init_ut/test_dir0/test_file_copy1");
157d9f0492fSopenharmony_ci    DoCmdByName("copy ", "/data/init_ut/test_dir0/test_file_copy1 /data/init_ut/test_dir0/test_file_copy2");
158d9f0492fSopenharmony_ci
159d9f0492fSopenharmony_ci    DoCmdByName("chmod ", "777 /data/init_ut/test_dir0/test_file_copy1");
160d9f0492fSopenharmony_ci    DoCmdByName("chmod ", "111 /data/init_ut/test_dir0/test_file_copy2");
161d9f0492fSopenharmony_ci    DoCmdByName("copy ", "/data/init_ut/test_dir0/test_file_copy1 /data/init_ut/test_dir0/test_file_copy2");
162d9f0492fSopenharmony_ci    DoCmdByName("chmod ", "777 /data/init_ut/test_dir0/test_file_copy2");
163d9f0492fSopenharmony_ci}
164d9f0492fSopenharmony_ci
165d9f0492fSopenharmony_ciHWTEST_F(CmdsUnitTest, TestCommonWrite, TestSize.Level1)
166d9f0492fSopenharmony_ci{
167d9f0492fSopenharmony_ci    const char *testFile1 = "/data/init_ut/test_dir0/test_file_write1";
168d9f0492fSopenharmony_ci    int fd = open(testFile1, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
169d9f0492fSopenharmony_ci    ASSERT_GE(fd, 0);
170d9f0492fSopenharmony_ci
171d9f0492fSopenharmony_ci    DoCmdByName("write ", "/data/init_ut/test_dir0/test_file_write1 aaa");
172d9f0492fSopenharmony_ci    const int bufLen = 50;
173d9f0492fSopenharmony_ci    char buffer[bufLen];
174d9f0492fSopenharmony_ci    int length = read(fd, buffer, bufLen - 1);
175d9f0492fSopenharmony_ci    EXPECT_EQ(length, strlen("aaa"));
176d9f0492fSopenharmony_ci    close(fd);
177d9f0492fSopenharmony_ci    // abnormal
178d9f0492fSopenharmony_ci    DoCmdByName("write ", "/data/init_ut/test_dir0/test_file_write2 aaa 2");
179d9f0492fSopenharmony_ci}
180d9f0492fSopenharmony_ci
181d9f0492fSopenharmony_ciHWTEST_F(CmdsUnitTest, TestCommonRm, TestSize.Level1)
182d9f0492fSopenharmony_ci{
183d9f0492fSopenharmony_ci    const char *testFile1 = "/data/init_ut/test_dir0/test_file_write1";
184d9f0492fSopenharmony_ci    DoCmdByName("rm ", testFile1);
185d9f0492fSopenharmony_ci    int ret = access(testFile1, F_OK);
186d9f0492fSopenharmony_ci    EXPECT_NE(ret, 0);
187d9f0492fSopenharmony_ci
188d9f0492fSopenharmony_ci    testFile1 = "/data/init_ut/test_dir1";
189d9f0492fSopenharmony_ci    DoCmdByName("rmdir ", testFile1);
190d9f0492fSopenharmony_ci    ret = access(testFile1, F_OK);
191d9f0492fSopenharmony_ci    EXPECT_NE(ret, 0);
192d9f0492fSopenharmony_ci
193d9f0492fSopenharmony_ci    // abnormal
194d9f0492fSopenharmony_ci    DoCmdByName("rmdir ", testFile1);
195d9f0492fSopenharmony_ci}
196d9f0492fSopenharmony_ci
197d9f0492fSopenharmony_ciHWTEST_F(CmdsUnitTest, TestCommonExport, TestSize.Level1)
198d9f0492fSopenharmony_ci{
199d9f0492fSopenharmony_ci    DoCmdByName("export ", "TEST_INIT 1");
200d9f0492fSopenharmony_ci    EXPECT_STREQ("1", getenv("TEST_INIT"));
201d9f0492fSopenharmony_ci    unsetenv("TEST_INIT");
202d9f0492fSopenharmony_ci    EXPECT_STRNE("1", getenv("TEST_INIT"));
203d9f0492fSopenharmony_ci}
204d9f0492fSopenharmony_ci
205d9f0492fSopenharmony_ciHWTEST_F(CmdsUnitTest, TestCommonMount, TestSize.Level1)
206d9f0492fSopenharmony_ci{
207d9f0492fSopenharmony_ci    DoCmdByName("mount ", "ext4 /dev/block/platform/soc/10100000.himci.eMMC/by-name/vendor "
208d9f0492fSopenharmony_ci        "/vendor wait rdonly barrier=1");
209d9f0492fSopenharmony_ci    struct statvfs64 vfs {};
210d9f0492fSopenharmony_ci    int ret = statvfs64("/vendor", &vfs);
211d9f0492fSopenharmony_ci    EXPECT_GE(ret, 0);
212d9f0492fSopenharmony_ci    EXPECT_GT(vfs.f_bsize, 0);
213d9f0492fSopenharmony_ci}
214d9f0492fSopenharmony_ci
215d9f0492fSopenharmony_ciHWTEST_F(CmdsUnitTest, TestGetCmdKey, TestSize.Level1)
216d9f0492fSopenharmony_ci{
217d9f0492fSopenharmony_ci    const char *cmd1 = GetCmdKey(0);
218d9f0492fSopenharmony_ci    EXPECT_STREQ(cmd1, "start ");
219d9f0492fSopenharmony_ci}
220d9f0492fSopenharmony_ci
221d9f0492fSopenharmony_ciHWTEST_F(CmdsUnitTest, TestDoCmdByIndex, TestSize.Level1)
222d9f0492fSopenharmony_ci{
223d9f0492fSopenharmony_ci    DoCmdByIndex(1, "/data/init_ut/test_cmd_dir0", nullptr);
224d9f0492fSopenharmony_ci    int ret = access("/data/init_ut/test_cmd_dir0", F_OK);
225d9f0492fSopenharmony_ci    EXPECT_EQ(ret, 0);
226d9f0492fSopenharmony_ci
227d9f0492fSopenharmony_ci    const int execPos = 17;
228d9f0492fSopenharmony_ci    DoCmdByIndex(execPos, "sleep 1", nullptr);
229d9f0492fSopenharmony_ci    DoCmdByIndex(23, "test", nullptr); // 23 is cmd index
230d9f0492fSopenharmony_ci}
231d9f0492fSopenharmony_ci
232d9f0492fSopenharmony_ciHWTEST_F(CmdsUnitTest, TestGetCmdLinesFromJson, TestSize.Level1)
233d9f0492fSopenharmony_ci{
234d9f0492fSopenharmony_ci    const char *jsonStr = "{\"jobs\":[{\"name\":\"init\",\"cmds\":[\"sleep 1\",100,\"test321 123\"]}]}";
235d9f0492fSopenharmony_ci    cJSON* jobItem = cJSON_Parse(jsonStr);
236d9f0492fSopenharmony_ci    ASSERT_NE(nullptr, jobItem);
237d9f0492fSopenharmony_ci    cJSON *cmdsItem = cJSON_GetObjectItem(jobItem, "jobs");
238d9f0492fSopenharmony_ci    ASSERT_NE(nullptr, cmdsItem);
239d9f0492fSopenharmony_ci    ASSERT_TRUE(cJSON_IsArray(cmdsItem));
240d9f0492fSopenharmony_ci
241d9f0492fSopenharmony_ci    cJSON *cmdsItem1 = cJSON_GetArrayItem(cmdsItem, 0);
242d9f0492fSopenharmony_ci    ASSERT_NE(nullptr, cmdsItem1);
243d9f0492fSopenharmony_ci    CmdLines **cmdLines = (CmdLines **)calloc(1, sizeof(CmdLines *));
244d9f0492fSopenharmony_ci    ASSERT_NE(nullptr, cmdLines);
245d9f0492fSopenharmony_ci    int ret = GetCmdLinesFromJson(cmdsItem1, cmdLines);
246d9f0492fSopenharmony_ci    EXPECT_EQ(ret, -1);
247d9f0492fSopenharmony_ci    cJSON *cmdsItem2 = cJSON_GetObjectItem(cmdsItem1, "cmds");
248d9f0492fSopenharmony_ci    ASSERT_NE(nullptr, cmdsItem2);
249d9f0492fSopenharmony_ci    ret = GetCmdLinesFromJson(cmdsItem2, cmdLines);
250d9f0492fSopenharmony_ci    EXPECT_EQ(ret, 0);
251d9f0492fSopenharmony_ci
252d9f0492fSopenharmony_ci    cJSON_Delete(jobItem);
253d9f0492fSopenharmony_ci    if (cmdLines[0] != nullptr) {
254d9f0492fSopenharmony_ci        free(cmdLines[0]);
255d9f0492fSopenharmony_ci        cmdLines[0] = nullptr;
256d9f0492fSopenharmony_ci    }
257d9f0492fSopenharmony_ci    free(cmdLines);
258d9f0492fSopenharmony_ci    cmdLines = nullptr;
259d9f0492fSopenharmony_ci}
260d9f0492fSopenharmony_ci
261d9f0492fSopenharmony_ciHWTEST_F(CmdsUnitTest, TestInitCmdFunc, TestSize.Level1)
262d9f0492fSopenharmony_ci{
263d9f0492fSopenharmony_ci    int ret = GetBootModeFromMisc();
264d9f0492fSopenharmony_ci    EXPECT_EQ(ret, 0);
265d9f0492fSopenharmony_ci    ret = SetFileCryptPolicy(nullptr);
266d9f0492fSopenharmony_ci    EXPECT_NE(ret, 0);
267d9f0492fSopenharmony_ci}
268d9f0492fSopenharmony_ci
269d9f0492fSopenharmony_ciHWTEST_F(CmdsUnitTest, TestBuildStringFromCmdArg, TestSize.Level1)
270d9f0492fSopenharmony_ci{
271d9f0492fSopenharmony_ci    int strNum = 3;
272d9f0492fSopenharmony_ci    struct CmdArgs *ctx = (struct CmdArgs *)calloc(1, sizeof(struct CmdArgs) + sizeof(char *) * (strNum));
273d9f0492fSopenharmony_ci    ctx->argc = strNum;
274d9f0492fSopenharmony_ci    ctx->argv[0] = strdup("123456789012345678901234567890123456789012345678901234567890   \
275d9f0492fSopenharmony_ci            1234567890123456789012345678901234567890123456789012345678901234567");
276d9f0492fSopenharmony_ci    ctx->argv[1] = strdup("test");
277d9f0492fSopenharmony_ci    ctx->argv[2] = nullptr;
278d9f0492fSopenharmony_ci    char *options = BuildStringFromCmdArg(ctx, 0);
279d9f0492fSopenharmony_ci    EXPECT_EQ(options[0], '\0');
280d9f0492fSopenharmony_ci    free(options);
281d9f0492fSopenharmony_ci
282d9f0492fSopenharmony_ci    options = BuildStringFromCmdArg(ctx, 1);
283d9f0492fSopenharmony_ci    EXPECT_STREQ(options, "test");
284d9f0492fSopenharmony_ci    free(options);
285d9f0492fSopenharmony_ci    FreeCmdArg(ctx);
286d9f0492fSopenharmony_ci}
287d9f0492fSopenharmony_ci
288d9f0492fSopenharmony_ciHWTEST_F(CmdsUnitTest, TestInitDiffTime, TestSize.Level1)
289d9f0492fSopenharmony_ci{
290d9f0492fSopenharmony_ci    INIT_TIMING_STAT stat;
291d9f0492fSopenharmony_ci    stat.startTime.tv_sec = 2; // 2 is test sec
292d9f0492fSopenharmony_ci    stat.startTime.tv_nsec = 1000;  // 1000 is test nsec
293d9f0492fSopenharmony_ci
294d9f0492fSopenharmony_ci    stat.endTime.tv_sec = 3;  // 3 is test sec
295d9f0492fSopenharmony_ci    stat.endTime.tv_nsec = 0;
296d9f0492fSopenharmony_ci
297d9f0492fSopenharmony_ci    long long diff = InitDiffTime(&stat);
298d9f0492fSopenharmony_ci    EXPECT_TRUE(diff > 0);
299d9f0492fSopenharmony_ci}
300d9f0492fSopenharmony_ci} // namespace init_ut
301