aboutsummaryrefslogtreecommitdiffhomepage
path: root/oxish/src/tests.rs
diff options
context:
space:
mode:
Diffstat (limited to 'oxish/src/tests.rs')
-rw-r--r--oxish/src/tests.rs47
1 files changed, 37 insertions, 10 deletions
diff --git a/oxish/src/tests.rs b/oxish/src/tests.rs
index b7ed817..87e02f4 100644
--- a/oxish/src/tests.rs
+++ b/oxish/src/tests.rs
@@ -16,7 +16,7 @@ use tokio::{
use zeroize::Zeroizing;
use crate::{
- SessionState, SideState, UserStore, Username,
+ Config, SessionState, SideState, UserStore, Username,
authentication::{SingleUser, User},
server::Server,
};
@@ -59,12 +59,30 @@ async fn handshake_ed25519_graviola() {
#[cfg(feature = "graviola")]
#[tokio::test]
-async fn handshake_ecdsa_graviola_split() {
- handshake(
+async fn no_spawn() {
+ subscribe();
+
+ let (_key_dir, client, server) = setup(
+ &PublicKeyAlgorithm::Ed25519,
+ Some(Config {
+ spawn: false,
+ ..Config::default()
+ }),
graviola::DEFAULT_PROVIDER,
- PublicKeyAlgorithm::EcdsaSha2Nistp256,
)
- .await;
+ .await
+ .expect("failed to set up test");
+
+ let (_stdout, _stderr) = client
+ .run(
+ COMMAND,
+ // In the rekey scenario, keep the session open long enough for several rekeys before the
+ // sentinel; it only arrives if the session survived them.
+ Duration::from_secs(10),
+ server,
+ )
+ .await
+ .unwrap();
}
/// Exercise a client-initiated rekey against the graviola provider
@@ -73,10 +91,13 @@ async fn handshake_ecdsa_graviola_split() {
#[ignore = "slow"]
async fn rekey_graviola() {
subscribe();
- let (_key_dir, mut client, server) =
- setup(&PublicKeyAlgorithm::Ed25519, graviola::DEFAULT_PROVIDER)
- .await
- .expect("failed to set up test");
+ let (_key_dir, mut client, server) = setup(
+ &PublicKeyAlgorithm::Ed25519,
+ None,
+ graviola::DEFAULT_PROVIDER,
+ )
+ .await
+ .expect("failed to set up test");
// A short time-based rekey interval makes the client send a fresh SSH_MSG_KEXINIT every
// couple of seconds, exercising client-initiated rekeying. A time trigger keeps the
@@ -109,7 +130,7 @@ async fn rekey_graviola() {
async fn handshake(provider: &'static dyn CryptoProvider, algorithm: PublicKeyAlgorithm<'_>) {
subscribe();
- let (_key_dir, client, server) = setup(&algorithm, provider)
+ let (_key_dir, client, server) = setup(&algorithm, None, provider)
.await
.expect("failed to set up test");
@@ -127,6 +148,7 @@ async fn handshake(provider: &'static dyn CryptoProvider, algorithm: PublicKeyAl
async fn setup(
algorithm: &PublicKeyAlgorithm<'_>,
+ config: Option<Config>,
provider: &'static dyn CryptoProvider,
) -> anyhow::Result<(TempDir, CliClient, JoinHandle<anyhow::Result<()>>)> {
let (key_dir, store) = store(algorithm, provider).await?;
@@ -142,6 +164,11 @@ async fn setup(
provider,
)?;
+ let server = match config {
+ Some(config) => server.with_config(config),
+ None => server,
+ };
+
// Start the server and serve exactly one connection
let handle = tokio::spawn(async move {
let (stream, peer) = listener.accept().await?;