1/*
2 * Copyright (c) 2024-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#include <chrono>
16#include <thread>
17#include <string>
18#include <filesystem>
19
20#include "gtest/gtest.h"
21#include "options.h"
22#include "sign_tool_service_impl.h"
23#include "nlohmann/json.hpp"
24#include "signer_factory.h"
25#include "profile_sign_tool.h"
26#include "params_run_tool.h"
27#include "pkcs7_data.h"
28#include "signer_config.h"
29#include "local_signer.h"
30#include "bc_pkcs7_generator.h"
31#include "bc_signeddata_generator.h"
32#include "profile_verify.h"
33#include "constant.h"
34#include "cms_utils.h"
35
36using  nlohmann::json;
37
38namespace OHOS {
39namespace SignatureTools {
40
41// sign profile使用的全局参数
42static const std::string SIGN_PROFILE_MODE = "localSign";
43static const std::string SIGN_PROFILE_KEY_ALIAS = "oh-profile1-key-v1";
44static const std::string SIGN_PROFILE_PROFILE_CERT_FILE = "./signProfile/profile-release1.pem";
45static const std::string SIGN_PROFILE_SIGN_ALG = "SHA384withECDSA";
46static const std::string SIGN_PROFILE_KEY_STORE_FILE = "./signProfile/ohtest.p12";
47static const std::string SIGN_PROFILE_OUT_FILE = "./signProfile/signed-profile.p7b";
48static const std::string SIGN_PROFILE_IN_FILE = "./signProfile/profile.json";
49
50static const std::string SIGN_PROFILE_CERT_PEM = "./signProfile/profile-release1-cert.pem";
51static const std::string SIGN_PROFILE_REVERSE_PEM = "./signProfile/profile-release1-reverse.pem";
52static const std::string SIGN_PROFILE_DOUBLE_CERT_PEM = "./signProfile/profile-release1-invalid_cert_chain.pem";
53
54// verify profile 使用的全局参数
55static const std::string VERIFY_PROFILE_IN_FILE = "./signProfile/app1-profile1.p7b";
56static const std::string VERIFY_PROFILE_OUT_FILE = "./signProfile/VerifyResult.json";
57// sign app 使用全局参数
58static const std::string SIGN_APP_MODE = "localSign";
59static const std::string SIGN_APP_KEY_ALIAS = "oh-app1-key-v1";
60static const std::string SIGN_APP_APP_CERT_FILE = "./signProfile/app-release1.pem";
61static const std::string SIGN_APP_PROFILE_FILE = "./signProfile/app1-profile1.p7b";
62static const std::string SIGN_APP_IN_FILE = "./signProfile/unsigned.hap";
63static const std::string SIGN_APP_IN_FILE_TXT = "./signProfile/unsigned.txt";
64static const std::string SIGN_APP_SIGN_ALG = "SHA256withECDSA";
65static const std::string SIGN_APP_KEY_STORE_FILE = "./signProfile/ohtest.p12";
66static const std::string SIGN_APP_OUT_FILE = "./signProfile/signed.hap";
67
68class ProvisionTest : public testing::Test {
69public:
70    static void SetUpTestCase(void);
71    static void TearDownTestCase(void);
72    void SetUp()override;
73    void TearDown()override;
74};
75void ProvisionTest::SetUpTestCase(void)
76{
77    std::filesystem::copy(SIGN_APP_IN_FILE_TXT, SIGN_APP_IN_FILE);
78}
79
80void ProvisionTest::TearDownTestCase(void)
81{
82    std::filesystem::remove(SIGN_APP_IN_FILE);
83}
84
85void ProvisionTest::SetUp()
86{
87}
88
89void ProvisionTest::TearDown()
90{
91}
92
93/**
94 * @tc.name: provision_test001
95 * @tc.desc: Test function of LocalSigner::GetCrls() interface get NULL crls.
96 * @tc.size: MEDIUM
97 * @tc.type: FUNC
98 * @tc.level Level 1
99 * @tc.require: SR000H63TL
100 */
101HWTEST_F(ProvisionTest, provision_test001, testing::ext::TestSize.Level1)
102{
103    EVP_PKEY* pkey = NULL;
104    STACK_OF(X509)* certs = NULL;
105    std::shared_ptr<LocalSigner> signer = std::make_shared<LocalSigner>(pkey, certs);
106    STACK_OF(X509_CRL)* crls = signer->GetCrls();
107    EXPECT_TRUE(crls == NULL);
108}
109
110/**
111 * @tc.name: provision_test002
112 * @tc.desc: Test function of LocalSigner::GetSignature() interface diffrent sign algorithm
113 * for success only support SHA256/384withECDSA.
114 * @tc.size: MEDIUM
115 * @tc.type: FUNC
116 * @tc.level Level 1
117 * @tc.require: SR000H63TL
118 */
119HWTEST_F(ProvisionTest, provision_test002, testing::ext::TestSize.Level1)
120{
121    std::string content = "signed content data";
122    Options options;
123    std::string mode = SIGN_PROFILE_MODE;
124    std::string keyAlias = SIGN_PROFILE_KEY_ALIAS;
125    std::string profileCertFile = SIGN_PROFILE_PROFILE_CERT_FILE;
126    std::string signAlg = SIGN_PROFILE_SIGN_ALG;
127    std::string keystoreFile = SIGN_PROFILE_KEY_STORE_FILE;
128    std::string outFile = SIGN_PROFILE_OUT_FILE;
129    std::string inFile = SIGN_PROFILE_IN_FILE;
130    char keyStorePwd[] = "123456";
131    char keypwd[] = "123456";
132    options[Options::KEY_ALIAS] = keyAlias;
133    options[Options::MODE] = mode;
134    options[Options::PROFILE_CERT_FILE] = profileCertFile;
135    options[Options::SIGN_ALG] = signAlg;
136    options[Options::KEY_STORE_FILE] = keystoreFile;
137    options[Options::OUT_FILE] = outFile;
138    options[Options::IN_FILE] = inFile;
139    options[Options::KEY_RIGHTS] = keypwd;
140    options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
141
142    LocalizationAdapter adapter(&options);
143    SignerFactory factory;
144    std::shared_ptr<Signer> signer = factory.GetSigner(adapter);
145    std::string signature1 = signer->GetSignature(content, "SHA384withECDSA");
146    EXPECT_TRUE(signature1.size());
147    std::string signature2 = signer->GetSignature(content, "SHA256withECDSA");
148    EXPECT_TRUE(signature2.size());
149    std::string signature3 = signer->GetSignature(content, "SHA999withECDSA");
150    EXPECT_TRUE(signature3.empty());
151    std::string signature4 = signer->GetSignature("", "SHA384withECDSA");
152    EXPECT_FALSE(signature4.empty());
153}
154
155/**
156 * @tc.name: provision_test003
157 * @tc.desc: Test function of ParseProvision() failed for not debug/release provision.
158 * @tc.size: MEDIUM
159 * @tc.type: FUNC
160 * @tc.level Level 1
161 * @tc.require: SR000H63TL
162 */
163HWTEST_F(ProvisionTest, provision_test003, testing::ext::TestSize.Level1)
164{
165    std::string provision = "{\"acls\":{\"allowed-acls\":[\"ac1\",\"ac2\"]},\"bundle-info\":{\"app-feature\":"
166        "\"hos_system_app\",\"bundle-name\":\"com.example.nativetemplatedemo\",\"developer-id\":\"OpenHarmony\","
167        "\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
168        "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
169        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
170        "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
171        "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
172        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
173        "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
174        "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
175        "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
176        "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
177        "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
178        "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
179        "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
180        "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
181        "-----END CERTIFICATE-----\\n"
182        "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5948C3C0CB44ABCD53029605"
183        "4159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856AB10493A6718C7679A73F958732865\"]},"
184        "\"issuer\":\"pki_internal\",\"permissions\":{\"restricted-permissions\":[\"\"]},\"type\":\"invalid de"
185        "bug\",\"uuid\""
186        ":\"fe686e1b-3770-4824-a938-961b140a7c98\",\"validity\":{\"not-after\":1705127532,\"not-before\":1610519532}"
187        ",\"version-code\":1,\"version-name\":\"1.0.0\",\"baseapp-info\":{\"package-name\":\"package_name\",\"packag"
188        "e-cert\":\"package_cert\"}}";
189    ProfileInfo info;
190    AppProvisionVerifyResult result = ParseProvision(provision, info);
191    EXPECT_FALSE(result == PROVISION_OK);
192}
193
194/**
195 * @tc.name: provision_test004
196 * @tc.desc: Test function of ParseProvision() interface for SUCCESS.
197 * @tc.size: MEDIUM
198 * @tc.type: FUNC
199 * @tc.level Level 1
200 * @tc.require: SR000H63TL
201 */
202HWTEST_F(ProvisionTest, provision_test004, testing::ext::TestSize.Level1)
203{
204    std::string provision = "{\"acls\":{\"allowed-acls\":[\"ac1\",\"ac2\"]},\"bundle-info\":{\"app-feature\":"
205        "\"hos_system_"
206        "app\",\"bundle-name\":\".*\",\"developer-id\":\"OpenHarmony\",\"development-certificate\":"
207        "\"-----BEGIN CERTIFICATE-----\\n"
208        "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
209        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
210        "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
211        "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
212        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
213        "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
214        "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
215        "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
216        "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
217        "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
218        "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
219        "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
220        "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
221        "-----END CERTIFICATE-----\\n"
222        "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5948C3C0CB44ABCD530296"
223        "054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856AB10493A6718C7679A73F958732865\"]},\""
224        "issuer\":\"pki_internal\",\"permissions\":{\"restricted-permissions\":[\"\"]},\"type\":\"debug\",\"uuid"
225        "\":\"fe686e1b-3770-4824-a938-961b140a7c98\",\"validity\":{\"not-after\":1705127532,\"not-before\":161051"
226        "9532},\"version-code\":1,\"version-name\":\"1.0.0\",\"baseapp-info\":{\"package-name\":\"package_name\","
227        "\"package-cert\":\"package_cert\"}}";
228    ProfileInfo info2;
229    AppProvisionVerifyResult result = ParseProvision(provision, info2);
230    EXPECT_TRUE(result == PROVISION_OK);
231}
232/**
233 * @tc.name: provision_test005
234 * @tc.desc: Test function of ParseProvision() failed for not struct json.
235 * @tc.size: MEDIUM
236 * @tc.type: FUNC
237 * @tc.level Level 1
238 * @tc.require: SR000H63TL
239 */
240HWTEST_F(ProvisionTest, provision_test005, testing::ext::TestSize.Level1)
241{
242    ProfileInfo info;
243    std::string provision = "55.2";
244    AppProvisionVerifyResult result = ParseProvision(provision, info);
245    EXPECT_FALSE(result == PROVISION_OK);
246}
247
248/**
249 * @tc.name: provision_test006
250 * @tc.desc: Test function of ParseProvision() failed for discarded json.
251 * @tc.size: MEDIUM
252 * @tc.type: FUNC
253 * @tc.level Level 1
254 * @tc.require: SR000H63TL
255 */
256HWTEST_F(ProvisionTest, provision_test006, testing::ext::TestSize.Level1)
257{
258    ProfileInfo info;
259    std::string provision = "{\"name\": \"feixing\",\"age\": 18}+";
260    AppProvisionVerifyResult result = ParseProvision(provision, info);
261    EXPECT_FALSE(result == PROVISION_OK);
262}
263
264/**
265n * @tc.name: provision_test009
266 * @tc.desc: Test function of ParseProfile() interface for SUCCESS.
267 * @tc.size: MEDIUM
268 * @tc.type: FUNC
269 * @tc.level Level 1
270 * @tc.require: SR000H63TL
271 */
272HWTEST_F(ProvisionTest, provision_test009, testing::ext::TestSize.Level1)
273{
274    ProfileInfo info;
275    std::string provision = "[88,99,42,11,22]";
276    AppProvisionVerifyResult result = ParseProfile(provision, info);
277    EXPECT_TRUE(result == PROVISION_OK);
278}
279
280/**
281 * @tc.name: provision_test010
282 * @tc.desc: Test function of ParseProvision() interface for SUCCESS.
283 * @tc.size: MEDIUM
284 * @tc.type: FUNC
285 * @tc.level Level 1
286 * @tc.require: SR000H63TL
287 */
288HWTEST_F(ProvisionTest, provision_test010, testing::ext::TestSize.Level1)
289{
290    ProfileInfo info;
291    std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-info\":{\"app-feature\""
292        ":\"hos_system_app\",\"bundle-name\":\"com.example.nativetemplatedemo\",\"developer-id\":\"OpenHarm"
293        "ony\",\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
294        "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
295        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
296        "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
297        "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
298        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
299        "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
300        "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
301        "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
302        "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
303        "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
304        "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
305        "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
306        "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
307        "-----END CERTIFICATE-----\\n"
308        "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5948C3C0CB44ABCD"
309        "530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856AB10493A6718C7679A73F95873"
310        "2865\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"restricted-permissions\":[\"\"]},\"type\":"
311        "\"debug\",\"uuid\":\"fe686e1b-3770-4824-a938-961b140a7c98\",\"validity\":{\"not-after\":1705127532"
312        ",\"not-before\":1610519532},\"version-code\":1,\"version-name\":\"1.0.0\"}";
313    AppProvisionVerifyResult result = ParseProvision(provision, info);
314    EXPECT_TRUE(result == PROVISION_OK);
315}
316
317/**
318 * @tc.name: provision_test014
319 * @tc.desc: Test function of ParseProvision() interface for SUCCESS.
320 * @tc.size: MEDIUM
321 * @tc.type: FUNC
322 * @tc.level Level 1
323 * @tc.require: SR000H63TL
324 */
325HWTEST_F(ProvisionTest, provision_test014, testing::ext::TestSize.Level1)
326{
327    ProfileInfo info;
328    std::string provision = "{\"app-privilege-capabilities\": [99,\"88\"],\"bundle-info\":{\"app"
329        "-feature\":\"hos_system_app\",\"bundle-name\":\"com.example.nativetemplatedemo\",\"developer"
330        "-id\":\"OpenHarmony\",\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
331        "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
332        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
333        "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
334        "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
335        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
336        "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
337        "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
338        "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
339        "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
340        "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
341        "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
342        "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
343        "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
344        "-----END CERTIFICATE-----\\n"
345        "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5948C3C0CB"
346        "44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856AB10493A6718C7"
347        "679A73F958732865\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"restricted-permissions\""
348        ":[\"\"]},\"type\":\"debug\",\"uuid\":\"fe686e1b-3770-4824-a938-961b140a7c98\",\"validity\":"
349        "{\"not-after\":1705127532,\"not-before\":1610519532},\"version-code\":1,\"version-name\":\"1.0.0\"}";
350    AppProvisionVerifyResult result = ParseProvision(provision, info);
351    EXPECT_TRUE(result == PROVISION_OK);
352}
353/**
354 * @tc.name: provision_test019
355 * @tc.desc: Test function of ParseProvision() failed for development-certificate is empty.
356 * @tc.size: MEDIUM
357 * @tc.type: FUNC
358 * @tc.level Level 1
359 * @tc.require: SR000H63TL
360 */
361HWTEST_F(ProvisionTest, provision_test019, testing::ext::TestSize.Level1)
362{
363    ProfileInfo info;
364    std::string provision = "{\"bundle-info\":{\"app-feature\":\"hos_system_app\",\"bundle-name\":\"com"
365        ".example.nativetemplatedemo\",\"developer-id\":\"OpenHarmony\",\"development-certificate\":\"\"},\""
366        "d""ebug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5948C3C0CB44ABCD53029"
367        "6054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856AB10493A6718C7679A73F95873286"
368        "5\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"restricted-permissions\":[\"\"]},\"type\":\"de"
369        "bug\",\"uuid\":\"fe686e1b-3770-4824-a938-961b140a7c98\",\"validity\":{\"not-after\":1705127532,\"no"
370        "t-before\":1610519532},\"version-code\":1,\"version-name\":\"1.0.0\"}";
371    AppProvisionVerifyResult result = ParseProvision(provision, info);
372    EXPECT_FALSE(result == PROVISION_OK);
373}
374
375/**
376 * @tc.name: provision_test021
377 * @tc.desc: Test function of Provision operator==() interface stability.
378 * @tc.size: MEDIUM
379 * @tc.type: FUNC
380 * @tc.level Level 1
381 * @tc.require: SR000H63TL
382 */
383HWTEST_F(ProvisionTest, provision_test021, testing::ext::TestSize.Level1)
384{
385    ProfileInfo info;
386    ProfileInfo info2;
387    info2.profileBlockLength = 0;
388    info = info2;
389    EXPECT_EQ(info.profileBlockLength, info2.profileBlockLength);
390}
391
392/**
393 * @tc.name: provision_test023
394 * @tc.desc: Test function of Provision operator==() interface stability.
395 * @tc.size: MEDIUM
396 * @tc.type: FUNC
397 * @tc.level Level 1
398 * @tc.require: SR000H63TL
399 */
400HWTEST_F(ProvisionTest, provision_test023, testing::ext::TestSize.Level1)
401{
402    ProfileInfo info;
403    ProfileInfo info2;
404    info2.profileBlockLength = 5;
405    info2.profileBlock = NULL;
406    info = info2;
407    EXPECT_EQ(info.profileBlockLength, info2.profileBlockLength);
408}
409
410/**
411 * @tc.name: provision_test025
412 * @tc.desc: Test function of ProfileSignTool::GenerateP7b() failed for invalid keyStorePassword.
413 * @tc.size: MEDIUM
414 * @tc.type: FUNC
415 * @tc.level Level 1
416 * @tc.require: SR000H63TL
417 */
418HWTEST_F(ProvisionTest, provision_test025, testing::ext::TestSize.Level1)
419{
420    Options options;
421    char keyStorePwd[] = "123456";
422    char invalidKeyPwd[] = "12345";
423    options[Options::KEY_ALIAS] = SIGN_PROFILE_KEY_ALIAS;
424    options[Options::MODE] = SIGN_PROFILE_MODE;
425    options[Options::PROFILE_CERT_FILE] = SIGN_PROFILE_PROFILE_CERT_FILE;
426    options[Options::SIGN_ALG] = SIGN_PROFILE_SIGN_ALG;
427    options[Options::KEY_STORE_FILE] = SIGN_PROFILE_KEY_STORE_FILE;
428    options[Options::OUT_FILE] = SIGN_PROFILE_OUT_FILE;
429    options[Options::IN_FILE] = SIGN_PROFILE_IN_FILE;
430    options[Options::KEY_RIGHTS] = invalidKeyPwd;
431    options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
432
433    LocalizationAdapter adapter(&options);
434    std::string content = "json content";
435    std::string ret;
436    int result = ProfileSignTool::GenerateP7b(adapter, content, ret);
437    EXPECT_FALSE(result == 0);
438}
439
440/**
441 * @tc.name: provision_test026
442 * @tc.desc: Test function of ProfileSignTool::GenerateP7b() failed for invalid sign algorithm.
443 * @tc.size: MEDIUM
444 * @tc.type: FUNC
445 * @tc.level Level 1
446 * @tc.require: SR000H63TL
447 */
448HWTEST_F(ProvisionTest, provision_test026, testing::ext::TestSize.Level1)
449{
450    Options options;
451    char keyStorePwd[] = "123456";
452    char keypwd[] = "123456";
453    std::string invalid_sigAlg = "SHA385withECDSA";
454    options[Options::KEY_ALIAS] = SIGN_PROFILE_KEY_ALIAS;
455    options[Options::MODE] = SIGN_PROFILE_MODE;
456    options[Options::PROFILE_CERT_FILE] = SIGN_PROFILE_PROFILE_CERT_FILE;
457    options[Options::SIGN_ALG] = invalid_sigAlg;
458    options[Options::KEY_STORE_FILE] = SIGN_PROFILE_KEY_STORE_FILE;
459    options[Options::OUT_FILE] = SIGN_PROFILE_OUT_FILE;
460    options[Options::IN_FILE] = SIGN_PROFILE_IN_FILE;
461    options[Options::KEY_RIGHTS] = keypwd;
462    options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
463
464    LocalizationAdapter adapter(&options);
465    std::string content = "json content";
466    std::string ret;
467    int result = ProfileSignTool::GenerateP7b(adapter, content, ret);
468    EXPECT_FALSE(result == 0);
469}
470
471/**
472 * @tc.name: provision_test027
473 * @tc.desc: Test function of ProfileSignTool::GenerateP7b() interface for SUCCESS.
474 * @tc.size: MEDIUM
475 * @tc.type: FUNC
476 * @tc.level Level 1
477 * @tc.require: SR000H63TL
478 */
479HWTEST_F(ProvisionTest, provision_test027, testing::ext::TestSize.Level1)
480{
481    Options options;
482    char keyStorePwd[] = "123456";
483    char keypwd[] = "123456";
484    options[Options::KEY_ALIAS] = SIGN_PROFILE_KEY_ALIAS;
485    options[Options::MODE] = SIGN_PROFILE_MODE;
486    options[Options::PROFILE_CERT_FILE] = SIGN_PROFILE_PROFILE_CERT_FILE;
487    options[Options::SIGN_ALG] = SIGN_PROFILE_SIGN_ALG;
488    options[Options::KEY_STORE_FILE] = SIGN_PROFILE_KEY_STORE_FILE;
489    options[Options::OUT_FILE] = SIGN_PROFILE_OUT_FILE;
490    options[Options::IN_FILE] = SIGN_PROFILE_IN_FILE;
491    options[Options::KEY_RIGHTS] = keypwd;
492    options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
493
494    LocalizationAdapter adapter(&options);
495    std::string content = "json content";
496    std::string ret;
497    int result = ProfileSignTool::GenerateP7b(adapter, content, ret);
498    EXPECT_TRUE(result == 0);
499}
500
501/**
502 * @tc.name: provision_test028
503 * @tc.desc: Test function of ProfileSignTool::SignProfile() interface for SUCCESS.
504 * @tc.size: MEDIUM
505 * @tc.type: FUNC
506 * @tc.level Level 1
507 * @tc.require: SR000H63TL
508 */
509HWTEST_F(ProvisionTest, provision_test028, testing::ext::TestSize.Level1)
510{
511    Options options;
512    char keyStorePwd[] = "123456";
513    char keypwd[] = "123456";
514    options[Options::KEY_ALIAS] = SIGN_PROFILE_KEY_ALIAS;
515    options[Options::MODE] = SIGN_PROFILE_MODE;
516    options[Options::PROFILE_CERT_FILE] = SIGN_PROFILE_PROFILE_CERT_FILE;
517    options[Options::SIGN_ALG] = SIGN_PROFILE_SIGN_ALG;
518    options[Options::KEY_STORE_FILE] = SIGN_PROFILE_KEY_STORE_FILE;
519    options[Options::OUT_FILE] = SIGN_PROFILE_OUT_FILE;
520    options[Options::IN_FILE] = SIGN_PROFILE_IN_FILE;
521    options[Options::KEY_RIGHTS] = keypwd;
522    options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
523
524    LocalizationAdapter adapter(&options);
525    SignerFactory factory;
526    std::shared_ptr<Signer> signer = factory.GetSigner(adapter);
527    std::string content = "json content";
528    std::string ret;
529    int result = ProfileSignTool::SignProfile(content, signer, SIGN_PROFILE_SIGN_ALG, ret);
530    EXPECT_TRUE(result == 0);
531}
532
533/**
534 * @tc.name: provision_test029
535 * @tc.desc: Test function of ProfileSignTool::GenerateP7b() failed for invalid certchain.
536 * @tc.size: MEDIUM
537 * @tc.type: FUNC
538 * @tc.level Level 1
539 * @tc.require: SR000H63TL
540 */
541HWTEST_F(ProvisionTest, provision_test029, testing::ext::TestSize.Level1)
542{
543    Options options;
544    char keyStorePwd[] = "123456";
545    char keypwd[] = "123456";
546    options[Options::KEY_ALIAS] = SIGN_PROFILE_KEY_ALIAS;
547    options[Options::MODE] = SIGN_PROFILE_MODE;
548    options[Options::PROFILE_CERT_FILE] = SIGN_PROFILE_CERT_PEM;
549    options[Options::SIGN_ALG] = SIGN_PROFILE_SIGN_ALG;
550    options[Options::KEY_STORE_FILE] = SIGN_PROFILE_KEY_STORE_FILE;
551    options[Options::OUT_FILE] = SIGN_PROFILE_OUT_FILE;
552    options[Options::IN_FILE] = SIGN_PROFILE_IN_FILE;
553    options[Options::KEY_RIGHTS] = keypwd;
554    options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
555
556    LocalizationAdapter adapter(&options);
557    std::string content = "json content";
558    std::string ret;
559    int result = ProfileSignTool::GenerateP7b(adapter, content, ret);
560    EXPECT_FALSE(result == 0);
561}
562
563/**
564 * @tc.name: provision_test030
565 * @tc.desc: Test function of ProfileSignTool::GenerateP7b() failed for invalid certichain.
566 * @tc.size: MEDIUM
567 * @tc.type: FUNC
568 * @tc.level Level 1
569 * @tc.require: SR000H63TL
570 */
571HWTEST_F(ProvisionTest, provision_test030, testing::ext::TestSize.Level1)
572{
573    Options options;
574    char keyStorePwd[] = "123456";
575    char keypwd[] = "123456";
576    options[Options::KEY_ALIAS] = SIGN_PROFILE_KEY_ALIAS;
577    options[Options::MODE] = SIGN_PROFILE_MODE;
578    options[Options::PROFILE_CERT_FILE] = SIGN_PROFILE_DOUBLE_CERT_PEM;
579    options[Options::SIGN_ALG] = SIGN_PROFILE_SIGN_ALG;
580    options[Options::KEY_STORE_FILE] = SIGN_PROFILE_KEY_STORE_FILE;
581    options[Options::OUT_FILE] = SIGN_PROFILE_OUT_FILE;
582    options[Options::IN_FILE] = SIGN_PROFILE_IN_FILE;
583    options[Options::KEY_RIGHTS] = keypwd;
584    options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
585
586    LocalizationAdapter adapter(&options);
587    std::string content = "json content";
588    std::string ret;
589    int result = ProfileSignTool::GenerateP7b(adapter, content, ret);
590    EXPECT_FALSE(result == 0);
591}
592
593/**
594 * @tc.name: provision_test031
595 * @tc.desc: Test function of LocalSigner::GetCrls() interface get NULL crls.
596 * @tc.size: MEDIUM
597 * @tc.type: FUNC
598 * @tc.level Level 1
599 * @tc.require: SR000H63TL
600 */
601HWTEST_F(ProvisionTest, provision_test031, testing::ext::TestSize.Level1)
602{
603    Options options;
604    std::string mode = SIGN_PROFILE_MODE;
605    std::string keyAlias = SIGN_PROFILE_KEY_ALIAS;
606    std::string profileCertFile = SIGN_PROFILE_PROFILE_CERT_FILE;
607    std::string signAlg = SIGN_PROFILE_SIGN_ALG;
608    std::string keystoreFile = SIGN_PROFILE_KEY_STORE_FILE;
609    std::string outFile = SIGN_PROFILE_OUT_FILE;
610    std::string inFile = SIGN_PROFILE_IN_FILE;
611    char keyStorePwd[] = "123456";
612    char keypwd[] = "123456";
613    options[Options::KEY_ALIAS] = keyAlias;
614    options[Options::MODE] = mode;
615    options[Options::PROFILE_CERT_FILE] = profileCertFile;
616    options[Options::SIGN_ALG] = signAlg;
617    options[Options::KEY_STORE_FILE] = keystoreFile;
618    options[Options::OUT_FILE] = outFile;
619    options[Options::IN_FILE] = inFile;
620    options[Options::KEY_RIGHTS] = keypwd;
621    options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
622
623    LocalizationAdapter adapter(&options);
624    SignerFactory factory;
625    std::shared_ptr<Signer> signer = factory.GetSigner(adapter);
626    STACK_OF(X509_CRL)* crls = signer->GetCrls();
627    EXPECT_TRUE(crls == NULL);
628}
629
630/**
631 * @tc.name: provision_test032
632 * @tc.desc: Test function of LocalSigner() constructor.
633 * @tc.size: MEDIUM
634 * @tc.type: FUNC
635 * @tc.level Level 1
636 * @tc.require: SR000H63TL
637 */
638HWTEST_F(ProvisionTest, provision_test032, testing::ext::TestSize.Level1)
639{
640    Options options;
641    std::string mode = SIGN_PROFILE_MODE;
642    std::string keyAlias = SIGN_PROFILE_KEY_ALIAS;
643    std::string profileCertFile = SIGN_PROFILE_PROFILE_CERT_FILE;
644    std::string signAlg = SIGN_PROFILE_SIGN_ALG;
645    std::string keystoreFile = SIGN_PROFILE_KEY_STORE_FILE;
646    std::string outFile = SIGN_PROFILE_OUT_FILE;
647    std::string inFile = SIGN_PROFILE_IN_FILE;
648    char keyStorePwd[] = "123456";
649    char keypwd[] = "123456";
650    options[Options::KEY_ALIAS] = keyAlias;
651    options[Options::MODE] = mode;
652    options[Options::PROFILE_CERT_FILE] = profileCertFile;
653    options[Options::SIGN_ALG] = signAlg;
654    options[Options::KEY_STORE_FILE] = keystoreFile;
655    options[Options::OUT_FILE] = outFile;
656    options[Options::IN_FILE] = inFile;
657    options[Options::KEY_RIGHTS] = keypwd;
658    options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
659
660    EVP_PKEY* pkey = NULL;
661    STACK_OF(X509)* certs = NULL;
662    std::shared_ptr<Signer> signer = NULL;
663    signer = std::make_shared<LocalSigner>(pkey, certs);
664    EXPECT_NE(signer, nullptr);
665}
666
667/**
668 * @tc.name: provision_test033
669 * @tc.desc: Test function of LocalSigner() interface constructor.
670 * @tc.size: MEDIUM
671 * @tc.type: FUNC
672 * @tc.level Level 1
673 * @tc.require: SR000H63TL
674 */
675HWTEST_F(ProvisionTest, provision_test033, testing::ext::TestSize.Level1)
676{
677    Options options;
678    std::string mode = SIGN_PROFILE_MODE;
679    std::string keyAlias = SIGN_PROFILE_KEY_ALIAS;
680    std::string profileCertFile = SIGN_PROFILE_PROFILE_CERT_FILE;
681    std::string signAlg = SIGN_PROFILE_SIGN_ALG;
682    std::string keystoreFile = SIGN_PROFILE_KEY_STORE_FILE;
683    std::string outFile = SIGN_PROFILE_OUT_FILE;
684    std::string inFile = SIGN_PROFILE_IN_FILE;
685    char keyStorePwd[] = "123456";
686    char keypwd[] = "123456";
687    options[Options::KEY_ALIAS] = keyAlias;
688    options[Options::MODE] = mode;
689    options[Options::PROFILE_CERT_FILE] = profileCertFile;
690    options[Options::SIGN_ALG] = signAlg;
691    options[Options::KEY_STORE_FILE] = keystoreFile;
692    options[Options::OUT_FILE] = outFile;
693    options[Options::IN_FILE] = inFile;
694    options[Options::KEY_RIGHTS] = keypwd;
695    options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
696
697    EVP_PKEY* pkey = NULL;
698    STACK_OF(X509)* certs = NULL;
699    LocalizationAdapter adapter(&options);
700    pkey = adapter.GetAliasKey(false);
701    std::shared_ptr<Signer> signer = std::make_shared<LocalSigner>(pkey, certs);
702    EXPECT_NE(signer, nullptr);
703}
704
705/**
706 * @tc.name: provision_test034
707 * @tc.desc: Test function of LocalSigner() interface constructor.
708 * @tc.size: MEDIUM
709 * @tc.type: FUNC
710 * @tc.level Level 1
711 * @tc.require: SR000H63TL
712 */
713HWTEST_F(ProvisionTest, provision_test034, testing::ext::TestSize.Level1)
714{
715    Options options;
716    std::string mode = SIGN_PROFILE_MODE;
717    std::string keyAlias = SIGN_PROFILE_KEY_ALIAS;
718    std::string profileCertFile = SIGN_PROFILE_PROFILE_CERT_FILE;
719    std::string signAlg = SIGN_PROFILE_SIGN_ALG;
720    std::string keystoreFile = SIGN_PROFILE_KEY_STORE_FILE;
721    std::string outFile = SIGN_PROFILE_OUT_FILE;
722    std::string inFile = SIGN_PROFILE_IN_FILE;
723    char keyStorePwd[] = "123456";
724    char keypwd[] = "123456";
725    options[Options::KEY_ALIAS] = keyAlias;
726    options[Options::MODE] = mode;
727    options[Options::PROFILE_CERT_FILE] = profileCertFile;
728    options[Options::SIGN_ALG] = signAlg;
729    options[Options::KEY_STORE_FILE] = keystoreFile;
730    options[Options::OUT_FILE] = outFile;
731    options[Options::IN_FILE] = inFile;
732    options[Options::KEY_RIGHTS] = keypwd;
733    options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
734
735    EVP_PKEY* pkey = NULL;
736    STACK_OF(X509)* certs = sk_X509_new(NULL);
737    LocalizationAdapter adapter(&options);
738    pkey = adapter.GetAliasKey(false);
739    std::shared_ptr<Signer> signer = std::make_shared<LocalSigner>(pkey, certs);
740    EXPECT_NE(signer, nullptr);
741}
742
743/**
744 * @tc.name: provision_test035
745 * @tc.desc: Test function of GetSignature::GetSignature() interface for SUCCESS.
746 * @tc.size: MEDIUM
747 * @tc.type: FUNC
748 * @tc.level Level 1
749 * @tc.require: SR000H63TL
750 */
751HWTEST_F(ProvisionTest, provision_test035, testing::ext::TestSize.Level1)
752{
753    Options options;
754    std::string mode = SIGN_PROFILE_MODE;
755    std::string keyAlias = SIGN_PROFILE_KEY_ALIAS;
756    std::string profileCertFile = SIGN_PROFILE_PROFILE_CERT_FILE;
757    std::string signAlg = SIGN_PROFILE_SIGN_ALG;
758    std::string keystoreFile = SIGN_PROFILE_KEY_STORE_FILE;
759    std::string outFile = SIGN_PROFILE_OUT_FILE;
760    std::string inFile = SIGN_PROFILE_IN_FILE;
761    char keyStorePwd[] = "123456";
762    char keypwd[] = "123456";
763    options[Options::KEY_ALIAS] = keyAlias;
764    options[Options::MODE] = mode;
765    options[Options::PROFILE_CERT_FILE] = profileCertFile;
766    options[Options::SIGN_ALG] = signAlg;
767    options[Options::KEY_STORE_FILE] = keystoreFile;
768    options[Options::OUT_FILE] = outFile;
769    options[Options::IN_FILE] = inFile;
770    options[Options::KEY_RIGHTS] = keypwd;
771    options[Options::KEY_STORE_RIGHTS] = keyStorePwd;
772
773    EVP_PKEY* pkey = NULL;
774    LocalizationAdapter adapter(&options);
775    SignerFactory factory;
776    std::shared_ptr<Signer> signer = factory.GetSigner(adapter);
777    STACK_OF(X509)* certs = signer->GetCertificates();
778    STACK_OF(X509)* certsDup = sk_X509_new(NULL);
779    X509* cert = sk_X509_value(certs, 0);
780    X509_up_ref(cert);
781    sk_X509_push(certsDup, cert);
782    std::shared_ptr<Signer> signer2 = std::make_shared<LocalSigner>(pkey, certsDup);
783    std::string signature = signer2->GetSignature("content", "SHA384withECDSA");
784    EXPECT_NE(signer, nullptr);
785}
786
787/**
788 * @tc.name: provision_test036
789 * @tc.desc: Test function of ParseProvision() failed for distribution-certificate is empty.
790 * @tc.size: MEDIUM
791 * @tc.type: FUNC
792 * @tc.level Level 1
793 * @tc.require: SR000H63TL
794 */
795HWTEST_F(ProvisionTest, provision_test036, testing::ext::TestSize.Level1)
796{
797    ProfileInfo info;
798    std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"app-distribution-type"
799        "\": \"app_gallery\",\"bundle-info\":{\"app-feature\":\"hos_system_app\",\"bundle-name\":\"co"
800        "m.example.nativetemplatedemo\",\"developer-id\":\"OpenHarmony\",\"development-certifica"
801        "te\":\"-----BEGIN CERTIFICATE-----\\n"
802        "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
803        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
804        "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
805        "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
806        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
807        "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
808        "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
809        "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
810        "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
811        "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
812        "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
813        "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
814        "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
815        "-----END CERTIFICATE-----\\n"
816        "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5948C3C0CB44ABCD530"
817        "296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856AB10493A6718C7679A73F958732865"
818        "\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"restricted-permissions\":[\"\"]},\"type\":\"re"
819        "lease\",\"uuid\":\"fe686e1b-3770-4824-a938-961b140a7c98\",\"validity\":{\"not-after\":1705127532,\"n"
820        "ot-before\":1610519532},\"version-code\":1,\"version-name\":\"1.0.0\"}";
821    AppProvisionVerifyResult result = ParseProvision(provision, info);
822    EXPECT_FALSE(result == PROVISION_OK);
823}
824
825/**
826 * @tc.name: provision_test037
827 * @tc.desc: Test function of ParseProvision() failed for distribution-certificate is empty.
828 * @tc.size: MEDIUM
829 * @tc.type: FUNC
830 * @tc.level Level 1
831 * @tc.require: SR000H63TL
832 */
833HWTEST_F(ProvisionTest, provision_test037, testing::ext::TestSize.Level1)
834{
835    ProfileInfo info;
836    std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-info\":{\"app-featur"
837        "e\":\"hos_system_app\",\"bundle-name\":\"com.example.nativetemplatedemo\",\"developer-id\":\"Ope"
838        "nHarmony\",\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
839        "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
840        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
841        "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
842        "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
843        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
844        "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
845        "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
846        "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
847        "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
848        "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
849        "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
850        "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
851        "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
852        "-----END CERTIFICATE-----\\n"
853        "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5948C3C0CB44A"
854        "BCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856AB10493A6718C7679A73"
855        "F958732865\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"restricted-permissions\":[\"\"]"
856        "},\"type\":\"release\",\"uuid\":\"fe686e1b-3770-4824-a938-961b140a7c98\",\"validity\":{\"not-a"
857        "fter\":1705127532,\"not-before\":1610519532},\"version-code\":0,\"version-name\":\"1.0.0\"}";
858    AppProvisionVerifyResult result = ParseProvision(provision, info);
859    EXPECT_FALSE(result == PROVISION_OK);
860}
861
862/**
863 * @tc.name: provision_test038
864 * @tc.desc: Test function of ParseProvision() failed for distribution-certificate is empty.
865 * @tc.size: MEDIUM
866 * @tc.type: FUNC
867 * @tc.level Level 1
868 * @tc.require: SR000H63TL
869 */
870HWTEST_F(ProvisionTest, provision_test038, testing::ext::TestSize.Level1)
871{
872    ProfileInfo info;
873    std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-info\":{\"app-fea"
874        "ture\":\"hos_system_app\",\"bundle-name\":\"com.example.nativetemplatedemo\",\"developer-id\":\""
875        "OpenHarmony\",\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
876        "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
877        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
878        "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
879        "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
880        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
881        "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
882        "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
883        "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
884        "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
885        "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
886        "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
887        "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
888        "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
889        "-----END CERTIFICATE-----\\n"
890        "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5948C3C0C"
891        "B44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856AB10493A6718"
892        "C7679A73F958732865\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"restricted-permission"
893        "s\":[\"\"]},\"type\":\"release\",\"uuid\":\"fe686e1b-3770-4824-a938-961b140a7c98\",\"valid"
894        "ity\":{\"not-after\":1705127532,\"not-before\":1610519532},\"version-code_no\":0,\"ver"
895        "sion-name\":\"1.0.0\"}";
896    AppProvisionVerifyResult result = ParseProvision(provision, info);
897    EXPECT_FALSE(result == PROVISION_OK);
898}
899
900/**
901 * @tc.name: provision_test039
902 * @tc.desc: Test function of ParseProvision() failed for distribution-certificate is empty.
903 * @tc.size: MEDIUM
904 * @tc.type: FUNC
905 * @tc.level Level 1
906 * @tc.require: SR000H63TL
907 */
908HWTEST_F(ProvisionTest, provision_test039, testing::ext::TestSize.Level1)
909{
910    ProfileInfo info;
911    std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-info\":{\"app-f"
912        "eature\":\"hos_system_app\",\"bundle-name\":\"com.example.nativetemplatedemo\",\"developer-"
913        "id\":\"OpenHarmony\",\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
914        "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
915        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
916        "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
917        "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
918        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
919        "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
920        "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
921        "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
922        "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
923        "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
924        "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
925        "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
926        "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
927        "-----END CERTIFICATE-----\\n"
928        "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69"
929        "C7505BE341BDA5948C3C0CB44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7E"
930        "ED06506FCE6325EB2E2FAA019458B856AB10493A6718C7679A73F958732865\"]},\"is"
931        "suer\":\"pki_internal\",\"permissions\":{\"restricted-permissions\":[\"\"]},\"t"
932        "ype\":\"release\",\"uuid\":\"fe686e1b-3770-4824-a938-961b140a7c98\",\"validity\":{\"no"
933        "t-after\":1705127532,\"not-before\":1610519532},\"version-code\":\"0\",\"version-name\":\"1.0.0\"}";
934    AppProvisionVerifyResult result = ParseProvision(provision, info);
935    EXPECT_FALSE(result == PROVISION_OK);
936}
937
938/**
939 * @tc.name: provision_test040
940 * @tc.desc: Test function of ParseProvision() failed for distribution-certificate is empty.
941 * @tc.size: MEDIUM
942 * @tc.type: FUNC
943 * @tc.level Level 1
944 * @tc.require: SR000H63TL
945 */
946HWTEST_F(ProvisionTest, provision_test040, testing::ext::TestSize.Level1)
947{
948    ProfileInfo info;
949    std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"app-privilege-cap"
950        "abilities\": [99,\"88\"],\"bundle-info\":{\"app-feature\":\"hos_system_app\",\"bundle-"
951        "name\":\"com.example.nativetemplatedemo\",\"developer-id\":\"OpenHarmony\",\"develop"
952        "ment-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
953        "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
954        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
955        "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
956        "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
957        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
958        "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
959        "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
960        "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
961        "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
962        "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
963        "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
964        "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
965        "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
966        "-----END CERTIFICATE-----\\n"
967        "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341B"
968        "DA5948C3C0CB44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2F"
969        "AA019458B856AB10493A6718C7679A73F958732865\"]},\"issuer\":\"pki_internal\",\"perm"
970        "issions\":{\"restricted-permissions\":[\"\"]},\"type\":\"release\",\"uuid\":\"fe6"
971        "86e1b-3770-4824-a938-961b140a7c98\",\"validity\":{\"not-after\":1705127532,\"not-bef"
972        "ore\":1610519532},\"version-code\":1,\"version-name\":\"1.0.0\"}";
973    AppProvisionVerifyResult result = ParseProvision(provision, info);
974    EXPECT_FALSE(result == PROVISION_OK);
975}
976
977/**
978 * @tc.name: provision_test041
979 * @tc.desc: Test function of ParseProvision() failed for distribution-certificate is empty.
980 * @tc.size: MEDIUM
981 * @tc.type: FUNC
982 * @tc.level Level 1
983 * @tc.require: SR000H63TL
984 */
985HWTEST_F(ProvisionTest, provision_test041, testing::ext::TestSize.Level1)
986{
987    ProfileInfo info;
988    std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-in"
989        "fo\":{\"app-feature\":\"hos_system_app\",\"bundle-name\":\"\",\"developer-id\":\"Op"
990        "enHarmony\",\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
991        "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
992        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
993        "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
994        "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
995        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
996        "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
997        "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
998        "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
999        "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
1000        "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
1001        "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
1002        "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
1003        "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
1004        "-----END CERTIFICATE-----\\n"
1005        "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA"
1006        "5948C3C0CB44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA0194"
1007        "58B856AB10493A6718C7679A73F958732865\"]},\"issuer\":\"pki_internal\",\"permissions"
1008        "\":{\"restricted-permissions\":[\"\"]},\"type\":\"release\",\"uuid\":\"fe686e1b-37"
1009        "70-4824-a938-961b140a7c98\",\"validity\":{\"not-after\":1705127532,\"not-before\":1610"
1010        "519532},\"version-code\":1,\"version-name\":\"1.0.0\"}";
1011    AppProvisionVerifyResult result = ParseProvision(provision, info);
1012    EXPECT_FALSE(result == PROVISION_OK);
1013}
1014
1015/**
1016 * @tc.name: provision_test042
1017 * @tc.desc: Test function of ParseProvision() failed for distribution-certificate is empty.
1018 * @tc.size: MEDIUM
1019 * @tc.type: FUNC
1020 * @tc.level Level 1
1021 * @tc.require: SR000H63TL
1022 */
1023HWTEST_F(ProvisionTest, provision_test042, testing::ext::TestSize.Level1)
1024{
1025    ProfileInfo info;
1026    std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-info\":{\"ap"
1027        "p-feature\":\"hos_system_app\",\"bundle-name\":\"com.example.nativetemplatedemo\",\"devel"
1028        "oper-id\":\"OpenHarmony\",\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
1029        "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
1030        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
1031        "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
1032        "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
1033        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
1034        "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
1035        "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
1036        "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
1037        "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
1038        "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
1039        "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
1040        "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
1041        "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
1042        "-----END CERTIFICATE-----\\n"
1043        "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5948C3C"
1044        "0CB44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856AB10493"
1045        "A6718C7679A73F958732865\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"restricted-pe"
1046        "rmissions\":[\"\"]},\"type\":\"release\",\"uuid\":\"fe686e1b-3770-4824-a938-961b140a7c9"
1047        "8\",\"validity\":{\"not-after\":1705127532,\"not-before\":1610519532},\"version-code\":"
1048        "1,\"version-name\":\"\"}";
1049    AppProvisionVerifyResult result = ParseProvision(provision, info);
1050    EXPECT_FALSE(result == PROVISION_OK);
1051}
1052
1053/**
1054 * @tc.name: provision_test043
1055 * @tc.desc: Test function of ParseProvision() failed for distribution-certificate is empty.
1056 * @tc.size: MEDIUM
1057 * @tc.type: FUNC
1058 * @tc.level Level 1
1059 * @tc.require: SR000H63TL
1060 */
1061HWTEST_F(ProvisionTest, provision_test043, testing::ext::TestSize.Level1)
1062{
1063    ProfileInfo info;
1064    std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-info\":{\"a"
1065        "pp-feature\":\"hos_system_app\",\"bundle-name\":\"com.example.nativetemplatedemo\",\"d"
1066        "eveloper-id\":\"OpenHarmony\",\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
1067        "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
1068        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
1069        "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
1070        "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
1071        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
1072        "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
1073        "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
1074        "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
1075        "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
1076        "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
1077        "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
1078        "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
1079        "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
1080        "-----END CERTIFICATE-----\\n"
1081        "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA59"
1082        "48C3C0CB44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B"
1083        "856AB10493A6718C7679A73F958732865\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"r"
1084        "estricted-permissions\":[\"\"]},\"type\":\"release\",\"uuid\":\"\",\"validity\":{\"no"
1085        "t-after\":1705127532,\"not-before\":1610519532},\"version-code\":1,\"version-name\":\"\"}";
1086    AppProvisionVerifyResult result = ParseProvision(provision, info);
1087    EXPECT_FALSE(result == PROVISION_OK);
1088}
1089
1090/**
1091 * @tc.name: provision_test044
1092 * @tc.desc: Test function of ParseProvision() failed for distribution-certificate is empty.
1093 * @tc.size: MEDIUM
1094 * @tc.type: FUNC
1095 * @tc.level Level 1
1096 * @tc.require: SR000H63TL
1097 */
1098HWTEST_F(ProvisionTest, provision_test044, testing::ext::TestSize.Level1)
1099{
1100    ProfileInfo info;
1101    std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-info\":{\"app"
1102        "-feature\":\"hos_system_app\",\"bundle-name\":\"com.example.nativetemplatedemo\",\"develo"
1103        "per-id\":\"\",\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
1104        "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
1105        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
1106        "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
1107        "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
1108        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
1109        "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
1110        "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
1111        "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
1112        "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
1113        "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
1114        "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
1115        "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
1116        "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
1117        "-----END CERTIFICATE-----\\n"
1118        "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5"
1119        "948C3C0CB44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B"
1120        "856AB10493A6718C7679A73F958732865\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"re"
1121        "stricted-permissions\":[\"\"]},\"type\":\"release\",\"uuid\":\"fe686e1b-3770-4824-a938"
1122        "-961b140a7c98\",\"validity\":{\"not-after\":1705127532,\"not-before\":1610519532},\"ver"
1123        "sion-code\":1,\"version-name\":\"1.0.0\"}";
1124    AppProvisionVerifyResult result = ParseProvision(provision, info);
1125    EXPECT_FALSE(result == PROVISION_OK);
1126}
1127
1128/**
1129 * @tc.name: provision_test045
1130 * @tc.desc: Test function of ParseProvision() failed for development-certificate is empty..
1131 * @tc.size: MEDIUM
1132 * @tc.type: FUNC
1133 * @tc.level Level 1
1134 * @tc.require: SR000H63TL
1135 */
1136HWTEST_F(ProvisionTest, provision_test045, testing::ext::TestSize.Level1)
1137{
1138    ProfileInfo info;
1139    std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-info\":{\"a"
1140        "pp-feature\":\"hos_system_app\",\"bundle-name\":\"com.example.nativetemplatedemo\",\"dev"
1141        "eloper-id\":\"OpenHarmony\",\"development-certificate\":\"\"},\"debug-info\":{\"device-i"
1142        "d-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA5948C3C0CB44ABCD530296054159EFE0BD16"
1143        "A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856AB10493A6718C7679A73F958732865\"]},\"i"
1144        "ssuer\":\"pki_internal\",\"permissions\":{\"restricted-permissions\":[\"\"]},\"type\":\"de"
1145        "bug\",\"uuid\":\"fe686e1b-3770-4824-a938-961b140a7c98\",\"validity\":{\"not-after\":17051275"
1146        "32,\"not-before\":1610519532},\"version-code\":1,\"version-name\":\"1.0.0\"}";
1147    AppProvisionVerifyResult result = ParseProvision(provision, info);
1148    EXPECT_FALSE(result == PROVISION_OK);
1149}
1150
1151/**
1152 * @tc.name: provision_test046
1153 * @tc.desc: Test function of ParseProvision() distribution-certificate is empty..
1154 * @tc.size: MEDIUM
1155 * @tc.type: FUNC
1156 * @tc.level Level 1
1157 * @tc.require: SR000H63TL
1158 */
1159HWTEST_F(ProvisionTest, provision_test046, testing::ext::TestSize.Level1)
1160{
1161    ProfileInfo info;
1162    std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-in"
1163        "fo\":{\"app-feature\":\"\",\"bundle-name\":\"com.example.nativetemplatedemo\",\"de"
1164        "veloper-id\":\"OpenHarmony\",\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
1165        "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
1166        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
1167        "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
1168        "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
1169        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
1170        "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
1171        "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
1172        "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
1173        "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
1174        "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
1175        "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
1176        "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
1177        "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
1178        "-----END CERTIFICATE-----\\n"
1179        "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA59"
1180        "48C3C0CB44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B8"
1181        "56AB10493A6718C7679A73F958732865\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"re"
1182        "stricted-permissions\":[\"\"]},\"type\":\"release\",\"uuid\":\"fe686e1b-3770-4824-a938-"
1183        "961b140a7c98\",\"validity\":{\"not-after\":1705127532,\"not-before\":1610519532},\"ver"
1184        "sion-code\":1,\"version-name\":\"1.0.0\"}";
1185    AppProvisionVerifyResult result = ParseProvision(provision, info);
1186    EXPECT_FALSE(result == PROVISION_OK);
1187}
1188
1189/**
1190 * @tc.name: provision_test047
1191 * @tc.desc: Test function of ParseProvision() interface for SUCCESS.
1192 * @tc.size: MEDIUM
1193 * @tc.type: FUNC
1194 * @tc.level Level 1
1195 * @tc.require: SR000H63TL
1196 */
1197HWTEST_F(ProvisionTest, provision_test047, testing::ext::TestSize.Level1)
1198{
1199    ProfileInfo info;
1200    std::string provision = "{\"app-distribution-type\": \"app_gallery\",\"bundle-info\":{\"a"
1201        "pl\":\"apl_\",\"app-feature\":\"hos_system_app\",\"bundle-name\":\"com.example.nativetemp"
1202        "latedemo\",\"developer-id\":\"OpenHarmony\",\"development-certificate\":\"-----BEGIN CERTIFICATE-----\\n"
1203        "MIICXjCCAeOgAwIBAgIBATAKBggqhkjOPQQDAzBuMQswCQYDVQQGEwJDTjEUMBIG\\n"
1204        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
1205        "eTEpMCcGA1UEAwwgQXBwbGljYXRpb24gU2lnbmF0dXJlIFNlcnZpY2UgQ0EwHhcN\\n"
1206        "MjQwNDE1MDUzOTUyWhcNMjUwNDE1MDUzOTUyWjBaMQswCQYDVQQGEwJDTjEUMBIG\\n"
1207        "A1UECgwLT3Blbkhhcm1vbnkxHjAcBgNVBAsMFU9wZW5IYXJtb255IENvbW11bml0\\n"
1208        "eTEVMBMGA1UEAwwMQXBwMSBSZWxlYXNlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE\\n"
1209        "odSztdiucyVAo7VQnzHzBJsS9vQYa1vU1cP92F6fiJLazWtvEljNP1XoJldSZaN9\\n"
1210        "UYGdAVHh2yrHzaJFEqHCSB3uQhlJgSbl9sT0lJ4hro1YvVx921/knMRlunz4eAGX\\n"
1211        "o2kwZzAMBgNVHRMBAf8EAjAAMAsGA1UdDwQEAwIHgDATBgNVHSUEDDAKBggrBgEF\\n"
1212        "BQcDAzAbBgNVHQ4EFEpzK6IntvQxLaKGX6xZQSiISBx+MBgGDCsGAQQBj1sCgngB\\n"
1213        "AwQIMAYCAQEKAQAwCgYIKoZIzj0EAwMDaQAwZgIxAPboDdi9EhOiwAhO3N6vTRcK\\n"
1214        "QT1K1TQq2vjvpC2231Dq4tLPeSzLz6ROq+Zv6IgBYgIxAJ9sZZUBoR2lgPHBzt01\\n"
1215        "4uxt5nLfJj2XKa6Leb/JWDoosXjoVXoB47y699PtGetcFw==\\n"
1216        "-----END CERTIFICATE-----\\n"
1217        "\"},\"debug-info\":{\"device-id-type\":\"udid\",\"device-ids\":[\"69C7505BE341BDA594"
1218        "8C3C0CB44ABCD530296054159EFE0BD16A16CD0129CC42\",\"7EED06506FCE6325EB2E2FAA019458B856A"
1219        "B10493A6718C7679A73F958732865\"]},\"issuer\":\"pki_internal\",\"permissions\":{\"restr"
1220        "icted-permissions\":[\"\"]},\"type\":\"debug\",\"uuid\":\"fe686e1b-3770-4824-a938-961b"
1221        "140a7c98\",\"validity\":{\"not-after\":1705127532,\"not-before\":1610519532},\"versio"
1222        "n-code\":3,\"version-name\":\"1.0.0\"}";
1223    AppProvisionVerifyResult result = ParseProvision(provision, info);
1224    EXPECT_TRUE(result == PROVISION_OK);
1225}
1226
1227}
1228}
1229