@@ -18,6 +18,7 @@ use micro_http::{
18
18
} ;
19
19
use serde_json:: { Map , Value } ;
20
20
21
+ use crate :: logger:: { IncMetric , METRICS } ;
21
22
use crate :: mmds:: data_store:: { Mmds , MmdsDatastoreError as MmdsError , MmdsVersion , OutputFormat } ;
22
23
use crate :: mmds:: token:: PATH_TO_TOKEN ;
23
24
use crate :: mmds:: token_headers:: {
@@ -143,7 +144,20 @@ pub fn convert_to_response(mmds: Arc<Mutex<Mmds>>, request: Request) -> Response
143
144
}
144
145
145
146
fn 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
+
147
161
respond_to_get_request ( mmds, request)
148
162
}
149
163
@@ -168,12 +182,15 @@ fn respond_to_get_request_v2(mmds: &Mmds, request: Request) -> Response {
168
182
// Validate the token.
169
183
match mmds. is_valid_token ( token) {
170
184
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
+ }
177
194
}
178
195
}
179
196
@@ -536,8 +553,10 @@ mod tests {
536
553
Accept: application/json\r \n \r \n ",
537
554
MediaType :: ApplicationJson ,
538
555
) ;
556
+ let prev_rx_invalid_token = METRICS . mmds . rx_invalid_token . count ( ) ;
539
557
let actual_response = convert_to_response ( mmds. clone ( ) , request) ;
540
558
assert_eq ! ( actual_response, expected_response) ;
559
+ assert_eq ! ( prev_rx_invalid_token, METRICS . mmds. rx_invalid_token. count( ) ) ;
541
560
542
561
// Test valid v2 request.
543
562
let request = Request :: try_from (
@@ -561,8 +580,10 @@ mod tests {
561
580
. as_bytes ( ) ,
562
581
MediaType :: ApplicationJson ,
563
582
) ;
583
+ let prev_rx_invalid_token = METRICS . mmds . rx_invalid_token . count ( ) ;
564
584
let actual_response = convert_to_response ( mmds. clone ( ) , request) ;
565
585
assert_eq ! ( actual_response, expected_response) ;
586
+ assert_eq ! ( prev_rx_invalid_token, METRICS . mmds. rx_invalid_token. count( ) ) ;
566
587
567
588
// Test GET request with invalid token is accepted when v1 is configured.
568
589
let ( request, expected_response) = generate_request_and_expected_response (
@@ -571,8 +592,13 @@ mod tests {
571
592
X-metadata-token: INVALID_TOKEN\r \n \r \n ",
572
593
MediaType :: ApplicationJson ,
573
594
) ;
595
+ let prev_rx_invalid_token = METRICS . mmds . rx_invalid_token . count ( ) ;
574
596
let actual_response = convert_to_response ( mmds, request) ;
575
597
assert_eq ! ( actual_response, expected_response) ;
598
+ assert_eq ! (
599
+ prev_rx_invalid_token + 1 ,
600
+ METRICS . mmds. rx_invalid_token. count( )
601
+ ) ;
576
602
}
577
603
578
604
#[ test]
@@ -707,8 +733,10 @@ mod tests {
707
733
. as_bytes ( ) ,
708
734
MediaType :: ApplicationJson ,
709
735
) ;
736
+ let prev_rx_invalid_token = METRICS . mmds . rx_invalid_token . count ( ) ;
710
737
let actual_response = convert_to_response ( mmds. clone ( ) , request) ;
711
738
assert_eq ! ( actual_response, expected_response) ;
739
+ assert_eq ! ( prev_rx_invalid_token, METRICS . mmds. rx_invalid_token. count( ) ) ;
712
740
713
741
// Test invalid customer header value is ignored if not PUT request to /latest/api/token.
714
742
#[ rustfmt:: skip]
@@ -801,8 +829,13 @@ mod tests {
801
829
let mut expected_response = Response :: new ( Version :: Http10 , StatusCode :: Unauthorized ) ;
802
830
expected_response. set_content_type ( MediaType :: PlainText ) ;
803
831
expected_response. set_body ( Body :: new ( VmmMmdsError :: InvalidToken . to_string ( ) ) ) ;
832
+ let prev_rx_invalid_token = METRICS . mmds . rx_invalid_token . count ( ) ;
804
833
let actual_response = convert_to_response ( mmds. clone ( ) , request) ;
805
834
assert_eq ! ( actual_response, expected_response) ;
835
+ assert_eq ! (
836
+ prev_rx_invalid_token + 1 ,
837
+ METRICS . mmds. rx_invalid_token. count( )
838
+ ) ;
806
839
807
840
// Wait for the second token to expire.
808
841
std:: thread:: sleep ( Duration :: from_secs ( 1 ) ) ;
0 commit comments