1bae44755Sopenharmony_ci/*
2bae44755Sopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd.
3bae44755Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4bae44755Sopenharmony_ci * you may not use this file except in compliance with the License.
5bae44755Sopenharmony_ci * You may obtain a copy of the License at
6bae44755Sopenharmony_ci *
7bae44755Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8bae44755Sopenharmony_ci *
9bae44755Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10bae44755Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11bae44755Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12bae44755Sopenharmony_ci * See the License for the specific language governing permissions and
13bae44755Sopenharmony_ci * limitations under the License.
14bae44755Sopenharmony_ci */
15bae44755Sopenharmony_ci
16bae44755Sopenharmony_ci#include <gtest/gtest.h>
17bae44755Sopenharmony_ci#include <cstdlib>
18bae44755Sopenharmony_ci#include "syscap_interface.h"
19bae44755Sopenharmony_ci#include "syscap_codec_test.h"
20bae44755Sopenharmony_ci
21bae44755Sopenharmony_ciusing namespace testing::ext;
22bae44755Sopenharmony_ciusing namespace std;
23bae44755Sopenharmony_ci
24bae44755Sopenharmony_cinamespace Syscap {
25bae44755Sopenharmony_civoid SyscapCodecTest::SetUpTestCase() {}
26bae44755Sopenharmony_civoid SyscapCodecTest::TearDownTestCase() {}
27bae44755Sopenharmony_civoid SyscapCodecTest::SetUp() {}
28bae44755Sopenharmony_civoid SyscapCodecTest::TearDown() {}
29bae44755Sopenharmony_ci
30bae44755Sopenharmony_ci/*
31bae44755Sopenharmony_ci * @tc.name: EncodeOsSyscap
32bae44755Sopenharmony_ci * @tc.desc: Check the OsSyscap Coding.
33bae44755Sopenharmony_ci * @tc.type: FUNC
34bae44755Sopenharmony_ci */
35bae44755Sopenharmony_ciHWTEST_F(SyscapCodecTest, EncodeOsSyscap, TestSize.Level1)
36bae44755Sopenharmony_ci{
37bae44755Sopenharmony_ci    int pcidLen = PCID_MAIN_BYTES;
38bae44755Sopenharmony_ci    char OsInput[SINGLE_SYSCAP_LEN] = {0};
39bae44755Sopenharmony_ci    EXPECT_TRUE(EncodeOsSyscap(OsInput, pcidLen));
40bae44755Sopenharmony_ci}
41bae44755Sopenharmony_ci
42bae44755Sopenharmony_ci/*
43bae44755Sopenharmony_ci * @tc.name: EncodePrivateSyscap
44bae44755Sopenharmony_ci * @tc.desc: Check the PrivateSyscap Coding.
45bae44755Sopenharmony_ci * @tc.type: FUNC
46bae44755Sopenharmony_ci */
47bae44755Sopenharmony_ciHWTEST_F(SyscapCodecTest, EncodePrivateSyscap, TestSize.Level1)
48bae44755Sopenharmony_ci{
49bae44755Sopenharmony_ci    char *charPriInput = nullptr;
50bae44755Sopenharmony_ci    int priOutLen;
51bae44755Sopenharmony_ci    EXPECT_TRUE(EncodePrivateSyscap(&charPriInput, &priOutLen));
52bae44755Sopenharmony_ci    // Currently, private syscap is null.
53bae44755Sopenharmony_ci    EXPECT_EQ(*charPriInput, '\0');
54bae44755Sopenharmony_ci    EXPECT_EQ(priOutLen, 0);
55bae44755Sopenharmony_ci    free(charPriInput);
56bae44755Sopenharmony_ci}
57bae44755Sopenharmony_ci
58bae44755Sopenharmony_ci/*
59bae44755Sopenharmony_ci * @tc.name: DecodeOsSyscap
60bae44755Sopenharmony_ci * @tc.desc: Check the OsSyscap Decoding.
61bae44755Sopenharmony_ci * @tc.type: FUNC
62bae44755Sopenharmony_ci */
63bae44755Sopenharmony_ciHWTEST_F(SyscapCodecTest, DecodeOsSyscap, TestSize.Level1)
64bae44755Sopenharmony_ci{
65bae44755Sopenharmony_ci    int osSyscap[32] = {1, 3, 3};
66bae44755Sopenharmony_ci    char (*osOutput)[SINGLE_SYSCAP_LEN] = nullptr;
67bae44755Sopenharmony_ci    int decodeOsCnt;
68bae44755Sopenharmony_ci    char expectOsOutput001[] = "SystemCapability.Account.AppAccount";
69bae44755Sopenharmony_ci    char expectOsOutput002[] = "SystemCapability.Account.OsAccount";
70bae44755Sopenharmony_ci    EXPECT_TRUE(DecodeOsSyscap((char *)osSyscap, &osOutput, &decodeOsCnt));
71bae44755Sopenharmony_ci    char (*tmpOsOutput)[SINGLE_SYSCAP_LEN] = osOutput;
72bae44755Sopenharmony_ci    EXPECT_STREQ(*tmpOsOutput, expectOsOutput001);
73bae44755Sopenharmony_ci    EXPECT_STREQ(*(tmpOsOutput + 1), expectOsOutput002);
74bae44755Sopenharmony_ci    EXPECT_EQ(decodeOsCnt, 2);
75bae44755Sopenharmony_ci    free(osOutput);
76bae44755Sopenharmony_ci}
77bae44755Sopenharmony_ci
78bae44755Sopenharmony_ci/*
79bae44755Sopenharmony_ci * @tc.name: DecodePrivateSyscap
80bae44755Sopenharmony_ci * @tc.desc: Check the null PrivateSyscap Decoding.
81bae44755Sopenharmony_ci * @tc.type: FUNC
82bae44755Sopenharmony_ci */
83bae44755Sopenharmony_ciHWTEST_F(SyscapCodecTest, DecodePrivateSyscap, TestSize.Level1)
84bae44755Sopenharmony_ci{
85bae44755Sopenharmony_ci    char (*priOutput)[SINGLE_SYSCAP_LEN] = nullptr;
86bae44755Sopenharmony_ci    char priSyscap[] = "Device.syscap1GEDR,Device.syscap2WREGW,Vendor."
87bae44755Sopenharmony_ci        "syscap3RGD,Vendor.syscap4RWEG,Vendor.syscap5REWGWE,";
88bae44755Sopenharmony_ci    int decodePriCnt;
89bae44755Sopenharmony_ci    char expectPriOutput001[] = "SystemCapability.Device.syscap1GEDR";
90bae44755Sopenharmony_ci    char expectPriOutput002[] = "SystemCapability.Device.syscap2WREGW";
91bae44755Sopenharmony_ci    char expectPriOutput003[] = "SystemCapability.Vendor.syscap3RGD";
92bae44755Sopenharmony_ci    char expectPriOutput004[] = "SystemCapability.Vendor.syscap4RWEG";
93bae44755Sopenharmony_ci    char expectPriOutput005[] = "SystemCapability.Vendor.syscap5REWGWE";
94bae44755Sopenharmony_ci    EXPECT_TRUE(DecodePrivateSyscap(priSyscap, &priOutput, &decodePriCnt));
95bae44755Sopenharmony_ci    char (*tmpPtiOutput)[SINGLE_SYSCAP_LEN] = priOutput;
96bae44755Sopenharmony_ci    EXPECT_STREQ(*tmpPtiOutput++, expectPriOutput001);
97bae44755Sopenharmony_ci    EXPECT_STREQ(*tmpPtiOutput++, expectPriOutput002);
98bae44755Sopenharmony_ci    EXPECT_STREQ(*tmpPtiOutput++, expectPriOutput003);
99bae44755Sopenharmony_ci    EXPECT_STREQ(*tmpPtiOutput++, expectPriOutput004);
100bae44755Sopenharmony_ci    EXPECT_STREQ(*tmpPtiOutput, expectPriOutput005);
101bae44755Sopenharmony_ci    EXPECT_EQ(decodePriCnt, 5);
102bae44755Sopenharmony_ci    free(priOutput);
103bae44755Sopenharmony_ci}
104bae44755Sopenharmony_ci
105bae44755Sopenharmony_ci/*
106bae44755Sopenharmony_ci * @tc.name: DecodePrivateSyscap1
107bae44755Sopenharmony_ci * @tc.desc: Check the PrivateSyscap Decoding.
108bae44755Sopenharmony_ci * @tc.type: FUNC
109bae44755Sopenharmony_ci */
110bae44755Sopenharmony_ciHWTEST_F(SyscapCodecTest, DecodePrivateSyscap1, TestSize.Level1)
111bae44755Sopenharmony_ci{
112bae44755Sopenharmony_ci    char *charPriInput = nullptr;
113bae44755Sopenharmony_ci    char (*priOutput)[SINGLE_SYSCAP_LEN] = nullptr;
114bae44755Sopenharmony_ci    int priOutLen;
115bae44755Sopenharmony_ci    int decodePriCnt;
116bae44755Sopenharmony_ci
117bae44755Sopenharmony_ci    EXPECT_TRUE(EncodePrivateSyscap(&charPriInput, &priOutLen));
118bae44755Sopenharmony_ci    if (priOutLen == 0) {
119bae44755Sopenharmony_ci        EXPECT_TRUE(DecodePrivateSyscap(charPriInput, &priOutput, &decodePriCnt));
120bae44755Sopenharmony_ci        EXPECT_EQ((void *)priOutput, (void *)nullptr);
121bae44755Sopenharmony_ci        EXPECT_EQ(decodePriCnt, 0);
122bae44755Sopenharmony_ci        free(priOutput);
123bae44755Sopenharmony_ci    }
124bae44755Sopenharmony_ci    free(charPriInput);
125bae44755Sopenharmony_ci}
126bae44755Sopenharmony_ci
127bae44755Sopenharmony_ci/*
128bae44755Sopenharmony_ci * @tc.name: ComparePcidString
129bae44755Sopenharmony_ci * @tc.desc: Check the DecodeRpcidToStringFormat Decoding.
130bae44755Sopenharmony_ci * @tc.type: FUNC
131bae44755Sopenharmony_ci */
132bae44755Sopenharmony_ciHWTEST_F(SyscapCodecTest, ComparePcidString, TestSize.Level1)
133bae44755Sopenharmony_ci{
134bae44755Sopenharmony_ci    CompareError result = {{0}, 0, 0};
135bae44755Sopenharmony_ci    const char pcidString[] = "263168,0,3473408,0,0,0,1634,0,0,0,0,0,0,0,0,0,0,"\
136bae44755Sopenharmony_ci                              "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,SystemCapability.vendor.xxxxx3,"\
137bae44755Sopenharmony_ci                              "SystemCapability.device.xxxxx4";
138bae44755Sopenharmony_ci    const char rpcidString[] = "33588992,1766370052,65536,276824064,0,0,0,0,0,0,"\
139bae44755Sopenharmony_ci                               "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"\
140bae44755Sopenharmony_ci                               "SystemCapability.vendor.xxxxx1,SystemCapability.device.xxxxx2";
141bae44755Sopenharmony_ci    const char expect[][256] = {"SystemCapability.HiviewDFX.HiLogLite",
142bae44755Sopenharmony_ci                                "SystemCapability.HiviewDFX.Hiview.FaultLogger",
143bae44755Sopenharmony_ci                                "SystemCapability.vendor.xxxxx1",
144bae44755Sopenharmony_ci                                "SystemCapability.device.xxxxx2"};
145bae44755Sopenharmony_ci    int32_t ret = ComparePcidString(pcidString, rpcidString, &result);
146bae44755Sopenharmony_ci    EXPECT_EQ(ret, 3);
147bae44755Sopenharmony_ci    EXPECT_EQ(result.targetApiVersion, 7);
148bae44755Sopenharmony_ci    EXPECT_EQ(result.missSyscapNum, 4);
149bae44755Sopenharmony_ci    for (int i = 0; i < result.missSyscapNum; i++) {
150bae44755Sopenharmony_ci        EXPECT_STREQ(result.syscap[i], expect[i]);
151bae44755Sopenharmony_ci    }
152bae44755Sopenharmony_ci    (void)FreeCompareError(&result);
153bae44755Sopenharmony_ci    EXPECT_EQ(result.targetApiVersion, 0);
154bae44755Sopenharmony_ci    EXPECT_EQ(result.missSyscapNum, 0);
155bae44755Sopenharmony_ci    for (int i = 0; i < MAX_MISS_SYSCAP; i++) {
156bae44755Sopenharmony_ci        EXPECT_EQ((void *)result.syscap[i], (void *)nullptr);
157bae44755Sopenharmony_ci    }
158bae44755Sopenharmony_ci}
159bae44755Sopenharmony_ci} // namespace Syscap
160