Skip to content

Commit 939309f

Browse files
Fixed pylint issue, added test for range_matlab_connector_ports() method, added regex patterns for endpoints
1 parent 371664c commit 939309f

File tree

2 files changed

+41
-35
lines changed

2 files changed

+41
-35
lines changed

tests/server.py

Lines changed: 0 additions & 6 deletions
This file was deleted.

tests/test_mw.py

Lines changed: 41 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Copyright 2021 The MathWorks, Inc.
22

3-
import pytest, asyncio, secrets, datetime, random, json
3+
import pytest, asyncio, secrets, datetime, random, json, re
44
from unittest.mock import patch
55
from jupyter_matlab_proxy import app
66
from jupyter_matlab_proxy.util import mw
@@ -22,13 +22,14 @@ def mwa_api_data_fixture():
2222
The namedtuple contains values required for MW authentication
2323
2424
Returns:
25-
namedtuple: A named tuple containing mwa, mhlm end-point URLs, source_id, identity_token, access_token and matlab_release.
25+
namedtuple: A named tuple containing mwa, mhlm end-point URLs (with regex patterns), source_id, identity_token, access_token and matlab_release.
2626
"""
2727

2828
mwa_api_endpoint = "https://login.mathworks.com/authenticationws/service/v4"
29-
mhlm_api_endpoint = (
30-
"https://licensing.mathworks.com/mls/service/v1/entitlement/list",
31-
)
29+
mwa_api_endpoint_pattern = re.compile("^" + mwa_api_endpoint)
30+
mhlm_api_endpoint = "https://licensing.mathworks.com/mls/service/v1/entitlement/list"
31+
mhlm_api_endpoint_pattern = re.compile("^" + mhlm_api_endpoint)
32+
3233
identity_token = secrets.token_urlsafe(324)
3334
source_id = secrets.token_urlsafe(21)
3435
access_token = secrets.token_urlsafe(22)
@@ -38,7 +39,9 @@ def mwa_api_data_fixture():
3839
"mwa_api_variables",
3940
[
4041
"mwa_api_endpoint",
42+
"mwa_api_endpoint_pattern",
4143
"mhlm_api_endpoint",
44+
"mhlm_api_endpoint_pattern",
4245
"identity_token",
4346
"source_id",
4447
"access_token",
@@ -48,7 +51,9 @@ def mwa_api_data_fixture():
4851

4952
variables = mwa_api_variables(
5053
mwa_api_endpoint,
54+
mwa_api_endpoint_pattern,
5155
mhlm_api_endpoint,
56+
mhlm_api_endpoint_pattern,
5257
identity_token,
5358
source_id,
5459
access_token,
@@ -118,9 +123,7 @@ def mock_aiohttp_client_session():
118123
yield m
119124

120125

121-
async def test_fetch_access_token(
122-
mwa_api_data, fetch_access_token_valid_json, mock_response
123-
):
126+
async def test_fetch_access_token(mwa_api_data, fetch_access_token_valid_json, mock_response):
124127
"""Test to check mw.fetch_access_token method returns valid json response.
125128
126129
The mock_response fixture mocks the aiohttp.ClientSession().post() method to return a custom HTTP response.
@@ -131,11 +134,10 @@ async def test_fetch_access_token(
131134
mock_response: Pytest fixture which yields a aioresponses() object for mocking HTTP response
132135
"""
133136
json_data = fetch_access_token_valid_json
134-
135-
url = f"{mwa_api_data.mwa_api_endpoint}/tokens/access?tokenString={mwa_api_data.identity_token}&type=MWAS&sourceId={mwa_api_data.source_id}"
136137
payload = dict(accessTokenString=json_data["accessTokenString"])
137138

138-
mock_response.post(url, payload=payload)
139+
url_pattern = mwa_api_data.mwa_api_endpoint_pattern
140+
mock_response.post(url_pattern, payload=payload)
139141

140142
resp = await mw.fetch_access_token(
141143
mwa_api_data.mwa_api_endpoint,
@@ -155,10 +157,10 @@ async def test_fetch_access_token_licensing_error(mwa_api_data, mock_response):
155157
mwa_api_data (namedtuple): A pytest fixture which returns a namedtuple containing values for MW authentication
156158
"""
157159

158-
url = f"{mwa_api_data.mwa_api_endpoint}/tokens/access?tokenString={mwa_api_data.identity_token}&type=MWAS&sourceId={mwa_api_data.source_id}"
160+
url_pattern = mwa_api_data.mwa_api_endpoint_pattern
159161

160162
mock_response.post(
161-
url, exception=exceptions.OnlineLicensingError("Communication failed")
163+
url_pattern, exception=exceptions.OnlineLicensingError("Communication failed")
162164
)
163165

164166
with pytest.raises(exceptions.OnlineLicensingError):
@@ -176,11 +178,13 @@ async def test_fetch_expand_token_licensing_error(mock_response, mwa_api_data):
176178
mock_response: Pytest fixture which yields a aioresponses() object for mocking HTTP response
177179
mwa_api_data (namedtuple): A pytest fixture which returns a namedtuple containing values for MW authentication
178180
"""
179-
url = f"{mwa_api_data.mwa_api_endpoint}/tokens?tokenString={mwa_api_data.identity_token}&tokenPolicyName=R1&sourceId={mwa_api_data.source_id}"
181+
182+
url_pattern = mwa_api_data.mwa_api_endpoint_pattern
180183

181184
mock_response.post(
182-
url, exception=exceptions.OnlineLicensingError("Communication failed")
185+
url_pattern, exception=exceptions.OnlineLicensingError("Communication failed")
183186
)
187+
184188
with pytest.raises(exceptions.OnlineLicensingError):
185189
resp = await mw.fetch_expand_token(
186190
mwa_api_data.mwa_api_endpoint,
@@ -220,9 +224,7 @@ def fetch_expand_token_valid_json_fixture():
220224
return json_data
221225

222226

223-
async def test_fetch_expand_token(
224-
mock_response, fetch_expand_token_valid_json, mwa_api_data
225-
):
227+
async def test_fetch_expand_token(mock_response, fetch_expand_token_valid_json, mwa_api_data):
226228
"""Test to check if mw.fetch_expand_token returns a correct json response
227229
228230
mock_response is used to mock ClientSession.post method to return a HTTP Response containing a valid json response.
@@ -232,7 +234,8 @@ async def test_fetch_expand_token(
232234
mwa_api_data (namedtuple): A namedtuple which contains info related to mwa.
233235
"""
234236
json_data = fetch_expand_token_valid_json
235-
url = f"{mwa_api_data.mwa_api_endpoint}/tokens?tokenString={mwa_api_data.identity_token}&tokenPolicyName=R1&sourceId={mwa_api_data.source_id}"
237+
238+
url_pattern = mwa_api_data.mwa_api_endpoint_pattern
236239

237240
referenceDetail = dict(
238241
firstName=json_data["referenceDetail"]["firstName"],
@@ -242,11 +245,9 @@ async def test_fetch_expand_token(
242245
referenceId=json_data["referenceDetail"]["referenceId"],
243246
)
244247

245-
payload = dict(
246-
expirationDate=json_data["expirationDate"], referenceDetail=referenceDetail
247-
)
248+
payload = dict(expirationDate=json_data["expirationDate"], referenceDetail=referenceDetail)
248249

249-
mock_response.post(url, payload=payload)
250+
mock_response.post(url_pattern, payload=payload)
250251

251252
resp = await mw.fetch_expand_token(
252253
mwa_api_data.mwa_api_endpoint,
@@ -266,10 +267,10 @@ async def test_fetch_entitlements_licensing_error(mock_response, mwa_api_data):
266267
mock_response: Pytest fixture which yields a aioresponses() object for mocking HTTP response
267268
mwa_api_data (namedtuple): A namedtuple which contains info related to mwa.
268269
"""
269-
url = f"{mwa_api_data.mhlm_api_endpoint}?token={mwa_api_data.access_token}&release={mwa_api_data.matlab_release}&coreProduct=ML&context=jupyter&excludeExpired=true"
270+
url_pattern = mwa_api_data.mhlm_api_endpoint_pattern
270271

271272
mock_response.post(
272-
url, exception=exceptions.OnlineLicensingError("Communication Error")
273+
url_pattern, exception=exceptions.OnlineLicensingError("Communication Error")
273274
)
274275

275276
with pytest.raises(exceptions.OnlineLicensingError):
@@ -325,9 +326,9 @@ async def test_fetch_entitlements_entitlement_error(
325326
mwa_api_data (namedtuple): A namedtuple which contains info related to mwa.
326327
invalid_entitlements (String): String containing invalid entitlements
327328
"""
328-
url = f"{mwa_api_data.mhlm_api_endpoint}?token={mwa_api_data.access_token}&release={mwa_api_data.matlab_release}&coreProduct=ML&context=jupyter&excludeExpired=true"
329+
url_pattern = mwa_api_data.mhlm_api_endpoint_pattern
329330

330-
mock_response.post(url, body=invalid_entitlements)
331+
mock_response.post(url_pattern, body=invalid_entitlements)
331332

332333
with pytest.raises(exceptions.EntitlementError):
333334
resp = await mw.fetch_entitlements(
@@ -371,9 +372,9 @@ async def test_fetch_entitlements(mock_response, mwa_api_data, valid_entitlement
371372
valid_entitlements (String): String containing valid entitlements as a response.
372373
"""
373374

374-
url = f"{mwa_api_data.mhlm_api_endpoint}?token={mwa_api_data.access_token}&release={mwa_api_data.matlab_release}&coreProduct=ML&context=jupyter&excludeExpired=true"
375+
url_pattern = mwa_api_data.mhlm_api_endpoint_pattern
375376

376-
mock_response.post(url, body=valid_entitlements)
377+
mock_response.post(url_pattern, body=valid_entitlements)
377378

378379
resp = await mw.fetch_entitlements(
379380
mwa_api_data.mhlm_api_endpoint,
@@ -447,3 +448,14 @@ def test_parse_other_error():
447448
actual_output = mw.parse_other_error(logs)
448449

449450
assert isinstance(actual_output, expected_output)
451+
452+
453+
def test_range_matlab_connector_ports():
454+
"""This test checks if the generator mw.range _matlab_connector_ports()
455+
yields consecutive port numbers.
456+
"""
457+
port_range = mw.range_matlab_connector_ports()
458+
first_port = next(port_range)
459+
second_port = next(port_range)
460+
461+
assert first_port + 1 == second_port

0 commit comments

Comments
 (0)