• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 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 #include <fstream>
18 #include <sstream>
19 
20 #ifdef GTEST_API_
21 #define private public
22 #define protected public
23 #endif
24 
25 #include "dns_quality_diag.h"
26 #include "third_party/musl/include/netdb.h"
27 #include "net_handle.h"
28 #include "net_conn_client.h"
29 
30 namespace OHOS {
31 namespace nmd {
32 namespace {
33 using namespace testing::ext;
34 const uint32_t MAX_RESULT_SIZE = 32;
35 }  // namespace
36 
37 class DnsQualityDiagTest : public testing::Test {
38 public:
39     static void SetUpTestCase();
40     static void TearDownTestCase();
41     void SetUp();
42     void TearDown();
43 
44 protected:
45     NetsysNative::NetDnsResultReport report;
46     DnsQualityDiag dnsQualityDiag;
47     struct AddrInfo addrinfoIpv4;
48     struct AddrInfo addrinfoIpv6;
49 };
50 
SetUpTestCase()51 void DnsQualityDiagTest::SetUpTestCase() {}
52 
TearDownTestCase()53 void DnsQualityDiagTest::TearDownTestCase() {}
54 
SetUp()55 void DnsQualityDiagTest::SetUp() {}
56 
TearDown()57 void DnsQualityDiagTest::TearDown() {}
58 
59 HWTEST_F(DnsQualityDiagTest, DnsQualityDiag_ShouldReturnZero_WhenCalled, TestSize.Level0)
60 {
61     EXPECT_EQ(dnsQualityDiag.InitHandler(), 0);
62 }
63 
64 HWTEST_F(DnsQualityDiagTest, GetInstanceShouldReturnSingletonInstance, TestSize.Level0)
65 {
66     DnsQualityDiag &instance1 = DnsQualityDiag::GetInstance();
67     DnsQualityDiag &instance2 = DnsQualityDiag::GetInstance();
68     EXPECT_EQ(instance1.report_delay, instance2.report_delay);
69 }
70 
71 HWTEST_F(DnsQualityDiagTest, SendHealthReport_ShouldReturnZero_WhenCalled, TestSize.Level0)
72 {
73     NetsysNative::NetDnsHealthReport healthreport;
74     EXPECT_EQ(dnsQualityDiag.SendHealthReport(healthreport), 0);
75 }
76 
77 HWTEST_F(DnsQualityDiagTest, ParseReportAddr_ShouldAddIPv4AndIPv6_WhenCalledWithValidAddrInfo, TestSize.Level0)
78 {
79     uint32_t size = 2;
80     addrinfoIpv4.aiFamily = AF_INET;
81     addrinfoIpv6.aiFamily = AF_INET6;
82     struct AddrInfo addrinfo[2] = { addrinfoIpv4, addrinfoIpv6 };
83 
84     int32_t returnCode = dnsQualityDiag.ParseReportAddr(size, addrinfo, report);
85 
86     EXPECT_EQ(report.addrlist_.size(), 2);
87     EXPECT_EQ(returnCode, 0);
88 }
89 
90 HWTEST_F(DnsQualityDiagTest, ParseReportAddr_ShouldNotAddMoreThanMaxSize_WhenCalledWithMoreAddrInfo, TestSize.Level0)
91 {
92     uint32_t size = MAX_RESULT_SIZE + 1;
93     addrinfoIpv4.aiFamily = AF_INET;
94     struct AddrInfo addrinfo[MAX_RESULT_SIZE + 1] = { addrinfoIpv4 };
95 
96     int32_t returnCode = dnsQualityDiag.ParseReportAddr(size, addrinfo, report);
97 
98     EXPECT_EQ(report.addrlist_.size(), MAX_RESULT_SIZE);
99     EXPECT_EQ(returnCode, 0);
100 }
101 
102 HWTEST_F(DnsQualityDiagTest, ReportDnsResult_ShouldReturnZero_WhenCalled_01, TestSize.Level0)
103 {
104     uint16_t netId = 1;
105     uint16_t uid = 1;
106     uint32_t pid = 1;
107     int32_t usedtime = 1;
108     char name[] = "test";
109     uint32_t size = 1;
110     int32_t failreason = 0;
111     QueryParam queryParam;
112     AddrInfo addrinfo;
113     EXPECT_EQ(dnsQualityDiag.ReportDnsResult(netId, uid, pid, usedtime, name, size, failreason, queryParam, &addrinfo),
114               0);
115 }
116 
117 HWTEST_F(DnsQualityDiagTest, ReportDnsResult_ShouldReturnZero_WhenCalled_02, TestSize.Level0)
118 {
119     uint16_t netId = 1;
120     uint16_t uid = 1;
121     uint32_t pid = 1;
122     int32_t usedtime = 1;
123     char name[] = "test";
124     uint32_t size = 1;
125     int32_t failreason = 1;
126     QueryParam queryParam;
127     AddrInfo addrinfo;
128     EXPECT_EQ(dnsQualityDiag.ReportDnsResult(netId, uid, pid, usedtime, name, size, failreason, queryParam, &addrinfo),
129               0);
130 }
131 
132 HWTEST_F(DnsQualityDiagTest, ReportDnsResult_ShouldIgnore_WhenQueryTypeIsOne, TestSize.Level0)
133 {
134     uint16_t netId = 1;
135     uint16_t uid = 1;
136     uint32_t pid = 1;
137     int32_t usedtime = 100;
138     char name[] = "test";
139     uint32_t size = 10;
140     int32_t failreason = 0;
141     QueryParam queryParam;
142     queryParam.type = 1;
143     AddrInfo addrinfo;
144 
145     int32_t result =
146         dnsQualityDiag.ReportDnsResult(netId, uid, pid, usedtime, name, size, failreason, queryParam, &addrinfo);
147     EXPECT_EQ(result, 0);
148 }
149 
150 HWTEST_F(DnsQualityDiagTest, RegisterResultListener_ShouldReturnZero_WhenCalled, TestSize.Level0)
151 {
152     sptr<NetsysNative::INetDnsResultCallback> callback;
153     uint32_t timeStep = 1;
154     EXPECT_EQ(dnsQualityDiag.RegisterResultListener(callback, timeStep), 0);
155 }
156 
157 HWTEST_F(DnsQualityDiagTest, UnregisterResultListener_ShouldReturnZero_WhenCalled, TestSize.Level0)
158 {
159     sptr<NetsysNative::INetDnsResultCallback> callback;
160     EXPECT_EQ(dnsQualityDiag.UnregisterResultListener(callback), 0);
161 }
162 
163 HWTEST_F(DnsQualityDiagTest, RegisterHealthListener_ShouldReturnZero_WhenCalled, TestSize.Level0)
164 {
165     sptr<NetsysNative::INetDnsHealthCallback> callback;
166     EXPECT_EQ(dnsQualityDiag.RegisterHealthListener(callback), 0);
167 }
168 
169 HWTEST_F(DnsQualityDiagTest, UnregisterHealthListener_ShouldReturnZero_WhenCalled, TestSize.Level0)
170 {
171     sptr<NetsysNative::INetDnsHealthCallback> callback;
172     EXPECT_EQ(dnsQualityDiag.UnregisterHealthListener(callback), 0);
173 }
174 
175 HWTEST_F(DnsQualityDiagTest, SetLoopDelay_ShouldReturnZero_WhenCalled, TestSize.Level0)
176 {
177     int32_t delay = 1;
178     EXPECT_EQ(dnsQualityDiag.SetLoopDelay(delay), 0);
179 }
180 
181 HWTEST_F(DnsQualityDiagTest, query_default_host_ShouldReturnZero_WhenCalled, TestSize.Level0)
182 {
183     EXPECT_EQ(dnsQualityDiag.query_default_host(), 0);
184 }
185 
186 HWTEST_F(DnsQualityDiagTest, handle_dns_loop_ShouldReturnZero_WhenCalled_01, TestSize.Level0)
187 {
188     dnsQualityDiag.handler_started = false;
189     EXPECT_EQ(dnsQualityDiag.handle_dns_loop(), 0);
190 }
191 
192 HWTEST_F(DnsQualityDiagTest, handle_dns_loop_ShouldReturnZero_WhenCalled_02, TestSize.Level0)
193 {
194     dnsQualityDiag.handler_started = true;
195     EXPECT_EQ(dnsQualityDiag.handle_dns_loop(), 0);
196 }
197 
198 HWTEST_F(DnsQualityDiagTest, handle_dns_fail_ShouldReturnZero_WhenCalled_01, TestSize.Level0)
199 {
200     dnsQualityDiag.handler_started = false;
201     EXPECT_EQ(dnsQualityDiag.handle_dns_fail(), 0);
202 }
203 
204 HWTEST_F(DnsQualityDiagTest, handle_dns_fail_ShouldReturnZero_WhenCalled_02, TestSize.Level0)
205 {
206     dnsQualityDiag.handler_started = true;
207     EXPECT_EQ(dnsQualityDiag.handle_dns_fail(), 0);
208 }
209 
210 HWTEST_F(DnsQualityDiagTest, send_dns_report_ShouldReturnZero_WhenCalled_01, TestSize.Level0)
211 {
212     dnsQualityDiag.handler_started = false;
213     EXPECT_EQ(dnsQualityDiag.send_dns_report(), 0);
214 }
215 
216 HWTEST_F(DnsQualityDiagTest, send_dns_report_ShouldReturnZero_WhenCalled_02, TestSize.Level0)
217 {
218     dnsQualityDiag.handler_started = true;
219     EXPECT_EQ(dnsQualityDiag.send_dns_report(), 0);
220 }
221 
222 HWTEST_F(DnsQualityDiagTest, send_dns_report_ShouldReturnZero_WhenCalled_03, TestSize.Level0)
223 {
224     std::shared_ptr<NetsysNative::NetDnsResultReport> report;
225     report = std::make_shared<NetsysNative::NetDnsResultReport>();
226     EXPECT_EQ(dnsQualityDiag.add_dns_report(report), 0);
227     EXPECT_TRUE(dnsQualityDiag.report_.size() > 0);
228 
229     dnsQualityDiag.handler_started = true;
230     EXPECT_EQ(dnsQualityDiag.send_dns_report(), 0);
231     EXPECT_EQ(dnsQualityDiag.report_.size(), 0);
232 }
233 
234 HWTEST_F(DnsQualityDiagTest, add_dns_report_ShouldReturnZero_WhenCalled_01, TestSize.Level0)
235 {
236     std::shared_ptr<NetsysNative::NetDnsResultReport> report;
237     report = std::make_shared<NetsysNative::NetDnsResultReport>();
238     EXPECT_EQ(dnsQualityDiag.add_dns_report(report), 0);
239     EXPECT_EQ(dnsQualityDiag.report_.size(), 1);
240 }
241 
242 HWTEST_F(DnsQualityDiagTest, add_dns_report_ShouldReturnZero_WhenCalled_02, TestSize.Level0)
243 {
244     std::shared_ptr<NetsysNative::NetDnsResultReport> report = nullptr;
245     EXPECT_EQ(dnsQualityDiag.add_dns_report(report), 0);
246 }
247 
248 HWTEST_F(DnsQualityDiagTest, add_dns_report_ShouldNotAddReport_WhenReportListIsFull, TestSize.Level0)
249 {
250     for (int i = 0; i < MAX_RESULT_SIZE; i++) {
251         std::shared_ptr<NetsysNative::NetDnsResultReport> report = std::make_shared<NetsysNative::NetDnsResultReport>();
252         dnsQualityDiag.add_dns_report(report);
253     }
254     std::shared_ptr<NetsysNative::NetDnsResultReport> report = std::make_shared<NetsysNative::NetDnsResultReport>();
255     int32_t result = dnsQualityDiag.add_dns_report(report);
256     ASSERT_EQ(result, 0);
257     ASSERT_EQ(dnsQualityDiag.report_.size(), MAX_RESULT_SIZE);
258 
259     uint16_t netId = 1;
260     uint16_t uid = 1;
261     uint32_t pid = 1;
262     int32_t usedtime = 1;
263     char name[] = "test";
264     uint32_t size = 1;
265     int32_t failreason = 1;
266     QueryParam queryParam;
267     AddrInfo addrinfo;
268     EXPECT_EQ(dnsQualityDiag.ReportDnsResult(netId, uid, pid, usedtime, name, size, failreason, queryParam, &addrinfo),
269               0);
270 }
271 
272 HWTEST_F(DnsQualityDiagTest, load_query_addr_ShouldReturnZero_WhenCalled, TestSize.Level0)
273 {
274     const char *defaultAddr = "test";
275     EXPECT_EQ(dnsQualityDiag.load_query_addr(defaultAddr), 0);
276 }
277 
278 HWTEST_F(DnsQualityDiagTest, HandleEvent_ShouldReturnZero_WhenCalled_01, TestSize.Level0)
279 {
280     dnsQualityDiag.handler_started = false;
281     AppExecFwk::InnerEvent::Pointer event = AppExecFwk::InnerEvent::Get();
282     EXPECT_EQ(dnsQualityDiag.HandleEvent(event), 0);
283 }
284 
285 HWTEST_F(DnsQualityDiagTest, HandleEvent_ShouldReturnZero_WhenCalled_02, TestSize.Level0)
286 {
287     dnsQualityDiag.handler_started = true;
288     AppExecFwk::InnerEvent::Pointer event = AppExecFwk::InnerEvent::Get(DnsQualityEventHandler::MSG_DNS_MONITOR_LOOP);
289     EXPECT_EQ(dnsQualityDiag.HandleEvent(event), 0);
290 }
291 
292 HWTEST_F(DnsQualityDiagTest, HandleEvent_ShouldReturnZero_WhenCalled_03, TestSize.Level0)
293 {
294     dnsQualityDiag.handler_started = true;
295     AppExecFwk::InnerEvent::Pointer event = AppExecFwk::InnerEvent::Get(DnsQualityEventHandler::MSG_DNS_QUERY_FAIL);
296     EXPECT_EQ(dnsQualityDiag.HandleEvent(event), 0);
297 }
298 
299 HWTEST_F(DnsQualityDiagTest, HandleEvent_ShouldReturnZero_WhenCalled_04, TestSize.Level0)
300 {
301     dnsQualityDiag.handler_started = true;
302     AppExecFwk::InnerEvent::Pointer event = AppExecFwk::InnerEvent::Get(DnsQualityEventHandler::MSG_DNS_REPORT_LOOP);
303     EXPECT_EQ(dnsQualityDiag.HandleEvent(event), 0);
304 }
305 
306 HWTEST_F(DnsQualityDiagTest, HandleEvent_ShouldReturnZero_WhenCalled_05, TestSize.Level0)
307 {
308     dnsQualityDiag.handler_started = true;
309     AppExecFwk::InnerEvent::Pointer event = AppExecFwk::InnerEvent::Get(DnsQualityEventHandler::MSG_DNS_NEW_REPORT);
310     EXPECT_EQ(dnsQualityDiag.HandleEvent(event), 0);
311 }
312 
313 }  // namespace nmd
314 }  // namespace OHOS
315