summaryrefslogtreecommitdiff
path: root/tests/all/session.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/all/session.rs')
-rw-r--r--tests/all/session.rs78
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");
+}