fix: accept 200 with empty body in response to notifications in addition to 202 (#849)
This commit is contained in:
parent
3529c3675f
commit
cc66e3091e
1 changed files with 79 additions and 0 deletions
|
|
@ -0,0 +1,48 @@
|
|||
#![cfg(all(
|
||||
feature = "transport-streamable-http-client",
|
||||
feature = "transport-streamable-http-client-reqwest",
|
||||
not(feature = "local")
|
||||
))]
|
||||
|
||||
use std::{collections::HashMap, sync::Arc};
|
||||
|
||||
use rmcp::{
|
||||
model::{ClientJsonRpcMessage, ClientNotification, InitializedNotification},
|
||||
transport::streamable_http_client::{StreamableHttpClient, StreamableHttpPostResponse},
|
||||
};
|
||||
|
||||
async fn spawn_empty_ok_server() -> String {
|
||||
use axum::{Router, http::StatusCode, routing::post};
|
||||
|
||||
let router = Router::new().route("/mcp", post(|| async { StatusCode::OK }));
|
||||
|
||||
let listener = tokio::net::TcpListener::bind("127.0.0.1:0").await.unwrap();
|
||||
let addr = listener.local_addr().unwrap();
|
||||
tokio::spawn(async move {
|
||||
axum::serve(listener, router).await.unwrap();
|
||||
});
|
||||
|
||||
format!("http://{addr}/mcp")
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn empty_success_response_to_notification_is_accepted() {
|
||||
let url = spawn_empty_ok_server().await;
|
||||
let client = reqwest::Client::new();
|
||||
let result = client
|
||||
.post_message(
|
||||
Arc::from(url.as_str()),
|
||||
ClientJsonRpcMessage::notification(ClientNotification::InitializedNotification(
|
||||
InitializedNotification::default(),
|
||||
)),
|
||||
None,
|
||||
None,
|
||||
HashMap::new(),
|
||||
)
|
||||
.await;
|
||||
|
||||
match result {
|
||||
Ok(StreamableHttpPostResponse::Accepted) => {}
|
||||
other => panic!("expected Accepted, got: {other:?}"),
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue