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