diff options
Diffstat (limited to 'src/process.rs')
| -rw-r--r-- | src/process.rs | 47 |
1 files changed, 32 insertions, 15 deletions
diff --git a/src/process.rs b/src/process.rs index 17257c46d2..6239f535e7 100644 --- a/src/process.rs +++ b/src/process.rs @@ -1,4 +1,4 @@ -use net::RemoteAddr; +use net::{RemoteAddr, ToRemoteAddrs}; use std::ffi::{OsString, OsStr}; use std::fmt; @@ -33,9 +33,9 @@ impl OpenVpnBuilder { /// Sets the addresses that OpenVPN will connect to. See OpenVPN documentation for how multiple /// remotes are handled. - pub fn remotes(&mut self, remotes: Vec<RemoteAddr>) -> &mut Self { - self.remotes = remotes; - self + pub fn remotes<A: ToRemoteAddrs>(&mut self, remotes: A) -> io::Result<&mut Self> { + self.remotes = remotes.to_remote_addrs()?.collect(); + Ok(self) } /// Executes the OpenVPN process as a child process, returning a handle to it. @@ -103,29 +103,46 @@ mod tests { #[test] fn no_arguments() { - let args = OpenVpnBuilder::new("").get_arguments(); - assert_eq!(0, args.len()); + let testee_args = OpenVpnBuilder::new("").get_arguments(); + assert_eq!(0, testee_args.len()); } #[test] fn passes_one_remote() { - let remotes = vec![RemoteAddr::new("example.com", 3333)]; + let remote = RemoteAddr::new("example.com", 3333); - let args = OpenVpnBuilder::new("").remotes(remotes).get_arguments(); + let testee_args = OpenVpnBuilder::new("").remotes(remote).unwrap().get_arguments(); - assert!(args.contains(&OsString::from("example.com"))); - assert!(args.contains(&OsString::from("3333"))); + assert!(testee_args.contains(&OsString::from("example.com"))); + assert!(testee_args.contains(&OsString::from("3333"))); } #[test] fn passes_two_remotes() { let remotes = vec![RemoteAddr::new("127.0.0.1", 998), RemoteAddr::new("fe80::1", 1337)]; - let args = OpenVpnBuilder::new("").remotes(remotes).get_arguments(); + let testee_args = OpenVpnBuilder::new("").remotes(&remotes[..]).unwrap().get_arguments(); + + assert!(testee_args.contains(&OsString::from("127.0.0.1"))); + assert!(testee_args.contains(&OsString::from("998"))); + assert!(testee_args.contains(&OsString::from("fe80::1"))); + assert!(testee_args.contains(&OsString::from("1337"))); + } + + #[test] + fn accepts_str() { + assert!(OpenVpnBuilder::new("").remotes("10.0.0.1:1377").is_ok()); + } + + #[test] + fn accepts_slice_of_str() { + let remotes = ["10.0.0.1:1337", "127.0.0.1:99"]; + + let testee_args = OpenVpnBuilder::new("").remotes(&remotes[..]).unwrap().get_arguments(); - assert!(args.contains(&OsString::from("127.0.0.1"))); - assert!(args.contains(&OsString::from("998"))); - assert!(args.contains(&OsString::from("fe80::1"))); - assert!(args.contains(&OsString::from("1337"))); + assert!(testee_args.contains(&OsString::from("10.0.0.1"))); + assert!(testee_args.contains(&OsString::from("1337"))); + assert!(testee_args.contains(&OsString::from("127.0.0.1"))); + assert!(testee_args.contains(&OsString::from("99"))); } } |
