Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(330)

Side by Side Diff: third_party/boto/tests/unit/provider/test_provider.py

Issue 698893003: Update checked in version of gsutil to version 4.6 (Closed) Base URL: http://dart.googlecode.com/svn/third_party/gsutil/
Patch Set: Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 from datetime import datetime, timedelta 2 from datetime import datetime, timedelta
3 3
4 from tests.unit import unittest 4 from tests.unit import unittest
5 import mock 5 import mock
6 import os
6 7
7 from boto import provider 8 from boto import provider
9 from boto.compat import expanduser
8 10
9 11
10 INSTANCE_CONFIG = { 12 INSTANCE_CONFIG = {
11 'allowall': { 13 'allowall': {
12 u'AccessKeyId': u'iam_access_key', 14 u'AccessKeyId': u'iam_access_key',
13 u'Code': u'Success', 15 u'Code': u'Success',
14 u'Expiration': u'2012-09-01T03:57:34Z', 16 u'Expiration': u'2012-09-01T03:57:34Z',
15 u'LastUpdated': u'2012-08-31T21:43:40Z', 17 u'LastUpdated': u'2012-08-31T21:43:40Z',
16 u'SecretAccessKey': u'iam_secret_key', 18 u'SecretAccessKey': u'iam_secret_key',
17 u'Token': u'iam_token', 19 u'Token': u'iam_token',
18 u'Type': u'AWS-HMAC' 20 u'Type': u'AWS-HMAC'
19 } 21 }
20 } 22 }
21 23
22 24
23 class TestProvider(unittest.TestCase): 25 class TestProvider(unittest.TestCase):
24 def setUp(self): 26 def setUp(self):
25 self.environ = {} 27 self.environ = {}
26 self.config = {} 28 self.config = {}
29 self.shared_config = {}
27 30
28 self.metadata_patch = mock.patch('boto.utils.get_instance_metadata') 31 self.metadata_patch = mock.patch('boto.utils.get_instance_metadata')
29 self.config_patch = mock.patch('boto.provider.config.get', 32 self.config_patch = mock.patch('boto.provider.config.get',
30 self.get_config) 33 self.get_config)
31 self.has_config_patch = mock.patch('boto.provider.config.has_option', 34 self.has_config_patch = mock.patch('boto.provider.config.has_option',
32 self.has_config) 35 self.has_config)
36 self.config_object_patch = mock.patch.object(
37 provider.Config, 'get', self.get_shared_config)
38 self.has_config_object_patch = mock.patch.object(
39 provider.Config, 'has_option', self.has_shared_config)
33 self.environ_patch = mock.patch('os.environ', self.environ) 40 self.environ_patch = mock.patch('os.environ', self.environ)
34 41
35 self.get_instance_metadata = self.metadata_patch.start() 42 self.get_instance_metadata = self.metadata_patch.start()
43 self.get_instance_metadata.return_value = None
36 self.config_patch.start() 44 self.config_patch.start()
37 self.has_config_patch.start() 45 self.has_config_patch.start()
46 self.config_object_patch.start()
47 self.has_config_object_patch.start()
38 self.environ_patch.start() 48 self.environ_patch.start()
39 49
40 50
41 def tearDown(self): 51 def tearDown(self):
42 self.metadata_patch.stop() 52 self.metadata_patch.stop()
43 self.config_patch.stop() 53 self.config_patch.stop()
44 self.has_config_patch.stop() 54 self.has_config_patch.stop()
55 self.config_object_patch.stop()
56 self.has_config_object_patch.stop()
45 self.environ_patch.stop() 57 self.environ_patch.stop()
46 58
47 def has_config(self, section_name, key): 59 def has_config(self, section_name, key):
48 try: 60 try:
49 self.config[section_name][key] 61 self.config[section_name][key]
50 return True 62 return True
51 except KeyError: 63 except KeyError:
52 return False 64 return False
53 65
54 def get_config(self, section_name, key): 66 def get_config(self, section_name, key):
55 try: 67 try:
56 return self.config[section_name][key] 68 return self.config[section_name][key]
57 except KeyError: 69 except KeyError:
58 return None 70 return None
59 71
72 def has_shared_config(self, section_name, key):
73 try:
74 self.shared_config[section_name][key]
75 return True
76 except KeyError:
77 return False
78
79 def get_shared_config(self, section_name, key):
80 try:
81 return self.shared_config[section_name][key]
82 except KeyError:
83 return None
84
60 def test_passed_in_values_are_used(self): 85 def test_passed_in_values_are_used(self):
61 p = provider.Provider('aws', 'access_key', 'secret_key', 'security_token ') 86 p = provider.Provider('aws', 'access_key', 'secret_key', 'security_token ')
62 self.assertEqual(p.access_key, 'access_key') 87 self.assertEqual(p.access_key, 'access_key')
63 self.assertEqual(p.secret_key, 'secret_key') 88 self.assertEqual(p.secret_key, 'secret_key')
64 self.assertEqual(p.security_token, 'security_token') 89 self.assertEqual(p.security_token, 'security_token')
65 90
66 def test_environment_variables_are_used(self): 91 def test_environment_variables_are_used(self):
67 self.environ['AWS_ACCESS_KEY_ID'] = 'env_access_key' 92 self.environ['AWS_ACCESS_KEY_ID'] = 'env_access_key'
68 self.environ['AWS_SECRET_ACCESS_KEY'] = 'env_secret_key' 93 self.environ['AWS_SECRET_ACCESS_KEY'] = 'env_secret_key'
69 p = provider.Provider('aws') 94 p = provider.Provider('aws')
70 self.assertEqual(p.access_key, 'env_access_key') 95 self.assertEqual(p.access_key, 'env_access_key')
71 self.assertEqual(p.secret_key, 'env_secret_key') 96 self.assertEqual(p.secret_key, 'env_secret_key')
72 self.assertIsNone(p.security_token) 97 self.assertIsNone(p.security_token)
73 98
74 def test_environment_variable_aws_security_token(self): 99 def test_environment_variable_aws_security_token(self):
75 self.environ['AWS_ACCESS_KEY_ID'] = 'env_access_key' 100 self.environ['AWS_ACCESS_KEY_ID'] = 'env_access_key'
76 self.environ['AWS_SECRET_ACCESS_KEY'] = 'env_secret_key' 101 self.environ['AWS_SECRET_ACCESS_KEY'] = 'env_secret_key'
77 self.environ['AWS_SECURITY_TOKEN'] = 'env_security_token' 102 self.environ['AWS_SECURITY_TOKEN'] = 'env_security_token'
78 p = provider.Provider('aws') 103 p = provider.Provider('aws')
79 self.assertEqual(p.access_key, 'env_access_key') 104 self.assertEqual(p.access_key, 'env_access_key')
80 self.assertEqual(p.secret_key, 'env_secret_key') 105 self.assertEqual(p.secret_key, 'env_secret_key')
81 self.assertEqual(p.security_token, 'env_security_token') 106 self.assertEqual(p.security_token, 'env_security_token')
82 107
108 def test_config_profile_values_are_used(self):
109 self.config = {
110 'profile dev': {
111 'aws_access_key_id': 'dev_access_key',
112 'aws_secret_access_key': 'dev_secret_key',
113 }, 'profile prod': {
114 'aws_access_key_id': 'prod_access_key',
115 'aws_secret_access_key': 'prod_secret_key',
116 }, 'Credentials': {
117 'aws_access_key_id': 'default_access_key',
118 'aws_secret_access_key': 'default_secret_key'
119 }
120 }
121 p = provider.Provider('aws', profile_name='prod')
122 self.assertEqual(p.access_key, 'prod_access_key')
123 self.assertEqual(p.secret_key, 'prod_secret_key')
124 q = provider.Provider('aws', profile_name='dev')
125 self.assertEqual(q.access_key, 'dev_access_key')
126 self.assertEqual(q.secret_key, 'dev_secret_key')
127
128 def test_config_missing_profile(self):
129 # None of these default profiles should be loaded!
130 self.shared_config = {
131 'default': {
132 'aws_access_key_id': 'shared_access_key',
133 'aws_secret_access_key': 'shared_secret_key',
134 }
135 }
136 self.config = {
137 'Credentials': {
138 'aws_access_key_id': 'default_access_key',
139 'aws_secret_access_key': 'default_secret_key'
140 }
141 }
142 with self.assertRaises(provider.ProfileNotFoundError):
143 provider.Provider('aws', profile_name='doesntexist')
144
83 def test_config_values_are_used(self): 145 def test_config_values_are_used(self):
84 self.config = { 146 self.config = {
85 'Credentials': { 147 'Credentials': {
86 'aws_access_key_id': 'cfg_access_key', 148 'aws_access_key_id': 'cfg_access_key',
87 'aws_secret_access_key': 'cfg_secret_key', 149 'aws_secret_access_key': 'cfg_secret_key',
88 } 150 }
89 } 151 }
90 p = provider.Provider('aws') 152 p = provider.Provider('aws')
91 self.assertEqual(p.access_key, 'cfg_access_key') 153 self.assertEqual(p.access_key, 'cfg_access_key')
92 self.assertEqual(p.secret_key, 'cfg_secret_key') 154 self.assertEqual(p.secret_key, 'cfg_secret_key')
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 keyring.get_password.side_effect = ( 187 keyring.get_password.side_effect = (
126 lambda kr, login: kr+login+'pw') 188 lambda kr, login: kr+login+'pw')
127 p = provider.Provider('aws') 189 p = provider.Provider('aws')
128 self.assertEqual(p.access_key, 'cfg_access_key') 190 self.assertEqual(p.access_key, 'cfg_access_key')
129 self.assertEqual(p.secret_key, 'testcfg_access_keypw') 191 self.assertEqual(p.secret_key, 'testcfg_access_keypw')
130 self.assertIsNone(p.security_token) 192 self.assertIsNone(p.security_token)
131 finally: 193 finally:
132 if not imported: 194 if not imported:
133 del sys.modules['keyring'] 195 del sys.modules['keyring']
134 196
135 def test_env_vars_beat_config_values(self): 197 def test_passed_in_values_beat_env_vars(self):
136 self.environ['AWS_ACCESS_KEY_ID'] = 'env_access_key' 198 self.environ['AWS_ACCESS_KEY_ID'] = 'env_access_key'
137 self.environ['AWS_SECRET_ACCESS_KEY'] = 'env_secret_key' 199 self.environ['AWS_SECRET_ACCESS_KEY'] = 'env_secret_key'
200 self.environ['AWS_SECURITY_TOKEN'] = 'env_security_token'
201 p = provider.Provider('aws', 'access_key', 'secret_key')
202 self.assertEqual(p.access_key, 'access_key')
203 self.assertEqual(p.secret_key, 'secret_key')
204 self.assertEqual(p.security_token, None)
205
206 def test_env_vars_beat_shared_creds_values(self):
207 self.environ['AWS_ACCESS_KEY_ID'] = 'env_access_key'
208 self.environ['AWS_SECRET_ACCESS_KEY'] = 'env_secret_key'
209 self.shared_config = {
210 'default': {
211 'aws_access_key_id': 'shared_access_key',
212 'aws_secret_access_key': 'shared_secret_key',
213 }
214 }
215 p = provider.Provider('aws')
216 self.assertEqual(p.access_key, 'env_access_key')
217 self.assertEqual(p.secret_key, 'env_secret_key')
218 self.assertIsNone(p.security_token)
219
220 def test_shared_creds_beat_config_values(self):
221 self.shared_config = {
222 'default': {
223 'aws_access_key_id': 'shared_access_key',
224 'aws_secret_access_key': 'shared_secret_key',
225 }
226 }
138 self.config = { 227 self.config = {
139 'Credentials': { 228 'Credentials': {
140 'aws_access_key_id': 'cfg_access_key', 229 'aws_access_key_id': 'cfg_access_key',
141 'aws_secret_access_key': 'cfg_secret_key', 230 'aws_secret_access_key': 'cfg_secret_key',
142 } 231 }
143 } 232 }
144 p = provider.Provider('aws') 233 p = provider.Provider('aws')
145 self.assertEqual(p.access_key, 'env_access_key') 234 self.assertEqual(p.access_key, 'shared_access_key')
146 self.assertEqual(p.secret_key, 'env_secret_key') 235 self.assertEqual(p.secret_key, 'shared_secret_key')
236 self.assertIsNone(p.security_token)
237
238 def test_shared_creds_profile_beats_defaults(self):
239 self.shared_config = {
240 'default': {
241 'aws_access_key_id': 'shared_access_key',
242 'aws_secret_access_key': 'shared_secret_key',
243 },
244 'foo': {
245 'aws_access_key_id': 'foo_access_key',
246 'aws_secret_access_key': 'foo_secret_key',
247 }
248 }
249 p = provider.Provider('aws', profile_name='foo')
250 self.assertEqual(p.access_key, 'foo_access_key')
251 self.assertEqual(p.secret_key, 'foo_secret_key')
252 self.assertIsNone(p.security_token)
253
254 def test_env_profile_loads_profile(self):
255 self.environ['AWS_PROFILE'] = 'foo'
256 self.shared_config = {
257 'default': {
258 'aws_access_key_id': 'shared_access_key',
259 'aws_secret_access_key': 'shared_secret_key',
260 },
261 'foo': {
262 'aws_access_key_id': 'shared_access_key_foo',
263 'aws_secret_access_key': 'shared_secret_key_foo',
264 }
265 }
266 self.config = {
267 'profile foo': {
268 'aws_access_key_id': 'cfg_access_key_foo',
269 'aws_secret_access_key': 'cfg_secret_key_foo',
270 },
271 'Credentials': {
272 'aws_access_key_id': 'cfg_access_key',
273 'aws_secret_access_key': 'cfg_secret_key',
274 }
275 }
276 p = provider.Provider('aws')
277 self.assertEqual(p.access_key, 'shared_access_key_foo')
278 self.assertEqual(p.secret_key, 'shared_secret_key_foo')
279 self.assertIsNone(p.security_token)
280
281 self.shared_config = {}
282 p = provider.Provider('aws')
283 self.assertEqual(p.access_key, 'cfg_access_key_foo')
284 self.assertEqual(p.secret_key, 'cfg_secret_key_foo')
147 self.assertIsNone(p.security_token) 285 self.assertIsNone(p.security_token)
148 286
149 def test_env_vars_security_token_beats_config_values(self): 287 def test_env_vars_security_token_beats_config_values(self):
150 self.environ['AWS_ACCESS_KEY_ID'] = 'env_access_key' 288 self.environ['AWS_ACCESS_KEY_ID'] = 'env_access_key'
151 self.environ['AWS_SECRET_ACCESS_KEY'] = 'env_secret_key' 289 self.environ['AWS_SECRET_ACCESS_KEY'] = 'env_secret_key'
152 self.environ['AWS_SECURITY_TOKEN'] = 'env_security_token' 290 self.environ['AWS_SECURITY_TOKEN'] = 'env_security_token'
291 self.shared_config = {
292 'default': {
293 'aws_access_key_id': 'shared_access_key',
294 'aws_secret_access_key': 'shared_secret_key',
295 'aws_security_token': 'shared_security_token',
296 }
297 }
153 self.config = { 298 self.config = {
154 'Credentials': { 299 'Credentials': {
155 'aws_access_key_id': 'cfg_access_key', 300 'aws_access_key_id': 'cfg_access_key',
156 'aws_secret_access_key': 'cfg_secret_key', 301 'aws_secret_access_key': 'cfg_secret_key',
157 'aws_security_token': 'cfg_security_token', 302 'aws_security_token': 'cfg_security_token',
158 } 303 }
159 } 304 }
160 p = provider.Provider('aws') 305 p = provider.Provider('aws')
161 self.assertEqual(p.access_key, 'env_access_key') 306 self.assertEqual(p.access_key, 'env_access_key')
162 self.assertEqual(p.secret_key, 'env_secret_key') 307 self.assertEqual(p.secret_key, 'env_secret_key')
163 self.assertEqual(p.security_token, 'env_security_token') 308 self.assertEqual(p.security_token, 'env_security_token')
164 309
310 self.environ.clear()
311 p = provider.Provider('aws')
312 self.assertEqual(p.security_token, 'shared_security_token')
313
314 self.shared_config.clear()
315 p = provider.Provider('aws')
316 self.assertEqual(p.security_token, 'cfg_security_token')
317
165 def test_metadata_server_credentials(self): 318 def test_metadata_server_credentials(self):
166 self.get_instance_metadata.return_value = INSTANCE_CONFIG 319 self.get_instance_metadata.return_value = INSTANCE_CONFIG
167 p = provider.Provider('aws') 320 p = provider.Provider('aws')
168 self.assertEqual(p.access_key, 'iam_access_key') 321 self.assertEqual(p.access_key, 'iam_access_key')
169 self.assertEqual(p.secret_key, 'iam_secret_key') 322 self.assertEqual(p.secret_key, 'iam_secret_key')
170 self.assertEqual(p.security_token, 'iam_token') 323 self.assertEqual(p.security_token, 'iam_token')
171 self.assertEqual( 324 self.assertEqual(
172 self.get_instance_metadata.call_args[1]['data'], 325 self.get_instance_metadata.call_args[1]['data'],
173 'meta-data/iam/security-credentials/') 326 'meta-data/iam/security-credentials/')
174 327
175 def test_refresh_credentials(self): 328 def test_refresh_credentials(self):
176 now = datetime.now() 329 now = datetime.utcnow()
177 first_expiration = (now + timedelta(seconds=10)).strftime( 330 first_expiration = (now + timedelta(seconds=10)).strftime(
178 "%Y-%m-%dT%H:%M:%SZ") 331 "%Y-%m-%dT%H:%M:%SZ")
179 credentials = { 332 credentials = {
180 u'AccessKeyId': u'first_access_key', 333 u'AccessKeyId': u'first_access_key',
181 u'Code': u'Success', 334 u'Code': u'Success',
182 u'Expiration': first_expiration, 335 u'Expiration': first_expiration,
183 u'LastUpdated': u'2012-08-31T21:43:40Z', 336 u'LastUpdated': u'2012-08-31T21:43:40Z',
184 u'SecretAccessKey': u'first_secret_key', 337 u'SecretAccessKey': u'first_secret_key',
185 u'Token': u'first_token', 338 u'Token': u'first_token',
186 u'Type': u'AWS-HMAC' 339 u'Type': u'AWS-HMAC'
(...skipping 26 matching lines...) Expand all
213 config_float.return_value = 4.0 366 config_float.return_value = 4.0
214 self.get_instance_metadata.return_value = INSTANCE_CONFIG 367 self.get_instance_metadata.return_value = INSTANCE_CONFIG
215 p = provider.Provider('aws') 368 p = provider.Provider('aws')
216 self.assertEqual(p.access_key, 'iam_access_key') 369 self.assertEqual(p.access_key, 'iam_access_key')
217 self.assertEqual(p.secret_key, 'iam_secret_key') 370 self.assertEqual(p.secret_key, 'iam_secret_key')
218 self.assertEqual(p.security_token, 'iam_token') 371 self.assertEqual(p.security_token, 'iam_token')
219 self.get_instance_metadata.assert_called_with( 372 self.get_instance_metadata.assert_called_with(
220 timeout=4.0, num_retries=10, 373 timeout=4.0, num_retries=10,
221 data='meta-data/iam/security-credentials/') 374 data='meta-data/iam/security-credentials/')
222 375
376 def test_provider_google(self):
377 self.environ['GS_ACCESS_KEY_ID'] = 'env_access_key'
378 self.environ['GS_SECRET_ACCESS_KEY'] = 'env_secret_key'
379 self.shared_config = {
380 'default': {
381 'gs_access_key_id': 'shared_access_key',
382 'gs_secret_access_key': 'shared_secret_key',
383 }
384 }
385 self.config = {
386 'Credentials': {
387 'gs_access_key_id': 'cfg_access_key',
388 'gs_secret_access_key': 'cfg_secret_key',
389 }
390 }
391 p = provider.Provider('google')
392 self.assertEqual(p.access_key, 'env_access_key')
393 self.assertEqual(p.secret_key, 'env_secret_key')
394
395 self.environ.clear()
396 p = provider.Provider('google')
397 self.assertEqual(p.access_key, 'shared_access_key')
398 self.assertEqual(p.secret_key, 'shared_secret_key')
399
400 self.shared_config.clear()
401 p = provider.Provider('google')
402 self.assertEqual(p.access_key, 'cfg_access_key')
403 self.assertEqual(p.secret_key, 'cfg_secret_key')
404
405 @mock.patch('os.path.isfile', return_value=True)
406 @mock.patch.object(provider.Config, 'load_from_path')
407 def test_shared_config_loading(self, load_from_path, exists):
408 provider.Provider('aws')
409 path = os.path.join(expanduser('~'), '.aws', 'credentials')
410 exists.assert_called_once_with(path)
411 load_from_path.assert_called_once_with(path)
412
413 exists.reset_mock()
414 load_from_path.reset_mock()
415
416 provider.Provider('google')
417 path = os.path.join(expanduser('~'), '.google', 'credentials')
418 exists.assert_called_once_with(path)
419 load_from_path.assert_called_once_with(path)
420
223 421
224 if __name__ == '__main__': 422 if __name__ == '__main__':
225 unittest.main() 423 unittest.main()
OLDNEW
« no previous file with comments | « third_party/boto/tests/unit/mws/test_response.py ('k') | third_party/boto/tests/unit/rds/test_connection.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698