diff options
Diffstat (limited to 'cli/resolve_hosts.rs')
-rw-r--r-- | cli/resolve_hosts.rs | 188 |
1 files changed, 0 insertions, 188 deletions
diff --git a/cli/resolve_hosts.rs b/cli/resolve_hosts.rs deleted file mode 100644 index d562af4d5..000000000 --- a/cli/resolve_hosts.rs +++ /dev/null @@ -1,188 +0,0 @@ -use std::net::IpAddr; -use std::str::FromStr; -use url::Url; - -#[derive(Debug, PartialEq, Eq)] -pub struct ParsePortError(String); - -#[derive(Debug, PartialEq, Eq)] -pub struct BarePort(u16); - -impl FromStr for BarePort { - type Err = ParsePortError; - fn from_str(s: &str) -> Result<BarePort, ParsePortError> { - if s.starts_with(':') { - match s.split_at(1).1.parse::<u16>() { - Ok(port) => Ok(BarePort(port)), - Err(e) => Err(ParsePortError(e.to_string())), - } - } else { - Err(ParsePortError( - "Bare Port doesn't start with ':'".to_string(), - )) - } - } -} - -/// Expands "bare port" paths (eg. ":8080") into full paths with hosts. It -/// expands to such paths into 3 paths with following hosts: `0.0.0.0:port`, -/// `127.0.0.1:port` and `localhost:port`. -pub fn resolve_hosts(paths: Vec<String>) -> Vec<String> { - let mut out: Vec<String> = vec![]; - for host_and_port in paths.iter() { - if Url::parse(&format!("deno://{}", host_and_port)).is_ok() - || host_and_port.parse::<IpAddr>().is_ok() - { - out.push(host_and_port.to_owned()) - } else if let Ok(port) = host_and_port.parse::<BarePort>() { - // we got bare port, let's add default hosts - for host in ["0.0.0.0", "127.0.0.1", "localhost"].iter() { - out.push(format!("{}:{}", host, port.0)); - } - } else { - panic!("Bad host:port pair: {}", host_and_port) - } - } - out -} - -#[cfg(test)] -mod bare_port_tests { - use super::{BarePort, ParsePortError}; - - #[test] - fn bare_port_parsed() { - let expected = BarePort(8080); - let actual = ":8080".parse::<BarePort>(); - assert_eq!(actual, Ok(expected)); - } - - #[test] - fn bare_port_parse_error1() { - let expected = - ParsePortError("Bare Port doesn't start with ':'".to_string()); - let actual = "8080".parse::<BarePort>(); - assert_eq!(actual, Err(expected)); - } - - #[test] - fn bare_port_parse_error2() { - let actual = ":65536".parse::<BarePort>(); - assert!(actual.is_err()); - } - - #[test] - fn bare_port_parse_error3() { - let actual = ":14u16".parse::<BarePort>(); - assert!(actual.is_err()); - } - - #[test] - fn bare_port_parse_error4() { - let actual = "Deno".parse::<BarePort>(); - assert!(actual.is_err()); - } - - #[test] - fn bare_port_parse_error5() { - let actual = "deno.land:8080".parse::<BarePort>(); - assert!(actual.is_err()); - } -} - -#[cfg(test)] -mod tests { - use super::resolve_hosts; - - // Creates vector of strings, Vec<String> - macro_rules! svec { - ($($x:expr),*) => (vec![$($x.to_string()),*]); - } - - #[test] - fn resolve_hosts_() { - let entries = svec![ - "deno.land", - "deno.land:80", - "::", - "::1", - "127.0.0.1", - "[::1]", - "1.2.3.4:5678", - "0.0.0.0:5678", - "127.0.0.1:5678", - "[::]:5678", - "[::1]:5678", - "localhost:5678", - "[::1]:8080", - "[::]:8000", - "[::1]:8000", - "localhost:8000", - "0.0.0.0:4545", - "127.0.0.1:4545", - "999.0.88.1:80" - ]; - let expected = svec![ - "deno.land", - "deno.land:80", - "::", - "::1", - "127.0.0.1", - "[::1]", - "1.2.3.4:5678", - "0.0.0.0:5678", - "127.0.0.1:5678", - "[::]:5678", - "[::1]:5678", - "localhost:5678", - "[::1]:8080", - "[::]:8000", - "[::1]:8000", - "localhost:8000", - "0.0.0.0:4545", - "127.0.0.1:4545", - "999.0.88.1:80" - ]; - let actual = resolve_hosts(entries); - assert_eq!(actual, expected); - } - - #[test] - fn resolve_hosts_expansion() { - let entries = svec![":8080"]; - let expected = svec!["0.0.0.0:8080", "127.0.0.1:8080", "localhost:8080"]; - let actual = resolve_hosts(entries); - assert_eq!(actual, expected); - } - - #[test] - fn resolve_hosts_ipv6() { - let entries = - svec!["::", "::1", "[::1]", "[::]:5678", "[::1]:5678", "::cafe"]; - let expected = - svec!["::", "::1", "[::1]", "[::]:5678", "[::1]:5678", "::cafe"]; - let actual = resolve_hosts(entries); - assert_eq!(actual, expected); - } - - #[test] - #[should_panic] - fn resolve_hosts_ipv6_error1() { - let entries = svec![":::"]; - resolve_hosts(entries); - } - - #[test] - #[should_panic] - fn resolve_hosts_ipv6_error2() { - let entries = svec!["0123:4567:890a:bcde:fg::"]; - resolve_hosts(entries); - } - - #[test] - #[should_panic] - fn resolve_hosts_ipv6_error3() { - let entries = svec!["[::q]:8080"]; - resolve_hosts(entries); - } -} |