I wrote last night:
> > > ../pokernetwork/pokerlock                 103    102    99%   147

> I will take a look at this one again, but I think I need some help.  I
> wrote a test that covers it and it "locks" up intermittently. :) I could
> use some help on this if an expert in threading.Thread can help me. :)

I have committed the following change to the coverage-poker-network branch
that attempts to solve the timing problem with these coverage tests:
    http://svn.gna.org/viewcvs/pokersource?view=rev&rev=6008

I'd be curious for others' review of this change (also attached a patch,
copyrighted by me and licensed AGPLv3-or-later).

I think these changes address the timing issues.  The tests work for me;
I'm running them over and over again now to see if I can generate a timing
issue.

   -- bkuhn
diff --git a/poker-network/ChangeLog b/poker-network/ChangeLog
index fd33653..d1ce3ef 100644
--- a/poker-network/ChangeLog
+++ b/poker-network/ChangeLog
@@ -1,3 +1,18 @@
+2009-07-05  Bradley M. Kuhn  <[email protected]>
+
+	* tests/test-pokerlock.py.in
+	(PokerLockTestCase.test02_wait.locker2_failed): Commented back in
+	test and switch timeout on lock to 0.
+	(PokerLockTestCase.test01_simple): Commented back in but made
+	return True at top.
+	(PokerLockTestCase.test04_release_twice.validate)
+	(PokerLockTestCase.test06_aquireTimeout.lockFastTimeout)
+	(PokerLockTestCase.test07_mainTests_stopped)
+	(PokerLockTestCase.test02_wait.locker2)
+	(PokerLockTestCase.test03_acquire_dead)
+	(PokerLockTestCase.test04_release_twice.validate): Changed from
+	get_messages() comparisons to search_output()s.
+
 2009-07-04  Bradley M. Kuhn  <[email protected]>
 
 	* tests/run.in (COVERAGE_100_PERCENT): Added
diff --git a/poker-network/tests/test-pokerlock.py.in b/poker-network/tests/test-pokerlock.py.in
index 3c020d6..6da41aa 100644
--- a/poker-network/tests/test-pokerlock.py.in
+++ b/poker-network/tests/test-pokerlock.py.in
@@ -2,7 +2,7 @@
 # -*- mode: python -*-
 #
 # Copyright (C) 2007, 2008 Loic Dachary <[email protected]>
-# Copyright (C)       2008 Bradley M. Kuhn <[email protected]>
+# Copyright (C) 2008, 2009 Bradley M. Kuhn <[email protected]>
 # Copyright (C) 2006       Mekensleep <[email protected]>
 #                          24 rue vieille du temple, 75004 Paris
 #
@@ -30,7 +30,7 @@ import sys, os
 sys.path.insert(0, "@top_srcdir@")
 sys.path.insert(0, "..")
 
-from tests.testmessages import silence_all_messages, get_messages, clear_all_messages, search_output
+from tests.testmessages import silence_all_messages, clear_all_messages, search_output
 
 from twisted.python import failure
 from twisted.trial import unittest, runner, reporter
@@ -66,59 +66,62 @@ class PokerLockTestCase(unittest.TestCase):
         self.locker2.close()
         self.locker.close()
     # ----------------------------------------------------------------    
-#     def test01_simple(self):
-#         d = self.locker.acquire('lock01')
-#         def validate(result):
-#             if isinstance(result, failure.Failure): raise result
-#             for str in  ['loop, queue size',  '__acquire lock01',
-#                          '__acquire got MySQL lock', 'acquired' ]:
-#                 self.failUnless(search_output(str))
-#             self.assertEqual("lock01", result)
-#             self.locker.release('lock01')
-#             return result
+    def test01_simple(self):
+        """test01_simple
+        This test was discovered to have timing issues and is not needed
+        for 100% coverage so it is turned off."""
+        return True
+        d = self.locker.acquire('lock01')
+        def validate(result):
+            if isinstance(result, failure.Failure): raise result
+            for str in  ['loop, queue size',  '__acquire lock01',
+                         '__acquire got MySQL lock', 'acquired' ]:
+                self.failUnless(search_output(str))
+            self.assertEqual("lock01", result)
+            self.locker.release('lock01')
+            return result
         
-#         d.addBoth(validate)
-#         clear_all_messages()
-#         return d
+        d.addBoth(validate)
+        clear_all_messages()
+        return d
     # ----------------------------------------------------------------    
-#     def test02_wait(self):
-#         def locker2_succeeded(result):
-#             self.locker.release('lock01')
-#             self.fail("locker2 succeeded with result = %s : should have failed with timeout")
-#             self.locker2.close()
-
-#         def locker2_failed(result):
-#             msgs = get_messages()
-#             for str in [ '__acquire lock01', 'acquired', 'exception in function', 
-#                          'release because exception', 'loop, queue size']:
-#                 self.failUnless(search_output(str))
-
-#             self.locker.release('lock01')
-#             self.assertTrue(isinstance(result, failure.Failure))
-#             self.assertEqual(result.value[0], pokerlock.PokerLock.TIMED_OUT)
-#             clear_all_messages()
+    def test02_wait(self):
+        def locker2_succeeded(result):
+            self.locker.release('lock01')
+            self.fail("locker2 succeeded with result = %s : should have failed with timeout")
+            self.locker2.close()
+
+        def locker2_failed(result):
+            for str in [ '__acquire lock01', 'acquired', 'exception in function', 
+                         'release because exception', 'loop, queue size']:
+                self.failUnless(search_output(str))
+
+            self.locker.release('lock01')
+            self.assertTrue(isinstance(result, failure.Failure))
+            self.assertEqual(result.value[0], pokerlock.PokerLock.TIMED_OUT)
+            clear_all_messages()
             
-#         def locker2():
-#             d = self.locker2.acquire('lock01', 5)
-#             self.assertEquals(get_messages(), ['acquire'])
-#             clear_all_messages()
-#             d.addCallback(locker2_succeeded)
-#             d.addErrback(locker2_failed)
-#             return d
+        def locker2():
+            d = self.locker2.acquire('lock01', 0)
+            self.failUnless(search_output('acquire'))
+            clear_all_messages()
+            d.addCallback(locker2_succeeded)
+            d.addErrback(locker2_failed)
+            return d
             
-#         def validate(result):
-#             if isinstance(result, failure.Failure): raise result
-
-#             for str in ['loop, queue size', '__acquire lock01', 'acquired', '__acquire got MySQL lock']:
-#                 self.failUnless(search_output(str))
-#             self.assertEqual("lock01", result)
-#             clear_all_messages()
-#             return locker2()
-
-#         d = self.locker.acquire('lock01')
-#         clear_all_messages()
-#         d.addBoth(validate)
-#         return d
+        def validate(result):
+            if isinstance(result, failure.Failure): raise result
+
+            for str in ['loop, queue size', '__acquire lock01', 'acquired', '__acquire got MySQL lock']:
+                self.failUnless(search_output(str))
+            self.assertEqual("lock01", result)
+            clear_all_messages()
+            return locker2()
+
+        d = self.locker.acquire('lock01', 0)
+        clear_all_messages()
+        d.addBoth(validate)
+        return d
     # ----------------------------------------------------------------    
     def test03_acquire_dead(self):
         self.locker.close()
@@ -129,7 +132,7 @@ class PokerLockTestCase(unittest.TestCase):
         except Exception, e:
             problem = False
             self.assertEqual(e[0], pokerlock.PokerLock.DEAD)
-            self.assertEqual(get_messages(), ['acquire'])
+            self.failUnless(search_output('acquire'))
         if problem:
             self.fail("acquire on dead PokerLock did not raise exception")
     # ----------------------------------------------------------------    
@@ -143,7 +146,7 @@ class PokerLockTestCase(unittest.TestCase):
 
             clear_all_messages()
             self.locker.release("lock01")
-            self.assertEquals(get_messages(), ['release lock01'])
+            self.failUnless(search_output('release lock01'))
             clear_all_messages()
             try:
                 self.locker.release("lock01")
@@ -151,13 +154,13 @@ class PokerLockTestCase(unittest.TestCase):
             except Exception, e:
                 problem = False
                 self.assertEqual(e[0], pokerlock.PokerLock.RELEASE)
-                self.assertEquals(get_messages(), ['release lock01'])
+                self.failUnless(search_output('release lock01'))
             if problem:
                 self.fail("double release did not raise exception")
 
         clear_all_messages()
         d = self.locker.acquire('lock01')
-        self.assertEqual(get_messages(), ['acquire'])
+        self.failUnless(search_output('acquire'))
         clear_all_messages()
         d.addBoth(validate)
         return d
@@ -188,7 +191,6 @@ class PokerLockTestCase(unittest.TestCase):
                       % result)
 
         def lockTimeoutExpected_failed(result):
-            msgs = get_messages()
             self.failUnless(search_output('__acquire TIMED OUT'))
 
             self.assertTrue(isinstance(result, failure.Failure))
@@ -198,7 +200,7 @@ class PokerLockTestCase(unittest.TestCase):
         def lockFastTimeout():
             pokerlock.PokerLock.acquire_sleep = 60
             d = self.locker.acquire('lock01', 5)
-            self.assertEquals(get_messages(), ['acquire'])
+            self.failUnless(search_output('acquire'))
             clear_all_messages()
             d.addCallback(lockTimeoutExpected_succeeded)
             d.addErrback(lockTimeoutExpected_failed)
@@ -222,11 +224,11 @@ class PokerLockTestCase(unittest.TestCase):
     def test07_mainTests_stopped(self):
         clear_all_messages()
         self.locker.stopping()
-        self.assertEquals(get_messages(), [ "stopping" ])
+        self.failUnless(search_output("stopping"))
         d = defer.Deferred()
         def checker(val):
             self.failIf(self.locker.running)
-            self.assertEquals(get_messages(), [ "stopped" ])
+            self.failUnless(search_output("stopped"))
         clear_all_messages()
         reactor.callLater(pokerlock.PokerLock.acquire_sleep*3, lambda: d.callback(True))
         return d
_______________________________________________
Pokersource-users mailing list
[email protected]
https://mail.gna.org/listinfo/pokersource-users

Reply via email to