• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 <chrono>
17 #include <climits>
18 #include <cstdlib>
19 #include <ctime>
20 #include <fstream>
21 #include <thread>
22 #include <unordered_set>
23 
24 #include "accesstoken_kit.h"
25 #include "ipc_skeleton.h"
26 #include "nativetoken_kit.h"
27 #include "time_common.h"
28 #include "timer_info_test.h"
29 #include "token_setproc.h"
30 #include "want_agent.h"
31 #include "time_service_test.h"
32 #include "ntp_trusted_time.h"
33 
34 #define private public
35 #include "time_system_ability.h"
36 #include "time_service_client.h"
37 
38 namespace {
39 using namespace testing::ext;
40 using namespace OHOS;
41 using namespace OHOS::MiscServices;
42 using namespace std::chrono;
43 using namespace OHOS::Security::AccessToken;
44 
45 constexpr int ONE_HUNDRED = 100;
46 constexpr int FIVE_HUNDRED = 500;
47 constexpr uint64_t MICRO_TO_MILLISECOND = 1000;
48 
49 static HapPolicyParams g_policyA = {
50     .apl = APL_SYSTEM_CORE,
51     .domain = "test.domain",
52     .permList = {
53         {
54             .permissionName = "ohos.permission.SET_TIME",
55             .bundleName = "ohos.permission_test.demoB",
56             .grantMode = 1,
57             .availableLevel = APL_NORMAL,
58             .label = "label",
59             .labelId = 1,
60             .description = "test",
61             .descriptionId = 1
62         },
63         {
64             .permissionName = "ohos.permission.SET_TIME_ZONE",
65             .bundleName = "ohos.permission_test.demoB",
66             .grantMode = 1,
67             .availableLevel = APL_NORMAL,
68             .label = "label",
69             .labelId = 1,
70             .description = "test",
71             .descriptionId = 1
72         }
73     },
74     .permStateList = {
75         {
76             .permissionName = "ohos.permission.SET_TIME",
77             .isGeneral = true,
78             .resDeviceID = { "local" },
79             .grantStatus = { PermissionState::PERMISSION_GRANTED },
80             .grantFlags = { 1 }
81         },
82         {
83             .permissionName = "ohos.permission.SET_TIME_ZONE",
84             .isGeneral = true,
85             .resDeviceID = { "local" },
86             .grantStatus = { PermissionState::PERMISSION_GRANTED },
87             .grantFlags = { 1 }
88         }
89     }
90 };
91 
92 /* push_managere_service is in the exemption list of adjust timer */
93 /* use push_manager_service to prevent timers from being adjusted */
94 static HapInfoParams g_systemInfoParams = {
95     .userID = 1,
96     .bundleName = "push_manager_service",
97     .instIndex = 0,
98     .appIDDesc = "test",
99     .apiVersion = 8,
100     .isSystemApp = true
101 };
102 
103 static HapPolicyParams g_policyB = { .apl = APL_NORMAL, .domain = "test.domain" };
104 
105 static HapInfoParams g_notSystemInfoParams = {
106     .userID = 100,
107     .bundleName = "push_manager_service",
108     .instIndex = 0,
109     .appIDDesc = "test",
110     .apiVersion = 9,
111     .isSystemApp = false
112 };
113 
114 class TimeClientTest : public testing::Test {
115 public:
116     static void SetUpTestCase(void);
117     static void TearDownTestCase(void);
118     void SetUp();
119     void TearDown();
120     static void AddPermission();
121     void DeletePermission();
122 };
123 
AddPermission()124 void TimeClientTest::AddPermission()
125 {
126     AccessTokenIDEx tokenIdEx = { 0 };
127     tokenIdEx = AccessTokenKit::AllocHapToken(g_systemInfoParams, g_policyA);
128     SetSelfTokenID(tokenIdEx.tokenIDEx);
129 }
130 
DeletePermission()131 void TimeClientTest::DeletePermission()
132 {
133     AccessTokenIDEx tokenIdEx = { 0 };
134     tokenIdEx = AccessTokenKit::AllocHapToken(g_notSystemInfoParams, g_policyB);
135     SetSelfTokenID(tokenIdEx.tokenIDEx);
136 }
137 
SetUpTestCase(void)138 void TimeClientTest::SetUpTestCase(void)
139 {
140 }
141 
TearDownTestCase(void)142 void TimeClientTest::TearDownTestCase(void)
143 {
144 }
145 
SetUp(void)146 void TimeClientTest::SetUp(void)
147 {
148     AddPermission();
149 }
150 
TearDown(void)151 void TimeClientTest::TearDown(void)
152 {
153 }
154 
TestNtpThread(const char * name)155 void TestNtpThread(const char *name)
156 {
157     int64_t time;
158     auto errCodeNtpTime = TimeServiceClient::GetInstance()->GetNtpTimeMs(time);
159     EXPECT_EQ(errCodeNtpTime, TimeError::E_TIME_OK);
160     int64_t timeLater;
161     auto errCodeRealTime = TimeServiceClient::GetInstance()->GetRealTimeMs(timeLater);
162     EXPECT_EQ(errCodeRealTime, TimeError::E_TIME_OK);
163     EXPECT_GT(timeLater, time);
164 }
165 
166 /**
167  * @brief Wait for timer trigger
168  * @param data the global variable that callback function changes
169  * @param interval the time need to wait
170  */
WaitForAlarm(std::atomic<int> * data,int interval)171 void WaitForAlarm(std::atomic<int> * data, int interval)
172 {
173     int i = 0;
174     if (interval > 0) {
175         usleep(interval);
176     }
177     while (*data == 0 && i < ONE_HUNDRED) {
178         ++i;
179         usleep(ONE_HUNDRED);
180     }
181 }
182 
183 /**
184 * @tc.name: GetNtpTimeMs001
185 * @tc.desc: get ntp time.
186 * @tc.type: FUNC
187 */
188 HWTEST_F(TimeClientTest, GetNtpTimeMs001, TestSize.Level1)
189 {
190     int64_t time;
191     auto errCode = TimeServiceClient::GetInstance()->GetNtpTimeMs(time);
192     TIME_HILOGI(TIME_MODULE_CLIENT, "time now : %{public}" PRId64 "", time);
193     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
194 }
195 
196 /**
197 * @tc.name: GetNtpTimeMsAndGetRealTimeMs001
198 * @tc.desc: get ntp time and get real time.
199 * @tc.type: FUNC
200 */
201 HWTEST_F(TimeClientTest, GetNtpTimeMsAndGetRealTimeMs001, TestSize.Level1)
202 {
203     std::thread thread1(TestNtpThread, "thread1");
204     std::thread thread2(TestNtpThread, "thread2");
205     std::thread thread3(TestNtpThread, "thread3");
206     std::thread thread4(TestNtpThread, "thread4");
207     thread1.join();
208     thread2.join();
209     thread3.join();
210     thread4.join();
211 }
212 
213 /**
214 * @tc.name: SetTime001
215 * @tc.desc: set system time.
216 * @tc.type: FUNC
217 */
218 HWTEST_F(TimeClientTest, SetTime001, TestSize.Level1)
219 {
220     struct timeval currentTime {};
221     gettimeofday(&currentTime, nullptr);
222     int64_t time = (currentTime.tv_sec + 1000) * 1000 + currentTime.tv_usec / 1000;
223     ASSERT_GT(time, 0);
224     TIME_HILOGI(TIME_MODULE_CLIENT, "Time now : %{public}" PRId64 "", time);
225     int32_t result = TimeServiceClient::GetInstance()->SetTimeV9(time);
226     EXPECT_EQ(result, TimeError::E_TIME_OK);
227 }
228 
229 /**
230 * @tc.name: SetTime002
231 * @tc.desc: set system time.
232 * @tc.type: FUNC
233 */
234 HWTEST_F(TimeClientTest, SetTime002, TestSize.Level1)
235 {
236     int32_t result = TimeServiceClient::GetInstance()->SetTimeV9(-1);
237     EXPECT_NE(result, TimeError::E_TIME_OK);
238 }
239 
240 /**
241 * @tc.name: SetTime003
242 * @tc.desc: set system time.
243 * @tc.type: FUNC
244 */
245 HWTEST_F(TimeClientTest, SetTime003, TestSize.Level1)
246 {
247     int32_t result = TimeServiceClient::GetInstance()->SetTimeV9(LLONG_MAX);
248     EXPECT_NE(result, TimeError::E_TIME_OK);
249 }
250 
251 /**
252 * @tc.name: SetTime004
253 * @tc.desc: set system time.
254 * @tc.type: FUNC
255 */
256 HWTEST_F(TimeClientTest, SetTime004, TestSize.Level1)
257 {
258     DeletePermission();
259     struct timeval currentTime {};
260     gettimeofday(&currentTime, nullptr);
261     int64_t time = (currentTime.tv_sec + 1000) * 1000 + currentTime.tv_usec / 1000;
262     ASSERT_GT(time, 0);
263     int32_t result = TimeServiceClient::GetInstance()->SetTimeV9(time);
264     EXPECT_NE(result, TimeError::E_TIME_OK);
265     int32_t code;
266     bool ret = TimeServiceClient::GetInstance()->SetTime(time, code);
267     EXPECT_EQ(ret, false);
268     EXPECT_NE(code, TimeError::E_TIME_OK);
269 }
270 
271 /**
272 * @tc.name: SetTimeZone001
273 * @tc.desc: set system time zone.
274 * @tc.type: FUNC
275 */
276 HWTEST_F(TimeClientTest, SetTimeZone001, TestSize.Level1)
277 {
278     time_t t;
279     (void)time(&t);
280     TIME_HILOGI(TIME_MODULE_CLIENT, "Time before: %{public}s", asctime(localtime(&t)));
281     auto getCurrentTimeZone = TimeServiceClient::GetInstance()->GetTimeZone();
282     EXPECT_FALSE(getCurrentTimeZone.empty());
283     std::string timeZoneNicosia("Asia/Nicosia");
284     int32_t result = TimeServiceClient::GetInstance()->SetTimeZoneV9(timeZoneNicosia);
285     EXPECT_EQ(result, TimeError::E_TIME_OK);
286     std::string getTimeZoneNicosia;
287     int32_t getTimeZoneResult = TimeServiceClient::GetInstance()->GetTimeZone(getTimeZoneNicosia);
288     EXPECT_EQ(getTimeZoneResult, TimeError::E_TIME_OK);;
289     EXPECT_EQ(timeZoneNicosia, getTimeZoneNicosia);
290     int32_t ret = TimeServiceClient::GetInstance()->SetTimeZoneV9(getCurrentTimeZone);
291     EXPECT_EQ(ret, TimeError::E_TIME_OK);
292 }
293 
294 /**
295 * @tc.name: SetTimeZone002
296 * @tc.desc: set system time zone.
297 * @tc.type: FUNC
298 */
299 HWTEST_F(TimeClientTest, SetTimeZone002, TestSize.Level1)
300 {
301     int32_t result = TimeServiceClient::GetInstance()->SetTimeZoneV9("123");
302     EXPECT_NE(result, TimeError::E_TIME_OK);
303 }
304 
305 /**
306 * @tc.name: SetTimeZone003
307 * @tc.desc: set system time zone.
308 * @tc.type: FUNC
309 */
310 HWTEST_F(TimeClientTest, SetTimeZone003, TestSize.Level1)
311 {
312     DeletePermission();
313     int32_t result = TimeServiceClient::GetInstance()->SetTimeZoneV9("Asia/Shanghai");
314     EXPECT_NE(result, TimeError::E_TIME_OK);
315     bool ret = TimeServiceClient::GetInstance()->SetTimeZone("Asia/Shanghai");
316     EXPECT_FALSE(ret);
317 }
318 
319 /**
320 * @tc.name: GetWallTimeMs001
321 * @tc.desc: get wall time (ms).
322 * @tc.type: FUNC
323 */
324 HWTEST_F(TimeClientTest, GetWallTimeMs001, TestSize.Level1)
325 {
326     int64_t time;
327     auto errCode = TimeServiceClient::GetInstance()->GetWallTimeMs(time);
328     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
329 }
330 
331 /**
332 * @tc.name: GetWallTimeNs001
333 * @tc.desc: get wall time (ns).
334 * @tc.type: FUNC
335 */
336 HWTEST_F(TimeClientTest, GetWallTimeNs001, TestSize.Level1)
337 {
338     int64_t time;
339     auto errCode = TimeServiceClient::GetInstance()->GetWallTimeNs(time);
340     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
341 }
342 
343 /**
344 * @tc.name: GetBootTimeNs001
345 * @tc.desc: get boot time (ns).
346 * @tc.type: FUNC
347 */
348 HWTEST_F(TimeClientTest, GetBootTimeNs001, TestSize.Level1)
349 {
350     int64_t time;
351     auto errCode = TimeServiceClient::GetInstance()->GetBootTimeNs(time);
352     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
353 }
354 
355 /**
356 * @tc.name: GetBootTimeMs001
357 * @tc.desc: get boot time (ms).
358 * @tc.type: FUNC
359 */
360 HWTEST_F(TimeClientTest, GetBootTimeMs001, TestSize.Level1)
361 {
362     int64_t time;
363     auto errCode = TimeServiceClient::GetInstance()->GetBootTimeMs(time);
364     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
365 }
366 
367 /**
368 * @tc.name: GetMonotonicTimeMs001
369 * @tc.desc: get monotonic time (ms).
370 * @tc.type: FUNC
371 */
372 HWTEST_F(TimeClientTest, GetMonotonicTimeMs001, TestSize.Level1)
373 {
374     int64_t time;
375     auto errCode = TimeServiceClient::GetInstance()->GetMonotonicTimeMs(time);
376     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
377 }
378 
379 /**
380 * @tc.name: GetMonotonicTimeNs001
381 * @tc.desc: get monotonic time (ns).
382 * @tc.type: FUNC
383 */
384 HWTEST_F(TimeClientTest, GetMonotonicTimeNs001, TestSize.Level1)
385 {
386     int64_t time;
387     auto errCode = TimeServiceClient::GetInstance()->GetMonotonicTimeNs(time);
388     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
389 }
390 
391 /**
392 * @tc.name: GetThreadTimeMs001
393 * @tc.desc: get thread time (ms).
394 * @tc.type: FUNC
395 */
396 HWTEST_F(TimeClientTest, GetThreadTimeMs001, TestSize.Level1)
397 {
398     int64_t time;
399     auto errCode = TimeServiceClient::GetInstance()->GetThreadTimeMs(time);
400     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
401 }
402 
403 /**
404 * @tc.name: GetThreadTimeNs001
405 * @tc.desc: get thread time (ns).
406 * @tc.type: FUNC
407 */
408 HWTEST_F(TimeClientTest, GetThreadTimeNs001, TestSize.Level1)
409 {
410     int64_t time;
411     auto errCode = TimeServiceClient::GetInstance()->GetThreadTimeNs(time);
412     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
413 }
414 
415 /**
416 * @tc.name: CreateTimer001
417 * @tc.desc: Create system timer.
418 * @tc.type: FUNC
419 */
420 HWTEST_F(TimeClientTest, CreateTimer001, TestSize.Level1)
421 {
422     uint64_t timerId = 0;
423     auto ret = TimeServiceClient::GetInstance()->StartTimerV9(timerId, 5);
424     EXPECT_NE(ret, TimeError::E_TIME_OK);
425     ret = TimeServiceClient::GetInstance()->StopTimerV9(timerId);
426     EXPECT_NE(ret, TimeError::E_TIME_OK);
427     ret = TimeServiceClient::GetInstance()->DestroyTimerV9(timerId);
428     EXPECT_NE(ret, TimeError::E_TIME_OK);
429 }
430 
431 /**
432 * @tc.name: CreateTimer002
433 * @tc.desc: Create system timer.
434 * @tc.type: FUNC
435 */
436 HWTEST_F(TimeClientTest, CreateTimer002, TestSize.Level1)
437 {
438     auto timerInfo = std::make_shared<TimerInfoTest>();
439     timerInfo->SetType(timerInfo->TIMER_TYPE_REALTIME);
440     timerInfo->SetRepeat(false);
441     timerInfo->SetInterval(0);
442     timerInfo->SetWantAgent(nullptr);
443     timerInfo->SetCallbackInfo(TimeOutCallback1);
444     uint64_t timerId;
445     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
446     TIME_HILOGI(TIME_MODULE_CLIENT, "timerId now : %{public}" PRId64 "", timerId);
447     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
448     auto ret = TimeServiceClient::GetInstance()->StartTimerV9(timerId, 2000);
449     EXPECT_EQ(ret, TimeError::E_TIME_OK);
450     ret = TimeServiceClient::GetInstance()->StopTimerV9(timerId);
451     EXPECT_EQ(ret, TimeError::E_TIME_OK);
452     ret = TimeServiceClient::GetInstance()->DestroyTimerV9(timerId);
453     EXPECT_EQ(ret, TimeError::E_TIME_OK);
454 }
455 
456 /**
457 * @tc.name: CreateTimer003
458 * @tc.desc: Create system timer.
459 * @tc.type: FUNC
460 */
461 HWTEST_F(TimeClientTest, CreateTimer003, TestSize.Level1)
462 {
463     auto timerInfo = std::make_shared<TimerInfoTest>();
464     timerInfo->SetType(timerInfo->TIMER_TYPE_REALTIME);
465     timerInfo->SetRepeat(false);
466     timerInfo->SetInterval(0);
467     auto ability = std::shared_ptr<OHOS::AbilityRuntime::WantAgent::WantAgent>();
468     timerInfo->SetWantAgent(ability);
469     timerInfo->SetCallbackInfo(TimeOutCallback1);
470     uint64_t timerId;
471     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
472     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
473     TimeServiceClient::GetInstance()->DestroyTimerV9(timerId);
474 }
475 
476 /**
477 * @tc.name: CreateTimer004
478 * @tc.desc: Create system timer.
479 * @tc.type: FUNC
480 */
481 HWTEST_F(TimeClientTest, CreateTimer004, TestSize.Level1)
482 {
483     g_data1 = 0;
484     auto timerInfo = std::make_shared<TimerInfoTest>();
485     timerInfo->SetType(timerInfo->TIMER_TYPE_REALTIME);
486     timerInfo->SetRepeat(false);
487     timerInfo->SetInterval(0);
488     timerInfo->SetWantAgent(nullptr);
489     timerInfo->SetCallbackInfo(TimeOutCallback1);
490     uint64_t timerId;
491     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
492     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
493     int64_t time;
494     TimeServiceClient::GetInstance()->GetBootTimeMs(time);
495     errCode = TimeServiceClient::GetInstance()->StartTimerV9(timerId, time + 2000);
496     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
497     errCode = TimeServiceClient::GetInstance()->DestroyTimerV9(timerId);
498     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
499     EXPECT_EQ(g_data1, 0);
500     errCode = TimeServiceClient::GetInstance()->StopTimerV9(timerId);
501     EXPECT_NE(errCode, TimeError::E_TIME_OK);
502 }
503 
504 /**
505 * @tc.name: CreateTimer005
506 * @tc.desc: Create system timer.
507 * @tc.type: FUNC
508 */
509 HWTEST_F(TimeClientTest, CreateTimer005, TestSize.Level1)
510 {
511     g_data1 = 1;
512     auto timerInfo = std::make_shared<TimerInfoTest>();
513     timerInfo->SetType(0);
514     timerInfo->SetRepeat(false);
515     timerInfo->SetInterval(0);
516     timerInfo->SetWantAgent(nullptr);
517     timerInfo->SetCallbackInfo(TimeOutCallback1);
518 
519     struct timeval timeOfDay {};
520     gettimeofday(&timeOfDay, NULL);
521     int64_t currentTime = (timeOfDay.tv_sec + 100) * 1000 + timeOfDay.tv_usec / 1000;
522     if (currentTime < 0) {
523         currentTime = 0;
524     }
525     uint64_t timerId;
526     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
527     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
528     errCode = TimeServiceClient::GetInstance()->StartTimerV9(timerId, static_cast<uint64_t>(currentTime));
529     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
530     errCode = TimeServiceClient::GetInstance()->DestroyTimerV9(timerId);
531     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
532     EXPECT_EQ(g_data1, 1);
533     errCode = TimeServiceClient::GetInstance()->StopTimerV9(timerId);
534     EXPECT_NE(errCode, TimeError::E_TIME_OK);
535 }
536 
537 /**
538 * @tc.name: CreateTimer006
539 * @tc.desc: Create system timer.
540 * @tc.type: FUNC
541 */
542 HWTEST_F(TimeClientTest, CreateTimer006, TestSize.Level1)
543 {
544     uint64_t timerId;
545     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(nullptr, timerId);
546     EXPECT_NE(errCode, TimeError::E_TIME_OK);
547     EXPECT_EQ(timerId, 0);
548 }
549 
550 /**
551 * @tc.name: CreateTimer007
552 * @tc.desc: Create system timer.
553 * @tc.type: FUNC
554 */
555 HWTEST_F(TimeClientTest, CreateTimer007, TestSize.Level1)
556 {
557     DeletePermission();
558     auto timerInfo = std::make_shared<TimerInfoTest>();
559     timerInfo->SetType(0);
560     timerInfo->SetRepeat(false);
561     timerInfo->SetCallbackInfo(TimeOutCallback1);
562 
563     struct timeval timeOfDay {};
564     gettimeofday(&timeOfDay, nullptr);
565     int64_t currentTime = (timeOfDay.tv_sec + 100) * 1000 + timeOfDay.tv_usec / 1000;
566     if (currentTime < 0) {
567         currentTime = 0;
568     }
569     uint64_t timerId = TimeServiceClient::GetInstance()->CreateTimer(timerInfo);
570     EXPECT_EQ(timerId, 0);
571     auto codeCreateTimer = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
572     EXPECT_NE(codeCreateTimer, TimeError::E_TIME_OK);
573     auto codeStartTimer = TimeServiceClient::GetInstance()->StartTimerV9(timerId, currentTime + 1000);
574     EXPECT_NE(codeStartTimer, TimeError::E_TIME_OK);
575     auto codeStopTimer = TimeServiceClient::GetInstance()->StopTimerV9(timerId);
576     EXPECT_NE(codeStopTimer, TimeError::E_TIME_OK);
577     auto codeDestroyTimer = TimeServiceClient::GetInstance()->DestroyTimerV9(timerId);
578     EXPECT_NE(codeDestroyTimer, TimeError::E_TIME_OK);
579 }
580 
581 /**
582 * @tc.name: CreateTimer008
583 * @tc.desc: Create system timer.
584 * @tc.type: FUNC
585 */
586 HWTEST_F(TimeClientTest, CreateTimer008, TestSize.Level1)
587 {
588     auto timerInfo = std::make_shared<TimerInfoTest>();
589     timerInfo->SetType(0);
590     timerInfo->SetRepeat(false);
591     timerInfo->SetAutoRestore(true);
592     timerInfo->SetWantAgent(nullptr);
593     uint64_t timerId;
594     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
595     EXPECT_EQ(errCode, TimeError::E_TIME_DEAL_FAILED);
596 
597     timerInfo->SetType(timerInfo->TIMER_TYPE_REALTIME);
598     errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
599     EXPECT_EQ(errCode, TimeError::E_TIME_DEAL_FAILED);
600 
601     timerInfo->SetType(timerInfo->TIMER_TYPE_REALTIME | timerInfo->TIMER_TYPE_WAKEUP);
602     errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
603     EXPECT_EQ(errCode, TimeError::E_TIME_DEAL_FAILED);
604 }
605 
606 /**
607 * @tc.name: CreateTimer009
608 * @tc.desc: Create system timer with a long name, expect false.
609 * @tc.type: FUNC
610 */
611 HWTEST_F(TimeClientTest, CreateTimer009, TestSize.Level1)
612 {
613     g_data1 = 0;
614     uint64_t timerId;
615     auto timerInfo = std::make_shared<TimerInfoTest>();
616     timerInfo->SetName("0123456789012345678901234567890123456789012345678901234567890123456789");
617     timerInfo->SetType(timerInfo->TIMER_TYPE_EXACT);
618     timerInfo->SetRepeat(false);
619     timerInfo->SetCallbackInfo(TimeOutCallback1);
620     auto wantAgent = std::shared_ptr<OHOS::AbilityRuntime::WantAgent::WantAgent>();
621     timerInfo->SetWantAgent(wantAgent);
622     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
623     EXPECT_NE(errCode, TimeError::E_TIME_OK);
624 
625     TIME_HILOGI(TIME_MODULE_CLIENT, "test timer id: %{public}" PRId64 "", timerId);
626 }
627 
628 /**
629 * @tc.name: CreateTimer010
630 * @tc.desc: Create two timers with same name, expect first is destroyed.
631 * @tc.type: FUNC
632 */
633 HWTEST_F(TimeClientTest, CreateTimer010, TestSize.Level1)
634 {
635     g_data1 = 0;
636     uint64_t timerId1;
637     uint64_t timerId2;
638     auto timerInfo = std::make_shared<TimerInfoTest>();
639     timerInfo->SetName("testname");
640     timerInfo->SetType(timerInfo->TIMER_TYPE_EXACT);
641     timerInfo->SetRepeat(false);
642     timerInfo->SetCallbackInfo(TimeOutCallback1);
643     auto wantAgent = std::shared_ptr<OHOS::AbilityRuntime::WantAgent::WantAgent>();
644     timerInfo->SetWantAgent(wantAgent);
645     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId1);
646     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
647     EXPECT_NE(timerId1, 0);
648     auto nameList = TimeServiceClient::GetInstance()->timerNameList_;
649     auto name = std::find(nameList.begin(), nameList.end(), "testname");
650     EXPECT_NE(name, nameList.end());
651 
652     errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId2);
653     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
654     EXPECT_NE(timerId2, 0);
655 
656     auto info = TimeServiceClient::GetInstance()->recoverTimerInfoMap_.find(timerId1);
657     EXPECT_EQ(info, TimeServiceClient::GetInstance()->recoverTimerInfoMap_.end());
658 
659     errCode = TimeServiceClient::GetInstance()->DestroyTimerV9(timerId1);
660     EXPECT_NE(errCode, TimeError::E_TIME_OK);
661 
662     errCode = TimeServiceClient::GetInstance()->DestroyTimerV9(timerId2);
663     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
664 
665     nameList = TimeServiceClient::GetInstance()->timerNameList_;
666     name = std::find(nameList.begin(), nameList.end(), "testname");
667     EXPECT_EQ(name, nameList.end());
668 }
669 
670 /**
671 * @tc.name: CreateTimer011
672 * @tc.desc: Create a timer with name and destroy it, create a new timer with same name,
673 *           expect OK.
674 * @tc.type: FUNC
675 */
676 HWTEST_F(TimeClientTest, CreateTimer011, TestSize.Level1)
677 {
678     g_data1 = 0;
679     uint64_t timerId1;
680     uint64_t timerId2;
681     auto timerInfo = std::make_shared<TimerInfoTest>();
682     timerInfo->SetName("testname");
683     timerInfo->SetType(timerInfo->TIMER_TYPE_EXACT);
684     timerInfo->SetRepeat(false);
685     timerInfo->SetCallbackInfo(TimeOutCallback1);
686     auto wantAgent = std::shared_ptr<OHOS::AbilityRuntime::WantAgent::WantAgent>();
687     timerInfo->SetWantAgent(wantAgent);
688     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId1);
689     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
690     EXPECT_NE(timerId1, 0);
691 
692     errCode = TimeServiceClient::GetInstance()->DestroyTimerV9(timerId1);
693     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
694 
695     errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId2);
696     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
697     EXPECT_NE(timerId2, 0);
698 
699     errCode = TimeServiceClient::GetInstance()->DestroyTimerV9(timerId2);
700     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
701 }
702 
703 /**
704 * @tc.name: StartTimer001
705 * @tc.desc: Start system timer.
706 * @tc.type: FUNC
707 */
708 HWTEST_F(TimeClientTest, StartTimer001, TestSize.Level1)
709 {
710     g_data1 = 0;
711     uint64_t timerId;
712     auto timerInfo = std::make_shared<TimerInfoTest>();
713     timerInfo->SetType(timerInfo->TIMER_TYPE_EXACT);
714     timerInfo->SetRepeat(false);
715     timerInfo->SetCallbackInfo(TimeOutCallback1);
716     auto wantAgent = std::shared_ptr<OHOS::AbilityRuntime::WantAgent::WantAgent>();
717     timerInfo->SetWantAgent(wantAgent);
718     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
719     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
720     EXPECT_NE(timerId, 0);
721     auto triggerTime = TimeServiceClient::GetInstance()->GetWallTimeMs();
722     TimeServiceClient::GetInstance()->StartTimerV9(timerId, triggerTime + FIVE_HUNDRED);
723     WaitForAlarm(&g_data1, FIVE_HUNDRED * MICRO_TO_MILLISECOND);
724     EXPECT_EQ(g_data1, 1);
725     TimeServiceClient::GetInstance()->DestroyTimerV9(timerId);
726 }
727 
728 /**
729 * @tc.name: StartTimer002
730 * @tc.desc: Start system timer.
731 * @tc.type: FUNC
732 */
733 HWTEST_F(TimeClientTest, StartTimer002, TestSize.Level1)
734 {
735     uint64_t timerId;
736     auto timerInfo = std::make_shared<TimerInfoTest>();
737     timerInfo->SetType(timerInfo->TIMER_TYPE_EXACT);
738     timerInfo->SetRepeat(false);
739     auto wantAgent = std::shared_ptr<OHOS::AbilityRuntime::WantAgent::WantAgent>();
740     timerInfo->SetWantAgent(wantAgent);
741     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
742     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
743     EXPECT_NE(timerId, 0);
744     auto triggerTime = TimeServiceClient::GetInstance()->GetWallTimeMs();
745     auto result = TimeServiceClient::GetInstance()->StartTimerV9(timerId, triggerTime + 1000);
746     EXPECT_EQ(result, TimeError::E_TIME_OK);
747     TimeServiceClient::GetInstance()->DestroyTimerV9(timerId);
748 }
749 
750 /**
751 * @tc.name: StartTimer003
752 * @tc.desc: Start system timer.
753 * @tc.type: FUNC
754 */
755 HWTEST_F(TimeClientTest, StartTimer003, TestSize.Level1)
756 {
757     g_data1 = 0;
758     uint64_t timerId;
759     auto timerInfo = std::make_shared<TimerInfoTest>();
760     timerInfo->SetType(timerInfo->TIMER_TYPE_EXACT | timerInfo->TIMER_TYPE_WAKEUP);
761     timerInfo->SetRepeat(true);
762     timerInfo->SetInterval(1000);
763     timerInfo->SetCallbackInfo(TimeOutCallback1);
764     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
765     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
766     EXPECT_NE(timerId, 0);
767     auto triggerTime = TimeServiceClient::GetInstance()->GetWallTimeMs();
768     TimeServiceClient::GetInstance()->StartTimerV9(timerId, triggerTime + FIVE_HUNDRED);
769     sleep(2);
770     EXPECT_GT(g_data1, 1);
771     TimeServiceClient::GetInstance()->DestroyTimerV9(timerId);
772 }
773 
774 /**
775 * @tc.name: StartTimer004
776 * @tc.desc: Start system timer.
777 * @tc.type: FUNC
778 */
779 HWTEST_F(TimeClientTest, StartTimer004, TestSize.Level1)
780 {
781     g_data1 = 0;
782     uint64_t timerId;
783     auto timerInfo = std::make_shared<TimerInfoTest>();
784     timerInfo->SetType(timerInfo->TIMER_TYPE_EXACT);
785     timerInfo->SetRepeat(true);
786     timerInfo->SetInterval(1000);
787     timerInfo->SetCallbackInfo(TimeOutCallback1);
788     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
789     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
790     EXPECT_NE(timerId, 0);
791     auto triggerTime = TimeServiceClient::GetInstance()->GetWallTimeMs();
792     TimeServiceClient::GetInstance()->StartTimerV9(timerId, triggerTime + FIVE_HUNDRED);
793     sleep(2);
794     EXPECT_GT(g_data1, 1);
795     TimeServiceClient::GetInstance()->DestroyTimerV9(timerId);
796 }
797 
798 /**
799 * @tc.name: StartTimer005
800 * @tc.desc: Start a timer which is disposable. It will be destroyed by time service.
801 * @tc.type: FUNC
802 */
803 HWTEST_F(TimeClientTest, StartTimer005, TestSize.Level1)
804 {
805     TIME_HILOGI(TIME_MODULE_CLIENT, "StartTimer013 start");
806     g_data1 = 0;
807     g_data2 = 0;
808     uint64_t timerId;
809     auto timerInfo = std::make_shared<TimerInfoTest>();
810     timerInfo->SetType(timerInfo->TIMER_TYPE_EXACT);
811     timerInfo->SetRepeat(false);
812     timerInfo->SetDisposable(true);
813     timerInfo->SetAutoRestore(false);
814     timerInfo->SetCallbackInfo(TimeOutCallback1);
815     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
816     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
817     EXPECT_NE(timerId, 0);
818     auto triggerTime = TimeServiceClient::GetInstance()->GetWallTimeMs();
819     errCode = TimeServiceClient::GetInstance()->StartTimerV9(timerId, triggerTime + FIVE_HUNDRED);
820     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
821     sleep(1);
822     errCode = TimeServiceClient::GetInstance()->DestroyTimerV9(timerId);
823     EXPECT_NE(errCode, TimeError::E_TIME_OK);
824 }
825 
826 /**
827 * @tc.name: StartTimer006
828 * @tc.desc: Start a repeat timer which is disposable. It will not be destroyed by time service.
829 * @tc.type: FUNC
830 */
831 HWTEST_F(TimeClientTest, StartTimer006, TestSize.Level1)
832 {
833     TIME_HILOGI(TIME_MODULE_CLIENT, "StartTimer014 start");
834     g_data1 = 0;
835     g_data2 = 0;
836     uint64_t timerId;
837     auto timerInfo = std::make_shared<TimerInfoTest>();
838     timerInfo->SetType(timerInfo->TIMER_TYPE_EXACT);
839     timerInfo->SetRepeat(true);
840     timerInfo->SetInterval(1000);
841     timerInfo->SetDisposable(true);
842     timerInfo->SetAutoRestore(false);
843     timerInfo->SetCallbackInfo(TimeOutCallback1);
844     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
845     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
846     EXPECT_NE(timerId, 0);
847     auto triggerTime = TimeServiceClient::GetInstance()->GetWallTimeMs();
848     errCode = TimeServiceClient::GetInstance()->StartTimerV9(timerId, triggerTime + FIVE_HUNDRED);
849     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
850     sleep(1);
851     errCode = TimeServiceClient::GetInstance()->DestroyTimerV9(timerId);
852     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
853 }
854 
855 /**
856 * @tc.name: StartTimer007
857 * @tc.desc: Start a loop timer at an early point in time and trigger a rearrangement. It will trigger as expected.
858 * @tc.type: FUNC
859 */
860 HWTEST_F(TimeClientTest, StartTimer007, TestSize.Level1)
861 {
862     g_data1 = 0;
863     uint64_t timerId;
864     auto timerInfo = std::make_shared<TimerInfoTest>();
865     timerInfo->SetType(timerInfo->TIMER_TYPE_EXACT | timerInfo->TIMER_TYPE_WAKEUP);
866     timerInfo->SetRepeat(true);
867     timerInfo->SetInterval(3600000);
868     timerInfo->SetCallbackInfo(TimeOutCallback1);
869     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
870     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
871     EXPECT_NE(timerId, 0);
872     TIME_HILOGI(TIME_MODULE_CLIENT, "timerId now : %{public}" PRId64 "", timerId);
873     auto time = TimeServiceClient::GetInstance()->GetWallTimeMs() - 86400000;
874     bool result = TimeServiceClient::GetInstance()->SetTime(time);
875     EXPECT_TRUE(result);
876     TimeServiceClient::GetInstance()->StartTimerV9(timerId, time + 100000);
877     // First trigger
878     time += 86400000;
879     result = TimeServiceClient::GetInstance()->SetTime(time);
880     EXPECT_TRUE(result);
881     usleep(FIVE_HUNDRED * MICRO_TO_MILLISECOND);
882     EXPECT_EQ(g_data1, 1);
883     //Trigger a rearrangement
884     time += 10000;
885     result = TimeServiceClient::GetInstance()->SetTime(time);
886     EXPECT_TRUE(result);
887     usleep(FIVE_HUNDRED * MICRO_TO_MILLISECOND);
888     EXPECT_EQ(g_data1, 1);
889     TimeServiceClient::GetInstance()->DestroyTimerV9(timerId);
890 }
891 
892 /**
893 * @tc.name: RecoverTimer001
894 * @tc.desc: Create system timer, check whether the corresponding data is recorded when the timer is created.
895 * @tc.type: FUNC
896 */
897 HWTEST_F(TimeClientTest, RecoverTimer001, TestSize.Level1)
898 {
899     auto timerInfo = std::make_shared<TimerInfoTest>();
900     timerInfo->SetType(timerInfo->TIMER_TYPE_REALTIME);
901     timerInfo->SetRepeat(false);
902     timerInfo->SetInterval(0);
903     timerInfo->SetWantAgent(nullptr);
904     timerInfo->SetCallbackInfo(TimeOutCallback1);
905     uint64_t timerId;
906     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
907     TIME_HILOGI(TIME_MODULE_CLIENT, "timerId now : %{public}" PRId64 "", timerId);
908     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
909     {
910         std::lock_guard<std::mutex> lock(TimeServiceClient::GetInstance()->recoverTimerInfoLock_);
911         auto info = TimeServiceClient::GetInstance()->recoverTimerInfoMap_.find(timerId);
912         EXPECT_NE(info, TimeServiceClient::GetInstance()->recoverTimerInfoMap_.end());
913         EXPECT_NE(info->second->timerInfo, nullptr);
914         EXPECT_EQ(info->second->state, 0);
915         EXPECT_EQ(info->second->triggerTime, 0);
916     }
917     TimeServiceClient::GetInstance()->DestroyTimerV9(timerId);
918 }
919 
920 /**
921 * @tc.name: RecoverTimer002
922 * @tc.desc: Create system timer, then start it,
923 *           check whether the corresponding data is recorded when the timer is started.
924 * @tc.type: FUNC
925 */
926 HWTEST_F(TimeClientTest, RecoverTimer002, TestSize.Level1)
927 {
928     auto timerInfo = std::make_shared<TimerInfoTest>();
929     timerInfo->SetType(timerInfo->TIMER_TYPE_REALTIME);
930     timerInfo->SetRepeat(false);
931     timerInfo->SetInterval(0);
932     timerInfo->SetWantAgent(nullptr);
933     timerInfo->SetCallbackInfo(TimeOutCallback1);
934     uint64_t timerId;
935     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
936     TIME_HILOGI(TIME_MODULE_CLIENT, "timerId now : %{public}" PRId64 "", timerId);
937     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
938     int64_t time;
939     TimeServiceClient::GetInstance()->GetBootTimeMs(time);
940     auto startRet = TimeServiceClient::GetInstance()->StartTimerV9(timerId, time + FIVE_HUNDRED);
941     EXPECT_EQ(startRet, TimeError::E_TIME_OK);
942     {
943         std::lock_guard<std::mutex> lock(TimeServiceClient::GetInstance()->recoverTimerInfoLock_);
944         auto info = TimeServiceClient::GetInstance()->recoverTimerInfoMap_.find(timerId);
945         EXPECT_NE(info, TimeServiceClient::GetInstance()->recoverTimerInfoMap_.end());
946         EXPECT_NE(info->second->timerInfo, nullptr);
947         EXPECT_EQ(info->second->state, 1);
948         EXPECT_EQ(info->second->triggerTime, time + FIVE_HUNDRED);
949     }
950     TimeServiceClient::GetInstance()->DestroyTimerV9(timerId);
951 }
952 
953 /**
954 * @tc.name: RecoverTimer003
955 * @tc.desc: Create system timer, then start it, then stop it,
956 *           check whether the corresponding data is recorded when the timer is stoped.
957 * @tc.type: FUNC
958 */
959 HWTEST_F(TimeClientTest, RecoverTimer003, TestSize.Level1)
960 {
961     auto timerInfo = std::make_shared<TimerInfoTest>();
962     timerInfo->SetType(timerInfo->TIMER_TYPE_REALTIME);
963     timerInfo->SetRepeat(false);
964     timerInfo->SetInterval(0);
965     timerInfo->SetWantAgent(nullptr);
966     timerInfo->SetCallbackInfo(TimeOutCallback1);
967     uint64_t timerId;
968     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
969     TIME_HILOGI(TIME_MODULE_CLIENT, "timerId now : %{public}" PRId64 "", timerId);
970     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
971     int64_t time;
972     TimeServiceClient::GetInstance()->GetBootTimeMs(time);
973     auto startRet = TimeServiceClient::GetInstance()->StartTimerV9(timerId, time + FIVE_HUNDRED);
974     EXPECT_EQ(startRet, TimeError::E_TIME_OK);
975     auto stopRet = TimeServiceClient::GetInstance()->StopTimerV9(timerId);
976     EXPECT_EQ(stopRet, TimeError::E_TIME_OK);
977     {
978         std::lock_guard<std::mutex> lock(TimeServiceClient::GetInstance()->recoverTimerInfoLock_);
979         auto info = TimeServiceClient::GetInstance()->recoverTimerInfoMap_.find(timerId);
980         EXPECT_NE(info, TimeServiceClient::GetInstance()->recoverTimerInfoMap_.end());
981         EXPECT_NE(info->second->timerInfo, nullptr);
982         EXPECT_EQ(info->second->state, 0);
983 
984         EXPECT_EQ(info->second->triggerTime, time + FIVE_HUNDRED);
985     }
986     TimeServiceClient::GetInstance()->DestroyTimerV9(timerId);
987 }
988 
989 /**
990 * @tc.name: RecoverTimer004
991 * @tc.desc: Create system timer, then start it, then destroy it,
992 *           check whether the corresponding data is recorded when the timer is destroyed.
993 * @tc.type: FUNC
994 */
995 HWTEST_F(TimeClientTest, RecoverTimer004, TestSize.Level1)
996 {
997     auto timerInfo = std::make_shared<TimerInfoTest>();
998     timerInfo->SetType(timerInfo->TIMER_TYPE_REALTIME);
999     timerInfo->SetRepeat(false);
1000     timerInfo->SetInterval(0);
1001     timerInfo->SetWantAgent(nullptr);
1002     timerInfo->SetCallbackInfo(TimeOutCallback1);
1003     uint64_t timerId;
1004     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
1005     TIME_HILOGI(TIME_MODULE_CLIENT, "timerId now : %{public}" PRId64 "", timerId);
1006     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
1007     int64_t time;
1008     TimeServiceClient::GetInstance()->GetBootTimeMs(time);
1009     auto startRet = TimeServiceClient::GetInstance()->StartTimerV9(timerId, time + FIVE_HUNDRED);
1010     EXPECT_EQ(startRet, TimeError::E_TIME_OK);
1011     auto destroyRet = TimeServiceClient::GetInstance()->DestroyTimerV9(timerId);
1012     EXPECT_EQ(destroyRet, TimeError::E_TIME_OK);
1013     {
1014         std::lock_guard<std::mutex> lock(TimeServiceClient::GetInstance()->recoverTimerInfoLock_);
1015         auto info = TimeServiceClient::GetInstance()->recoverTimerInfoMap_.find(timerId);
1016         EXPECT_EQ(info, TimeServiceClient::GetInstance()->recoverTimerInfoMap_.end());
1017     }
1018 }
1019 
1020 /**
1021 * @tc.name: RecoverTimer005
1022 * @tc.desc: start a non-repeat timer, after the timer is triggered, check the state in RecoverTimerMap.
1023 * @tc.type: FUNC
1024 */
1025 HWTEST_F(TimeClientTest, RecoverTimer005, TestSize.Level1)
1026 {
1027     g_data1 = 0;
1028     auto timerInfo = std::make_shared<TimerInfoTest>();
1029     timerInfo->SetType(timerInfo->TIMER_TYPE_REALTIME);
1030     timerInfo->SetRepeat(false);
1031     timerInfo->SetInterval(0);
1032     timerInfo->SetWantAgent(nullptr);
1033     timerInfo->SetCallbackInfo(TimeOutCallback1);
1034     uint64_t timerId;
1035     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
1036     TIME_HILOGI(TIME_MODULE_CLIENT, "timerId now : %{public}" PRId64 "", timerId);
1037     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
1038     int64_t time;
1039     TimeServiceClient::GetInstance()->GetBootTimeMs(time);
1040     auto startRet = TimeServiceClient::GetInstance()->StartTimerV9(timerId, time + FIVE_HUNDRED);
1041     EXPECT_EQ(startRet, TimeError::E_TIME_OK);
1042     WaitForAlarm(&g_data1, FIVE_HUNDRED * MICRO_TO_MILLISECOND);
1043     EXPECT_EQ(g_data1, 1);
1044     {
1045         std::lock_guard<std::mutex> lock(TimeServiceClient::GetInstance()->recoverTimerInfoLock_);
1046         auto info = TimeServiceClient::GetInstance()->recoverTimerInfoMap_.find(timerId);
1047         EXPECT_NE(info, TimeServiceClient::GetInstance()->recoverTimerInfoMap_.end());
1048         EXPECT_NE(info->second->timerInfo, nullptr);
1049         EXPECT_EQ(info->second->state, 0);
1050     }
1051     TimeServiceClient::GetInstance()->DestroyTimerV9(timerId);
1052 }
1053 
1054 /**
1055 * @tc.name: RecoverTimer006
1056 * @tc.desc: start a non-repeat and disposable timer, after the timer is triggered, check the state in RecoverTimerMap.
1057 * @tc.type: FUNC
1058 */
1059 HWTEST_F(TimeClientTest, RecoverTimer006, TestSize.Level1)
1060 {
1061     g_data1 = 0;
1062     auto timerInfo = std::make_shared<TimerInfoTest>();
1063     timerInfo->SetType(timerInfo->TIMER_TYPE_REALTIME);
1064     timerInfo->SetRepeat(false);
1065     timerInfo->SetDisposable(true);
1066     timerInfo->SetInterval(0);
1067     timerInfo->SetWantAgent(nullptr);
1068     timerInfo->SetCallbackInfo(TimeOutCallback1);
1069     uint64_t timerId;
1070     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
1071     TIME_HILOGI(TIME_MODULE_CLIENT, "timerId now : %{public}" PRId64 "", timerId);
1072     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
1073     int64_t time;
1074     TimeServiceClient::GetInstance()->GetBootTimeMs(time);
1075     auto startRet = TimeServiceClient::GetInstance()->StartTimerV9(timerId, time + FIVE_HUNDRED);
1076     EXPECT_EQ(startRet, TimeError::E_TIME_OK);
1077     WaitForAlarm(&g_data1, FIVE_HUNDRED * MICRO_TO_MILLISECOND);
1078     EXPECT_EQ(g_data1, 1);
1079     {
1080         std::lock_guard<std::mutex> lock(TimeServiceClient::GetInstance()->recoverTimerInfoLock_);
1081         auto info = TimeServiceClient::GetInstance()->recoverTimerInfoMap_.find(timerId);
1082         EXPECT_EQ(info, TimeServiceClient::GetInstance()->recoverTimerInfoMap_.end());
1083     }
1084     auto ret = TimeServiceClient::GetInstance()->DestroyTimerV9(timerId);
1085     EXPECT_NE(ret, E_TIME_OK);
1086 }
1087 
1088 /**
1089 * @tc.name: AdjustTimer001
1090 * @tc.desc: adjust timer.
1091 * @tc.type: FUNC
1092 */
1093 HWTEST_F(TimeClientTest, AdjustTimer001, TestSize.Level1)
1094 {
1095     g_data1 = 0;
1096     uint64_t timerId;
1097     auto timerInfo = std::make_shared<TimerInfoTest>();
1098     timerInfo->SetType(timerInfo->TIMER_TYPE_EXACT);
1099     timerInfo->SetRepeat(false);
1100     timerInfo->SetCallbackInfo(TimeOutCallback1);
1101     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
1102     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
1103     EXPECT_NE(timerId, 0);
1104     auto triggerTime = TimeServiceClient::GetInstance()->GetWallTimeMs();
1105     TimeServiceClient::GetInstance()->StartTimerV9(timerId, triggerTime + FIVE_HUNDRED);
1106     TimeServiceClient::GetInstance()->AdjustTimer(true, 5, 0);
1107     TimeServiceClient::GetInstance()->AdjustTimer(false, 0, 0);
1108     WaitForAlarm(&g_data1, FIVE_HUNDRED * MICRO_TO_MILLISECOND);
1109     EXPECT_EQ(g_data1, 1);
1110     TimeServiceClient::GetInstance()->DestroyTimerV9(timerId);
1111 }
1112 
1113 /**
1114 * @tc.name: AdjustTimer002
1115 * @tc.desc: adjust timer.
1116 * @tc.type: FUNC
1117 */
1118 HWTEST_F(TimeClientTest, AdjustTimer002, TestSize.Level1)
1119 {
1120     g_data1 = 0;
1121     std::unordered_set<std::string> nameArr{"timer"};
1122     TimeServiceClient::GetInstance()->SetTimerExemption(nameArr, false);
1123     TimeServiceClient::GetInstance()->SetTimerExemption(nameArr, true);
1124     uint64_t timerId;
1125     auto timerInfo = std::make_shared<TimerInfoTest>();
1126     timerInfo->SetType(timerInfo->TIMER_TYPE_EXACT);
1127     timerInfo->SetRepeat(false);
1128     timerInfo->SetCallbackInfo(TimeOutCallback1);
1129     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
1130     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
1131     EXPECT_NE(timerId, 0);
1132     auto triggerTime = TimeServiceClient::GetInstance()->GetWallTimeMs();
1133     TimeServiceClient::GetInstance()->StartTimerV9(timerId, triggerTime + FIVE_HUNDRED);
1134     WaitForAlarm(&g_data1, FIVE_HUNDRED * MICRO_TO_MILLISECOND);
1135     EXPECT_EQ(g_data1, 1);
1136     TimeServiceClient::GetInstance()->DestroyTimerV9(timerId);
1137 }
1138 
1139 /**
1140 * @tc.name: AdjustTimer003
1141 * @tc.desc: Create system timer and start it, after adjust system time, check whether it will be successful.
1142 * @tc.type: FUNC
1143 */
1144 HWTEST_F(TimeClientTest, AdjustTimer003, TestSize.Level1)
1145 {
1146     g_data1 = 0;
1147     uint64_t timerId;
1148     auto timerInfo = std::make_shared<TimerInfoTest>();
1149     timerInfo->SetType(timerInfo->TIMER_TYPE_EXACT | timerInfo->TIMER_TYPE_WAKEUP);
1150     timerInfo->SetRepeat(false);
1151     timerInfo->SetInterval(0);
1152     timerInfo->SetCallbackInfo(TimeOutCallback1);
1153     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
1154     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
1155     EXPECT_NE(timerId, 0);
1156     auto triggerTime = TimeServiceClient::GetInstance()->GetWallTimeMs();
1157     TimeServiceClient::GetInstance()->StartTimerV9(timerId, triggerTime + FIVE_HUNDRED);
1158 
1159     struct timeval currentTime {};
1160     gettimeofday(&currentTime, nullptr);
1161     int64_t time = (currentTime.tv_sec + 3600) * 1000 + currentTime.tv_usec / 1000;
1162     ASSERT_GT(time, 0);
1163     TIME_HILOGI(TIME_MODULE_CLIENT, "Time now : %{public}" PRId64 "", time);
1164     int32_t result = TimeServiceClient::GetInstance()->SetTimeV9(time);
1165     EXPECT_EQ(result, TimeError::E_TIME_OK);
1166     WaitForAlarm(&g_data1, 0);
1167     EXPECT_EQ(g_data1, 1);
1168     TimeServiceClient::GetInstance()->DestroyTimerV9(timerId);
1169 }
1170 
1171 /**
1172 * @tc.name: ReBatchAllTimers001
1173 * @tc.desc: Start a long-time timer, then start a proxy of this timer.
1174             Cancel the proxy of the timer, and then rebatch it.
1175             Expect this timer does not trigger.
1176 * @tc.type: FUNC
1177 */
1178 HWTEST_F(TimeClientTest, ReBatchAllTimers001, TestSize.Level1)
1179 {
1180     g_data1 = 0;
1181 
1182     auto timerInfo = std::make_shared<TimerInfoTest>();
1183     timerInfo->SetType(timerInfo->TIMER_TYPE_REALTIME);
1184     timerInfo->SetRepeat(false);
1185     timerInfo->SetInterval(0);
1186     timerInfo->SetWantAgent(nullptr);
1187     timerInfo->SetCallbackInfo(TimeOutCallback1);
1188     uint64_t timerId;
1189     auto errCode = TimeServiceClient::GetInstance()->CreateTimerV9(timerInfo, timerId);
1190     TIME_HILOGI(TIME_MODULE_CLIENT, "timerId now : %{public}" PRId64 "", timerId);
1191     EXPECT_EQ(errCode, TimeError::E_TIME_OK);
1192     int64_t time = 0;
1193     TimeServiceClient::GetInstance()->GetBootTimeMs(time);
1194     auto startRet = TimeServiceClient::GetInstance()->StartTimerV9(timerId, time + 300000);
1195     EXPECT_EQ(startRet, TimeError::E_TIME_OK);
1196     TIME_HILOGI(TIME_MODULE_CLIENT, "timerId now : %{public}" PRId64 "", timerId);
1197     pid_t pid = IPCSkeleton::GetCallingPid();
1198     pid_t uid = IPCSkeleton::GetCallingUid();
1199     std::set<int> pidList;
1200     pidList.insert(pid);
1201     TimeServiceClient::GetInstance()->ProxyTimer(uid, pidList, true, true);
1202     std::vector<int> pidVector;
1203     pidVector.push_back(pid);
1204     TimeSystemAbility::GetInstance()->ProxyTimer(uid, pidVector, false, true);
1205 
1206     struct timeval currentTime {};
1207     gettimeofday(&currentTime, nullptr);
1208     int64_t time1 = (currentTime.tv_sec + 10) * 1000 + currentTime.tv_usec / 1000;
1209     ASSERT_GT(time1, 0);
1210     TIME_HILOGI(TIME_MODULE_CLIENT, "Time now : %{public}" PRId64 "", time1);
1211     int32_t result = TimeServiceClient::GetInstance()->SetTimeV9(time1);
1212     EXPECT_EQ(result, TimeError::E_TIME_OK);
1213     WaitForAlarm(&g_data1, 0);
1214     EXPECT_EQ(g_data1, 0);
1215     TimeServiceClient::GetInstance()->DestroyTimerV9(timerId);
1216 }
1217 } // namespace