1 /*
2 * Copyright (c) 2021 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 <cstring>
17 #include <fcntl.h>
18 #include <gtest/gtest.h>
19 #include <iostream>
20 #include <sys/mman.h>
21 #include <sys/stat.h>
22 #include <unistd.h>
23 #include "log.h"
24 #include "pkg_algorithm.h"
25 #include "script_instruction.h"
26 #include "script_manager.h"
27 #include "script_utils.h"
28 #include "thread_pool.h"
29 #include "unittest_comm.h"
30
31 using namespace std;
32 using namespace Hpackage;
33 using namespace Uscript;
34 using namespace Updater;
35 using namespace testing::ext;
36
37 namespace {
38 const int32_t MAX_TASK_NUMBER = 5;
39
40 class ThreadPoolUnitTest : public ::testing::Test {
41 public:
ThreadPoolUnitTest()42 ThreadPoolUnitTest() : threadPool_(ThreadPool::CreateThreadPool(MAX_TASK_NUMBER)) {}
43
~ThreadPoolUnitTest()44 ~ThreadPoolUnitTest()
45 {
46 ThreadPool::Destroy();
47 threadPool_ = nullptr;
48 }
49
TestThreadPoolCreate(const int32_t taskNumber)50 int TestThreadPoolCreate(const int32_t taskNumber)
51 {
52 if (threadPool_ == nullptr) {
53 USCRIPT_LOGE("Fail to create thread pool");
54 return USCRIPT_INVALID_PARAM;
55 }
56 Task task;
57 int32_t ret = USCRIPT_SUCCESS;
58 size_t taskNumberRound = 20;
59 task.workSize = taskNumber;
60 task.processor = [&](int iter) {
61 for (size_t i = iter; i < taskNumberRound; i += taskNumber) {
62 LOG(INFO) << "Run thread " << i << " " << gettid();
63 }
64 };
65 ThreadPool::AddTask(std::move(task));
66 return ret;
67 }
68
69 protected:
SetUp()70 void SetUp() {}
TearDown()71 void TearDown() {}
TestBody()72 void TestBody() {}
73
74 private:
75 ThreadPool* threadPool_;
76 };
77
HWTEST_F(ThreadPoolUnitTest, TestThreadPoolCreate, TestSize.Level0)78 HWTEST_F(ThreadPoolUnitTest, TestThreadPoolCreate, TestSize.Level0)
79 {
80 ThreadPoolUnitTest test;
81 for (size_t i = 0; i < MAX_TASK_NUMBER * 2; i++) {
82 EXPECT_EQ(0, test.TestThreadPoolCreate(MAX_TASK_NUMBER + 2));
83 }
84 }
85
HWTEST_F(ThreadPoolUnitTest, TestThreadOneCreate, TestSize.Level0)86 HWTEST_F(ThreadPoolUnitTest, TestThreadOneCreate, TestSize.Level0)
87 {
88 ThreadPoolUnitTest test;
89 EXPECT_EQ(0, test.TestThreadPoolCreate(1));
90 }
91 }
92