@@ -140,4 +140,62 @@ mod tests {
140140 ) ;
141141 Ok ( ( ) )
142142 }
143+
144+ #[ tokio:: test]
145+ async fn http_transport_sends_extra_headers ( ) -> Result < ( ) , Box < dyn Error > > {
146+ let listener = TcpListener :: bind ( "127.0.0.1:0" ) . await ?;
147+ let addr = listener. local_addr ( ) ?;
148+ let server = tokio:: spawn ( async move {
149+ let ( mut socket, _) = listener. accept ( ) . await ?;
150+ let mut buf = [ 0u8 ; 1024 ] ;
151+ let n = socket. read ( & mut buf) . await ?;
152+ let request = String :: from_utf8_lossy ( & buf[ ..n] ) . into_owned ( ) ;
153+ socket
154+ . write_all ( b"HTTP/1.1 200 OK\r \n Content-Length: 2\r \n \r \n ok" )
155+ . await ?;
156+ Ok :: < _ , std:: io:: Error > ( request)
157+ } ) ;
158+
159+ let ( status, _body) = http_request_with_headers (
160+ "POST" ,
161+ & format ! ( "http://{addr}" ) ,
162+ "/prpc/Status" ,
163+ b"{}" ,
164+ & [ ( "Authorization" , "Bearer secret-token" ) ] ,
165+ )
166+ . await ?;
167+ assert_eq ! ( status, 200 ) ;
168+ let request = server. await ??;
169+ assert ! (
170+ request. contains( "authorization: Bearer secret-token" )
171+ || request. contains( "Authorization: Bearer secret-token" ) ,
172+ "request is missing the Authorization header: {request:?}"
173+ ) ;
174+ Ok ( ( ) )
175+ }
176+
177+ #[ tokio:: test]
178+ async fn http_transport_omits_headers_when_none ( ) -> Result < ( ) , Box < dyn Error > > {
179+ let listener = TcpListener :: bind ( "127.0.0.1:0" ) . await ?;
180+ let addr = listener. local_addr ( ) ?;
181+ let server = tokio:: spawn ( async move {
182+ let ( mut socket, _) = listener. accept ( ) . await ?;
183+ let mut buf = [ 0u8 ; 1024 ] ;
184+ let n = socket. read ( & mut buf) . await ?;
185+ let request = String :: from_utf8_lossy ( & buf[ ..n] ) . into_owned ( ) ;
186+ socket
187+ . write_all ( b"HTTP/1.1 200 OK\r \n Content-Length: 2\r \n \r \n ok" )
188+ . await ?;
189+ Ok :: < _ , std:: io:: Error > ( request)
190+ } ) ;
191+
192+ let ( status, _body) = http_request ( "GET" , & format ! ( "http://{addr}" ) , "/x" , b"" ) . await ?;
193+ assert_eq ! ( status, 200 ) ;
194+ let request = server. await ??;
195+ assert ! (
196+ !request. to_lowercase( ) . contains( "authorization:" ) ,
197+ "unexpected Authorization header: {request:?}"
198+ ) ;
199+ Ok ( ( ) )
200+ }
143201}
0 commit comments