From 19ad29d23a80af39162af1a6996a81d7ccc00c64 Mon Sep 17 00:00:00 2001 From: Guido Trotter <ultrotter@google.com> Date: Wed, 19 May 2010 22:52:03 +0100 Subject: [PATCH] Fix race condition in mainloop unittest Currently, in testDeferredCancel if the self._CancelEvent are entered more than 0.3 seconds after the _SendSig have been entered, the test could fail. This is unlikely but may happen. To avoid it we use enterabs, to use absolute times. Signed-off-by: Guido Trotter <ultrotter@google.com> Reviewed-by: Michael Hanselmann <hansmi@google.com> --- test/ganeti.daemon_unittest.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/test/ganeti.daemon_unittest.py b/test/ganeti.daemon_unittest.py index 7b0cfe50a..7bf9d813b 100755 --- a/test/ganeti.daemon_unittest.py +++ b/test/ganeti.daemon_unittest.py @@ -25,6 +25,7 @@ import unittest import signal import os import socket +import time from ganeti import daemon @@ -82,13 +83,17 @@ class TestMainloop(testutils.GanetiTestCase): def testDeferredCancel(self): self.mainloop.RegisterSignal(self) - self.mainloop.scheduler.enter(0.1, 1, self._SendSig, [signal.SIGCHLD]) - handle1 = self.mainloop.scheduler.enter(0.3, 2, self._SendSig, - [signal.SIGCHLD]) - handle2 = self.mainloop.scheduler.enter(0.4, 2, self._SendSig, - [signal.SIGCHLD]) - self.mainloop.scheduler.enter(0, 1, self._CancelEvent, [handle1]) - self.mainloop.scheduler.enter(0, 1, self._CancelEvent, [handle2]) + now = time.time() + self.mainloop.scheduler.enterabs(now + 0.1, 1, self._SendSig, + [signal.SIGCHLD]) + handle1 = self.mainloop.scheduler.enterabs(now + 0.3, 2, self._SendSig, + [signal.SIGCHLD]) + handle2 = self.mainloop.scheduler.enterabs(now + 0.4, 2, self._SendSig, + [signal.SIGCHLD]) + self.mainloop.scheduler.enterabs(now + 0.2, 1, self._CancelEvent, + [handle1]) + self.mainloop.scheduler.enterabs(now + 0.2, 1, self._CancelEvent, + [handle2]) self.mainloop.scheduler.enter(0.5, 1, self._SendSig, [signal.SIGTERM]) self.mainloop.Run() self.assertEquals(self.sendsig_events, [signal.SIGCHLD, signal.SIGTERM]) -- GitLab