[tor-commits] [stem/master] Use threading.Event in event listener tests

atagar at torproject.org atagar at torproject.org
Tue Dec 18 05:29:08 UTC 2012


commit f5620f2dbd4bbd5c3bdcb2c19abad765f4e324c3
Author: Sean Robinson <seankrobinson at gmail.com>
Date:   Sat Dec 15 15:28:11 2012 -0700

    Use threading.Event in event listener tests
    
    wait() up to two seconds, for a threading.Event to be set() in the
    test event listener before continuing assertions.
    
    This should speed up success or failure in these tests, even if not by
    much.  test_event_handling() goes from a constant time of 5 seconds, to
    a variable 4-8 seconds, with 4 seconds most common in my testing.
    test_reattaching_listeners() goes from a constant 6 seconds, to a variable
    4-6 seconds.
    
    Signed-off-by: Sean Robinson <seankrobinson at gmail.com>
---
 test/integ/control/controller.py |   28 ++++++++++++++++++++--------
 1 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/test/integ/control/controller.py b/test/integ/control/controller.py
index 2672f5f..e3abdbd 100644
--- a/test/integ/control/controller.py
+++ b/test/integ/control/controller.py
@@ -9,6 +9,7 @@ import re
 import shutil
 import socket
 import tempfile
+import threading
 import time
 import unittest
 
@@ -58,13 +59,16 @@ class TestController(unittest.TestCase):
     
     if test.runner.require_control(self): return
     
+    event_notice1, event_notice2 = threading.Event(), threading.Event()
     event_buffer1, event_buffer2 = [], []
     
     def listener1(event):
       event_buffer1.append(event)
+      event_notice1.set()
     
     def listener2(event):
       event_buffer2.append(event)
+      event_notice2.set()
     
     runner = test.runner.get_runner()
     with runner.get_tor_controller() as controller:
@@ -74,19 +78,24 @@ class TestController(unittest.TestCase):
       # BW events occure at the rate of one per second, so wait a bit to let
       # some accumulate.
       
-      time.sleep(3)
+      event_notice1.wait(2)
+      self.assertTrue(len(event_buffer1) >= 1)
+      event_notice1.clear()
       
-      self.assertTrue(len(event_buffer1) >= 2)
-      self.assertTrue(len(event_buffer2) >= 2)
+      event_notice2.wait(2)
+      self.assertTrue(len(event_buffer2) >= 1)
+      event_notice2.clear()
       
       # Checking that a listener's no longer called after being removed.
       
       controller.remove_event_listener(listener2)
       
       buffer2_size = len(event_buffer2)
-      time.sleep(2)
       
-      self.assertTrue(len(event_buffer1) >= 4)
+      event_notice1.wait(2)
+      self.assertTrue(len(event_buffer1) >= 2)
+      
+      event_notice2.wait(2)
       self.assertEqual(buffer2_size, len(event_buffer2))
       
       for event in event_buffer1:
@@ -106,10 +115,12 @@ class TestController(unittest.TestCase):
     
     if test.runner.require_control(self): return
     
+    event_notice = threading.Event()
     event_buffer = []
     
     def listener(event):
       event_buffer.append(event)
+      event_notice.set()
     
     runner = test.runner.get_runner()
     with runner.get_tor_controller() as controller:
@@ -117,15 +128,16 @@ class TestController(unittest.TestCase):
       
       # get a BW event or two
       
-      time.sleep(2)
+      event_notice.wait(2)
       self.assertTrue(len(event_buffer) >= 1)
       
       # disconnect and check that we stop getting events
       
       controller.close()
+      event_notice.clear()
       event_buffer = []
       
-      time.sleep(2)
+      event_notice.wait(2)
       self.assertTrue(len(event_buffer) == 0)
       
       # reconnect and check that we get events again
@@ -133,7 +145,7 @@ class TestController(unittest.TestCase):
       controller.connect()
       controller.authenticate()
       
-      time.sleep(2)
+      event_notice.wait(2)
       self.assertTrue(len(event_buffer) >= 1)
   
   def test_getinfo(self):





More information about the tor-commits mailing list