@@ -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]
119143async fn server_init_rejects_unexpected_message_before_initialized ( ) {
120144 let ( server_transport, client_transport) = tokio:: io:: duplex ( 4096 ) ;
0 commit comments