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