Skip to content

Commit 6d08188

Browse files
committed
move interceptor validation after error parsing
1 parent 1ee315f commit 6d08188

2 files changed

Lines changed: 35 additions & 16 deletions

File tree

‎src/aws-cpp-sdk-core/source/client/AWSClient.cpp‎

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -619,16 +619,6 @@ HttpResponseOutcome AWSClient::AttemptOneRequest(const std::shared_ptr<Aws::Http
619619
*m_telemetryProvider->getMeter(this->GetServiceClientName(), {}),
620620
{{TracingUtils::SMITHY_METHOD_DIMENSION, request.GetServiceRequestName()},{TracingUtils::SMITHY_SERVICE_DIMENSION, this->GetServiceClientName()}});
621621

622-
context.SetTransmitResponse(httpResponse);
623-
for (const auto& interceptor : m_interceptors)
624-
{
625-
const auto modifiedRequest = interceptor->ModifyBeforeDeserialization(context);
626-
if (!modifiedRequest.IsSuccess())
627-
{
628-
return modifiedRequest.GetError();
629-
}
630-
}
631-
632622
if (DoesResponseGenerateError(httpResponse) )
633623
{
634624
AWS_LOGSTREAM_DEBUG(AWS_CLIENT_LOG_TAG, "Request returned error. Attempting to generate appropriate error codes from response");
@@ -643,6 +633,14 @@ HttpResponseOutcome AWSClient::AttemptOneRequest(const std::shared_ptr<Aws::Http
643633
return HttpResponseOutcome(std::move(error) );
644634
}
645635

636+
context.SetTransmitResponse(httpResponse);
637+
for (const auto& interceptor : m_interceptors) {
638+
const auto modifiedRequest = interceptor->ModifyBeforeDeserialization(context);
639+
if (!modifiedRequest.IsSuccess()) {
640+
return modifiedRequest.GetError();
641+
}
642+
}
643+
646644
AWS_LOGSTREAM_DEBUG(AWS_CLIENT_LOG_TAG, "Request returned successful response.");
647645

648646
return HttpResponseOutcome(std::move(httpResponse));

‎tests/aws-cpp-sdk-s3-unit-tests/S3UnitTests.cpp‎

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
1-
#include <gtest/gtest.h>
21
#include <aws/core/Aws.h>
32
#include <aws/core/auth/AWSCredentials.h>
43
#include <aws/core/client/RetryStrategy.h>
54
#include <aws/core/utils/HashingUtils.h>
65
#include <aws/core/utils/base64/Base64.h>
76
#include <aws/core/utils/crypto/CRC64.h>
87
#include <aws/s3/S3Client.h>
8+
#include <aws/s3/S3ErrorMarshaller.h>
9+
#include <aws/s3/model/CopyObjectRequest.h>
910
#include <aws/s3/model/DeleteObjectsRequest.h>
11+
#include <aws/s3/model/GetObjectRequest.h>
12+
#include <aws/s3/model/HeadBucketRequest.h>
13+
#include <aws/s3/model/ListObjectsV2Request.h>
1014
#include <aws/s3/model/PutObjectRequest.h>
11-
#include <aws/s3/model/CopyObjectRequest.h>
12-
#include <aws/testing/mocks/http/MockHttpClient.h>
1315
#include <aws/testing/AwsTestHelpers.h>
1416
#include <aws/testing/MemoryTesting.h>
17+
#include <aws/testing/mocks/http/MockHttpClient.h>
18+
#include <gtest/gtest.h>
19+
1520
#include <memory>
16-
#include <aws/s3/S3ErrorMarshaller.h>
17-
#include <aws/s3/model/HeadBucketRequest.h>
18-
#include <aws/s3/model/ListObjectsV2Request.h>
1921

2022
using namespace Aws;
2123
using namespace Aws::Client;
@@ -705,3 +707,22 @@ TEST_F(S3UnitTest, ListObjectsV2PaginatorShouldHaveCMetric) {
705707
[](const Aws::String& value) { return value.find("m/") != Aws::String::npos && value.find("C") != Aws::String::npos; });
706708
EXPECT_TRUE(businessMetrics != userAgentParsed.end());
707709
}
710+
711+
TEST_F(S3UnitTest, TestGetObjectTimeoutShouldReturnTimeoutError) {
712+
auto request = GetObjectRequest().WithBucket("test-bucket").WithKey("test-key");
713+
714+
auto mockRequest = Aws::MakeShared<Standard::StandardHttpRequest>(ALLOCATION_TAG, "test-bucket.s3.amazonaws.com/", HttpMethod::HTTP_GET);
715+
mockRequest->SetResponseStreamFactory(
716+
[]() -> IOStream* { return Aws::New<StringStream>(ALLOCATION_TAG, "", std::ios_base::in | std::ios_base::binary); });
717+
auto mockResponse = Aws::MakeShared<Standard::StandardHttpResponse>(ALLOCATION_TAG, mockRequest);
718+
mockResponse->SetResponseCode(HttpResponseCode::NETWORK_CONNECT_TIMEOUT);
719+
mockResponse->AddHeader("x-amz-checksum-crc32", "1f2e4daa");
720+
_mockHttpClient->AddResponseToReturn(mockResponse,
721+
[](Aws::IOStream& response) -> void { response << "The distance between what is said"; });
722+
723+
const auto response = _s3Client->GetObject(request);
724+
EXPECT_FALSE(response.IsSuccess());
725+
const auto& error = response.GetError();
726+
EXPECT_EQ(error.GetResponseCode(), HttpResponseCode::NETWORK_CONNECT_TIMEOUT);
727+
EXPECT_TRUE(error.ShouldRetry());
728+
}

0 commit comments

Comments
 (0)