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:
parent
66bb4f3cc6
commit
d4c04255f4
@ -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):
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user