1 /*
2 * Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved.
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 #include <fcntl.h>
16 #include <fstream>
17 #include <gtest/gtest.h>
18 #include <string>
19 #include <thread>
20 #include <unistd.h>
21
22 #include "result_transporter.h"
23 #include "trace_plugin_config.pb.h"
24 #include "trace_plugin_result.pb.h"
25
26 using namespace testing::ext;
27
28 namespace {
29 constexpr int WAIT_MS = 1000;
30 using WriterStructPtr = std::unique_ptr<WriterStruct>::pointer;
31 using ConstVoidPtr = std::unique_ptr<const void>::pointer;
32 class ResultTransporterTest : public ::testing::Test {
33 protected:
34 std::string name_;
35
36 void SetUp() override
37 {
38 name_ = "Transporter";
39 }
40
41 void TearDown() override {}
42 };
43
WriteFunc(WriterStructPtr writer, ConstVoidPtr data, size_t size)44 long WriteFunc(WriterStructPtr writer, ConstVoidPtr data, size_t size)
45 {
46 if (writer == nullptr || data == nullptr || size <= 0) {
47 return -1;
48 }
49
50 return 0;
51 }
52
FlushFunc(WriterStructPtr writer)53 bool FlushFunc(WriterStructPtr writer)
54 {
55 if (writer == nullptr) {
56 return false;
57 }
58 return true;
59 }
60
61 /*
62 * @tc.name: IsFlushTime
63 * @tc.desc: test ResultTransporter::IsFlushTime.
64 * @tc.type: FUNC
65 */
HWTEST_F(ResultTransporterTest, IsFlushTimeInvalidParam, TestSize.Level1)66 HWTEST_F(ResultTransporterTest, IsFlushTimeInvalidParam, TestSize.Level1)
67 {
68 OHOS::Profiler::Plugins::ResultTransporter reporter("", nullptr);
69 reporter.SetFlushInterval(WAIT_MS);
70 reporter.IsFlushTime();
71 usleep(WAIT_MS);
72 EXPECT_FALSE(reporter.IsFlushTime());
73 }
74
75 /*
76 * @tc.name: IsFlushTime
77 * @tc.desc: test ResultTransporter::IsFlushTime.
78 * @tc.type: FUNC
79 */
HWTEST_F(ResultTransporterTest, IsFlushTimeTrue, TestSize.Level1)80 HWTEST_F(ResultTransporterTest, IsFlushTimeTrue, TestSize.Level1)
81 {
82 WriterStruct writer = {WriteFunc, FlushFunc};
83 OHOS::Profiler::Plugins::ResultTransporter reporter(name_, static_cast<WriterStructPtr>(&writer));
84 reporter.SetFlushInterval(1);
85 EXPECT_TRUE(reporter.IsFlushTime());
86 }
87
88 /*
89 * @tc.name: IsFlushTime
90 * @tc.desc: test ResultTransporter::IsFlushTime.
91 * @tc.type: FUNC
92 */
HWTEST_F(ResultTransporterTest, IsFlushTimeFalse, TestSize.Level1)93 HWTEST_F(ResultTransporterTest, IsFlushTimeFalse, TestSize.Level1)
94 {
95 WriterStruct writer = {WriteFunc, FlushFunc};
96 OHOS::Profiler::Plugins::ResultTransporter reporter(name_, static_cast<WriterStructPtr>(&writer));
97 reporter.SetFlushInterval(WAIT_MS);
98 reporter.IsFlushTime();
99 usleep(WAIT_MS);
100 EXPECT_FALSE(reporter.IsFlushTime());
101 }
102
103 /*
104 * @tc.name: Write
105 * @tc.desc: test ResultTransporter::Submit.
106 * @tc.type: FUNC
107 */
HWTEST_F(ResultTransporterTest, WriteInvalidParam, TestSize.Level1)108 HWTEST_F(ResultTransporterTest, WriteInvalidParam, TestSize.Level1)
109 {
110 OHOS::Profiler::Plugins::ResultTransporter reporter("", nullptr);
111 auto packet = std::make_unique<TracePluginResult>();
112 ASSERT_TRUE(reporter.Submit(std::move(packet)));
113 }
114
115 /*
116 * @tc.name: Write
117 * @tc.desc: test ResultTransporter::Submit.
118 * @tc.type: FUNC
119 */
HWTEST_F(ResultTransporterTest, FlushInvalidParam, TestSize.Level1)120 HWTEST_F(ResultTransporterTest, FlushInvalidParam, TestSize.Level1)
121 {
122 WriterStruct flush = {WriteFunc, nullptr};
123 OHOS::Profiler::Plugins::ResultTransporter reporter(name_, static_cast<WriterStructPtr>(&flush));
124 auto packet = std::make_unique<TracePluginResult>();
125 reporter.SetFlushInterval(0);
126 ASSERT_TRUE(reporter.IsFlushTime());
127 reporter.SetFlushThreshold(0);
128 EXPECT_TRUE(reporter.Submit(std::move(packet)));
129 }
130
131 /*
132 * @tc.name: Write
133 * @tc.desc: test ResultTransporter::Submit.
134 * @tc.type: FUNCquit
135 */
HWTEST_F(ResultTransporterTest, WriteFalse, TestSize.Level1)136 HWTEST_F(ResultTransporterTest, WriteFalse, TestSize.Level1)
137 {
138 WriterStruct writer = {WriteFunc, FlushFunc};
139 OHOS::Profiler::Plugins::ResultTransporter reporter(name_, static_cast<WriterStructPtr>(&writer));
140 auto packet = std::make_unique<TracePluginResult>();
141 reporter.SetFlushInterval(0);
142 ASSERT_TRUE(reporter.IsFlushTime());
143 reporter.SetFlushThreshold(0);
144 EXPECT_TRUE(reporter.Submit(std::move(packet)));
145 }
146 } // namespace