Skip to content
This repository has been archived by the owner on Mar 3, 2023. It is now read-only.

Commit

Permalink
Debug unittest
Browse files Browse the repository at this point in the history
  • Loading branch information
xlz-jbleclere committed Aug 25, 2020
1 parent 3bd3118 commit 072d51c
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 39 deletions.
16 changes: 1 addition & 15 deletions tests/proxy.py
Original file line number Diff line number Diff line change
Expand Up @@ -532,21 +532,7 @@ def genlicense__test_api_retry():
new_url = request.url.replace(request.url_root+'test_api_retry', url)
request_json = request.get_json()
request_type = request_json['request']
with lock:
if context['cnt'] == 0:
response = post(new_url, json=request_json, headers=request.headers)
assert response.status_code == 200, "Request:\n'%s'\nfailed with code %d and message: %s" % (dumps(request_json,
indent=4, sort_keys=True), response.status_code, response.text)
excluded_headers = ['content-encoding', 'content-length', 'transfer-encoding', 'connection']
headers = [(name, value) for (name, value) in response.raw.headers.items() if name.lower() not in excluded_headers]
response_json = response.json()
response_status_code = 408
context['post'] = (response_json, headers)
else:
response_json, headers = context['post']
response_status_code = 408
context['cnt'] += 1
return Response(dumps(response_json), response_status_code, headers)
return ({'error':'Force retry for testing'}, 408)

# test_long_to_short_retry_switch functions
@app.route('/test_long_to_short_retry_switch/o/token/', methods=['GET', 'POST'])
Expand Down
53 changes: 29 additions & 24 deletions tests/test_retry_mechanism.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
from datetime import datetime, timedelta
from flask import request
from dateutil import parser
from math import ceil

from tests.conftest import wait_func_true, whoami
from tests.proxy import get_context, set_context
Expand All @@ -28,15 +29,12 @@ def test_api_retry_disabled(accelize_drm, conf_json, cred_json, async_handler, l
async_cb.reset()
conf_json.reset()
conf_json['licensing']['url'] = request.url + 'test_api_retry'
conf_json['settings']['ws_api_retry_period'] = 0 # Disable retry on function call
conf_json['settings']['ws_api_retry_duration'] = 0 # Disable retry on function call
logpath = accelize_drm.create_log_path(whoami())
conf_json['settings']['log_file_verbosity'] = accelize_drm.create_log_level(1)
conf_json['settings']['log_file_verbosity'] = accelize_drm.create_log_level(2)
conf_json['settings']['log_file_path'] = logpath
conf_json['settings']['log_file_type'] = 1
conf_json.save()
context = {'cnt':0}
set_context(context)
assert get_context() == context
drm_manager = accelize_drm.DrmManager(
conf_json.path,
cred_json.path,
Expand All @@ -49,11 +47,14 @@ def test_api_retry_disabled(accelize_drm, conf_json, cred_json, async_handler, l
with pytest.raises(accelize_drm.exceptions.DRMWSMayRetry) as excinfo:
drm_manager.activate()
end = datetime.now()
del drm_manager
assert (end - start).total_seconds() < 1
wait_func_true(lambda: isfile(logpath), 10)
with open(logpath, 'rt') as f:
log_content = f.read()
assert 'Metering Web Service error 408' in log_content
assert 'DRM WS request failed' in log_content
assert search(r'\[\s*critical\s*\]\s*\d+\s*,\s*\[errCode=\d+\]\s*Metering Web Service error 408',
log_content, IGNORECASE)
assert not search(r'attempt', log_content, IGNORECASE)
async_cb.assert_NoError()


Expand All @@ -65,17 +66,15 @@ def test_api_retry_enabled(accelize_drm, conf_json, cred_json, async_handler, li
driver = accelize_drm.pytest_fpga_driver[0]
async_cb = async_handler.create()
async_cb.reset()
retry_duration = 10
conf_json.reset()
conf_json['licensing']['url'] = request.url + 'test_api_retry'
conf_json['settings']['ws_api_retry_period'] = 0 # Disable retry on function call
conf_json['settings']['ws_api_retry_duration'] = retry_duration # Set retry duration to 10s
logpath = accelize_drm.create_log_path(whoami())
conf_json['settings']['log_file_verbosity'] = accelize_drm.create_log_level(1)
conf_json['settings']['log_file_verbosity'] = accelize_drm.create_log_level(2)
conf_json['settings']['log_file_path'] = logpath
conf_json['settings']['log_file_type'] = 1
conf_json.save()
context = {'cnt':0}
set_context(context)
assert get_context() == context
drm_manager = accelize_drm.DrmManager(
conf_json.path,
cred_json.path,
Expand All @@ -84,21 +83,23 @@ def test_api_retry_enabled(accelize_drm, conf_json, cred_json, async_handler, li
async_cb.callback
)
assert not drm_manager.get('license_status')
retry_sleep = drm_manager.get('ws_retry_period_short')
start = datetime.now()
with pytest.raises(accelize_drm.exceptions.DRMWSMayRetry) as excinfo:
with pytest.raises(accelize_drm.exceptions.DRMWSError) as excinfo:
drm_manager.activate()
end = datetime.now()
del drm_manager
total_seconds = int((end - start).total_seconds())
assert total_seconds >= timeout
assert total_seconds <= timeout + 1
assert (end - start).total_seconds() < 1
assert retry_duration <= total_seconds <= retry_duration + 1
wait_func_true(lambda: isfile(logpath), 10)
with open(logpath, 'rt') as f:
log_content = f.read()
assert 'Metering Web Service error 408' in log_content
assert 'DRM WS request failed' in log_content
m = search(r'Timeout on License request after (\d+) attempts', log_content)
m = search(r'\[\s*critical\s*\]\s*\d+\s*,\s*\[errCode=\d+\]\s*Timeout on License request after (\d+) attempts',
log_content, IGNORECASE)
assert m is not None
assert int(m.group(1)) > 1
nb_attempts = int(m.group(1))
nb_attempts_expected = retry_duration / retry_sleep
assert nb_attempts_expected - 1 <= nb_attempts <= nb_attempts_expected + 1
async_cb.assert_NoError()


Expand Down Expand Up @@ -177,8 +178,10 @@ def test_retry_on_no_connection(accelize_drm, conf_json, cred_json, async_handle
retryLongPeriod = 20
licDuration = 60
requestTimeout = 5
nb_long_retry = int(licDuration / (retryLongPeriod + requestTimeout + 1))
nb_short_retry = int(retryLongPeriod / (retryShortPeriod + requestTimeout + 1)) + 1
nb_long_retry = ceil((licDuration - retryLongPeriod)/(retryLongPeriod + requestTimeout))
print('nb_long_retry=', nb_long_retry, type(nb_long_retry))
nb_short_retry = ceil((licDuration - nb_long_retry*(retryLongPeriod + requestTimeout)) / (retryShortPeriod + requestTimeout))
print('nb_short_retry=', nb_short_retry, type(nb_short_retry))
nb_retry = nb_long_retry + nb_short_retry

conf_json.reset()
Expand Down Expand Up @@ -214,9 +217,11 @@ def test_retry_on_no_connection(accelize_drm, conf_json, cred_json, async_handle
drm_manager.deactivate()
del drm_manager
assert async_cb.was_called
assert search(r'Timeout on License request after %d attempts' % nb_retry,
async_cb.message)
assert async_cb.errcode == accelize_drm.exceptions.DRMWSError.error_code
m = search(r'Timeout on License request after (\d+) attempts', async_cb.message)
assert m is not None
nb_attempts = int(m.group(1))
assert nb_retry == nb_attempts
wait_func_true(lambda: isfile(logpath), 10)
with open(logpath, 'rt') as f:
log_content = f.read()
Expand Down

0 comments on commit 072d51c

Please sign in to comment.