Fixed inconsistent EventletContextManagerSpawnTest failures

The test spawns a greenthread and expects it to complete after
eventlet.sleep(0) call. The problem is that if there are other
greenthreads currently running, sleep(0) may switch to unexpected
thread, which may result in test thread not being invoked at all.
Instead of assuming no other green threads are running at the moment
of test execution, explicitly wait() for the test thread.

Change-Id: Id45307860733658638b74ed3a713493df8c1080d
Closes-Bug: #1282706
This commit is contained in:
Ihar Hrachyshka 2014-03-21 18:57:39 +01:00
parent 66bb4f3cc6
commit d4c04255f4
2 changed files with 14 additions and 6 deletions

View File

@ -57,6 +57,8 @@ def spawn_with(ctxt, pool):
thread = pool.spawn(callback) thread = pool.spawn(callback)
thread.link(complete, ctxt.__exit__) thread.link(complete, ctxt.__exit__)
return thread
class EventletExecutor(base.ExecutorBase): class EventletExecutor(base.ExecutorBase):

View File

@ -105,8 +105,8 @@ class EventletContextManagerSpawnTest(test_utils.BaseTestCase):
self.mgr = context_mgr() self.mgr = context_mgr()
def test_normal_run(self): def test_normal_run(self):
impl_eventlet.spawn_with(self.mgr, pool=eventlet) thread = impl_eventlet.spawn_with(self.mgr, pool=eventlet)
eventlet.sleep(0) thread.wait()
self.assertEqual(self.before.call_count, 1) self.assertEqual(self.before.call_count, 1)
self.assertEqual(self.callback.call_count, 1) self.assertEqual(self.callback.call_count, 1)
self.assertEqual(self.after.call_count, 1) self.assertEqual(self.after.call_count, 1)
@ -114,8 +114,11 @@ class EventletContextManagerSpawnTest(test_utils.BaseTestCase):
def test_excepted_exception(self): def test_excepted_exception(self):
self.callback.side_effect = ExceptedException self.callback.side_effect = ExceptedException
impl_eventlet.spawn_with(self.mgr, pool=eventlet) thread = impl_eventlet.spawn_with(self.mgr, pool=eventlet)
eventlet.sleep(0) try:
thread.wait()
except ExceptedException:
pass
self.assertEqual(self.before.call_count, 1) self.assertEqual(self.before.call_count, 1)
self.assertEqual(self.callback.call_count, 1) self.assertEqual(self.callback.call_count, 1)
self.assertEqual(self.after.call_count, 1) self.assertEqual(self.after.call_count, 1)
@ -123,8 +126,11 @@ class EventletContextManagerSpawnTest(test_utils.BaseTestCase):
def test_unexcepted_exception(self): def test_unexcepted_exception(self):
self.callback.side_effect = Exception self.callback.side_effect = Exception
impl_eventlet.spawn_with(self.mgr, pool=eventlet) thread = impl_eventlet.spawn_with(self.mgr, pool=eventlet)
eventlet.sleep(0) try:
thread.wait()
except Exception:
pass
self.assertEqual(self.before.call_count, 1) self.assertEqual(self.before.call_count, 1)
self.assertEqual(self.callback.call_count, 1) self.assertEqual(self.callback.call_count, 1)
self.assertEqual(self.after.call_count, 0) self.assertEqual(self.after.call_count, 0)