1 /*
2  * Copyright (c) 2022 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 
18 #include "account_log_wrapper.h"
19 #include "app_mgr_constants.h"
20 #define protected public
21 #define private public
22 #include "app_account_authenticator_session.h"
23 #include "app_account_check_labels_callback.h"
24 #include "app_account_check_labels_session.h"
25 #include "app_account_info.h"
26 #include "app_account_constants.h"
27 #undef private
28 #undef protected
29 
30 using namespace testing;
31 using namespace testing::ext;
32 using namespace OHOS;
33 using namespace OHOS::AccountSA;
34 
35 namespace {
36 const std::string NAME = "NAME";
37 const std::string SESSION_ID = "256";
38 const std::string OWNER = "owner";
39 const std::int32_t NUMBER_SIZE = 1;
40 const std::int32_t NUMBER_ZERO = 0;
41 }
42 
43 class AppAccountCheckLabelsModuleTest : public testing::Test {
44 public:
45     static void SetUpTestCase(void);
46     static void TearDownTestCase(void);
47     void SetUp(void) override;
48     void TearDown(void) override;
49     std::shared_ptr<AppAccountCheckLabelsSession> appAccountCheckLabelsSessionPtr;
50     std::shared_ptr<AppAccountCheckLabelsCallback> appAccountCheckLabelsCallbackPtr;
51 };
52 
SetUpTestCase(void)53 void AppAccountCheckLabelsModuleTest::SetUpTestCase(void)
54 {}
55 
TearDownTestCase(void)56 void AppAccountCheckLabelsModuleTest::TearDownTestCase(void)
57 {}
58 
SetUp(void)59 void AppAccountCheckLabelsModuleTest::SetUp(void) __attribute__((no_sanitize("cfi")))
60 {
61     testing::UnitTest *test = testing::UnitTest::GetInstance();
62     ASSERT_NE(test, nullptr);
63     const testing::TestInfo *testinfo = test->current_test_info();
64     ASSERT_NE(testinfo, nullptr);
65     string testCaseName = string(testinfo->name());
66     ACCOUNT_LOGI("[SetUp] %{public}s start", testCaseName.c_str());
67 
68     AppAccountInfo testAppAccountInfo(NAME, OWNER);
69     std::vector<AppAccountInfo> accounts;
70     accounts.emplace_back(testAppAccountInfo);
71     AuthenticatorSessionRequest request;
72     request.name = NAME;
73     appAccountCheckLabelsSessionPtr = std::make_shared<AppAccountCheckLabelsSession>(accounts, request);
74     appAccountCheckLabelsCallbackPtr = std::make_shared<AppAccountCheckLabelsCallback>(accounts, request, SESSION_ID);
75 }
76 
TearDown(void)77 void AppAccountCheckLabelsModuleTest::TearDown(void)
78 {}
79 
80 /**
81  * @tc.name: AppAccountAuthenticateTest_Open_0100
82  * @tc.desc: test AppAccountCheckLabelsSession func failed with open twice.
83  * @tc.type: FUNC
84  * @tc.require:
85  */
86 HWTEST_F(AppAccountCheckLabelsModuleTest, AppAccountCheckLabelsModuleTest_Open_0100, TestSize.Level1)
87 {
88     ASSERT_NE(appAccountCheckLabelsSessionPtr, nullptr);
89 
90     ErrCode result = appAccountCheckLabelsSessionPtr->Open();
91     ASSERT_EQ(result, ERR_OK);
92     result = appAccountCheckLabelsSessionPtr->Open();
93     ASSERT_EQ(result, ERR_APPACCOUNT_SERVICE_OAUTH_SERVICE_EXCEPTION);
94 }
95 
96 /**
97  * @tc.name: AppAccountAuthenticateTest_CheckLabels_0100
98  * @tc.desc: test AppAccountCheckLabelsSession func CheckLabels success.
99  * @tc.type: FUNC
100  * @tc.require:
101  */
102 HWTEST_F(AppAccountCheckLabelsModuleTest, AppAccountCheckLabelsModuleTest_CheckLabels_0100, TestSize.Level1)
103 {
104     ASSERT_NE(appAccountCheckLabelsSessionPtr, nullptr);
105 
106     std::vector<AppAccountInfo> accounts;
107     AuthenticatorSessionRequest request;
108     std::string sessionId = SESSION_ID;
109     AppAccountInfo testAppAccountInfo(NAME, OWNER);
110     accounts.emplace_back(testAppAccountInfo);
111     appAccountCheckLabelsSessionPtr->checkCallback_ =
112         new (std::nothrow) AppAccountCheckLabelsCallback(accounts, request, sessionId);
113     ASSERT_NE(appAccountCheckLabelsSessionPtr->checkCallback_, nullptr);
114     ErrCode result = appAccountCheckLabelsSessionPtr->CheckLabels();
115     ASSERT_EQ(result, ERR_OK);
116 }
117 
118 /**
119  * @tc.name: AppAccountAuthenticateTest_GetRequest_0100
120  * @tc.desc: test AppAccountCheckLabelsSession func GetRequest success.
121  * @tc.type: FUNC
122  * @tc.require:
123  */
124 HWTEST_F(AppAccountCheckLabelsModuleTest, AppAccountCheckLabelsModuleTest_GetRequest_0100, TestSize.Level1)
125 {
126     ASSERT_NE(appAccountCheckLabelsSessionPtr, nullptr);
127 
128     AuthenticatorSessionRequest resultRequest;
129     appAccountCheckLabelsSessionPtr->GetRequest(resultRequest);
130     ASSERT_EQ(resultRequest.name, NAME);
131 }
132 
133 /**
134  * @tc.name: AppAccountAuthenticateTest_GetRequest_0100
135  * @tc.desc: test AppAccountCheckLabelsCallback func OnResult success.
136  * @tc.type: FUNC
137  * @tc.require:
138  */
139 HWTEST_F(AppAccountCheckLabelsModuleTest, AppAccountCheckLabelsModuleTest_OnResult_0100, TestSize.Level1)
140 {
141     ASSERT_NE(appAccountCheckLabelsCallbackPtr, nullptr);
142 
143     int32_t resultCode = -1;
144     AAFwk::Want result;
145     result.SetParam(Constants::KEY_BOOLEAN_RESULT, true);
146     ASSERT_EQ(appAccountCheckLabelsCallbackPtr->accountsWithLabels_.size(), NUMBER_ZERO);
147     ASSERT_EQ(appAccountCheckLabelsCallbackPtr->index_, NUMBER_ZERO);
148     appAccountCheckLabelsCallbackPtr->isRequesting_ = true;
149     appAccountCheckLabelsCallbackPtr->OnResult(resultCode, result);
150     ASSERT_EQ(appAccountCheckLabelsCallbackPtr->index_, NUMBER_SIZE);
151     ASSERT_EQ(appAccountCheckLabelsCallbackPtr->accountsWithLabels_.size(), NUMBER_SIZE);
152 }
153 
154 /**
155  * @tc.name: AppAccountAuthenticateTest_OnRequestRedirected_0100
156  * @tc.desc: test AppAccountCheckLabelsCallback func OnRequestRedirected success.
157  * @tc.type: FUNC
158  * @tc.require:
159  */
160 HWTEST_F(AppAccountCheckLabelsModuleTest, AppAccountCheckLabelsModuleTest_OnRequestRedirected_0100, TestSize.Level1)
161 {
162     ASSERT_NE(appAccountCheckLabelsCallbackPtr, nullptr);
163 
164     AAFwk::Want request;
165     ASSERT_EQ(appAccountCheckLabelsCallbackPtr->index_, NUMBER_ZERO);
166     appAccountCheckLabelsCallbackPtr->isRequesting_ = true;
167     appAccountCheckLabelsCallbackPtr->OnRequestRedirected(request);
168     ASSERT_EQ(appAccountCheckLabelsCallbackPtr->index_, NUMBER_SIZE);
169 }
170 
171 /**
172  * @tc.name: AppAccountAuthenticateTest_OnRequestContinued_0100
173  * @tc.desc: test AppAccountCheckLabelsCallback func OnRequestContinued success.
174  * @tc.type: FUNC
175  * @tc.require:
176  */
177 HWTEST_F(AppAccountCheckLabelsModuleTest, AppAccountCheckLabelsModuleTest_OnRequestContinued_0100, TestSize.Level1)
178 {
179     ASSERT_NE(appAccountCheckLabelsCallbackPtr, nullptr);
180 
181     ASSERT_EQ(appAccountCheckLabelsCallbackPtr->index_, NUMBER_ZERO);
182     appAccountCheckLabelsCallbackPtr->isRequesting_ = true;
183     appAccountCheckLabelsCallbackPtr->OnRequestContinued();
184     ASSERT_EQ(appAccountCheckLabelsCallbackPtr->index_, NUMBER_SIZE);
185 }