1484543d1Sopenharmony_ci/*
2484543d1Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
3484543d1Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4484543d1Sopenharmony_ci * you may not use this file except in compliance with the License.
5484543d1Sopenharmony_ci * You may obtain a copy of the License at
6484543d1Sopenharmony_ci *
7484543d1Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8484543d1Sopenharmony_ci *
9484543d1Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10484543d1Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11484543d1Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12484543d1Sopenharmony_ci * See the License for the specific language governing permissions and
13484543d1Sopenharmony_ci * limitations under the License.
14484543d1Sopenharmony_ci */
15484543d1Sopenharmony_ci#include <gtest/gtest.h>
16484543d1Sopenharmony_ci#include <thread>
17484543d1Sopenharmony_ci#include <climits>
18484543d1Sopenharmony_ci#include <cstring>
19484543d1Sopenharmony_ci#include "eu/worker_manager.h"
20484543d1Sopenharmony_ci#include "eu/scpuworker_manager.h"
21484543d1Sopenharmony_ci#include "eu/cpu_monitor.h"
22484543d1Sopenharmony_ci#ifdef FFRT_GITEE
23484543d1Sopenharmony_ci#include "eu/cpu_manager_interface.h"
24484543d1Sopenharmony_ci#else
25484543d1Sopenharmony_ci#include "eu/cpu_manager_strategy.h"
26484543d1Sopenharmony_ci#endif
27484543d1Sopenharmony_ci#include "sched/scheduler.h"
28484543d1Sopenharmony_ci#include "sched/workgroup_internal.h"
29484543d1Sopenharmony_ci#include "common.h"
30484543d1Sopenharmony_ci
31484543d1Sopenharmony_ciusing namespace testing;
32484543d1Sopenharmony_ci#ifdef HWTEST_TESTING_EXT_ENABLE
33484543d1Sopenharmony_ciusing namespace testing::ext;
34484543d1Sopenharmony_ci#endif
35484543d1Sopenharmony_ciusing namespace ffrt;
36484543d1Sopenharmony_ci
37484543d1Sopenharmony_ciclass WorkerManagerTest : public testing::Test {
38484543d1Sopenharmony_ciprotected:
39484543d1Sopenharmony_ci    static void SetUpTestCase()
40484543d1Sopenharmony_ci    {
41484543d1Sopenharmony_ci    }
42484543d1Sopenharmony_ci
43484543d1Sopenharmony_ci    static void TearDownTestCase()
44484543d1Sopenharmony_ci    {
45484543d1Sopenharmony_ci    }
46484543d1Sopenharmony_ci
47484543d1Sopenharmony_ci    virtual void SetUp()
48484543d1Sopenharmony_ci    {
49484543d1Sopenharmony_ci    }
50484543d1Sopenharmony_ci
51484543d1Sopenharmony_ci    virtual void TearDown()
52484543d1Sopenharmony_ci    {
53484543d1Sopenharmony_ci    }
54484543d1Sopenharmony_ci};
55484543d1Sopenharmony_ci
56484543d1Sopenharmony_ci/**
57484543d1Sopenharmony_ci * @tc.name: JoinRtgTest
58484543d1Sopenharmony_ci * @tc.desc: Test whether the JoinRtg interface are normal.
59484543d1Sopenharmony_ci * @tc.type: FUNC
60484543d1Sopenharmony_ci */
61484543d1Sopenharmony_ciHWTEST_F(WorkerManagerTest, JoinRtgTest, TestSize.Level1)
62484543d1Sopenharmony_ci{
63484543d1Sopenharmony_ci    CPUWorkerManager* cm = new SCPUWorkerManager();
64484543d1Sopenharmony_ci    QoS* qos = new QoS();
65484543d1Sopenharmony_ci    cm->JoinRtg(*qos);
66484543d1Sopenharmony_ci}
67484543d1Sopenharmony_ci
68484543d1Sopenharmony_ci/**
69484543d1Sopenharmony_ci * @tc.name: JoinTGTest
70484543d1Sopenharmony_ci * @tc.desc: Test whether the JoinTG interface are normal.
71484543d1Sopenharmony_ci * @tc.type: FUNC
72484543d1Sopenharmony_ci */
73484543d1Sopenharmony_ciHWTEST_F(WorkerManagerTest, JoinTGTest, TestSize.Level1)
74484543d1Sopenharmony_ci{
75484543d1Sopenharmony_ci    CPUWorkerManager* cm = new SCPUWorkerManager();
76484543d1Sopenharmony_ci    QoS* qos = new QoS(ffrt_qos_deadline_request);
77484543d1Sopenharmony_ci    ThreadGroup* tg = cm->JoinTG(*qos);
78484543d1Sopenharmony_ci    EXPECT_NE(tg, nullptr);
79484543d1Sopenharmony_ci
80484543d1Sopenharmony_ci    QoS* qos1 = new QoS(ffrt_qos_user_interactive);
81484543d1Sopenharmony_ci    ThreadGroup* tg1 = cm->JoinTG(*qos1);
82484543d1Sopenharmony_ci    EXPECT_EQ(tg1, nullptr);
83484543d1Sopenharmony_ci}
84484543d1Sopenharmony_ci
85484543d1Sopenharmony_ci/**
86484543d1Sopenharmony_ci * @tc.name: LeaveTGTest
87484543d1Sopenharmony_ci * @tc.desc: Test whether the LeaveTG interface are normal.
88484543d1Sopenharmony_ci * @tc.type: FUNC
89484543d1Sopenharmony_ci */
90484543d1Sopenharmony_ciHWTEST_F(WorkerManagerTest, LeaveTGTest, TestSize.Level1)
91484543d1Sopenharmony_ci{
92484543d1Sopenharmony_ci    CPUWorkerManager* cm = new SCPUWorkerManager();
93484543d1Sopenharmony_ci    QoS* qos = new QoS();
94484543d1Sopenharmony_ci    cm->LeaveTG(*qos);
95484543d1Sopenharmony_ci}
96