12
12
# language governing permissions and limitations under the License.
13
13
"""Unit test suite from aws_encryption_sdk.key_providers.kms.KMSMasterKeyProvider"""
14
14
import botocore .client
15
+ import botocore .session
15
16
import pytest
16
17
from mock import ANY , MagicMock , call , patch , sentinel
17
18
22
23
pytestmark = [pytest .mark .unit , pytest .mark .local ]
23
24
24
25
26
+ @pytest .fixture (autouse = True , params = [True , False ], ids = ["default region" , "no default region" ])
27
+ def patch_default_region (request , monkeypatch ):
28
+ """Run all tests in this module both with a default region set and no default region set.
29
+
30
+ This ensures that we do not regress on default region handling.
31
+ https://github.com/aws/aws-encryption-sdk-python/issues/31
32
+ """
33
+ if request .param :
34
+ monkeypatch .setenv ("AWS_DEFAULT_REGION" , "us-west-2" )
35
+ else :
36
+ monkeypatch .delenv ("AWS_DEFAULT_REGION" , raising = False )
37
+
38
+
25
39
def test_init_with_regionless_key_ids_and_region_names ():
26
40
key_ids = ("alias/key_1" ,)
27
41
region_names = ("test-region-1" ,)
@@ -32,6 +46,7 @@ def test_init_with_regionless_key_ids_and_region_names():
32
46
class TestKMSMasterKeyProvider (object ):
33
47
@pytest .fixture (autouse = True )
34
48
def apply_fixtures (self ):
49
+ self .botocore_no_region_session = botocore .session .Session (session_vars = {"region" : (None , None , None , None )})
35
50
self .mock_botocore_session_patcher = patch ("aws_encryption_sdk.key_providers.kms.botocore.session.Session" )
36
51
self .mock_botocore_session = self .mock_botocore_session_patcher .start ()
37
52
self .mock_boto3_session_patcher = patch ("aws_encryption_sdk.key_providers.kms.boto3.session.Session" )
@@ -69,19 +84,19 @@ def test_init_with_region_names(self, mock_add_clients):
69
84
70
85
@patch ("aws_encryption_sdk.key_providers.kms.KMSMasterKeyProvider.add_regional_client" )
71
86
def test_init_with_default_region_found (self , mock_add_regional_client ):
72
- test = KMSMasterKeyProvider ()
87
+ test = KMSMasterKeyProvider (botocore_session = self . botocore_no_region_session )
73
88
assert test .default_region is None
74
89
with patch .object (
75
90
test .config .botocore_session , "get_config_variable" , return_value = sentinel .default_region
76
91
) as mock_get_config :
77
92
test ._process_config ()
78
93
mock_get_config .assert_called_once_with ("region" )
79
94
assert test .default_region is sentinel .default_region
80
- mock_add_regional_client .assert_called_once_with (sentinel .default_region )
95
+ mock_add_regional_client .assert_called_with (sentinel .default_region )
81
96
82
97
@patch ("aws_encryption_sdk.key_providers.kms.KMSMasterKeyProvider.add_regional_client" )
83
98
def test_init_with_default_region_not_found (self , mock_add_regional_client ):
84
- test = KMSMasterKeyProvider ()
99
+ test = KMSMasterKeyProvider (botocore_session = self . botocore_no_region_session )
85
100
assert test .default_region is None
86
101
with patch .object (test .config .botocore_session , "get_config_variable" , return_value = None ) as mock_get_config :
87
102
test ._process_config ()
@@ -93,12 +108,12 @@ def test_add_regional_client_new(self):
93
108
test = KMSMasterKeyProvider ()
94
109
test ._regional_clients = {}
95
110
test .add_regional_client ("ex_region_name" )
96
- self .mock_boto3_session .assert_called_once_with (region_name = "ex_region_name" , botocore_session = ANY )
97
- self .mock_boto3_session_instance .client .assert_called_once_with ("kms" , config = test ._user_agent_adding_config )
111
+ self .mock_boto3_session .assert_called_with (region_name = "ex_region_name" , botocore_session = ANY )
112
+ self .mock_boto3_session_instance .client .assert_called_with ("kms" , config = test ._user_agent_adding_config )
98
113
assert test ._regional_clients ["ex_region_name" ] is self .mock_boto3_client_instance
99
114
100
115
def test_add_regional_client_exists (self ):
101
- test = KMSMasterKeyProvider ()
116
+ test = KMSMasterKeyProvider (botocore_session = self . botocore_no_region_session )
102
117
test ._regional_clients ["ex_region_name" ] = sentinel .existing_client
103
118
test .add_regional_client ("ex_region_name" )
104
119
assert not self .mock_boto3_session .called
@@ -114,7 +129,7 @@ def test_client_valid_region_name(self, mock_add_client):
114
129
test = KMSMasterKeyProvider ()
115
130
test ._regional_clients ["us-east-1" ] = self .mock_boto3_client_instance
116
131
client = test ._client ("arn:aws:kms:us-east-1:222222222222:key/aaaaaaaa-1111-2222-3333-bbbbbbbbbbbb" )
117
- mock_add_client .assert_called_once_with ("us-east-1" )
132
+ mock_add_client .assert_called_with ("us-east-1" )
118
133
assert client is self .mock_boto3_client_instance
119
134
120
135
@patch ("aws_encryption_sdk.key_providers.kms.KMSMasterKeyProvider.add_regional_client" )
@@ -124,10 +139,10 @@ def test_client_no_region_name_with_default(self, mock_add_client):
124
139
test ._regional_clients [sentinel .default_region ] = sentinel .default_client
125
140
client = test ._client ("" )
126
141
assert client is sentinel .default_client
127
- mock_add_client .assert_called_once_with (sentinel .default_region )
142
+ mock_add_client .assert_called_with (sentinel .default_region )
128
143
129
144
def test_client_no_region_name_without_default (self ):
130
- test = KMSMasterKeyProvider ()
145
+ test = KMSMasterKeyProvider (botocore_session = self . botocore_no_region_session )
131
146
with pytest .raises (UnknownRegionError ) as excinfo :
132
147
test ._client ("" )
133
148
excinfo .match ("No default region found and no region determinable from key id: *" )
0 commit comments