1 1 | /*
|
2 2 | * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
3 3 | * SPDX-License-Identifier: Apache-2.0
|
4 4 | */
|
5 5 |
|
6 6 | use aws_sdk_s3::operation::get_object::GetObjectError;
|
7 7 | use aws_sdk_s3::operation::{RequestId, RequestIdExt};
|
8 - | use aws_sdk_s3::{config::Credentials, config::Region, Client, Config};
|
8 + | use aws_sdk_s3::{config::{retry::RetryConfig, Credentials, Region}, Client, Config};
|
9 9 | use aws_smithy_http_client::test_util::capture_request;
|
10 10 | use aws_smithy_types::body::SdkBody;
|
11 11 |
|
12 12 | #[tokio::test]
|
13 13 | async fn get_request_id_from_modeled_error() {
|
14 14 | let (http_client, request) = capture_request(Some(
|
15 15 | http_1x::Response::builder()
|
16 16 | .header("x-amz-request-id", "correct-request-id")
|
17 17 | .header("x-amz-id-2", "correct-extended-request-id")
|
18 18 | .status(404)
|
19 19 | .body(SdkBody::from(
|
20 20 | r#"<?xml version="1.0" encoding="UTF-8"?>
|
21 21 | <Error>
|
22 22 | <Code>NoSuchKey</Code>
|
23 23 | <Message>The resource you requested does not exist</Message>
|
24 24 | <Resource>/mybucket/myfoto.jpg</Resource>
|
25 25 | <RequestId>incorrect-request-id</RequestId>
|
26 26 | </Error>"#,
|
27 27 | ))
|
28 28 | .unwrap(),
|
29 29 | ));
|
30 30 | let config = Config::builder()
|
31 31 | .http_client(http_client)
|
32 32 | .credentials_provider(Credentials::for_tests())
|
33 33 | .region(Region::new("us-east-1"))
|
34 34 | .build();
|
35 35 | let client = Client::from_conf(config);
|
36 36 | let err = client
|
37 37 | .get_object()
|
38 38 | .key("dontcare")
|
54 54 | );
|
55 55 | assert_eq!(
|
56 56 | Some("correct-extended-request-id"),
|
57 57 | err.meta().extended_request_id()
|
58 58 | );
|
59 59 | }
|
60 60 |
|
61 61 | #[tokio::test]
|
62 62 | #[allow(deprecated)]
|
63 63 | async fn get_request_id_from_unmodeled_error() {
|
64 64 | let (http_client, request) = capture_request(Some(
|
65 65 | http_1x::Response::builder()
|
66 66 | .header("x-amz-request-id", "correct-request-id")
|
67 67 | .header("x-amz-id-2", "correct-extended-request-id")
|
68 68 | .status(500)
|
69 69 | .body(SdkBody::from(
|
70 70 | r#"<?xml version="1.0" encoding="UTF-8"?>
|
71 71 | <Error>
|
72 72 | <Code>SomeUnmodeledError</Code>
|
73 73 | <Message>Something bad happened</Message>
|
74 74 | <Resource>/mybucket/myfoto.jpg</Resource>
|
75 75 | <RequestId>incorrect-request-id</RequestId>
|
76 76 | </Error>"#,
|
77 77 | ))
|
78 78 | .unwrap(),
|
79 79 | ));
|
80 80 | let config = Config::builder()
|
81 81 | .http_client(http_client)
|
82 82 | .credentials_provider(Credentials::for_tests())
|
83 83 | .region(Region::new("us-east-1"))
|
84 + | .retry_config(RetryConfig::disabled())
|
84 85 | .build();
|
85 86 | let client = Client::from_conf(config);
|
86 87 | let err = client
|
87 88 | .get_object()
|
88 89 | .bucket("dontcare")
|
89 90 | .key("dontcare")
|
90 91 | .send()
|
91 92 | .await
|
92 93 | .expect_err("status 500")
|
93 94 | .into_service_error();
|
94 95 | request.expect_request();
|
95 96 | assert!(matches!(err, GetObjectError::Unhandled(_)));
|
96 97 | assert_eq!(Some("correct-request-id"), err.request_id());
|
97 98 | assert_eq!(Some("correct-request-id"), err.meta().request_id());
|
98 99 | assert_eq!(
|
99 100 | Some("correct-extended-request-id"),
|
100 101 | err.extended_request_id()
|
101 102 | );
|
102 103 | assert_eq!(
|
103 104 | Some("correct-extended-request-id"),
|
104 105 | err.meta().extended_request_id()
|
105 106 | );
|
106 107 | }
|
107 108 |
|
108 109 | #[tokio::test]
|
109 110 | async fn get_request_id_from_successful_nonstreaming_response() {
|
110 111 | let (http_client, request) = capture_request(Some(
|
111 112 | http_1x::Response::builder()
|
112 113 | .header("x-amz-request-id", "correct-request-id")
|
113 114 | .header("x-amz-id-2", "correct-extended-request-id")
|