diff mbox

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

Message ID 1470159883-4648-2-git-send-email-pboca@cloudbasesolutions.com
State Changes Requested
Headers show

Commit Message

Paul Boca Aug. 2, 2016, 5:45 p.m. UTC
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@cloudbasesolutions.com>
Acked-by: Alin Gabriel Serdean <aserdean@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
V10: No changes
V11: 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(-)

Comments

Gurucharan Shetty Aug. 3, 2016, 3:35 p.m. UTC | #1
On 2 August 2016 at 10:45, Paul Boca <pboca@cloudbasesolutions.com> wrote:

> 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@cloudbasesolutions.com>
> Acked-by: Alin Gabriel Serdean <aserdean@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
> V10: No changes
> V11: 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
>

I removed the above change and applied.


>
>  _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 88180a3..e9d4510 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
>
>
> @@ -676,7 +676,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
> _______________________________________________
> dev mailing list
> dev@openvswitch.org
> http://openvswitch.org/mailman/listinfo/dev
>
diff mbox

Patch

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 88180a3..e9d4510 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
 
 
@@ -676,7 +676,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,