From 568986b39fe47e3550e12539adb08a5015963070 Mon Sep 17 00:00:00 2001 From: Ryan Petrello Date: Fri, 28 Jul 2017 12:23:04 -0400 Subject: [PATCH] force isolated timeout settings to be positive integers see: https://github.com/ansible/ansible-tower/issues/7328 --- awx/main/conf.py | 3 +++ awx/main/tests/functional/api/test_settings.py | 16 ++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/awx/main/conf.py b/awx/main/conf.py index 01fdb902a0..50c3528083 100644 --- a/awx/main/conf.py +++ b/awx/main/conf.py @@ -175,6 +175,7 @@ register( register( 'AWX_ISOLATED_CHECK_INTERVAL', field_class=fields.IntegerField, + min_value=0, label=_('Isolated status check interval'), help_text=_('The number of seconds to sleep between status checks for jobs running on isolated instances.'), category=_('Jobs'), @@ -184,6 +185,7 @@ register( register( 'AWX_ISOLATED_LAUNCH_TIMEOUT', field_class=fields.IntegerField, + min_value=0, label=_('Isolated launch timeout'), help_text=_('The timeout (in seconds) for launching jobs on isolated instances. ' 'This includes the time needed to copy source control files (playbooks) to the isolated instance.'), @@ -194,6 +196,7 @@ register( register( 'AWX_ISOLATED_CONNECTION_TIMEOUT', field_class=fields.IntegerField, + min_value=0, default=10, label=_('Isolated connection timeout'), help_text=_('Ansible SSH connection timeout (in seconds) to use when communicating with isolated instances. ' diff --git a/awx/main/tests/functional/api/test_settings.py b/awx/main/tests/functional/api/test_settings.py index 08238853f2..1eed0100ab 100644 --- a/awx/main/tests/functional/api/test_settings.py +++ b/awx/main/tests/functional/api/test_settings.py @@ -243,3 +243,19 @@ def test_logging_aggregrator_connection_test_invalid(mocker, get, post, admin): 'LOG_AGGREGATOR_PORT': 8080 }, user=admin, expect=500) assert resp.data == {'error': '404: Not Found'} + + +@pytest.mark.django_db +@pytest.mark.parametrize('setting_name', [ + 'AWX_ISOLATED_CHECK_INTERVAL', + 'AWX_ISOLATED_LAUNCH_TIMEOUT', + 'AWX_ISOLATED_CONNECTION_TIMEOUT', +]) +def test_isolated_job_setting_validation(get, patch, admin, setting_name): + url = reverse('api:setting_singleton_detail', kwargs={'category_slug': 'jobs'}) + patch(url, user=admin, data={ + setting_name: -1 + }, expect=400) + + data = get(url, user=admin).data + assert data[setting_name] != -1