@@ -12,6 +12,7 @@ use serde_json::json;
1212use sqlpage:: webserver:: http:: create_app;
1313use std:: collections:: HashMap ;
1414use std:: sync:: { Arc , Mutex } ;
15+ use tokio_util:: sync:: { CancellationToken , DropGuard } ;
1516
1617fn base64url_encode ( data : & [ u8 ] ) -> String {
1718 base64:: engine:: general_purpose:: URL_SAFE_NO_PAD . encode ( data)
@@ -156,6 +157,7 @@ pub struct FakeOidcProvider {
156157 pub client_id : String ,
157158 pub client_secret : String ,
158159 state : SharedProviderState ,
160+ _stop_on_drop : DropGuard ,
159161}
160162
161163fn extract_set_cookies ( headers : & header:: HeaderMap ) -> Vec < Cookie < ' static > > {
@@ -184,6 +186,10 @@ impl FakeOidcProvider {
184186 } ) ) ;
185187
186188 let state_for_server = Arc :: clone ( & state) ;
189+
190+ let server_stop = CancellationToken :: new ( ) ;
191+ let stop_on_drop = server_stop. clone ( ) . drop_guard ( ) ;
192+
187193 let server = HttpServer :: new ( move || {
188194 let state = Data :: new ( Arc :: clone ( & state_for_server) ) ;
189195 App :: new ( )
@@ -199,6 +205,7 @@ impl FakeOidcProvider {
199205 . listen ( listener)
200206 . unwrap ( )
201207 . shutdown_timeout ( 1 )
208+ . shutdown_signal ( server_stop. cancelled_owned ( ) )
202209 . run ( ) ;
203210
204211 tokio:: spawn ( server) ;
@@ -208,6 +215,7 @@ impl FakeOidcProvider {
208215 client_id,
209216 client_secret,
210217 state,
218+ _stop_on_drop : stop_on_drop,
211219 }
212220 }
213221
0 commit comments