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(¤tTime, 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(¤tTime, 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(¤tTime, 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(¤tTime, 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