154aa6d63Sopenharmony_ci/* 254aa6d63Sopenharmony_ci * Copyright (c) 2024-2024 Huawei Device Co., Ltd. 354aa6d63Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 454aa6d63Sopenharmony_ci * you may not use this file except in compliance with the License. 554aa6d63Sopenharmony_ci * You may obtain a copy of the License at 654aa6d63Sopenharmony_ci * 754aa6d63Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 854aa6d63Sopenharmony_ci * 954aa6d63Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1054aa6d63Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1154aa6d63Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1254aa6d63Sopenharmony_ci * See the License for the specific language governing permissions and 1354aa6d63Sopenharmony_ci * limitations under the License. 1454aa6d63Sopenharmony_ci */ 1554aa6d63Sopenharmony_ci#include "provision_verify_test.h" 1654aa6d63Sopenharmony_ci 1754aa6d63Sopenharmony_ci#include <gtest/gtest.h> 1854aa6d63Sopenharmony_ci#include "profile_verify.h" 1954aa6d63Sopenharmony_ci 2054aa6d63Sopenharmony_ciusing namespace testing::ext; 2154aa6d63Sopenharmony_cinamespace OHOS { 2254aa6d63Sopenharmony_cinamespace SignatureTools { 2354aa6d63Sopenharmony_ciconst std::string INVALID_PROVISION_1 = R"( 2454aa6d63Sopenharmony_ci{ 2554aa6d63Sopenharmony_ci "version-name": "1.0.0", 2654aa6d63Sopenharmony_ci "issuer": "App Gallery" 2754aa6d63Sopenharmony_ci})"; 2854aa6d63Sopenharmony_ciconst std::string INVALID_PROVISION_2 = R"( 2954aa6d63Sopenharmony_ci{ 3054aa6d63Sopenharmony_ci "version-code": 2, 3154aa6d63Sopenharmony_ci "version-name": "1.1.0", 3254aa6d63Sopenharmony_ci "uuid": "uuid_1_1", 3354aa6d63Sopenharmony_ci "type": "release", 3454aa6d63Sopenharmony_ci "app-distribution-type": "os_integration", 3554aa6d63Sopenharmony_ci "validity": { 3654aa6d63Sopenharmony_ci "not-before": 1262275201, 3754aa6d63Sopenharmony_ci "not-after": 2524579301 3854aa6d63Sopenharmony_ci }, 3954aa6d63Sopenharmony_ci "bundle-info": { 4054aa6d63Sopenharmony_ci "developer-id": "developer_id_1_1", 4154aa6d63Sopenharmony_ci "development-certificate": "ABCD", 4254aa6d63Sopenharmony_ci "distribution-certificate": "1234", 4354aa6d63Sopenharmony_ci "bundle-name": "com.test1_1", 4454aa6d63Sopenharmony_ci "apl": "normal", 4554aa6d63Sopenharmony_ci "app-feature": "hos_normal_app" 4654aa6d63Sopenharmony_ci } 4754aa6d63Sopenharmony_ci}})"; // brackets mismatching 4854aa6d63Sopenharmony_ciconst std::string INVALID_PROVISION_3 = R"( 4954aa6d63Sopenharmony_ci{ 5054aa6d63Sopenharmony_ci "version-code": 2, 5154aa6d63Sopenharmony_ci "version-name": "2.0.0", 5254aa6d63Sopenharmony_ci "uuid": "uuid_2", 5354aa6d63Sopenharmony_ci "type": "release", 5454aa6d63Sopenharmony_ci "app-distribution-type": "os_integration", 5554aa6d63Sopenharmony_ci "validity": { 5654aa6d63Sopenharmony_ci "not-before": 1262275200, 5754aa6d63Sopenharmony_ci "not-after": 2524579300 5854aa6d63Sopenharmony_ci }, 5954aa6d63Sopenharmony_ci "bundle-info": { 6054aa6d63Sopenharmony_ci "developer-id": "developer_id_2", 6154aa6d63Sopenharmony_ci "development-certificate": "ABCDEFG", 6254aa6d63Sopenharmony_ci "distribution-certificate": "123456789", 6354aa6d63Sopenharmony_ci "bundle-name": "com.test2", 6454aa6d63Sopenharmony_ci "app-feature": "hos_normal_app" 6554aa6d63Sopenharmony_ci } 6654aa6d63Sopenharmony_ci})"; // apl not exist 6754aa6d63Sopenharmony_ci/* validity: 2010 - 2030 */ 6854aa6d63Sopenharmony_ciconst std::string VALID_PROVISION = R"( 6954aa6d63Sopenharmony_ci{ 7054aa6d63Sopenharmony_ci "version-code": 2, 7154aa6d63Sopenharmony_ci "version-name": "2.0.0", 7254aa6d63Sopenharmony_ci "uuid": "uuid_2", 7354aa6d63Sopenharmony_ci "type": "release", 7454aa6d63Sopenharmony_ci "app-distribution-type": "os_integration", 7554aa6d63Sopenharmony_ci "validity": { 7654aa6d63Sopenharmony_ci "not-before": 1262275200, 7754aa6d63Sopenharmony_ci "not-after": 2524579300 7854aa6d63Sopenharmony_ci }, 7954aa6d63Sopenharmony_ci "bundle-info": { 8054aa6d63Sopenharmony_ci "developer-id": "developer_id_2", 8154aa6d63Sopenharmony_ci "development-certificate": "ABCDEFG", 8254aa6d63Sopenharmony_ci "distribution-certificate": "123456789", 8354aa6d63Sopenharmony_ci "bundle-name": "com.test2", 8454aa6d63Sopenharmony_ci "apl": "normal", 8554aa6d63Sopenharmony_ci "app-feature": "hos_normal_app" 8654aa6d63Sopenharmony_ci } 8754aa6d63Sopenharmony_ci})"; 8854aa6d63Sopenharmony_ciconst std::string VALID_PROVISION_PERMISSION = R"( 8954aa6d63Sopenharmony_ci{ 9054aa6d63Sopenharmony_ci "version-code": 3, 9154aa6d63Sopenharmony_ci "version-name": "3.0.0", 9254aa6d63Sopenharmony_ci "uuid": "uuid_3", 9354aa6d63Sopenharmony_ci "type": "release", 9454aa6d63Sopenharmony_ci "app-distribution-type": "app_gallery", 9554aa6d63Sopenharmony_ci "validity": { 9654aa6d63Sopenharmony_ci "not-before": 1262275300, 9754aa6d63Sopenharmony_ci "not-after": 2524579300 9854aa6d63Sopenharmony_ci }, 9954aa6d63Sopenharmony_ci "bundle-info": { 10054aa6d63Sopenharmony_ci "developer-id": "developer_id_3", 10154aa6d63Sopenharmony_ci "development-certificate": "ABCDEFGH", 10254aa6d63Sopenharmony_ci "distribution-certificate": "1234567890", 10354aa6d63Sopenharmony_ci "bundle-name": "com.test3", 10454aa6d63Sopenharmony_ci "apl": "normal", 10554aa6d63Sopenharmony_ci "app-feature": "hos_normal_app" 10654aa6d63Sopenharmony_ci }, 10754aa6d63Sopenharmony_ci "permissions" : { 10854aa6d63Sopenharmony_ci "restricted-permissions" : ["ohos.permission.GET_PHONE_STATE", 10954aa6d63Sopenharmony_ci "ohos.permission.GET_APP_ACCOUNTS"], 11054aa6d63Sopenharmony_ci "restricted-capabilities" : ["ohos.permission.test"] 11154aa6d63Sopenharmony_ci }, 11254aa6d63Sopenharmony_ci "issuer": "App Gallery" 11354aa6d63Sopenharmony_ci})"; 11454aa6d63Sopenharmony_ciconst std::string UNAUTHORIZED_DEVICE_EMPTY_DEVICE_LIST_PROVISION = R"( 11554aa6d63Sopenharmony_ci{ 11654aa6d63Sopenharmony_ci "version-code": 6, 11754aa6d63Sopenharmony_ci "version-name": "6.0.0", 11854aa6d63Sopenharmony_ci "uuid": "uuid_6", 11954aa6d63Sopenharmony_ci "type": "debug", 12054aa6d63Sopenharmony_ci "validity": { 12154aa6d63Sopenharmony_ci "not-before": 1262275600, 12254aa6d63Sopenharmony_ci "not-after": 2524579300 12354aa6d63Sopenharmony_ci }, 12454aa6d63Sopenharmony_ci "bundle-info": { 12554aa6d63Sopenharmony_ci "developer-id": "developer_id_6", 12654aa6d63Sopenharmony_ci "development-certificate": "ABCDEFGHIJ", 12754aa6d63Sopenharmony_ci "distribution-certificate": "1234567890123", 12854aa6d63Sopenharmony_ci "bundle-name": "com.test6", 12954aa6d63Sopenharmony_ci "apl": "normal", 13054aa6d63Sopenharmony_ci "app-feature": "hos_normal_app" 13154aa6d63Sopenharmony_ci }, 13254aa6d63Sopenharmony_ci "debug-info": { 13354aa6d63Sopenharmony_ci "device-id-type": "udid" 13454aa6d63Sopenharmony_ci }, 13554aa6d63Sopenharmony_ci "issuer": "App Gallery" 13654aa6d63Sopenharmony_ci})"; 13754aa6d63Sopenharmony_ciconst std::string UNSUPPORTED_DEVICE_TYPE_PROVISION = R"( 13854aa6d63Sopenharmony_ci{ 13954aa6d63Sopenharmony_ci "version-code": 7, 14054aa6d63Sopenharmony_ci "version-name": "7.0.0", 14154aa6d63Sopenharmony_ci "uuid": "uuid_7", 14254aa6d63Sopenharmony_ci "type": "debug", 14354aa6d63Sopenharmony_ci "validity": { 14454aa6d63Sopenharmony_ci "not-before": 1262275600, 14554aa6d63Sopenharmony_ci "not-after": 2524579300 14654aa6d63Sopenharmony_ci }, 14754aa6d63Sopenharmony_ci "bundle-info": { 14854aa6d63Sopenharmony_ci "developer-id": "developer_id_7", 14954aa6d63Sopenharmony_ci "development-certificate": "ABCDEFGHIJM", 15054aa6d63Sopenharmony_ci "distribution-certificate": "12345678901231", 15154aa6d63Sopenharmony_ci "bundle-name": "com.test7", 15254aa6d63Sopenharmony_ci "apl": "normal", 15354aa6d63Sopenharmony_ci "app-feature": "hos_normal_app" 15454aa6d63Sopenharmony_ci }, 15554aa6d63Sopenharmony_ci "debug-info": { 15654aa6d63Sopenharmony_ci "device-id-type": "unknownType", 15754aa6d63Sopenharmony_ci "device-ids" : ["1234ABCD"] 15854aa6d63Sopenharmony_ci }, 15954aa6d63Sopenharmony_ci "issuer": "App Gallery" 16054aa6d63Sopenharmony_ci})"; 16154aa6d63Sopenharmony_ciconst std::string DEVICE_UNAUTH_PROVISION = R"( 16254aa6d63Sopenharmony_ci{ 16354aa6d63Sopenharmony_ci "version-code": 8, 16454aa6d63Sopenharmony_ci "version-name": "8.0.0", 16554aa6d63Sopenharmony_ci "uuid": "uuid_8", 16654aa6d63Sopenharmony_ci "type": "debug", 16754aa6d63Sopenharmony_ci "validity": { 16854aa6d63Sopenharmony_ci "not-before": 1262275700, 16954aa6d63Sopenharmony_ci "not-after": 2524579300 17054aa6d63Sopenharmony_ci }, 17154aa6d63Sopenharmony_ci "bundle-info": { 17254aa6d63Sopenharmony_ci "developer-id": "developer_id_8", 17354aa6d63Sopenharmony_ci "development-certificate": "ABCDEFGHIJK", 17454aa6d63Sopenharmony_ci "distribution-certificate": "12345678901234", 17554aa6d63Sopenharmony_ci "bundle-name": "com.test8", 17654aa6d63Sopenharmony_ci "apl": "normal", 17754aa6d63Sopenharmony_ci "app-feature": "hos_normal_app" 17854aa6d63Sopenharmony_ci }, 17954aa6d63Sopenharmony_ci "debug-info": { 18054aa6d63Sopenharmony_ci "device-id-type": "udid", 18154aa6d63Sopenharmony_ci "device-ids" : ["1234ABCD"] 18254aa6d63Sopenharmony_ci }, 18354aa6d63Sopenharmony_ci "issuer": "App Gallery" 18454aa6d63Sopenharmony_ci})"; 18554aa6d63Sopenharmony_ci 18654aa6d63Sopenharmony_ciclass ProvisionVerifyTest : public testing::Test { 18754aa6d63Sopenharmony_cipublic: 18854aa6d63Sopenharmony_ci static void SetUpTestCase(void); 18954aa6d63Sopenharmony_ci 19054aa6d63Sopenharmony_ci static void TearDownTestCase(void); 19154aa6d63Sopenharmony_ci 19254aa6d63Sopenharmony_ci void SetUp(); 19354aa6d63Sopenharmony_ci 19454aa6d63Sopenharmony_ci void TearDown(); 19554aa6d63Sopenharmony_ci}; 19654aa6d63Sopenharmony_ci 19754aa6d63Sopenharmony_civoid ProvisionVerifyTest::SetUpTestCase(void) 19854aa6d63Sopenharmony_ci{ 19954aa6d63Sopenharmony_ci} 20054aa6d63Sopenharmony_ci 20154aa6d63Sopenharmony_civoid ProvisionVerifyTest::TearDownTestCase(void) 20254aa6d63Sopenharmony_ci{ 20354aa6d63Sopenharmony_ci} 20454aa6d63Sopenharmony_ci 20554aa6d63Sopenharmony_civoid ProvisionVerifyTest::SetUp() 20654aa6d63Sopenharmony_ci{ 20754aa6d63Sopenharmony_ci} 20854aa6d63Sopenharmony_ci 20954aa6d63Sopenharmony_civoid ProvisionVerifyTest::TearDown() 21054aa6d63Sopenharmony_ci{ 21154aa6d63Sopenharmony_ci} 21254aa6d63Sopenharmony_ci 21354aa6d63Sopenharmony_ci/** 21454aa6d63Sopenharmony_ci * @tc.name: Test HarmonyAppProvision ProvisionVerify001 function 21554aa6d63Sopenharmony_ci * @tc.desc: The static function will return verify result; 21654aa6d63Sopenharmony_ci * @tc.type: FUNC 21754aa6d63Sopenharmony_ci */ 21854aa6d63Sopenharmony_ciHWTEST_F(ProvisionVerifyTest, ProvisionVerify001, TestSize.Level1) 21954aa6d63Sopenharmony_ci{ 22054aa6d63Sopenharmony_ci /* 22154aa6d63Sopenharmony_ci * @tc.steps: step1. input a invalid HarmonyAppProvision 22254aa6d63Sopenharmony_ci * and run ParseAndVerify function. 22354aa6d63Sopenharmony_ci * @tc.expected: step1. return code will be PROVISION_INVALID. 22454aa6d63Sopenharmony_ci */ 22554aa6d63Sopenharmony_ci ProfileInfo info; 22654aa6d63Sopenharmony_ci int32_t ret = ParseAndVerify(INVALID_PROVISION_1, info); 22754aa6d63Sopenharmony_ci ASSERT_NE(ret, AppProvisionVerifyResult::PROVISION_OK); 22854aa6d63Sopenharmony_ci ret = ParseAndVerify(INVALID_PROVISION_2, info); 22954aa6d63Sopenharmony_ci ASSERT_NE(ret, AppProvisionVerifyResult::PROVISION_OK); 23054aa6d63Sopenharmony_ci ret = ParseAndVerify(INVALID_PROVISION_3, info); 23154aa6d63Sopenharmony_ci ASSERT_EQ(ret, AppProvisionVerifyResult::PROVISION_OK); 23254aa6d63Sopenharmony_ci} 23354aa6d63Sopenharmony_ci 23454aa6d63Sopenharmony_ci/** 23554aa6d63Sopenharmony_ci * @tc.name: Test HarmonyAppProvision ProvisionVerify002 function 23654aa6d63Sopenharmony_ci * @tc.desc: The static function will return verify result; 23754aa6d63Sopenharmony_ci * @tc.type: FUNC 23854aa6d63Sopenharmony_ci */ 23954aa6d63Sopenharmony_ciHWTEST_F(ProvisionVerifyTest, ProvisionVerify002, TestSize.Level1) 24054aa6d63Sopenharmony_ci{ 24154aa6d63Sopenharmony_ci /* 24254aa6d63Sopenharmony_ci * @tc.steps: step2. input a valid HarmonyAppProvision (without permission info) 24354aa6d63Sopenharmony_ci * and run ParseAndVerify function. 24454aa6d63Sopenharmony_ci * @tc.expected: step2. return code will be PROVISION_OK. 24554aa6d63Sopenharmony_ci */ 24654aa6d63Sopenharmony_ci ProfileInfo info; 24754aa6d63Sopenharmony_ci int32_t ret = ParseAndVerify(VALID_PROVISION, info); 24854aa6d63Sopenharmony_ci ASSERT_EQ(ret, AppProvisionVerifyResult::PROVISION_OK); 24954aa6d63Sopenharmony_ci ASSERT_EQ(info.versionCode, 2); // version code is 2 25054aa6d63Sopenharmony_ci ASSERT_EQ(info.versionName, "2.0.0"); 25154aa6d63Sopenharmony_ci ASSERT_EQ(info.uuid, "uuid_2"); 25254aa6d63Sopenharmony_ci ASSERT_EQ(info.type, ProvisionType::RELEASE); 25354aa6d63Sopenharmony_ci ASSERT_TRUE(info.permissions.restrictedPermissions.empty()); 25454aa6d63Sopenharmony_ci ASSERT_TRUE(info.permissions.restrictedCapabilities.empty()); 25554aa6d63Sopenharmony_ci} 25654aa6d63Sopenharmony_ci 25754aa6d63Sopenharmony_ci/** 25854aa6d63Sopenharmony_ci * @tc.name: Test HarmonyAppProvision ProvisionVerify003 function 25954aa6d63Sopenharmony_ci * @tc.desc: The static function will return verify result; 26054aa6d63Sopenharmony_ci * @tc.type: FUNC 26154aa6d63Sopenharmony_ci */ 26254aa6d63Sopenharmony_ciHWTEST_F(ProvisionVerifyTest, ProvisionVerify003, TestSize.Level1) 26354aa6d63Sopenharmony_ci{ 26454aa6d63Sopenharmony_ci /* 26554aa6d63Sopenharmony_ci * @tc.steps: step3. input a valid HarmonyAppProvision (with permission info) 26654aa6d63Sopenharmony_ci * and run ParseAndVerify function. 26754aa6d63Sopenharmony_ci * @tc.expected: step3. return code will be PROVISION_OK. 26854aa6d63Sopenharmony_ci */ 26954aa6d63Sopenharmony_ci ProfileInfo info; 27054aa6d63Sopenharmony_ci int32_t ret = ParseAndVerify(VALID_PROVISION_PERMISSION, info); 27154aa6d63Sopenharmony_ci ASSERT_EQ(ret, AppProvisionVerifyResult::PROVISION_OK); 27254aa6d63Sopenharmony_ci ASSERT_EQ(info.versionCode, 3); // version code is 3 27354aa6d63Sopenharmony_ci ASSERT_EQ(info.versionName, "3.0.0"); 27454aa6d63Sopenharmony_ci ASSERT_EQ(info.uuid, "uuid_3"); 27554aa6d63Sopenharmony_ci ASSERT_EQ(info.type, ProvisionType::RELEASE); 27654aa6d63Sopenharmony_ci ASSERT_EQ(info.distributionType, AppDistType::APP_GALLERY); 27754aa6d63Sopenharmony_ci ASSERT_TRUE(info.permissions.restrictedPermissions.size() == 2); // 2 restricted permissions 27854aa6d63Sopenharmony_ci ASSERT_EQ(info.permissions.restrictedPermissions[0], "ohos.permission.GET_PHONE_STATE"); 27954aa6d63Sopenharmony_ci ASSERT_TRUE(info.permissions.restrictedCapabilities.size() == 1); // 1 restricted capabilities 28054aa6d63Sopenharmony_ci ASSERT_EQ(info.permissions.restrictedCapabilities[0], "ohos.permission.test"); 28154aa6d63Sopenharmony_ci} 28254aa6d63Sopenharmony_ci} // namespace SignatureTools 28354aa6d63Sopenharmony_ci} // namespace OHOS 284