summaryrefslogtreecommitdiffhomepage
path: root/src/process.rs
diff options
context:
space:
mode:
authorLinus Färnstrand <linus@mullvad.net>2016-12-12 16:35:09 +0100
committerLinus Färnstrand <linus@mullvad.net>2016-12-12 16:35:09 +0100
commitdbaead758cdd25cde30e7f4b452dc1e8d9eb3d40 (patch)
tree5abdd12bb7acf229406fa965ddbba10342a1502b /src/process.rs
parent217c6a859d238eca8a0ffca955ad60695823b06e (diff)
parent6385dd5ae73c345ae50466d29ce79b87a6f708ac (diff)
downloadmullvadvpn-dbaead758cdd25cde30e7f4b452dc1e8d9eb3d40.tar.xz
mullvadvpn-dbaead758cdd25cde30e7f4b452dc1e8d9eb3d40.zip
Merge branch 'to-remote-addrs-trait'
Diffstat (limited to 'src/process.rs')
-rw-r--r--src/process.rs47
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")));
}
}