1 /*
2  * Copyright (c) 2023-2024 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 
18 #include <limits>
19 #include <memory>
20 
21 #include "gtest/gtest-message.h"
22 #include "gtest/gtest-test-part.h"
23 #include "gtest/hwext/gtest-ext.h"
24 #include "gtest/hwext/gtest-tag.h"
25 
26 #include "encoded_param.h"
27 #include "hisysevent.h"
28 #include "raw_data_base_def.h"
29 #include "raw_data_encoder.h"
30 #include "raw_data.h"
31 #include "transport.h"
32 
33 using namespace testing::ext;
34 using namespace OHOS::HiviewDFX;
35 using namespace OHOS::HiviewDFX::Encoded;
36 
37 class HiSysEventEncodedTest : public testing::Test {
38 public:
39     static void SetUpTestCase(void);
40     static void TearDownTestCase(void);
41     void SetUp();
42     void TearDown();
43 };
44 
SetUpTestCase(void)45 void HiSysEventEncodedTest::SetUpTestCase(void)
46 {
47 }
48 
TearDownTestCase(void)49 void HiSysEventEncodedTest::TearDownTestCase(void)
50 {
51 }
52 
SetUp(void)53 void HiSysEventEncodedTest::SetUp(void)
54 {
55 }
56 
TearDown(void)57 void HiSysEventEncodedTest::TearDown(void)
58 {
59 }
60 
61 /**
62  * @tc.name: EncodeParamTest001
63  * @tc.desc: EncodeParam api interfaces test
64  * @tc.type: FUNC
65  * @tc.require: issueI7E737
66  */
67 HWTEST_F(HiSysEventEncodedTest, EncodeParamTest001, TestSize.Level1)
68 {
69     uint64_t val = 39912344; // a random numeber
70     std::shared_ptr<EncodedParam> param = std::make_shared<UnsignedVarintEncodedParam<uint64_t>>("KEY", val);
71     auto data = param->GetRawData();
72     ASSERT_EQ(data, nullptr);
73     ASSERT_TRUE(!param->Encode());
74     auto rawData = std::make_shared<Encoded::RawData>();
75     param->SetRawData(rawData);
76     ASSERT_TRUE(param->Encode());
77     data = param->GetRawData();
78     ASSERT_NE(data, nullptr);
79     ASSERT_NE(data->GetData(), nullptr);
80     ASSERT_GT(data->GetDataLength(), 0);
81 }
82 
83 /**
84  * @tc.name: RawDatabaseDefTest001
85  * @tc.desc: Some api interfaces of raw data base definition test
86  * @tc.type: FUNC
87  * @tc.require: issueI7E737
88  */
89 HWTEST_F(HiSysEventEncodedTest, RawDatabaseDefTest001, TestSize.Level1)
90 {
91     auto tzIndex = ParseTimeZone(3600); // 3600 is a valid timezone value
92     ASSERT_EQ(tzIndex, 0); // reference to ALL_TIME_ZONES defined in raw_data_base_def.cpp
93     tzIndex = ParseTimeZone(15); // 15 is an invalid timezone value
94     ASSERT_EQ(tzIndex, 14); // default index
95 }
96 
97 /**
98  * @tc.name: RawDataTest001
99  * @tc.desc: Construction and destruction of RawData
100  * @tc.type: FUNC
101  * @tc.require: issueI8YWH1
102  */
103 HWTEST_F(HiSysEventEncodedTest, RawDataTest001, TestSize.Level1)
104 {
105     Encoded::RawData rawData1(nullptr, 0);
106     ASSERT_TRUE(rawData1.IsEmpty());
107     Encoded::RawData rawData2 = rawData1;
108     ASSERT_TRUE(rawData2.IsEmpty());
109     uint64_t val = 2323232; // 2323232 is a random test numeber
110     std::shared_ptr<EncodedParam> param = std::make_shared<UnsignedVarintEncodedParam<uint64_t>>("KEY1", val);
111     auto rawData3 = std::make_shared<Encoded::RawData>(nullptr, 0);
112     param->SetRawData(rawData3);
113     auto appendRawData = param->GetRawData();
114     rawData1 = *appendRawData;
115     ASSERT_TRUE(!rawData1.IsEmpty());
116     Encoded::RawData rawData4 = rawData1;
117     ASSERT_EQ(rawData1.GetDataLength(), rawData4.GetDataLength());
118     Encoded::RawData rawData5(appendRawData->GetData(), appendRawData->GetDataLength());
119     ASSERT_EQ(appendRawData->GetDataLength(), rawData5.GetDataLength());
120 }
121 
122 /**
123  * @tc.name: TransportTest001
124  * @tc.desc: Send raw data
125  * @tc.type: FUNC
126  * @tc.require: issueI8YWH1
127  */
128 HWTEST_F(HiSysEventEncodedTest, TransportTest001, TestSize.Level1)
129 {
130     auto rawData1 = std::make_shared<Encoded::RawData>();
131     ASSERT_TRUE(rawData1->IsEmpty());
132     ASSERT_EQ(Transport::GetInstance().SendData(*rawData1), ERR_EMPTY_EVENT);
133     uint64_t val = 2323232; // 2323232 is a random test numeber
134     std::shared_ptr<EncodedParam> param = std::make_shared<UnsignedVarintEncodedParam<uint64_t>>("KEY1", val);
135     ASSERT_NE(param, nullptr);
136     param->SetRawData(rawData1);
137     param->Encode();
138     auto rawData2 = param->GetRawData();
139     ASSERT_TRUE(!rawData2->IsEmpty());
140     ASSERT_EQ(Transport::GetInstance().SendData(*rawData2), SUCCESS);
141 }
142