27 "dns server 1 address 1.1.1.1\n"
28 "dns search-domains domain0 domain1\n"
29 "dns server -2 address [2.2.2.2]:5353\n"
30 "dns server -2 resolve-domains rdom0\n"
31 "dns server 1 address [1::1]:5353\n"
32 "dns search-domains domain2\n"
33 "dns server -2 resolve-domains rdom1\n"
34 "dns server -2 dnssec optional\n"
35 "dns server -2 transport DoT\n"
36 "dns server -2 sni hostname\n"
37 "dns server 3 address 3::3 3.2.1.0:4242 [3:3::3:3]:3333\n"
38 "dns server 3 dnssec no\n"
39 "dns server 3 transport DoH\n",
50 ASSERT_EQ(dns.
servers.size(), 3U);
53 for (
const auto &keyval : dns.
servers)
55 auto priority = keyval.first;
56 auto &server = keyval.second;
62 ASSERT_TRUE(server.addresses.size() == 1U);
63 ASSERT_EQ(server.addresses[0].address,
"2.2.2.2");
64 ASSERT_EQ(server.addresses[0].port, 5353U);
66 ASSERT_EQ(server.domains.size(), 2U);
67 ASSERT_EQ(server.domains[0].to_string(),
"rdom0");
68 ASSERT_EQ(server.domains[1].to_string(),
"rdom1");
70 ASSERT_EQ(server.dnssec, DnsServer::Security::Optional);
72 ASSERT_EQ(server.transport, DnsServer::Transport::TLS);
73 ASSERT_EQ(server.sni,
"hostname");
75 else if (priority == 1)
79 ASSERT_TRUE(server.addresses.size() == 2U);
80 ASSERT_EQ(server.addresses[0].address,
"1.1.1.1");
81 ASSERT_EQ(server.addresses[0].port, 0U);
83 ASSERT_EQ(server.addresses[1].address,
"1::1");
84 ASSERT_EQ(server.addresses[1].port, 5353U);
86 ASSERT_EQ(server.domains.size(), 0U);
88 ASSERT_EQ(server.dnssec, DnsServer::Security::Unset);
90 ASSERT_EQ(server.transport, DnsServer::Transport::Unset);
91 ASSERT_TRUE(server.sni.empty());
93 else if (priority == 3)
97 ASSERT_TRUE(server.addresses.size() == 3U);
98 ASSERT_EQ(server.addresses[0].address,
"3::3");
99 ASSERT_EQ(server.addresses[0].port, 0U);
101 ASSERT_EQ(server.addresses[1].address,
"3.2.1.0");
102 ASSERT_EQ(server.addresses[1].port, 4242U);
104 ASSERT_EQ(server.addresses[2].address,
"3:3::3:3");
105 ASSERT_EQ(server.addresses[2].port, 3333U);
107 ASSERT_EQ(server.domains.size(), 0U);
109 ASSERT_EQ(server.dnssec, DnsServer::Security::No);
111 ASSERT_EQ(server.transport, DnsServer::Transport::HTTPS);
112 ASSERT_TRUE(server.sni.empty());
150 EXPECT_STREQ(ipv4_addr.
to_string().c_str(),
"192.168.0.1");
152 EXPECT_STREQ(parse_ipv4_addr.
to_string().c_str(),
"192.168.0.1");
154 const DnsAddress ipv4_port(
"192.168.20.1:9876");
155 EXPECT_STREQ(ipv4_port.
to_string().c_str(),
"192.168.20.1:9876");
157 EXPECT_STREQ(parse_ipv4_port.
to_string().c_str(),
"192.168.20.1:9876");
159 const DnsAddress ipv6_addr(
"2001:db8:5678::1");
160 EXPECT_STREQ(ipv6_addr.
to_string().c_str(),
"2001:db8:5678::1");
162 EXPECT_STREQ(parse_ipv6_addr.
to_string().c_str(),
"2001:db8:5678::1")
163 <<
"parse_ipv6_addr failed";
165 const DnsAddress ipv6_port(
"[2001:db8:1234::1]:5678");
166 EXPECT_STREQ(ipv6_port.
to_string().c_str(),
"[2001:db8:1234::1]:5678");
168 EXPECT_STREQ(parse_ipv6_port.
to_string().c_str(),
"[2001:db8:1234::1]:5678")
169 <<
"parse_ipv6_port failed";
172#ifndef OPENVPN_PLATFORM_WIN
178 "Invalid address '192.168.0'");
183 "Invalid address '192.168.200.1::1234'");
187 "Invalid address:port format '192.168.200.1:blabla'");
191 "Invalid address:port format '192.168.200.1:77701'");
195 "Invalid address '2001:defg:1234:1234::'");
199 "Invalid address '2001:abcd:1234:12345::1'");
203 "Invalid address '2001:abcd:1234:::'");
207 "Invalid address:port format '[2001:abcd:1234::]:65547");
295 "dhcp-option DNS 1.1.1.1\n"
296 "dhcp-option DNS6 1::1\n"
297 "dhcp-option DOMAIN domain0\n"
298 "dhcp-option DOMAIN-SEARCH domain1\n"
299 "dhcp-option ADAPTER_DOMAIN_SUFFIX adsX\n"
300 "dhcp-option ADAPTER_DOMAIN_SUFFIX ads\n",
313 ASSERT_EQ(dns.
servers.size(), 1U);
314 ASSERT_TRUE(dns.
servers[0].addresses.size() == 2U);
315 ASSERT_EQ(dns.
servers[0].addresses[0].address,
"1.1.1.1");
316 ASSERT_EQ(dns.
servers[0].addresses[0].port, 0U);
318 ASSERT_EQ(dns.
servers[0].addresses[1].address,
"1::1");
319 ASSERT_EQ(dns.
servers[0].addresses[1].port, 0U);
322TEST(Dns, DhcpOptionsWithSplitDomains)
326 "dhcp-option DNS 1.1.1.1\n"
327 "dhcp-option DNS6 1::1\n"
328 "dhcp-option DOMAIN domain0\n"
329 "dhcp-option DOMAIN-SEARCH domain1\n"
330 "dhcp-option ADAPTER_DOMAIN_SUFFIX adsX\n"
331 "dhcp-option ADAPTER_DOMAIN_SUFFIX ads\n",
342 ASSERT_EQ(dns.
servers.size(), 1U);
344 ASSERT_TRUE(dns.
servers[0].addresses.size() == 2U);
345 ASSERT_EQ(dns.
servers[0].addresses[0].address,
"1.1.1.1");
346 ASSERT_EQ(dns.
servers[0].addresses[0].port, 0U);
347 ASSERT_EQ(dns.
servers[0].addresses[1].address,
"1::1");
348 ASSERT_EQ(dns.
servers[0].addresses[1].port, 0U);
350 ASSERT_TRUE(dns.
servers[0].domains.size() == 2U);
351 ASSERT_EQ(dns.
servers[0].domains[0].domain,
"domain0");
352 ASSERT_EQ(dns.
servers[0].domains[1].domain,
"domain1");
528TEST(Dns, JsonRoundtripAllValuesSet)
532 "dns search-domains dom1 dom2 dom3\n"
533 "dns server 10 address 1::1 1.1.1.1\n"
534 "dns server 10 resolve-domains rdom11 rdom12\n"
535 "dns server 10 transport DoT\n"
536 "dns server 10 sni snidom1\n"
537 "dns server 10 dnssec optional\n"
538 "dns server 20 address [2::2]:5353 2.2.2.2:5353\n"
539 "dns server 20 resolve-domains rdom21 rdom22\n"
540 "dns server 20 transport DoH\n"
541 "dns server 20 sni snidom2\n"
542 "dns server 20 dnssec yes\n",
546 const Json::Value json = toJson.
to_json();
547 Json::StreamWriterBuilder builder;
548 builder[
"indentation"] =
" ";
549 ASSERT_EQ(Json::writeString(builder, json),
551 " \"from_dhcp_options\" : false,\n"
552 " \"search_domains\" : \n"
562 " \"addresses\" : \n"
565 " \"address\" : \"1::1\"\n"
568 " \"address\" : \"1.1.1.1\"\n"
571 " \"dnssec\" : \"Optional\",\n"
577 " \"sni\" : \"snidom1\",\n"
578 " \"transport\" : \"TLS\"\n"
582 " \"addresses\" : \n"
585 " \"address\" : \"2::2\",\n"
589 " \"address\" : \"2.2.2.2\",\n"
593 " \"dnssec\" : \"Yes\",\n"
599 " \"sni\" : \"snidom2\",\n"
600 " \"transport\" : \"HTTPS\"\n"
616 " DNSSEC: Optional\n"
627 " Transport: HTTPS\n"
629 "DNS Search Domains:\n"
633 "Values from dhcp-options: false\n");