#![cfg(any(feature = "async-io", feature = "tokio"))]
use std::error;
use async_ssh2_lite::{AsyncSession, AsyncSessionStream, Error};
use super::helpers::{get_connect_addr, get_privatekey_path, get_username};
#[cfg(feature = "tokio")]
#[tokio::test]
async fn simple_with_tokio() -> Result<(), Box<dyn error::Error>> {
let mut session =
AsyncSession::<async_ssh2_lite::TokioTcpStream>::connect(get_connect_addr()?, None).await?;
__run__session__userauth_pubkey_file(&mut session).await?;
#[cfg(unix)]
{
let mut session =
AsyncSession::<async_ssh2_lite::TokioTcpStream>::connect(get_connect_addr()?, None)
.await?;
__run__session__userauth_pubkey_memory(&mut session).await?;
}
Ok(())
}
#[cfg(feature = "async-io")]
#[test]
fn simple_with_async_io() -> Result<(), Box<dyn error::Error>> {
futures_lite::future::block_on(async {
let mut session =
AsyncSession::<async_ssh2_lite::AsyncIoTcpStream>::connect(get_connect_addr()?, None)
.await?;
__run__session__userauth_pubkey_file(&mut session).await?;
#[cfg(unix)]
{
let mut session = AsyncSession::<async_ssh2_lite::AsyncIoTcpStream>::connect(
get_connect_addr()?,
None,
)
.await?;
__run__session__userauth_pubkey_memory(&mut session).await?;
}
Ok(())
})
}
pub(crate) async fn __run__session__userauth_pubkey_file<
S: AsyncSessionStream + Send + Sync + 'static,
>(
session: &mut AsyncSession<S>,
) -> Result<(), Error> {
session.handshake().await?;
session
.userauth_pubkey_file(
get_username().as_ref(),
None,
get_privatekey_path().as_ref(),
None,
)
.await?;
assert!(session.authenticated());
Ok(())
}
#[cfg(unix)]
async fn __run__session__userauth_pubkey_memory<S: AsyncSessionStream + Send + Sync + 'static>(
session: &mut AsyncSession<S>,
) -> Result<(), Box<dyn error::Error>> {
session.handshake().await?;
session
.userauth_pubkey_memory(
get_username().as_ref(),
None,
String::from_utf8(std::fs::read(get_privatekey_path())?)?.as_ref(),
None,
)
.await?;
assert!(session.authenticated());
Ok(())
}