Updated to hostap_2_6
[mech_eap.git] / libeap / tests / hwsim / test_fst_config.py
index 938cf9a..03287b2 100644 (file)
@@ -147,7 +147,7 @@ class FstLauncher:
             self.nof_aps -= 1
         else:
             self.nof_stas -= 1
-        config_file = self.get_cfg_pathname(cfg);
+        config_file = self.get_cfg_pathname(cfg)
         if os.path.exists(config_file):
             os.remove(config_file)
 
@@ -162,7 +162,7 @@ class FstLauncher:
                            'alt-hostapd/hostapd/hostapd')
         if not os.path.exists(prg):
             prg = '../../hostapd/hostapd'
-        cmd = [ prg, '-B', '-ddd',
+        cmd = [ prg, '-B', '-dddt',
                 '-P', pidfile, '-f', mylogfile, '-g', self.hapd_fst_global]
         for i in range(0, len(self.cfgs_to_run)):
             cfg = self.cfgs_to_run[i]
@@ -189,7 +189,7 @@ class FstLauncher:
                            'alt-wpa_supplicant/wpa_supplicant/wpa_supplicant')
         if not os.path.exists(prg):
             prg = '../../wpa_supplicant/wpa_supplicant'
-        cmd = [ prg, '-B', '-ddd',
+        cmd = [ prg, '-B', '-dddt',
                 '-P' + pidfile, '-f', mylogfile, '-g', self.wsup_fst_global ]
         sta_no = 0
         for i in range(0, len(self.cfgs_to_run)):
@@ -212,23 +212,39 @@ class FstLauncher:
         """Terminates hostapd/wpa_supplicant processes previously launched with
         run_hostapd/run_wpa_supplicant"""
         pidfile = self.fst_logpath + '/' + 'myhostapd.pid'
-        self.kill_pid(pidfile)
+        self.kill_pid(pidfile, self.nof_aps > 0)
         pidfile = self.fst_logpath + '/' + 'mywpa_supplicant.pid'
-        self.kill_pid(pidfile)
+        self.kill_pid(pidfile, self.nof_stas > 0)
         self.reg_ctrl.stop()
         while len(self.cfgs_to_run) != 0:
             cfg = self.cfgs_to_run[0]
             self.remove_cfg(cfg)
 
-    def kill_pid(self, pidfile):
+    def kill_pid(self, pidfile, try_again=False):
         """Kills process by PID file"""
         if not os.path.exists(pidfile):
-            return
+            if not try_again:
+                return
+            # It might take some time for the process to write the PID file,
+            # so wait a bit longer before giving up.
+            self.logger.info("kill_pid: pidfile %s does not exist - try again after a second" % pidfile)
+            time.sleep(1)
+            if not os.path.exists(pidfile):
+                self.logger.info("kill_pid: pidfile %s does not exist - could not kill the process" % pidfile)
+                return
         pid = -1
         try:
-            pf = file(pidfile, 'r')
-            pid = int(pf.read().strip())
-            pf.close()
+            for i in range(3):
+                pf = file(pidfile, 'r')
+                pidtxt = pf.read().strip()
+                self.logger.debug("kill_pid: %s: '%s'" % (pidfile, pidtxt))
+                pf.close()
+                try:
+                    pid = int(pidtxt)
+                    break
+                except Exception, e:
+                    self.logger.debug("kill_pid: No valid PID found: %s" % str(e))
+                    time.sleep(1)
             self.logger.debug("kill_pid %s --> pid %d" % (pidfile, pid))
             os.kill(pid, signal.SIGTERM)
             for i in range(10):