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 #include <chrono>
18 #include <future>
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 {
39 }
40
TearDownTestCase()41 void PatternDetachCallbackTest::TearDownTestCase()
42 {
43 }
44
SetUp()45 void PatternDetachCallbackTest::SetUp()
46 {
47 patternDetachCallback_ = new (std::nothrow) PatternDetachCallback();
48 }
49
TearDown()50 void PatternDetachCallbackTest::TearDown()
51 {
52 }
53
54 namespace {
55 /**
56 * @tc.name: GetResult01
57 * @tc.desc: GetResult Test
58 * @tc.type: FUNC
59 */
60 HWTEST_F(PatternDetachCallbackTest, GetResult01, Function | SmallTest | Level2)
61 {
62 int32_t maxWaitTime = 300;
63 auto startTime = std::chrono::duration_cast<std::chrono::milliseconds>(
64 std::chrono::system_clock::now().time_since_epoch()).count();
65 patternDetachCallback_->GetResult(maxWaitTime);
66 auto endTime = std::chrono::duration_cast<std::chrono::milliseconds>(
67 std::chrono::system_clock::now().time_since_epoch()).count();
68 auto waitTime = endTime - startTime;
69 GTEST_LOG_(INFO) << "GetResult waitTime:" << waitTime;
70 ASSERT_TRUE(waitTime >= maxWaitTime);
71 }
72
73 /**
74 * @tc.name: GetResult02
75 * @tc.desc: GetResult Test
76 * @tc.type: FUNC
77 */
78 HWTEST_F(PatternDetachCallbackTest, GetResult02, Function | SmallTest | Level2)
79 {
80 int32_t maxWaitTime = 300;
81 int32_t sleepTime = 200;
__anond4858c420202() 82 std::future<void> future = std::async(std::launch::async, [this, sleepTime]() -> void {
83 std::this_thread::sleep_for(std::chrono::milliseconds(sleepTime));
84 patternDetachCallback_->OnPatternDetach(0);
85 });
86 auto startTime = std::chrono::duration_cast<std::chrono::milliseconds>(
87 std::chrono::system_clock::now().time_since_epoch()).count();
88 patternDetachCallback_->GetResult(maxWaitTime);
89 auto endTime = std::chrono::duration_cast<std::chrono::milliseconds>(
90 std::chrono::system_clock::now().time_since_epoch()).count();
91 auto waitTime = endTime - startTime;
92 GTEST_LOG_(INFO) << "GetResultAndOnPatternDetach waitTime:" << waitTime;
93 ASSERT_TRUE(waitTime >= sleepTime && waitTime < maxWaitTime);
94 }
95
96 /**
97 * @tc.name: GetResult03
98 * @tc.desc: GetResult Test
99 * @tc.type: FUNC
100 */
101 HWTEST_F(PatternDetachCallbackTest, GetResult03, Function | SmallTest | Level2)
102 {
103 int32_t maxWaitTime = 300;
104 int32_t sleepTime = 400;
__anond4858c420302() 105 std::future<void> future = std::async(std::launch::async, [this, sleepTime]() -> void {
106 std::this_thread::sleep_for(std::chrono::milliseconds(sleepTime));
107 patternDetachCallback_->OnPatternDetach(0);
108 });
109 auto startTime = std::chrono::duration_cast<std::chrono::milliseconds>(
110 std::chrono::system_clock::now().time_since_epoch()).count();
111 patternDetachCallback_->GetResult(maxWaitTime);
112 auto endTime = std::chrono::duration_cast<std::chrono::milliseconds>(
113 std::chrono::system_clock::now().time_since_epoch()).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;
__anond4858c420402() 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 = static_cast<uint32_t>(
140 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 }
146 } // namespace Rosen
147 } // namespace OHOS