1 /*
2  * Copyright (c) 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 <gtest/gtest.h>
17 #define private public
18 #include "operation_queue.h"
19 #undef private
20 #include "print_constant.h"
21 #include "print_log.h"
22 
23 using namespace testing;
24 using namespace testing::ext;
25 
26 namespace {
27 const int WAIT_TIME_MS = 100;
28 const size_t OPERATOIN_QUEUE_COUNT_TEST = 2;
29 }
30 
31 namespace OHOS {
32 namespace Print {
33 class OperatonQueueTest : public testing::Test {
34 public:
35     static void SetUpTestCase(void);
36     static void TearDownTestCase(void);
37     void SetUp();
38     void TearDown();
39 };
40 
SetUpTestCase(void)41 void OperatonQueueTest::SetUpTestCase(void) {}
42 
TearDownTestCase(void)43 void OperatonQueueTest::TearDownTestCase(void) {}
44 
SetUp(void)45 void OperatonQueueTest::SetUp(void)
46 {
47     static int32_t testNo = 0;
48     PRINT_HILOGI("OperatonQueueTest_%{public}d", ++testNo);
49 }
50 
TearDown(void)51 void OperatonQueueTest::TearDown(void) {}
52 
53 HWTEST_F(OperatonQueueTest, OperatonQueueTest_0001, TestSize.Level1)
54 {
55     PRINT_HILOGI("OperatonQueueTest_0001 enter");
56     OperationQueue operationQueue;
57     operationQueue.Stop();
58     operationQueue.Run();
59     EXPECT_TRUE(operationQueue.isRunning);
60     operationQueue.Run();
61     ThreadSyncWait syncWait;
62     syncWait.Wait(WAIT_TIME_MS);
63     operationQueue.Stop();
64     EXPECT_FALSE(operationQueue.isRunning);
65     PRINT_HILOGI("OperatonQueueTest_0001 quit");
66 }
67 
68 HWTEST_F(OperatonQueueTest, OperatonQueueTest_0002, TestSize.Level2)
69 {
70     PRINT_HILOGI("OperatonQueueTest_0002 enter");
__anon94e8c5aa0202() 71     std::function<void()> op = []() {
72         ThreadSyncWait syncWait;
73         PRINT_HILOGI("wait begin");
74         syncWait.Wait(WAIT_TIME_MS);
75         PRINT_HILOGI("wait end");
76     };
77     OperationQueue operationQueue;
78     EXPECT_EQ(operationQueue.Push(op), false);
79     operationQueue.maxCount = OPERATOIN_QUEUE_COUNT_TEST;
80     operationQueue.Run();
81     EXPECT_TRUE(operationQueue.isRunning);
82     EXPECT_EQ(operationQueue.Push(op), true);
83     operationQueue.Push(op);
84     operationQueue.Push(op);
85     ThreadSyncWait syncWait;
86     syncWait.Wait(WAIT_TIME_MS);
87     PRINT_HILOGI("stop queue");
88     operationQueue.Stop();
89     EXPECT_FALSE(operationQueue.isRunning);
90     PRINT_HILOGI("OperatonQueueTest_0002 quit");
91 }
92 
93 HWTEST_F(OperatonQueueTest, OperatonQueueTest_0003, TestSize.Level2)
94 {
95     ThreadSyncWait syncWait;
96     OperationQueue operationQueue;
97     operationQueue.Run();
98     EXPECT_TRUE(operationQueue.isRunning);
99     syncWait.Wait(WAIT_TIME_MS);
100     operationQueue.Stop();
101     EXPECT_FALSE(operationQueue.isRunning);
102     operationQueue.Stop();
103     syncWait.Wait(WAIT_TIME_MS);
104     operationQueue.Run();
105     syncWait.Wait(WAIT_TIME_MS);
106     EXPECT_TRUE(operationQueue.isRunning);
107     operationQueue.Run();
108     operationQueue.Stop();
109     syncWait.Wait(WAIT_TIME_MS);
110     EXPECT_FALSE(operationQueue.isRunning);
111 }
112 }  // namespace Print
113 }  // namespace OHOS