@@ -155,3 +155,74 @@ dualstack-ip-selection no
155
155
EXPECT_EQ (client.GetAnswer ()[0 ].GetType (), " PTR" );
156
156
EXPECT_EQ (client.GetAnswer ()[0 ].GetData (), " my-server." );
157
157
}
158
+
159
+
160
+ TEST_F (Ptr, private_soa)
161
+ {
162
+ smartdns::MockServer server_upstream;
163
+ smartdns::Server server;
164
+
165
+ server_upstream.Start (" udp://0.0.0.0:61053" , [&](struct smartdns ::ServerRequestContext *request) {
166
+ if (request->qtype == DNS_T_A) {
167
+ smartdns::MockServer::AddIP (request, request->domain .c_str (), " 1.2.3.4" );
168
+ return smartdns::SERVER_REQUEST_OK;
169
+ }
170
+
171
+ if (request->qtype == DNS_T_PTR) {
172
+ dns_add_PTR (request->response_packet , DNS_RRS_AN, request->domain .c_str (), 30 , " my-hostname" );
173
+ request->response_packet ->head .rcode = DNS_RC_NOERROR;
174
+ return smartdns::SERVER_REQUEST_OK;
175
+ }
176
+
177
+ return smartdns::SERVER_REQUEST_SOA;
178
+ });
179
+
180
+ server.Start (R"""( bind [::]:60053
181
+ server 127.0.0.1:61053
182
+ dualstack-ip-selection no
183
+ )""" );
184
+ smartdns::Client client;
185
+ ASSERT_TRUE (client.Query (" 4.3.168.192.in-addr.arpa PTR" , 60053 ));
186
+ std::cout << client.GetResult () << std::endl;
187
+ ASSERT_EQ (client.GetAnswerNum (), 0 );
188
+ EXPECT_EQ (client.GetStatus (), " NOERROR" );
189
+ EXPECT_EQ (client.GetAuthority ()[0 ].GetName (), " 4.3.168.192.in-addr.arpa" );
190
+ EXPECT_EQ (client.GetAuthority ()[0 ].GetTTL (), 600 );
191
+ EXPECT_EQ (client.GetAuthority ()[0 ].GetType (), " SOA" );
192
+ }
193
+
194
+ TEST_F (Ptr, private_nameserver)
195
+ {
196
+ smartdns::MockServer server_upstream;
197
+ smartdns::Server server;
198
+
199
+ server_upstream.Start (" udp://0.0.0.0:61053" , [&](struct smartdns ::ServerRequestContext *request) {
200
+ if (request->qtype == DNS_T_A) {
201
+ smartdns::MockServer::AddIP (request, request->domain .c_str (), " 1.2.3.4" );
202
+ return smartdns::SERVER_REQUEST_OK;
203
+ }
204
+
205
+ if (request->qtype == DNS_T_PTR) {
206
+ dns_add_PTR (request->response_packet , DNS_RRS_AN, request->domain .c_str (), 30 , " my-hostname" );
207
+ request->response_packet ->head .rcode = DNS_RC_NOERROR;
208
+ return smartdns::SERVER_REQUEST_OK;
209
+ }
210
+
211
+ return smartdns::SERVER_REQUEST_SOA;
212
+ });
213
+
214
+ server.Start (R"""( bind [::]:60053
215
+ server 127.0.0.1:61053 -group test-server
216
+ nameserver /168.192.in-addr.arpa/test-server
217
+ dualstack-ip-selection no
218
+ )""" );
219
+ smartdns::Client client;
220
+ ASSERT_TRUE (client.Query (" 4.3.168.192.in-addr.arpa PTR" , 60053 ));
221
+ std::cout << client.GetResult () << std::endl;
222
+ ASSERT_EQ (client.GetAnswerNum (), 1 );
223
+ EXPECT_EQ (client.GetStatus (), " NOERROR" );
224
+ EXPECT_EQ (client.GetAnswer ()[0 ].GetName (), " 4.3.168.192.in-addr.arpa" );
225
+ EXPECT_EQ (client.GetAnswer ()[0 ].GetTTL (), 600 );
226
+ EXPECT_EQ (client.GetAnswer ()[0 ].GetType (), " PTR" );
227
+ EXPECT_EQ (client.GetAnswer ()[0 ].GetData (), " my-hostname." );
228
+ }
0 commit comments