diff options
Diffstat (limited to 'tests/all/session.rs')
-rw-r--r-- | tests/all/session.rs | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/tests/all/session.rs b/tests/all/session.rs new file mode 100644 index 0000000..85fa321 --- /dev/null +++ b/tests/all/session.rs @@ -0,0 +1,78 @@ +use std::env; +use std::fs::File; +use std::io::prelude::*; +use std::path::{Path, PathBuf}; +use tempdir::TempDir; + +use ssh2::{Session, MethodType, HashType}; + +#[test] +fn smoke() { + let sess = Session::new().unwrap(); + assert!(sess.banner_bytes().is_none()); + sess.set_banner("foo").unwrap(); + assert!(sess.is_blocking()); + assert_eq!(sess.timeout(), 0); + sess.set_compress(true); + assert!(sess.host_key().is_none()); + sess.method_pref(MethodType::Kex, "diffie-hellman-group14-sha1").unwrap(); + assert!(sess.methods(MethodType::Kex).is_none()); + sess.set_blocking(true); + sess.set_timeout(0); + sess.supported_algs(MethodType::Kex).unwrap(); + sess.supported_algs(MethodType::HostKey).unwrap(); + sess.channel_session().err().unwrap(); +} + +#[test] +fn smoke_handshake() { + let user = env::var("USER").unwrap(); + let socket = ::socket(); + let mut sess = Session::new().unwrap(); + sess.handshake(&socket).unwrap(); + sess.host_key().unwrap(); + let methods = sess.auth_methods(&user).unwrap(); + assert!(methods.contains("publickey"), "{}", methods); + assert!(!sess.authenticated()); + + let mut agent = sess.agent().unwrap(); + agent.connect().unwrap(); + agent.list_identities().unwrap(); + { + let identity = agent.identities().next().unwrap().unwrap(); + agent.userauth(&user, &identity).unwrap(); + } + assert!(sess.authenticated()); + sess.host_key_hash(HashType::Md5).unwrap(); +} + +#[test] +fn keepalive() { + let (_tcp, sess) = ::authed_session(); + sess.set_keepalive(false, 10); + sess.keepalive_send().unwrap(); +} + +#[test] +fn scp_recv() { + let (_tcp, sess) = ::authed_session(); + let (mut ch, _) = sess.scp_recv(Path::new(".ssh/authorized_keys")).unwrap(); + let mut data = String::new(); + ch.read_to_string(&mut data).unwrap(); + let p = PathBuf::from(env::var("HOME").unwrap()).join(".ssh/authorized_keys"); + let mut expected = String::new(); + File::open(&p).unwrap().read_to_string(&mut expected).unwrap(); + assert!(data == expected); +} + +#[test] +fn scp_send() { + let td = TempDir::new("test").unwrap(); + let (_tcp, sess) = ::authed_session(); + let mut ch = sess.scp_send(&td.path().join("foo"), 0o644, 6, None).unwrap(); + ch.write_all(b"foobar").unwrap(); + drop(ch); + let mut actual = Vec::new(); + File::open(&td.path().join("foo")).unwrap().read_to_end(&mut actual).unwrap(); + assert_eq!(actual, b"foobar"); +} |