Skip to content

Commit eb1b641

Browse files
committed
fix user agent modification to actually work and add test that actually checks for it
1 parent cdf85a7 commit eb1b641

File tree

7 files changed

+19
-42
lines changed

7 files changed

+19
-42
lines changed

src/aws_encryption_sdk/identifiers.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
from aws_encryption_sdk.exceptions import InvalidAlgorithmError
2323

2424
__version__ = '1.3.3'
25-
USER_AGENT_SUFFIX = 'AwsEncryptionSdkPython-KMSMasterKey/{}'.format(__version__)
25+
USER_AGENT_SUFFIX = 'AwsEncryptionSdkPython/{}'.format(__version__)
2626

2727

2828
class EncryptionSuite(Enum):

src/aws_encryption_sdk/internal/utils/__init__.py

-16
Original file line numberDiff line numberDiff line change
@@ -165,19 +165,3 @@ def source_data_key_length_check(source_data_key, algorithm):
165165
actual=len(source_data_key.data_key),
166166
required=algorithm.kdf_input_len
167167
))
168-
169-
170-
def extend_user_agent_suffix(user_agent, suffix):
171-
"""Adds a suffix to the provided user agent.
172-
173-
:param str user_agent: Existing user agent (None == not yet defined)
174-
:param str suffix: Desired suffix to add to user agent
175-
:returns: User agent with suffix
176-
:rtype: str
177-
"""
178-
if user_agent is None:
179-
user_agent = ''
180-
else:
181-
user_agent += ' '
182-
user_agent += suffix
183-
return user_agent

src/aws_encryption_sdk/key_providers/kms.py

+3-6
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@
1616
import attr
1717
import boto3
1818
import botocore.client
19+
import botocore.config
1920
from botocore.exceptions import ClientError
2021
import botocore.session
2122

2223
from aws_encryption_sdk.exceptions import DecryptKeyError, EncryptKeyError, GenerateKeyError, UnknownRegionError
2324
from aws_encryption_sdk.identifiers import USER_AGENT_SUFFIX
2425
from aws_encryption_sdk.internal.str_ops import to_str
25-
from aws_encryption_sdk.internal.utils import extend_user_agent_suffix
2626
from aws_encryption_sdk.key_providers.base import (
2727
MasterKey, MasterKeyConfig, MasterKeyProvider, MasterKeyProviderConfig
2828
)
@@ -101,6 +101,7 @@ def __init__(self, **kwargs): # pylint: disable=unused-argument
101101

102102
def _process_config(self):
103103
"""Traverses the config and adds master keys and regional clients as needed."""
104+
self._user_agent_adding_config = botocore.config.Config(user_agent_extra=USER_AGENT_SUFFIX)
104105
if self.config.key_ids:
105106
self.add_master_keys_from_list(self.config.key_ids)
106107
if self.config.region_names:
@@ -120,7 +121,7 @@ def add_regional_client(self, region_name):
120121
self._regional_clients[region_name] = boto3.session.Session(
121122
region_name=region_name,
122123
botocore_session=self.config.botocore_session
123-
).client('kms')
124+
).client('kms', config=self._user_agent_adding_config)
124125

125126
def add_regional_clients_from_list(self, region_names):
126127
"""Adds multiple regional clients for the specified regions if they do not already exist.
@@ -200,10 +201,6 @@ class KMSMasterKey(MasterKey):
200201
def __init__(self, **kwargs): # pylint: disable=unused-argument
201202
"""Performs transformations needed for KMS."""
202203
self._key_id = to_str(self.key_id) # KMS client requires str, not bytes
203-
self.config.client.meta.config.user_agent_extra = extend_user_agent_suffix(
204-
user_agent=self.config.client.meta.config.user_agent_extra,
205-
suffix=USER_AGENT_SUFFIX
206-
)
207204

208205
def _generate_data_key(self, algorithm, encryption_context=None):
209206
"""Generates data key and returns plaintext and ciphertext of key.

test/integration/test_i_aws_encrytion_sdk_client.py

+13-2
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,14 @@
1212
# language governing permissions and limitations under the License.
1313
"""Integration test suite for `aws_encryption_sdk`."""
1414
import io
15+
import logging
1516
import unittest
1617

1718
import pytest
1819

1920
import aws_encryption_sdk
20-
from aws_encryption_sdk.identifiers import Algorithm
21-
from .integration_test_utils import setup_kms_master_key_provider
21+
from aws_encryption_sdk.identifiers import Algorithm, USER_AGENT_SUFFIX
22+
from .integration_test_utils import setup_kms_master_key_provider, get_cmk_arn
2223

2324
pytestmark = [pytest.mark.integ]
2425

@@ -40,6 +41,16 @@
4041
}
4142

4243

44+
def test_encrypt_verify_user_agent(caplog):
45+
caplog.set_level(level=logging.DEBUG)
46+
mkp = setup_kms_master_key_provider()
47+
mk = mkp.master_key(get_cmk_arn())
48+
49+
mk.generate_data_key(algorithm=Algorithm.AES_256_GCM_IV12_TAG16_HKDF_SHA384_ECDSA_P384, encryption_context={})
50+
51+
assert USER_AGENT_SUFFIX in caplog.text
52+
53+
4354
class TestKMSThickClientIntegration(unittest.TestCase):
4455

4556
def setUp(self):

test/unit/test_providers_kms_master_key.py

+1-7
Original file line numberDiff line numberDiff line change
@@ -96,16 +96,10 @@ def test_config_grant_tokens(self):
9696
)
9797
assert test.grant_tokens is self.mock_grant_tokens
9898

99-
@patch('aws_encryption_sdk.key_providers.kms.extend_user_agent_suffix')
100-
def test_init(self, patch_extend_user_agent_suffix):
99+
def test_init(self):
101100
self.mock_client.meta.config.user_agent_extra = sentinel.user_agent_extra
102101
test = KMSMasterKey(config=self.mock_kms_mkc_1)
103102
assert test._key_id == VALUES['arn'].decode('utf-8')
104-
patch_extend_user_agent_suffix.assert_called_once_with(
105-
user_agent=sentinel.user_agent_extra,
106-
suffix=USER_AGENT_SUFFIX
107-
)
108-
assert self.mock_client.meta.config.user_agent_extra == patch_extend_user_agent_suffix.return_value
109103

110104
def test_generate_data_key(self):
111105
test = KMSMasterKey(config=self.mock_kms_mkc_3)

test/unit/test_providers_kms_master_key_provider.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ def test_add_regional_client_new(self):
9999
region_name='ex_region_name',
100100
botocore_session=ANY
101101
)
102-
self.mock_boto3_session_instance.client.assert_called_once_with('kms')
102+
self.mock_boto3_session_instance.client.assert_called_once_with('kms', config=test._user_agent_adding_config)
103103
assert test._regional_clients['ex_region_name'] is self.mock_boto3_client_instance
104104

105105
def test_add_regional_client_exists(self):

test/unit/test_utils.py

-9
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,6 @@
2727
pytestmark = [pytest.mark.unit, pytest.mark.local]
2828

2929

30-
@pytest.mark.parametrize('user_agent, suffix, output', (
31-
(None, 'test_suffix', 'test_suffix'),
32-
('test_existing_suffix', 'test_suffix', 'test_existing_suffix test_suffix')
33-
))
34-
def test_extend_user_agent_suffix(user_agent, suffix, output):
35-
test = aws_encryption_sdk.internal.utils.extend_user_agent_suffix(user_agent, suffix)
36-
assert test == output
37-
38-
3930
class TestUtils(unittest.TestCase):
4031

4132
def setUp(self):

0 commit comments

Comments
 (0)