1 /*
2 * Copyright (c) 2023 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_TRUE(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_TRUE(data != nullptr);
79 ASSERT_TRUE((data->GetData() != nullptr) && (data->GetDataLength() > 0));
80 }
81
82 /**
83 * @tc.name: RawDatabaseDefTest001
84 * @tc.desc: Some api interfaces of raw data base definition test
85 * @tc.type: FUNC
86 * @tc.require: issueI7E737
87 */
88 HWTEST_F(HiSysEventEncodedTest, RawDatabaseDefTest001, TestSize.Level1)
89 {
90 auto tzIndex = ParseTimeZone(3600); // 3600 is a valid timezone value
91 ASSERT_TRUE(tzIndex == 0); // reference to ALL_TIME_ZONES defined in raw_data_base_def.cpp
92 tzIndex = ParseTimeZone(15); // 15 is an invalid timezone value
93 ASSERT_TRUE(tzIndex == 14); // default index
94 }
95
96 /**
97 * @tc.name: RawDataTest001
98 * @tc.desc: Construction and destruction of RawData
99 * @tc.type: FUNC
100 * @tc.require: issueI8YWH1
101 */
102 HWTEST_F(HiSysEventEncodedTest, RawDataTest001, TestSize.Level1)
103 {
104 Encoded::RawData rawData1(nullptr, 0);
105 ASSERT_TRUE(rawData1.IsEmpty());
106 Encoded::RawData rawData2 = rawData1;
107 ASSERT_TRUE(rawData2.IsEmpty());
108 uint64_t val = 2323232; // 2323232 is a random test numeber
109 std::shared_ptr<EncodedParam> param = std::make_shared<UnsignedVarintEncodedParam<uint64_t>>("KEY1", val);
110 auto rawData3 = std::make_shared<Encoded::RawData>(nullptr, 0);
111 param->SetRawData(rawData3);
112 auto appendRawData = param->GetRawData();
113 rawData1 = *appendRawData;
114 ASSERT_TRUE(!rawData1.IsEmpty());
115 Encoded::RawData rawData4 = rawData1;
116 ASSERT_EQ(rawData1.GetDataLength(), rawData4.GetDataLength());
117 Encoded::RawData rawData5(appendRawData->GetData(), appendRawData->GetDataLength());
118 ASSERT_EQ(appendRawData->GetDataLength(), rawData5.GetDataLength());
119 }
120
121 /**
122 * @tc.name: TransportTest001
123 * @tc.desc: Send raw data
124 * @tc.type: FUNC
125 * @tc.require: issueI8YWH1
126 */
127 HWTEST_F(HiSysEventEncodedTest, TransportTest001, TestSize.Level1)
128 {
129 auto rawData1 = std::make_shared<Encoded::RawData>();
130 ASSERT_TRUE(rawData1->IsEmpty());
131 ASSERT_EQ(Transport::GetInstance().SendData(*rawData1), ERR_EMPTY_EVENT);
132 uint64_t val = 2323232; // 2323232 is a random test numeber
133 std::shared_ptr<EncodedParam> param = std::make_shared<UnsignedVarintEncodedParam<uint64_t>>("KEY1", val);
134 ASSERT_TRUE(param != nullptr);
135 param->SetRawData(rawData1);
136 param->Encode();
137 auto rawData2 = param->GetRawData();
138 ASSERT_TRUE(!rawData2->IsEmpty());
139 ASSERT_EQ(Transport::GetInstance().SendData(*rawData2), SUCCESS);
140 }
141