diff --git a/heat_integrationtests/common/config.py b/heat_integrationtests/common/config.py index 4f6ea3df71..0de6480457 100644 --- a/heat_integrationtests/common/config.py +++ b/heat_integrationtests/common/config.py @@ -109,6 +109,10 @@ IntegrationTestGroup = [ default=120, help="Timeout in seconds to wait for connectivity to " "server."), + cfg.IntOpt('sighup_timeout', + default=30, + help="Timeout in seconds to wait for adding or removing child" + "process after receiving of sighup signal") ] diff --git a/heat_integrationtests/functional/test_reload_on_sighup.py b/heat_integrationtests/functional/test_reload_on_sighup.py index f987882c01..f149a581d4 100644 --- a/heat_integrationtests/functional/test_reload_on_sighup.py +++ b/heat_integrationtests/functional/test_reload_on_sighup.py @@ -10,6 +10,8 @@ # License for the specific language governing permissions and limitations # under the License. +import time + import eventlet from oslo_concurrency import processutils @@ -67,11 +69,18 @@ class ReloadOnSighupTest(test.HeatIntegrationTest): self._set_config_value(service, 'workers', new_workers) cmd = "kill -HUP %s" % pre_reload_parent processutils.execute(cmd, shell=True) - # wait till heat-api reloads - eventlet.sleep(2) - post_reload_parent, post_reload_children = self._get_heat_api_pids( - service) + # wait till heat-api reloads + start_time = time.time() + while time.time() - start_time < self.conf.sighup_timeout: + post_reload_parent, post_reload_children = self._get_heat_api_pids( + service) + intersect = set(post_reload_children) & set(pre_reload_children) + if (new_workers == len(post_reload_children) + and pre_reload_parent == post_reload_parent + and intersect == set()): + break + eventlet.sleep(1) self.assertEqual(pre_reload_parent, post_reload_parent) self.assertEqual(new_workers, len(post_reload_children)) # test if all child processes are newly created