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 <unistd.h>
18 #include <sys/socket.h>
19
20 #define private public
21
22 #include "dns_proxy_request_socket.h"
23 #include "netnative_log_wrapper.h"
24 #include "dns_proxy_listen.h"
25
26 namespace OHOS::nmd {
27
28 using namespace testing;
29 using namespace testing::ext;
30
31 class DnsProxyRequestSocketTest : public testing::Test {
32 public:
33 static void SetUpTestCase();
34 static void TearDownTestCase();
35 void SetUp();
36 void TearDown();
37 };
38
SetUpTestCase()39 void DnsProxyRequestSocketTest::SetUpTestCase() {}
TearDownTestCase()40 void DnsProxyRequestSocketTest::TearDownTestCase() {}
SetUp()41 void DnsProxyRequestSocketTest::SetUp() {}
TearDown()42 void DnsProxyRequestSocketTest::TearDown() {}
43
44 HWTEST_F(DnsProxyRequestSocketTest, Create_01, TestSize.Level0)
45 {
46 int32_t sock = socket(10000, SOCK_CLOEXEC, 0);
47 std::unique_ptr<AlignedSockAddr> clientSock = std::make_unique<AlignedSockAddr>();
48 std::unique_ptr<RecvBuff> recvBuff = std::make_unique<RecvBuff>();
49 DnsProxyRequestSocket dnsProxyRequestSocket(sock, std::move(clientSock), std::move(recvBuff));
50 EXPECT_EQ(dnsProxyRequestSocket.sock, sock);
51 EXPECT_EQ(dnsProxyRequestSocket.event.data.fd, sock);
52 EXPECT_EQ(dnsProxyRequestSocket.event.events, EPOLLIN);
53 EXPECT_NE(dnsProxyRequestSocket.clientSock, nullptr);
54 EXPECT_NE(dnsProxyRequestSocket.recvBuff, nullptr);
55 }
56
57 HWTEST_F(DnsProxyRequestSocketTest, Release_01, TestSize.Level0)
58 {
59 int32_t sock = -1;
60 std::unique_ptr<AlignedSockAddr> clientSock = nullptr;
61 std::unique_ptr<RecvBuff> recvBuff = nullptr;
62 DnsProxyRequestSocket dnsProxyRequestSocket(sock, std::move(clientSock), std::move(recvBuff));
63 dnsProxyRequestSocket.~DnsProxyRequestSocket();
64 EXPECT_EQ(dnsProxyRequestSocket.sock, sock);
65 }
66
67 HWTEST_F(DnsProxyRequestSocketTest, Release_02, TestSize.Level0)
68 {
69 int32_t sock = socket(10000, SOCK_CLOEXEC, 0);
70 std::unique_ptr<AlignedSockAddr> clientSock = std::make_unique<AlignedSockAddr>();
71 std::unique_ptr<RecvBuff> recvBuff = std::make_unique<RecvBuff>();
72 DnsProxyRequestSocket dnsProxyRequestSocket(sock, std::move(clientSock), std::move(recvBuff));
73 dnsProxyRequestSocket.~DnsProxyRequestSocket();
74 EXPECT_EQ(dnsProxyRequestSocket.sock, sock);
75 }
76
77 HWTEST_F(DnsProxyRequestSocketTest, DnsParseBySocket001, TestSize.Level0)
78 {
79 DnsProxyListen dnsproxylisten;
80 std::unique_ptr<RecvBuff> recvBuff = std::make_unique<RecvBuff>();
81 std::unique_ptr<AlignedSockAddr> clientSock = std::make_unique<AlignedSockAddr>();
82 clientSock->sa.sa_family = AF_INET;
83 dnsproxylisten.DnsParseBySocket(recvBuff, clientSock);
84 EXPECT_FALSE(dnsproxylisten.proxyListenSwitch_);
85 }
86
87 HWTEST_F(DnsProxyRequestSocketTest, DnsParseBySocket002, TestSize.Level0)
88 {
89 DnsProxyListen dnsproxylisten;
90 std::unique_ptr<RecvBuff> recvBuff = std::make_unique<RecvBuff>();
91 std::unique_ptr<AlignedSockAddr> clientSock = std::make_unique<AlignedSockAddr>();
92 clientSock->sa.sa_family = 10;
93 dnsproxylisten.DnsParseBySocket(recvBuff, clientSock);
94 EXPECT_FALSE(dnsproxylisten.proxyListenSwitch_);
95 }
96
97 HWTEST_F(DnsProxyRequestSocketTest, DnsParseBySocket003, TestSize.Level0)
98 {
99 DnsProxyListen dnsproxylisten;
100 std::unique_ptr<RecvBuff> recvBuff = std::make_unique<RecvBuff>();
101 std::unique_ptr<AlignedSockAddr> clientSock = std::make_unique<AlignedSockAddr>();
102 clientSock->sa.sa_family = 3;
103 dnsproxylisten.DnsParseBySocket(recvBuff, clientSock);
104 EXPECT_FALSE(dnsproxylisten.proxyListenSwitch_);
105 }
106
107 HWTEST_F(DnsProxyRequestSocketTest, GetDnsProxyServers001, TestSize.Level0)
108 {
109 DnsProxyListen dnsproxylisten;
110 std::vector<std::string> servers = {"1", "2"};
111 size_t serverIdx = 1;
112 EXPECT_TRUE(dnsproxylisten.GetDnsProxyServers(servers, serverIdx));
113 }
114
115 HWTEST_F(DnsProxyRequestSocketTest, GetDnsProxyServers002, TestSize.Level0)
116 {
117 DnsProxyListen dnsproxylisten;
118 std::vector<std::string> servers = {"1"};
119 size_t serverIdx = 1;
120 EXPECT_FALSE(dnsproxylisten.GetDnsProxyServers(servers, serverIdx));
121 }
122
123 HWTEST_F(DnsProxyRequestSocketTest, MakeAddrInfo001, TestSize.Level0)
124 {
125 DnsProxyListen dnsproxylisten;
126 std::vector<std::string> servers = {"1"};
127 size_t serverIdx = 0;
128 AlignedSockAddr addrParse;
129 AlignedSockAddr clientSock;
130 clientSock.sa.sa_family = AF_INET;
131 EXPECT_FALSE(dnsproxylisten.MakeAddrInfo(servers, serverIdx, addrParse, clientSock));
132 servers = {"1", ".", "2"};
133 serverIdx = 1;
134 EXPECT_FALSE(dnsproxylisten.MakeAddrInfo(servers, serverIdx, addrParse, clientSock));
135 servers = {"1", "127.0.0.1", "2"};
136 serverIdx = 1;
137 EXPECT_TRUE(dnsproxylisten.MakeAddrInfo(servers, serverIdx, addrParse, clientSock));
138 }
139
140 HWTEST_F(DnsProxyRequestSocketTest, MakeAddrInfo002, TestSize.Level0)
141 {
142 DnsProxyListen dnsproxylisten;
143 std::vector<std::string> servers = {"1", ":", "2"};
144 size_t serverIdx = 2;
145 AlignedSockAddr addrParse;
146 AlignedSockAddr clientSock;
147 clientSock.sa.sa_family = AF_INET6;
148 EXPECT_FALSE(dnsproxylisten.MakeAddrInfo(servers, serverIdx, addrParse, clientSock));
149 servers = {"1"};
150 serverIdx = 0;
151 EXPECT_FALSE(dnsproxylisten.MakeAddrInfo(servers, serverIdx, addrParse, clientSock));
152 }
153
154 HWTEST_F(DnsProxyRequestSocketTest, MakeAddrInfo003, TestSize.Level0)
155 {
156 DnsProxyListen dnsproxylisten;
157 std::vector<std::string> servers = {"1"};
158 size_t serverIdx = 0;
159 AlignedSockAddr addrParse;
160 AlignedSockAddr clientSock;
161 clientSock.sa.sa_family = 3;
162 EXPECT_FALSE(dnsproxylisten.MakeAddrInfo(servers, serverIdx, addrParse, clientSock));
163 }
164
165 HWTEST_F(DnsProxyRequestSocketTest, SendRequest2Server001, TestSize.Level0)
166 {
167 DnsProxyListen dnsproxylisten;
168 int32_t socketFd = 300;
169 dnsproxylisten.SendRequest2Server(socketFd);
170 EXPECT_EQ(socketFd, 300);
171 }
172
173 HWTEST_F(DnsProxyRequestSocketTest, SendDnsBack2Client001, TestSize.Level0)
174 {
175 DnsProxyListen dnsproxylisten;
176 int32_t socketFd = 300;
177 dnsproxylisten.SendDnsBack2Client(socketFd);
178 EXPECT_EQ(socketFd, 300);
179 }
180
181 HWTEST_F(DnsProxyRequestSocketTest, GetRequestAndTransmit001, TestSize.Level0)
182 {
183 DnsProxyListen dnsproxylisten;
184 int32_t family = AF_INET;
185 dnsproxylisten.GetRequestAndTransmit(family);
186 family = AF_INET6;
187 dnsproxylisten.GetRequestAndTransmit(family);
188 EXPECT_EQ(family, 10);
189 }
190
191 HWTEST_F(DnsProxyRequestSocketTest, CollectSocks001, TestSize.Level0)
192 {
193 DnsProxyListen dnsproxylisten;
194 dnsproxylisten.CollectSocks();
195 EXPECT_FALSE(dnsproxylisten.proxyListenSwitch_);
196 }
197
198 HWTEST_F(DnsProxyRequestSocketTest, EpollTimeout001, TestSize.Level0)
199 {
200 DnsProxyListen dnsproxylisten;
201 dnsproxylisten.EpollTimeout();
202 EXPECT_FALSE(dnsproxylisten.proxyListenSwitch_);
203 }
204
205 HWTEST_F(DnsProxyRequestSocketTest, CheckDnsQuestion001, TestSize.Level0)
206 {
207 DnsProxyListen dnsproxylisten;
208 char data[100];
209 char *recBuff = data;
210 size_t recLen = 10;
211 dnsproxylisten.CheckDnsQuestion(recBuff, recLen);
212 recLen = 12;
213 EXPECT_TRUE(dnsproxylisten.CheckDnsQuestion(recBuff, recLen));
214 }
215
216 HWTEST_F(DnsProxyRequestSocketTest, CheckDnsResponse001, TestSize.Level0)
217 {
218 DnsProxyListen dnsproxylisten;
219 char data[100];
220 char *recBuff = data;
221 size_t recLen = 2;
222 dnsproxylisten.CheckDnsResponse(recBuff, recLen);
223 recLen = 3;
224 EXPECT_FALSE(dnsproxylisten.CheckDnsResponse(recBuff, recLen));
225 }
226 } // namespace OHOS::nmd
227