Wait until child process will be killed

It might take a wile to kill worker after receiving of sighup because
of worker can be busy at the time, so the check of the workers count
can be failed during some amount of time.
Add timeout for checking.

Change-Id: Ibdd29b07960b2f765b03ea9458b6e85cd6786fd0
Closes-bug: #1472531
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