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