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, &instance2);
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, 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, RegisterResultListener_ShouldReturnZero_WhenCalled, TestSize.Level0)
118 {
119 sptr<NetsysNative::INetDnsResultCallback> callback;
120 uint32_t timeStep = 1;
121 EXPECT_EQ(dnsQualityDiag.RegisterResultListener(callback, timeStep), 0);
122 }
123
124 HWTEST_F(DnsQualityDiagTest, UnregisterResultListener_ShouldReturnZero_WhenCalled, TestSize.Level0)
125 {
126 sptr<NetsysNative::INetDnsResultCallback> callback;
127 EXPECT_EQ(dnsQualityDiag.UnregisterResultListener(callback), 0);
128 }
129
130 HWTEST_F(DnsQualityDiagTest, RegisterHealthListener_ShouldReturnZero_WhenCalled, TestSize.Level0)
131 {
132 sptr<NetsysNative::INetDnsHealthCallback> callback;
133 EXPECT_EQ(dnsQualityDiag.RegisterHealthListener(callback), 0);
134 }
135
136 HWTEST_F(DnsQualityDiagTest, UnregisterHealthListener_ShouldReturnZero_WhenCalled, TestSize.Level0)
137 {
138 sptr<NetsysNative::INetDnsHealthCallback> callback;
139 EXPECT_EQ(dnsQualityDiag.UnregisterHealthListener(callback), 0);
140 }
141
142 HWTEST_F(DnsQualityDiagTest, SetLoopDelay_ShouldReturnZero_WhenCalled, TestSize.Level0)
143 {
144 int32_t delay = 1;
145 EXPECT_EQ(dnsQualityDiag.SetLoopDelay(delay), 0);
146 }
147
148 HWTEST_F(DnsQualityDiagTest, query_default_host_ShouldReturnZero_WhenCalled, TestSize.Level0)
149 {
150 EXPECT_EQ(dnsQualityDiag.query_default_host(), 0);
151 }
152
153 HWTEST_F(DnsQualityDiagTest, handle_dns_loop_ShouldReturnZero_WhenCalled, TestSize.Level0)
154 {
155 EXPECT_EQ(dnsQualityDiag.handle_dns_loop(), 0);
156 }
157
158 HWTEST_F(DnsQualityDiagTest, handle_dns_fail_ShouldReturnZero_WhenCalled, TestSize.Level0)
159 {
160 EXPECT_EQ(dnsQualityDiag.handle_dns_fail(), 0);
161 }
162
163 HWTEST_F(DnsQualityDiagTest, send_dns_report_ShouldReturnZero_WhenCalled, TestSize.Level0)
164 {
165 EXPECT_EQ(dnsQualityDiag.send_dns_report(), 0);
166 }
167
168 HWTEST_F(DnsQualityDiagTest, add_dns_report_ShouldReturnZero_WhenCalled, TestSize.Level0)
169 {
170 std::shared_ptr<NetsysNative::NetDnsResultReport> report;
171 report = std::make_shared<NetsysNative::NetDnsResultReport>();
172 EXPECT_EQ(dnsQualityDiag.add_dns_report(report), 0);
173 }
174
175 HWTEST_F(DnsQualityDiagTest, load_query_addr_ShouldReturnZero_WhenCalled, TestSize.Level0)
176 {
177 const char *defaultAddr = "test";
178 EXPECT_EQ(dnsQualityDiag.load_query_addr(defaultAddr), 0);
179 }
180
181 HWTEST_F(DnsQualityDiagTest, HandleEvent_ShouldReturnZero_WhenCalled, TestSize.Level0)
182 {
183 AppExecFwk::InnerEvent::Pointer event = AppExecFwk::InnerEvent::Get();
184 EXPECT_EQ(dnsQualityDiag.HandleEvent(event), 0);
185 }
186
187 } // namespace nmd
188 } // namespace OHOS
189