• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 <chrono>
17 #include <future>
18 #include <gtest/gtest.h>
19 #include <limits>
20 
21 #include "pattern_detach_callback.h"
22 
23 using namespace testing;
24 using namespace testing::ext;
25 
26 namespace OHOS {
27 namespace Rosen {
28 class PatternDetachCallbackTest : public testing::Test {
29 public:
30     static void SetUpTestCase();
31     static void TearDownTestCase();
32     void SetUp() override;
33     void TearDown() override;
34     sptr<PatternDetachCallback> patternDetachCallback_;
35 };
36 
SetUpTestCase()37 void PatternDetachCallbackTest::SetUpTestCase() {}
38 
TearDownTestCase()39 void PatternDetachCallbackTest::TearDownTestCase() {}
40 
SetUp()41 void PatternDetachCallbackTest::SetUp()
42 {
43     patternDetachCallback_ = new (std::nothrow) PatternDetachCallback();
44 }
45 
TearDown()46 void PatternDetachCallbackTest::TearDown() {}
47 
48 namespace {
49 /**
50  * @tc.name: GetResult01
51  * @tc.desc: GetResult Test
52  * @tc.type: FUNC
53  */
54 HWTEST_F(PatternDetachCallbackTest, GetResult01, Function | SmallTest | Level2)
55 {
56     int32_t maxWaitTime = 300;
57     auto startTime =
58         std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch())
59             .count();
60     patternDetachCallback_->GetResult(maxWaitTime);
61     auto endTime =
62         std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch())
63             .count();
64     auto waitTime = endTime - startTime;
65     GTEST_LOG_(INFO) << "GetResult waitTime:" << waitTime;
66     ASSERT_TRUE(waitTime >= maxWaitTime);
67 }
68 
69 /**
70  * @tc.name: GetResult02
71  * @tc.desc: GetResult Test
72  * @tc.type: FUNC
73  */
74 HWTEST_F(PatternDetachCallbackTest, GetResult02, Function | SmallTest | Level2)
75 {
76     int32_t maxWaitTime = 300;
77     int32_t sleepTime = 200;
__anon03774a4a0202() 78     std::future<void> future = std::async(std::launch::async, [this, sleepTime]() -> void {
79         std::this_thread::sleep_for(std::chrono::milliseconds(sleepTime));
80         patternDetachCallback_->OnPatternDetach(0);
81     });
82     auto startTime =
83         std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch())
84             .count();
85     patternDetachCallback_->GetResult(maxWaitTime);
86     auto endTime =
87         std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch())
88             .count();
89     auto waitTime = endTime - startTime;
90     GTEST_LOG_(INFO) << "GetResultAndOnPatternDetach waitTime:" << waitTime;
91     ASSERT_TRUE(waitTime >= sleepTime && waitTime < maxWaitTime);
92 }
93 
94 /**
95  * @tc.name: GetResult03
96  * @tc.desc: GetResult Test
97  * @tc.type: FUNC
98  */
99 HWTEST_F(PatternDetachCallbackTest, GetResult03, Function | SmallTest | Level2)
100 {
101     int32_t maxWaitTime = 300;
102     int32_t sleepTime = 400;
__anon03774a4a0302() 103     std::future<void> future = std::async(std::launch::async, [this, sleepTime]() -> void {
104         std::this_thread::sleep_for(std::chrono::milliseconds(sleepTime));
105         patternDetachCallback_->OnPatternDetach(0);
106     });
107     auto startTime =
108         std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch())
109             .count();
110     patternDetachCallback_->GetResult(maxWaitTime);
111     auto endTime =
112         std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch())
113             .count();
114     auto waitTime = endTime - startTime;
115     GTEST_LOG_(INFO) << "GetResultAndOnPatternDetach waitTime:" << waitTime;
116     ASSERT_TRUE(waitTime >= maxWaitTime && waitTime < sleepTime);
117 
118     int resultValue = 0;
__anon03774a4a0402() 119     std::function<void()> func = [this, &resultValue]() {
120         patternDetachCallback_->GetResult(std::numeric_limits<int>::max());
121         resultValue = 1;
122     };
123     func();
124     ASSERT_EQ(resultValue, 1);
125 }
126 
127 /**
128  * @tc.name: OnRemoteRequest01
129  * @tc.desc: OnRemoteRequest Test
130  * @tc.type: FUNC
131  */
132 HWTEST_F(PatternDetachCallbackTest, OnRemoteRequest01, Function | SmallTest | Level2)
133 {
134     MessageParcel data;
135     MessageParcel reply;
136     MessageOption option;
137     data.WriteInterfaceToken(u"error.GetDescriptor");
138 
139     uint32_t code =
140         static_cast<uint32_t>(IPatternDetachCallback::PatternDetachCallbackMessage::TRANS_ID_PATTERN_ON_DETACH);
141     int res = patternDetachCallback_->OnRemoteRequest(code, data, reply, option);
142     EXPECT_EQ(res, ERR_TRANSACTION_FAILED);
143 }
144 
145 } // namespace
146 } // namespace Rosen
147 } // namespace OHOS