use tari_test_utils::unpack_enum;
use tokio::task;
use crate::{
framing,
memsocket::MemorySocket,
protocol::rpc::{
Handshake,
error::HandshakeRejectReason,
handshake::{RpcHandshakeError, SUPPORTED_RPC_VERSIONS},
},
};
#[tokio::test]
async fn it_performs_the_handshake() {
let (client, server) = MemorySocket::new_pair();
let handshake_result = task::spawn(async move {
let mut server_framed = framing::canonical(server, 1024);
let mut handshake_server = Handshake::new(&mut server_framed);
handshake_server.perform_server_handshake().await
});
let mut client_framed = framing::canonical(client, 1024);
let mut handshake_client = Handshake::new(&mut client_framed);
handshake_client.perform_client_handshake().await.unwrap();
let v = handshake_result.await.unwrap().unwrap();
assert!(SUPPORTED_RPC_VERSIONS.contains(&v));
}
#[tokio::test]
async fn it_rejects_the_handshake() {
let (client, server) = MemorySocket::new_pair();
let mut client_framed = framing::canonical(client, 1024);
let mut handshake_client = Handshake::new(&mut client_framed);
let mut server_framed = framing::canonical(server, 1024);
let mut handshake_server = Handshake::new(&mut server_framed);
handshake_server
.reject_with_reason(HandshakeRejectReason::NoServerSessionsAvailable("some reason"))
.await
.unwrap();
let err = handshake_client.perform_client_handshake().await.unwrap_err();
unpack_enum!(RpcHandshakeError::Rejected(reason) = err);
unpack_enum!(HandshakeRejectReason::NoServerSessionsAvailable("session limit reached") = reason);
}