Skip to content

Commit 43dcf28

Browse files
committed
test: split server init tests into single-assertion cases
1 parent caf34d5 commit 43dcf28

1 file changed

Lines changed: 33 additions & 9 deletions

File tree

crates/rmcp/tests/test_server_initialization.rs

Lines changed: 33 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,11 @@ async fn do_initialize(client: &mut impl Transport<rmcp::RoleClient>) {
5454
let _response = client.receive().await.unwrap();
5555
}
5656

57-
/// Server accepts logging/setLevel before initialized and responds with EmptyResult.
57+
// Server responds with EmptyResult to setLevel received before initialized.
5858
#[tokio::test]
59-
async fn server_init_accepts_set_level_before_initialized() {
59+
async fn server_init_set_level_response_is_empty_result() {
6060
let (server_transport, client_transport) = tokio::io::duplex(4096);
61-
let server_handle =
62-
tokio::spawn(async move { TestServer::new().serve(server_transport).await });
61+
let _server = tokio::spawn(async move { TestServer::new().serve(server_transport).await });
6362
let mut client = IntoTransport::<rmcp::RoleClient, _, _>::into_transport(client_transport);
6463

6564
do_initialize(&mut client).await;
@@ -74,8 +73,21 @@ async fn server_init_accepts_set_level_before_initialized() {
7473
),
7574
"expected EmptyResult for setLevel, got: {response:?}"
7675
);
76+
}
7777

78+
// Server initializes successfully when setLevel is sent before the initialized notification.
79+
#[tokio::test]
80+
async fn server_init_succeeds_after_set_level_before_initialized() {
81+
let (server_transport, client_transport) = tokio::io::duplex(4096);
82+
let server_handle =
83+
tokio::spawn(async move { TestServer::new().serve(server_transport).await });
84+
let mut client = IntoTransport::<rmcp::RoleClient, _, _>::into_transport(client_transport);
85+
86+
do_initialize(&mut client).await;
87+
client.send(set_level_request(2)).await.unwrap();
88+
let _response = client.receive().await.unwrap();
7889
client.send(initialized_notification()).await.unwrap();
90+
7991
let result = server_handle.await.unwrap();
8092
assert!(
8193
result.is_ok(),
@@ -84,12 +96,11 @@ async fn server_init_accepts_set_level_before_initialized() {
8496
result.unwrap().cancel().await.unwrap();
8597
}
8698

87-
/// Server accepts ping before initialized and responds with EmptyResult.
99+
// Server responds with EmptyResult to ping received before initialized.
88100
#[tokio::test]
89-
async fn server_init_accepts_ping_before_initialized() {
101+
async fn server_init_ping_response_is_empty_result() {
90102
let (server_transport, client_transport) = tokio::io::duplex(4096);
91-
let server_handle =
92-
tokio::spawn(async move { TestServer::new().serve(server_transport).await });
103+
let _server = tokio::spawn(async move { TestServer::new().serve(server_transport).await });
93104
let mut client = IntoTransport::<rmcp::RoleClient, _, _>::into_transport(client_transport);
94105

95106
do_initialize(&mut client).await;
@@ -104,8 +115,21 @@ async fn server_init_accepts_ping_before_initialized() {
104115
),
105116
"expected EmptyResult for ping, got: {response:?}"
106117
);
118+
}
107119

120+
// Server initializes successfully when ping is sent before the initialized notification.
121+
#[tokio::test]
122+
async fn server_init_succeeds_after_ping_before_initialized() {
123+
let (server_transport, client_transport) = tokio::io::duplex(4096);
124+
let server_handle =
125+
tokio::spawn(async move { TestServer::new().serve(server_transport).await });
126+
let mut client = IntoTransport::<rmcp::RoleClient, _, _>::into_transport(client_transport);
127+
128+
do_initialize(&mut client).await;
129+
client.send(ping_request(2)).await.unwrap();
130+
let _response = client.receive().await.unwrap();
108131
client.send(initialized_notification()).await.unwrap();
132+
109133
let result = server_handle.await.unwrap();
110134
assert!(
111135
result.is_ok(),
@@ -114,7 +138,7 @@ async fn server_init_accepts_ping_before_initialized() {
114138
result.unwrap().cancel().await.unwrap();
115139
}
116140

117-
/// Server rejects any message other than setLevel/ping/initialized before initialized.
141+
// Server returns ExpectedInitializedNotification for any other message before initialized.
118142
#[tokio::test]
119143
async fn server_init_rejects_unexpected_message_before_initialized() {
120144
let (server_transport, client_transport) = tokio::io::duplex(4096);

0 commit comments

Comments
 (0)