@@ -18,6 +18,7 @@ use micro_http::{
1818} ;
1919use serde_json:: { Map , Value } ;
2020
21+ use crate :: logger:: { IncMetric , METRICS } ;
2122use crate :: mmds:: data_store:: { Mmds , MmdsDatastoreError as MmdsError , MmdsVersion , OutputFormat } ;
2223use crate :: mmds:: token:: PATH_TO_TOKEN ;
2324use crate :: mmds:: token_headers:: {
@@ -143,7 +144,20 @@ pub fn convert_to_response(mmds: Arc<Mutex<Mmds>>, request: Request) -> Response
143144}
144145
145146fn respond_to_get_request_v1 ( mmds : & Mmds , request : Request ) -> Response {
146- // TODO: Increments metrics that will be added in an upcoming commit.
147+ match get_header_value_pair (
148+ request. headers . custom_entries ( ) ,
149+ & [ X_METADATA_TOKEN_HEADER , X_AWS_EC2_METADATA_TOKEN_HEADER ] ,
150+ ) {
151+ Some ( ( _, token) ) => {
152+ if !mmds. is_valid_token ( token) {
153+ METRICS . mmds . rx_invalid_token . inc ( ) ;
154+ }
155+ }
156+ None => {
157+ // TODO: Increment a metric that will be added in an upcoming commit.
158+ }
159+ }
160+
147161 respond_to_get_request ( mmds, request)
148162}
149163
@@ -168,12 +182,15 @@ fn respond_to_get_request_v2(mmds: &Mmds, request: Request) -> Response {
168182 // Validate the token.
169183 match mmds. is_valid_token ( token) {
170184 true => respond_to_get_request ( mmds, request) ,
171- false => build_response (
172- request. http_version ( ) ,
173- StatusCode :: Unauthorized ,
174- MediaType :: PlainText ,
175- Body :: new ( VmmMmdsError :: InvalidToken . to_string ( ) ) ,
176- ) ,
185+ false => {
186+ METRICS . mmds . rx_invalid_token . inc ( ) ;
187+ build_response (
188+ request. http_version ( ) ,
189+ StatusCode :: Unauthorized ,
190+ MediaType :: PlainText ,
191+ Body :: new ( VmmMmdsError :: InvalidToken . to_string ( ) ) ,
192+ )
193+ }
177194 }
178195}
179196
@@ -536,8 +553,10 @@ mod tests {
536553 Accept: application/json\r \n \r \n ",
537554 MediaType :: ApplicationJson ,
538555 ) ;
556+ let prev_rx_invalid_token = METRICS . mmds . rx_invalid_token . count ( ) ;
539557 let actual_response = convert_to_response ( mmds. clone ( ) , request) ;
540558 assert_eq ! ( actual_response, expected_response) ;
559+ assert_eq ! ( prev_rx_invalid_token, METRICS . mmds. rx_invalid_token. count( ) ) ;
541560
542561 // Test valid v2 request.
543562 let request = Request :: try_from (
@@ -561,8 +580,10 @@ mod tests {
561580 . as_bytes ( ) ,
562581 MediaType :: ApplicationJson ,
563582 ) ;
583+ let prev_rx_invalid_token = METRICS . mmds . rx_invalid_token . count ( ) ;
564584 let actual_response = convert_to_response ( mmds. clone ( ) , request) ;
565585 assert_eq ! ( actual_response, expected_response) ;
586+ assert_eq ! ( prev_rx_invalid_token, METRICS . mmds. rx_invalid_token. count( ) ) ;
566587
567588 // Test GET request with invalid token is accepted when v1 is configured.
568589 let ( request, expected_response) = generate_request_and_expected_response (
@@ -571,8 +592,13 @@ mod tests {
571592 X-metadata-token: INVALID_TOKEN\r \n \r \n ",
572593 MediaType :: ApplicationJson ,
573594 ) ;
595+ let prev_rx_invalid_token = METRICS . mmds . rx_invalid_token . count ( ) ;
574596 let actual_response = convert_to_response ( mmds, request) ;
575597 assert_eq ! ( actual_response, expected_response) ;
598+ assert_eq ! (
599+ prev_rx_invalid_token + 1 ,
600+ METRICS . mmds. rx_invalid_token. count( )
601+ ) ;
576602 }
577603
578604 #[ test]
@@ -707,8 +733,10 @@ mod tests {
707733 . as_bytes ( ) ,
708734 MediaType :: ApplicationJson ,
709735 ) ;
736+ let prev_rx_invalid_token = METRICS . mmds . rx_invalid_token . count ( ) ;
710737 let actual_response = convert_to_response ( mmds. clone ( ) , request) ;
711738 assert_eq ! ( actual_response, expected_response) ;
739+ assert_eq ! ( prev_rx_invalid_token, METRICS . mmds. rx_invalid_token. count( ) ) ;
712740
713741 // Test invalid customer header value is ignored if not PUT request to /latest/api/token.
714742 #[ rustfmt:: skip]
@@ -801,8 +829,13 @@ mod tests {
801829 let mut expected_response = Response :: new ( Version :: Http10 , StatusCode :: Unauthorized ) ;
802830 expected_response. set_content_type ( MediaType :: PlainText ) ;
803831 expected_response. set_body ( Body :: new ( VmmMmdsError :: InvalidToken . to_string ( ) ) ) ;
832+ let prev_rx_invalid_token = METRICS . mmds . rx_invalid_token . count ( ) ;
804833 let actual_response = convert_to_response ( mmds. clone ( ) , request) ;
805834 assert_eq ! ( actual_response, expected_response) ;
835+ assert_eq ! (
836+ prev_rx_invalid_token + 1 ,
837+ METRICS . mmds. rx_invalid_token. count( )
838+ ) ;
806839
807840 // Wait for the second token to expire.
808841 std:: thread:: sleep ( Duration :: from_secs ( 1 ) ) ;
0 commit comments