25 "dns server 1 address 1.1.1.1\n"
26 "dns search-domains domain0 domain1\n"
27 "dns server -2 address [2.2.2.2]:5353\n"
28 "dns server -2 resolve-domains rdom0\n"
29 "dns server 1 address [1::1]:5353\n"
30 "dns search-domains domain2\n"
31 "dns server -2 resolve-domains rdom1\n"
32 "dns server -2 dnssec optional\n"
33 "dns server -2 transport DoT\n"
34 "dns server -2 sni hostname\n"
35 "dns server 3 address 3::3 3.2.1.0:4242 [3:3::3:3]:3333\n"
36 "dns server 3 dnssec no\n"
37 "dns server 3 transport DoH\n",
48 ASSERT_EQ(dns.
servers.size(), 3u);
51 for (
const auto &keyval : dns.
servers)
53 auto priority = keyval.first;
54 auto &server = keyval.second;
60 ASSERT_TRUE(server.addresses.size() == 1u);
61 ASSERT_EQ(server.addresses[0].address,
"2.2.2.2");
62 ASSERT_EQ(server.addresses[0].port, 5353u);
64 ASSERT_EQ(server.domains.size(), 2u);
65 ASSERT_EQ(server.domains[0].to_string(),
"rdom0");
66 ASSERT_EQ(server.domains[1].to_string(),
"rdom1");
68 ASSERT_EQ(server.dnssec, DnsServer::Security::Optional);
70 ASSERT_EQ(server.transport, DnsServer::Transport::TLS);
71 ASSERT_EQ(server.sni,
"hostname");
73 else if (priority == 1)
77 ASSERT_TRUE(server.addresses.size() == 2u);
78 ASSERT_EQ(server.addresses[0].address,
"1.1.1.1");
79 ASSERT_EQ(server.addresses[0].port, 0u);
81 ASSERT_EQ(server.addresses[1].address,
"1::1");
82 ASSERT_EQ(server.addresses[1].port, 5353u);
84 ASSERT_EQ(server.domains.size(), 0u);
86 ASSERT_EQ(server.dnssec, DnsServer::Security::Unset);
88 ASSERT_EQ(server.transport, DnsServer::Transport::Unset);
89 ASSERT_TRUE(server.sni.empty());
91 else if (priority == 3)
95 ASSERT_TRUE(server.addresses.size() == 3u);
96 ASSERT_EQ(server.addresses[0].address,
"3::3");
97 ASSERT_EQ(server.addresses[0].port, 0u);
99 ASSERT_EQ(server.addresses[1].address,
"3.2.1.0");
100 ASSERT_EQ(server.addresses[1].port, 4242u);
102 ASSERT_EQ(server.addresses[2].address,
"3:3::3:3");
103 ASSERT_EQ(server.addresses[2].port, 3333u);
105 ASSERT_EQ(server.domains.size(), 0u);
107 ASSERT_EQ(server.dnssec, DnsServer::Security::No);
109 ASSERT_EQ(server.transport, DnsServer::Transport::HTTPS);
110 ASSERT_TRUE(server.sni.empty());
221 "dhcp-option DNS 1.1.1.1\n"
222 "dhcp-option DNS6 1::1\n"
223 "dhcp-option DOMAIN domain0\n"
224 "dhcp-option DOMAIN-SEARCH domain1\n"
225 "dhcp-option ADAPTER_DOMAIN_SUFFIX adsX\n"
226 "dhcp-option ADAPTER_DOMAIN_SUFFIX ads\n",
239 ASSERT_EQ(dns.
servers.size(), 1u);
240 ASSERT_TRUE(dns.
servers[0].addresses.size() == 2u);
241 ASSERT_EQ(dns.
servers[0].addresses[0].address,
"1.1.1.1");
242 ASSERT_EQ(dns.
servers[0].addresses[0].port, 0u);
244 ASSERT_EQ(dns.
servers[0].addresses[1].address,
"1::1");
245 ASSERT_EQ(dns.
servers[0].addresses[1].port, 0u);
248TEST(Dns, dhcp_options_with_split_domains)
252 "dhcp-option DNS 1.1.1.1\n"
253 "dhcp-option DNS6 1::1\n"
254 "dhcp-option DOMAIN domain0\n"
255 "dhcp-option DOMAIN-SEARCH domain1\n"
256 "dhcp-option ADAPTER_DOMAIN_SUFFIX adsX\n"
257 "dhcp-option ADAPTER_DOMAIN_SUFFIX ads\n",
268 ASSERT_EQ(dns.
servers.size(), 1u);
270 ASSERT_TRUE(dns.
servers[0].addresses.size() == 2u);
271 ASSERT_EQ(dns.
servers[0].addresses[0].address,
"1.1.1.1");
272 ASSERT_EQ(dns.
servers[0].addresses[0].port, 0u);
273 ASSERT_EQ(dns.
servers[0].addresses[1].address,
"1::1");
274 ASSERT_EQ(dns.
servers[0].addresses[1].port, 0u);
276 ASSERT_TRUE(dns.
servers[0].domains.size() == 2u);
277 ASSERT_EQ(dns.
servers[0].domains[0].domain,
"domain0");
278 ASSERT_EQ(dns.
servers[0].domains[1].domain,
"domain1");
400TEST(Dns, JsonRoundtripAllValuesSet)
404 "dns search-domains dom1 dom2 dom3\n"
405 "dns server 10 address 1::1 1.1.1.1\n"
406 "dns server 10 resolve-domains rdom11 rdom12\n"
407 "dns server 10 transport DoT\n"
408 "dns server 10 sni snidom1\n"
409 "dns server 10 dnssec optional\n"
410 "dns server 20 address [2::2]:5353 2.2.2.2:5353\n"
411 "dns server 20 resolve-domains rdom21 rdom22\n"
412 "dns server 20 transport DoH\n"
413 "dns server 20 sni snidom2\n"
414 "dns server 20 dnssec yes\n",
418 Json::Value json = toJson.
to_json();
419 Json::StreamWriterBuilder builder;
420 builder[
"indentation"] =
" ";
421 ASSERT_EQ(Json::writeString(builder, json),
423 " \"search_domains\" : \n"
433 " \"addresses\" : \n"
436 " \"address\" : \"1::1\"\n"
439 " \"address\" : \"1.1.1.1\"\n"
442 " \"dnssec\" : \"Optional\",\n"
448 " \"sni\" : \"snidom1\",\n"
449 " \"transport\" : \"TLS\"\n"
453 " \"addresses\" : \n"
456 " \"address\" : \"2::2\",\n"
460 " \"address\" : \"2.2.2.2\",\n"
464 " \"dnssec\" : \"Yes\",\n"
470 " \"sni\" : \"snidom2\",\n"
471 " \"transport\" : \"HTTPS\"\n"
487 " DNSSEC: Optional\n"
498 " Transport: HTTPS\n"
500 "DNS Search Domains:\n"