#![cfg(test)]
use core::{cmp, mem};
use super::{super::super::read_write::ReadWrite, Handshake, NoiseKey};
#[test]
fn handshake_basic_works() {
fn test_with_buffer_sizes(mut size1: usize, mut size2: usize) {
let key1 = NoiseKey::new(&rand::random(), &rand::random());
let key2 = NoiseKey::new(&rand::random(), &rand::random());
let mut handshake1 = Handshake::noise_yamux(&key1, &rand::random(), true);
let mut handshake2 = Handshake::noise_yamux(&key2, &rand::random(), false);
let mut buf_1_to_2 = Vec::new();
let mut buf_2_to_1 = Vec::new();
while !matches!(
(&handshake1, &handshake2),
(Handshake::Success { .. }, Handshake::Success { .. })
) {
match handshake1 {
Handshake::Success { .. } => {}
Handshake::Healthy(nego) => {
let mut read_write = ReadWrite {
now: 0,
incoming_buffer: buf_2_to_1,
expected_incoming_bytes: Some(0),
read_bytes: 0,
write_bytes_queued: buf_1_to_2.len(),
write_bytes_queueable: Some(size1 - buf_1_to_2.len()),
write_buffers: vec![mem::take(&mut buf_1_to_2)],
wake_up_after: None,
};
handshake1 = nego.read_write(&mut read_write).unwrap();
buf_2_to_1 = read_write.incoming_buffer;
buf_1_to_2.extend(
read_write
.write_buffers
.drain(..)
.flat_map(|b| b.into_iter()),
);
size2 = cmp::max(size2, read_write.expected_incoming_bytes.unwrap_or(0));
}
}
match handshake2 {
Handshake::Success { .. } => {}
Handshake::Healthy(nego) => {
let mut read_write = ReadWrite {
now: 0,
incoming_buffer: buf_1_to_2,
expected_incoming_bytes: Some(0),
read_bytes: 0,
write_bytes_queued: buf_2_to_1.len(),
write_bytes_queueable: Some(size2 - buf_2_to_1.len()),
write_buffers: vec![mem::take(&mut buf_2_to_1)],
wake_up_after: None,
};
handshake2 = nego.read_write(&mut read_write).unwrap();
buf_1_to_2 = read_write.incoming_buffer;
buf_2_to_1.extend(
read_write
.write_buffers
.drain(..)
.flat_map(|b| b.into_iter()),
);
size1 = cmp::max(size1, read_write.expected_incoming_bytes.unwrap_or(0));
}
}
}
}
test_with_buffer_sizes(256, 256);
}