#![cfg(all(feature = "transport-streamable-http-server", not(feature = "local")))]
use std::time::Duration;
use rmcp::{
model::{ClientJsonRpcMessage, ClientRequest, PingRequest, RequestId},
transport::streamable_http_server::session::{SessionManager, local::LocalSessionManager},
};
#[tokio::test]
async fn test_init_timeout_terminates_pre_init_session() -> anyhow::Result<()> {
let mut manager = LocalSessionManager::default();
manager.session_config.init_timeout = Some(Duration::from_millis(200));
let (session_id, _transport) = manager.create_session().await?;
tokio::time::sleep(Duration::from_millis(500)).await;
let message = ClientJsonRpcMessage::request(
ClientRequest::PingRequest(PingRequest::default()),
RequestId::Number(1),
);
let result = manager.initialize_session(&session_id, message).await;
assert!(
result.is_err(),
"expected worker to be dead; got: {result:?}"
);
Ok(())
}
#[tokio::test]
async fn test_init_timeout_none_keeps_worker_alive() -> anyhow::Result<()> {
let mut manager = LocalSessionManager::default();
manager.session_config.init_timeout = None;
let (session_id, _transport) = manager.create_session().await?;
tokio::time::sleep(Duration::from_millis(500)).await;
let message = ClientJsonRpcMessage::request(
ClientRequest::PingRequest(PingRequest::default()),
RequestId::Number(1),
);
let probe = tokio::time::timeout(
Duration::from_millis(200),
manager.initialize_session(&session_id, message),
)
.await;
assert!(
probe.is_err(),
"expected worker to be alive; got: {probe:?}"
);
Ok(())
}