@@ -1323,6 +1323,46 @@ async fn upgrades_new() {
1323
1323
assert_eq ! ( s( & vec) , "bar=foo" ) ;
1324
1324
}
1325
1325
1326
+ #[ tokio:: test]
1327
+ async fn upgrades_ignored ( ) {
1328
+ let _ = pretty_env_logger:: try_init ( ) ;
1329
+ let mut listener = tcp_bind ( & "127.0.0.1:0" . parse ( ) . unwrap ( ) ) . unwrap ( ) ;
1330
+ let addr = listener. local_addr ( ) . unwrap ( ) ;
1331
+
1332
+ tokio:: spawn ( async move {
1333
+ let svc = service_fn ( move |req : Request < Body > | {
1334
+ assert_eq ! ( req. headers( ) [ "upgrade" ] , "yolo" ) ;
1335
+ future:: ok :: < _ , hyper:: Error > ( Response :: new ( hyper:: Body :: empty ( ) ) )
1336
+ } ) ;
1337
+
1338
+ let ( socket, _) = listener. accept ( ) . await . unwrap ( ) ;
1339
+ Http :: new ( )
1340
+ . serve_connection ( socket, svc)
1341
+ . with_upgrades ( )
1342
+ . await
1343
+ . expect ( "server task" ) ;
1344
+ } ) ;
1345
+
1346
+ let client = hyper:: Client :: new ( ) ;
1347
+ let url = format ! ( "http://{}/" , addr) ;
1348
+
1349
+ let make_req = || {
1350
+ hyper:: Request :: builder ( )
1351
+ . uri ( & * url)
1352
+ . header ( "upgrade" , "yolo" )
1353
+ . header ( "connection" , "upgrade" )
1354
+ . body ( hyper:: Body :: empty ( ) )
1355
+ . expect ( "make_req" )
1356
+ } ;
1357
+
1358
+ let res1 = client. request ( make_req ( ) ) . await . expect ( "req 1" ) ;
1359
+ assert_eq ! ( res1. status( ) , 200 ) ;
1360
+ drop ( res1) ;
1361
+
1362
+ let res2 = client. request ( make_req ( ) ) . await . expect ( "req 2" ) ;
1363
+ assert_eq ! ( res2. status( ) , 200 ) ;
1364
+ }
1365
+
1326
1366
#[ tokio:: test]
1327
1367
async fn http_connect_new ( ) {
1328
1368
use tokio:: io:: { AsyncReadExt , AsyncWriteExt } ;
0 commit comments