Skip to content

Commit dab87bf

Browse files
Harshg999Athithyaa Selvam
authored and
Athithyaa Selvam
committed
DWX-8026: [raz] Improve RAZ HA unit tests (#3651)
(cherry picked from commit 4bd2f36) (cherry picked from commit 87744078b87ab86bf2f1be7d87df75fbe821f55f) Change-Id: Ib97c029298b55a684819e72c2478d2990764499a
1 parent da87e91 commit dab87bf

File tree

2 files changed

+30
-19
lines changed

2 files changed

+30
-19
lines changed

desktop/core/src/desktop/lib/raz/raz_client.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ def _handle_raz_ha(self, raz_url, headers, data, auth_handler=None, verify=False
171171

172172
raz_response = None
173173
for r_url in raz_urls_list:
174-
r_url = "%s/api/authz/%s/access?doAs=%s" % (r_url.rstrip('/'), self.service, self.username)
174+
r_url = "%s/api/authz/%s/access?doAs=%s" % (r_url.strip(' ').rstrip('/'), self.service, self.username)
175175
LOG.info('Attempting to connect to RAZ URL: %s' % r_url)
176176

177177
try:

desktop/core/src/desktop/lib/raz/raz_client_test.py

+29-18
Original file line numberDiff line numberDiff line change
@@ -14,27 +14,22 @@
1414
# See the License for the specific language governing permissions and
1515
# limitations under the License.
1616

17-
import base64
18-
import sys
1917
import unittest
2018

2119
from nose.tools import assert_equal, assert_true, assert_raises
2220

2321
from desktop.lib.raz.raz_client import RazClient, get_raz_client
2422
from desktop.lib.exceptions_renderable import PopupException
2523

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
3025

3126

3227
class RazClientTest(unittest.TestCase):
3328

3429
def setUp(self):
3530
self.username = 'gethue'
3631
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/'
3833

3934
self.s3_path = 'https://gethue-test.s3.amazonaws.com/gethue/data/customer.csv'
4035
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):
346341

347342
resp = client.check_access(method='GET', url=self.s3_path)
348343

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=='
355346

356347
requests_post.assert_called_with(
357348
'https://raz.gethue.com:8080/api/authz/s3/access?doAs=gethue',
@@ -382,10 +373,10 @@ def test_check_access_s3(self):
382373
def test_handle_raz_ha(self):
383374
with patch('desktop.lib.sdxaas.knox_jwt.requests_kerberos.HTTPKerberosAuth') as HTTPKerberosAuth:
384375
with patch('desktop.lib.raz.raz_client.requests.post') as requests_post:
385-
requests_post.return_value = Mock(status_code=200)
386376
request_data = Mock()
387377

388378
# Non-HA mode
379+
requests_post.return_value = Mock(status_code=200)
389380
client = RazClient(self.raz_url, 'kerberos', username=self.username, service="s3", service_name="cm_s3", cluster_name="cl1")
390381
raz_response = client._handle_raz_ha(self.raz_url, auth_handler=HTTPKerberosAuth(), data=request_data, headers={})
391382

@@ -397,9 +388,13 @@ def test_handle_raz_ha(self):
397388
verify=False
398389
)
399390
assert_equal(raz_response.status_code, 200)
391+
assert_equal(requests_post.call_count, 1)
392+
requests_post.reset_mock()
400393

401-
# HA mode - where first URL sends 200 status code
394+
# HA mode - When RAZ instance1 is healthy and RAZ instance2 is unhealthy
402395
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)]
403398
raz_response = client._handle_raz_ha(self.raz_urls_ha, auth_handler=HTTPKerberosAuth(), data=request_data, headers={})
404399

405400
requests_post.assert_called_with(
@@ -410,12 +405,28 @@ def test_handle_raz_ha(self):
410405
verify=False
411406
)
412407
assert_equal(raz_response.status_code, 200)
408+
assert_equal(requests_post.call_count, 1)
409+
requests_post.reset_mock()
413410

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={})
416414

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)]
418428
raz_response = client._handle_raz_ha(self.raz_urls_ha, auth_handler=HTTPKerberosAuth(), data=request_data, headers={})
419429

420430
assert_equal(raz_response, None)
431+
assert_equal(requests_post.call_count, 2)
421432

0 commit comments

Comments
 (0)