1 /*
2  * Copyright (c) 2023-2024 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 "test.h"
17 
18 #include <unistd.h>
19 
20 #include "helper/napi_helper.h"
21 #include "queue.h"
22 #include "task.h"
23 #include "taskpool.h"
24 #include "task_manager.h"
25 #include "task_runner.h"
26 #include "thread.h"
27 #include "tools/log.h"
28 #include "uv.h"
29 #include "worker.h"
30 
31 using namespace Commonlibrary::Concurrent::TaskPoolModule;
GetSendableFunction(napi_env env,const char * str,napi_value & result)32 void GetSendableFunction(napi_env env, const char* str, napi_value& result)
33 {
34     napi_value instance = SendableUtils::CreateSendableInstance(env);
35     napi_value name = nullptr;
36     napi_create_string_utf8(env, str, NAPI_AUTO_LENGTH, &name);
37     napi_get_property(env, instance, name, &result);
38 }
39 
GeneratorTask(napi_env env,napi_value thisVar)40 napi_value GeneratorTask(napi_env env, napi_value thisVar)
41 {
42     napi_value func = nullptr;
43     GetSendableFunction(env, "foo", func);
44     napi_value argv[] = { func };
45     std::string funcName = "TaskConstructor";
46     napi_value cb = nullptr;
47     napi_value task = nullptr;
48     napi_create_function(env, funcName.c_str(), funcName.size(), Task::TaskConstructor, nullptr, &cb);
49     napi_call_function(env, thisVar, cb, 1, argv, &task);
50     return task;
51 }
52 
GeneratorTaskGroup(napi_env env,napi_value thisVar)53 napi_value GeneratorTaskGroup(napi_env env, napi_value thisVar)
54 {
55     std::string funcName = "TaskGroupConstructor";
56     napi_value argv[] = {};
57     napi_value cb = nullptr;
58     napi_value group = nullptr;
59     napi_create_function(env, funcName.c_str(), funcName.size(), TaskGroup::TaskGroupConstructor, nullptr, &cb);
60     napi_call_function(env, thisVar, cb, 0, argv, &group);
61     return group;
62 }
63 
GeneratorTaskGroupWithName(napi_env env,napi_value thisVar,const char * name)64 napi_value GeneratorTaskGroupWithName(napi_env env, napi_value thisVar, const char* name)
65 {
66     std::string funcName = "TaskGroupConstructor";
67     napi_value str = nullptr;
68     napi_create_string_utf8(env, name, NAPI_AUTO_LENGTH, &str);
69     napi_value argv[] = { str };
70     napi_value cb = nullptr;
71     napi_value group = nullptr;
72     napi_create_function(env, funcName.c_str(), funcName.size(), TaskGroup::TaskGroupConstructor, nullptr, &cb);
73     napi_call_function(env, thisVar, cb, 1, argv, &group);
74     return group;
75 }
76 
CreateTaskObject(napi_env env,TaskType taskType=TaskType::TASK,ExecuteState state=ExecuteState::NOT_FOUND,bool needStoreTask=false)77 napi_value CreateTaskObject(napi_env env, TaskType taskType = TaskType::TASK,
78     ExecuteState state = ExecuteState::NOT_FOUND, bool needStoreTask = false)
79 {
80     napi_value thisValue = NapiHelper::CreateObject(env);
81     size_t argc = 0;
82     napi_value func = nullptr;
83     napi_create_string_utf8(env, "testFunc", NAPI_AUTO_LENGTH, &func);
84     napi_value* args = new napi_value[1];
85     ObjectScope<napi_value> objScope(args, true);
86     napi_value taskName = NapiHelper::CreateEmptyString(env);
87     Task* task = Task::GenerateTask(env, thisValue, func, taskName, args, argc);
88     task->UpdateTaskType(taskType);
89     if (state != ExecuteState::NOT_FOUND) {
90         task->taskState_ = state;
91     }
92     if (needStoreTask) {
93         TaskManager &taskManager = TaskManager::GetInstance();
94         taskManager.StoreTask(task->taskId_, task);
95     }
96     if (napi_wrap(
97         env, thisValue, task,
98         [](napi_env environment, void* data, void* hint) {
99             auto obj = reinterpret_cast<Task*>(data);
100             if (obj != nullptr) {
101                 delete obj;
102             }
103         }, nullptr, nullptr) != napi_ok) {
104         delete task;
105         task = nullptr;
106         return nullptr;
107     }
108     return thisValue;
109 }
110 
CreateNullTaskObject(napi_env env)111 napi_value CreateNullTaskObject(napi_env env)
112 {
113     napi_value thisValue = NapiHelper::CreateObject(env);
114     Task* task = nullptr;
115     napi_wrap(
116         env, thisValue, task,
117         [](napi_env environment, void* data, void* hint) {
118             auto obj = reinterpret_cast<Task*>(data);
119             if (obj != nullptr) {
120                 delete obj;
121             }
122         }, nullptr, nullptr);
123     return thisValue;
124 }
125 
126 HWTEST_F(NativeEngineTest, TaskpoolTest001, testing::ext::TestSize.Level0)
127 {
128     TaskManager &taskManager = TaskManager::GetInstance();
129     uint32_t result = taskManager.GetThreadNum();
130     ASSERT_TRUE(result == 0);
131 }
132 
133 HWTEST_F(NativeEngineTest, TaskpoolTest002, testing::ext::TestSize.Level0)
134 {
135     napi_env env = reinterpret_cast<napi_env>(engine_);
136     Worker* worker = reinterpret_cast<Worker*>(NativeEngineTest::WorkerConstructor(env));
137     ASSERT_NE(worker, nullptr);
138 }
139 
140 HWTEST_F(NativeEngineTest, TaskpoolTest003, testing::ext::TestSize.Level0)
141 {
142     napi_env env = reinterpret_cast<napi_env>(engine_);
143     napi_value taskClass = nullptr;
144     napi_value result = TaskPool::InitTaskPool(env, taskClass);
145     usleep(50000);
146     ASSERT_TRUE(result == nullptr);
147 }
148 
149 HWTEST_F(NativeEngineTest, TaskpoolTest004, testing::ext::TestSize.Level0)
150 {
151     napi_env env = reinterpret_cast<napi_env>(engine_);
152     Worker* worker = reinterpret_cast<Worker*>(NativeEngineTest::WorkerConstructor(env));
153     ASSERT_NE(worker, nullptr);
154     uint32_t workers = TaskManager::GetInstance().GetRunningWorkers();
155     ASSERT_TRUE(workers == 0);
156 }
157 
158 HWTEST_F(NativeEngineTest, TaskpoolTest005, testing::ext::TestSize.Level0)
159 {
160     uint64_t taskId = 10;
161     TaskManager &taskManager = TaskManager::GetInstance();
162     Task* task = taskManager.GetTask(taskId);
163     ASSERT_TRUE(task == nullptr);
164 }
165 
166 HWTEST_F(NativeEngineTest, TaskpoolTest006, testing::ext::TestSize.Level0)
167 {
168     TaskManager &taskManager = TaskManager::GetInstance();
169     std::pair<uint64_t, Priority> result = taskManager.DequeueTaskId();
170     ASSERT_TRUE(result.first == 0);
171     ASSERT_TRUE(result.second == Priority::LOW);
172 }
173 
174 HWTEST_F(NativeEngineTest, TaskpoolTest007, testing::ext::TestSize.Level0)
175 {
176     TaskManager &taskManager = TaskManager::GetInstance();
177     uint32_t result = taskManager.GetTaskNum();
178     ASSERT_TRUE(result == 0);
179 }
180 
181 HWTEST_F(NativeEngineTest, TaskpoolTest008, testing::ext::TestSize.Level0)
182 {
183     ExecuteQueue executeQueue;
184     uint64_t result = executeQueue.DequeueTaskId();
185     ASSERT_TRUE(result == 0);
186 }
187 
188 HWTEST_F(NativeEngineTest, TaskpoolTest009, testing::ext::TestSize.Level0)
189 {
190     ExecuteQueue executeQueue;
191     bool result = executeQueue.IsEmpty();
192     ASSERT_TRUE(result);
193 }
194 
195 HWTEST_F(NativeEngineTest, TaskpoolTest010, testing::ext::TestSize.Level0)
196 {
197     ExecuteQueue executeQueue;
198     uint32_t result = executeQueue.GetTaskNum();
199     ASSERT_TRUE(result == 0);
200 }
201 
202 HWTEST_F(NativeEngineTest, TaskpoolTest011, testing::ext::TestSize.Level0)
203 {
204     napi_env env = (napi_env)engine_;
205     ExceptionScope scope(env);
206     napi_value argv[] = {nullptr};
207     std::string funcName = "TaskGroupConstructor";
208     napi_value cb = nullptr;
209     napi_value result = nullptr;
210     napi_create_function(env, funcName.c_str(), funcName.size(), TaskGroup::TaskGroupConstructor, nullptr, &cb);
211     napi_call_function(env, nullptr, cb, 0, argv, &result);
212     ASSERT_TRUE(result != nullptr);
213 }
214 
215 HWTEST_F(NativeEngineTest, TaskpoolTest012, testing::ext::TestSize.Level0)
216 {
217     napi_env env = (napi_env)engine_;
218     ExceptionScope scope(env);
219     napi_value argv[] = {nullptr};
220     std::string funcName = "TaskGroupConstructor";
221     napi_value cb = nullptr;
222     napi_value result = nullptr;
223     napi_create_function(env, funcName.c_str(), funcName.size(), TaskGroup::TaskGroupConstructor, nullptr, &cb);
224     napi_call_function(env, nullptr, cb, 0, argv, &result);
225     ASSERT_TRUE(result != nullptr);
226     napi_value exception;
227     napi_get_and_clear_last_exception(env, &exception);
228 
229     size_t argc1 = 0;
230     napi_value argv1[] = {nullptr};
231     funcName = "AddTask";
232     cb = nullptr;
233     napi_value result1 = nullptr;
234     napi_create_function(env, funcName.c_str(), funcName.size(), TaskGroup::AddTask, nullptr, &cb);
235     napi_call_function(env, nullptr, cb, argc1, argv1, &result1);
236     ASSERT_TRUE(result1 == nullptr);
237 }
238 
239 HWTEST_F(NativeEngineTest, TaskpoolTest013, testing::ext::TestSize.Level0)
240 {
241     uint32_t number = 10;
242     napi_env env = reinterpret_cast<napi_env>(engine_);
243     napi_value value = NapiHelper::CreateUint32(env, number);
244     napi_value result = TaskPool::InitTaskPool(env, value);
245     usleep(50000);
246     ASSERT_TRUE(result != nullptr);
247 }
248 
TestFunction(napi_env env)249 napi_value TestFunction(napi_env env)
250 {
251     napi_value result = nullptr;
252     const char* message = "test taskpool";
253     size_t length = strlen(message);
254     napi_create_string_utf8(env, message, length, &result);
255     return result;
256 }
257 
258 HWTEST_F(NativeEngineTest, TaskpoolTest014, testing::ext::TestSize.Level0)
259 {
260     napi_env env = reinterpret_cast<napi_env>(engine_);
261     TaskManager& taskManager = TaskManager::GetInstance();
262     taskManager.InitTaskManager(env);
263     usleep(50000);
264     uint32_t taskNum = taskManager.GetTaskNum();
265     ASSERT_TRUE(taskNum == 0);
266     uint32_t threadNum = taskManager.GetThreadNum();
267     ASSERT_TRUE(threadNum != 0);
268     uint32_t idleWorkers = taskManager.GetIdleWorkers();
269     ASSERT_TRUE(idleWorkers != 0);
270     uint32_t runningWorkers = taskManager.GetRunningWorkers();
271     ASSERT_TRUE(runningWorkers == 0);
272     uint32_t timeoutWorkers = taskManager.GetTimeoutWorkers();
273     ASSERT_TRUE(timeoutWorkers == 0);
274 }
275 
276 HWTEST_F(NativeEngineTest, TaskpoolTest015, testing::ext::TestSize.Level0)
277 {
278     napi_env env = reinterpret_cast<napi_env>(engine_);
279     TaskManager& taskManager = TaskManager::GetInstance();
280     taskManager.InitTaskManager(env);
281     std::pair<uint64_t, Priority> result = taskManager.DequeueTaskId();
282     ASSERT_TRUE(result.first == 0);
283     ASSERT_TRUE(result.second == Priority::LOW);
284 }
285 
286 HWTEST_F(NativeEngineTest, TaskpoolTest016, testing::ext::TestSize.Level0)
287 {
288     napi_env env = reinterpret_cast<napi_env>(engine_);
289     ExceptionScope scope(env);
290     TaskManager& taskManager = TaskManager::GetInstance();
291     taskManager.InitTaskManager(env);
292     Task* task = new Task();
293     uint64_t taskId = reinterpret_cast<uint64_t>(task);
294     taskManager.CancelTask(env, taskId);
295     ASSERT_TRUE(taskId != 0);
296     delete task;
297 }
298 
299 HWTEST_F(NativeEngineTest, TaskpoolTest017, testing::ext::TestSize.Level0)
300 {
301     napi_env env = reinterpret_cast<napi_env>(engine_);
302     TaskManager& taskManager = TaskManager::GetInstance();
303     taskManager.InitTaskManager(env);
304     Task* task = new Task();
305     uint64_t taskId = reinterpret_cast<uint64_t>(task);
306     taskManager.TryTriggerExpand();
307     ASSERT_TRUE(taskId != 0);
308     delete task;
309 }
310 
311 HWTEST_F(NativeEngineTest, TaskpoolTest018, testing::ext::TestSize.Level0)
312 {
313     napi_env env = reinterpret_cast<napi_env>(engine_);
314     TaskManager& taskManager = TaskManager::GetInstance();
315     taskManager.InitTaskManager(env);
316     Task* task = new Task();
317     uint64_t taskId = reinterpret_cast<uint64_t>(task);
318     uint64_t duration = 10;
319     taskManager.UpdateExecutedInfo(duration);
320     ASSERT_TRUE(taskId != 0);
321     delete task;
322 }
323 
324 HWTEST_F(NativeEngineTest, TaskpoolTest019, testing::ext::TestSize.Level0)
325 {
326     napi_env env = (napi_env)engine_;
327     ExceptionScope scope(env);
328     napi_value argv[] = {nullptr};
329     std::string funcName = "TaskConstructor";
330     napi_value cb = nullptr;
331     napi_value result = nullptr;
332     napi_create_function(env, funcName.c_str(), funcName.size(), Task::TaskConstructor, nullptr, &cb);
333     napi_call_function(env, nullptr, cb, 0, argv, &result);
334     ASSERT_TRUE(result == nullptr);
335 }
336 
337 HWTEST_F(NativeEngineTest, TaskpoolTest020, testing::ext::TestSize.Level0)
338 {
339     napi_env env = (napi_env)engine_;
340     ExceptionScope scope(env);
341     napi_value argv[] = {nullptr};
342     std::string funcName = "TaskConstructor";
343     napi_value cb = nullptr;
344     napi_value result = nullptr;
345     napi_create_function(env, funcName.c_str(), funcName.size(), Task::TaskConstructor, nullptr, &cb);
346     napi_call_function(env, nullptr, cb, 0, argv, &result);
347     ASSERT_TRUE(result == nullptr);
348     napi_value exception = nullptr;
349     napi_get_and_clear_last_exception(env, &exception);
350 
351     cb = nullptr;
352     napi_value result1 = nullptr;
353     funcName = "SetTransferList";
354     napi_create_function(env, funcName.c_str(), funcName.size(), Task::SetTransferList, nullptr, &cb);
355     napi_call_function(env, nullptr, cb, 0, argv, &result1);
356     ASSERT_TRUE(result1 != nullptr);
357 }
358 
359 HWTEST_F(NativeEngineTest, TaskpoolTest021, testing::ext::TestSize.Level0)
360 {
361     napi_env env = (napi_env)engine_;
362     ExceptionScope scope(env);
363     size_t argc = 10;
364     napi_value argv[] = {nullptr};
365     std::string funcName = "TaskConstructor";
366     napi_value cb = nullptr;
367     napi_value result = nullptr;
368     napi_create_function(env, funcName.c_str(), funcName.size(), Task::TaskConstructor, nullptr, &cb);
369     napi_call_function(env, nullptr, cb, 0, argv, &result);
370     ASSERT_TRUE(result == nullptr);
371 
372     napi_value func = TestFunction(env);
373     uint32_t number = 10;
374     napi_value value = NapiHelper::CreateUint32(env, number);
375     napi_value* args = new napi_value[argc];
376     ObjectScope<napi_value> objScope(args, true);
377     napi_value taskName = NapiHelper::CreateEmptyString(env);
378     Task::GenerateTask(env, value, func, taskName, args, argc);
379     ASSERT_TRUE(args != nullptr);
380 }
381 
382 HWTEST_F(NativeEngineTest, TaskpoolTest022, testing::ext::TestSize.Level0)
383 {
384     napi_env env = reinterpret_cast<napi_env>(engine_);
385     ExceptionScope scope(env);
386     TaskGroupManager &taskGroupManager = TaskGroupManager::GetInstance();
387     TaskGroup* group = new TaskGroup();
388     uint64_t groupId = reinterpret_cast<uint64_t>(group);
389     Task* task = new Task();
390     uint64_t taskId = reinterpret_cast<uint64_t>(task);
391     napi_value value = NapiHelper::CreateUint64(env, groupId);
392     napi_ref reference = NapiHelper::CreateReference(env, value, 0);
393     taskGroupManager.AddTask(groupId, reference, taskId);
394     ASSERT_NE(reference, nullptr);
395     delete task;
396     delete group;
397 }
398 
399 HWTEST_F(NativeEngineTest, TaskpoolTest023, testing::ext::TestSize.Level0)
400 {
401     TaskGroupManager &taskGroupManager = TaskGroupManager::GetInstance();
402     TaskGroup* group = new TaskGroup();
403     uint64_t groupId = reinterpret_cast<uint64_t>(group);
404     TaskGroup* taskGroup = taskGroupManager.GetTaskGroup(groupId);
405     ASSERT_TRUE(taskGroup == nullptr);
406 }
407 
408 HWTEST_F(NativeEngineTest, TaskpoolTest024, testing::ext::TestSize.Level0)
409 {
410     MessageQueue<int*> mesQueue;
411     int testData = 42;
412     mesQueue.EnQueue(&testData);
413 
414     auto result = mesQueue.DeQueue();
415     ASSERT_EQ(testData, *result);
416 }
417 
418 HWTEST_F(NativeEngineTest, TaskpoolTest025, testing::ext::TestSize.Level0)
419 {
420     MessageQueue<std::string> mesQueue;
421     ASSERT_EQ(mesQueue.IsEmpty(), true);
422 
423     std::string testStr = "hello";
424     mesQueue.EnQueue(testStr);
425     ASSERT_EQ(mesQueue.IsEmpty(), false);
426 }
427 
428 HWTEST_F(NativeEngineTest, TaskpoolTest026, testing::ext::TestSize.Level0)
429 {
430     napi_env env = (napi_env)engine_;
431     ExceptionScope scope(env);
432     napi_value argv[] = {nullptr};
433     std::string funcName = "SeqRunnerConstructor";
434     napi_value cb = nullptr;
435     napi_value result = nullptr;
436     napi_create_function(env, funcName.c_str(), funcName.size(), SequenceRunner::SeqRunnerConstructor, nullptr, &cb);
437     napi_call_function(env, nullptr, cb, 0, argv, &result);
438     ASSERT_NE(result, nullptr);
439 }
440 
441 HWTEST_F(NativeEngineTest, TaskpoolTest027, testing::ext::TestSize.Level0)
442 {
443     napi_env env = (napi_env)engine_;
444     ExceptionScope scope(env);
445     napi_value argv[] = {nullptr};
446     std::string func = "SeqRunnerConstructor";
447     napi_value callback = nullptr;
448     napi_value result = nullptr;
449     napi_create_function(env, func.c_str(), func.size(), SequenceRunner::SeqRunnerConstructor, nullptr, &callback);
450     napi_call_function(env, nullptr, callback, 0, argv, &result);
451     ASSERT_NE(result, nullptr);
452 
453     size_t argc1 = 0;
454     napi_value argv1[] = {nullptr};
455     func = "Execute";
456     callback = nullptr;
457     napi_value result1 = nullptr;
458     napi_create_function(env, func.c_str(), func.size(), SequenceRunner::Execute, nullptr, &callback);
459     napi_call_function(env, nullptr, callback, argc1, argv1, &result1);
460     ASSERT_TRUE(result1 == nullptr);
461 }
462 
463 HWTEST_F(NativeEngineTest, TaskpoolTest028, testing::ext::TestSize.Level0)
464 {
465     TaskGroup taskGroup;
466     uint32_t taskId = 10;
467     uint32_t index = taskGroup.GetTaskIndex(taskId);
468     ASSERT_EQ(index, 0);
469 }
470 
471 HWTEST_F(NativeEngineTest, TaskpoolTest029, testing::ext::TestSize.Level0)
472 {
473     napi_env env = (napi_env)engine_;
474     TaskGroup taskGroup;
475     taskGroup.NotifyGroupTask(env);
476     TaskManager &taskManager = TaskManager::GetInstance();
477     taskManager.InitTaskManager(env);
478     uint32_t taskId = 11;
479     ASSERT_EQ(taskId, 11);
480 }
481 
482 HWTEST_F(NativeEngineTest, TaskpoolTest030, testing::ext::TestSize.Level0)
483 {
484     napi_env env = (napi_env)engine_;
485     TaskGroup taskGroup;
486     taskGroup.CancelPendingGroup(env);
487     TaskManager &taskManager = TaskManager::GetInstance();
488     taskManager.InitTaskManager(env);
489     uint32_t taskId = 12;
490     ASSERT_EQ(taskId, 12);
491 }
492 
493 HWTEST_F(NativeEngineTest, TaskpoolTest031, testing::ext::TestSize.Level0)
494 {
495     napi_env env = reinterpret_cast<napi_env>(engine_);
496     TaskManager& taskManager = TaskManager::GetInstance();
497     taskManager.InitTaskManager(env);
498     Task* task = new Task();
499     auto id = reinterpret_cast<uint64_t>(task);
500     taskManager.StoreTask(id, task);
501     Task* res = taskManager.GetTask(id);
502     ASSERT_EQ(task, res);
503 }
504 
505 HWTEST_F(NativeEngineTest, TaskpoolTest032, testing::ext::TestSize.Level0)
506 {
507     napi_env env = reinterpret_cast<napi_env>(engine_);
508     TaskManager& taskManager = TaskManager::GetInstance();
509     taskManager.InitTaskManager(env);
510     uint64_t taskId = 14;
511     taskManager.RemoveTask(taskId);
512     ASSERT_EQ(taskId, 14);
513 }
514 
515 HWTEST_F(NativeEngineTest, TaskpoolTest033, testing::ext::TestSize.Level0)
516 {
517     napi_env env = reinterpret_cast<napi_env>(engine_);
518     TaskManager& taskManager = TaskManager::GetInstance();
519     taskManager.InitTaskManager(env);
520     usleep(50000);
521     // the task will freed in the taskManager's Destuctor and will not cause memory leak
522     Task* task = new Task();
523     auto taskId = reinterpret_cast<uint64_t>(task);
524     taskManager.EnqueueTaskId(taskId, Priority::HIGH);
525     std::pair<uint64_t, Priority> result = taskManager.DequeueTaskId();
526     ASSERT_TRUE(result.first == taskId);
527     ASSERT_TRUE(result.second == Priority::HIGH);
528 }
529 
530 HWTEST_F(NativeEngineTest, TaskpoolTest034, testing::ext::TestSize.Level0)
531 {
532     napi_env env = reinterpret_cast<napi_env>(engine_);
533     Worker* worker = reinterpret_cast<Worker*>(NativeEngineTest::WorkerConstructor(env));
534     TaskManager& taskManager = TaskManager::GetInstance();
535     taskManager.InitTaskManager(env);
536     taskManager.NotifyWorkerIdle(worker);
537     ASSERT_NE(worker, nullptr);
538     taskManager.NotifyWorkerCreated(worker);
539     ASSERT_NE(worker, nullptr);
540     taskManager.NotifyWorkerRunning(worker);
541     ASSERT_NE(worker, nullptr);
542     taskManager.RestoreWorker(worker);
543     ASSERT_NE(worker, nullptr);
544     taskManager.RemoveWorker(worker);
545     ASSERT_NE(worker, nullptr);
546 }
547 
548 HWTEST_F(NativeEngineTest, TaskpoolTest035, testing::ext::TestSize.Level0)
549 {
550     napi_env env = reinterpret_cast<napi_env>(engine_);
551     TaskManager& taskManager = TaskManager::GetInstance();
552     taskManager.InitTaskManager(env);
553     uint32_t step = 8;
554     taskManager.GetIdleWorkersList(step);
555     ASSERT_EQ(step, 8);
556 }
557 
558 HWTEST_F(NativeEngineTest, TaskpoolTest036, testing::ext::TestSize.Level0)
559 {
560     napi_env env = reinterpret_cast<napi_env>(engine_);
561     TaskManager& taskManager = TaskManager::GetInstance();
562     taskManager.InitTaskManager(env);
563     napi_value res = taskManager.GetThreadInfos(env);
564     ASSERT_NE(res, nullptr);
565 }
566 
567 HWTEST_F(NativeEngineTest, TaskpoolTest037, testing::ext::TestSize.Level0)
568 {
569     napi_env env = reinterpret_cast<napi_env>(engine_);
570     TaskManager& taskManager = TaskManager::GetInstance();
571     taskManager.InitTaskManager(env);
572     uint64_t taskId = 16;
573     std::shared_ptr<CallbackInfo> res = taskManager.GetCallbackInfo(taskId);
574     ASSERT_EQ(res, nullptr);
575 }
576 
577 HWTEST_F(NativeEngineTest, TaskpoolTest038, testing::ext::TestSize.Level0)
578 {
579     napi_env env = reinterpret_cast<napi_env>(engine_);
580     TaskManager& taskManager = TaskManager::GetInstance();
581     taskManager.InitTaskManager(env);
582     uint64_t taskId = 16;
583     taskManager.RegisterCallback(env, taskId, nullptr);
584     ASSERT_EQ(taskId, 16);
585 }
586 
587 HWTEST_F(NativeEngineTest, TaskpoolTest039, testing::ext::TestSize.Level0)
588 {
589     napi_env env = reinterpret_cast<napi_env>(engine_);
590     TaskManager& taskManager = TaskManager::GetInstance();
591     taskManager.InitTaskManager(env);
592     uint64_t taskId = 17;
593     taskManager.IncreaseRefCount(taskId);
594     ASSERT_EQ(taskId, 17);
595 }
596 
597 HWTEST_F(NativeEngineTest, TaskpoolTest040, testing::ext::TestSize.Level0)
598 {
599     napi_env env = reinterpret_cast<napi_env>(engine_);
600     TaskManager& taskManager = TaskManager::GetInstance();
601     taskManager.InitTaskManager(env);
602     uint64_t taskId = 18;
603     taskManager.DecreaseRefCount(env, taskId);
604     ASSERT_EQ(taskId, 18);
605 }
606 
607 HWTEST_F(NativeEngineTest, TaskpoolTest041, testing::ext::TestSize.Level0)
608 {
609     napi_env env = reinterpret_cast<napi_env>(engine_);
610     TaskManager& taskManager = TaskManager::GetInstance();
611     taskManager.InitTaskManager(env);
612     uint64_t taskId = 19;
613     bool res = taskManager.IsDependendByTaskId(taskId);
614     ASSERT_EQ(res, false);
615 }
616 
617 HWTEST_F(NativeEngineTest, TaskpoolTest042, testing::ext::TestSize.Level0)
618 {
619     napi_env env = reinterpret_cast<napi_env>(engine_);
620     TaskManager& taskManager = TaskManager::GetInstance();
621     taskManager.InitTaskManager(env);
622     uint64_t taskId = 20;
623     taskManager.NotifyDependencyTaskInfo(taskId);
624     ASSERT_EQ(taskId, 20);
625 }
626 
627 HWTEST_F(NativeEngineTest, TaskpoolTest043, testing::ext::TestSize.Level0)
628 {
629     napi_env env = reinterpret_cast<napi_env>(engine_);
630     TaskManager& taskManager = TaskManager::GetInstance();
631     taskManager.InitTaskManager(env);
632     uint64_t taskId = 21;
633     std::set<uint64_t> taskSet;
634     taskSet.emplace(1);
635     taskSet.emplace(2);
636     bool res = taskManager.StoreTaskDependency(taskId, taskSet);
637     ASSERT_EQ(res, true);
638 }
639 
640 HWTEST_F(NativeEngineTest, TaskpoolTest044, testing::ext::TestSize.Level0)
641 {
642     napi_env env = reinterpret_cast<napi_env>(engine_);
643     TaskManager& taskManager = TaskManager::GetInstance();
644     taskManager.InitTaskManager(env);
645     uint64_t taskId = 22;
646     uint64_t dependentId = 0;
647     bool res = taskManager.RemoveTaskDependency(taskId, dependentId);
648     ASSERT_EQ(res, false);
649 }
650 
651 HWTEST_F(NativeEngineTest, TaskpoolTest045, testing::ext::TestSize.Level0)
652 {
653     napi_env env = reinterpret_cast<napi_env>(engine_);
654     TaskManager& taskManager = TaskManager::GetInstance();
655     taskManager.InitTaskManager(env);
656     uint64_t taskId = 23;
657     std::set<uint64_t> dependentIdSet;
658     dependentIdSet.emplace(1);
659     std::set<uint64_t> idSet;
660     idSet.emplace(2);
661     bool res = taskManager.CheckCircularDependency(dependentIdSet, idSet, taskId);
662     ASSERT_EQ(res, true);
663 }
664 
665 HWTEST_F(NativeEngineTest, TaskpoolTest046, testing::ext::TestSize.Level0)
666 {
667     napi_env env = reinterpret_cast<napi_env>(engine_);
668     TaskManager& taskManager = TaskManager::GetInstance();
669     taskManager.InitTaskManager(env);
670     uint64_t taskId = 24;
671     taskManager.EnqueuePendingTaskInfo(taskId, Priority::NUMBER);
672     std::pair<uint64_t, Priority> res = taskManager.DequeuePendingTaskInfo(taskId);
673     ASSERT_EQ(res.first, 24);
674     ASSERT_EQ(res.second, Priority::NUMBER);
675 }
676 
677 HWTEST_F(NativeEngineTest, TaskpoolTest047, testing::ext::TestSize.Level0)
678 {
679     napi_env env = reinterpret_cast<napi_env>(engine_);
680     TaskManager& taskManager = TaskManager::GetInstance();
681     taskManager.InitTaskManager(env);
682     uint64_t taskId = 24;
683     taskManager.RemovePendingTaskInfo(taskId);
684     ASSERT_EQ(taskId, 24);
685 }
686 
687 HWTEST_F(NativeEngineTest, TaskpoolTest048, testing::ext::TestSize.Level0)
688 {
689     napi_env env = reinterpret_cast<napi_env>(engine_);
690     TaskManager& taskManager = TaskManager::GetInstance();
691     taskManager.InitTaskManager(env);
692     uint64_t taskId = 25;
693     std::set<uint64_t> dependTaskIdSet;
694     taskManager.StoreDependentTaskInfo(dependTaskIdSet, taskId);
695     ASSERT_EQ(taskId, 25);
696 }
697 
698 HWTEST_F(NativeEngineTest, TaskpoolTest049, testing::ext::TestSize.Level0)
699 {
700     napi_env env = reinterpret_cast<napi_env>(engine_);
701     TaskManager& taskManager = TaskManager::GetInstance();
702     taskManager.InitTaskManager(env);
703     uint64_t taskId = 26;
704     uint64_t dependentTaskId = 26;
705     taskManager.RemoveDependentTaskInfo(dependentTaskId, taskId);
706     ASSERT_EQ(taskId, 26);
707     ASSERT_EQ(dependentTaskId, 26);
708 }
709 
710 HWTEST_F(NativeEngineTest, TaskpoolTest050, testing::ext::TestSize.Level0)
711 {
712     napi_env env = reinterpret_cast<napi_env>(engine_);
713     TaskManager& taskManager = TaskManager::GetInstance();
714     taskManager.InitTaskManager(env);
715     uint64_t taskId = 27;
716     uint64_t totalDuration = 25;
717     uint64_t cpuDuration = 8;
718     taskManager.StoreTaskDuration(taskId, totalDuration, cpuDuration);
719     ASSERT_EQ(taskId, 27);
720     ASSERT_EQ(totalDuration, 25);
721     ASSERT_EQ(cpuDuration, 8);
722 }
723 
724 HWTEST_F(NativeEngineTest, TaskpoolTest051, testing::ext::TestSize.Level0)
725 {
726     napi_env env = reinterpret_cast<napi_env>(engine_);
727     TaskManager& taskManager = TaskManager::GetInstance();
728     taskManager.InitTaskManager(env);
729     uint64_t taskId = 28;
730     std::string str = "testTaskpool";
731     taskManager.GetTaskDuration(taskId, str);
732     ASSERT_EQ(taskId, 28);
733 }
734 
735 HWTEST_F(NativeEngineTest, TaskpoolTest052, testing::ext::TestSize.Level0)
736 {
737     napi_env env = reinterpret_cast<napi_env>(engine_);
738     TaskManager& taskManager = TaskManager::GetInstance();
739     taskManager.InitTaskManager(env);
740     uint64_t taskId = 29;
741     taskManager.RemoveTaskDuration(taskId);
742     ASSERT_EQ(taskId, 29);
743 }
744 
745 HWTEST_F(NativeEngineTest, TaskpoolTest053, testing::ext::TestSize.Level0)
746 {
747     TaskGroupManager& taskGroupManager = TaskGroupManager::GetInstance();
748     uint64_t groupId = 30;
749     TaskGroup* group = taskGroupManager.GetTaskGroup(groupId);
750     taskGroupManager.StoreTaskGroup(groupId, group);
751     ASSERT_EQ(groupId, 30);
752 }
753 
754 HWTEST_F(NativeEngineTest, TaskpoolTest054, testing::ext::TestSize.Level0)
755 {
756     TaskGroupManager& taskGroupManager = TaskGroupManager::GetInstance();
757     uint64_t groupId = 31;
758     taskGroupManager.RemoveTaskGroup(groupId);
759     ASSERT_EQ(groupId, 31);
760 }
761 
762 HWTEST_F(NativeEngineTest, TaskpoolTest055, testing::ext::TestSize.Level0)
763 {
764     napi_env env = reinterpret_cast<napi_env>(engine_);
765     TaskGroupManager& taskGroupManager = TaskGroupManager::GetInstance();
766     uint64_t groupId = 32;
767     taskGroupManager.CancelGroup(env, groupId);
768     ASSERT_EQ(groupId, 32);
769 }
770 
771 HWTEST_F(NativeEngineTest, TaskpoolTest056, testing::ext::TestSize.Level0)
772 {
773     napi_env env = reinterpret_cast<napi_env>(engine_);
774     TaskGroupManager& taskGroupManager = TaskGroupManager::GetInstance();
775     uint64_t taskId = 33;
776     TaskGroup* group = taskGroupManager.GetTaskGroup(taskId);
777     taskGroupManager.CancelGroupTask(env, taskId, group);
778     ASSERT_EQ(taskId, 33);
779 }
780 
781 HWTEST_F(NativeEngineTest, TaskpoolTest057, testing::ext::TestSize.Level0)
782 {
783     TaskGroupManager& taskGroupManager = TaskGroupManager::GetInstance();
784     uint64_t groupId = 34;
785     taskGroupManager.UpdateGroupState(groupId);
786     ASSERT_EQ(groupId, 34);
787 }
788 
789 HWTEST_F(NativeEngineTest, TaskpoolTest058, testing::ext::TestSize.Level0)
790 {
791     napi_env env = reinterpret_cast<napi_env>(engine_);
792     TaskGroupManager& taskGroupManager = TaskGroupManager::GetInstance();
793     uint64_t seqRunnerId = 35;
794     Task *task = new Task();
795     ASSERT_NE(task, nullptr);
796     taskGroupManager.AddTaskToSeqRunner(seqRunnerId, task);
797     taskGroupManager.TriggerSeqRunner(env, task);
798     SequenceRunner sequenceRunner;
799     taskGroupManager.StoreSequenceRunner(seqRunnerId, &sequenceRunner);
800     taskGroupManager.RemoveSequenceRunner(seqRunnerId);
801     ASSERT_EQ(seqRunnerId, 35);
802     SequenceRunner *res = taskGroupManager.GetSeqRunner(seqRunnerId);
803     ASSERT_EQ(res, nullptr);
804 }
805 
806 HWTEST_F(NativeEngineTest, TaskpoolTest059, testing::ext::TestSize.Level0)
807 {
808     napi_env env = reinterpret_cast<napi_env>(engine_);
809     TaskManager& taskManager = TaskManager::GetInstance();
810     taskManager.InitTaskManager(env);
811     taskManager.TryTriggerExpand();
812     usleep(50000);
813     uint32_t result = taskManager.GetIdleWorkers();
814     ASSERT_TRUE(result != 0);
815     NativeEngineTest::TriggerShrink(env);
816 }
817 
818 HWTEST_F(NativeEngineTest, TaskpoolTest060, testing::ext::TestSize.Level0)
819 {
820     napi_env env = reinterpret_cast<napi_env>(engine_);
821     TaskManager& taskManager = TaskManager::GetInstance();
822     taskManager.InitTaskManager(env);
823     uint64_t taskId = 36;
824     taskManager.EnqueueTaskId(taskId, Priority::LOW);
825     ASSERT_EQ(taskId, 36);
826 
827     std::pair<uint64_t, Priority> result = taskManager.DequeueTaskId();
828     ASSERT_TRUE(result.first == 36);
829     ASSERT_TRUE(result.second == Priority::LOW);
830 
831     taskId = 37;
832     taskManager.EnqueueTaskId(taskId, Priority::IDLE);
833     ASSERT_EQ(taskId, 37);
834 
835     result = taskManager.DequeueTaskId();
836     ASSERT_TRUE(result.first == 37);
837     ASSERT_TRUE(result.second == Priority::IDLE);
838     result = taskManager.DequeueTaskId();
839     ASSERT_TRUE(result.first == 0);
840     ASSERT_TRUE(result.second == Priority::LOW);
841 }
842 
843 HWTEST_F(NativeEngineTest, TaskpoolTest061, testing::ext::TestSize.Level0)
844 {
845     napi_env env = (napi_env)engine_;
846     ExceptionScope scope(env);
847     napi_value argv[] = {nullptr, nullptr};
848     std::string funcName = "TaskGroupConstructor";
849     napi_value cb = nullptr;
850     napi_value result = nullptr;
851     napi_create_function(env, funcName.c_str(), funcName.size(), TaskGroup::TaskGroupConstructor, nullptr, &cb);
852 
853     napi_call_function(env, nullptr, cb, 2, argv, &result);
854     ASSERT_TRUE(result == nullptr);
855 }
856 
857 HWTEST_F(NativeEngineTest, TaskpoolTest062, testing::ext::TestSize.Level0)
858 {
859     napi_env env = (napi_env)engine_;
860     ExceptionScope scope(env);
861     napi_value argv[] = {nullptr};
862     std::string funcName = "TaskGroupConstructor";
863     napi_value cb = nullptr;
864     napi_value result = nullptr;
865     napi_create_function(env, funcName.c_str(), funcName.size(), TaskGroup::TaskGroupConstructor, nullptr, &cb);
866 
867     napi_call_function(env, nullptr, cb, 1, argv, &result);
868     ASSERT_TRUE(result == nullptr);
869 }
870 
871 HWTEST_F(NativeEngineTest, TaskpoolTest063, testing::ext::TestSize.Level0)
872 {
873     napi_env env = (napi_env)engine_;
874     TaskGroup taskGroup;
875     uint32_t taskId = 10;
876     taskGroup.taskIds_.push_back(taskId);
877     uint32_t index = taskGroup.GetTaskIndex(taskId);
878     ASSERT_EQ(index, 0);
879 }
880 
881 HWTEST_F(NativeEngineTest, TaskpoolTest064, testing::ext::TestSize.Level0)
882 {
883     napi_env env = (napi_env)engine_;
884     TaskGroup taskGroup;
885     uint32_t taskId = 11;
886     taskGroup.taskIds_.push_back(taskId);
887     uint32_t index = taskGroup.GetTaskIndex(1);
888     ASSERT_EQ(index, 1);
889 }
890 
891 HWTEST_F(NativeEngineTest, TaskpoolTest065, testing::ext::TestSize.Level0)
892 {
893     napi_env env = (napi_env)engine_;
894     TaskGroup taskGroup;
895     GroupInfo* groupInfo = new GroupInfo();
896     taskGroup.pendingGroupInfos_.push_back(groupInfo);
897     taskGroup.NotifyGroupTask(env);
898     delete groupInfo;
899     groupInfo = nullptr;
900     ASSERT_TRUE(taskGroup.pendingGroupInfos_.empty());
901 }
902 
903 HWTEST_F(NativeEngineTest, TaskpoolTest066, testing::ext::TestSize.Level0)
904 {
905     napi_env env = (napi_env)engine_;
906     TaskGroupManager& taskGroupManager = TaskGroupManager::GetInstance();
907     TaskGroup* taskGroup = new TaskGroup();
908     uint64_t groupId = reinterpret_cast<uint64_t>(taskGroup);
909     taskGroup->groupId_ = groupId;
910     taskGroupManager.StoreTaskGroup(groupId, taskGroup);
911 
912     GroupInfo* groupInfo = new GroupInfo();
913     groupInfo->priority = Priority::DEFAULT;
914     taskGroup->pendingGroupInfos_.push_back(groupInfo);
915     taskGroup->NotifyGroupTask(env);
916     ASSERT_TRUE(taskGroup->pendingGroupInfos_.empty());
917 }
918 
919 HWTEST_F(NativeEngineTest, TaskpoolTest067, testing::ext::TestSize.Level0)
920 {
921     napi_env env = (napi_env)engine_;
922     TaskGroupManager& taskGroupManager = TaskGroupManager::GetInstance();
923     TaskGroup* taskGroup = new TaskGroup();
924     uint64_t groupId = reinterpret_cast<uint64_t>(taskGroup);
925     taskGroup->groupId_ = groupId;
926     taskGroupManager.StoreTaskGroup(groupId, taskGroup);
927 
928     Task* task = new Task();
929     task->taskType_ = TaskType::COMMON_TASK;
930     task->groupId_ = groupId;
931     task->taskId_ = reinterpret_cast<uint64_t>(task);
932     napi_reference_ref(env, task->taskRef_, nullptr);
933     napi_value thisValue = NapiHelper::CreateObject(env);
934     napi_wrap(
935         env, thisValue, task,
__anon15dbeb740302(napi_env environment, void* data, void* hint) 936         [](napi_env environment, void* data, void* hint) {
937             auto obj = reinterpret_cast<Task*>(data);
938             if (obj != nullptr) {
939                 delete obj;
940             }
941         }, nullptr, nullptr);
942     napi_ref ref = NapiHelper::CreateReference(env, thisValue, 1);
943     taskGroupManager.AddTask(groupId, ref, task->taskId_);
944 
945     GroupInfo* groupInfo = new GroupInfo();
946     groupInfo->priority = Priority::DEFAULT;
947     taskGroup->pendingGroupInfos_.push_back(groupInfo);
948     taskGroup->NotifyGroupTask(env);
949     ASSERT_TRUE(taskGroup->pendingGroupInfos_.empty());
950 }
951 
952 HWTEST_F(NativeEngineTest, TaskpoolTest068, testing::ext::TestSize.Level0)
953 {
954     napi_env env = (napi_env)engine_;
955     TaskGroupManager& taskGroupManager = TaskGroupManager::GetInstance();
956     TaskGroup taskGroup;
957 
958     GroupInfo* groupInfo = new GroupInfo();
959     groupInfo->priority = Priority::DEFAULT;
960     taskGroup.pendingGroupInfos_.push_back(groupInfo);
961     uint64_t taskId = 68;
962     taskGroup.taskIds_.push_back(taskId);
963     taskGroup.CancelPendingGroup(env);
964 
965     ASSERT_TRUE(taskGroup.pendingGroupInfos_.empty());
966 }
967 
968 HWTEST_F(NativeEngineTest, TaskpoolTest069, testing::ext::TestSize.Level0)
969 {
970     napi_env env = (napi_env)engine_;
971     TaskManager& taskManager = TaskManager::GetInstance();
972     Task* pointer = new Task();
973     auto task = reinterpret_cast<uint64_t>(pointer);
974     auto worker = reinterpret_cast<Worker*>(NativeEngineTest::WorkerConstructor(env));
975     taskManager.StoreLongTaskInfo(task, worker);
976     auto res = taskManager.GetLongTaskInfo(task);
977     ASSERT_TRUE(worker == res);
978     taskManager.TerminateTask(task);
979     res = taskManager.GetLongTaskInfo(task);
980     ASSERT_TRUE(res == nullptr);
981 }
982 
983 HWTEST_F(NativeEngineTest, TaskpoolTest070, testing::ext::TestSize.Level0)
984 {
985     napi_env env = (napi_env)engine_;
986     TaskManager& taskManager = TaskManager::GetInstance();
987     Task* task = new Task();
988     auto id = reinterpret_cast<uint64_t>(task);
989     task->isLongTask_ = true;
990     task->taskId_ = id;
991     taskManager.StoreTask(id, task);
992     taskManager.EnqueueTaskId(id);
993     usleep(50000);
994     auto res = taskManager.GetLongTaskInfo(id);
995     ASSERT_NE(res, nullptr);
996 }
997 
998 HWTEST_F(NativeEngineTest, TaskpoolTest071, testing::ext::TestSize.Level0)
999 {
1000     napi_env env = (napi_env)engine_;
1001     TaskManager& taskManager = TaskManager::GetInstance();
1002     char buf[4096]; // 4096: buffer length for thread state
1003     auto worker = reinterpret_cast<Worker*>(NativeEngineTest::WorkerConstructor(env));
1004     uv_timer_t* handle = new uv_timer_t;
1005     handle->data = worker;
1006     auto tid = NativeEngineTest::GetWorkerTid(handle);
1007     bool res = taskManager.ReadThreadInfo(tid, buf, sizeof(buf));
1008     ASSERT_TRUE(res == true);
1009 }
1010 
1011 HWTEST_F(NativeEngineTest, TaskpoolTest072, testing::ext::TestSize.Level0)
1012 {
1013     napi_env env = (napi_env)engine_;
1014     TaskManager& taskManager = TaskManager::GetInstance();
1015     Task* task = new Task();
1016     auto id = reinterpret_cast<uint64_t>(task);
1017     bool res = taskManager.IsDependendByTaskId(id);
1018     ASSERT_NE(res, true);
1019 }
1020 
1021 HWTEST_F(NativeEngineTest, TaskpoolTest073, testing::ext::TestSize.Level0)
1022 {
1023     napi_env env = (napi_env)engine_;
1024     TaskManager& taskManager = TaskManager::GetInstance();
1025     Task* task = new Task();
1026     auto id = reinterpret_cast<uint64_t>(task);
1027     taskManager.StoreTask(id, task);
1028     bool res = taskManager.CheckTask(id);
1029     ASSERT_TRUE(res == true);
1030 }
1031 
1032 HWTEST_F(NativeEngineTest, TaskpoolTest074, testing::ext::TestSize.Level0)
1033 {
1034     napi_env env = (napi_env)engine_;
1035     TaskManager& taskManager = TaskManager::GetInstance();
1036     auto res = taskManager.GetThreadInfos(env);
1037     ASSERT_TRUE(res != nullptr);
1038 }
1039 
1040 HWTEST_F(NativeEngineTest, TaskpoolTest075, testing::ext::TestSize.Level0)
1041 {
1042     napi_env env = (napi_env)engine_;
1043     TaskManager& taskManager = TaskManager::GetInstance();
1044     auto res = taskManager.GetTaskInfos(env);
1045     ASSERT_TRUE(res != nullptr);
1046 }
1047 
1048 HWTEST_F(NativeEngineTest, TaskpoolTest076, testing::ext::TestSize.Level0)
1049 {
1050     napi_env env = (napi_env)engine_;
1051     TaskManager& taskManager = TaskManager::GetInstance();
1052     Task* task = new Task();
1053     auto id = reinterpret_cast<uint64_t>(task);
1054     taskManager.StoreTaskDuration(id, 0, 0);
1055     auto totalTime = taskManager.GetTaskDuration(id, TASK_TOTAL_TIME);
1056     auto cpuTime = taskManager.GetTaskDuration(id, TASK_CPU_TIME);
1057     ASSERT_TRUE(totalTime == 0);
1058     ASSERT_TRUE(cpuTime == 0);
1059     taskManager.StoreTaskDuration(id, 100, 100); // 100: 100 seconds
1060     totalTime = taskManager.GetTaskDuration(id, TASK_TOTAL_TIME);
1061     cpuTime = taskManager.GetTaskDuration(id, TASK_CPU_TIME);
1062     ASSERT_TRUE(totalTime == 100);
1063     ASSERT_TRUE(cpuTime == 100);
1064 }
1065 
1066 HWTEST_F(NativeEngineTest, TaskpoolTest077, testing::ext::TestSize.Level0)
1067 {
1068     napi_env env = (napi_env)engine_;
1069     TaskManager& taskManager = TaskManager::GetInstance();
1070     Task* task = new Task(env, TaskType::COMMON_TASK, "test");
1071     auto id = reinterpret_cast<uint64_t>(task);
1072     taskManager.StoreTask(id, task);
1073     auto res = task->name_;
1074     ASSERT_TRUE(strcmp(res.c_str(), "test") == 0);
1075 }
1076 
1077 HWTEST_F(NativeEngineTest, TaskpoolTest078, testing::ext::TestSize.Level0)
1078 {
1079     napi_env env = (napi_env)engine_;
1080     ExceptionScope scope(env);
1081     napi_value argv[] = {};
1082     napi_value result = NativeEngineTest::IsConcurrent(env, argv, 0);
1083     ASSERT_TRUE(result == nullptr);
1084 }
1085 
1086 HWTEST_F(NativeEngineTest, TaskpoolTest079, testing::ext::TestSize.Level0)
1087 {
1088     napi_env env = (napi_env)engine_;
1089     ExceptionScope scope(env);
1090     napi_value argv[] = { nullptr };
1091     napi_value result = NativeEngineTest::IsConcurrent(env, argv, 1);
1092     ASSERT_TRUE(result == nullptr);
1093 }
1094 
1095 HWTEST_F(NativeEngineTest, TaskpoolTest080, testing::ext::TestSize.Level0)
1096 {
1097     napi_env env = (napi_env)engine_;
1098     ExceptionScope scope(env);
1099     napi_value argv[] = { nullptr, nullptr };
1100     napi_value result = NativeEngineTest::IsConcurrent(env, argv, 2);
1101     ASSERT_TRUE(result == nullptr);
1102 }
1103 
1104 HWTEST_F(NativeEngineTest, TaskpoolTest081, testing::ext::TestSize.Level0)
1105 {
1106     napi_env env = (napi_env)engine_;
1107     ExceptionScope scope(env);
1108     napi_value func = nullptr;
1109     GetSendableFunction(env, "foo", func);
1110     napi_value argv[] = { func };
1111     napi_value result = NativeEngineTest::IsConcurrent(env, argv, 1);
1112     bool res = true;
1113     napi_get_value_bool(env, result, &res);
1114     ASSERT_TRUE(res == false);
1115 }
1116 
1117 HWTEST_F(NativeEngineTest, TaskpoolTest082, testing::ext::TestSize.Level0)
1118 {
1119     napi_env env = (napi_env)engine_;
1120     ExceptionScope scope(env);
1121     napi_value argv[] = { nullptr };
1122     napi_value result = NativeEngineTest::GetTaskPoolInfo(env, argv, 1);
1123     ASSERT_TRUE(result != nullptr);
1124 }
1125 
1126 HWTEST_F(NativeEngineTest, TaskpoolTest083, testing::ext::TestSize.Level0)
1127 {
1128     napi_env env = (napi_env)engine_;
1129     ExceptionScope scope(env);
1130     napi_value argv[] = { nullptr };
1131     napi_value result = NativeEngineTest::TerminateTask(env, argv, 1);
1132     ASSERT_TRUE(result == nullptr);
1133 }
1134 
1135 HWTEST_F(NativeEngineTest, TaskpoolTest084, testing::ext::TestSize.Level0)
1136 {
1137     napi_env env = (napi_env)engine_;
1138     ExceptionScope scope(env);
1139     napi_value func = nullptr;
1140     GetSendableFunction(env, "foo", func);
1141     napi_value argv[] = { func };
1142     napi_value result = NativeEngineTest::Execute(env, argv, 1);
1143     ASSERT_TRUE(result != nullptr);
1144 }
1145 
1146 HWTEST_F(NativeEngineTest, TaskpoolTest085, testing::ext::TestSize.Level0)
1147 {
1148     napi_env env = (napi_env)engine_;
1149     ExceptionScope scope(env);
1150     napi_value func = nullptr;
1151     GetSendableFunction(env, "foo", func);
1152 
1153     size_t delay = 1000;
1154     napi_value result = nullptr;
1155     napi_create_uint32(env, delay, &result);
1156 
1157     napi_value argv[] = { result, func };
1158     std::string funcName = "ExecuteDelayed";
1159     result = NativeEngineTest::ExecuteDelayed(env, argv, 2);
1160     ASSERT_TRUE(result == nullptr);
1161 }
1162 
1163 HWTEST_F(NativeEngineTest, TaskpoolTest086, testing::ext::TestSize.Level0)
1164 {
1165     napi_env env = (napi_env)engine_;
1166     ExceptionScope scope(env);
1167     std::string func = "SeqRunnerConstructor";
1168     napi_value callback = nullptr;
1169     napi_value result = nullptr;
1170     napi_create_function(env, func.c_str(), func.size(), SequenceRunner::SeqRunnerConstructor, nullptr, &callback);
1171 
1172     napi_value argv1[] = {nullptr};
1173     napi_create_uint32(env, 1, &argv1[0]);
1174     napi_call_function(env, nullptr, callback, 1, argv1, &result);
1175     ASSERT_NE(result, nullptr);
1176 
1177     napi_value argv2[2] = {nullptr};
1178     napi_create_uint32(env, 1, &argv2[0]);
1179     napi_create_string_utf8(env, "seq01", NAPI_AUTO_LENGTH, &argv2[1]);
1180     result = nullptr;
1181     napi_call_function(env, nullptr, callback, 2, argv2, &result);
1182     ASSERT_EQ(result, nullptr);
1183     napi_value exception = nullptr;
1184     napi_get_and_clear_last_exception(env, &exception);
1185 
1186     napi_value argv3[2] = {nullptr};
1187     napi_create_string_utf8(env, "seq02", NAPI_AUTO_LENGTH, &argv3[0]);
1188     napi_create_uint32(env, 1, &argv3[1]);
1189     result = nullptr;
1190     napi_call_function(env, nullptr, callback, 2, argv3, &result);
1191     ASSERT_NE(result, nullptr);
1192 }
1193 
1194 HWTEST_F(NativeEngineTest, TaskpoolTest087, testing::ext::TestSize.Level0)
1195 {
1196     napi_env env = (napi_env)engine_;
1197     ExceptionScope scope(env);
1198     std::string func = "SeqRunnerConstructor";
1199     napi_value callback = nullptr;
1200     napi_create_function(env, func.c_str(), func.size(), SequenceRunner::SeqRunnerConstructor, nullptr, &callback);
1201 
1202     napi_value argv[2] = {nullptr};
1203     napi_create_string_utf8(env, "seq03", NAPI_AUTO_LENGTH, &argv[0]);
1204     napi_create_uint32(env, 1, &argv[1]);
1205     napi_value result = nullptr;
1206     napi_call_function(env, nullptr, callback, 2, argv, &result);
1207     ASSERT_NE(result, nullptr);
1208 
1209     func = "Execute";
1210     napi_value cb = nullptr;
1211     napi_value res = nullptr;
1212     napi_create_function(env, func.c_str(), func.size(), SequenceRunner::Execute, nullptr, &cb);
1213 
1214     napi_value argv1[] = {nullptr};
1215     napi_create_uint32(env, 1, &argv1[0]);
1216     napi_call_function(env, nullptr, cb, 1, argv1, &res);
1217     ASSERT_EQ(res, nullptr);
1218     napi_value exception = nullptr;
1219     napi_get_and_clear_last_exception(env, &exception);
1220 
1221     napi_value thisValue = CreateTaskObject(env);
1222     napi_value argv2[] = {thisValue};
1223     res = nullptr;
1224     napi_call_function(env, nullptr, cb, 1, argv2, &res);
1225     ASSERT_NE(res, nullptr);
1226     exception = nullptr;
1227     napi_get_and_clear_last_exception(env, &exception);
1228 
1229     napi_value napiSeqRunnerId = NapiHelper::GetNameProperty(env, result, "seqRunnerId");
1230     uint64_t seqId = NapiHelper::GetUint64Value(env, napiSeqRunnerId);
1231     SequenceRunner seq;
1232     TaskGroupManager &taskGroupManager = TaskGroupManager::GetInstance();
1233     taskGroupManager.StoreSequenceRunner(seqId, &seq);
1234 
1235     res = nullptr;
1236     napi_call_function(env, nullptr, cb, 1, argv2, &res);
1237     ASSERT_NE(res, nullptr);
1238 }
1239 
1240 HWTEST_F(NativeEngineTest, TaskpoolTest088, testing::ext::TestSize.Level0)
1241 {
1242     napi_env env = (napi_env)engine_;
1243     ExceptionScope scope(env);
1244     napi_value argv[] = {nullptr};
1245     std::string func = "TaskGroupConstructor";
1246     napi_value callback = nullptr;
1247     napi_value taskGroupResult = nullptr;
1248     napi_create_function(env, func.c_str(), func.size(), TaskGroup::TaskGroupConstructor, nullptr, &callback);
1249     napi_call_function(env, nullptr, callback, 0, argv, &taskGroupResult);
1250 
1251     func = "AddTask";
1252     napi_value cb = nullptr;
1253     napi_value result = nullptr;
1254     napi_create_function(env, func.c_str(), func.size(), TaskGroup::AddTask, nullptr, &cb);
1255 
1256     napi_value napiGroupId = NapiHelper::GetNameProperty(env, taskGroupResult, "groupId");
1257     uint64_t groupId = NapiHelper::GetUint64Value(env, napiGroupId);
1258 
1259     TaskGroupManager& taskGroupManager = TaskGroupManager::GetInstance();
1260     TaskGroup* group = new TaskGroup();
1261     group->groupId_ = groupId;
1262     taskGroupManager.StoreTaskGroup(groupId, group);
1263 
1264     napi_value thisValue = CreateTaskObject(env);
1265     napi_value argv1[] = {thisValue};
1266     napi_call_function(env, nullptr, cb, 1, argv1, &result);
1267     ASSERT_NE(result, nullptr);
1268 
1269     napi_value thisValue2 = CreateTaskObject(env, TaskType::SEQRUNNER_TASK);
1270     napi_value argv2[] = {thisValue2};
1271     result = nullptr;
1272     napi_call_function(env, nullptr, cb, 1, argv2, &result);
1273     ASSERT_EQ(result, nullptr);
1274 }
1275 
1276 HWTEST_F(NativeEngineTest, TaskpoolTest089, testing::ext::TestSize.Level0)
1277 {
1278     napi_env env = (napi_env)engine_;
1279     ExceptionScope scope(env);
1280     napi_value argv[] = {nullptr};
1281     std::string func = "TaskGroupConstructor";
1282     napi_value callback = nullptr;
1283     napi_value taskGroupResult = nullptr;
1284     napi_create_function(env, func.c_str(), func.size(), TaskGroup::TaskGroupConstructor, nullptr, &callback);
1285     napi_call_function(env, nullptr, callback, 0, argv, &taskGroupResult);
1286 
1287     napi_value thisValue = NapiHelper::CreateObject(env);
1288     napi_value argv1[] = {thisValue};
1289     func = "AddTask";
1290     napi_value cb = nullptr;
1291     napi_value result = nullptr;
1292     napi_create_function(env, func.c_str(), func.size(), TaskGroup::AddTask, nullptr, &cb);
1293     napi_call_function(env, nullptr, cb, 1, argv1, &result);
1294     ASSERT_EQ(result, nullptr);
1295 }
1296 
1297 HWTEST_F(NativeEngineTest, TaskpoolTest090, testing::ext::TestSize.Level0)
1298 {
1299     napi_env env = (napi_env)engine_;
1300     ExceptionScope scope(env);
1301     napi_value argv[] = {nullptr};
1302     std::string funcName = "TaskGroupConstructor";
1303     napi_value callback = nullptr;
1304     napi_value taskGroupResult = nullptr;
1305     napi_create_function(env, funcName.c_str(), funcName.size(), TaskGroup::TaskGroupConstructor, nullptr, &callback);
1306     napi_call_function(env, nullptr, callback, 0, argv, &taskGroupResult);
1307 
__anon15dbeb740402(napi_env environment, napi_callback_info info) 1308     auto func = [](napi_env environment, napi_callback_info info) -> napi_value {
1309         return nullptr;
1310     };
1311     napi_value thisValue = nullptr;
1312     napi_create_function(env, "testFunc", NAPI_AUTO_LENGTH, func, nullptr, &thisValue);
1313     napi_value argv1[] = {thisValue};
1314     funcName = "AddTask";
1315     napi_value cb = nullptr;
1316     napi_value result = nullptr;
1317     napi_create_function(env, funcName.c_str(), funcName.size(), TaskGroup::AddTask, nullptr, &cb);
1318     napi_call_function(env, nullptr, cb, 1, argv1, &result);
1319     ASSERT_EQ(result, nullptr);
1320 }
1321 
1322 HWTEST_F(NativeEngineTest, TaskpoolTest091, testing::ext::TestSize.Level0)
1323 {
1324     napi_env env = (napi_env)engine_;
1325     ExceptionScope scope(env);
1326     napi_value argv[] = {nullptr};
1327     std::string funcName = "TaskGroupConstructor";
1328     napi_value callback = nullptr;
1329     napi_value taskGroupResult = nullptr;
1330     napi_create_function(env, funcName.c_str(), funcName.size(), TaskGroup::TaskGroupConstructor, nullptr, &callback);
1331     napi_call_function(env, nullptr, callback, 0, argv, &taskGroupResult);
1332 
1333     napi_value argv1[] = {};
1334     napi_create_uint32(env, 1, &argv1[0]);
1335     funcName = "AddTask";
1336     napi_value cb = nullptr;
1337     napi_value result = nullptr;
1338     napi_create_function(env, funcName.c_str(), funcName.size(), TaskGroup::AddTask, nullptr, &cb);
1339     napi_call_function(env, nullptr, cb, 1, argv1, &result);
1340     ASSERT_EQ(result, nullptr);
1341 }
1342 
1343 HWTEST_F(NativeEngineTest, TaskpoolTest092, testing::ext::TestSize.Level0)
1344 {
1345     napi_env env = (napi_env)engine_;
1346     napi_value global;
1347     napi_get_global(env, &global);
1348     napi_value argv[2] = {};
1349     std::string funcName = "OnReceiveData";
1350     napi_value cb = nullptr;
1351     napi_value result = nullptr;
1352     napi_create_function(env, funcName.c_str(), funcName.size(), Task::OnReceiveData, nullptr, &cb);
1353     napi_call_function(env, global, cb, 0, argv, &result);
1354     napi_value exception = nullptr;
1355     napi_get_and_clear_last_exception(env, &exception);
1356     ExceptionScope scope(env);
1357     argv[0] = nullptr;
1358     argv[1] = nullptr;
1359     result = nullptr;
1360     napi_create_function(env, funcName.c_str(), funcName.size(), Task::OnReceiveData, nullptr, &cb);
1361     napi_call_function(env, global, cb, 2, argv, &result);
1362     ASSERT_TRUE(result == nullptr);
1363 }
1364 
1365 HWTEST_F(NativeEngineTest, TaskpoolTest093, testing::ext::TestSize.Level0)
1366 {
1367     napi_env env = (napi_env)engine_;
1368     napi_value global;
1369     napi_get_global(env, &global);
1370     ExceptionScope scope(env);
1371     napi_value func = nullptr;
1372     GetSendableFunction(env, "foo", func);
1373     napi_value argv[] = { func };
1374     std::string funcName = "TaskConstructor";
1375     napi_value cb = nullptr;
1376     napi_value task = nullptr;
1377     napi_create_function(env, funcName.c_str(), funcName.size(), Task::TaskConstructor, nullptr, &cb);
1378     napi_call_function(env, global, cb, 1, argv, &task);
1379     auto& taskManager = TaskManager::GetInstance();
1380     Task* pointer = nullptr;
1381     napi_unwrap(env, task, reinterpret_cast<void**>(&pointer));
1382     taskManager.StoreTask(pointer->taskId_, pointer);
1383 
1384     funcName = "OnReceiveData";
1385     cb = nullptr;
1386     napi_value result = nullptr;
1387     napi_create_function(env, funcName.c_str(), funcName.size(), Task::OnReceiveData, nullptr, &cb);
1388     napi_call_function(env, global, cb, 1, argv, &result);
1389     auto res = taskManager.GetCallbackInfo(pointer->taskId_);
1390     ASSERT_TRUE(res != nullptr);
1391 }
1392 
1393 HWTEST_F(NativeEngineTest, TaskpoolTest094, testing::ext::TestSize.Level0)
1394 {
1395     napi_env env = (napi_env)engine_;
1396     ExceptionScope scope(env);
1397     napi_value argv[] = { nullptr, nullptr };
1398     std::string funcName = "TaskConstructor";
1399     napi_value cb = nullptr;
1400     napi_value result = nullptr;
1401     napi_create_function(env, funcName.c_str(), funcName.size(), Task::TaskConstructor, nullptr, &cb);
1402     napi_call_function(env, nullptr, cb, 2, argv, &result);
1403     ASSERT_TRUE(result == nullptr);
1404 }
1405 
1406 HWTEST_F(NativeEngineTest, TaskpoolTest095, testing::ext::TestSize.Level0)
1407 {
1408     napi_env env = (napi_env)engine_;
1409     ExceptionScope scope(env);
1410     const char* str = "Task";
1411     napi_value name = nullptr;
1412     napi_create_string_utf8(env, str, NAPI_AUTO_LENGTH, &name);
1413     napi_value argv[] = { name, nullptr };
1414     std::string funcName = "TaskConstructor";
1415     napi_value cb = nullptr;
1416     napi_value result = nullptr;
1417     napi_create_function(env, funcName.c_str(), funcName.size(), Task::TaskConstructor, nullptr, &cb);
1418     napi_call_function(env, nullptr, cb, 2, argv, &result);
1419     ASSERT_TRUE(result == nullptr);
1420 }
1421 
1422 HWTEST_F(NativeEngineTest, TaskpoolTest096, testing::ext::TestSize.Level0)
1423 {
1424     napi_env env = (napi_env)engine_;
1425     napi_value global;
1426     napi_get_global(env, &global);
1427     ExceptionScope scope(env);
1428     napi_value func = nullptr;
1429     GetSendableFunction(env, "foo", func);
1430     napi_value argv[] = { func };
1431     std::string funcName = "TaskConstructor";
1432     napi_value cb = nullptr;
1433     napi_value result = nullptr;
1434     napi_create_function(env, funcName.c_str(), funcName.size(), Task::TaskConstructor, nullptr, &cb);
1435     napi_call_function(env, global, cb, 1, argv, &result);
1436     ASSERT_TRUE(result != nullptr);
1437 }
1438 
1439 HWTEST_F(NativeEngineTest, TaskpoolTest097, testing::ext::TestSize.Level0)
1440 {
1441     napi_env env = (napi_env)engine_;
1442     napi_value global;
1443     napi_get_global(env, &global);
1444     ExceptionScope scope(env);
1445     napi_value func = nullptr;
1446     GetSendableFunction(env, "bar", func);
1447     napi_value argv[] = { func };
1448     std::string funcName = "LongTaskConstructor";
1449     napi_value cb = nullptr;
1450     napi_value result = nullptr;
1451     napi_create_function(env, funcName.c_str(), funcName.size(), Task::LongTaskConstructor, nullptr, &cb);
1452     napi_call_function(env, global, cb, 1, argv, &result);
1453     ASSERT_TRUE(result != nullptr);
1454 }
1455 
1456 HWTEST_F(NativeEngineTest, TaskpoolTest098, testing::ext::TestSize.Level0)
1457 {
1458     napi_env env = (napi_env)engine_;
1459     ExceptionScope scope(env);
1460     napi_value argv[] = { nullptr };
1461     std::string funcName = "SendData";
1462     napi_value cb = nullptr;
1463     napi_value result = nullptr;
1464     napi_create_function(env, funcName.c_str(), funcName.size(), Task::SendData, nullptr, &cb);
1465     napi_call_function(env, nullptr, cb, 1, argv, &result);
1466     ASSERT_TRUE(result == nullptr);
1467 }
1468 
1469 HWTEST_F(NativeEngineTest, TaskpoolTest099, testing::ext::TestSize.Level0)
1470 {
1471     napi_env env = (napi_env)engine_;
1472     napi_value argv[] = {};
1473     std::string funcName = "AddDependency";
1474     napi_value cb = nullptr;
1475     napi_value result = nullptr;
1476     napi_create_function(env, funcName.c_str(), funcName.size(), Task::AddDependency, nullptr, &cb);
1477     napi_call_function(env, nullptr, cb, 0, argv, &result);
1478     napi_value exception = nullptr;
1479     napi_get_and_clear_last_exception(env, &exception);
1480     ASSERT_TRUE(exception != nullptr);
1481 }
1482 
1483 HWTEST_F(NativeEngineTest, TaskpoolTest100, testing::ext::TestSize.Level0)
1484 {
1485     napi_env env = (napi_env)engine_;
1486     napi_value global;
1487     napi_get_global(env, &global);
1488     auto task = GeneratorTask(env, global);
1489     Task* pointer = nullptr;
1490     napi_unwrap(env, task, reinterpret_cast<void**>(&pointer));
1491     pointer->isPeriodicTask_ = true;
1492 
1493     napi_value argv[] = { nullptr };
1494     std::string funcName = "AddDependency";
1495     napi_value cb = nullptr;
1496     napi_value result = nullptr;
1497     napi_create_function(env, funcName.c_str(), funcName.size(), Task::AddDependency, nullptr, &cb);
1498     napi_call_function(env, task, cb, 1, argv, &result);
1499     napi_value exception = nullptr;
1500     napi_get_and_clear_last_exception(env, &exception);
1501     ASSERT_TRUE(exception != nullptr);
1502 }
1503 
1504 HWTEST_F(NativeEngineTest, TaskpoolTest101, testing::ext::TestSize.Level0)
1505 {
1506     napi_env env = (napi_env)engine_;
1507     napi_value global;
1508     napi_get_global(env, &global);
1509     auto task = GeneratorTask(env, global);
1510     Task* pointer = nullptr;
1511     napi_unwrap(env, task, reinterpret_cast<void**>(&pointer));
1512     pointer->taskType_ = TaskType::COMMON_TASK;
1513 
1514     napi_value argv[] = { nullptr };
1515     std::string funcName = "AddDependency";
1516     napi_value cb = nullptr;
1517     napi_value result = nullptr;
1518     napi_create_function(env, funcName.c_str(), funcName.size(), Task::AddDependency, nullptr, &cb);
1519     napi_call_function(env, task, cb, 1, argv, &result);
1520     napi_value exception = nullptr;
1521     napi_get_and_clear_last_exception(env, &exception);
1522     ASSERT_TRUE(exception != nullptr);
1523 }
1524 
1525 HWTEST_F(NativeEngineTest, TaskpoolTest102, testing::ext::TestSize.Level0)
1526 {
1527     napi_env env = (napi_env)engine_;
1528     napi_value global;
1529     napi_get_global(env, &global);
1530     auto task = GeneratorTask(env, global);
1531     auto dependentTask = GeneratorTask(env, global);
1532 
1533     napi_value argv[] = { task };
1534     std::string funcName = "AddDependency";
1535     napi_value cb = nullptr;
1536     napi_value result = nullptr;
1537     napi_create_function(env, funcName.c_str(), funcName.size(), Task::AddDependency, nullptr, &cb);
1538     napi_call_function(env, task, cb, 1, argv, &result);
1539     napi_value exception = nullptr;
1540     napi_get_and_clear_last_exception(env, &exception);
1541     ASSERT_TRUE(exception != nullptr);
1542 }
1543 
1544 HWTEST_F(NativeEngineTest, TaskpoolTest103, testing::ext::TestSize.Level0)
1545 {
1546     napi_env env = (napi_env)engine_;
1547     napi_value global;
1548     napi_get_global(env, &global);
1549     auto task = GeneratorTask(env, global);
1550     napi_value obj;
1551     napi_create_object(env, &obj);
1552     auto dependentTask = GeneratorTask(env, obj);
1553 
1554     napi_value argv[] = { dependentTask };
1555     std::string funcName = "AddDependency";
1556     napi_value cb = nullptr;
1557     napi_value result = nullptr;
1558     napi_create_function(env, funcName.c_str(), funcName.size(), Task::AddDependency, nullptr, &cb);
1559     napi_call_function(env, task, cb, 1, argv, &result);
1560     napi_value exception = nullptr;
1561     napi_get_and_clear_last_exception(env, &exception);
1562     ASSERT_TRUE(exception == nullptr);
1563 }
1564 
1565 HWTEST_F(NativeEngineTest, TaskpoolTest104, testing::ext::TestSize.Level0)
1566 {
1567     napi_env env = (napi_env)engine_;
1568     ExceptionScope scope(env);
1569     napi_value obj;
1570     napi_create_object(env, &obj);
1571     auto task = GeneratorTask(env, obj);
1572     napi_value argv[] = { task };
1573     NativeEngineTest::Execute(env, argv, 1);
1574     napi_value exception = nullptr;
1575     napi_get_and_clear_last_exception(env, &exception);
1576     ASSERT_TRUE(exception == nullptr);
1577 }
1578 
1579 HWTEST_F(NativeEngineTest, TaskpoolTest105, testing::ext::TestSize.Level0)
1580 {
1581     napi_env env = (napi_env)engine_;
1582     ExceptionScope scope(env);
1583     napi_value obj;
1584     napi_create_object(env, &obj);
1585     auto task = GeneratorTask(env, obj);
1586     napi_value argv[] = { task };
1587     NativeEngineTest::TerminateTask(env, argv, 1);
1588     napi_value exception = nullptr;
1589     napi_get_and_clear_last_exception(env, &exception);
1590     ASSERT_TRUE(exception != nullptr);
1591 }
1592 
1593 HWTEST_F(NativeEngineTest, TaskpoolTest106, testing::ext::TestSize.Level0)
1594 {
1595     napi_env env = (napi_env)engine_;
1596     ExceptionScope scope(env);
1597     napi_value argv[] = {};
1598     NativeEngineTest::TerminateTask(env, argv, 0);
1599     napi_value exception = nullptr;
1600     napi_get_and_clear_last_exception(env, &exception);
1601     ASSERT_TRUE(exception != nullptr);
1602 }
1603 
1604 HWTEST_F(NativeEngineTest, TaskpoolTest107, testing::ext::TestSize.Level0)
1605 {
1606     napi_env env = (napi_env)engine_;
1607     ExceptionScope scope(env);
1608     napi_value obj;
1609     napi_create_object(env, &obj);
1610     auto task = GeneratorTask(env, obj);
1611     Task* pointer = nullptr;
1612     napi_unwrap(env, task, reinterpret_cast<void**>(&pointer));
1613     ASSERT_TRUE(pointer != nullptr);
1614     pointer->isLongTask_ = true;
1615     napi_value argv[] = { task };
1616     NativeEngineTest::TerminateTask(env, argv, 1);
1617     napi_value exception = nullptr;
1618     napi_get_and_clear_last_exception(env, &exception);
1619     ASSERT_TRUE(exception == nullptr);
1620 }
1621 
1622 HWTEST_F(NativeEngineTest, TaskpoolTest108, testing::ext::TestSize.Level0)
1623 {
1624     napi_env env = (napi_env)engine_;
1625     ExceptionScope scope(env);
1626     napi_value argv[] = {};
1627     NativeEngineTest::Execute(env, argv, 0);
1628     napi_value exception = nullptr;
1629     napi_get_and_clear_last_exception(env, &exception);
1630     ASSERT_TRUE(exception != nullptr);
1631 }
1632 
1633 HWTEST_F(NativeEngineTest, TaskpoolTest109, testing::ext::TestSize.Level0)
1634 {
1635     napi_env env = (napi_env)engine_;
1636     ExceptionScope scope(env);
1637     napi_value obj;
1638     napi_create_object(env, &obj);
1639     auto task = GeneratorTask(env, obj);
1640     napi_value priority = nullptr;
1641     napi_create_uint32(env, 2, &priority); // 2: LOW priority
1642     napi_value argv[] = { task, priority };
1643     NativeEngineTest::Execute(env, argv, 2);
1644     napi_value exception = nullptr;
1645     napi_get_and_clear_last_exception(env, &exception);
1646     ASSERT_TRUE(exception == nullptr);
1647 }
1648 
1649 HWTEST_F(NativeEngineTest, TaskpoolTest110, testing::ext::TestSize.Level0)
1650 {
1651     napi_env env = (napi_env)engine_;
1652     ExceptionScope scope(env);
1653     napi_value obj;
1654     napi_create_object(env, &obj);
1655     auto task = GeneratorTask(env, obj);
1656     napi_value priority = nullptr;
1657     napi_create_uint32(env, 10, &priority); // 10: invalid priority
1658     napi_value argv[] = { task, priority };
1659     NativeEngineTest::Execute(env, argv, 2);
1660     napi_value exception = nullptr;
1661     napi_get_and_clear_last_exception(env, &exception);
1662     ASSERT_TRUE(exception != nullptr);
1663 }
1664 
1665 HWTEST_F(NativeEngineTest, TaskpoolTest111, testing::ext::TestSize.Level0)
1666 {
1667     napi_env env = (napi_env)engine_;
1668     ExceptionScope scope(env);
1669     napi_value obj;
1670     napi_create_object(env, &obj);
1671     auto group = GeneratorTaskGroup(env, obj);
1672     napi_value taskObj;
1673     napi_create_object(env, &taskObj);
1674     auto task = GeneratorTask(env, taskObj);
1675     napi_value argv[] = { task };
1676     std::string funcName = "AddTask";
1677     napi_value cb = nullptr;
1678     napi_value result = nullptr;
1679     napi_create_function(env, funcName.c_str(), funcName.size(), TaskGroup::AddTask, nullptr, &cb);
1680     napi_call_function(env, group, cb, 1, argv, &result);
1681     napi_value exception = nullptr;
1682     napi_get_and_clear_last_exception(env, &exception);
1683     ASSERT_TRUE(exception == nullptr);
1684 }
1685 
1686 HWTEST_F(NativeEngineTest, TaskpoolTest112, testing::ext::TestSize.Level0)
1687 {
1688     napi_env env = (napi_env)engine_;
1689     ExceptionScope scope(env);
1690     napi_value obj;
1691     napi_create_object(env, &obj);
1692     auto group = GeneratorTaskGroup(env, obj);
1693     napi_value func = nullptr;
1694     GetSendableFunction(env, "foo", func);
1695     napi_value argv[] = { func };
1696     std::string funcName = "AddTask";
1697     napi_value cb = nullptr;
1698     napi_value result = nullptr;
1699     napi_create_function(env, funcName.c_str(), funcName.size(), TaskGroup::AddTask, nullptr, &cb);
1700     napi_call_function(env, group, cb, 1, argv, &result);
1701     napi_value exception = nullptr;
1702     napi_get_and_clear_last_exception(env, &exception);
1703     ASSERT_TRUE(exception == nullptr);
1704 }
1705 
1706 HWTEST_F(NativeEngineTest, TaskpoolTest113, testing::ext::TestSize.Level0)
1707 {
1708     napi_env env = (napi_env)engine_;
1709     ExceptionScope scope(env);
1710     napi_value argv[] = {};
1711     NativeEngineTest::Cancel(env, argv, 0);
1712     napi_value exception = nullptr;
1713     napi_get_and_clear_last_exception(env, &exception);
1714     ASSERT_TRUE(exception != nullptr);
1715 }
1716 
1717 HWTEST_F(NativeEngineTest, TaskpoolTest114, testing::ext::TestSize.Level0)
1718 {
1719     napi_env env = (napi_env)engine_;
1720     ExceptionScope scope(env);
1721     napi_value argv[] = { nullptr };
1722     NativeEngineTest::Cancel(env, argv, 1);
1723     napi_value exception = nullptr;
1724     napi_get_and_clear_last_exception(env, &exception);
1725     ASSERT_TRUE(exception != nullptr);
1726 }
1727 
1728 HWTEST_F(NativeEngineTest, TaskpoolTest115, testing::ext::TestSize.Level0)
1729 {
1730     napi_env env = (napi_env)engine_;
1731     ExceptionScope scope(env);
1732     napi_value obj = nullptr;
1733     napi_create_object(env, &obj);
1734     auto task = GeneratorTask(env, obj);
1735     napi_value argv[] = { task };
1736     NativeEngineTest::Cancel(env, argv, 1);
1737     napi_value exception = nullptr;
1738     napi_get_and_clear_last_exception(env, &exception);
1739     ASSERT_TRUE(exception != nullptr);
1740 }
1741 
1742 HWTEST_F(NativeEngineTest, TaskpoolTest116, testing::ext::TestSize.Level0)
1743 {
1744     napi_env env = (napi_env)engine_;
1745     ExceptionScope scope(env);
1746     napi_value obj = nullptr;
1747     napi_create_object(env, &obj);
1748     auto task = GeneratorTask(env, obj);
1749     napi_value argv[] = { task };
1750     NativeEngineTest::Execute(env, argv, 1);
1751     NativeEngineTest::Cancel(env, argv, 1);
1752     napi_value exception = nullptr;
1753     napi_get_and_clear_last_exception(env, &exception);
1754     ASSERT_TRUE(exception == nullptr);
1755 }
1756 
1757 
1758 HWTEST_F(NativeEngineTest, TaskpoolTest117, testing::ext::TestSize.Level0)
1759 {
1760     napi_env env = (napi_env)engine_;
1761     napi_value obj;
1762     napi_create_object(env, &obj);
1763     auto task = GeneratorTask(env, obj);
1764     napi_value argv[] = { nullptr, nullptr };
1765     std::string funcName = "SetTransferList";
1766     napi_value cb = nullptr;
1767     napi_value result = nullptr;
1768     napi_create_function(env, funcName.c_str(), funcName.size(), Task::SetTransferList, nullptr, &cb);
1769     napi_call_function(env, task, cb, 2, argv, &result);
1770     napi_value exception = nullptr;
1771     napi_get_and_clear_last_exception(env, &exception);
1772     ASSERT_TRUE(exception != nullptr);
1773 }
1774 
1775 HWTEST_F(NativeEngineTest, TaskpoolTest118, testing::ext::TestSize.Level0)
1776 {
1777     napi_env env = (napi_env)engine_;
1778     napi_value obj;
1779     napi_create_object(env, &obj);
1780     auto task = GeneratorTask(env, obj);
1781     napi_value array;
1782     napi_create_array_with_length(env, 1, &array);
1783 
1784     napi_value argv[] = { array };
1785     std::string funcName = "SetTransferList";
1786     napi_value cb = nullptr;
1787     napi_value result = nullptr;
1788     napi_create_function(env, funcName.c_str(), funcName.size(), Task::SetTransferList, nullptr, &cb);
1789     napi_call_function(env, task, cb, 1, argv, &result);
1790     napi_value exception = nullptr;
1791     napi_get_and_clear_last_exception(env, &exception);
1792     ASSERT_TRUE(exception != nullptr);
1793 }
1794 
1795 HWTEST_F(NativeEngineTest, TaskpoolTest119, testing::ext::TestSize.Level0)
1796 {
1797     napi_env env = (napi_env)engine_;
1798     napi_value obj;
1799     napi_create_object(env, &obj);
1800     auto task = GeneratorTask(env, obj);
1801     napi_value argv[] = { nullptr, nullptr };
1802     std::string funcName = "SetCloneList";
1803     napi_value cb = nullptr;
1804     napi_value result = nullptr;
1805     napi_create_function(env, funcName.c_str(), funcName.size(), Task::SetCloneList, nullptr, &cb);
1806     napi_call_function(env, task, cb, 2, argv, &result);
1807     napi_value exception = nullptr;
1808     napi_get_and_clear_last_exception(env, &exception);
1809     ASSERT_TRUE(exception != nullptr);
1810 }
1811 
1812 HWTEST_F(NativeEngineTest, TaskpoolTest120, testing::ext::TestSize.Level0)
1813 {
1814     napi_env env = (napi_env)engine_;
1815     napi_value obj;
1816     napi_create_object(env, &obj);
1817     auto task = GeneratorTask(env, obj);
1818     napi_value argv[] = { nullptr };
1819     std::string funcName = "SetCloneList";
1820     napi_value cb = nullptr;
1821     napi_value result = nullptr;
1822     napi_create_function(env, funcName.c_str(), funcName.size(), Task::SetCloneList, nullptr, &cb);
1823     napi_call_function(env, task, cb, 1, argv, &result);
1824     napi_value exception = nullptr;
1825     napi_get_and_clear_last_exception(env, &exception);
1826     ASSERT_TRUE(exception != nullptr);
1827 }
1828 
1829 HWTEST_F(NativeEngineTest, TaskpoolTest121, testing::ext::TestSize.Level0)
1830 {
1831     napi_env env = (napi_env)engine_;
1832     napi_value obj;
1833     napi_create_object(env, &obj);
1834     auto task = GeneratorTask(env, obj);
1835     napi_value array;
1836     napi_create_array_with_length(env, 1, &array);
1837     napi_value argv[] = { array };
1838     std::string funcName = "SetCloneList";
1839     napi_value cb = nullptr;
1840     napi_value result = nullptr;
1841     napi_create_function(env, funcName.c_str(), funcName.size(), Task::SetCloneList, nullptr, &cb);
1842     napi_call_function(env, task, cb, 1, argv, &result);
1843     napi_value exception = nullptr;
1844     napi_get_and_clear_last_exception(env, &exception);
1845     ASSERT_TRUE(exception == nullptr);
1846 }
1847 
1848 HWTEST_F(NativeEngineTest, TaskpoolTest122, testing::ext::TestSize.Level0)
1849 {
1850     napi_env env = (napi_env)engine_;
1851     napi_value argv[] = {};
1852     std::string funcName = "IsCanceled";
1853     napi_value cb = nullptr;
1854     napi_value result = nullptr;
1855     napi_create_function(env, funcName.c_str(), funcName.size(), Task::IsCanceled, nullptr, &cb);
1856     napi_call_function(env, nullptr, cb, 0, argv, &result);
1857     bool value = true;
1858     napi_get_value_bool(env, result, &value);
1859     ASSERT_TRUE(value == false);
1860 }
1861 
1862 HWTEST_F(NativeEngineTest, TaskpoolTest123, testing::ext::TestSize.Level0)
1863 {
1864     auto task = std::make_unique<Task>();
1865     task->taskId_ = reinterpret_cast<uint64_t>(task.get());
1866     task->ioTime_ = 100;
1867     task->startTime_ = 0;
1868     task->StoreTaskDuration();
1869     auto& taskManager = TaskManager::GetInstance();
1870     auto res = taskManager.GetTaskDuration(task->taskId_, "totalDuration");
1871     ASSERT_TRUE(res != 0);
1872     res = taskManager.GetTaskDuration(task->taskId_, "cpuDuration");
1873     ASSERT_TRUE(res != 0);
1874     res = taskManager.GetTaskDuration(task->taskId_, "ioDuration");
1875     ASSERT_TRUE(res == 0);
1876 }
1877 
1878 HWTEST_F(NativeEngineTest, TaskpoolTest124, testing::ext::TestSize.Level0)
1879 {
1880     napi_env env = (napi_env)engine_;
1881     ExceptionScope scope(env);
1882     auto task = std::make_unique<Task>();
1883     task->taskId_ = reinterpret_cast<uint64_t>(task.get());
1884     task->SetHasDependency(true);
1885     auto res = task->CanForSequenceRunner(env);
1886     ASSERT_TRUE(res == false);
1887     task->TryClearHasDependency();
1888     res = task->CanForSequenceRunner(env);
1889     ASSERT_TRUE(res == true);
1890     task->taskType_ = TaskType::SEQRUNNER_TASK;
1891     res = task->CanForSequenceRunner(env);
1892     ASSERT_TRUE(res == false);
1893     task->taskType_ = TaskType::GROUP_COMMON_TASK;
1894     res = task->CanForSequenceRunner(env);
1895     ASSERT_TRUE(res == false);
1896     task->UpdatePeriodicTask();
1897     res = task->CanForSequenceRunner(env);
1898     ASSERT_TRUE(res == false);
1899 }
1900 
1901 HWTEST_F(NativeEngineTest, TaskpoolTest125, testing::ext::TestSize.Level0)
1902 {
1903     napi_env env = (napi_env)engine_;
1904     ExceptionScope scope(env);
1905     auto task = std::make_unique<Task>();
1906     task->ThrowNoDependencyError(env);
1907     napi_value exception = nullptr;
1908     napi_get_and_clear_last_exception(env, &exception);
1909     ASSERT_TRUE(exception!= nullptr);
1910     auto res = task->CanExecutePeriodically(env);
1911     ASSERT_TRUE(res == true);
1912     task->UpdatePeriodicTask();
1913     res = task->CanExecutePeriodically(env);
1914     ASSERT_TRUE(res == false);
1915 }
1916 
1917 HWTEST_F(NativeEngineTest, TaskpoolTest126, testing::ext::TestSize.Level0)
1918 {
1919     napi_env env = (napi_env)engine_;
1920     ExceptionScope scope(env);
1921     auto task = std::make_unique<Task>();
1922     auto res = task->CanForTaskGroup(env);
1923     ASSERT_TRUE(res == true);
1924     task->taskId_ = reinterpret_cast<uint64_t>(task.get());
1925     task->SetHasDependency(true);
1926     res = task->CanForTaskGroup(env);
1927     ASSERT_TRUE(res == false);
1928     task->taskType_ = TaskType::SEQRUNNER_TASK;
1929     res = task->CanForTaskGroup(env);
1930     ASSERT_TRUE(res == false);
1931     task->taskType_ = TaskType::GROUP_COMMON_TASK;
1932     res = task->CanForTaskGroup(env);
1933     ASSERT_TRUE(res == false);
1934     task->isLongTask_ = true;
1935     res = task->CanForTaskGroup(env);
1936     ASSERT_TRUE(res == false);
1937     task->UpdatePeriodicTask();
1938     res = task->CanForTaskGroup(env);
1939     ASSERT_TRUE(res == false);
1940 }
1941 
1942 HWTEST_F(NativeEngineTest, TaskpoolTest127, testing::ext::TestSize.Level0)
1943 {
1944     napi_env env = (napi_env)engine_;
1945     ExceptionScope scope(env);
1946     auto task = std::make_unique<Task>();
1947     auto res = task->CanExecute(env);
1948     task->taskType_ = TaskType::GROUP_COMMON_TASK;
1949     res = task->CanExecute(env);
1950     ASSERT_TRUE(res == false);
1951     task->taskType_ = TaskType::SEQRUNNER_TASK;
1952     res = task->CanExecute(env);
1953     ASSERT_TRUE(res == false);
1954     task->taskType_ = TaskType::COMMON_TASK;
1955     res = task->CanExecute(env);
1956     ASSERT_TRUE(res == true);
1957     task->SetHasDependency(true);
1958     res = task->CanExecute(env);
1959     ASSERT_TRUE(res == false);
1960     task->TryClearHasDependency();
1961     task->isLongTask_ = true;
1962     res = task->CanExecute(env);
1963     ASSERT_TRUE(res == false);
1964     task->UpdatePeriodicTask();
1965     res = task->CanExecute(env);
1966     ASSERT_TRUE(res == false);
1967 }
1968 
1969 HWTEST_F(NativeEngineTest, TaskpoolTest128, testing::ext::TestSize.Level0)
1970 {
1971     napi_env env = (napi_env)engine_;
1972     ExceptionScope scope(env);
1973     auto task = std::make_unique<Task>();
1974     auto res = task->CanExecuteDelayed(env);
1975     task->taskType_ = TaskType::GROUP_COMMON_TASK;
1976     res = task->CanExecuteDelayed(env);
1977     ASSERT_TRUE(res == false);
1978     task->taskType_ = TaskType::SEQRUNNER_TASK;
1979     res = task->CanExecuteDelayed(env);
1980     ASSERT_TRUE(res == false);
1981     task->taskType_ = TaskType::COMMON_TASK;
1982     res = task->CanExecuteDelayed(env);
1983     ASSERT_TRUE(res == true);
1984     task->isLongTask_ = true;
1985     res = task->CanExecute(env);
1986     ASSERT_TRUE(res == false);
1987     task->UpdatePeriodicTask();
1988     res = task->CanExecute(env);
1989     ASSERT_TRUE(res == false);
1990 }
1991 
1992 HWTEST_F(NativeEngineTest, TaskpoolTest129, testing::ext::TestSize.Level0)
1993 {
1994     napi_env env = (napi_env)engine_;
1995     ExceptionScope scope(env);
1996     SequenceRunner* seqRunner = new SequenceRunner();
1997     seqRunner->seqRunnerId_ = reinterpret_cast<uint64_t>(seqRunner);
1998     seqRunner->seqName_ = "seq01";
1999     void* data = static_cast<void*>(seqRunner);
2000     NativeEngineTest::SequenceRunnerDestructor(env, data);
2001 
2002     SequenceRunner* seqRunner2 = new SequenceRunner();
2003     seqRunner2->seqRunnerId_ = reinterpret_cast<uint64_t>(seqRunner2);
2004     seqRunner2->seqName_ = "seq02";
2005     seqRunner2->isGlobalRunner_ = true;
2006     seqRunner2->count_ = 0;
2007     void* data2 = static_cast<void*>(seqRunner2);
2008     NativeEngineTest::SequenceRunnerDestructor(env, data2);
2009 
2010     ASSERT_TRUE(true);
2011 }
2012 
2013 HWTEST_F(NativeEngineTest, TaskpoolTest130, testing::ext::TestSize.Level0)
2014 {
2015     napi_env env = (napi_env)engine_;
2016     ExceptionScope scope(env);
2017     TaskGroup* taskGroup = new TaskGroup();
2018     Task* task = new Task(env, TaskType::COMMON_TASK, "groupTask");
2019     uint64_t taskId = reinterpret_cast<uint64_t>(task);
2020     taskGroup->taskIds_.push_back(taskId);
2021     task->taskId_ = taskId;
2022     napi_reference_ref(env, task->taskRef_, nullptr);
2023     TaskManager &taskManager = TaskManager::GetInstance();
2024     taskManager.StoreTask(taskId, task);
2025     taskGroup->taskIds_.push_back(2);
2026 
2027     GroupInfo* groupInfo = new GroupInfo();
2028     taskGroup->currentGroupInfo_ = groupInfo;
2029 
2030     void* data = static_cast<void*>(taskGroup);
2031     NativeEngineTest::TaskGroupDestructor(env, data);
2032     ASSERT_TRUE(true);
2033 }
2034 
2035 HWTEST_F(NativeEngineTest, TaskpoolTest131, testing::ext::TestSize.Level0)
2036 {
2037     napi_env env = (napi_env)engine_;
2038     ExceptionScope scope(env);
2039     Task* task = new Task();
2040     uint64_t taskId = reinterpret_cast<uint64_t>(task);
2041     task->taskId_ = taskId;
2042     napi_value thisValue = NapiHelper::CreateObject(env);
2043     napi_ref ref = NapiHelper::CreateReference(env, thisValue, 0);
2044 
2045     CallbackInfo* cbInfo = new CallbackInfo(env, 1, ref, task);
2046     uv_async_t* req = new uv_async_t;
2047     req->data = cbInfo;
2048 
2049     TaskPool::ExecuteCallback(req);
2050     ASSERT_TRUE(true);
2051 
2052     Worker* worker = reinterpret_cast<Worker*>(NativeEngineTest::WorkerConstructor(env));
2053     void* args = nullptr;
2054     TaskResultInfo* resultInfo = new TaskResultInfo(env, env, taskId, args);
2055     worker->Enqueue(env, resultInfo);
2056     TaskResultInfo* resultInfo2 = nullptr;
2057     worker->Enqueue(env, resultInfo2);
2058 
2059     TaskManager &taskManager = TaskManager::GetInstance();
2060     taskManager.RegisterCallback(env, taskId, nullptr);
2061     cbInfo->worker = worker;
2062     TaskPool::ExecuteCallback(req);
2063     ASSERT_TRUE(true);
2064 }
2065 
2066 HWTEST_F(NativeEngineTest, TaskpoolTest132, testing::ext::TestSize.Level0)
2067 {
2068     napi_env env = (napi_env)engine_;
2069     ExceptionScope scope(env);
2070     Task* task = new Task();
2071     uint64_t taskId = reinterpret_cast<uint64_t>(task);
2072     task->taskId_ = taskId;
2073     napi_value thisValue = NapiHelper::CreateObject(env);
2074     napi_ref ref = NapiHelper::CreateReference(env, thisValue, 0);
2075 
2076     CallbackInfo* cbInfo = new CallbackInfo(env, 1, ref, task);
2077     uv_async_t* req = new uv_async_t;
2078     req->data = cbInfo;
2079 
2080     Worker* worker = reinterpret_cast<Worker*>(NativeEngineTest::WorkerConstructor(env));
2081     void* args = nullptr;
2082     TaskResultInfo* resultInfo = new TaskResultInfo(env, env, taskId, args);
2083     worker->Enqueue(env, resultInfo);
2084 
2085     TaskManager &taskManager = TaskManager::GetInstance();
__anon15dbeb740502(napi_env environment, napi_callback_info info) 2086     auto func = [](napi_env environment, napi_callback_info info) -> napi_value {
2087         return nullptr;
2088     };
2089     napi_value funValue = nullptr;
2090     napi_create_function(env, "testFunc", NAPI_AUTO_LENGTH, func, nullptr, &funValue);
2091     napi_value argv[] = {funValue};
2092     napi_ref callbackRef = NapiHelper::CreateReference(env, argv[0], 1);
2093     std::shared_ptr<CallbackInfo> callbackInfo = std::make_shared<CallbackInfo>(env, 1, callbackRef, task);
2094     taskManager.RegisterCallback(env, taskId, callbackInfo);
2095     cbInfo->worker = worker;
2096     TaskPool::ExecuteCallback(req);
2097     ASSERT_TRUE(true);
2098 }
2099 
2100 HWTEST_F(NativeEngineTest, TaskpoolTest133, testing::ext::TestSize.Level0)
2101 {
2102     napi_env env = (napi_env)engine_;
2103     ExceptionScope scope(env);
2104     Task* task = new Task();
2105     uint64_t taskId = reinterpret_cast<uint64_t>(task);
2106     task->taskId_ = taskId;
2107     napi_value thisValue = NapiHelper::CreateObject(env);
2108     napi_ref ref = NapiHelper::CreateReference(env, thisValue, 0);
2109 
2110     CallbackInfo* cbInfo = new CallbackInfo(env, 1, ref, task);
2111     uv_async_t* req = new uv_async_t;
2112     req->data = cbInfo;
2113 
2114     Worker* worker = reinterpret_cast<Worker*>(NativeEngineTest::WorkerConstructor(env));
2115     size_t argc = 1;
2116     napi_value argv[] = {nullptr};
2117     napi_create_uint32(env, 1, &argv[0]);
2118     napi_value argsArray;
2119     napi_create_array_with_length(env, argc, &argsArray);
2120     for (size_t i = 0; i < argc; i++) {
2121         napi_set_element(env, argsArray, i, argv[i]);
2122     }
2123     napi_value undefined = NapiHelper::GetUndefinedValue(env);
2124     void* serializationArgs = nullptr;
2125     napi_serialize_inner(env, argsArray, undefined, undefined, true, false, &serializationArgs);
2126     TaskResultInfo* resultInfo = new TaskResultInfo(env, env, taskId, serializationArgs);
2127     worker->Enqueue(env, resultInfo);
2128 
2129     TaskManager &taskManager = TaskManager::GetInstance();
__anon15dbeb740602(napi_env environment, napi_callback_info info) 2130     auto func = [](napi_env environment, napi_callback_info info) -> napi_value {
2131         return nullptr;
2132     };
2133     napi_value funValue = nullptr;
2134     napi_create_function(env, "testFunc", NAPI_AUTO_LENGTH, func, nullptr, &funValue);
2135     napi_value argv1[] = {funValue};
2136     napi_ref callbackRef = NapiHelper::CreateReference(env, argv1[0], 1);
2137     std::shared_ptr<CallbackInfo> callbackInfo = std::make_shared<CallbackInfo>(env, 1, callbackRef, task);
2138     taskManager.RegisterCallback(env, taskId, callbackInfo);
2139     cbInfo->worker = worker;
2140     TaskPool::ExecuteCallback(req);
2141     ASSERT_TRUE(true);
2142 }
2143 
2144 HWTEST_F(NativeEngineTest, TaskpoolTest134, testing::ext::TestSize.Level0)
2145 {
2146     napi_env env = (napi_env)engine_;
2147     ExceptionScope scope(env);
2148     Task* task = new Task();
2149     uint64_t taskId = reinterpret_cast<uint64_t>(task);
2150     task->taskId_ = taskId;
2151     napi_value thisValue = NapiHelper::CreateObject(env);
2152     napi_ref ref = NapiHelper::CreateReference(env, thisValue, 0);
2153 
2154     CallbackInfo* cbInfo = new CallbackInfo(env, 1, ref, task);
2155     TaskPool::ExecuteCallbackTask(cbInfo);
2156     ASSERT_TRUE(true);
2157 
2158     Worker* worker = reinterpret_cast<Worker*>(NativeEngineTest::WorkerConstructor(env));
2159     void* args = nullptr;
2160     TaskResultInfo* resultInfo = new TaskResultInfo(env, env, taskId, args);
2161     worker->Enqueue(env, resultInfo);
2162     cbInfo->worker = worker;
2163     TaskPool::ExecuteCallbackTask(cbInfo);
2164     ASSERT_TRUE(true);
2165 }
2166 
2167 HWTEST_F(NativeEngineTest, TaskpoolTest135, testing::ext::TestSize.Level0)
2168 {
2169     napi_env env = (napi_env)engine_;
2170     ExceptionScope scope(env);
2171     napi_value argv[] = {};
2172     napi_value result = NativeEngineTest::TerminateTask(env, argv, 0);
2173     ASSERT_TRUE(result == nullptr);
2174     napi_value exception = nullptr;
2175     napi_get_and_clear_last_exception(env, &exception);
2176 
2177     napi_value thisValue = NapiHelper::CreateObject(env);
2178     napi_value argv1[] = {thisValue};
2179     result = NativeEngineTest::TerminateTask(env, argv1, 1);
2180     ASSERT_TRUE(result == nullptr);
2181     exception = nullptr;
2182     napi_get_and_clear_last_exception(env, &exception);
2183 
2184     size_t argc = 0;
2185     napi_value func = nullptr;
2186     napi_create_string_utf8(env, "testLongFunc", NAPI_AUTO_LENGTH, &func);
2187     napi_value* args = new napi_value[1];
2188     ObjectScope<napi_value> objScope(args, true);
2189     napi_value taskName = NapiHelper::CreateEmptyString(env);
2190     Task* task = Task::GenerateTask(env, thisValue, func, taskName, args, argc);
2191     task->isLongTask_ = true;
2192     TaskManager &taskManager = TaskManager::GetInstance();
2193     taskManager.StoreTask(task->taskId_, task);
2194     napi_value argv2[] = {thisValue};
2195     result = NativeEngineTest::TerminateTask(env, argv2, 1);
2196     ASSERT_TRUE(result != nullptr);
2197 }
2198 
2199 HWTEST_F(NativeEngineTest, TaskpoolTest136, testing::ext::TestSize.Level0)
2200 {
2201     napi_env env = (napi_env)engine_;
2202     ExceptionScope scope(env);
2203     napi_value argv[] = {};
2204     napi_value result = NativeEngineTest::Execute(env, argv, 0);
2205     ASSERT_TRUE(result == nullptr);
2206     napi_value exception = nullptr;
2207     napi_get_and_clear_last_exception(env, &exception);
2208 
2209     napi_value thisValue = NapiHelper::CreateObject(env);
2210     napi_value argv1[] = {thisValue};
2211     result = NativeEngineTest::Execute(env, argv1, 1);
2212     ASSERT_TRUE(result == nullptr);
2213     exception = nullptr;
2214     napi_get_and_clear_last_exception(env, &exception);
2215 
2216     thisValue = CreateTaskObject(env);
2217     napi_value argv2[] = {thisValue};
2218     result = NativeEngineTest::Execute(env, argv2, 1);
2219     ASSERT_TRUE(result != nullptr);
2220     exception = nullptr;
2221     napi_get_and_clear_last_exception(env, &exception);
2222 
2223     napi_create_string_utf8(env, "test", NAPI_AUTO_LENGTH, &argv2[0]);
2224     result = NativeEngineTest::Execute(env, argv2, 1);
2225     ASSERT_TRUE(result == nullptr);
2226     exception = nullptr;
2227     napi_get_and_clear_last_exception(env, &exception);
2228 
2229     thisValue = CreateTaskObject(env);
2230     napi_value argv3[2] = {};
2231     argv3[0] = thisValue;
2232     napi_create_string_utf8(env, "test", NAPI_AUTO_LENGTH, &argv[1]);
2233     result = NativeEngineTest::Execute(env, argv3, 2);
2234     ASSERT_TRUE(result == nullptr);
2235 }
2236 
2237 HWTEST_F(NativeEngineTest, TaskpoolTest137, testing::ext::TestSize.Level0)
2238 {
2239     napi_env env = (napi_env)engine_;
2240     ExceptionScope scope(env);
2241     napi_value thisValue = CreateTaskObject(env);
2242     napi_value argv[2] = {};
2243     argv[0] = thisValue;
2244     napi_create_uint32(env, 1, &argv[1]);
2245     napi_value result = NativeEngineTest::Execute(env, argv, 2);
2246     ASSERT_TRUE(result != nullptr);
2247 
2248     thisValue = CreateTaskObject(env, TaskType::SEQRUNNER_TASK);
2249     napi_value argv1[2] = {};
2250     argv1[0] = thisValue;
2251     napi_create_uint32(env, 1, &argv[1]);
2252     result = NativeEngineTest::Execute(env, argv1, 2);
2253     ASSERT_TRUE(result == nullptr);
2254     napi_value exception = nullptr;
2255     napi_get_and_clear_last_exception(env, &exception);
2256 
2257     napi_value func = nullptr;
2258     GetSendableFunction(env, "foo", func);
2259     napi_value argv2[] = {func};
2260     result = NativeEngineTest::Execute(env, argv2, 1);
2261     ASSERT_TRUE(result != nullptr);
2262 
2263     thisValue = CreateTaskObject(env);
2264     napi_value argv3[2] = {};
2265     argv3[0] = thisValue;
2266     napi_create_uint32(env, 5, &argv3[1]);
2267     result = NativeEngineTest::Execute(env, argv3, 2);
2268     ASSERT_TRUE(result == nullptr);
2269 }
2270 
2271 HWTEST_F(NativeEngineTest, TaskpoolTest138, testing::ext::TestSize.Level0)
2272 {
2273     napi_env env = (napi_env)engine_;
2274     ExceptionScope scope(env);
2275     size_t delayTime = 1000;
2276 
2277     napi_value argv[] = {nullptr};
2278     napi_value result = NativeEngineTest::ExecuteDelayed(env, argv, 1);
2279     ASSERT_TRUE(result == nullptr);
2280     napi_value exception = nullptr;
2281     napi_get_and_clear_last_exception(env, &exception);
2282 
2283     napi_value func = nullptr;
2284     GetSendableFunction(env, "foo", func);
2285     napi_value num = nullptr;
2286     napi_create_uint32(env, delayTime, &num);
2287     napi_value argv1[] = { func, num };
2288     result = NativeEngineTest::ExecuteDelayed(env, argv1, 2);
2289     ASSERT_TRUE(result == nullptr);
2290     exception = nullptr;
2291     napi_get_and_clear_last_exception(env, &exception);
2292 
2293     napi_value obj = NapiHelper::CreateObject(env);
2294     num = nullptr;
2295     napi_create_uint32(env, -100, &num);
2296     napi_value argv2[] = { num, obj };
2297     result = NativeEngineTest::ExecuteDelayed(env, argv2, 2);
2298     ASSERT_TRUE(result == nullptr);
2299     exception = nullptr;
2300     napi_get_and_clear_last_exception(env, &exception);
2301 
2302     num = nullptr;
2303     napi_create_uint32(env, delayTime, &num);
2304     napi_value argv3[] = { num, obj, obj };
2305     result = NativeEngineTest::ExecuteDelayed(env, argv3, 3);
2306     ASSERT_TRUE(result == nullptr);
2307     exception = nullptr;
2308     napi_get_and_clear_last_exception(env, &exception);
2309 
2310     napi_value argv4[] = { num, func};
2311     result = NativeEngineTest::ExecuteDelayed(env, argv4, 2);
2312     ASSERT_TRUE(result == nullptr);
2313 }
2314 
2315 HWTEST_F(NativeEngineTest, TaskpoolTest139, testing::ext::TestSize.Level0)
2316 {
2317     napi_env env = (napi_env)engine_;
2318     ExceptionScope scope(env);
2319     size_t delayTime = 1000;
2320     napi_value result = nullptr;
2321     napi_value num = nullptr;
2322     napi_value priority = nullptr;
2323     napi_value exception = nullptr;
2324 
2325     napi_value obj = NapiHelper::CreateObject(env);
2326     napi_create_uint32(env, delayTime, &num);
2327     napi_create_uint32(env, 5, &priority);
2328     napi_value argv[] = { num, obj, priority };
2329     result = NativeEngineTest::ExecuteDelayed(env, argv, 3);
2330     ASSERT_TRUE(result == nullptr);
2331     exception = nullptr;
2332     napi_get_and_clear_last_exception(env, &exception);
2333 
2334     obj = CreateNullTaskObject(env);
2335     napi_create_uint32(env, 1, &priority);
2336     napi_value argv2[] = { num, obj, priority };
2337     result = NativeEngineTest::ExecuteDelayed(env, argv2, 3);
2338     ASSERT_TRUE(result == nullptr);
2339     exception = nullptr;
2340     napi_get_and_clear_last_exception(env, &exception);
2341 
2342     obj = CreateTaskObject(env, TaskType::GROUP_COMMON_TASK);
2343     napi_value argv3[] = { num, obj, priority };
2344     result = NativeEngineTest::ExecuteDelayed(env, argv3, 3);
2345     exception = nullptr;
2346     napi_get_and_clear_last_exception(env, &exception);
2347     ASSERT_TRUE(result == nullptr);
2348 
2349     obj = CreateTaskObject(env, TaskType::TASK, ExecuteState::CANCELED);
2350     napi_value argv4[] = { num, obj, priority };
2351     result = NativeEngineTest::ExecuteDelayed(env, argv4, 3);
2352     ASSERT_TRUE(result != nullptr);
2353 }
2354 
2355 HWTEST_F(NativeEngineTest, TaskpoolTest140, testing::ext::TestSize.Level0)
2356 {
2357     napi_env env = (napi_env)engine_;
2358     ExceptionScope scope(env);
2359     TaskManager &taskManager = TaskManager::GetInstance();
2360     napi_value exception = nullptr;
2361     uv_loop_t* loop = NapiHelper::GetLibUV(env);
2362     uv_update_time(loop);
2363     uv_timer_t* handle = new uv_timer_t;
2364     uv_timer_init(loop, handle);
2365     TaskMessage *taskMessage = new TaskMessage();
__anon15dbeb740702(napi_env environment, napi_callback_info info) 2366     auto func = [](napi_env environment, napi_callback_info info) -> napi_value {
2367         return nullptr;
2368     };
2369     size_t argc = 1;
2370     napi_value funcValue = nullptr;
2371     napi_create_function(env, "testFunc", NAPI_AUTO_LENGTH, func, nullptr, &funcValue);
2372     napi_value* args = new napi_value[argc];
2373     ObjectScope<napi_value> objScope(args, true);
2374     napi_value taskName = NapiHelper::CreateEmptyString(env);
2375     napi_value obj = NapiHelper::CreateObject(env);
2376     Task* task = Task::GenerateTask(env, obj, funcValue, taskName, args, argc);
2377 
2378     taskMessage->taskId = task->taskId_;
2379     handle->data = taskMessage;
2380     taskManager.StoreTask(task->taskId_, task);
2381     NativeEngineTest::DelayTask(handle);
2382     ASSERT_TRUE(true);
2383 }
2384 
2385 HWTEST_F(NativeEngineTest, TaskpoolTest141, testing::ext::TestSize.Level0)
2386 {
2387     napi_env env = (napi_env)engine_;
2388     ExceptionScope scope(env);
2389     napi_value exception = nullptr;
2390     napi_value thisVar = NapiHelper::CreateObject(env);
2391     napi_value taskGroupResult = GeneratorTaskGroup(env, thisVar);
2392     napi_value napiGroupId = NapiHelper::GetNameProperty(env, taskGroupResult, "groupId");
2393     uint64_t groupId = NapiHelper::GetUint64Value(env, napiGroupId);
2394 
2395     TaskGroupManager& taskGroupManager = TaskGroupManager::GetInstance();
2396     TaskGroup* group = new TaskGroup();
2397     group->groupId_ = groupId;
2398     taskGroupManager.StoreTaskGroup(groupId, group);
2399     napi_value value = NapiHelper::CreateUint64(env, groupId);
2400     napi_ref reference = NapiHelper::CreateReference(env, value, 0);
2401     taskGroupManager.AddTask(groupId, reference, 1);
2402     napi_value result = NativeEngineTest::ExecuteGroup(env, taskGroupResult);
2403     ASSERT_TRUE(result == nullptr);
2404 }
2405 
2406 HWTEST_F(NativeEngineTest, TaskpoolTest142, testing::ext::TestSize.Level0)
2407 {
2408     napi_env env = (napi_env)engine_;
2409     ExceptionScope scope(env);
2410     napi_value exception = nullptr;
2411     napi_value thisVar = NapiHelper::CreateObject(env);
2412     napi_value taskGroupResult = GeneratorTaskGroup(env, thisVar);
2413     napi_value napiGroupId = NapiHelper::GetNameProperty(env, taskGroupResult, "groupId");
2414     uint64_t groupId = NapiHelper::GetUint64Value(env, napiGroupId);
2415 
2416     TaskGroupManager& taskGroupManager = TaskGroupManager::GetInstance();
2417     TaskGroup* group = new TaskGroup();
2418     group->groupId_ = groupId;
2419     taskGroupManager.StoreTaskGroup(groupId, group);
2420     Task* task = new Task();
2421     task->taskType_ = TaskType::GROUP_COMMON_TASK;
2422     task->groupId_ = groupId;
2423     task->taskId_ = reinterpret_cast<uint64_t>(task);
2424     napi_reference_ref(env, task->taskRef_, nullptr);
2425     napi_value thisValue = NapiHelper::CreateObject(env);
2426     napi_wrap(
2427         env, thisValue, task,
__anon15dbeb740802(napi_env environment, void* data, void* hint) 2428         [](napi_env environment, void* data, void* hint) {
2429             auto obj = reinterpret_cast<Task*>(data);
2430             if (obj != nullptr) {
2431                 delete obj;
2432             }
2433         }, nullptr, nullptr);
2434     napi_ref ref = NapiHelper::CreateReference(env, thisValue, 1);
2435     taskGroupManager.AddTask(groupId, ref, task->taskId_);
2436     napi_value result = NativeEngineTest::ExecuteGroup(env, taskGroupResult);
2437     ASSERT_TRUE(result != nullptr);
2438 }
2439 
2440 HWTEST_F(NativeEngineTest, TaskpoolTest143, testing::ext::TestSize.Level0)
2441 {
2442     napi_env env = (napi_env)engine_;
2443     ExceptionScope scope(env);
2444     napi_value exception = nullptr;
2445     napi_value thisVar = NapiHelper::CreateObject(env);
2446     napi_value taskGroupResult = GeneratorTaskGroup(env, thisVar);
2447     napi_value napiGroupId = NapiHelper::GetNameProperty(env, taskGroupResult, "groupId");
2448     uint64_t groupId = NapiHelper::GetUint64Value(env, napiGroupId);
2449 
2450     TaskGroupManager& taskGroupManager = TaskGroupManager::GetInstance();
2451     TaskGroup* group = taskGroupManager.GetTaskGroup(groupId);
2452     GroupInfo* groupInfo = new GroupInfo();
2453     groupInfo->priority = Priority::DEFAULT;
2454     group->currentGroupInfo_ = groupInfo;
2455     taskGroupManager.StoreTaskGroup(groupId, group);
2456     napi_value result = NativeEngineTest::ExecuteGroup(env, taskGroupResult);
2457     ASSERT_TRUE(result != nullptr);
2458 }
2459 
2460 HWTEST_F(NativeEngineTest, TaskpoolTest144, testing::ext::TestSize.Level0)
2461 {
2462     napi_env env = (napi_env)engine_;
2463     ExceptionScope scope(env);
2464     size_t delayTime = 1000;
2465 
2466     napi_value argv[] = {nullptr};
2467     napi_value result = NativeEngineTest::ExecutePeriodically(env, argv, 1);
2468     ASSERT_TRUE(result == nullptr);
2469     napi_value exception = nullptr;
2470     napi_get_and_clear_last_exception(env, &exception);
2471 
2472     napi_value func = nullptr;
2473     GetSendableFunction(env, "foo", func);
2474     napi_value num = nullptr;
2475     napi_create_uint32(env, delayTime, &num);
2476     napi_value argv1[] = { func, num };
2477     result = NativeEngineTest::ExecutePeriodically(env, argv1, 2);
2478     ASSERT_TRUE(result == nullptr);
2479     exception = nullptr;
2480     napi_get_and_clear_last_exception(env, &exception);
2481 
2482     napi_value obj = NapiHelper::CreateObject(env);
2483     num = nullptr;
2484     napi_create_uint32(env, -100, &num);
2485     napi_value argv2[] = { num, obj };
2486     result = NativeEngineTest::ExecutePeriodically(env, argv2, 2);
2487     ASSERT_TRUE(result == nullptr);
2488     exception = nullptr;
2489     napi_get_and_clear_last_exception(env, &exception);
2490 
2491     num = nullptr;
2492     napi_create_uint32(env, delayTime, &num);
2493     napi_value argv3[] = { num, obj, obj };
2494     result = NativeEngineTest::ExecutePeriodically(env, argv3, 3);
2495     ASSERT_TRUE(result == nullptr);
2496     exception = nullptr;
2497     napi_get_and_clear_last_exception(env, &exception);
2498 
2499     napi_value argv4[] = { num, num };
2500     result = NativeEngineTest::ExecutePeriodically(env, argv4, 2);
2501     ASSERT_TRUE(result == nullptr);
2502 }
2503 
2504 HWTEST_F(NativeEngineTest, TaskpoolTest145, testing::ext::TestSize.Level0)
2505 {
2506     napi_env env = (napi_env)engine_;
2507     ExceptionScope scope(env);
2508     size_t delayTime = 1000;
2509     napi_value result = nullptr;
2510     napi_value num = nullptr;
2511     napi_value priority = nullptr;
2512     napi_value exception = nullptr;
2513 
2514     napi_value obj = NapiHelper::CreateObject(env);
2515     napi_create_uint32(env, delayTime, &num);
2516     napi_create_uint32(env, 5, &priority);
2517     napi_value argv[] = { num, obj, priority };
2518     result = NativeEngineTest::ExecutePeriodically(env, argv, 3);
2519     ASSERT_TRUE(result == nullptr);
2520     exception = nullptr;
2521     napi_get_and_clear_last_exception(env, &exception);
2522 
2523     obj = CreateNullTaskObject(env);
2524     napi_create_uint32(env, 1, &priority);
2525     napi_value argv2[] = { num, obj, priority };
2526     result = NativeEngineTest::ExecutePeriodically(env, argv2, 3);
2527     ASSERT_TRUE(result == nullptr);
2528     exception = nullptr;
2529     napi_get_and_clear_last_exception(env, &exception);
2530 
2531     obj = CreateTaskObject(env, TaskType::GROUP_COMMON_TASK);
2532     napi_value argv3[] = { num, obj, priority };
2533     result = NativeEngineTest::ExecutePeriodically(env, argv3, 3);
2534     exception = nullptr;
2535     napi_get_and_clear_last_exception(env, &exception);
2536     ASSERT_TRUE(result == nullptr);
2537 
2538     obj = CreateTaskObject(env, TaskType::TASK);
2539     napi_value argv4[] = { num, obj, priority };
2540     result = NativeEngineTest::ExecutePeriodically(env, argv4, 3);
2541     ASSERT_TRUE(result == nullptr);
2542 }
2543 
2544 HWTEST_F(NativeEngineTest, TaskpoolTest146, testing::ext::TestSize.Level0)
2545 {
2546     napi_env env = (napi_env)engine_;
2547     ExceptionScope scope(env);
2548     napi_value global;
2549     napi_get_global(env, &global);
2550     auto task = GeneratorTask(env, global);
2551     size_t delayTime = 1000;
2552     napi_value result = nullptr;
2553     napi_value num = nullptr;
2554     napi_value priority = nullptr;
2555     napi_create_uint32(env, delayTime, &num);
2556     napi_create_uint32(env, 1, &priority);
2557     napi_value argv[] = { num, global, priority };
2558     result = NativeEngineTest::ExecutePeriodically(env, argv, 3);
2559     ASSERT_TRUE(result != nullptr);
2560 }
2561 
2562 HWTEST_F(NativeEngineTest, TaskpoolTest147, testing::ext::TestSize.Level0)
2563 {
2564     napi_env env = (napi_env)engine_;
2565     uv_timer_t* handle = new uv_timer_t;
2566 
2567     handle->data = nullptr;
2568     NativeEngineTest::PeriodicTaskCallback(handle);
2569     ASSERT_TRUE(true);
2570     Task* task = new Task();
2571     handle->data = task;
2572     NativeEngineTest::PeriodicTaskCallback(handle);
2573     ASSERT_TRUE(true);
2574 
2575     task->isPeriodicTask_ = true;
2576     handle->data = task;
2577     NativeEngineTest::PeriodicTaskCallback(handle);
2578     ASSERT_TRUE(true);
2579 
2580     task->taskState_ = ExecuteState::CANCELED;
2581     handle->data = task;
2582     NativeEngineTest::PeriodicTaskCallback(handle);
2583     ASSERT_TRUE(true);
2584 }
2585 
2586 HWTEST_F(NativeEngineTest, TaskpoolTest148, testing::ext::TestSize.Level0)
2587 {
2588     napi_env env = (napi_env)engine_;
2589     uv_timer_t* handle = new uv_timer_t;
2590 
2591     Task* task = new Task();
2592     uint64_t taskId = reinterpret_cast<uint64_t>(task);
2593     task->taskId_ = taskId;
2594     task->taskType_ = TaskType::GROUP_COMMON_TASK;
2595     napi_value num = nullptr;
2596     napi_create_uint32(env, 1, &num);
2597     napi_ref callbackRef = Helper::NapiHelper::CreateReference(env, num, 1);
2598     task->onExecutionFailedCallBackInfo_ = new ListenerCallBackInfo(env, callbackRef, nullptr);
2599     handle->data = task;
2600     napi_value res = nullptr;
2601     NativeEngineTest::UpdateGroupInfoByResult(env, handle, res, true);
2602     ASSERT_TRUE(true);
2603 
2604     TaskGroupManager& taskGroupManager = TaskGroupManager::GetInstance();
2605     TaskGroup* group = new TaskGroup();
2606     uint64_t groupId = reinterpret_cast<uint64_t>(group);
2607     group->groupId_ = groupId;
2608     task->groupId_ = groupId;
2609     taskGroupManager.StoreTaskGroup(groupId, group);
2610     NativeEngineTest::UpdateGroupInfoByResult(env, handle, res, true);
2611     ASSERT_TRUE(true);
2612 
2613     group->taskIds_.push_back(taskId);
2614     GroupInfo* groupInfo = new GroupInfo();
2615     napi_value resArr;
2616     napi_create_array_with_length(env, group->taskIds_.size(), &resArr);
2617     napi_ref arrRef = NapiHelper::CreateReference(env, resArr, 1);
2618     groupInfo->resArr = arrRef;
2619     NapiHelper::CreatePromise(env, &groupInfo->deferred);
2620     group->currentGroupInfo_ = groupInfo;
2621     taskGroupManager.StoreTaskGroup(groupId, group);
2622     NativeEngineTest::UpdateGroupInfoByResult(env, handle, res, false);
2623     ASSERT_TRUE(true);
2624 }
2625 
2626 HWTEST_F(NativeEngineTest, TaskpoolTest149, testing::ext::TestSize.Level0)
2627 {
2628     napi_env env = (napi_env)engine_;
2629     uv_timer_t* handle = new uv_timer_t;
2630     TaskGroupManager& taskGroupManager = TaskGroupManager::GetInstance();
2631     TaskManager& taskManager = TaskManager::GetInstance();
2632 
2633     TaskGroup* group = new TaskGroup();
2634     uint64_t groupId = reinterpret_cast<uint64_t>(group);
2635     group->groupId_ = groupId;
2636     Task* task = new Task();
2637     uint64_t taskId = reinterpret_cast<uint64_t>(task);
2638     task->taskId_ = taskId;
2639     task->groupId_ = groupId;
2640     napi_value num = nullptr;
2641     napi_create_uint32(env, 1, &num);
2642     napi_ref callbackRef = Helper::NapiHelper::CreateReference(env, num, 1);
2643     task->onExecutionSucceededCallBackInfo_ = new ListenerCallBackInfo(env, callbackRef, nullptr);
2644     group->taskIds_.push_back(taskId);
2645     taskManager.StoreTask(taskId, task);
2646     handle->data = task;
2647 
2648     GroupInfo* groupInfo = new GroupInfo();
2649     groupInfo->priority = Priority::DEFAULT;
2650     napi_value resArr;
2651     napi_create_array_with_length(env, group->taskIds_.size(), &resArr);
2652     napi_ref arrRef = NapiHelper::CreateReference(env, resArr, 1);
2653     groupInfo->resArr = arrRef;
2654     NapiHelper::CreatePromise(env, &groupInfo->deferred);
2655     group->currentGroupInfo_ = groupInfo;
2656 
2657     taskGroupManager.StoreTaskGroup(groupId, group);
2658     napi_value value = NapiHelper::CreateUint64(env, groupId);
2659     napi_ref reference = NapiHelper::CreateReference(env, value, 0);
2660     taskGroupManager.AddTask(groupId, reference, taskId);
2661 
2662     napi_value res = nullptr;
2663     napi_create_uint32(env, 1, &res);
2664     NativeEngineTest::UpdateGroupInfoByResult(env, handle, res, true);
2665     ASSERT_TRUE(true);
2666 }
2667 
2668 HWTEST_F(NativeEngineTest, TaskpoolTest150, testing::ext::TestSize.Level0)
2669 {
2670     napi_env env = (napi_env)engine_;
2671     NativeEngineTest::TryTriggerExpand();
2672     NativeEngineTest::CheckForBlockedWorkers(env);
2673     NativeEngineTest::TriggerShrink(env);
2674     NativeEngineTest::NotifyShrink(env);
2675     NativeEngineTest::TryExpand(env);
2676     NativeEngineTest::CancelTask(env);
2677     NativeEngineTest::NotifyWorkerIdle(env);
2678     NativeEngineTest::EnqueueTaskId(env);
2679     NativeEngineTest::GetTaskByPriority(env);
2680     NativeEngineTest::RestoreWorker(env);
2681     ASSERT_TRUE(true);
2682 }
2683 
2684 HWTEST_F(NativeEngineTest, TaskpoolTest151, testing::ext::TestSize.Level0)
2685 {
2686     napi_env env = (napi_env)engine_;
2687     ExceptionScope scope(env);
2688     napi_value argv[] = {nullptr};
2689     std::string func = "TaskGroupConstructor";
2690     napi_value callback = nullptr;
2691     napi_value taskGroupResult = nullptr;
2692     napi_create_function(env, func.c_str(), func.size(), TaskGroup::TaskGroupConstructor, nullptr, &callback);
2693     napi_call_function(env, nullptr, callback, 0, argv, &taskGroupResult);
2694 
2695     func = "AddTask";
2696     napi_value cb = nullptr;
2697     napi_value result = nullptr;
2698 
2699     napi_create_function(env, func.c_str(), func.size(), TaskGroup::AddTask, nullptr, &cb);
2700     napi_value napiGroupId = NapiHelper::GetNameProperty(env, taskGroupResult, "groupId");
2701     uint64_t groupId = NapiHelper::GetUint64Value(env, napiGroupId);
2702     TaskGroupManager& taskGroupManager = TaskGroupManager::GetInstance();
2703     TaskGroup* group = new TaskGroup();
2704     group->groupId_ = groupId;
2705     group->groupState_ = ExecuteState::RUNNING;
2706     taskGroupManager.StoreTaskGroup(groupId, group);
2707     napi_value argv1[] = {taskGroupResult};
2708     napi_call_function(env, nullptr, cb, 1, argv1, &result);
2709     ASSERT_TRUE(result == nullptr);
2710 }
2711 
2712 HWTEST_F(NativeEngineTest, TaskpoolTest152, testing::ext::TestSize.Level0)
2713 {
2714     napi_env env = (napi_env)engine_;
2715     TaskGroupManager& taskGroupManager = TaskGroupManager::GetInstance();
2716     TaskGroup* taskGroup = new TaskGroup();
2717     uint64_t groupId = reinterpret_cast<uint64_t>(taskGroup);
2718     taskGroup->groupId_ = groupId;
2719     taskGroupManager.StoreTaskGroup(groupId, taskGroup);
2720 
2721     Task* task = new Task();
2722     task->taskType_ = TaskType::COMMON_TASK;
2723     task->groupId_ = groupId;
2724     task->taskId_ = reinterpret_cast<uint64_t>(task);
2725     napi_reference_ref(env, task->taskRef_, nullptr);
2726     napi_value thisValue = NapiHelper::CreateObject(env);
2727     napi_wrap(
2728         env, thisValue, task,
__anon15dbeb740902(napi_env environment, void* data, void* hint) 2729         [](napi_env environment, void* data, void* hint) {
2730             auto obj = reinterpret_cast<Task*>(data);
2731             if (obj != nullptr) {
2732                 delete obj;
2733             }
2734         }, nullptr, nullptr);
2735     napi_ref ref = NapiHelper::CreateReference(env, thisValue, 1);
2736     taskGroupManager.AddTask(groupId, nullptr, task->taskId_);
2737 
2738     GroupInfo* groupInfo = new GroupInfo();
2739     groupInfo->priority = Priority::DEFAULT;
2740     taskGroup->pendingGroupInfos_.push_back(groupInfo);
2741     taskGroup->NotifyGroupTask(env);
2742     ASSERT_TRUE(taskGroup->pendingGroupInfos_.empty());
2743 }
2744 
2745 HWTEST_F(NativeEngineTest, TaskpoolTest153, testing::ext::TestSize.Level0)
2746 {
2747     napi_env env = (napi_env)engine_;
2748     TaskGroupManager& taskGroupManager = TaskGroupManager::GetInstance();
2749     TaskGroup* taskGroup = new TaskGroup();
2750     uint64_t groupId = reinterpret_cast<uint64_t>(taskGroup);
2751     taskGroup->groupId_ = groupId;
2752     taskGroupManager.StoreTaskGroup(groupId, taskGroup);
2753 
2754     Task* task = new Task();
2755     task->taskType_ = TaskType::GROUP_COMMON_TASK;
2756     task->groupId_ = groupId;
2757     task->taskId_ = reinterpret_cast<uint64_t>(task);
2758     napi_reference_ref(env, task->taskRef_, nullptr);
2759     napi_value thisValue = NapiHelper::CreateObject(env);
2760     napi_wrap(
2761         env, thisValue, task,
__anon15dbeb740a02(napi_env environment, void* data, void* hint) 2762         [](napi_env environment, void* data, void* hint) {
2763             auto obj = reinterpret_cast<Task*>(data);
2764             if (obj != nullptr) {
2765                 delete obj;
2766             }
2767         }, nullptr, nullptr);
2768     napi_ref ref = NapiHelper::CreateReference(env, thisValue, 1);
2769     taskGroupManager.AddTask(groupId, ref, task->taskId_);
2770 
2771     GroupInfo* groupInfo = new GroupInfo();
2772     groupInfo->priority = Priority::DEFAULT;
2773     taskGroup->pendingGroupInfos_.push_back(groupInfo);
2774     taskGroup->NotifyGroupTask(env);
2775     ASSERT_TRUE(taskGroup->pendingGroupInfos_.empty());
2776 }
2777 
2778 HWTEST_F(NativeEngineTest, TaskpoolTest154, testing::ext::TestSize.Level0)
2779 {
2780     napi_env env = (napi_env)engine_;
2781     Task* task = new Task();
2782     task->taskType_ = TaskType::GROUP_COMMON_TASK;
2783     task->taskId_ = reinterpret_cast<uint64_t>(task);
2784     napi_value args[2] = {nullptr};
2785     napi_create_string_utf8(env, "generate", NAPI_AUTO_LENGTH, &args[0]);
2786     napi_value obj;
2787     napi_create_object(env, &obj);
2788     args[1] = obj;
2789     task = task->GenerateFunctionTask(env, nullptr, args, 2, TaskType::GROUP_FUNCTION_TASK);
2790     napi_value exception = nullptr;
2791     napi_get_and_clear_last_exception(env, &exception);
2792     ASSERT_TRUE(exception != nullptr);
2793 }
2794 
2795 HWTEST_F(NativeEngineTest, TaskpoolTest155, testing::ext::TestSize.Level0)
2796 {
2797     napi_env env = (napi_env)engine_;
2798     Task* task = new Task();
2799     napi_value result = CreateTaskObject(env);
2800     std::string func = "func";
2801     std::string name = "Task";
2802     napi_value funcValue = nullptr;
2803     napi_value nameValue = nullptr;
2804     napi_create_string_utf8(env, name.c_str(), name.length(), &nameValue);
2805     napi_create_string_utf8(env, func.c_str(), func.length(), &funcValue);
2806     napi_value undefined = nullptr;
2807     napi_get_undefined(env, &undefined);
2808     napi_set_named_property(env, result, ARGUMENTS_STR, nameValue);
2809 
2810     napi_set_named_property(env, result, FUNCTION_STR, funcValue);
2811     napi_set_named_property(env, result, NAME, nameValue);
2812     napi_value trueVal = NapiHelper::CreateBooleanValue(env, true);
2813     napi_set_named_property(env, result, DEFAULT_TRANSFER_STR, trueVal);
2814     napi_set_named_property(env, result, DEFAULT_CLONE_SENDABLE_STR, trueVal);
2815 
2816     napi_set_named_property(env, result, TRANSFERLIST_STR, nameValue);
2817     napi_set_named_property(env, result, TRANSFERLIST_STR, nameValue);
2818     TaskInfo* info = task->GetTaskInfo(env, result, Priority::DEFAULT);
2819     ASSERT_TRUE(info == nullptr);
2820     delete task;
2821 }
2822 
2823 HWTEST_F(NativeEngineTest, TaskpoolTest156, testing::ext::TestSize.Level0)
2824 {
2825     napi_env env = (napi_env)engine_;
2826     napi_value global = NapiHelper::GetGlobalObject(env);
2827     napi_value thisValue = CreateTaskObject(env);
2828     Task* task = nullptr;
2829     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
2830     napi_value undefined = NapiHelper::GetUndefinedValue(env);
2831     napi_status status = napi_set_named_property(env, thisValue, CLONE_LIST_STR, undefined);
2832     napi_value array;
2833     napi_create_array_with_length(env, 1, &array);
2834 
2835     napi_value argv[] = { array };
2836     std::string funcName = "SetTransferList";
2837     napi_value cb = nullptr;
2838     napi_value result = nullptr;
2839     napi_create_function(env, funcName.c_str(), funcName.size(), Task::SetTransferList, nullptr, &cb);
2840     napi_call_function(env, thisValue, cb, 1, argv, &result);
2841     napi_value exception = nullptr;
2842     napi_get_and_clear_last_exception(env, &exception);
2843     ASSERT_TRUE(exception != nullptr);
2844 }
2845 
2846 HWTEST_F(NativeEngineTest, TaskpoolTest157, testing::ext::TestSize.Level0)
2847 {
2848     napi_env env = (napi_env)engine_;
2849     napi_value global = NapiHelper::GetGlobalObject(env);
2850     napi_value thisValue = CreateTaskObject(env);
2851     Task* task = nullptr;
2852     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
2853 
2854     napi_value array;
2855     napi_create_array_with_length(env, 1, &array);
2856 
2857     std::string funcName = "SetTransferList";
2858     napi_value cb = nullptr;
2859     napi_value result = nullptr;
2860     napi_create_function(env, funcName.c_str(), funcName.size(), Task::SetTransferList, nullptr, &cb);
2861     napi_call_function(env, thisValue, cb, 0, nullptr, &result);
2862     napi_value exception = nullptr;
2863     napi_get_and_clear_last_exception(env, &exception);
2864     ASSERT_TRUE(exception == nullptr);
2865 }
2866 
2867 HWTEST_F(NativeEngineTest, TaskpoolTest158, testing::ext::TestSize.Level0)
2868 {
2869     napi_env env = (napi_env)engine_;
2870     napi_value global = NapiHelper::GetGlobalObject(env);
2871     napi_value thisValue = CreateTaskObject(env);
2872     Task* task = nullptr;
2873     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
2874 
2875     napi_value argv[1] = { nullptr };
2876     std::string funcName = "SetTransferList";
2877     napi_create_string_utf8(env, funcName.c_str(), funcName.size(), &argv[0]);
2878     napi_value cb = nullptr;
2879     napi_value result = nullptr;
2880     napi_create_function(env, funcName.c_str(), funcName.size(), Task::SetTransferList, nullptr, &cb);
2881     napi_call_function(env, thisValue, cb, 1, argv, &result);
2882     napi_value exception = nullptr;
2883     napi_get_and_clear_last_exception(env, &exception);
2884     ASSERT_TRUE(exception != nullptr);
2885 }
2886 
2887 HWTEST_F(NativeEngineTest, TaskpoolTest159, testing::ext::TestSize.Level0)
2888 {
2889     napi_env env = (napi_env)engine_;
2890     napi_value global = NapiHelper::GetGlobalObject(env);
2891     napi_value thisValue = CreateTaskObject(env);
2892     Task* task = nullptr;
2893     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
2894     napi_value array;
2895     napi_create_array_with_length(env, 0, &array);
2896 
2897     napi_value argv[] = { array };
2898     std::string funcName = "SetTransferList";
2899     napi_value cb = nullptr;
2900     napi_value result = nullptr;
2901     napi_create_function(env, funcName.c_str(), funcName.size(), Task::SetTransferList, nullptr, &cb);
2902     napi_call_function(env, thisValue, cb, 1, argv, &result);
2903     napi_value exception = nullptr;
2904     napi_get_and_clear_last_exception(env, &exception);
2905     ASSERT_TRUE(exception == nullptr);
2906 }
2907 
2908 HWTEST_F(NativeEngineTest, TaskpoolTest160, testing::ext::TestSize.Level0)
2909 {
2910     napi_env env = (napi_env)engine_;
2911     napi_value global = NapiHelper::GetGlobalObject(env);
2912     napi_value thisValue = CreateTaskObject(env);
2913     Task* task = nullptr;
2914     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
2915     napi_value undefined = NapiHelper::GetUndefinedValue(env);
2916     napi_status status = napi_set_named_property(env, thisValue, TRANSFERLIST_STR, undefined);
2917     ASSERT_TRUE(status == napi_ok);
2918     napi_value argv[] = { nullptr, nullptr };
2919     std::string funcName = "SetCloneList";
2920     napi_value cb = nullptr;
2921     napi_value result = nullptr;
2922     napi_create_function(env, funcName.c_str(), funcName.size(), Task::SetCloneList, nullptr, &cb);
2923     napi_call_function(env, nullptr, cb, 2, argv, &result);
2924     napi_value exception = nullptr;
2925     napi_get_and_clear_last_exception(env, &exception);
2926     ASSERT_TRUE(exception != nullptr);
2927 }
2928 
2929 HWTEST_F(NativeEngineTest, TaskpoolTest161, testing::ext::TestSize.Level0)
2930 {
2931     napi_env env = (napi_env)engine_;
2932     napi_value global = NapiHelper::GetGlobalObject(env);
2933     napi_value thisValue = CreateTaskObject(env);
2934     Task* task = nullptr;
2935     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
2936 
2937     napi_value array;
2938     napi_create_array_with_length(env, 0, &array);
2939     napi_value argv[] = { array };
2940     std::string funcName = "SetCloneList";
2941     napi_value cb = nullptr;
2942     napi_value result = nullptr;
2943     napi_create_function(env, funcName.c_str(), funcName.size(), Task::SetCloneList, nullptr, &cb);
2944     napi_call_function(env, nullptr, cb, 1, argv, &result);
2945     napi_value exception = nullptr;
2946     napi_get_and_clear_last_exception(env, &exception);
2947     ASSERT_TRUE(exception == nullptr);
2948 }
2949 
2950 HWTEST_F(NativeEngineTest, TaskpoolTest162, testing::ext::TestSize.Level0)
2951 {
2952     napi_env env = (napi_env)engine_;
2953     napi_value global = NapiHelper::GetGlobalObject(env);
2954     napi_value thisValue = CreateTaskObject(env);
2955     Task* task = nullptr;
2956     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
2957 
2958     napi_value array;
2959     napi_create_array_with_length(env, 0, &array);
2960     napi_value argv[] = { array };
2961     std::string funcName = "SetCloneList";
2962     napi_value cb = nullptr;
2963     napi_value result = nullptr;
2964     napi_create_function(env, funcName.c_str(), funcName.size(), Task::SetCloneList, nullptr, &cb);
2965     napi_call_function(env, thisValue, cb, 1, argv, &result);
2966     napi_value exception = nullptr;
2967     napi_get_and_clear_last_exception(env, &exception);
2968     ASSERT_TRUE(exception == nullptr);
2969 }
2970 
2971 HWTEST_F(NativeEngineTest, TaskpoolTest163, testing::ext::TestSize.Level0)
2972 {
2973     napi_env env = (napi_env)engine_;
2974     napi_value global = NapiHelper::GetGlobalObject(env);
2975     napi_value thisValue = CreateTaskObject(env);
2976     Task* task = nullptr;
2977     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
2978 
2979     napi_value array;
2980     napi_create_array_with_length(env, 0, &array);
2981     napi_value argv[] = { array };
2982     std::string funcName = "SetCloneList";
2983     napi_value cb = nullptr;
2984     napi_value result = nullptr;
2985     napi_create_function(env, funcName.c_str(), funcName.size(), Task::SetCloneList, nullptr, &cb);
2986     napi_call_function(env, thisValue, cb, 1, argv, &result);
2987     napi_value exception = nullptr;
2988     napi_get_and_clear_last_exception(env, &exception);
2989     ASSERT_TRUE(exception == nullptr);
2990 }
2991 
2992 HWTEST_F(NativeEngineTest, TaskpoolTest164, testing::ext::TestSize.Level0)
2993 {
2994     napi_env env = (napi_env)engine_;
2995     napi_env taskEnv = nullptr;
2996     napi_create_runtime(env, &taskEnv);
2997     NativeEngine* taskEngine = reinterpret_cast<NativeEngine*>(taskEnv);
2998     taskEngine->MarkTaskPoolThread();
2999     napi_value global = NapiHelper::GetGlobalObject(env);
3000     napi_value thisValue = CreateTaskObject(taskEnv);
3001 
3002     std::string funcName = "IsCanceled";
3003     napi_value cb = nullptr;
3004     napi_value result = nullptr;
3005     napi_create_function(taskEnv, funcName.c_str(), funcName.size(), Task::IsCanceled, nullptr, &cb);
3006     napi_call_function(taskEnv, thisValue, cb, 0, nullptr, &result);
3007     napi_value exception = nullptr;
3008     napi_get_and_clear_last_exception(taskEnv, &exception);
3009     ASSERT_TRUE(exception == nullptr);
3010 }
3011 
3012 HWTEST_F(NativeEngineTest, TaskpoolTest165, testing::ext::TestSize.Level0)
3013 {
3014     napi_env env = (napi_env)engine_;
3015     napi_env taskEnv = nullptr;
3016     napi_create_runtime(env, &taskEnv);
3017     NativeEngine* taskEngine = reinterpret_cast<NativeEngine*>(taskEnv);
3018     taskEngine->MarkTaskPoolThread();
3019     napi_value global = NapiHelper::GetGlobalObject(env);
3020     napi_value thisValue = CreateTaskObject(taskEnv);
3021     std::string funcName = "IsCanceled";
3022     napi_value cb = nullptr;
3023     napi_value result = nullptr;
3024     napi_create_function(taskEnv, funcName.c_str(), funcName.size(), Task::IsCanceled, nullptr, &cb);
3025     napi_call_function(taskEnv, thisValue, cb, 0, nullptr, &result);
3026     napi_value exception = nullptr;
3027     napi_get_and_clear_last_exception(taskEnv, &exception);
3028     ASSERT_TRUE(exception == nullptr);
3029 }
3030 
3031 HWTEST_F(NativeEngineTest, TaskpoolTest166, testing::ext::TestSize.Level0)
3032 {
3033     napi_env env = (napi_env)engine_;
3034     napi_value global = NapiHelper::GetGlobalObject(env);
3035     napi_value argv[1] = { nullptr };
3036     napi_value undefined = NapiHelper::GetUndefinedValue(env);
3037     argv[0] = undefined;
3038     std::string funcName = "OnReceiveData";
3039     napi_value cb = nullptr;
3040     napi_value result = nullptr;
3041 
3042     napi_create_function(env, funcName.c_str(), funcName.size(), Task::OnReceiveData, nullptr, &cb);
3043     napi_call_function(env, global, cb, 1, argv, &result);
3044 
3045     napi_value exception = nullptr;
3046     napi_get_and_clear_last_exception(env, &exception);
3047     ASSERT_TRUE(exception != nullptr);
3048 }
3049 
3050 HWTEST_F(NativeEngineTest, TaskpoolTest167, testing::ext::TestSize.Level0)
3051 {
3052     napi_env env = (napi_env)engine_;
3053     ExceptionScope scope(env);
3054     napi_env taskEnv = nullptr;
3055     napi_create_runtime(env, &taskEnv);
3056     NativeEngine* taskEngine = reinterpret_cast<NativeEngine*>(taskEnv);
3057     taskEngine->MarkTaskPoolThread();
3058     napi_value global = NapiHelper::GetGlobalObject(env);
3059 
3060     napi_value argv[] = { nullptr };
3061     std::string funcName = "SendData";
3062     napi_value cb = nullptr;
3063     napi_value result = nullptr;
3064     napi_create_function(taskEnv, funcName.c_str(), funcName.size(), Task::SendData, nullptr, &cb);
3065     napi_call_function(taskEnv, global, cb, 1, argv, &result);
3066     napi_value exception = nullptr;
3067     napi_get_and_clear_last_exception(env, &exception);
3068     ASSERT_TRUE(exception == nullptr);
3069 }
3070 
3071 HWTEST_F(NativeEngineTest, TaskpoolTest168, testing::ext::TestSize.Level0)
3072 {
3073     napi_env env = (napi_env)engine_;
3074     ExceptionScope scope(env);
3075     napi_env taskEnv = nullptr;
3076     napi_create_runtime(env, &taskEnv);
3077     NativeEngine* taskEngine = reinterpret_cast<NativeEngine*>(taskEnv);
3078     taskEngine->MarkTaskPoolThread();
3079     napi_value global = NapiHelper::GetGlobalObject(env);
3080     napi_value argv[] = { nullptr };
3081     std::string funcName = "SendData";
3082     napi_value cb = nullptr;
3083     napi_value result = nullptr;
3084     napi_create_function(taskEnv, funcName.c_str(), funcName.size(), Task::SendData, nullptr, &cb);
3085     napi_call_function(taskEnv, global, cb, 1, argv, &result);
3086     napi_value exception = nullptr;
3087     napi_get_and_clear_last_exception(env, &exception);
3088     ASSERT_TRUE(exception == nullptr);
3089 }
3090 
3091 HWTEST_F(NativeEngineTest, TaskpoolTest169, testing::ext::TestSize.Level0)
3092 {
3093     napi_env env = (napi_env)engine_;
3094     napi_value global;
3095     napi_get_global(env, &global);
3096     napi_value thisValue = CreateTaskObject(env);
3097 
3098     napi_value dependentTask = CreateTaskObject(env);
3099     napi_value argv[] = { dependentTask };
3100     std::string funcName = "AddDependency";
3101     napi_value cb = nullptr;
3102     napi_value result = nullptr;
3103     napi_create_function(env, funcName.c_str(), funcName.size(), Task::AddDependency, nullptr, &cb);
3104     napi_call_function(env, nullptr, cb, 1, argv, &result);
3105     napi_value exception = nullptr;
3106     napi_get_and_clear_last_exception(env, &exception);
3107     ASSERT_TRUE(exception == nullptr);
3108 }
3109 
3110 HWTEST_F(NativeEngineTest, TaskpoolTest170, testing::ext::TestSize.Level0)
3111 {
3112     napi_env env = (napi_env)engine_;
3113     napi_value global;
3114     napi_get_global(env, &global);
3115     napi_value thisValue = CreateTaskObject(env);
3116     Task* task = nullptr;
3117     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3118     ASSERT_TRUE(task != nullptr);
3119 
3120     napi_value dependentTask = CreateTaskObject(env);
3121     napi_value argv[] = { dependentTask };
3122     std::string funcName = "AddDependency";
3123     napi_value cb = nullptr;
3124     napi_value result = nullptr;
3125     napi_create_function(env, funcName.c_str(), funcName.size(), Task::AddDependency, nullptr, &cb);
3126     task->isPeriodicTask_ = false;
3127     task->taskType_ = TaskType::GROUP_COMMON_TASK;
3128     napi_call_function(env, thisValue, cb, 1, argv, &result);
3129     napi_value exception = nullptr;
3130     napi_get_and_clear_last_exception(env, &exception);
3131     ASSERT_TRUE(exception != nullptr);
3132 }
3133 
3134 HWTEST_F(NativeEngineTest, TaskpoolTest171, testing::ext::TestSize.Level0)
3135 {
3136     napi_env env = (napi_env)engine_;
3137     napi_value global;
3138     napi_get_global(env, &global);
3139     napi_value thisValue = CreateTaskObject(env);
3140     Task* task = nullptr;
3141     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3142 
3143     napi_value undefined = NapiHelper::GetUndefinedValue(env);
3144     napi_value dependentTask = CreateTaskObject(env);
3145     napi_set_named_property(env, dependentTask, TASKID_STR, undefined);
3146     napi_value argv[] = { dependentTask };
3147     std::string funcName = "AddDependency";
3148     napi_value cb = nullptr;
3149     napi_value result = nullptr;
3150     napi_create_function(env, funcName.c_str(), funcName.size(), Task::AddDependency, nullptr, &cb);
3151     task->taskType_ = TaskType::TASK;
3152     task->isPeriodicTask_ = false;
3153     napi_call_function(env, thisValue, cb, 1, argv, &result);
3154     napi_value exception = nullptr;
3155     napi_get_and_clear_last_exception(env, &exception);
3156     ASSERT_TRUE(exception == nullptr);
3157 }
3158 
3159 HWTEST_F(NativeEngineTest, TaskpoolTest172, testing::ext::TestSize.Level0)
3160 {
3161     napi_env env = (napi_env)engine_;
3162     napi_value global;
3163     napi_get_global(env, &global);
3164     napi_value thisValue = CreateTaskObject(env);
3165     Task* task = nullptr;
3166     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3167 
3168     napi_value argv[] = { nullptr };
3169     std::string funcName = "AddDependency";
3170     napi_value cb = nullptr;
3171     napi_value result = nullptr;
3172     napi_create_function(env, funcName.c_str(), funcName.size(), Task::AddDependency, nullptr, &cb);
3173     task->taskType_ = TaskType::TASK;
3174     task->isPeriodicTask_ = false;
3175     napi_call_function(env, thisValue, cb, 1, argv, &result);
3176     napi_value exception = nullptr;
3177     napi_get_and_clear_last_exception(env, &exception);
3178     ASSERT_TRUE(exception != nullptr);
3179 }
3180 
3181 HWTEST_F(NativeEngineTest, TaskpoolTest173, testing::ext::TestSize.Level0)
3182 {
3183     napi_env env = (napi_env)engine_;
3184     napi_value global;
3185     napi_get_global(env, &global);
3186     napi_value thisValue = CreateTaskObject(env);
3187     Task* task = nullptr;
3188     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3189 
3190     napi_value dependentTask = CreateTaskObject(env);
3191     Task* task1 = nullptr;
3192     napi_unwrap(env, dependentTask, reinterpret_cast<void**>(&task1));
3193     task1->isPeriodicTask_ = true;
3194     napi_value argv[] = { dependentTask };
3195     std::string funcName = "AddDependency";
3196     napi_value cb = nullptr;
3197     napi_value result = nullptr;
3198     napi_create_function(env, funcName.c_str(), funcName.size(), Task::AddDependency, nullptr, &cb);
3199     task->taskType_ = TaskType::TASK;
3200     task->isPeriodicTask_ = false;
3201     napi_call_function(env, thisValue, cb, 1, argv, &result);
3202     napi_value exception = nullptr;
3203     napi_get_and_clear_last_exception(env, &exception);
3204     ASSERT_TRUE(exception != nullptr);
3205 }
3206 
3207 HWTEST_F(NativeEngineTest, TaskpoolTest174, testing::ext::TestSize.Level0)
3208 {
3209     napi_env env = (napi_env)engine_;
3210     napi_value global;
3211     napi_get_global(env, &global);
3212     napi_value thisValue = CreateTaskObject(env);
3213     Task* task = nullptr;
3214     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3215 
3216     napi_value dependentTask = CreateTaskObject(env);
3217     Task* task1 = nullptr;
3218     napi_unwrap(env, dependentTask, reinterpret_cast<void**>(&task1));
3219     task1->taskType_ = TaskType::COMMON_TASK;
3220     napi_value argv[] = { dependentTask };
3221     std::string funcName = "AddDependency";
3222     napi_value cb = nullptr;
3223     napi_value result = nullptr;
3224     napi_create_function(env, funcName.c_str(), funcName.size(), Task::AddDependency, nullptr, &cb);
3225     task->taskType_ = TaskType::TASK;
3226     task1->taskType_ = TaskType::COMMON_TASK;
3227     task->isPeriodicTask_ = false;
3228     task1->isPeriodicTask_ = false;
3229     napi_call_function(env, thisValue, cb, 1, argv, &result);
3230     napi_value exception = nullptr;
3231     napi_get_and_clear_last_exception(env, &exception);
3232     ASSERT_TRUE(exception != nullptr);
3233 
3234     task1->taskType_ = TaskType::SEQRUNNER_TASK;
3235     napi_call_function(env, thisValue, cb, 1, argv, &result);
3236     napi_get_and_clear_last_exception(env, &exception);
3237     ASSERT_TRUE(exception != nullptr);
3238 
3239     task1->taskType_ = TaskType::GROUP_COMMON_TASK;
3240     napi_call_function(env, thisValue, cb, 1, argv, &result);
3241     napi_get_and_clear_last_exception(env, &exception);
3242     ASSERT_TRUE(exception != nullptr);
3243 }
3244 
3245 HWTEST_F(NativeEngineTest, TaskpoolTest175, testing::ext::TestSize.Level0)
3246 {
3247     napi_env env = (napi_env)engine_;
3248     napi_value global;
3249     napi_get_global(env, &global);
3250     napi_value thisValue = CreateTaskObject(env);
3251     Task* task = nullptr;
3252     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3253 
3254     napi_value dependentTask = CreateTaskObject(env);
3255     napi_value argv[] = { dependentTask };
3256     std::string funcName = "AddDependency";
3257     napi_value cb = nullptr;
3258     napi_value result = nullptr;
3259     napi_create_function(env, funcName.c_str(), funcName.size(), Task::AddDependency, nullptr, &cb);
3260     task->isPeriodicTask_ = false;
3261     task->taskType_ = TaskType::SEQRUNNER_TASK;
3262     napi_call_function(env, thisValue, cb, 1, argv, &result);
3263     napi_value exception = nullptr;
3264     napi_get_and_clear_last_exception(env, &exception);
3265     ASSERT_TRUE(exception != nullptr);
3266 }
3267 
3268 HWTEST_F(NativeEngineTest, TaskpoolTest176, testing::ext::TestSize.Level0)
3269 {
3270     napi_env env = (napi_env)engine_;
3271     std::string funcName = "RemoveDependency";
3272     napi_value cb = nullptr;
3273     napi_value result = nullptr;
3274     napi_create_function(env, funcName.c_str(), funcName.size(), Task::RemoveDependency, nullptr, &cb);
3275 
3276     napi_call_function(env, nullptr, cb, 0, nullptr, &result);
3277     napi_value exception = nullptr;
3278     napi_get_and_clear_last_exception(env, &exception);
3279     ASSERT_TRUE(exception != nullptr);
3280 }
3281 
3282 HWTEST_F(NativeEngineTest, TaskpoolTest177, testing::ext::TestSize.Level0)
3283 {
3284     napi_env env = (napi_env)engine_;
3285     napi_value thisValue = CreateTaskObject(env);
3286     Task* task = nullptr;
3287     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3288 
3289     napi_value dependentTask = CreateTaskObject(env);
3290     napi_value argv[] = { dependentTask };
3291     std::string funcName = "RemoveDependency";
3292     napi_value cb = nullptr;
3293     napi_value result = nullptr;
3294     napi_create_function(env, funcName.c_str(), funcName.size(), Task::RemoveDependency, nullptr, &cb);
3295     napi_call_function(env, nullptr, cb, 1, argv, &result);
3296     napi_value exception = nullptr;
3297     napi_get_and_clear_last_exception(env, &exception);
3298     ASSERT_TRUE(exception != nullptr);
3299 }
3300 
3301 HWTEST_F(NativeEngineTest, TaskpoolTest178, testing::ext::TestSize.Level0)
3302 {
3303     napi_env env = (napi_env)engine_;
3304     napi_value thisValue = CreateTaskObject(env);
3305     Task* task = nullptr;
3306     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3307 
3308     napi_value undefined = NapiHelper::GetUndefinedValue(env);
3309     napi_value dependentTask = CreateTaskObject(env);
3310     napi_set_named_property(env, dependentTask, TASKID_STR, undefined);
3311     napi_value argv[] = { dependentTask };
3312     std::string funcName = "RemoveDependency";
3313     napi_value cb = nullptr;
3314     napi_value result = nullptr;
3315     napi_create_function(env, funcName.c_str(), funcName.size(), Task::RemoveDependency, nullptr, &cb);
3316     task->hasDependency_ = false;
3317     napi_call_function(env, thisValue, cb, 1, argv, &result);
3318     napi_value exception = nullptr;
3319     napi_get_and_clear_last_exception(env, &exception);
3320     ASSERT_TRUE(exception != nullptr);
3321 
3322     task->hasDependency_ = true;
3323     task->isPeriodicTask_ = true;
3324     napi_call_function(env, thisValue, cb, 1, argv, &result);
3325     napi_get_and_clear_last_exception(env, &exception);
3326     ASSERT_TRUE(exception != nullptr);
3327 
3328     task->isPeriodicTask_ = false;
3329     task->taskType_ = TaskType::COMMON_TASK;
3330     napi_call_function(env, thisValue, cb, 1, argv, &result);
3331     napi_get_and_clear_last_exception(env, &exception);
3332     ASSERT_TRUE(exception != nullptr);
3333 
3334     task->taskType_ = TaskType::TASK;
3335     napi_call_function(env, thisValue, cb, 1, argv, &result);
3336     napi_get_and_clear_last_exception(env, &exception);
3337     ASSERT_TRUE(exception != nullptr);
3338 }
3339 
3340 HWTEST_F(NativeEngineTest, TaskpoolTest179, testing::ext::TestSize.Level0)
3341 {
3342     napi_env env = (napi_env)engine_;
3343     napi_value thisValue = CreateTaskObject(env);
3344     Task* task = nullptr;
3345     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3346 
3347     napi_value dependentTask = CreateTaskObject(env);
3348     Task* task1 = nullptr;
3349     napi_unwrap(env, dependentTask, reinterpret_cast<void**>(&task1));
3350     napi_value argv[] = { dependentTask };
3351     std::string funcName = "RemoveDependency";
3352     napi_value cb = nullptr;
3353     napi_value result = nullptr;
3354     napi_create_function(env, funcName.c_str(), funcName.size(), Task::RemoveDependency, nullptr, &cb);
3355     task->hasDependency_ = true;
3356     task->isPeriodicTask_ = false;
3357     task->taskType_ = TaskType::TASK;
3358     task1->hasDependency_ = false;
3359     napi_call_function(env, thisValue, cb, 1, argv, &result);
3360     napi_value exception = nullptr;
3361     napi_get_and_clear_last_exception(env, &exception);
3362     ASSERT_TRUE(exception != nullptr);
3363 
3364     task1->hasDependency_ = true;
3365     task1->isPeriodicTask_ = true;
3366     napi_call_function(env, thisValue, cb, 1, argv, &result);
3367     napi_get_and_clear_last_exception(env, &exception);
3368     ASSERT_TRUE(exception != nullptr);
3369 
3370     task1->isPeriodicTask_ = false;
3371     task1->taskType_ = TaskType::COMMON_TASK;
3372     napi_call_function(env, thisValue, cb, 1, argv, &result);
3373     napi_get_and_clear_last_exception(env, &exception);
3374     ASSERT_TRUE(exception != nullptr);
3375 
3376     task1->taskType_ = TaskType::TASK;
3377     napi_call_function(env, thisValue, cb, 1, argv, &result);
3378     napi_get_and_clear_last_exception(env, &exception);
3379     ASSERT_TRUE(exception != nullptr);
3380 }
3381 
3382 HWTEST_F(NativeEngineTest, TaskpoolTest180, testing::ext::TestSize.Level0)
3383 {
3384     napi_env env = (napi_env)engine_;
3385     napi_value thisValue = CreateTaskObject(env);
3386     Task* task = nullptr;
3387     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3388 
3389     napi_value dependentTask = CreateTaskObject(env);
3390     Task* task1 = nullptr;
3391     napi_unwrap(env, dependentTask, reinterpret_cast<void**>(&task1));
3392     napi_value argv[] = { dependentTask };
3393     std::string funcName = "RemoveDependency";
3394     napi_value cb = nullptr;
3395     napi_value result = nullptr;
3396     napi_create_function(env, funcName.c_str(), funcName.size(), Task::RemoveDependency, nullptr, &cb);
3397     task->hasDependency_ = true;
3398     task->isPeriodicTask_ = false;
3399     task->taskType_ = TaskType::TASK;
3400     task1->hasDependency_ = true;
3401     task1->isPeriodicTask_ = false;
3402     task1->taskType_ = TaskType::TASK;
3403     task1->hasDependency_ = false;
3404     NativeEngineTest::StoreDependentId(task->taskId_, task1->taskId_);
3405     napi_call_function(env, thisValue, cb, 1, argv, &result);
3406     napi_value exception = nullptr;
3407     napi_get_and_clear_last_exception(env, &exception);
3408     ASSERT_TRUE(exception != nullptr);
3409 }
3410 
3411 HWTEST_F(NativeEngineTest, TaskpoolTest181, testing::ext::TestSize.Level0)
3412 {
3413     napi_env env = (napi_env)engine_;
3414     napi_value func = nullptr;
3415     GetSendableFunction(env, "foo", func);
3416     napi_ref callbackRef = Helper::NapiHelper::CreateReference(env, func, 1);
3417     ListenerCallBackInfo* cbInfo = new ListenerCallBackInfo(env, callbackRef, nullptr);
3418 
3419     uv_async_t* req = new uv_async_t;
3420     req->data = cbInfo;
3421     Task::StartExecutionCallback(req);
3422     napi_value exception = nullptr;
3423     napi_get_and_clear_last_exception(env, &exception);
3424     ASSERT_TRUE(exception == nullptr);
3425 }
3426 
3427 HWTEST_F(NativeEngineTest, TaskpoolTest182, testing::ext::TestSize.Level0)
3428 {
3429     napi_env env = (napi_env)engine_;
3430     ListenerCallBackInfo* cbInfo = new ListenerCallBackInfo(env, nullptr, nullptr);
3431 
3432     uv_async_t* req = new uv_async_t;
3433     req->data = cbInfo;
3434     Task::StartExecutionCallback(req);
3435     napi_value exception = nullptr;
3436     napi_get_and_clear_last_exception(env, &exception);
3437     ASSERT_TRUE(exception == nullptr);
3438 }
3439 
3440 HWTEST_F(NativeEngineTest, TaskpoolTest183, testing::ext::TestSize.Level0)
3441 {
3442     napi_env env = (napi_env)engine_;
3443     ListenerCallBackInfo* cbInfo = new ListenerCallBackInfo(env, nullptr, nullptr);
3444 
3445     Task::ExecuteListenerCallback(cbInfo);
3446     napi_value exception = nullptr;
3447     napi_get_and_clear_last_exception(env, &exception);
3448     ASSERT_TRUE(exception == nullptr);
3449 
3450     napi_value func = nullptr;
3451     GetSendableFunction(env, "foo", func);
3452     napi_ref callbackRef = Helper::NapiHelper::CreateReference(env, func, 1);
3453     cbInfo = new ListenerCallBackInfo(env, callbackRef, nullptr);
3454     Task::ExecuteListenerCallback(cbInfo);
3455     napi_get_and_clear_last_exception(env, &exception);
3456     ASSERT_TRUE(exception == nullptr);
3457 
3458     napi_value error = NapiHelper::CreateObject(env);
3459     cbInfo = new ListenerCallBackInfo(env, callbackRef, error);
3460     Task::ExecuteListenerCallback(cbInfo);
3461     napi_get_and_clear_last_exception(env, &exception);
3462     ASSERT_TRUE(exception == nullptr);
3463 }
3464 
3465 HWTEST_F(NativeEngineTest, TaskpoolTest184, testing::ext::TestSize.Level0)
3466 {
3467     napi_env env = (napi_env)engine_;
3468     napi_value thisValue = CreateTaskObject(env);
3469     Task* task = nullptr;
3470     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3471 
3472     std::string funcName = "OnEnqueued";
3473     napi_value cb = nullptr;
3474     napi_value result = nullptr;
3475     napi_create_function(env, funcName.c_str(), funcName.size(), Task::OnEnqueued, nullptr, &cb);
3476     napi_call_function(env, thisValue, cb, 0, nullptr, &result);
3477     napi_value exception = nullptr;
3478     napi_get_and_clear_last_exception(env, &exception);
3479     ASSERT_TRUE(exception == nullptr);
3480 }
3481 
3482 HWTEST_F(NativeEngineTest, TaskpoolTest185, testing::ext::TestSize.Level0)
3483 {
3484     napi_env env = (napi_env)engine_;
3485     napi_value thisValue = CreateTaskObject(env);
3486     Task* task = nullptr;
3487     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3488 
3489     napi_value object = NapiHelper::CreateObject(env);
3490     napi_value argv[1] = { object };
3491     std::string funcName = "OnEnqueued";
3492     napi_value cb = nullptr;
3493     napi_value result = nullptr;
3494     napi_create_function(env, funcName.c_str(), funcName.size(), Task::OnEnqueued, nullptr, &cb);
3495     napi_call_function(env, thisValue, cb, 1, argv, &result);
3496     napi_value exception = nullptr;
3497     napi_get_and_clear_last_exception(env, &exception);
3498     ASSERT_TRUE(exception != nullptr);
3499 }
3500 
3501 HWTEST_F(NativeEngineTest, TaskpoolTest186, testing::ext::TestSize.Level0)
3502 {
3503     napi_env env = (napi_env)engine_;
3504     napi_value thisValue = CreateTaskObject(env);
3505     Task* task = nullptr;
3506     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3507 
3508     napi_value func = nullptr;
3509     GetSendableFunction(env, "foo", func);
3510     napi_value argv[1] = { func };
3511     std::string funcName = "OnEnqueued";
3512     napi_value cb = nullptr;
3513     napi_value result = nullptr;
3514     napi_create_function(env, funcName.c_str(), funcName.size(), Task::OnEnqueued, nullptr, &cb);
3515     napi_call_function(env, nullptr, cb, 1, argv, &result);
3516     napi_value exception = nullptr;
3517     napi_get_and_clear_last_exception(env, &exception);
3518     ASSERT_TRUE(exception == nullptr);
3519 }
3520 
3521 HWTEST_F(NativeEngineTest, TaskpoolTest187, testing::ext::TestSize.Level0)
3522 {
3523     napi_env env = (napi_env)engine_;
3524     napi_value thisValue = CreateTaskObject(env);
3525     Task* task = nullptr;
3526     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3527 
3528     napi_value func = nullptr;
3529     GetSendableFunction(env, "foo", func);
3530     napi_value argv[1] = { func };
3531     std::string funcName = "OnEnqueued";
3532     napi_value cb = nullptr;
3533     napi_value result = nullptr;
3534     napi_create_function(env, funcName.c_str(), funcName.size(), Task::OnEnqueued, nullptr, &cb);
3535     task->taskState_ = ExecuteState::WAITING;
3536     napi_call_function(env, thisValue, cb, 1, argv, &result);
3537     napi_value exception = nullptr;
3538     napi_get_and_clear_last_exception(env, &exception);
3539     ASSERT_TRUE(exception != nullptr);
3540 
3541     task->taskState_ = ExecuteState::NOT_FOUND;
3542     napi_call_function(env, thisValue, cb, 1, argv, &result);
3543     napi_get_and_clear_last_exception(env, &exception);
3544     ASSERT_TRUE(exception != nullptr);
3545 }
3546 
3547 HWTEST_F(NativeEngineTest, TaskpoolTest188, testing::ext::TestSize.Level0)
3548 {
3549     napi_env env = (napi_env)engine_;
3550     napi_value thisValue = CreateTaskObject(env);
3551     Task* task = nullptr;
3552     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3553 
3554     std::string funcName = "OnStartExecution";
3555     napi_value cb = nullptr;
3556     napi_value result = nullptr;
3557     napi_create_function(env, funcName.c_str(), funcName.size(), Task::OnStartExecution, nullptr, &cb);
3558     napi_call_function(env, thisValue, cb, 0, nullptr, &result);
3559     napi_value exception = nullptr;
3560     napi_get_and_clear_last_exception(env, &exception);
3561     ASSERT_TRUE(exception == nullptr);
3562 }
3563 
3564 HWTEST_F(NativeEngineTest, TaskpoolTest189, testing::ext::TestSize.Level0)
3565 {
3566     napi_env env = (napi_env)engine_;
3567     napi_value thisValue = CreateTaskObject(env);
3568     Task* task = nullptr;
3569     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3570 
3571     napi_value object = NapiHelper::CreateObject(env);
3572     napi_value argv[1] = { object };
3573     std::string funcName = "OnStartExecution";
3574     napi_value cb = nullptr;
3575     napi_value result = nullptr;
3576     napi_create_function(env, funcName.c_str(), funcName.size(), Task::OnStartExecution, nullptr, &cb);
3577     napi_call_function(env, thisValue, cb, 1, argv, &result);
3578     napi_value exception = nullptr;
3579     napi_get_and_clear_last_exception(env, &exception);
3580     ASSERT_TRUE(exception != nullptr);
3581 }
3582 
3583 HWTEST_F(NativeEngineTest, TaskpoolTest190, testing::ext::TestSize.Level0)
3584 {
3585     napi_env env = (napi_env)engine_;
3586     napi_value thisValue = CreateTaskObject(env);
3587     Task* task = nullptr;
3588     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3589 
3590     napi_value func = nullptr;
3591     GetSendableFunction(env, "foo", func);
3592     napi_value argv[1] = { func };
3593     std::string funcName = "OnStartExecution";
3594     napi_value cb = nullptr;
3595     napi_value result = nullptr;
3596     napi_create_function(env, funcName.c_str(), funcName.size(), Task::OnStartExecution, nullptr, &cb);
3597     napi_call_function(env, thisValue, cb, 1, argv, &result);
3598     napi_value exception = nullptr;
3599     napi_get_and_clear_last_exception(env, &exception);
3600     ASSERT_TRUE(exception == nullptr);
3601 }
3602 
3603 HWTEST_F(NativeEngineTest, TaskpoolTest191, testing::ext::TestSize.Level0)
3604 {
3605     napi_env env = (napi_env)engine_;
3606     napi_value thisValue = CreateTaskObject(env);
3607     Task* task = nullptr;
3608     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3609 
3610     napi_value func = nullptr;
3611     GetSendableFunction(env, "foo", func);
3612     napi_value argv[1] = { func };
3613     std::string funcName = "OnStartExecution";
3614     napi_value cb = nullptr;
3615     napi_value result = nullptr;
3616     napi_create_function(env, funcName.c_str(), funcName.size(), Task::OnStartExecution, nullptr, &cb);
3617     task->taskState_ = ExecuteState::WAITING;
3618     napi_call_function(env, thisValue, cb, 1, argv, &result);
3619     napi_value exception = nullptr;
3620     napi_get_and_clear_last_exception(env, &exception);
3621     ASSERT_TRUE(exception != nullptr);
3622 
3623     task->taskState_ = ExecuteState::NOT_FOUND;
3624     task->isMainThreadTask_ = false;
3625     napi_call_function(env, thisValue, cb, 1, argv, &result);
3626     napi_get_and_clear_last_exception(env, &exception);
3627     ASSERT_TRUE(exception != nullptr);
3628 
3629     task->isMainThreadTask_ = true;
3630     napi_call_function(env, thisValue, cb, 1, argv, &result);
3631     napi_get_and_clear_last_exception(env, &exception);
3632     ASSERT_TRUE(exception != nullptr);
3633 }
3634 
3635 HWTEST_F(NativeEngineTest, TaskpoolTest192, testing::ext::TestSize.Level0)
3636 {
3637     napi_env env = (napi_env)engine_;
3638     napi_value thisValue = CreateTaskObject(env);
3639     Task* task = nullptr;
3640     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3641 
3642     std::string funcName = "OnExecutionFailed";
3643     napi_value cb = nullptr;
3644     napi_value result = nullptr;
3645     napi_create_function(env, funcName.c_str(), funcName.size(), Task::OnExecutionFailed, nullptr, &cb);
3646     napi_call_function(env, thisValue, cb, 0, nullptr, &result);
3647     napi_value exception = nullptr;
3648     napi_get_and_clear_last_exception(env, &exception);
3649     ASSERT_TRUE(exception == nullptr);
3650 }
3651 
3652 HWTEST_F(NativeEngineTest, TaskpoolTest193, testing::ext::TestSize.Level0)
3653 {
3654     napi_env env = (napi_env)engine_;
3655     napi_value thisValue = CreateTaskObject(env);
3656     Task* task = nullptr;
3657     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3658 
3659     napi_value object = NapiHelper::CreateObject(env);
3660     napi_value argv[1] = { object };
3661     std::string funcName = "OnExecutionFailed";
3662     napi_value cb = nullptr;
3663     napi_value result = nullptr;
3664     napi_create_function(env, funcName.c_str(), funcName.size(), Task::OnExecutionFailed, nullptr, &cb);
3665     napi_call_function(env, thisValue, cb, 1, argv, &result);
3666     napi_value exception = nullptr;
3667     napi_get_and_clear_last_exception(env, &exception);
3668     ASSERT_TRUE(exception != nullptr);
3669 }
3670 
3671 HWTEST_F(NativeEngineTest, TaskpoolTest194, testing::ext::TestSize.Level0)
3672 {
3673     napi_env env = (napi_env)engine_;
3674     napi_value thisValue = CreateTaskObject(env);
3675     Task* task = nullptr;
3676     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3677 
3678     napi_value func = nullptr;
3679     GetSendableFunction(env, "foo", func);
3680     napi_value argv[1] = { func };
3681     std::string funcName = "OnExecutionFailed";
3682     napi_value cb = nullptr;
3683     napi_value result = nullptr;
3684     napi_create_function(env, funcName.c_str(), funcName.size(), Task::OnExecutionFailed, nullptr, &cb);
3685     napi_call_function(env, nullptr, cb, 1, argv, &result);
3686     napi_value exception = nullptr;
3687     napi_get_and_clear_last_exception(env, &exception);
3688     ASSERT_TRUE(exception == nullptr);
3689 }
3690 
3691 HWTEST_F(NativeEngineTest, TaskpoolTest195, testing::ext::TestSize.Level0)
3692 {
3693     napi_env env = (napi_env)engine_;
3694     napi_value thisValue = CreateTaskObject(env);
3695     Task* task = nullptr;
3696     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3697 
3698     napi_value func = nullptr;
3699     GetSendableFunction(env, "foo", func);
3700     napi_value argv[1] = { func };
3701     std::string funcName = "OnExecutionFailed";
3702     napi_value cb = nullptr;
3703     napi_value result = nullptr;
3704     napi_create_function(env, funcName.c_str(), funcName.size(), Task::OnExecutionFailed, nullptr, &cb);
3705     task->taskState_ = ExecuteState::WAITING;
3706     napi_call_function(env, thisValue, cb, 1, argv, &result);
3707     napi_value exception = nullptr;
3708     napi_get_and_clear_last_exception(env, &exception);
3709     ASSERT_TRUE(exception != nullptr);
3710 
3711     task->taskState_ = ExecuteState::NOT_FOUND;
3712     napi_call_function(env, thisValue, cb, 1, argv, &result);
3713     napi_get_and_clear_last_exception(env, &exception);
3714     ASSERT_TRUE(exception != nullptr);
3715 }
3716 
3717 HWTEST_F(NativeEngineTest, TaskpoolTest196, testing::ext::TestSize.Level0)
3718 {
3719     napi_env env = (napi_env)engine_;
3720     napi_value thisValue = CreateTaskObject(env);
3721     Task* task = nullptr;
3722     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3723 
3724     std::string funcName = "OnExecutionSucceeded";
3725     napi_value cb = nullptr;
3726     napi_value result = nullptr;
3727     napi_create_function(env, funcName.c_str(), funcName.size(), Task::OnExecutionSucceeded, nullptr, &cb);
3728     napi_call_function(env, thisValue, cb, 0, nullptr, &result);
3729     napi_value exception = nullptr;
3730     napi_get_and_clear_last_exception(env, &exception);
3731     ASSERT_TRUE(exception == nullptr);
3732 }
3733 
3734 HWTEST_F(NativeEngineTest, TaskpoolTest197, testing::ext::TestSize.Level0)
3735 {
3736     napi_env env = (napi_env)engine_;
3737     napi_value thisValue = CreateTaskObject(env);
3738     Task* task = nullptr;
3739     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3740 
3741     napi_value object = NapiHelper::CreateObject(env);
3742     napi_value argv[1] = { object };
3743     std::string funcName = "OnExecutionSucceeded";
3744     napi_value cb = nullptr;
3745     napi_value result = nullptr;
3746     napi_create_function(env, funcName.c_str(), funcName.size(), Task::OnExecutionSucceeded, nullptr, &cb);
3747     napi_call_function(env, thisValue, cb, 1, argv, &result);
3748     napi_value exception = nullptr;
3749     napi_get_and_clear_last_exception(env, &exception);
3750     ASSERT_TRUE(exception != nullptr);
3751 }
3752 
3753 HWTEST_F(NativeEngineTest, TaskpoolTest198, testing::ext::TestSize.Level0)
3754 {
3755     napi_env env = (napi_env)engine_;
3756     napi_value thisValue = CreateTaskObject(env);
3757     Task* task = nullptr;
3758     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3759 
3760     napi_value func = nullptr;
3761     GetSendableFunction(env, "foo", func);
3762     napi_value argv[1] = { func };
3763     std::string funcName = "OnExecutionSucceeded";
3764     napi_value cb = nullptr;
3765     napi_value result = nullptr;
3766     napi_create_function(env, funcName.c_str(), funcName.size(), Task::OnExecutionSucceeded, nullptr, &cb);
3767     napi_call_function(env, nullptr, cb, 1, argv, &result);
3768     napi_value exception = nullptr;
3769     napi_get_and_clear_last_exception(env, &exception);
3770     ASSERT_TRUE(exception == nullptr);
3771 }
3772 
3773 HWTEST_F(NativeEngineTest, TaskpoolTest199, testing::ext::TestSize.Level0)
3774 {
3775     napi_env env = (napi_env)engine_;
3776     napi_value thisValue = CreateTaskObject(env);
3777     Task* task = nullptr;
3778     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3779 
3780     napi_value func = nullptr;
3781     GetSendableFunction(env, "foo", func);
3782     napi_value argv[1] = { func };
3783     std::string funcName = "OnExecutionSucceeded";
3784     napi_value cb = nullptr;
3785     napi_value result = nullptr;
3786     napi_create_function(env, funcName.c_str(), funcName.size(), Task::OnExecutionSucceeded, nullptr, &cb);
3787     task->taskState_ = ExecuteState::WAITING;
3788     napi_call_function(env, thisValue, cb, 1, argv, &result);
3789     napi_value exception = nullptr;
3790     napi_get_and_clear_last_exception(env, &exception);
3791     ASSERT_TRUE(exception != nullptr);
3792 
3793     task->taskState_ = ExecuteState::NOT_FOUND;
3794     napi_call_function(env, thisValue, cb, 1, argv, &result);
3795     napi_get_and_clear_last_exception(env, &exception);
3796     ASSERT_TRUE(exception != nullptr);
3797 }
3798 
3799 HWTEST_F(NativeEngineTest, TaskpoolTest200, testing::ext::TestSize.Level0)
3800 {
3801     napi_env env = (napi_env)engine_;
3802     napi_value thisValue = CreateTaskObject(env);
3803     Task* task = nullptr;
3804     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3805 
3806     std::string funcName = "IsDone";
3807     napi_value cb = nullptr;
3808     napi_value result = nullptr;
3809     napi_create_function(env, funcName.c_str(), funcName.size(), Task::IsDone, nullptr, &cb);
3810     napi_call_function(env, nullptr, cb, 0, nullptr, &result);
3811     napi_value exception = nullptr;
3812     napi_get_and_clear_last_exception(env, &exception);
3813     ASSERT_TRUE(exception == nullptr);
3814 }
3815 
3816 HWTEST_F(NativeEngineTest, TaskpoolTest201, testing::ext::TestSize.Level0)
3817 {
3818     napi_env env = (napi_env)engine_;
3819     napi_value thisValue = CreateTaskObject(env);
3820     Task* task = nullptr;
3821     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3822 
3823     std::string funcName = "IsDone";
3824     napi_value cb = nullptr;
3825     napi_value result = nullptr;
3826     napi_create_function(env, funcName.c_str(), funcName.size(), Task::IsDone, nullptr, &cb);
3827     task->taskState_ = ExecuteState::WAITING;
3828     napi_call_function(env, thisValue, cb, 0, nullptr, &result);
3829     napi_value exception = nullptr;
3830     napi_get_and_clear_last_exception(env, &exception);
3831     ASSERT_TRUE(exception == nullptr);
3832 
3833     task->taskState_ = ExecuteState::FINISHED;
3834     napi_call_function(env, thisValue, cb, 0, nullptr, &result);
3835     napi_get_and_clear_last_exception(env, &exception);
3836     ASSERT_TRUE(exception == nullptr);
3837 
3838     task->taskState_ = ExecuteState::ENDING;
3839     napi_call_function(env, thisValue, cb, 0, nullptr, &result);
3840     napi_get_and_clear_last_exception(env, &exception);
3841     ASSERT_TRUE(exception == nullptr);
3842 }
3843 
3844 HWTEST_F(NativeEngineTest, TaskpoolTest202, testing::ext::TestSize.Level0)
3845 {
3846     napi_env env = (napi_env)engine_;
3847     napi_value thisValue = CreateTaskObject(env);
3848     Task* task = nullptr;
3849     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
3850     NativeEngineTest::StoreTaskDuration(task->taskId_);
3851     std::string funcName = "GetTotalDuration";
3852     napi_value cb = nullptr;
3853     napi_value result = nullptr;
3854     napi_create_function(env, funcName.c_str(), funcName.size(), Task::GetTotalDuration, nullptr, &cb);
3855     napi_call_function(env, thisValue, cb, 0, nullptr, &result);
3856     napi_value exception = nullptr;
3857     napi_get_and_clear_last_exception(env, &exception);
3858     ASSERT_TRUE(exception == nullptr);
3859 
3860     funcName = "GetCPUDuration";
3861     cb = nullptr;
3862     napi_create_function(env, funcName.c_str(), funcName.size(), Task::GetCPUDuration, nullptr, &cb);
3863     napi_call_function(env, thisValue, cb, 0, nullptr, &result);
3864     napi_get_and_clear_last_exception(env, &exception);
3865     ASSERT_TRUE(exception == nullptr);
3866 
3867     funcName = "GetIODuration";
3868     cb = nullptr;
3869     napi_create_function(env, funcName.c_str(), funcName.size(), Task::GetIODuration, nullptr, &cb);
3870     napi_call_function(env, thisValue, cb, 0, nullptr, &result);
3871     napi_get_and_clear_last_exception(env, &exception);
3872     ASSERT_TRUE(exception == nullptr);
3873 }
3874 
3875 HWTEST_F(NativeEngineTest, TaskpoolTest203, testing::ext::TestSize.Level0)
3876 {
3877     Task* task = new Task();
3878     task->IncreaseRefCount();
3879     task->DecreaseRefCount();
3880     task->taskType_ = TaskType::COMMON_TASK;
3881     ASSERT_TRUE(task->IsRepeatableTask());
3882     task->taskType_ = TaskType::GROUP_COMMON_TASK;
3883     ASSERT_TRUE(task->IsRepeatableTask());
3884     task->taskType_ = TaskType::GROUP_FUNCTION_TASK;
3885     ASSERT_TRUE(task->IsRepeatableTask());
3886     task->taskType_ = TaskType::TASK;
3887     ASSERT_TRUE(!task->IsRepeatableTask());
3888     delete task;
3889 }
3890 
3891 HWTEST_F(NativeEngineTest, TaskpoolTest204, testing::ext::TestSize.Level0)
3892 {
3893     napi_env env = (napi_env)engine_;
3894     Task* task = new Task();
3895     task->taskId_ = reinterpret_cast<uint64_t>(task);
3896     napi_value thisValue = NapiHelper::CreateObject(env);
3897     napi_ref ref = NapiHelper::CreateReference(env, thisValue, 0);
3898     task->taskRef_ = ref;
3899     TaskInfo* taskInfo = new TaskInfo();
3900     task->pendingTaskInfos_.push_back(taskInfo);
3901     task->NotifyPendingTask();
3902     napi_value exception = nullptr;
3903     napi_get_and_clear_last_exception(env, &exception);
3904     ASSERT_TRUE(exception == nullptr);
3905     delete task;
3906 }
3907 
3908 HWTEST_F(NativeEngineTest, TaskpoolTest205, testing::ext::TestSize.Level0)
3909 {
3910     napi_env env = (napi_env)engine_;
3911     Task* task = new Task();
3912     task->taskId_ = reinterpret_cast<uint64_t>(task);
3913     napi_value thisValue = NapiHelper::CreateObject(env);
3914     napi_ref ref = NapiHelper::CreateReference(env, thisValue, 0);
3915     task->taskRef_ = ref;
3916     TaskInfo* taskInfo = new TaskInfo();
3917     napi_value promise = NapiHelper::CreatePromise(env, &taskInfo->deferred);
3918     task->pendingTaskInfos_.push_back(taskInfo);
3919     task->isPeriodicTask_ = false;
3920     task->CancelPendingTask(env);
3921     napi_value exception = nullptr;
3922     napi_get_and_clear_last_exception(env, &exception);
3923     ASSERT_TRUE(exception == nullptr);
3924 
3925     TaskInfo* taskInfo1 = new TaskInfo();
3926     napi_value promise1 = NapiHelper::CreatePromise(env, &taskInfo1->deferred);
3927     task->pendingTaskInfos_.push_back(taskInfo1);
3928     task->isPeriodicTask_ = true;
3929     task->CancelPendingTask(env);
3930     napi_get_and_clear_last_exception(env, &exception);
3931     ASSERT_TRUE(exception == nullptr);
3932     delete task;
3933 }
3934 
3935 HWTEST_F(NativeEngineTest, TaskpoolTest206, testing::ext::TestSize.Level0)
3936 {
3937     napi_env env = (napi_env)engine_;
3938     Task* task = new Task();
3939     task->taskId_ = reinterpret_cast<uint64_t>(task);
3940     napi_value thisValue = NapiHelper::CreateObject(env);
3941     napi_ref ref = NapiHelper::CreateReference(env, thisValue, 0);
3942     task->taskRef_ = ref;
3943     TaskInfo* taskInfo = new TaskInfo();
3944     task->taskType_ = TaskType::GROUP_FUNCTION_TASK;
3945     task->currentTaskInfo_ = taskInfo;
3946     task->taskRefCount_ = 1;
3947     Worker* worker = reinterpret_cast<Worker*>(NativeEngineTest::WorkerConstructor(env));
3948     task->worker_ = worker;
3949 
3950     napi_value func = nullptr;
3951     napi_value args = nullptr;
3952     task->DeserializeValue(env, &func, &args);
3953     napi_value exception = nullptr;
3954     napi_get_and_clear_last_exception(env, &exception);
3955     ASSERT_TRUE(exception == nullptr);
3956 
3957     task->startTime_ = task->taskId_;
3958     task->ioTime_ = task->taskId_;
3959     task->StoreTaskDuration();
3960     napi_get_and_clear_last_exception(env, &exception);
3961     ASSERT_TRUE(exception == nullptr);
3962     delete task;
3963 }
3964 
3965 HWTEST_F(NativeEngineTest, TaskpoolTest207, testing::ext::TestSize.Level0)
3966 {
3967     napi_env env = (napi_env)engine_;
3968     Task* task = new Task();
3969     task->taskId_ = reinterpret_cast<uint64_t>(task);
3970     task->taskType_ = TaskType::SEQRUNNER_TASK;
3971     task->hasDependency_ = false;
3972     task->isPeriodicTask_ = false;
3973     task->CanForSequenceRunner(env);
3974     napi_value exception = nullptr;
3975     napi_get_and_clear_last_exception(env, &exception);
3976     ASSERT_TRUE(exception != nullptr);
3977 
3978     task->taskType_ = TaskType::COMMON_TASK;
3979     task->CanForSequenceRunner(env);
3980     napi_get_and_clear_last_exception(env, &exception);
3981     ASSERT_TRUE(exception != nullptr);
3982     delete task;
3983 }
3984 
3985 HWTEST_F(NativeEngineTest, TaskpoolTest208, testing::ext::TestSize.Level0)
3986 {
3987     napi_env env = (napi_env)engine_;
3988     Task* task = new Task();
3989     task->taskId_ = reinterpret_cast<uint64_t>(task);
3990     task->hasDependency_ = false;
3991     task->isPeriodicTask_ = true;
3992     task->CanForTaskGroup(env);
3993     napi_value exception = nullptr;
3994     napi_get_and_clear_last_exception(env, &exception);
3995     ASSERT_TRUE(exception != nullptr);
3996 
3997     task->isPeriodicTask_ = false;
3998     task->taskType_ = TaskType::COMMON_TASK;
3999     task->CanForTaskGroup(env);
4000     napi_get_and_clear_last_exception(env, &exception);
4001     ASSERT_TRUE(exception != nullptr);
4002 
4003     task->taskType_ = TaskType::SEQRUNNER_TASK;
4004     task->CanForTaskGroup(env);
4005     napi_get_and_clear_last_exception(env, &exception);
4006     ASSERT_TRUE(exception != nullptr);
4007 
4008     task->taskType_ = TaskType::GROUP_COMMON_TASK;
4009     task->CanForTaskGroup(env);
4010     napi_get_and_clear_last_exception(env, &exception);
4011     ASSERT_TRUE(exception != nullptr);
4012 
4013     task->taskType_ = TaskType::TASK;
4014     task->isLongTask_ = true;
4015     task->CanForTaskGroup(env);
4016     napi_get_and_clear_last_exception(env, &exception);
4017     ASSERT_TRUE(exception != nullptr);
4018     delete task;
4019 }
4020 
4021 HWTEST_F(NativeEngineTest, TaskpoolTest209, testing::ext::TestSize.Level0)
4022 {
4023     napi_env env = (napi_env)engine_;
4024     Task* task = new Task();
4025     task->taskId_ = reinterpret_cast<uint64_t>(task);
4026     task->taskType_ = TaskType::TASK;
4027     task->hasDependency_ = false;
4028     task->isLongTask_ = false;
4029     task->isPeriodicTask_ = true;
4030     task->CanExecute(env);
4031     napi_value exception = nullptr;
4032     napi_get_and_clear_last_exception(env, &exception);
4033     ASSERT_TRUE(exception != nullptr);
4034     delete task;
4035 }
4036 
4037 HWTEST_F(NativeEngineTest, TaskpoolTest210, testing::ext::TestSize.Level0)
4038 {
4039     napi_env env = (napi_env)engine_;
4040     Task* task = new Task();
4041     task->taskId_ = reinterpret_cast<uint64_t>(task);
4042     task->taskType_ = TaskType::COMMON_TASK;
4043     task->hasDependency_ = true;
4044     task->CanExecuteDelayed(env);
4045     napi_value exception = nullptr;
4046     napi_get_and_clear_last_exception(env, &exception);
4047     ASSERT_TRUE(exception != nullptr);
4048 
4049     task->taskType_ = TaskType::FUNCTION_TASK;
4050     task->isLongTask_ = true;
4051     task->hasDependency_ = false;
4052     task->CanExecuteDelayed(env);
4053     napi_get_and_clear_last_exception(env, &exception);
4054     ASSERT_TRUE(exception != nullptr);
4055 
4056     task->taskType_ = TaskType::TASK;
4057     task->isPeriodicTask_ = true;
4058     task->CanExecuteDelayed(env);
4059     napi_get_and_clear_last_exception(env, &exception);
4060     ASSERT_TRUE(exception != nullptr);
4061     delete task;
4062 }
4063 
4064 HWTEST_F(NativeEngineTest, TaskpoolTest211, testing::ext::TestSize.Level0)
4065 {
4066     napi_env env = (napi_env)engine_;
4067     Task* task = new Task();
4068     task->taskId_ = reinterpret_cast<uint64_t>(task);
4069     task->taskType_ = TaskType::COMMON_TASK;
4070     task->isPeriodicTask_ = false;
4071     task->CanExecutePeriodically(env);
4072     napi_value exception = nullptr;
4073     napi_get_and_clear_last_exception(env, &exception);
4074     ASSERT_TRUE(exception != nullptr);
4075 
4076     task->taskType_ = TaskType::COMMON_TASK;
4077     task->isPeriodicTask_ = true;
4078     task->CanExecutePeriodically(env);
4079     napi_get_and_clear_last_exception(env, &exception);
4080     ASSERT_TRUE(exception != nullptr);
4081 
4082     task->taskType_ = TaskType::TASK;
4083     task->isPeriodicTask_ = true;
4084     task->CanExecutePeriodically(env);
4085     napi_get_and_clear_last_exception(env, &exception);
4086     ASSERT_TRUE(exception != nullptr);
4087 
4088     task->taskType_ = TaskType::TASK;
4089     task->isPeriodicTask_ = false;
4090     task->hasDependency_ = true;
4091     task->CanExecutePeriodically(env);
4092     napi_get_and_clear_last_exception(env, &exception);
4093     ASSERT_TRUE(exception != nullptr);
4094     delete task;
4095 }
4096 
4097 HWTEST_F(NativeEngineTest, TaskpoolTest212, testing::ext::TestSize.Level0)
4098 {
4099     napi_env env = (napi_env)engine_;
4100     Task* task = new Task();
4101     task->taskId_ = reinterpret_cast<uint64_t>(task);
4102     uv_loop_t* loop = NapiHelper::GetLibUV(env);
4103     uv_update_time(loop);
4104     uv_timer_t* timer = new uv_timer_t;
4105     uv_timer_init(loop, timer);
4106     TaskMessage *taskMessage = new TaskMessage();
4107     taskMessage->priority = Priority::DEFAULT;
4108     taskMessage->taskId = task->taskId_;
4109     napi_value promise = NapiHelper::CreatePromise(env, &taskMessage->deferred);
4110     timer->data = taskMessage;
4111     task->delayedTimers_.insert(nullptr);
4112     task->delayedTimers_.insert(timer);
4113     task->ClearDelayedTimers();
4114     napi_value exception = nullptr;
4115     napi_get_and_clear_last_exception(env, &exception);
4116     ASSERT_TRUE(exception == nullptr);
4117     delete task;
4118 }
4119 
4120 HWTEST_F(NativeEngineTest, TaskpoolTest213, testing::ext::TestSize.Level0)
4121 {
4122     napi_env env = (napi_env)engine_;
4123     Task* task = new Task();
4124     task->taskId_ = reinterpret_cast<uint64_t>(task);
4125     task->TryClearHasDependency();
4126     napi_value exception = nullptr;
4127     napi_get_and_clear_last_exception(env, &exception);
4128     ASSERT_TRUE(exception == nullptr);
4129 
4130     NativeEngineTest::StoreDependentId(task->taskId_, task->taskId_);
4131     task->TryClearHasDependency();
4132     napi_get_and_clear_last_exception(env, &exception);
4133     ASSERT_TRUE(exception == nullptr);
4134 
4135     Task* task1 = new Task();
4136     task1->taskId_ = reinterpret_cast<uint64_t>(task1);
4137     NativeEngineTest::StoreDependentTaskId(task1->taskId_, task1->taskId_);
4138     task1->TryClearHasDependency();
4139     napi_get_and_clear_last_exception(env, &exception);
4140     ASSERT_TRUE(exception == nullptr);
4141 
4142     NativeEngineTest::StoreDependentId(task1->taskId_, task1->taskId_);
4143     task1->TryClearHasDependency();
4144     napi_get_and_clear_last_exception(env, &exception);
4145     ASSERT_TRUE(exception == nullptr);
4146     delete task;
4147 }
4148 
4149 HWTEST_F(NativeEngineTest, TaskpoolTest214, testing::ext::TestSize.Level0)
4150 {
4151     napi_env env = (napi_env)engine_;
4152     NativeEngineTest::InitTaskManager(env);
4153     NativeEngineTest::NotifyDependencyTaskInfo(env);
4154     NativeEngineTest::StoreTaskDependency(env);
4155     NativeEngineTest::RemoveTaskDependency(env);
4156     NativeEngineTest::ReleaseTaskData(env);
4157     NativeEngineTest::CheckTask(env);
4158     NativeEngineTest::CancelGroupTask(env);
4159     NativeEngineTest::TriggerSeqRunner(env);
4160     NativeEngineTest::UpdateGroupState(env);
4161     napi_value exception = nullptr;
4162     napi_get_and_clear_last_exception(env, &exception);
4163     ASSERT_TRUE(exception != nullptr);
4164 }
4165 
4166 HWTEST_F(NativeEngineTest, TaskpoolTest215, testing::ext::TestSize.Level0)
4167 {
4168     napi_env env = (napi_env)engine_;
4169     ExceptionScope scope(env);
4170     std::string func = "SeqRunnerConstructor";
4171     napi_value callback = nullptr;
4172     napi_value result = nullptr;
4173     napi_create_function(env, func.c_str(), func.size(), SequenceRunner::SeqRunnerConstructor, nullptr, &callback);
4174     napi_value argv[2] = {nullptr};
4175     napi_create_string_utf8(env, "seq04", NAPI_AUTO_LENGTH, &argv[0]);
4176     napi_create_uint32(env, 5, &argv[1]);
4177     result = nullptr;
4178     napi_call_function(env, nullptr, callback, 2, argv, &result);
4179     ASSERT_EQ(result, nullptr);
4180     napi_value exception = nullptr;
4181     napi_get_and_clear_last_exception(env, &exception);
4182 
4183     napi_value argv1[1] = {nullptr};
4184     napi_create_string_utf8(env, "seq05", NAPI_AUTO_LENGTH, &argv1[0]);
4185 
4186     result = nullptr;
4187     napi_call_function(env, nullptr, callback, 1, argv1, &result);
4188     ASSERT_NE(result, nullptr);
4189     exception = nullptr;
4190     napi_get_and_clear_last_exception(env, &exception);
4191 
4192     napi_value argv2[1] = {nullptr};
4193     napi_create_uint32(env, 5, &argv2[0]);
4194     result = nullptr;
4195     napi_call_function(env, nullptr, callback, 1, argv2, &result);
4196     ASSERT_EQ(result, nullptr);
4197     exception = nullptr;
4198     napi_get_and_clear_last_exception(env, &exception);
4199 
4200     napi_value argv3[1] = {nullptr};
4201     result = nullptr;
4202     napi_call_function(env, nullptr, callback, 1, argv3, &result);
4203     ASSERT_EQ(result, nullptr);
4204     exception = nullptr;
4205     napi_get_and_clear_last_exception(env, &exception);
4206 
4207     napi_value argv4[1] = {nullptr};
4208     napi_create_string_utf8(env, "seq05", NAPI_AUTO_LENGTH, &argv4[0]);
4209     result = nullptr;
4210     napi_call_function(env, nullptr, callback, 1, argv4, &result);
4211     ASSERT_NE(result, nullptr);
4212 }
4213 
4214 HWTEST_F(NativeEngineTest, TaskpoolTest216, testing::ext::TestSize.Level0)
4215 {
4216     napi_env env = (napi_env)engine_;
4217     ExceptionScope scope(env);
4218     std::string func = "SeqRunnerConstructor";
4219     napi_value SeqCallback = nullptr;
4220     napi_value SeqResult = nullptr;
4221     napi_create_function(env, func.c_str(), func.size(), SequenceRunner::SeqRunnerConstructor, nullptr, &SeqCallback);
4222     napi_value SeqArgv[1] = {nullptr};
4223     napi_create_string_utf8(env, "seq06", NAPI_AUTO_LENGTH, &SeqArgv[0]);
4224     napi_call_function(env, nullptr, SeqCallback, 1, SeqArgv, &SeqResult);
4225 
4226     std::string funcName = "Execute";
4227     napi_value callback = nullptr;
4228     napi_value result = nullptr;
4229     napi_create_function(env, funcName.c_str(), funcName.size(), SequenceRunner::Execute, nullptr, &callback);
4230 
4231     napi_value napiSeqRunnerId = NapiHelper::GetNameProperty(env, SeqResult, "seqRunnerId");
4232     uint64_t seqId = NapiHelper::GetUint64Value(env, napiSeqRunnerId);
4233     SequenceRunner seq;
4234     TaskGroupManager &taskGroupManager = TaskGroupManager::GetInstance();
4235     taskGroupManager.StoreSequenceRunner(seqId, &seq);
4236 
4237     napi_value thisValue = NapiHelper::CreateObject(env);
4238     napi_value num = nullptr;
4239     napi_create_uint32(env, 1, &num);
4240     napi_set_named_property(env, thisValue, "taskId", num);
4241     napi_value argv[] = {thisValue};
4242     napi_call_function(env, nullptr, callback, 1, argv, &result);
4243     ASSERT_EQ(result, nullptr);
4244     napi_value exception = nullptr;
4245     napi_get_and_clear_last_exception(env, &exception);
4246 
4247     thisValue = CreateTaskObject(env, TaskType::COMMON_TASK);
4248     napi_value argv1[] = {thisValue};
4249     napi_call_function(env, nullptr, callback, 1, argv1, &result);
4250     ASSERT_EQ(result, nullptr);
4251     exception = nullptr;
4252     napi_get_and_clear_last_exception(env, &exception);
4253 
4254     SequenceRunner seq1;
4255     seq1.currentTaskId_ = 1;
4256     taskGroupManager.RemoveSequenceRunner(seqId);
4257     taskGroupManager.StoreSequenceRunner(seqId, &seq1);
4258     thisValue = CreateTaskObject(env);
4259     napi_value argv2[] = {thisValue};
4260     napi_call_function(env, nullptr, callback, 1, argv2, &result);
4261     ASSERT_NE(result, nullptr);
4262 }
4263 
4264 HWTEST_F(NativeEngineTest, TaskpoolTest217, testing::ext::TestSize.Level0)
4265 {
4266     napi_env env = (napi_env)engine_;
4267     NativeEngineTest::NotifyHandleTaskResult(env);
4268     NativeEngineTest::TaskResultCallback(env);
4269     NativeEngineTest::HandleFunctionException(env);
4270     NativeEngineTest::DebuggerOnPostTask(env);
4271     NativeEngineTest::ReleaseWorkerHandles(env);
4272     napi_value exception = nullptr;
4273     napi_get_and_clear_last_exception(env, &exception);
4274     ASSERT_TRUE(exception == nullptr);
4275 }
4276 
4277 HWTEST_F(NativeEngineTest, TaskpoolTest218, testing::ext::TestSize.Level0)
4278 {
4279     napi_env env = (napi_env)engine_;
4280     ExceptionScope scope(env);
4281     napi_value exception = nullptr;
4282     napi_value thisVar = NapiHelper::CreateObject(env);
4283     napi_value taskGroupResult = GeneratorTaskGroup(env, thisVar);
4284     napi_value napiGroupId = NapiHelper::GetNameProperty(env, taskGroupResult, "groupId");
4285     uint64_t groupId = NapiHelper::GetUint64Value(env, napiGroupId);
4286 
4287     TaskGroupManager& taskGroupManager = TaskGroupManager::GetInstance();
4288     TaskGroup* group = taskGroupManager.GetTaskGroup(groupId);
4289     GroupInfo* groupInfo = new GroupInfo();
4290     groupInfo->priority = Priority::DEFAULT;
4291     group->currentGroupInfo_ = groupInfo;
4292     group->groupState_ = ExecuteState::FINISHED;
4293     taskGroupManager.StoreTaskGroup(groupId, group);
4294     napi_value result = NativeEngineTest::ExecuteGroup(env, taskGroupResult);
4295     ASSERT_TRUE(result != nullptr);
4296 }
4297 
4298 HWTEST_F(NativeEngineTest, TaskpoolTest219, testing::ext::TestSize.Level0)
4299 {
4300     napi_env env = (napi_env)engine_;
4301     ExceptionScope scope(env);
4302     napi_value exception = nullptr;
4303     napi_value thisVar = NapiHelper::CreateObject(env);
4304     napi_value taskGroupResult = GeneratorTaskGroup(env, thisVar);
4305     napi_value napiGroupId = NapiHelper::GetNameProperty(env, taskGroupResult, "groupId");
4306     uint64_t groupId = NapiHelper::GetUint64Value(env, napiGroupId);
4307 
4308     TaskGroupManager& taskGroupManager = TaskGroupManager::GetInstance();
4309     TaskGroup* group = taskGroupManager.GetTaskGroup(groupId);
4310     GroupInfo* groupInfo = new GroupInfo();
4311     groupInfo->priority = Priority::DEFAULT;
4312     group->currentGroupInfo_ = groupInfo;
4313     group->groupState_ = ExecuteState::CANCELED;
4314     taskGroupManager.StoreTaskGroup(groupId, group);
4315     napi_value result = NativeEngineTest::ExecuteGroup(env, taskGroupResult);
4316     ASSERT_TRUE(result != nullptr);
4317 }
4318 
4319 HWTEST_F(NativeEngineTest, TaskpoolTest220, testing::ext::TestSize.Level0)
4320 {
4321     napi_env env = (napi_env)engine_;
4322     ExceptionScope scope(env);
4323     size_t delayTime = 1000;
4324     napi_value result = nullptr;
4325     napi_value num = nullptr;
4326     napi_value priority = nullptr;
4327     napi_value exception = nullptr;
4328     napi_create_uint32(env, delayTime, &num);
4329     napi_create_uint32(env, 1, &priority);
4330 
4331     napi_value obj = CreateTaskObject(env, TaskType::TASK, ExecuteState::FINISHED);
4332     napi_value argv[] = { num, obj, priority };
4333     result = NativeEngineTest::ExecuteDelayed(env, argv, 3);
4334     ASSERT_TRUE(result != nullptr);
4335 
4336     obj = CreateTaskObject(env);
4337     napi_value argv1[] = { num, obj, priority };
4338     result = NativeEngineTest::ExecuteDelayed(env, argv1, 3);
4339     ASSERT_TRUE(result != nullptr);
4340 }
4341 
4342 HWTEST_F(NativeEngineTest, TaskpoolTest221, testing::ext::TestSize.Level0)
4343 {
4344     napi_env env = (napi_env)engine_;
4345     ExceptionScope scope(env);
4346     size_t delayTime = 1000;
4347     napi_value result = nullptr;
4348     napi_value num = nullptr;
4349     napi_value priority = nullptr;
4350     napi_value exception = nullptr;
4351     napi_create_uint32(env, delayTime, &num);
4352     napi_create_uint32(env, 1, &priority);
4353 
4354     napi_value obj = CreateTaskObject(env, TaskType::TASK, ExecuteState::FINISHED);
4355     napi_value argv[] = { num, obj, priority };
4356     result = NativeEngineTest::ExecuteDelayed(env, argv, 3);
4357     ASSERT_TRUE(result != nullptr);
4358 
4359     obj = CreateTaskObject(env);
4360     napi_value argv1[] = { num, obj, priority };
4361     result = NativeEngineTest::ExecuteDelayed(env, argv1, 3);
4362     ASSERT_TRUE(result != nullptr);
4363 }
4364 
4365 HWTEST_F(NativeEngineTest, TaskpoolTest222, testing::ext::TestSize.Level0)
4366 {
4367     napi_env env = (napi_env)engine_;
4368     ExceptionScope scope(env);
4369 
4370     napi_value thisValue = CreateTaskObject(env, TaskType::SEQRUNNER_TASK);
4371     napi_value argv[] = {thisValue};
4372     napi_value result = NativeEngineTest::Execute(env, argv, 1);
4373     ASSERT_TRUE(result == nullptr);
4374     napi_value exception = nullptr;
4375     napi_get_and_clear_last_exception(env, &exception);
4376 
4377     napi_value obj = NapiHelper::CreateObject(env);
4378     auto group = GeneratorTaskGroup(env, obj);
4379     napi_value argv1[] = {group};
4380     result = NativeEngineTest::Execute(env, argv1, 1);
4381     ASSERT_TRUE(result != nullptr);
4382 
4383     napi_value value = nullptr;
__anon15dbeb740b02(napi_env env, napi_callback_info info) 4384     auto func = [](napi_env env, napi_callback_info info) -> napi_value {
4385         return nullptr;
4386     };
4387     napi_create_function(env, "testFunc", NAPI_AUTO_LENGTH, func, nullptr, &value);
4388     napi_value argv2[] = {value};
4389     result = NativeEngineTest::Execute(env, argv2, 1);
4390     ASSERT_TRUE(result == nullptr);
4391 }
4392 
4393 HWTEST_F(NativeEngineTest, TaskpoolTest223, testing::ext::TestSize.Level0)
4394 {
4395     napi_env env = (napi_env)engine_;
4396     ExceptionScope scope(env);
4397     TaskManager &taskManager = TaskManager::GetInstance();
4398     napi_value exception = nullptr;
4399     uv_loop_t* loop = NapiHelper::GetLibUV(env);
4400     uv_update_time(loop);
4401     uv_timer_t* handle = new uv_timer_t;
4402     uv_timer_init(loop, handle);
4403     TaskMessage *taskMessage = new TaskMessage();
4404 
4405     napi_value global;
4406     napi_get_global(env, &global);
4407     auto napiTask = GeneratorTask(env, global);
4408     Task* task = nullptr;
4409     napi_unwrap(env, napiTask, reinterpret_cast<void**>(&task));
4410     task->taskState_ = ExecuteState::CANCELED;
4411 
4412     taskMessage->taskId = task->taskId_;
4413     handle->data = taskMessage;
4414     taskManager.StoreTask(task->taskId_, task);
4415     NativeEngineTest::DelayTask(handle);
4416     ASSERT_TRUE(true);
4417 }
4418 
4419 HWTEST_F(NativeEngineTest, TaskpoolTest224, testing::ext::TestSize.Level0)
4420 {
4421     napi_env env = (napi_env)engine_;
4422     ExceptionScope scope(env);
4423     TaskManager &taskManager = TaskManager::GetInstance();
4424     napi_value exception = nullptr;
4425     uv_loop_t* loop = NapiHelper::GetLibUV(env);
4426     uv_update_time(loop);
4427     uv_timer_t* handle = new uv_timer_t;
4428     uv_timer_init(loop, handle);
4429     TaskMessage *taskMessage = new TaskMessage();
4430 
4431     napi_value global;
4432     napi_get_global(env, &global);
4433     auto napiTask = GeneratorTask(env, global);
4434     Task* task = nullptr;
4435     napi_unwrap(env, napiTask, reinterpret_cast<void**>(&task));
4436     task->taskState_ = ExecuteState::DELAYED;
4437     taskMessage->taskId = task->taskId_;
4438     handle->data = taskMessage;
4439     taskManager.StoreTask(task->taskId_, task);
4440     NativeEngineTest::DelayTask(handle);
4441     ASSERT_TRUE(true);
4442 }
4443 
4444 HWTEST_F(NativeEngineTest, TaskpoolTest225, testing::ext::TestSize.Level0)
4445 {
4446     napi_env env = (napi_env)engine_;
4447     ExceptionScope scope(env);
4448     TaskManager &taskManager = TaskManager::GetInstance();
4449     napi_value exception = nullptr;
4450     uv_loop_t* loop = NapiHelper::GetLibUV(env);
4451     uv_update_time(loop);
4452     uv_timer_t* handle = new uv_timer_t;
4453     uv_timer_init(loop, handle);
4454     TaskMessage *taskMessage = new TaskMessage();
4455 
4456     napi_value global;
4457     napi_get_global(env, &global);
4458     auto napiTask = GeneratorTask(env, global);
4459     Task* task = nullptr;
4460     napi_unwrap(env, napiTask, reinterpret_cast<void**>(&task));
4461     task->taskState_ = ExecuteState::FINISHED;
4462     taskMessage->taskId = task->taskId_;
4463     handle->data = taskMessage;
4464     taskManager.StoreTask(task->taskId_, task);
4465     NativeEngineTest::DelayTask(handle);
4466     ASSERT_TRUE(true);
4467 }
4468 
4469 HWTEST_F(NativeEngineTest, TaskpoolTest226, testing::ext::TestSize.Level0)
4470 {
4471     napi_env env = (napi_env)engine_;
4472     ExceptionScope scope(env);
4473     napi_value global;
4474     napi_get_global(env, &global);
4475     auto napiTask = GeneratorTask(env, global);
4476     Task* task = nullptr;
4477     napi_unwrap(env, napiTask, reinterpret_cast<void**>(&task));
4478     task->taskType_ = TaskType::GROUP_COMMON_TASK;
4479     TaskPool::HandleTaskResultCallback(task);
4480     ASSERT_TRUE(true);
4481 }
4482 
4483 HWTEST_F(NativeEngineTest, TaskpoolTest227, testing::ext::TestSize.Level0)
4484 {
4485     napi_env env = (napi_env)engine_;
4486     ExceptionScope scope(env);
4487 
4488     napi_value thisValue = CreateTaskObject(env, TaskType::SEQRUNNER_TASK, ExecuteState::CANCELED);
4489     Task* task = nullptr;
4490     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
4491     TaskInfo* taskInfo = new TaskInfo();
4492     task->currentTaskInfo_ = taskInfo;
4493     task->seqRunnerId_ = 1;
4494     napi_value num = nullptr;
4495     napi_create_uint32(env, 1, &num);
4496     napi_ref callbackRef = Helper::NapiHelper::CreateReference(env, num, 1);
4497     task->onExecutionFailedCallBackInfo_ = new ListenerCallBackInfo(env, callbackRef, nullptr);
4498     TaskPool::HandleTaskResultCallback(task);
4499     ASSERT_TRUE(true);
4500 }
4501 
4502 HWTEST_F(NativeEngineTest, TaskpoolTest228, testing::ext::TestSize.Level0)
4503 {
4504     napi_env env = (napi_env)engine_;
4505     ExceptionScope scope(env);
4506 
4507     napi_value thisValue = CreateTaskObject(env);
4508     Task* task = nullptr;
4509     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&task));
4510     TaskInfo* taskInfo = new TaskInfo();
4511     task->currentTaskInfo_ = taskInfo;
4512     task->success_ = true;
4513     napi_value num = nullptr;
4514     napi_create_uint32(env, 1, &num);
4515     napi_ref callbackRef = Helper::NapiHelper::CreateReference(env, num, 1);
4516     task->onExecutionSucceededCallBackInfo_ = new ListenerCallBackInfo(env, callbackRef, nullptr);
4517     void* resultData = nullptr;
4518     napi_value undefined = NapiHelper::GetUndefinedValue(env);
4519     napi_status status = napi_serialize_inner(env, num, undefined, undefined,
4520                                               true, false, &resultData);
4521     task->result_ = resultData;
4522     TaskPool::HandleTaskResultCallback(task);
4523     ASSERT_TRUE(true);
4524 }
4525 
4526 HWTEST_F(NativeEngineTest, TaskpoolTest229, testing::ext::TestSize.Level0)
4527 {
4528     napi_env env = (napi_env)engine_;
4529     ExceptionScope scope(env);
4530     Task* task = new Task();
4531     uint64_t taskId = reinterpret_cast<uint64_t>(task);
4532     task->taskId_ = taskId;
4533     napi_value thisValue = NapiHelper::CreateObject(env);
4534     napi_ref ref = NapiHelper::CreateReference(env, thisValue, 0);
4535 
4536     CallbackInfo* cbInfo = new CallbackInfo(env, 1, ref, task);
4537 
4538     Worker* worker = reinterpret_cast<Worker*>(NativeEngineTest::WorkerConstructor(env));
4539     void* args = nullptr;
4540     TaskResultInfo* resultInfo = new TaskResultInfo(nullptr, env, taskId, args);
4541     worker->Enqueue(env, resultInfo);
4542     cbInfo->worker = worker;
4543     TaskPool::ExecuteCallbackTask(cbInfo);
4544     ASSERT_TRUE(true);
4545 }
4546 
4547 HWTEST_F(NativeEngineTest, TaskpoolTest230, testing::ext::TestSize.Level0)
4548 {
4549     napi_env env = (napi_env)engine_;
4550     uv_timer_t* handle = new uv_timer_t;
4551     TaskGroupManager& taskGroupManager = TaskGroupManager::GetInstance();
4552 
4553     TaskGroup* group = new TaskGroup();
4554     uint64_t groupId = reinterpret_cast<uint64_t>(group);
4555     group->groupId_ = groupId;
4556     Task* task = new Task();
4557     uint64_t taskId = reinterpret_cast<uint64_t>(task);
4558     task->taskId_ = taskId;
4559     task->groupId_ = groupId;
4560 
4561     group->taskIds_.push_back(taskId);
4562     handle->data = task;
4563 
4564     GroupInfo* groupInfo = new GroupInfo();
4565     groupInfo->priority = Priority::DEFAULT;
4566     napi_value resArr;
4567     napi_create_array_with_length(env, group->taskIds_.size(), &resArr);
4568     napi_ref arrRef = NapiHelper::CreateReference(env, resArr, 1);
4569     groupInfo->resArr = arrRef;
4570     NapiHelper::CreatePromise(env, &groupInfo->deferred);
4571     group->currentGroupInfo_ = groupInfo;
4572     group->taskNum_ = 2;
4573     taskGroupManager.StoreTaskGroup(groupId, group);
4574     napi_value value = NapiHelper::CreateUint64(env, groupId);
4575     napi_ref reference = NapiHelper::CreateReference(env, value, 0);
4576     taskGroupManager.AddTask(groupId, reference, taskId);
4577 
4578     napi_value res = nullptr;
4579     napi_create_uint32(env, 1, &res);
4580     NativeEngineTest::UpdateGroupInfoByResult(env, handle, res, true);
4581     ASSERT_TRUE(true);
4582 }
4583 
4584 HWTEST_F(NativeEngineTest, TaskpoolTest231, testing::ext::TestSize.Level0)
4585 {
4586     napi_env env = (napi_env)engine_;
4587     ExceptionScope scope(env);
4588     napi_value undefined = NapiHelper::GetUndefinedValue(env);
4589     napi_value thisVar = NapiHelper::CreateObject(env);
4590     napi_value taskGroup = GeneratorTaskGroup(env, thisVar);
4591     napi_value argv[] = {taskGroup};
4592     NativeEngineTest::Cancel(env, argv, 1);
4593     ASSERT_TRUE(true);
4594 }
4595 
4596 HWTEST_F(NativeEngineTest, TaskpoolTest232, testing::ext::TestSize.Level0)
4597 {
4598     napi_env env = (napi_env)engine_;
4599     NativeEngineTest::PerformTask(env);
4600     napi_value exception = nullptr;
4601     napi_get_and_clear_last_exception(env, &exception);
4602     ASSERT_TRUE(exception == nullptr);
4603 }
4604 
4605 HWTEST_F(NativeEngineTest, TaskpoolTest233, testing::ext::TestSize.Level0)
4606 {
4607     napi_env env = (napi_env)engine_;
4608     Task* task = new Task();
4609     task->SetValid(false);
4610     bool res = task->ShouldDeleteTask();
4611     ASSERT_TRUE(res);
4612     task->SetValid(true);
4613     task->refCount_ = 1;
4614     res = task->ShouldDeleteTask();
4615     ASSERT_TRUE(res == false);
4616     ASSERT_TRUE(task->refCount_ == 0);
4617 }
4618 
4619 HWTEST_F(NativeEngineTest, TaskpoolTest248, testing::ext::TestSize.Level0)
4620 {
4621     napi_env env = (napi_env)engine_;
4622     ExceptionScope scope(env);
4623     std::string func = "SeqRunnerConstructor";
4624     napi_value thisValue = NapiHelper::CreateObject(env);
4625     napi_value SeqCallback = nullptr;
4626     napi_value SeqResult = nullptr;
4627     napi_create_function(env, func.c_str(), func.size(), SequenceRunner::SeqRunnerConstructor, nullptr, &SeqCallback);
4628     napi_value SeqArgv[1] = {nullptr};
4629     napi_create_string_utf8(env, "seq248", NAPI_AUTO_LENGTH, &SeqArgv[0]);
4630     napi_call_function(env, thisValue, SeqCallback, 1, SeqArgv, &SeqResult);
4631 
4632     std::string funcName = "Execute";
4633     napi_value callback = nullptr;
4634     napi_value result = nullptr;
4635     napi_create_function(env, funcName.c_str(), funcName.size(), SequenceRunner::Execute, nullptr, &callback);
4636 
4637     napi_value task = CreateTaskObject(env);
4638     napi_value argv[] = {task};
4639     napi_call_function(env, thisValue, callback, 1, argv, &result);
4640     ASSERT_NE(result, nullptr);
4641 }
4642 
4643 HWTEST_F(NativeEngineTest, TaskpoolTest249, testing::ext::TestSize.Level0)
4644 {
4645     napi_env env = (napi_env)engine_;
4646     ExceptionScope scope(env);
4647     std::string func = "SeqRunnerConstructor";
4648     napi_value thisValue = NapiHelper::CreateObject(env);
4649     napi_value SeqCallback = nullptr;
4650     napi_value SeqResult = nullptr;
4651     napi_create_function(env, func.c_str(), func.size(), SequenceRunner::SeqRunnerConstructor, nullptr, &SeqCallback);
4652     napi_value SeqArgv[1] = {nullptr};
4653     napi_create_string_utf8(env, "seq249", NAPI_AUTO_LENGTH, &SeqArgv[0]);
4654     napi_call_function(env, thisValue, SeqCallback, 1, SeqArgv, &SeqResult);
4655 
4656     std::string funcName = "Execute";
4657     napi_value callback = nullptr;
4658     napi_value result = nullptr;
4659     napi_create_function(env, funcName.c_str(), funcName.size(), SequenceRunner::Execute, nullptr, &callback);
4660 
4661     SequenceRunner* seqRunner = nullptr;
4662     napi_unwrap(env, thisValue, reinterpret_cast<void**>(&seqRunner));
4663     SequenceRunnerManager::GetInstance().RemoveGlobalSeqRunnerRef(env, seqRunner);
4664 
4665     napi_value task = CreateTaskObject(env);
4666     napi_value argv[] = {task};
4667     napi_call_function(env, thisValue, callback, 1, argv, &result);
4668     ASSERT_NE(result, nullptr);
4669 }