14
14
# See the License for the specific language governing permissions and
15
15
# limitations under the License.
16
16
17
- import base64
18
- import sys
19
17
import unittest
20
18
21
19
from nose .tools import assert_equal , assert_true , assert_raises
22
20
23
21
from desktop .lib .raz .raz_client import RazClient , get_raz_client
24
22
from desktop .lib .exceptions_renderable import PopupException
25
23
26
- if sys .version_info [0 ] > 2 :
27
- from unittest .mock import patch , Mock
28
- else :
29
- from mock import patch , Mock
24
+ from unittest .mock import patch , Mock
30
25
31
26
32
27
class RazClientTest (unittest .TestCase ):
33
28
34
29
def setUp (self ):
35
30
self .username = 'gethue'
36
31
self .raz_url = 'https://raz.gethue.com:8080'
37
- self .raz_urls_ha = 'https://raz_host_1.gethue.com:8080/,https://raz_host_2.gethue.com:8080/'
32
+ self .raz_urls_ha = 'https://raz_host_1.gethue.com:8080/, https://raz_host_2.gethue.com:8080/'
38
33
39
34
self .s3_path = 'https://gethue-test.s3.amazonaws.com/gethue/data/customer.csv'
40
35
self .adls_path = 'https://gethuestorage.dfs.core.windows.net/gethue-container/user/csso_hueuser/customer.csv'
@@ -346,12 +341,8 @@ def test_check_access_s3(self):
346
341
347
342
resp = client .check_access (method = 'GET' , url = self .s3_path )
348
343
349
- if sys .version_info [0 ] > 2 :
350
- signed_request = 'CiRodHRwczovL2dldGh1ZS10ZXN0LnMzLmFtYXpvbmF3cy5jb20Q' \
351
- 'ATIYZ2V0aHVlL2RhdGEvY3VzdG9tZXIuY3N2OABCAnMzSgJzMw=='
352
- else :
353
- signed_request = b'CiRodHRwczovL2dldGh1ZS10ZXN0LnMzLmFtYXpvbmF3cy5jb20Q' \
354
- b'ATIYZ2V0aHVlL2RhdGEvY3VzdG9tZXIuY3N2OABCAnMzSgJzMw=='
344
+ signed_request = 'CiRodHRwczovL2dldGh1ZS10ZXN0LnMzLmFtYXpvbmF3cy5jb20Q' \
345
+ 'ATIYZ2V0aHVlL2RhdGEvY3VzdG9tZXIuY3N2OABCAnMzSgJzMw=='
355
346
356
347
requests_post .assert_called_with (
357
348
'https://raz.gethue.com:8080/api/authz/s3/access?doAs=gethue' ,
@@ -382,10 +373,10 @@ def test_check_access_s3(self):
382
373
def test_handle_raz_ha (self ):
383
374
with patch ('desktop.lib.sdxaas.knox_jwt.requests_kerberos.HTTPKerberosAuth' ) as HTTPKerberosAuth :
384
375
with patch ('desktop.lib.raz.raz_client.requests.post' ) as requests_post :
385
- requests_post .return_value = Mock (status_code = 200 )
386
376
request_data = Mock ()
387
377
388
378
# Non-HA mode
379
+ requests_post .return_value = Mock (status_code = 200 )
389
380
client = RazClient (self .raz_url , 'kerberos' , username = self .username , service = "s3" , service_name = "cm_s3" , cluster_name = "cl1" )
390
381
raz_response = client ._handle_raz_ha (self .raz_url , auth_handler = HTTPKerberosAuth (), data = request_data , headers = {})
391
382
@@ -397,9 +388,13 @@ def test_handle_raz_ha(self):
397
388
verify = False
398
389
)
399
390
assert_equal (raz_response .status_code , 200 )
391
+ assert_equal (requests_post .call_count , 1 )
392
+ requests_post .reset_mock ()
400
393
401
- # HA mode - where first URL sends 200 status code
394
+ # HA mode - When RAZ instance1 is healthy and RAZ instance2 is unhealthy
402
395
client = RazClient (self .raz_urls_ha , 'kerberos' , username = self .username , service = "s3" , service_name = "cm_s3" , cluster_name = "cl1" )
396
+
397
+ requests_post .side_effect = [Mock (status_code = 200 ), Mock (status_code = 404 )]
403
398
raz_response = client ._handle_raz_ha (self .raz_urls_ha , auth_handler = HTTPKerberosAuth (), data = request_data , headers = {})
404
399
405
400
requests_post .assert_called_with (
@@ -410,12 +405,28 @@ def test_handle_raz_ha(self):
410
405
verify = False
411
406
)
412
407
assert_equal (raz_response .status_code , 200 )
408
+ assert_equal (requests_post .call_count , 1 )
409
+ requests_post .reset_mock ()
413
410
414
- # When no RAZ URL is healthy
415
- requests_post .return_value = Mock (status_code = 404 )
411
+ # HA mode - When RAZ instance1 is unhealthy and RAZ instance2 is healthy
412
+ requests_post .side_effect = [Mock (status_code = 404 ), Mock (status_code = 200 )]
413
+ raz_response = client ._handle_raz_ha (self .raz_urls_ha , auth_handler = HTTPKerberosAuth (), data = request_data , headers = {})
416
414
417
- client = RazClient (self .raz_urls_ha , 'kerberos' , username = self .username , service = "s3" , service_name = "cm_s3" , cluster_name = "cl1" )
415
+ requests_post .assert_called_with (
416
+ 'https://raz_host_2.gethue.com:8080/api/authz/s3/access?doAs=gethue' ,
417
+ auth = HTTPKerberosAuth (),
418
+ headers = {},
419
+ json = request_data ,
420
+ verify = False
421
+ )
422
+ assert_equal (raz_response .status_code , 200 )
423
+ assert_equal (requests_post .call_count , 2 )
424
+ requests_post .reset_mock ()
425
+
426
+ # When no RAZ instance is healthy
427
+ requests_post .side_effect = [Mock (status_code = 404 ), Mock (status_code = 404 )]
418
428
raz_response = client ._handle_raz_ha (self .raz_urls_ha , auth_handler = HTTPKerberosAuth (), data = request_data , headers = {})
419
429
420
430
assert_equal (raz_response , None )
431
+ assert_equal (requests_post .call_count , 2 )
421
432
0 commit comments