pi_dns_resolver 0.1.0

Provides related functions for asynchronous domain name resolution
Documentation
use std::str::FromStr;
use std::time::Instant;
use std::net::{ToSocketAddrs, SocketAddr};

use pi_dns_resolver::DNSResolver;

#[test]
fn test_local_system_resolver() {
    let mut addrs_iter = "www.google.com:443".to_socket_addrs().unwrap();
    while let Some(address) = addrs_iter.next() {
        println!("address: {:?}", address);
    }
}

#[test]
fn test_with_local_hosts_conf() {
    let resolver = DNSResolver::with_local_hosts_conf().unwrap();
    let now = Instant::now();
    if let Ok(addrs) = resolver.lookup_ip("www.qq.com") {
        assert!(addrs.is_empty());
    } else {
        panic!("lookup_ip www.qq.com failed");
    }
    println!("lookup_ip www.qq.com, time: {:?}", now.elapsed());

    let now = Instant::now();
    if let Ok(addrs) = resolver.lookup_ip("translate.googleapis.com") {
        assert!(addrs.len() > 0);
    } else {
        panic!("lookup_ip translate.googleapis.com failed");
    }
    println!("lookup_ip translate.googleapis.com, time: {:?}", now.elapsed());

    let now = Instant::now();
    if let Ok(addrs) = resolver.lookup_ip("test.17youx.cn") {
        assert!(addrs.len() == 1);
        assert_eq!(addrs[0], SocketAddr::from_str("127.0.0.1:0").unwrap());
    } else {
        panic!("lookup_ip test.17youx.cn failed");
    }
    println!("lookup_ip test.17youx.cn, time: {:?}", now.elapsed());
}

#[test]
fn test_with_system() {
    let resolver = DNSResolver::with_system().unwrap();
    let now = Instant::now();
    if let Ok(addrs) = resolver.lookup_ip("www.qq.com") {
        assert!(addrs.len() > 0);
    } else {
        panic!("lookup_ip www.qq.com failed");
    }
    println!("lookup_ip www.qq.com, time: {:?}", now.elapsed());

    let now = Instant::now();
    if let Ok(addrs) = resolver.lookup_ip("translate.googleapis.com") {
        assert!(addrs.len() > 0);
    } else {
        panic!("lookup_ip translate.googleapis.com failed");
    }
    println!("lookup_ip translate.googleapis.com, time: {:?}", now.elapsed());

    let now = Instant::now();
    if let Ok(addrs) = resolver.lookup_ip("test.17youx.cn") {
        assert!(addrs.len() == 1);
        assert_eq!(addrs[0], SocketAddr::from_str("127.0.0.1:0").unwrap());
    } else {
        panic!("lookup_ip test.17youx.cn failed");
    }
    println!("lookup_ip test.17youx.cn, time: {:?}", now.elapsed());
}

#[test]
fn test_with_system_conf() {
    let resolver = DNSResolver::with_system_conf().unwrap();
    let now = Instant::now();
    if let Ok(addrs) = resolver.lookup_ip("www.qq.com") {
        assert!(addrs.len() > 0);
    } else {
        panic!("lookup_ip www.qq.com failed");
    }
    println!("lookup_ip www.qq.com, time: {:?}", now.elapsed());

    let now = Instant::now();
    if let Ok(addrs) = resolver.lookup_ip("translate.googleapis.com") {
        assert!(addrs.len() > 0);
    } else {
        panic!("lookup_ip translate.googleapis.com failed");
    }
    println!("lookup_ip translate.googleapis.com, time: {:?}", now.elapsed());

    let now = Instant::now();
    if let Ok(addrs) = resolver.lookup_ip("test.17youx.cn") {
        assert!(addrs.len() == 1);
        assert_eq!(addrs[0], SocketAddr::from_str("127.0.0.1:0").unwrap());
    } else {
        panic!("lookup_ip test.17youx.cn failed");
    }
    println!("lookup_ip test.17youx.cn, time: {:?}", now.elapsed());
}

#[test]
fn test_with_google() {
    let resolver = DNSResolver::with_google().unwrap();
    let now = Instant::now();
    if let Ok(addrs) = resolver.lookup_ip("www.qq.com") {
        assert!(addrs.len() > 0);
    } else {
        panic!("lookup_ip www.qq.com failed");
    }
    println!("lookup_ip www.qq.com, time: {:?}", now.elapsed());

    let now = Instant::now();
    if let Ok(addrs) = resolver.lookup_ip("translate.googleapis.com") {
        assert!(addrs.len() > 0);
    } else {
        panic!("lookup_ip translate.googleapis.com failed");
    }
    println!("lookup_ip translate.googleapis.com, time: {:?}", now.elapsed());

    let now = Instant::now();
    if let Ok(addrs) = resolver.lookup_ip("test.17youx.cn") {
        assert!(addrs.len() == 1);
        assert_eq!(addrs[0], SocketAddr::from_str("127.0.0.1:0").unwrap());
    } else {
        panic!("lookup_ip test.17youx.cn failed");
    }
    println!("lookup_ip test.17youx.cn, time: {:?}", now.elapsed());
}

#[test]
fn test_with_cloudflare() {
    let resolver = DNSResolver::with_cloudflare().unwrap();
    let now = Instant::now();
    if let Ok(addrs) = resolver.lookup_ip("www.qq.com") {
        assert!(addrs.len() > 0);
    } else {
        panic!("lookup_ip www.qq.com failed");
    }
    println!("lookup_ip www.qq.com, time: {:?}", now.elapsed());

    let now = Instant::now();
    if let Ok(addrs) = resolver.lookup_ip("translate.googleapis.com") {
        assert!(addrs.len() > 0);
    } else {
        panic!("lookup_ip translate.googleapis.com failed");
    }
    println!("lookup_ip translate.googleapis.com, time: {:?}", now.elapsed());

    let now = Instant::now();
    if let Ok(addrs) = resolver.lookup_ip("test.17youx.cn") {
        assert!(addrs.len() == 1);
        assert_eq!(addrs[0], SocketAddr::from_str("127.0.0.1:0").unwrap());
    } else {
        panic!("lookup_ip test.17youx.cn failed");
    }
    println!("lookup_ip test.17youx.cn, time: {:?}", now.elapsed());
}

#[test]
fn test_with_quad9() {
    let resolver = DNSResolver::with_quad9().unwrap();
    let now = Instant::now();
    if let Ok(addrs) = resolver.lookup_ip("www.qq.com") {
        assert!(addrs.len() > 0);
    } else {
        panic!("lookup_ip www.qq.com failed");
    }
    println!("lookup_ip www.qq.com, time: {:?}", now.elapsed());

    let now = Instant::now();
    if let Ok(addrs) = resolver.lookup_ip("translate.googleapis.com") {
        assert!(addrs.len() > 0);
    } else {
        panic!("lookup_ip translate.googleapis.com failed");
    }
    println!("lookup_ip translate.googleapis.com, time: {:?}", now.elapsed());

    let now = Instant::now();
    if let Ok(addrs) = resolver.lookup_ip("test.17youx.cn") {
        assert!(addrs.len() == 1);
        assert_eq!(addrs[0], SocketAddr::from_str("127.0.0.1:0").unwrap());
    } else {
        panic!("lookup_ip test.17youx.cn failed");
    }
    println!("lookup_ip test.17youx.cn, time: {:?}", now.elapsed());
}