@@ -430,7 +430,7 @@ mod tests {
430430 // Test with empty `Accept` header. micro-http defaults to `Accept: text/plain`.
431431 let ( request, expected_response) = generate_request_and_expected_response (
432432 b"GET http://169.254.169.254/ HTTP/1.0\r \n \"
433- Accept:\r \n \r \n " ,
433+ Accept:\r \n \r \n " ,
434434 MediaType :: PlainText ,
435435 ) ;
436436 assert_eq ! (
@@ -441,7 +441,7 @@ mod tests {
441441 // Test with `Accept: */*` header.
442442 let ( request, expected_response) = generate_request_and_expected_response (
443443 b"GET http://169.254.169.254/ HTTP/1.0\r \n \"
444- Accept: */*\r \n \r \n " ,
444+ Accept: */*\r \n \r \n " ,
445445 MediaType :: PlainText ,
446446 ) ;
447447 assert_eq ! (
@@ -452,7 +452,7 @@ mod tests {
452452 // Test with `Accept: text/plain`.
453453 let ( request, expected_response) = generate_request_and_expected_response (
454454 b"GET http://169.254.169.254/ HTTP/1.0\r \n \
455- Accept: text/plain\r \n \r \n ",
455+ Accept: text/plain\r \n \r \n ",
456456 MediaType :: PlainText ,
457457 ) ;
458458 assert_eq ! (
@@ -463,7 +463,7 @@ mod tests {
463463 // Test with `Accept: application/json`.
464464 let ( request, expected_response) = generate_request_and_expected_response (
465465 b"GET http://169.254.169.254/ HTTP/1.0\r \n \
466- Accept: application/json\r \n \r \n ",
466+ Accept: application/json\r \n \r \n ",
467467 MediaType :: ApplicationJson ,
468468 ) ;
469469 assert_eq ! ( convert_to_response( mmds, request) , expected_response) ;
@@ -485,8 +485,9 @@ mod tests {
485485 ) ;
486486
487487 // Test resource not found.
488- let request_bytes = b"GET http://169.254.169.254/invalid HTTP/1.0\r \n \r \n " ;
489- let request = Request :: try_from ( request_bytes, None ) . unwrap ( ) ;
488+ let request =
489+ Request :: try_from ( b"GET http://169.254.169.254/invalid HTTP/1.0\r \n \r \n " , None )
490+ . unwrap ( ) ;
490491 let mut expected_response = Response :: new ( Version :: Http10 , StatusCode :: NotFound ) ;
491492 expected_response. set_content_type ( MediaType :: PlainText ) ;
492493 expected_response. set_body ( Body :: new (
@@ -496,8 +497,7 @@ mod tests {
496497 assert_eq ! ( actual_response, expected_response) ;
497498
498499 // Test NotImplemented.
499- let request_bytes = b"GET /age HTTP/1.1\r \n \r \n " ;
500- let request = Request :: try_from ( request_bytes, None ) . unwrap ( ) ;
500+ let request = Request :: try_from ( b"GET /age HTTP/1.1\r \n \r \n " , None ) . unwrap ( ) ;
501501 let mut expected_response = Response :: new ( Version :: Http11 , StatusCode :: NotImplemented ) ;
502502 expected_response. set_content_type ( MediaType :: PlainText ) ;
503503 let body = "Cannot retrieve value. The value has an unsupported type." . to_string ( ) ;
@@ -508,8 +508,11 @@ mod tests {
508508 // Test not allowed HTTP Method.
509509 let not_allowed_methods = [ "PUT" , "PATCH" ] ;
510510 for method in not_allowed_methods. iter ( ) {
511- let request_bytes = format ! ( "{} http://169.254.169.255/ HTTP/1.0\r \n \r \n " , method) ;
512- let request = Request :: try_from ( request_bytes. as_bytes ( ) , None ) . unwrap ( ) ;
511+ let request = Request :: try_from (
512+ format ! ( "{method} http://169.254.169.255/ HTTP/1.0\r \n \r \n " ) . as_bytes ( ) ,
513+ None ,
514+ )
515+ . unwrap ( ) ;
513516 let mut expected_response =
514517 Response :: new ( Version :: Http10 , StatusCode :: MethodNotAllowed ) ;
515518 expected_response. set_content_type ( MediaType :: PlainText ) ;
@@ -520,32 +523,29 @@ mod tests {
520523 }
521524
522525 // Test invalid (empty absolute path) URI.
523- let request_bytes = b"GET http:// HTTP/1.0\r \n \r \n " ;
524- let request = Request :: try_from ( request_bytes, None ) . unwrap ( ) ;
526+ let request = Request :: try_from ( b"GET http:// HTTP/1.0\r \n \r \n " , None ) . unwrap ( ) ;
525527 let mut expected_response = Response :: new ( Version :: Http10 , StatusCode :: BadRequest ) ;
526528 expected_response. set_content_type ( MediaType :: PlainText ) ;
527529 expected_response. set_body ( Body :: new ( VmmMmdsError :: InvalidURI . to_string ( ) ) ) ;
528530 let actual_response = convert_to_response ( mmds. clone ( ) , request) ;
529531 assert_eq ! ( actual_response, expected_response) ;
530532
531533 // Test invalid custom header value is ignored when V1 is configured.
532- let request_bytes = b"GET http://169.254.169.254/name/first HTTP/1.0 \r \n \
533- Accept: application/json \r \n
534- X-metadata-token-ttl-seconds : application/json\r \n \r \n " ;
535- let request = Request :: try_from ( request_bytes , None ) . unwrap ( ) ;
536- let mut expected_response = Response :: new ( Version :: Http10 , StatusCode :: OK ) ;
537- expected_response . set_body ( Body :: new ( " \" John \" " ) ) ;
534+ let ( request , expected_response ) = generate_request_and_expected_response (
535+ b"GET http://169.254.169.254/ HTTP/1.0 \r \n \
536+ Accept : application/json\r \n \
537+ X-metadata-token-ttl-seconds: -60 \r \n \r \n " ,
538+ MediaType :: ApplicationJson ,
539+ ) ;
538540 let actual_response = convert_to_response ( mmds. clone ( ) , request) ;
539541 assert_eq ! ( actual_response, expected_response) ;
540542
541543 // Test Ok path.
542- let request_bytes = b"GET http://169.254.169.254/ HTTP/1.0\r \n \
543- Accept: application/json\r \n \r \n ";
544- let request = Request :: try_from ( request_bytes, None ) . unwrap ( ) ;
545- let mut expected_response = Response :: new ( Version :: Http10 , StatusCode :: OK ) ;
546- let mut body = get_json_data ( ) . to_string ( ) ;
547- body. retain ( |c| !c. is_whitespace ( ) ) ;
548- expected_response. set_body ( Body :: new ( body) ) ;
544+ let ( request, expected_response) = generate_request_and_expected_response (
545+ b"GET http://169.254.169.254/ HTTP/1.0\r \n \
546+ Accept: application/json\r \n \r \n ",
547+ MediaType :: ApplicationJson ,
548+ ) ;
549549 let actual_response = convert_to_response ( mmds, request) ;
550550 assert_eq ! ( actual_response, expected_response) ;
551551 }
@@ -566,8 +566,8 @@ mod tests {
566566 ) ;
567567
568568 // Test not allowed PATCH HTTP Method.
569- let request_bytes = b"PATCH http://169.254.169.255/ HTTP/1.0 \r \n \r \n " ;
570- let request = Request :: try_from ( request_bytes , None ) . unwrap ( ) ;
569+ let request =
570+ Request :: try_from ( b"PATCH http://169.254.169.255/ HTTP/1.0 \r \n \r \n " , None ) . unwrap ( ) ;
571571 let mut expected_response = Response :: new ( Version :: Http10 , StatusCode :: MethodNotAllowed ) ;
572572 expected_response. set_content_type ( MediaType :: PlainText ) ;
573573 expected_response. set_body ( Body :: new ( VmmMmdsError :: MethodNotAllowed . to_string ( ) ) ) ;
@@ -577,25 +577,30 @@ mod tests {
577577 assert_eq ! ( actual_response, expected_response) ;
578578
579579 // Test invalid value for custom header.
580- let request_bytes = b"GET http://169.254.169.254/ HTTP/1.0\r \n \
581- Accept: application/json\r \n
582- X-metadata-token-ttl-seconds: application/json\r \n \r \n " ;
583- let request = Request :: try_from ( request_bytes, None ) . unwrap ( ) ;
580+ let request = Request :: try_from (
581+ b"GET http://169.254.169.254/ HTTP/1.0\r \n \
582+ Accept: application/json\r \n \
583+ X-metadata-token-ttl-seconds: -60\r \n \r \n ",
584+ None ,
585+ )
586+ . unwrap ( ) ;
584587 let mut expected_response = Response :: new ( Version :: Http10 , StatusCode :: BadRequest ) ;
585588 expected_response. set_content_type ( MediaType :: PlainText ) ;
586589 expected_response. set_body ( Body :: new (
587- "Invalid header. Reason: Invalid value. Key:X-metadata-token-ttl-seconds; \
588- Value:application/json"
590+ "Invalid header. Reason: Invalid value. Key:X-metadata-token-ttl-seconds; Value:-60"
589591 . to_string ( ) ,
590592 ) ) ;
591593 let actual_response = convert_to_response ( mmds. clone ( ) , request) ;
592594 assert_eq ! ( actual_response, expected_response) ;
593595
594596 // Test PUT requests.
595597 // Unsupported `X-Forwarded-For` header present.
596- let request_bytes = b"PUT http://169.254.169.254/latest/api/token HTTP/1.0\r \n \
597- X-Forwarded-For: 203.0.113.195\r \n \r \n ";
598- let request = Request :: try_from ( request_bytes, None ) . unwrap ( ) ;
598+ let request = Request :: try_from (
599+ b"PUT http://169.254.169.254/latest/api/token HTTP/1.0\r \n \
600+ X-Forwarded-For: 203.0.113.195\r \n \r \n ",
601+ None ,
602+ )
603+ . unwrap ( ) ;
599604 let mut expected_response = Response :: new ( Version :: Http10 , StatusCode :: BadRequest ) ;
600605 expected_response. set_content_type ( MediaType :: PlainText ) ;
601606 expected_response. set_body ( Body :: new (
@@ -605,9 +610,12 @@ mod tests {
605610 assert_eq ! ( actual_response, expected_response) ;
606611
607612 // Test invalid path.
608- let request_bytes = b"PUT http://169.254.169.254/token HTTP/1.0\r \n \
609- X-metadata-token-ttl-seconds: 60\r \n \r \n ";
610- let request = Request :: try_from ( request_bytes, None ) . unwrap ( ) ;
613+ let request = Request :: try_from (
614+ b"PUT http://169.254.169.254/token HTTP/1.0\r \n \
615+ X-metadata-token-ttl-seconds: 60\r \n \r \n ",
616+ None ,
617+ )
618+ . unwrap ( ) ;
611619 let mut expected_response = Response :: new ( Version :: Http10 , StatusCode :: NotFound ) ;
612620 expected_response. set_content_type ( MediaType :: PlainText ) ;
613621 expected_response. set_body ( Body :: new (
@@ -619,62 +627,77 @@ mod tests {
619627 // Test invalid lifetime values for token.
620628 let invalid_values = [ MIN_TOKEN_TTL_SECONDS - 1 , MAX_TOKEN_TTL_SECONDS + 1 ] ;
621629 for invalid_value in invalid_values. iter ( ) {
622- let request_bytes = format ! (
623- "PUT http://169.254.169.254/latest/api/token \
624- HTTP/1.0\r \n X-metadata-token-ttl-seconds: {}\r \n \r \n ",
625- invalid_value
626- ) ;
627- let request = Request :: try_from ( request_bytes. as_bytes ( ) , None ) . unwrap ( ) ;
630+ #[ rustfmt:: skip]
631+ let request = Request :: try_from (
632+ format ! (
633+ "PUT http://169.254.169.254/latest/api/token HTTP/1.0\r \n \
634+ X-metadata-token-ttl-seconds: {invalid_value}\r \n \r \n "
635+ )
636+ . as_bytes ( ) ,
637+ None ,
638+ )
639+ . unwrap ( ) ;
628640 let mut expected_response = Response :: new ( Version :: Http10 , StatusCode :: BadRequest ) ;
629641 expected_response. set_content_type ( MediaType :: PlainText ) ;
642+ #[ rustfmt:: skip]
630643 let error_msg = format ! (
631- "Invalid time to live value provided for token: {}. Please provide a value \
632- between {} and {}.",
633- invalid_value, MIN_TOKEN_TTL_SECONDS , MAX_TOKEN_TTL_SECONDS
644+ "Invalid time to live value provided for token: {invalid_value}. \
645+ Please provide a value between {MIN_TOKEN_TTL_SECONDS} and {MAX_TOKEN_TTL_SECONDS}.",
634646 ) ;
635647 expected_response. set_body ( Body :: new ( error_msg) ) ;
636648 let actual_response = convert_to_response ( mmds. clone ( ) , request) ;
637649 assert_eq ! ( actual_response, expected_response) ;
638650 }
639651
640652 // Test no lifetime value provided for token.
641- let request_bytes = b"PUT http://169.254.169.254/latest/api/token HTTP/1.0\r \n \r \n " ;
642- let request = Request :: try_from ( request_bytes, None ) . unwrap ( ) ;
653+ let request = Request :: try_from (
654+ b"PUT http://169.254.169.254/latest/api/token HTTP/1.0\r \n \r \n " ,
655+ None ,
656+ )
657+ . unwrap ( ) ;
643658 let mut expected_response = Response :: new ( Version :: Http10 , StatusCode :: BadRequest ) ;
644659 expected_response. set_content_type ( MediaType :: PlainText ) ;
645660 expected_response. set_body ( Body :: new ( VmmMmdsError :: NoTtlProvided . to_string ( ) ) ) ;
646661 let actual_response = convert_to_response ( mmds. clone ( ) , request) ;
647662 assert_eq ! ( actual_response, expected_response) ;
648663
649664 // Test valid PUT.
650- let request_bytes = b"PUT http://169.254.169.254/latest/api/token HTTP/1.0\r \n \
651- X-metadata-token-ttl-seconds: 60\r \n \r \n ";
652- let request = Request :: try_from ( request_bytes, None ) . unwrap ( ) ;
665+ let request = Request :: try_from (
666+ b"PUT http://169.254.169.254/latest/api/token HTTP/1.0\r \n \
667+ X-metadata-token-ttl-seconds: 60\r \n \r \n ",
668+ None ,
669+ )
670+ . unwrap ( ) ;
653671 let actual_response = convert_to_response ( mmds. clone ( ) , request) ;
654672 assert_eq ! ( actual_response. status( ) , StatusCode :: OK ) ;
655673 assert_eq ! ( actual_response. content_type( ) , MediaType :: PlainText ) ;
656674
657675 // Test valid GET.
658676 let valid_token = String :: from_utf8 ( actual_response. body ( ) . unwrap ( ) . body ) . unwrap ( ) ;
659- let request_bytes = format ! (
660- "GET http://169.254.169.254/ HTTP/1.0\r \n Accept: \
661- application/json\r \n X-metadata-token: {}\r \n \r \n ",
662- valid_token
677+ #[ rustfmt:: skip]
678+ let ( request, expected_response) = generate_request_and_expected_response (
679+ format ! (
680+ "GET http://169.254.169.254/ HTTP/1.0\r \n \
681+ Accept: application/json\r \n \
682+ X-metadata-token: {valid_token}\r \n \r \n ",
683+ )
684+ . as_bytes ( ) ,
685+ MediaType :: ApplicationJson ,
663686 ) ;
664- let request = Request :: try_from ( request_bytes. as_bytes ( ) , None ) . unwrap ( ) ;
665- let mut expected_response = Response :: new ( Version :: Http10 , StatusCode :: OK ) ;
666- let mut body = get_json_data ( ) . to_string ( ) ;
667- body. retain ( |c| !c. is_whitespace ( ) ) ;
668- expected_response. set_body ( Body :: new ( body) ) ;
669687 let actual_response = convert_to_response ( mmds. clone ( ) , request) ;
670688 assert_eq ! ( actual_response, expected_response) ;
671689
672690 // Test GET request towards unsupported value type.
673- let request_bytes = format ! (
674- "GET /age HTTP/1.1\r \n X-metadata-token: {}\r \n \r \n " ,
675- valid_token
676- ) ;
677- let request = Request :: try_from ( request_bytes. as_bytes ( ) , None ) . unwrap ( ) ;
691+ #[ rustfmt:: skip]
692+ let request = Request :: try_from (
693+ format ! (
694+ "GET /age HTTP/1.1\r \n \
695+ X-metadata-token: {valid_token}\r \n \r \n ",
696+ )
697+ . as_bytes ( ) ,
698+ None ,
699+ )
700+ . unwrap ( ) ;
678701 let mut expected_response = Response :: new ( Version :: Http11 , StatusCode :: NotImplemented ) ;
679702 expected_response. set_content_type ( MediaType :: PlainText ) ;
680703 let body = "Cannot retrieve value. The value has an unsupported type." . to_string ( ) ;
@@ -683,11 +706,16 @@ mod tests {
683706 assert_eq ! ( actual_response, expected_response) ;
684707
685708 // Test GET request towards invalid resource.
686- let request_bytes = format ! (
687- "GET http://169.254.169.254/invalid HTTP/1.0\r \n X-metadata-token: {}\r \n \r \n " ,
688- valid_token
689- ) ;
690- let request = Request :: try_from ( request_bytes. as_bytes ( ) , None ) . unwrap ( ) ;
709+ #[ rustfmt:: skip]
710+ let request = Request :: try_from (
711+ format ! (
712+ "GET http://169.254.169.254/invalid HTTP/1.0\r \n \
713+ X-metadata-token: {valid_token}\r \n \r \n ",
714+ )
715+ . as_bytes ( ) ,
716+ None ,
717+ )
718+ . unwrap ( ) ;
691719 let mut expected_response = Response :: new ( Version :: Http10 , StatusCode :: NotFound ) ;
692720 expected_response. set_content_type ( MediaType :: PlainText ) ;
693721 expected_response. set_body ( Body :: new (
@@ -697,43 +725,42 @@ mod tests {
697725 assert_eq ! ( actual_response, expected_response) ;
698726
699727 // Test GET request without token should return Unauthorized status code.
700- let request_bytes = b"GET http://169.254.169.254/ HTTP/1.0 \r \n \r \n " ;
701- let request = Request :: try_from ( request_bytes , None ) . unwrap ( ) ;
728+ let request =
729+ Request :: try_from ( b"GET http://169.254.169.254/ HTTP/1.0 \r \n \r \n " , None ) . unwrap ( ) ;
702730 let mut expected_response = Response :: new ( Version :: Http10 , StatusCode :: Unauthorized ) ;
703731 expected_response. set_content_type ( MediaType :: PlainText ) ;
704732 expected_response. set_body ( Body :: new ( VmmMmdsError :: NoTokenProvided . to_string ( ) ) ) ;
705733 let actual_response = convert_to_response ( mmds. clone ( ) , request) ;
706734 assert_eq ! ( actual_response, expected_response) ;
707735
708- // Test GET request with invalid token should return Unauthorized status code.
709- let request_bytes = b"GET http://169.254.169.254/ HTTP/1.0\r \n \
710- X-metadata-token: foo\r \n \r \n ";
711- let request = Request :: try_from ( request_bytes, None ) . unwrap ( ) ;
712- let mut expected_response = Response :: new ( Version :: Http10 , StatusCode :: Unauthorized ) ;
713- expected_response. set_content_type ( MediaType :: PlainText ) ;
714- expected_response. set_body ( Body :: new ( VmmMmdsError :: InvalidToken . to_string ( ) ) ) ;
715- let actual_response = convert_to_response ( mmds. clone ( ) , request) ;
716- assert_eq ! ( actual_response, expected_response) ;
717-
718736 // Create a new MMDS token that expires in one second.
719- let request_bytes = b"PUT http://169.254.169.254/latest/api/token HTTP/1.0\r \n \
720- X-metadata-token-ttl-seconds: 1\r \n \r \n ";
721- let request = Request :: try_from ( request_bytes, None ) . unwrap ( ) ;
737+ #[ rustfmt:: skip]
738+ let request = Request :: try_from (
739+ b"PUT http://169.254.169.254/latest/api/token HTTP/1.0\r \n \
740+ X-metadata-token-ttl-seconds: 1\r \n \r \n ",
741+ None ,
742+ )
743+ . unwrap ( ) ;
722744 let actual_response = convert_to_response ( mmds. clone ( ) , request) ;
723745 assert_eq ! ( actual_response. status( ) , StatusCode :: OK ) ;
724746 assert_eq ! ( actual_response. content_type( ) , MediaType :: PlainText ) ;
725747
726748 // Test GET request with invalid tokens.
727749 // `valid_token` will become invalid after one second, when it expires.
728750 let valid_token = String :: from_utf8 ( actual_response. body ( ) . unwrap ( ) . body ) . unwrap ( ) ;
729- let invalid_token = "a" . repeat ( 58 ) ;
730- let tokens = [ invalid_token, valid_token] ;
751+ let invalid_token = "INVALID_TOKEN" ;
752+ let tokens = [ invalid_token, & valid_token] ;
731753 for token in tokens. iter ( ) {
732- let request_bytes = format ! (
733- "GET http://169.254.169.254/ HTTP/1.0\r \n X-metadata-token: {}\r \n \r \n " ,
734- token
735- ) ;
736- let request = Request :: try_from ( request_bytes. as_bytes ( ) , None ) . unwrap ( ) ;
754+ #[ rustfmt:: skip]
755+ let request = Request :: try_from (
756+ format ! (
757+ "GET http://169.254.169.254/ HTTP/1.0\r \n \
758+ X-metadata-token: {token}\r \n \r \n ",
759+ )
760+ . as_bytes ( ) ,
761+ None ,
762+ )
763+ . unwrap ( ) ;
737764 let mut expected_response = Response :: new ( Version :: Http10 , StatusCode :: Unauthorized ) ;
738765 expected_response. set_content_type ( MediaType :: PlainText ) ;
739766 expected_response. set_body ( Body :: new ( VmmMmdsError :: InvalidToken . to_string ( ) ) ) ;
0 commit comments