Merge "Wait until child process will be killed"
diff --git a/common/config.py b/common/config.py
index 4f6ea3d..0de6480 100644
--- a/common/config.py
+++ b/common/config.py
@@ -109,6 +109,10 @@
                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/functional/test_reload_on_sighup.py b/functional/test_reload_on_sighup.py
index f987882..f149a58 100644
--- a/functional/test_reload_on_sighup.py
+++ b/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 @@
         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