• 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 <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