• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 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 
16 #include <gtest/gtest.h>
17 #include <cstdlib>
18 #include "syscap_interface.h"
19 #include "syscap_codec_test.h"
20 
21 using namespace testing::ext;
22 using namespace std;
23 
24 namespace Syscap {
SetUpTestCase()25 void SyscapCodecTest::SetUpTestCase() {}
TearDownTestCase()26 void SyscapCodecTest::TearDownTestCase() {}
SetUp()27 void SyscapCodecTest::SetUp() {}
TearDown()28 void SyscapCodecTest::TearDown() {}
29 
30 /*
31  * @tc.name: EncodeOsSyscap
32  * @tc.desc: Check the OsSyscap Coding.
33  * @tc.type: FUNC
34  */
35 HWTEST_F(SyscapCodecTest, EncodeOsSyscap, TestSize.Level1)
36 {
37     int pcidLen = PCID_MAIN_BYTES;
38     char OsInput[SINGLE_SYSCAP_LEN] = {0};
39     EXPECT_TRUE(EncodeOsSyscap(OsInput, pcidLen));
40 }
41 
42 /*
43  * @tc.name: EncodePrivateSyscap
44  * @tc.desc: Check the PrivateSyscap Coding.
45  * @tc.type: FUNC
46  */
47 HWTEST_F(SyscapCodecTest, EncodePrivateSyscap, TestSize.Level1)
48 {
49     char *charPriInput = nullptr;
50     int priOutLen;
51     EXPECT_TRUE(EncodePrivateSyscap(&charPriInput, &priOutLen));
52     // Currently, private syscap is null.
53     EXPECT_EQ(*charPriInput, '\0');
54     EXPECT_EQ(priOutLen, 0);
55     free(charPriInput);
56 }
57 
58 /*
59  * @tc.name: DecodeOsSyscap
60  * @tc.desc: Check the OsSyscap Decoding.
61  * @tc.type: FUNC
62  */
63 HWTEST_F(SyscapCodecTest, DecodeOsSyscap, TestSize.Level1)
64 {
65     int osSyscap[32] = {1, 3, 3};
66     char (*osOutput)[SINGLE_SYSCAP_LEN] = nullptr;
67     int decodeOsCnt;
68     char expectOsOutput001[] = "SystemCapability.Account.AppAccount";
69     char expectOsOutput002[] = "SystemCapability.Account.OsAccount";
70     EXPECT_TRUE(DecodeOsSyscap((char *)osSyscap, &osOutput, &decodeOsCnt));
71     char (*tmpOsOutput)[SINGLE_SYSCAP_LEN] = osOutput;
72     EXPECT_STREQ(*tmpOsOutput, expectOsOutput001);
73     EXPECT_STREQ(*(tmpOsOutput + 1), expectOsOutput002);
74     EXPECT_EQ(decodeOsCnt, 2);
75     free(osOutput);
76 }
77 
78 /*
79  * @tc.name: DecodePrivateSyscap
80  * @tc.desc: Check the null PrivateSyscap Decoding.
81  * @tc.type: FUNC
82  */
83 HWTEST_F(SyscapCodecTest, DecodePrivateSyscap, TestSize.Level1)
84 {
85     char (*priOutput)[SINGLE_SYSCAP_LEN] = nullptr;
86     char priSyscap[] = "Device.syscap1GEDR,Device.syscap2WREGW,Vendor."
87         "syscap3RGD,Vendor.syscap4RWEG,Vendor.syscap5REWGWE,";
88     int decodePriCnt;
89     char expectPriOutput001[] = "SystemCapability.Device.syscap1GEDR";
90     char expectPriOutput002[] = "SystemCapability.Device.syscap2WREGW";
91     char expectPriOutput003[] = "SystemCapability.Vendor.syscap3RGD";
92     char expectPriOutput004[] = "SystemCapability.Vendor.syscap4RWEG";
93     char expectPriOutput005[] = "SystemCapability.Vendor.syscap5REWGWE";
94     EXPECT_TRUE(DecodePrivateSyscap(priSyscap, &priOutput, &decodePriCnt));
95     char (*tmpPtiOutput)[SINGLE_SYSCAP_LEN] = priOutput;
96     EXPECT_STREQ(*tmpPtiOutput++, expectPriOutput001);
97     EXPECT_STREQ(*tmpPtiOutput++, expectPriOutput002);
98     EXPECT_STREQ(*tmpPtiOutput++, expectPriOutput003);
99     EXPECT_STREQ(*tmpPtiOutput++, expectPriOutput004);
100     EXPECT_STREQ(*tmpPtiOutput, expectPriOutput005);
101     EXPECT_EQ(decodePriCnt, 5);
102     free(priOutput);
103 }
104 
105 /*
106  * @tc.name: DecodePrivateSyscap1
107  * @tc.desc: Check the PrivateSyscap Decoding.
108  * @tc.type: FUNC
109  */
110 HWTEST_F(SyscapCodecTest, DecodePrivateSyscap1, TestSize.Level1)
111 {
112     char *charPriInput = nullptr;
113     char (*priOutput)[SINGLE_SYSCAP_LEN] = nullptr;
114     int priOutLen;
115     int decodePriCnt;
116 
117     EXPECT_TRUE(EncodePrivateSyscap(&charPriInput, &priOutLen));
118     if (priOutLen == 0) {
119         EXPECT_TRUE(DecodePrivateSyscap(charPriInput, &priOutput, &decodePriCnt));
120         EXPECT_EQ((void *)priOutput, (void *)nullptr);
121         EXPECT_EQ(decodePriCnt, 0);
122         free(priOutput);
123     }
124     free(charPriInput);
125 }
126 
127 /*
128  * @tc.name: ComparePcidString
129  * @tc.desc: Check the DecodeRpcidToStringFormat Decoding.
130  * @tc.type: FUNC
131  */
132 HWTEST_F(SyscapCodecTest, ComparePcidString, TestSize.Level1)
133 {
134     CompareError result = {{0}, 0, 0};
135     const char pcidString[] = "263168,0,3473408,0,0,0,1634,0,0,0,0,0,0,0,0,0,0,"\
136                               "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,SystemCapability.vendor.xxxxx3,"\
137                               "SystemCapability.device.xxxxx4";
138     const char rpcidString[] = "33588992,1766370052,65536,276824064,0,0,0,0,0,0,"\
139                                "0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"\
140                                "SystemCapability.vendor.xxxxx1,SystemCapability.device.xxxxx2";
141     const char expect[][256] = {"SystemCapability.HiviewDFX.HiLogLite",
142                                 "SystemCapability.HiviewDFX.Hiview.FaultLogger",
143                                 "SystemCapability.vendor.xxxxx1",
144                                 "SystemCapability.device.xxxxx2"};
145     int32_t ret = ComparePcidString(pcidString, rpcidString, &result);
146     EXPECT_EQ(ret, 3);
147     EXPECT_EQ(result.targetApiVersion, 7);
148     EXPECT_EQ(result.missSyscapNum, 4);
149     for (int i = 0; i < result.missSyscapNum; i++) {
150         EXPECT_STREQ(result.syscap[i], expect[i]);
151     }
152     (void)FreeCompareError(&result);
153     EXPECT_EQ(result.targetApiVersion, 0);
154     EXPECT_EQ(result.missSyscapNum, 0);
155     for (int i = 0; i < MAX_MISS_SYSCAP; i++) {
156         EXPECT_EQ((void *)result.syscap[i], (void *)nullptr);
157     }
158 }
159 } // namespace Syscap
160