@@ -59,9 +59,8 @@ def patch_aws_encryption_sdk(mocker):
5959
6060
6161@pytest .fixture
62- def patch_iter_entry_points (mocker ):
63- mocker .patch .object (master_key_parsing .pkg_resources , "iter_entry_points" )
64- yield master_key_parsing .pkg_resources .iter_entry_points
62+ def patch_distributions (mocker ):
63+ yield mocker .patch .object (master_key_parsing , "distributions" )
6564
6665
6766@pytest .fixture
@@ -84,8 +83,10 @@ def entry_points_cleaner():
8483
8584
8685# "name" is a special, non-overridable attribute on mock objects
87- FakeEntryPoint = namedtuple ("FakeEntryPoint" , ["name" , "module_name" , "attrs" , "extras" , "dist" ])
88- FakeEntryPoint .__new__ .__defaults__ = ("MODULE" , "ATTRS" , "EXTRAS" , MagicMock (project_name = "PROJECT" ))
86+ FakeEntryPoint = namedtuple ("FakeEntryPoint" , ["name" , "value" , "group" , "extras" ])
87+ FakeEntryPoint .__new__ .__defaults__ = ("MODULE:ATTR" , "GROUP" , "EXTRAS" )
88+
89+ FakeDistribution = namedtuple ("FakeDistribution" , ["metadata" , "entry_points" ])
8990
9091
9192def test_entry_points (monkeypatch ):
@@ -99,8 +100,15 @@ def test_entry_points_aws_kms():
99100 assert master_key_parsing ._entry_points ()["aws-kms" ]["aws-encryption-sdk-cli" ].load () is aws_kms_master_key_provider
100101
101102
102- def test_entry_points_invalid_substring (logger_stream , patch_iter_entry_points ):
103- patch_iter_entry_points .return_value = [FakeEntryPoint ("BAD::NAME" )]
103+ def test_entry_points_invalid_substring (logger_stream , patch_distributions ):
104+ bad_ep = FakeEntryPoint (
105+ name = "BAD::NAME" ,
106+ value = "module:attr" ,
107+ group = master_key_parsing .MASTER_KEY_PROVIDERS_ENTRY_POINT ,
108+ )
109+ fake_dist = FakeDistribution (metadata = {"Name" : "fake-dist" }, entry_points = [bad_ep ])
110+ patch_distributions .return_value = [fake_dist ]
111+
104112 master_key_parsing ._discover_entry_points ()
105113
106114 key = 'Invalid substring "::" in discovered entry point "BAD::NAME". It will not be usable.'
@@ -109,11 +117,28 @@ def test_entry_points_invalid_substring(logger_stream, patch_iter_entry_points):
109117 assert "BAD::NAME" not in master_key_parsing ._ENTRY_POINTS
110118
111119
112- def test_entry_points_multiple_per_name (entry_points_cleaner , patch_iter_entry_points ):
113- entry_point_a = FakeEntryPoint (name = "aws-kms" , dist = MagicMock (project_name = "aws-encryption-sdk-cli" ))
114- entry_point_b = FakeEntryPoint (name = "aws-kms" , dist = MagicMock (project_name = "some-other-thing" ))
115- entry_point_c = FakeEntryPoint (name = "zzz" , dist = MagicMock (project_name = "yet-another-thing" ))
116- patch_iter_entry_points .return_value = [entry_point_a , entry_point_b , entry_point_c ]
120+ def test_entry_points_multiple_per_name (entry_points_cleaner , patch_distributions ):
121+ entry_point_a = FakeEntryPoint (
122+ name = "aws-kms" ,
123+ value = "module_a:attr" ,
124+ group = master_key_parsing .MASTER_KEY_PROVIDERS_ENTRY_POINT ,
125+ )
126+ entry_point_b = FakeEntryPoint (
127+ name = "aws-kms" ,
128+ value = "module_b:attr" ,
129+ group = master_key_parsing .MASTER_KEY_PROVIDERS_ENTRY_POINT ,
130+ )
131+ entry_point_c = FakeEntryPoint (
132+ name = "zzz" ,
133+ value = "module_c:attr" ,
134+ group = master_key_parsing .MASTER_KEY_PROVIDERS_ENTRY_POINT ,
135+ )
136+
137+ dist_a = FakeDistribution (metadata = {"Name" : "aws-encryption-sdk-cli" }, entry_points = [entry_point_a ])
138+ dist_b = FakeDistribution (metadata = {"Name" : "some-other-thing" }, entry_points = [entry_point_b ])
139+ dist_c = FakeDistribution (metadata = {"Name" : "yet-another-thing" }, entry_points = [entry_point_c ])
140+
141+ patch_distributions .return_value = [dist_a , dist_b , dist_c ]
117142
118143 test = master_key_parsing ._entry_points ()
119144
@@ -142,9 +167,15 @@ def test_load_master_key_provider_known_name_only_multiple_entry_points(monkeypa
142167 "aws-kms" ,
143168 {
144169 "aws-encryption-sdk-cli" : FakeEntryPoint (
145- name = "aws-kms" , dist = MagicMock (project_name = "aws-encryption-sdk-cli" )
170+ name = "aws-kms" ,
171+ value = "module_a:attr" ,
172+ group = master_key_parsing .MASTER_KEY_PROVIDERS_ENTRY_POINT ,
173+ ),
174+ "my-fake-package" : FakeEntryPoint (
175+ name = "aws-kms" ,
176+ value = "module_b:attr" ,
177+ group = master_key_parsing .MASTER_KEY_PROVIDERS_ENTRY_POINT ,
146178 ),
147- "my-fake-package" : FakeEntryPoint (name = "aws-kms" , module_name = "my-fake-package" ),
148179 },
149180 )
150181
@@ -164,14 +195,21 @@ def test_load_master_key_provider_known_name_unknown_name(monkeypatch):
164195 monkeypatch .setitem (
165196 master_key_parsing ._ENTRY_POINTS ,
166197 "aws-kms" ,
167- {"my-fake-package" : FakeEntryPoint (name = "aws-kms" , module_name = "my-fake-package" )},
198+ {
199+ "my-fake-package" : FakeEntryPoint (
200+ name = "aws-kms" ,
201+ value = "module_b:attr" ,
202+ group = master_key_parsing .MASTER_KEY_PROVIDERS_ENTRY_POINT ,
203+ )
204+ },
168205 )
169206
170207 with pytest .raises (BadUserArgumentError ) as excinfo :
171208 master_key_parsing ._load_master_key_provider ("aws-encryption-sdk-cli::aws-kms" )
172209
173210 excinfo .match (
174- r'Requested master key provider not found: "aws-encryption-sdk-cli::aws-kms". Packages discovered for *'
211+ r'Requested master key provider not found: "aws-encryption-sdk-cli::aws-kms". '
212+ r'Packages discovered for "aws-kms" registered by: .*'
175213 )
176214
177215
0 commit comments