Skip to content

Commit 4531831

Browse files
committed
Test fields aren't mutated on original request
1 parent 286133e commit 4531831

File tree

2 files changed

+36
-1
lines changed

2 files changed

+36
-1
lines changed

packages/aws-sdk-signers/src/aws_sdk_signers/signers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -453,7 +453,7 @@ async def sign(
453453
signing_properties=new_signing_properties,
454454
)
455455

456-
signing_fields = await self._normalize_signing_fields(request=request)
456+
signing_fields = await self._normalize_signing_fields(request=new_request)
457457
credential_scope = await self._scope(signing_properties=new_signing_properties)
458458
credential = f"{identity.access_key_id}/{credential_scope}"
459459
authorization = await self.generate_authorization_field(

packages/aws-sdk-signers/tests/unit/test_signers.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
# SPDX-License-Identifier: Apache-2.0
33

4+
import copy
45
import re
56
import typing
67
from datetime import UTC, datetime
@@ -76,6 +77,23 @@ def test_sign(
7677
authorization_field = signed_request.fields["authorization"]
7778
assert SIGV4_RE.match(authorization_field.as_string())
7879

80+
def test_sign_doesnt_modify_original_request(
81+
self,
82+
aws_identity: AWSCredentialIdentity,
83+
aws_request: AWSRequest,
84+
signing_properties: SigV4SigningProperties,
85+
) -> None:
86+
original_request = copy.deepcopy(aws_request)
87+
signed_request = self.SIGV4_SYNC_SIGNER.sign(
88+
signing_properties=signing_properties,
89+
request=aws_request,
90+
identity=aws_identity,
91+
)
92+
assert isinstance(signed_request, AWSRequest)
93+
assert signed_request is not aws_request
94+
assert aws_request.fields == original_request.fields
95+
assert signed_request.fields != aws_request.fields
96+
7997
@typing.no_type_check
8098
def test_sign_with_invalid_identity(
8199
self, aws_request: AWSRequest, signing_properties: SigV4SigningProperties
@@ -127,6 +145,23 @@ async def test_sign(
127145
authorization_field = signed_request.fields["authorization"]
128146
assert SIGV4_RE.match(authorization_field.as_string())
129147

148+
async def test_sign_doesnt_modify_original_request(
149+
self,
150+
aws_identity: AWSCredentialIdentity,
151+
aws_request: AWSRequest,
152+
signing_properties: SigV4SigningProperties,
153+
) -> None:
154+
original_request = copy.deepcopy(aws_request)
155+
signed_request = await self.SIGV4_ASYNC_SIGNER.sign(
156+
signing_properties=signing_properties,
157+
request=aws_request,
158+
identity=aws_identity,
159+
)
160+
assert isinstance(signed_request, AWSRequest)
161+
assert signed_request is not aws_request
162+
assert aws_request.fields == original_request.fields
163+
assert signed_request.fields != aws_request.fields
164+
130165
@typing.no_type_check
131166
async def test_sign_with_invalid_identity(
132167
self, aws_request: AWSRequest, signing_properties: SigV4SigningProperties

0 commit comments

Comments
 (0)