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