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