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 #include "gtest/gtest.h"
16 #include "mock_constant.h"
17 #define private public
18 #define protected public
19 #include "domain_verifier.h"
20 #undef private
21 #undef protected
22 namespace OHOS::AppDomainVerify {
23 using namespace testing;
24 using namespace testing::ext;
25 
26 class DomainVerifierTest : public testing::Test {
27 public:
28     static void SetUpTestCase(void);
29     static void TearDownTestCase(void);
30     void SetUp();
31     void TearDown();
32 };
33 
SetUpTestCase(void)34 void DomainVerifierTest::SetUpTestCase(void)
35 {
36 }
37 
TearDownTestCase(void)38 void DomainVerifierTest::TearDownTestCase(void)
39 {
40 }
41 
SetUp(void)42 void DomainVerifierTest::SetUp(void)
43 {
44 }
45 
TearDown(void)46 void DomainVerifierTest::TearDown(void)
47 {
48 }
49 /**
50  * @tc.name: DomainVerifierTest001
51  * @tc.desc:
52  * @tc.type: FUNC
53  */
54 HWTEST_F(DomainVerifierTest, DomainVerifierTest001, TestSize.Level0)
55 {
56     AppVerifyBaseInfo appVerifyBaseInfo;
57     std::string assetJsonsStr = "";
58     ASSERT_TRUE(DomainVerifier::VerifyHost(OHOS::NetStack::HttpClient::ResponseCode::OK, assetJsonsStr,
59                     appVerifyBaseInfo) == InnerVerifyStatus::STATE_FAIL);
60 }
61 /**
62  * @tc.name: DomainVerifierTest002
63  * @tc.desc:
64  * @tc.type: FUNC
65  */
66 HWTEST_F(DomainVerifierTest, DomainVerifierTest002, TestSize.Level0)
67 {
68     ASSERT_TRUE(InnerVerifyStatus::FAILURE_REDIRECT ==
69         DomainVerifier::GetVerifyStatusFromHttpError(OHOS::NetStack::HttpClient::ResponseCode::MOVED_PERM));
70     ASSERT_TRUE(InnerVerifyStatus::FAILURE_CLIENT_ERROR ==
71         DomainVerifier::GetVerifyStatusFromHttpError(OHOS::NetStack::HttpClient::ResponseCode::UNAUTHORIZED));
72     ASSERT_TRUE(InnerVerifyStatus::FAILURE_REJECTED_BY_SERVER ==
73         DomainVerifier::GetVerifyStatusFromHttpError(OHOS::NetStack::HttpClient::ResponseCode::INTERNAL_ERROR));
74     ASSERT_TRUE(InnerVerifyStatus::FAILURE_HTTP_UNKNOWN ==
75         DomainVerifier::GetVerifyStatusFromHttpError(OHOS::NetStack::HttpClient::ResponseCode::PARTIAL));
76 }
77 /**
78  * @tc.name: DomainVerifierTest003
79  * @tc.desc: VerifyHost test.
80  * @tc.type: FUNC
81  */
82 HWTEST_F(DomainVerifierTest, DomainVerifierTest003, TestSize.Level0)
83 {
84     AssetJsonObj assetJsonObj;
85     AppVerifyBaseInfo appVerifyBaseInfo;
86     appVerifyBaseInfo.bundleName = BUNDLE_NAME;
87     ASSERT_TRUE(
88         InnerVerifyStatus::STATE_FAIL == DomainVerifier::VerifyHostWithBundleName(assetJsonObj, appVerifyBaseInfo));
89     appVerifyBaseInfo.fingerprint = FINGERPRINT;
90     ASSERT_TRUE(
91         InnerVerifyStatus::STATE_FAIL == DomainVerifier::VerifyHostWithBundleName(assetJsonObj, appVerifyBaseInfo));
92     assetJsonObj.applinking.apps.emplace_back(appVerifyBaseInfo);
93     appVerifyBaseInfo.bundleName = BUNDLE_NAME;
94     appVerifyBaseInfo.fingerprint = FINGERPRINT;
95     assetJsonObj.applinking.apps.emplace_back(appVerifyBaseInfo);
96     ASSERT_TRUE(
97         InnerVerifyStatus::STATE_SUCCESS == DomainVerifier::VerifyHostWithBundleName(assetJsonObj, appVerifyBaseInfo));
98 }
99 /**
100  * @tc.name: DomainVerifierTest004
101  * @tc.desc: VerifyHost test.
102  * @tc.type: FUNC
103  */
104 HWTEST_F(DomainVerifierTest, DomainVerifierTest004, TestSize.Level0)
105 {
106     AssetJsonObj assetJsonObj;
107     AppVerifyBaseInfo appVerifyBaseInfo;
108     AppVerifyBaseInfo appVerifyBaseInfoInApp;
109 
110     // appidentifier null
111     appVerifyBaseInfo.appIdentifier = "";
112     ASSERT_TRUE(
113         InnerVerifyStatus::UNKNOWN == DomainVerifier::VerifyHostWithAppIdentifier(assetJsonObj, appVerifyBaseInfo));
114 
115     appVerifyBaseInfo.appIdentifier = APP_IDENTIFIER;
116     appVerifyBaseInfo.bundleName = BUNDLE_NAME;
117     // apps empty
118     ASSERT_TRUE(
119         InnerVerifyStatus::UNKNOWN == DomainVerifier::VerifyHostWithAppIdentifier(assetJsonObj, appVerifyBaseInfo));
120 
121     //  1 app empty appIdentifier
122     assetJsonObj.applinking.apps.emplace_back(appVerifyBaseInfoInApp);
123     ASSERT_TRUE(
124         InnerVerifyStatus::UNKNOWN == DomainVerifier::VerifyHostWithAppIdentifier(assetJsonObj, appVerifyBaseInfo));
125 
126     // 1 app appIdentifier not null and not equal
127     appVerifyBaseInfo.appIdentifier = APP_IDENTIFIER;
128     appVerifyBaseInfoInApp.appIdentifier = FINGERPRINT;
129     assetJsonObj.applinking.apps.clear();
130     assetJsonObj.applinking.apps.emplace_back(appVerifyBaseInfoInApp);
131     ASSERT_TRUE(
132         InnerVerifyStatus::UNKNOWN == DomainVerifier::VerifyHostWithAppIdentifier(assetJsonObj, appVerifyBaseInfo));
133 }
134 /**
135  * @tc.name: DomainVerifierTest005
136  * @tc.desc: VerifyHost test.
137  * @tc.type: FUNC
138  */
139 HWTEST_F(DomainVerifierTest, DomainVerifierTest005, TestSize.Level0)
140 {
141     AssetJsonObj assetJsonObj;
142     AppVerifyBaseInfo appVerifyBaseInfo;
143     AppVerifyBaseInfo appVerifyBaseInfoInApp;
144 
145     //  1.1 app empty appIdentifier
146     assetJsonObj.applinking.apps.emplace_back(appVerifyBaseInfoInApp);
147     ASSERT_TRUE(
148         InnerVerifyStatus::UNKNOWN == DomainVerifier::VerifyHostWithAppIdentifier(assetJsonObj, appVerifyBaseInfo));
149 
150     // 1.2 app appIdentifier not null and not equal
151     appVerifyBaseInfo.appIdentifier = APP_IDENTIFIER;
152     appVerifyBaseInfoInApp.appIdentifier = FINGERPRINT;
153     assetJsonObj.applinking.apps.clear();
154     assetJsonObj.applinking.apps.emplace_back(appVerifyBaseInfoInApp);
155     ASSERT_TRUE(
156         InnerVerifyStatus::UNKNOWN == DomainVerifier::VerifyHostWithAppIdentifier(assetJsonObj, appVerifyBaseInfo));
157 
158     // 1.3 app appIdentifier not null and not equal-> empty bundleName
159     appVerifyBaseInfoInApp.appIdentifier = FINGERPRINT;
160     appVerifyBaseInfoInApp.bundleName = "";
161     ASSERT_TRUE(
162         InnerVerifyStatus::UNKNOWN == DomainVerifier::VerifyHostWithAppIdentifier(assetJsonObj, appVerifyBaseInfo));
163 
164     // 1.4 app appIdentifier not null and not equal-> not empty bundleName, not equal
165     appVerifyBaseInfo.bundleName = BUNDLE_NAME;
166     appVerifyBaseInfoInApp.bundleName = "test";
167     assetJsonObj.applinking.apps.clear();
168     assetJsonObj.applinking.apps.emplace_back(appVerifyBaseInfoInApp);
169     ASSERT_TRUE(
170         InnerVerifyStatus::UNKNOWN == DomainVerifier::VerifyHostWithAppIdentifier(assetJsonObj, appVerifyBaseInfo));
171 
172     // 1.5 app appIdentifier not null and not equal-> not empty bundleName,  equal
173     appVerifyBaseInfo.bundleName = BUNDLE_NAME;
174     appVerifyBaseInfoInApp.bundleName = BUNDLE_NAME;
175     assetJsonObj.applinking.apps.clear();
176     assetJsonObj.applinking.apps.emplace_back(appVerifyBaseInfoInApp);
177     ASSERT_TRUE(
178         InnerVerifyStatus::STATE_FAIL == DomainVerifier::VerifyHostWithAppIdentifier(assetJsonObj, appVerifyBaseInfo));
179 }
180 /**
181  * @tc.name: DomainVerifierTest006
182  * @tc.desc: VerifyHost test.
183  * @tc.type: FUNC
184  */
185 HWTEST_F(DomainVerifierTest, DomainVerifierTest006, TestSize.Level0)
186 {
187     AssetJsonObj assetJsonObj;
188     AppVerifyBaseInfo appVerifyBaseInfo;
189     AppVerifyBaseInfo appVerifyBaseInfoInApp;
190     // appId equal
191     appVerifyBaseInfo.appIdentifier = APP_IDENTIFIER;
192     appVerifyBaseInfoInApp.appIdentifier = APP_IDENTIFIER;
193 
194     // 2.1 equal-> base bundle null, inapp bundle null, not equal
195     appVerifyBaseInfo.bundleName = "";
196     appVerifyBaseInfoInApp.bundleName = "";
197     assetJsonObj.applinking.apps.clear();
198     assetJsonObj.applinking.apps.emplace_back(appVerifyBaseInfoInApp);
199     ASSERT_TRUE(
200         InnerVerifyStatus::STATE_SUCCESS == DomainVerifier::VerifyHostWithAppIdentifier(assetJsonObj, appVerifyBaseInfo));
201 
202     // 2.2 equal-> base bundle not null, inapp bundle null, not equal
203     appVerifyBaseInfo.bundleName = BUNDLE_NAME;
204     appVerifyBaseInfoInApp.bundleName = "";
205     assetJsonObj.applinking.apps.clear();
206     assetJsonObj.applinking.apps.emplace_back(appVerifyBaseInfoInApp);
207     ASSERT_TRUE(
208         InnerVerifyStatus::STATE_SUCCESS == DomainVerifier::VerifyHostWithAppIdentifier(assetJsonObj, appVerifyBaseInfo));
209 
210     // 2.3 equal-> base bundle not null, inapp bundle not null, not equal
211     appVerifyBaseInfo.bundleName = BUNDLE_NAME;
212     appVerifyBaseInfoInApp.bundleName = "test";
213     assetJsonObj.applinking.apps.clear();
214     assetJsonObj.applinking.apps.emplace_back(appVerifyBaseInfoInApp);
215     ASSERT_TRUE(
216         InnerVerifyStatus::STATE_FAIL == DomainVerifier::VerifyHostWithAppIdentifier(assetJsonObj, appVerifyBaseInfo));
217 
218     // 2.4 equal-> base bundle not null, inapp bundle not null, equal
219     appVerifyBaseInfo.bundleName = BUNDLE_NAME;
220     appVerifyBaseInfoInApp.bundleName = BUNDLE_NAME;
221     assetJsonObj.applinking.apps.clear();
222     assetJsonObj.applinking.apps.emplace_back(appVerifyBaseInfoInApp);
223     ASSERT_TRUE(
224         InnerVerifyStatus::STATE_SUCCESS == DomainVerifier::VerifyHostWithAppIdentifier(assetJsonObj, appVerifyBaseInfo));
225 }
226 /**
227  * @tc.name: DomainVerifierTest007
228  * @tc.desc: VerifyHost test.
229  * @tc.type: FUNC
230  */
231 HWTEST_F(DomainVerifierTest, DomainVerifierTest007, TestSize.Level0)
232 {
233     AssetJsonObj assetJsonObj;
234     AppVerifyBaseInfo appVerifyBaseInfo;
235     AppVerifyBaseInfo appVerifyBaseInfoInApp;
236     appVerifyBaseInfo.appIdentifier = APP_IDENTIFIER;
237     appVerifyBaseInfoInApp.appIdentifier = APP_IDENTIFIER;
238     appVerifyBaseInfo.bundleName = BUNDLE_NAME;
239     appVerifyBaseInfoInApp.bundleName = BUNDLE_NAME;
240 
241     // 2.5 equal-> base fingerprint null, inapp fingerprint null, not equal
242     appVerifyBaseInfo.fingerprint = "";
243     appVerifyBaseInfoInApp.fingerprint = "";
244     assetJsonObj.applinking.apps.clear();
245     assetJsonObj.applinking.apps.emplace_back(appVerifyBaseInfoInApp);
246     ASSERT_TRUE(
247         InnerVerifyStatus::STATE_SUCCESS == DomainVerifier::VerifyHostWithAppIdentifier(assetJsonObj, appVerifyBaseInfo));
248 
249     // 2.6 equal-> base fingerprint not null, inapp fingerprint null, not equal
250     appVerifyBaseInfoInApp.fingerprint = FINGERPRINT;
251     appVerifyBaseInfo.fingerprint = "";
252     assetJsonObj.applinking.apps.clear();
253     assetJsonObj.applinking.apps.emplace_back(appVerifyBaseInfoInApp);
254     ASSERT_TRUE(
255         InnerVerifyStatus::STATE_SUCCESS == DomainVerifier::VerifyHostWithAppIdentifier(assetJsonObj, appVerifyBaseInfo));
256 
257     // 2.7 equal-> base fingerprint not null, inapp fingerprint not null, not equal
258     appVerifyBaseInfoInApp.fingerprint = FINGERPRINT;
259     appVerifyBaseInfo.fingerprint = "test";
260     assetJsonObj.applinking.apps.clear();
261     assetJsonObj.applinking.apps.emplace_back(appVerifyBaseInfoInApp);
262     ASSERT_TRUE(
263         InnerVerifyStatus::STATE_FAIL == DomainVerifier::VerifyHostWithAppIdentifier(assetJsonObj, appVerifyBaseInfo));
264 
265     // 2.8 equal-> base fingerprint not null, inapp fingerprint not null, equal
266     appVerifyBaseInfoInApp.fingerprint = FINGERPRINT;
267     appVerifyBaseInfo.fingerprint = FINGERPRINT;
268     assetJsonObj.applinking.apps.clear();
269     assetJsonObj.applinking.apps.emplace_back(appVerifyBaseInfoInApp);
270     ASSERT_TRUE(
271         InnerVerifyStatus::STATE_SUCCESS ==
272             DomainVerifier::VerifyHostWithAppIdentifier(assetJsonObj, appVerifyBaseInfo));
273 }
274 
275 /**
276  * @tc.name: DomainVerifierTest008
277  * @tc.desc: VerifyHost test.
278  * @tc.type: FUNC
279  */
280 HWTEST_F(DomainVerifierTest, DomainVerifierTest008, TestSize.Level0)
281 {
282     AssetJsonObj assetJsonObj;
283     AppVerifyBaseInfo appVerifyBaseInfo;
284     AppVerifyBaseInfo appVerifyBaseInfoInApp;
285 
286     // final
287     appVerifyBaseInfo.appIdentifier = APP_IDENTIFIER;
288     appVerifyBaseInfoInApp.appIdentifier = APP_IDENTIFIER;
289 
290     appVerifyBaseInfo.bundleName = BUNDLE_NAME;
291     appVerifyBaseInfoInApp.bundleName = BUNDLE_NAME;
292 
293     appVerifyBaseInfo.fingerprint = FINGERPRINT;
294     appVerifyBaseInfoInApp.fingerprint = FINGERPRINT;
295 
296     assetJsonObj.applinking.apps.clear();
297     assetJsonObj.applinking.apps.emplace_back(appVerifyBaseInfoInApp);
298     ASSERT_TRUE(InnerVerifyStatus::STATE_SUCCESS ==
299         DomainVerifier::VerifyHostWithAppIdentifier(assetJsonObj, appVerifyBaseInfo));
300 }
301 }