1
1
# pylint: disable=missing-docstring
2
+ import os
3
+ from ibm_cloud_sdk_core import get_authenticator_from_environment
2
4
import time
3
5
4
6
import responses
7
9
8
10
from ibm_cloud_sdk_core import IAMTokenManager , ApiException
9
11
12
+
10
13
def get_access_token () -> str :
11
14
access_token_layout = {
12
15
"username" : "dummy" ,
@@ -27,6 +30,7 @@ def get_access_token() -> str:
27
30
headers = {'kid' : '230498151c214b788dd97f22b85410a5' })
28
31
return access_token
29
32
33
+
30
34
@responses .activate
31
35
def test_request_token_auth_default ():
32
36
iam_url = "https://iam.cloud.ibm.com/identity/token"
@@ -47,6 +51,7 @@ def test_request_token_auth_default():
47
51
assert responses .calls [0 ].request .headers .get ('Authorization' ) is None
48
52
assert responses .calls [0 ].response .text == response
49
53
54
+
50
55
@responses .activate
51
56
def test_request_token_auth_in_ctor ():
52
57
iam_url = "https://iam.cloud.ibm.com/identity/token"
@@ -60,7 +65,8 @@ def test_request_token_auth_in_ctor():
60
65
default_auth_header = 'Basic Yng6Yng='
61
66
responses .add (responses .POST , url = iam_url , body = response , status = 200 )
62
67
63
- token_manager = IAMTokenManager ("apikey" , url = iam_url , client_id = 'foo' , client_secret = 'bar' )
68
+ token_manager = IAMTokenManager (
69
+ "apikey" , url = iam_url , client_id = 'foo' , client_secret = 'bar' )
64
70
token_manager .request_token ()
65
71
66
72
assert len (responses .calls ) == 1
@@ -69,6 +75,7 @@ def test_request_token_auth_in_ctor():
69
75
assert responses .calls [0 ].response .text == response
70
76
assert 'scope' not in responses .calls [0 ].response .request .body
71
77
78
+
72
79
@responses .activate
73
80
def test_request_token_auth_in_ctor_with_scope ():
74
81
iam_url = "https://iam.cloud.ibm.com/identity/token"
@@ -82,7 +89,8 @@ def test_request_token_auth_in_ctor_with_scope():
82
89
default_auth_header = 'Basic Yng6Yng='
83
90
responses .add (responses .POST , url = iam_url , body = response , status = 200 )
84
91
85
- token_manager = IAMTokenManager ("apikey" , url = iam_url , client_id = 'foo' , client_secret = 'bar' , scope = 'john snow' )
92
+ token_manager = IAMTokenManager (
93
+ "apikey" , url = iam_url , client_id = 'foo' , client_secret = 'bar' , scope = 'john snow' )
86
94
token_manager .request_token ()
87
95
88
96
assert len (responses .calls ) == 1
@@ -91,6 +99,7 @@ def test_request_token_auth_in_ctor_with_scope():
91
99
assert responses .calls [0 ].response .text == response
92
100
assert 'scope=john+snow' in responses .calls [0 ].response .request .body
93
101
102
+
94
103
@responses .activate
95
104
def test_request_token_unsuccessful ():
96
105
iam_url = "https://iam.cloud.ibm.com/identity/token"
@@ -123,6 +132,7 @@ def test_request_token_unsuccessful():
123
132
assert responses .calls [0 ].request .url == iam_url
124
133
assert responses .calls [0 ].response .text == response
125
134
135
+
126
136
@responses .activate
127
137
def test_request_token_auth_in_ctor_client_id_only ():
128
138
iam_url = "https://iam.cloud.ibm.com/identity/token"
@@ -144,6 +154,7 @@ def test_request_token_auth_in_ctor_client_id_only():
144
154
assert responses .calls [0 ].response .text == response
145
155
assert 'scope' not in responses .calls [0 ].response .request .body
146
156
157
+
147
158
@responses .activate
148
159
def test_request_token_auth_in_ctor_secret_only ():
149
160
iam_url = "https://iam.cloud.ibm.com/identity/token"
@@ -156,7 +167,8 @@ def test_request_token_auth_in_ctor_secret_only():
156
167
}"""
157
168
responses .add (responses .POST , url = iam_url , body = response , status = 200 )
158
169
159
- token_manager = IAMTokenManager ("iam_apikey" , url = iam_url , client_id = None , client_secret = 'bar' )
170
+ token_manager = IAMTokenManager (
171
+ "iam_apikey" , url = iam_url , client_id = None , client_secret = 'bar' )
160
172
token_manager .request_token ()
161
173
162
174
assert len (responses .calls ) == 1
@@ -165,6 +177,7 @@ def test_request_token_auth_in_ctor_secret_only():
165
177
assert responses .calls [0 ].response .text == response
166
178
assert 'scope' not in responses .calls [0 ].response .request .body
167
179
180
+
168
181
@responses .activate
169
182
def test_request_token_auth_in_setter ():
170
183
iam_url = "https://iam.cloud.ibm.com/identity/token"
@@ -188,6 +201,7 @@ def test_request_token_auth_in_setter():
188
201
assert responses .calls [0 ].response .text == response
189
202
assert 'scope' not in responses .calls [0 ].response .request .body
190
203
204
+
191
205
@responses .activate
192
206
def test_request_token_auth_in_setter_client_id_only ():
193
207
iam_url = "https://iam.cloud.ibm.com/identity/token"
@@ -210,6 +224,7 @@ def test_request_token_auth_in_setter_client_id_only():
210
224
assert responses .calls [0 ].response .text == response
211
225
assert 'scope' not in responses .calls [0 ].response .request .body
212
226
227
+
213
228
@responses .activate
214
229
def test_request_token_auth_in_setter_secret_only ():
215
230
iam_url = "https://iam.cloud.ibm.com/identity/token"
@@ -224,7 +239,7 @@ def test_request_token_auth_in_setter_secret_only():
224
239
225
240
token_manager = IAMTokenManager ("iam_apikey" )
226
241
token_manager .set_client_id_and_secret (None , 'bar' )
227
- token_manager .set_headers ({'user' :'header' })
242
+ token_manager .set_headers ({'user' : 'header' })
228
243
token_manager .request_token ()
229
244
230
245
assert len (responses .calls ) == 1
@@ -233,6 +248,7 @@ def test_request_token_auth_in_setter_secret_only():
233
248
assert responses .calls [0 ].response .text == response
234
249
assert 'scope' not in responses .calls [0 ].response .request .body
235
250
251
+
236
252
@responses .activate
237
253
def test_request_token_auth_in_setter_scope ():
238
254
iam_url = "https://iam.cloud.ibm.com/identity/token"
@@ -247,7 +263,7 @@ def test_request_token_auth_in_setter_scope():
247
263
248
264
token_manager = IAMTokenManager ("iam_apikey" )
249
265
token_manager .set_client_id_and_secret (None , 'bar' )
250
- token_manager .set_headers ({'user' :'header' })
266
+ token_manager .set_headers ({'user' : 'header' })
251
267
token_manager .set_scope ('john snow' )
252
268
token_manager .request_token ()
253
269
@@ -257,6 +273,7 @@ def test_request_token_auth_in_setter_scope():
257
273
assert responses .calls [0 ].response .text == response
258
274
assert 'scope=john+snow' in responses .calls [0 ].response .request .body
259
275
276
+
260
277
@responses .activate
261
278
def test_get_refresh_token ():
262
279
iam_url = "https://iam.cloud.ibm.com/identity/token"
@@ -276,69 +293,71 @@ def test_get_refresh_token():
276
293
assert len (responses .calls ) == 2
277
294
assert token_manager .refresh_token == "jy4gl91BQ"
278
295
279
- # In order to test with a live IAM server, create file "iamtest.env" in the project root.
296
+ #
297
+ # In order to run the following integration test with a live IAM server:
298
+ #
299
+ # 1. Create file "iamtest.env" in the project root.
280
300
# It should look like this:
281
-
282
301
# IAMTEST1_AUTH_URL=<url> e.g. https://iam.cloud.ibm.com
283
302
# IAMTEST1_AUTH_TYPE=iam
284
303
# IAMTEST1_APIKEY=<apikey>
285
-
286
- # IAMTEST2_AUTH_URL=<url> e.g. https://iam.test.cloud.ibm.com/identity/token
304
+ # IAMTEST2_AUTH_URL=<url> e.g. https://iam.test.cloud.ibm.com
287
305
# IAMTEST2_AUTH_TYPE=iam
288
306
# IAMTEST2_APIKEY=<apikey>
289
307
# IAMTEST2_CLIENT_ID=<client id>
290
308
# IAMTEST2_CLIENT_SECRET=<client secret>
291
-
292
- # Then uncomment the function below and run this command:
293
- # python3 -m pytest test -k "test_iam_live_token_server"
294
-
295
- # import os
296
- # from ibm_cloud_sdk_core import get_authenticator_from_environment
297
-
298
- # def test_iam_live_token_server():
299
- # # Get two iam authenticators from the environment.
300
- # # "iamtest1" uses username/password
301
- # # "iamtest2" uses username/apikey
302
- # os.environ['IBM_CREDENTIALS_FILE'] = "iamtest.env"
309
+ #
310
+ # 2. Comment out the "@pytest.mark.skip" decorator below.
311
+ #
312
+ # 3. Run this command:
313
+ # python3 -m pytest -s test -k "test_iam_live_token_server"
314
+ # (or just run tests like normal and this test function will be invoked)
315
+ #
303
316
304
317
305
- # # Test "iamtest1" service
306
- # auth1 = get_authenticator_from_environment("iamtest1")
307
- # assert auth1 is not None
308
- # assert auth1.token_manager is not None
309
- # assert auth1.token_manager.url is not None
318
+ @pytest .mark .skip (reason = "avoid integration test in automated builds" )
319
+ def test_iam_live_token_server ():
320
+ # Get two iam authenticators from the environment.
321
+ # "iamtest1" uses the production IAM token server
322
+ # "iamtest2" uses the staging IAM token server
323
+ os .environ ['IBM_CREDENTIALS_FILE' ] = "iamtest.env"
310
324
311
- # request = {'method': "GET"}
312
- # request["url"] = ""
313
- # request["headers"] = {}
325
+ # Test "iamtest1" service
326
+ auth1 = get_authenticator_from_environment ("iamtest1" )
327
+ assert auth1 is not None
328
+ assert auth1 .token_manager is not None
329
+ assert auth1 .token_manager .url is not None
314
330
315
- # assert auth1.token_manager.refresh_token is None
331
+ request = {'method' : "GET" }
332
+ request ["url" ] = ""
333
+ request ["headers" ] = {}
316
334
317
- # auth1.authenticate(request)
335
+ assert auth1 .token_manager . refresh_token is None
318
336
319
- # assert auth1.token_manager.refresh_token is not None
337
+ auth1 .authenticate ( request )
320
338
321
- # assert request.get("headers") is not None
322
- # assert request["headers"].get("Authorization") is not None
323
- # assert "Bearer " in request["headers"].get("Authorization")
339
+ assert request .get ("headers" ) is not None
340
+ assert request ["headers" ].get ("Authorization" ) is not None
341
+ assert "Bearer " in request ["headers" ].get ("Authorization" )
324
342
343
+ # Test "iamtest2" service
344
+ auth2 = get_authenticator_from_environment ("iamtest2" )
345
+ assert auth2 is not None
346
+ assert auth2 .token_manager is not None
347
+ assert auth2 .token_manager .url is not None
325
348
326
- # # Test "iamtest2" service
327
- # auth2 = get_authenticator_from_environment("iamtest2")
328
- # assert auth2 is not None
329
- # assert auth2.token_manager is not None
330
- # assert auth2.token_manager.url is not None
349
+ request = {'method' : "GET" }
350
+ request ["url" ] = ""
351
+ request ["headers" ] = {}
331
352
332
- # request = {'method': "GET"}
333
- # request["url"] = ""
334
- # request["headers"] = {}
353
+ assert auth2 .token_manager .refresh_token is None
335
354
336
- # assert auth2.token_manager.refresh_token is None
355
+ auth2 .authenticate ( request )
337
356
338
- # auth2.authenticate(request)
357
+ assert auth2 .token_manager . refresh_token is not None
339
358
340
- # assert auth2.token_manager.refresh_token is not None
359
+ assert request .get ("headers" ) is not None
360
+ assert request ["headers" ].get ("Authorization" ) is not None
361
+ assert "Bearer " in request ["headers" ].get ("Authorization" )
341
362
342
- # assert request.get("headers") is not None
343
- # assert request["headers"].get("Authorization") is not None
344
- # assert "Bearer " in request["headers"].get("Authorization")
363
+ # print('Refresh token: ', auth2.token_manager.refresh_token)
0 commit comments