Skip to content
Snippets Groups Projects
Commit 7d7d4cee authored by Robert Latta's avatar Robert Latta
Browse files

Merge branch 'develop' of...

Merge branch 'develop' of gitlab.geant.net:live-projects/dashboardv3/inventory-provider into develop
parents 1fc491c5 7db67331
No related branches found
No related tags found
No related merge requests found
from flask import Blueprint, current_app, jsonify, Response
from distutils.util import strtobool
from flask import Blueprint, current_app, jsonify, Response, request
from inventory_provider.tasks import worker
from inventory_provider.routes import common
from inventory_provider.tasks.common import get_current_redis, get_latch
......@@ -15,13 +16,21 @@ def after_request(resp):
@common.require_accepts_json
def update():
force = request.args.get('force', default='false', type=str)
try:
force = strtobool(force)
except ValueError:
force = False
config = current_app.config['INVENTORY_PROVIDER_CONFIG']
latch = get_latch(get_current_redis(config))
if latch and latch['pending']:
return Response(
response='an update is already in progress',
status=503,
mimetype="text/html")
if not force:
latch = get_latch(get_current_redis(config))
if latch and latch['pending']:
return Response(
response='an update is already in progress',
status=503,
mimetype="text/html")
job_ids = worker.launch_refresh_cache_all(
current_app.config["INVENTORY_PROVIDER_CONFIG"])
......
......@@ -30,9 +30,10 @@ TASK_STATUS_SCHEMA = {
def test_job_update_all(client, mocker):
expected_task_ids = ['abc', 'def', 'xyz@123#456']
launch_refresh_cache_all = mocker.patch(
'inventory_provider.tasks.worker.launch_refresh_cache_all')
launch_refresh_cache_all.return_value = ['abc', 'def', 'xyz@123#456']
launch_refresh_cache_all.return_value = expected_task_ids
rv = client.post(
'jobs/update',
......@@ -40,7 +41,60 @@ def test_job_update_all(client, mocker):
assert rv.status_code == 200
task_id_list = json.loads(rv.data.decode('utf-8'))
jsonschema.validate(task_id_list, TASK_ID_LIST_SCHEMA)
assert len(task_id_list) == 3
assert set(task_id_list) == set(expected_task_ids)
def test_job_update_force_pending(client, mocker):
expected_task_ids = ['22', 'agfafg', 'asf#asdf%111', '234']
launch_refresh_cache_all = mocker.patch(
'inventory_provider.tasks.worker.launch_refresh_cache_all')
launch_refresh_cache_all.return_value = expected_task_ids
mocked_get_latch = mocker.patch(
'inventory_provider.routes.jobs.get_latch')
mocked_get_latch.return_value = {'pending': True}
rv = client.post(
'jobs/update?force=true',
headers=DEFAULT_REQUEST_HEADERS)
assert rv.status_code == 200
task_id_list = json.loads(rv.data.decode('utf-8'))
jsonschema.validate(task_id_list, TASK_ID_LIST_SCHEMA)
assert set(task_id_list) == set(expected_task_ids)
def test_job_update_pending_force_false(client, mocker):
def _assert_if_called(*args, **kwargs):
assert False
mocker.patch(
'inventory_provider.tasks.worker.launch_refresh_cache_all',
_assert_if_called)
mocked_get_latch = mocker.patch(
'inventory_provider.routes.jobs.get_latch')
mocked_get_latch.return_value = {'pending': True}
rv = client.post(
'jobs/update?force=no',
headers=DEFAULT_REQUEST_HEADERS)
assert rv.status_code == 503
def test_job_update_pending(client, mocker):
def _assert_if_called(*args, **kwargs):
assert False
mocker.patch(
'inventory_provider.tasks.worker.launch_refresh_cache_all',
_assert_if_called)
mocked_get_latch = mocker.patch(
'inventory_provider.routes.jobs.get_latch')
mocked_get_latch.return_value = {'pending': True}
rv = client.post(
'jobs/update',
headers=DEFAULT_REQUEST_HEADERS)
assert rv.status_code == 503
class MockedAsyncResult(object):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment