[ovs-dev] [PATCH V9 01/17] python tests: Implemented signal.alarm for Windows

Paul Boca pboca at cloudbasesolutions.com
Tue Jul 26 12:01:03 UTC 2016


signal.alarm is not available in Windows and would trigger an exception
when called. Implemented this to mentain compatibility between
Windows and Linux for python tests.

Signed-off-by: Paul-Daniel Boca <pboca at cloudbasesolutions.com>
Acked-by: Alin Gabriel Serdean <aserdean at cloudbasesolutions.com>
---
V2: No changes
V3: Code styling changes
V4: No changes
V5: No changes
V6: No changes
V7: Added function signal_alarm in fatal_signal.py to avoid
    duplicating code
V8: No changes
V9: No changes
---
 python/ovs/fatal_signal.py | 24 +++++++++++++++++++++++-
 tests/appctl.py            |  4 ++--
 tests/test-ovsdb.py        |  4 ++--
 tests/test-unix-socket.py  |  3 ++-
 4 files changed, 29 insertions(+), 6 deletions(-)

diff --git a/python/ovs/fatal_signal.py b/python/ovs/fatal_signal.py
index 7308039..14605ac 100644
--- a/python/ovs/fatal_signal.py
+++ b/python/ovs/fatal_signal.py
@@ -15,7 +15,7 @@
 import atexit
 import os
 import signal
-
+import sys
 import ovs.vlog
 
 _hooks = []
@@ -134,3 +134,25 @@ def _init():
             if signal.getsignal(signr) == signal.SIG_DFL:
                 signal.signal(signr, _signal_handler)
         atexit.register(_atexit_handler)
+
+
+def signal_alarm(timeout):
+    if sys.platform == "win32":
+        import os
+        import time
+        import threading
+
+        class Alarm (threading.Thread):
+            def __init__(self, timeout):
+                super(Alarm, self).__init__()
+                self.timeout = timeout
+                self.setDaemon(True)
+
+            def run(self):
+                time.sleep(self.timeout)
+                os._exit(1)
+
+        alarm = Alarm(timeout)
+        alarm.start()
+    else:
+        signal.alarm(timeout)
diff --git a/tests/appctl.py b/tests/appctl.py
index e5bcf2c..e4f0696 100644
--- a/tests/appctl.py
+++ b/tests/appctl.py
@@ -13,7 +13,6 @@
 # limitations under the License.
 
 import argparse
-import signal
 import sys
 
 import ovs.daemon
@@ -21,6 +20,7 @@ import ovs.unixctl
 import ovs.unixctl.client
 import ovs.util
 import ovs.vlog
+from ovs.fatal_signal import signal_alarm
 
 
 def connect_to_target(target):
@@ -52,7 +52,7 @@ def main():
     args = parser.parse_args()
 
     if args.timeout:
-        signal.alarm(int(args.timeout))
+        signal_alarm(int(args.timeout))
 
     ovs.vlog.Vlog.init()
     target = args.target
diff --git a/tests/test-ovsdb.py b/tests/test-ovsdb.py
index 83fe4af..c7c42c8 100644
--- a/tests/test-ovsdb.py
+++ b/tests/test-ovsdb.py
@@ -17,7 +17,6 @@ from __future__ import print_function
 import getopt
 import re
 import os
-import signal
 import sys
 import uuid
 
@@ -29,6 +28,7 @@ import ovs.db.types
 import ovs.ovsuuid
 import ovs.poller
 import ovs.util
+from ovs.fatal_signal import signal_alarm
 import six
 
 
@@ -647,7 +647,7 @@ def main(argv):
             except TypeError:
                 raise error.Error("value %s on -t or --timeout is not at "
                                   "least 1" % value)
-            signal.alarm(timeout)
+            signal_alarm(timeout)
         else:
             sys.exit(0)
 
diff --git a/tests/test-unix-socket.py b/tests/test-unix-socket.py
index ebfa054..c80fb13 100644
--- a/tests/test-unix-socket.py
+++ b/tests/test-unix-socket.py
@@ -19,6 +19,7 @@ import socket
 import sys
 
 import ovs.socket_util
+from ovs.fatal_signal import signal_alarm
 
 
 def main(argv):
@@ -33,7 +34,7 @@ def main(argv):
         sockname2 = sockname1
 
     signal.signal(signal.SIGALRM, signal.SIG_DFL)
-    signal.alarm(5)
+    signal_alarm(5)
 
     # Create a listening socket under name 'sockname1'.
     error, sock1 = ovs.socket_util.make_unix_socket(socket.SOCK_STREAM, False,
-- 
2.7.2.windows.1



More information about the dev mailing list