1 // Copyright 2015-2018 Benjamin Fry <benjaminfry@me.com> 2 // 3 // Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or 4 // http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or 5 // http://opensource.org/licenses/MIT>, at your option. This file may not be 6 // copied, modified, or distributed except according to those terms. 7 8 #![cfg(feature = "dns-over-tls")] 9 10 mod dns_over_native_tls; 11 mod dns_over_openssl; 12 mod dns_over_rustls; 13 14 cfg_if! { 15 if #[cfg(feature = "dns-over-rustls")] { 16 pub(crate) use self::dns_over_rustls::new_tls_stream; 17 #[cfg(feature = "dns-over-https-rustls")] 18 pub(crate) use self::dns_over_rustls::CLIENT_CONFIG; 19 } else if #[cfg(feature = "dns-over-native-tls")] { 20 pub(crate) use self::dns_over_native_tls::new_tls_stream; 21 } else if #[cfg(feature = "dns-over-openssl")] { 22 pub(crate) use self::dns_over_openssl::new_tls_stream; 23 } else { 24 compile_error!("One of the dns-over-rustls, dns-over-native-tls, or dns-over-openssl must be enabled for dns-over-tls features"); 25 } 26 } 27 28 #[cfg(any(feature = "dns-over-native-tls", feature = "dns-over-rustls"))] 29 #[cfg(test)] 30 mod tests { 31 use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; 32 33 use tokio::runtime::Runtime; 34 35 use crate::config::{ResolverConfig, ResolverOpts}; 36 use crate::{TokioAsyncResolver, TokioHandle}; 37 tls_test(config: ResolverConfig)38 fn tls_test(config: ResolverConfig) { 39 //env_logger::try_init().ok(); 40 let io_loop = Runtime::new().unwrap(); 41 42 let resolver = TokioAsyncResolver::new(config, ResolverOpts::default(), TokioHandle) 43 .expect("failed to create resolver"); 44 45 let response = io_loop 46 .block_on(resolver.lookup_ip("www.example.com.")) 47 .expect("failed to run lookup"); 48 49 assert_eq!(response.iter().count(), 1); 50 for address in response.iter() { 51 if address.is_ipv4() { 52 assert_eq!(address, IpAddr::V4(Ipv4Addr::new(93, 184, 216, 34))); 53 } else { 54 assert_eq!( 55 address, 56 IpAddr::V6(Ipv6Addr::new( 57 0x2606, 0x2800, 0x220, 0x1, 0x248, 0x1893, 0x25c8, 0x1946, 58 )) 59 ); 60 } 61 } 62 } 63 64 #[test] 65 #[cfg(not(windows))] // flakes on AppVeyor... test_cloudflare_tls()66 fn test_cloudflare_tls() { 67 tls_test(ResolverConfig::cloudflare_tls()) 68 } 69 70 #[test] 71 #[cfg(not(windows))] // flakes on AppVeyor... test_quad9_tls()72 fn test_quad9_tls() { 73 tls_test(ResolverConfig::quad9_tls()) 74 } 75 } 76