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