@@ -221,186 +221,12 @@ pub fn dns_error(rcode: String, info_code: u16) -> ErrorCode {
221221
222222#[ cfg( test) ]
223223mod tests {
224- use anyhow:: Result ;
225- use http:: Request ;
226-
227- use super :: { headers:: * , * } ;
228-
229- #[ test]
230- fn test_default_headers ( ) -> Result < ( ) > {
231- let scheme = "https" ;
232- let host = "fermyon.dev" ;
233- let trigger_route = "/foo/..." ;
234- let component_path = "/foo" ;
235- let path_info = "/bar" ;
236- let client_addr: SocketAddr = "127.0.0.1:8777" . parse ( ) . unwrap ( ) ;
237-
238- let req_uri = format ! (
239- "{}://{}{}{}?key1=value1&key2=value2" ,
240- scheme, host, component_path, path_info
241- ) ;
242-
243- let req = http:: Request :: builder ( )
244- . method ( "POST" )
245- . uri ( req_uri)
246- . body ( "" ) ?;
247-
248- let ( router, _) = Router :: build ( "/" , [ ( "DUMMY" , & trigger_route. into ( ) ) ] ) ?;
249- let route_match = router. route ( "/foo/bar" ) ?;
250-
251- let default_headers = compute_default_headers ( req. uri ( ) , host, & route_match, client_addr) ?;
252-
253- assert_eq ! (
254- search( & FULL_URL , & default_headers) . unwrap( ) ,
255- "https://fermyon.dev/foo/bar?key1=value1&key2=value2" . to_string( )
256- ) ;
257- assert_eq ! (
258- search( & PATH_INFO , & default_headers) . unwrap( ) ,
259- "/bar" . to_string( )
260- ) ;
261- assert_eq ! (
262- search( & MATCHED_ROUTE , & default_headers) . unwrap( ) ,
263- "/foo/..." . to_string( )
264- ) ;
265- assert_eq ! (
266- search( & BASE_PATH , & default_headers) . unwrap( ) ,
267- "/" . to_string( )
268- ) ;
269- assert_eq ! (
270- search( & RAW_COMPONENT_ROUTE , & default_headers) . unwrap( ) ,
271- "/foo/..." . to_string( )
272- ) ;
273- assert_eq ! (
274- search( & COMPONENT_ROUTE , & default_headers) . unwrap( ) ,
275- "/foo" . to_string( )
276- ) ;
277- assert_eq ! (
278- search( & CLIENT_ADDR , & default_headers) . unwrap( ) ,
279- "127.0.0.1:8777" . to_string( )
280- ) ;
281-
282- Ok ( ( ) )
283- }
284-
285- #[ test]
286- fn test_default_headers_with_named_wildcards ( ) -> Result < ( ) > {
287- let scheme = "https" ;
288- let host = "fermyon.dev" ;
289- let trigger_route = "/foo/:userid/..." ;
290- let component_path = "/foo" ;
291- let path_info = "/bar" ;
292- let client_addr: SocketAddr = "127.0.0.1:8777" . parse ( ) . unwrap ( ) ;
293-
294- let req_uri = format ! (
295- "{}://{}{}/42{}?key1=value1&key2=value2" ,
296- scheme, host, component_path, path_info
297- ) ;
298-
299- let req = http:: Request :: builder ( )
300- . method ( "POST" )
301- . uri ( req_uri)
302- . body ( "" ) ?;
303-
304- let ( router, _) = Router :: build ( "/" , [ ( "DUMMY" , & trigger_route. into ( ) ) ] ) ?;
305- let route_match = router. route ( "/foo/42/bar" ) ?;
306-
307- let default_headers = compute_default_headers ( req. uri ( ) , host, & route_match, client_addr) ?;
308-
309- assert_eq ! (
310- search( & FULL_URL , & default_headers) . unwrap( ) ,
311- "https://fermyon.dev/foo/42/bar?key1=value1&key2=value2" . to_string( )
312- ) ;
313- assert_eq ! (
314- search( & PATH_INFO , & default_headers) . unwrap( ) ,
315- "/bar" . to_string( )
316- ) ;
317- assert_eq ! (
318- search( & MATCHED_ROUTE , & default_headers) . unwrap( ) ,
319- "/foo/:userid/..." . to_string( )
320- ) ;
321- assert_eq ! (
322- search( & BASE_PATH , & default_headers) . unwrap( ) ,
323- "/" . to_string( )
324- ) ;
325- assert_eq ! (
326- search( & RAW_COMPONENT_ROUTE , & default_headers) . unwrap( ) ,
327- "/foo/:userid/..." . to_string( )
328- ) ;
329- assert_eq ! (
330- search( & COMPONENT_ROUTE , & default_headers) . unwrap( ) ,
331- "/foo/:userid" . to_string( )
332- ) ;
333- assert_eq ! (
334- search( & CLIENT_ADDR , & default_headers) . unwrap( ) ,
335- "127.0.0.1:8777" . to_string( )
336- ) ;
337-
338- assert_eq ! (
339- search(
340- & [ "SPIN_PATH_MATCH_USERID" , "X_PATH_MATCH_USERID" ] ,
341- & default_headers
342- )
343- . unwrap( ) ,
344- "42" . to_string( )
345- ) ;
346-
347- Ok ( ( ) )
348- }
349-
350- fn search ( keys : & [ & str ; 2 ] , headers : & [ ( [ String ; 2 ] , String ) ] ) -> Option < String > {
351- let mut res: Option < String > = None ;
352- for ( k, v) in headers {
353- if k[ 0 ] == keys[ 0 ] && k[ 1 ] == keys[ 1 ] {
354- res = Some ( v. clone ( ) ) ;
355- }
356- }
357-
358- res
359- }
224+ use super :: * ;
360225
361226 #[ test]
362227 fn parse_listen_addr_prefers_ipv4 ( ) {
363228 let addr = parse_listen_addr ( "localhost:12345" ) . unwrap ( ) ;
364229 assert_eq ! ( addr. ip( ) , Ipv4Addr :: LOCALHOST ) ;
365230 assert_eq ! ( addr. port( ) , 12345 ) ;
366231 }
367-
368- #[ test]
369- fn forbidden_headers_are_removed ( ) {
370- let mut req = Request :: get ( "http://test.spin.internal" )
371- . header ( "Host" , "test.spin.internal" )
372- . header ( "accept" , "text/plain" )
373- . body ( Default :: default ( ) )
374- . unwrap ( ) ;
375-
376- strip_forbidden_headers ( & mut req) ;
377-
378- assert_eq ! ( 1 , req. headers( ) . len( ) ) ;
379- assert ! ( req. headers( ) . get( "Host" ) . is_none( ) ) ;
380-
381- let mut req = Request :: get ( "http://test.spin.internal" )
382- . header ( "Host" , "test.spin.internal:1234" )
383- . header ( "accept" , "text/plain" )
384- . body ( Default :: default ( ) )
385- . unwrap ( ) ;
386-
387- strip_forbidden_headers ( & mut req) ;
388-
389- assert_eq ! ( 1 , req. headers( ) . len( ) ) ;
390- assert ! ( req. headers( ) . get( "Host" ) . is_none( ) ) ;
391- }
392-
393- #[ test]
394- fn non_forbidden_headers_are_not_removed ( ) {
395- let mut req = Request :: get ( "http://test.example.com" )
396- . header ( "Host" , "test.example.org" )
397- . header ( "accept" , "text/plain" )
398- . body ( Default :: default ( ) )
399- . unwrap ( ) ;
400-
401- strip_forbidden_headers ( & mut req) ;
402-
403- assert_eq ! ( 2 , req. headers( ) . len( ) ) ;
404- assert ! ( req. headers( ) . get( "Host" ) . is_some( ) ) ;
405- }
406232}
0 commit comments