1 /*
2 * Copyright (c) 2023 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 <gmock/gmock.h>
18
19 #include "account_log_wrapper.h"
20 #define private public
21 #include "app_account_authorization_extension_callback.h"
22 #include "app_account_authorization_extension_callback_client.h"
23 #include "app_account_authorization_extension_callback_service.h"
24 #include "app_account_authorization_extension_proxy.h"
25 #include "app_account_authorization_extension_service.h"
26 #include "app_account_authorization_extension_stub.h"
27 #undef private
28 #include "app_account_common.h"
29 #include "js_runtime.h"
30 #include "want.h"
31
32 using namespace testing::ext;
33 using namespace testing;
34 using namespace OHOS;
35 using namespace OHOS::AccountSA;
36
37 class MockAppAccountAuthorizationExtensionCallback {
38 public:
39 MOCK_METHOD2(OnResult, void(const int32_t errCode, const AAFwk::WantParams ¶meters));
40 };
41
42 class TestAppAccountAuthorizationExtensionCallback : public AppAccountAuthorizationExtensionCallback {
43 public:
TestAppAccountAuthorizationExtensionCallback(const std::shared_ptr<MockAppAccountAuthorizationExtensionCallback> & callback)44 explicit TestAppAccountAuthorizationExtensionCallback(
45 const std::shared_ptr<MockAppAccountAuthorizationExtensionCallback> &callback)
46 : callback_(callback)
47 {}
48 virtual ~TestAppAccountAuthorizationExtensionCallback();
49 void OnResult(const AsyncCallbackError &businessError, const AAFwk::WantParams ¶meters) override;
50 void OnRequestRedirected(const AAFwk::Want &request) override;
51
52 private:
53 std::shared_ptr<MockAppAccountAuthorizationExtensionCallback> callback_;
54 };
55
~TestAppAccountAuthorizationExtensionCallback()56 TestAppAccountAuthorizationExtensionCallback::~TestAppAccountAuthorizationExtensionCallback()
57 {}
58
OnResult(const AsyncCallbackError & businessError,const AAFwk::WantParams & parameters)59 void TestAppAccountAuthorizationExtensionCallback::OnResult(
60 const AsyncCallbackError &businessError, const AAFwk::WantParams ¶meters)
61 {
62 callback_->OnResult(businessError.code, parameters);
63 }
64
OnRequestRedirected(const AAFwk::Want & request)65 void TestAppAccountAuthorizationExtensionCallback::OnRequestRedirected(const AAFwk::Want &request)
66 {}
67
68 class AppAccountExtensionModuleTest : public testing::Test {
69 public:
70 static void SetUpTestCase(void);
71 static void TearDownTestCase(void);
72 void SetUp(void) override;
73 void TearDown(void) override;
74 sptr<AppAccountAuthorizationExtensionCallbackProxy> callbackProxyPtr_ = nullptr;
75 sptr<AppAccountAuthorizationExtensionCallbackService> callbackServicePtr_ = nullptr;
76 sptr<IRemoteObject> MockService_ = nullptr;
77 };
78
SetUpTestCase(void)79 void AppAccountExtensionModuleTest::SetUpTestCase(void)
80 {}
81
TearDownTestCase(void)82 void AppAccountExtensionModuleTest::TearDownTestCase(void)
83 {
84 GTEST_LOG_(INFO) << "TearDownTestCase enter";
85 }
86
SetUp(void)87 void AppAccountExtensionModuleTest::SetUp(void) __attribute__((no_sanitize("cfi")))
88 {
89 testing::UnitTest *test = testing::UnitTest::GetInstance();
90 ASSERT_NE(test, nullptr);
91 const testing::TestInfo *testinfo = test->current_test_info();
92 ASSERT_NE(testinfo, nullptr);
93 string testCaseName = string(testinfo->name());
94 ACCOUNT_LOGI("[SetUp] %{public}s start", testCaseName.c_str());
95
96 AuthorizationExtensionOnResultCallbackFunc onResultFunc;
97 AuthorizationExtensionOnRequestRedirectedCallbackFunc onRequestRedirectedFunc;
98 callbackServicePtr_ =
99 new (std::nothrow) AppAccountAuthorizationExtensionCallbackService(onResultFunc, onRequestRedirectedFunc);
100 ASSERT_NE(callbackServicePtr_, nullptr);
101 MockService_ = callbackServicePtr_->AsObject();
102 callbackProxyPtr_ = new (std::nothrow) AppAccountAuthorizationExtensionCallbackProxy(MockService_);
103 }
104
TearDown(void)105 void AppAccountExtensionModuleTest::TearDown(void)
106 {}
107
108 /**
109 * @tc.name: AppAccountAuthorizationExtensionCallbackProxy_001
110 * @tc.desc: test AppAccountAuthorizationExtensionCallbackProxy OnResult.
111 * @tc.type: FUNC
112 * @tc.require: issuesI7AVZ5
113 */
114 HWTEST_F(AppAccountExtensionModuleTest, AppAccountAuthorizationExtensionCallbackProxy_001, TestSize.Level1)
115 {
116 AAFwk::WantParams parameters;
117 AsyncCallbackError businessError;
118 ASSERT_NE(callbackProxyPtr_, nullptr);
119 callbackProxyPtr_->OnResult(businessError, parameters);
120 EXPECT_EQ(businessError.code, 0);
121 }
122
123 /**
124 * @tc.name: AppAccountAuthorizationExtensionCallbackStub_001
125 * @tc.desc: test AppAccountAuthorizationExtensionCallbackStub OnRemoteRequest abnormal branch.
126 * @tc.type: FUNC
127 * @tc.require: issuesI7AVZ5
128 */
129 HWTEST_F(AppAccountExtensionModuleTest, AppAccountAuthorizationExtensionCallbackStub_001, TestSize.Level1)
130 {
131 AAFwk::WantParams parameters;
132 EXPECT_NE(callbackServicePtr_, nullptr);
133 MessageParcel data;
134 MessageParcel reply;
135 MessageOption option;
136 EXPECT_EQ(callbackServicePtr_->OnRemoteRequest(0, data, reply, option), ERR_ACCOUNT_COMMON_CHECK_DESCRIPTOR_ERROR);
137 }
138
139 /**
140 * @tc.name: OnRequestRedirected_001
141 * @tc.desc: test OnRequestRedirected callback client cov
142 * @tc.type: FUNC
143 * @tc.require:
144 */
145 HWTEST_F(AppAccountExtensionModuleTest, OnRequestRedirected_001, TestSize.Level1)
146 {
147 auto callbackClient = new (std::nothrow) AppAccountAuthorizationExtensionCallbackClient(callbackProxyPtr_);
148 ASSERT_NE(callbackClient, nullptr);
149 AAFwk::Want request;
150 callbackClient->OnRequestRedirected(request);
151 EXPECT_NE(callbackClient->proxy_, nullptr);
152 }
153
154 /**
155 * @tc.name: OnRequestRedirected_002
156 * @tc.desc: test OnRequestRedirected callback stub cov
157 * @tc.type: FUNC
158 * @tc.require:
159 */
160 HWTEST_F(AppAccountExtensionModuleTest, OnRequestRedirected_002, TestSize.Level1)
161 {
162 MessageParcel data;
163 MessageParcel reply;
164 MessageOption option;
165 EXPECT_EQ(callbackServicePtr_->OnRemoteRequest(1, data, reply, option), ERR_ACCOUNT_COMMON_CHECK_DESCRIPTOR_ERROR);
166 }
167
168 /**
169 * @tc.name: OnRequestRedirected_003
170 * @tc.desc: test OnRequestRedirected callback stub cov
171 * @tc.type: FUNC
172 * @tc.require:
173 */
174 HWTEST_F(AppAccountExtensionModuleTest, OnRequestRedirected_003, TestSize.Level1)
175 {
176 MessageParcel data;
177 MessageParcel reply;
178 AAFwk::Want request;
179 EXPECT_EQ(data.WriteParcelable(&request), true);
180 EXPECT_EQ(callbackServicePtr_->ProcOnRequestRedirected(data, reply), ERR_NONE);
181 }
182
183 /**
184 * @tc.name: OnRequestRedirected_004
185 * @tc.desc: test OnRequestRedirected callback stub cov
186 * @tc.type: FUNC
187 * @tc.require:
188 */
189 HWTEST_F(AppAccountExtensionModuleTest, OnRequestRedirected_004, TestSize.Level1)
190 {
191 auto callbackClient = new (std::nothrow) AppAccountAuthorizationExtensionCallbackClient(nullptr);
192 ASSERT_NE(callbackClient, nullptr);
193 AAFwk::Want request;
194 callbackClient->OnRequestRedirected(request);
195 EXPECT_EQ(callbackClient->proxy_, nullptr);
196 }