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 &parameters));
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 &parameters) 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 &parameters)
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 }