mod client;
mod codec;
mod message;
mod server;
pub use client::{RoutingClient, RoutingError, RoutingHandle};
pub use codec::RoutingCodec;
use message::{Command, RoutingMessage};
pub use server::RoutingServer;
#[cfg(test)]
pub mod tests {
use tokio_test::assert_ok;
use crate::net::{NetworkAddress, NetworkTarget};
use crate::proto::routing::{RoutingClient, RoutingServer};
use crate::test::{TestConnector, TestIoProtocol, TestNetwork, TestPayload};
use crate::util::EndMethod;
#[tokio::test]
async fn valid_io_flow() {
for (c_io, s_io, len) in TestPayload::iter() {
let mut connector = TestConnector::new();
connector.push(TestIoProtocol::from_mock(s_io)).await;
let server = RoutingServer::new(connector).await;
let client = RoutingClient::new();
let mut handle = client.handle().clone();
let network_handle = tokio::spawn(async move {
let network = TestNetwork::new(client, server);
network.run().await
});
let name = String::from("mock_connection");
let target = NetworkTarget::new(NetworkAddress::from(name), 0);
let session_id = assert_ok!(handle.connect_session(target, None).await);
let client_data = TestIoProtocol::from_mock(c_io).with_id(session_id);
assert_ok!(handle.add_session(session_id, client_data).await);
assert_ok!(handle.set_end_method(EndMethod::Empty).await);
let (c_to_s_result, s_to_c_result) = assert_ok!(network_handle.await);
assert_ok!(c_to_s_result);
assert_ok!(s_to_c_result);
assert!(c_to_s_result.unwrap() >= len);
assert!(s_to_c_result.unwrap() >= len);
}
}
}