@@ -82,16 +82,13 @@ impl<Outbound: OutboundMessage> InternalSessionRef<Outbound> {
8282 Ok ( receiver. await ?)
8383 }
8484
85- pub async fn await_in_schedule ( & self ) -> Result < ( ) , SessionGone > {
85+ pub async fn await_in_schedule ( & self ) -> Result < ScheduleResponse , SessionGone > {
8686 debug ! ( "awaiting in-schedule time" ) ;
8787 let ( sender, receiver) = oneshot:: channel :: < ScheduleResponse > ( ) ;
8888 self . event_sender
8989 . send ( SessionEvent :: AwaitSchedule ( sender) )
9090 . await ?;
91- receiver. await ?;
92-
93- debug ! ( "resuming connection as schedule is active" ) ;
94- Ok ( ( ) )
91+ Ok ( receiver. await ?)
9592 }
9693}
9794
@@ -110,3 +107,52 @@ impl From<oneshot::error::RecvError> for SessionGone {
110107 Self ( err. to_string ( ) )
111108 }
112109}
110+
111+ #[ cfg( test) ]
112+ mod tests {
113+ use super :: * ;
114+ use crate :: session:: test_utils:: create_test_session_ref;
115+
116+ #[ tokio:: test]
117+ async fn await_in_schedule_returns_in_schedule_when_session_responds_in_schedule ( ) {
118+ let ( session_ref, mut event_receiver) = create_test_session_ref ( ) ;
119+
120+ tokio:: spawn ( async move {
121+ match event_receiver. recv ( ) . await {
122+ Some ( SessionEvent :: AwaitSchedule ( responder) ) => {
123+ let _ = responder. send ( ScheduleResponse :: InSchedule ) ;
124+ }
125+ other => panic ! ( "unexpected event: {other:?}" ) ,
126+ }
127+ } ) ;
128+
129+ let result = session_ref. await_in_schedule ( ) . await ;
130+ assert ! ( matches!( result, Ok ( ScheduleResponse :: InSchedule ) ) ) ;
131+ }
132+
133+ #[ tokio:: test]
134+ async fn await_in_schedule_returns_shutdown_when_session_responds_shutdown ( ) {
135+ let ( session_ref, mut event_receiver) = create_test_session_ref ( ) ;
136+
137+ tokio:: spawn ( async move {
138+ match event_receiver. recv ( ) . await {
139+ Some ( SessionEvent :: AwaitSchedule ( responder) ) => {
140+ let _ = responder. send ( ScheduleResponse :: Shutdown ) ;
141+ }
142+ other => panic ! ( "unexpected event: {other:?}" ) ,
143+ }
144+ } ) ;
145+
146+ let result = session_ref. await_in_schedule ( ) . await ;
147+ assert ! ( matches!( result, Ok ( ScheduleResponse :: Shutdown ) ) ) ;
148+ }
149+
150+ #[ tokio:: test]
151+ async fn await_in_schedule_returns_err_when_event_channel_closed ( ) {
152+ let ( session_ref, event_receiver) = create_test_session_ref ( ) ;
153+ drop ( event_receiver) ;
154+
155+ let result = session_ref. await_in_schedule ( ) . await ;
156+ assert ! ( matches!( result, Err ( SessionGone ( _) ) ) ) ;
157+ }
158+ }
0 commit comments