Skip to content

Commit 29c8185

Browse files
committed
Add concurrent teardown test
1 parent a03f2ca commit 29c8185

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

testing/test_basic.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,60 @@ def test_succeed(foo):
207207
assert_outcomes(rr, {"passed": 2, "failed": 1})
208208

209209

210+
@skip_if_no_async_await()
211+
def test_async_fixture_concurrent_teardown(testdir, cmd_opts):
212+
test_file = """
213+
import time
214+
215+
from twisted.internet import reactor, defer
216+
import pytest
217+
import pytest_twisted
218+
219+
def sleep(seconds):
220+
d = defer.Deferred()
221+
222+
reactor.callLater(seconds, d.callback, None)
223+
224+
return d
225+
226+
short_times = []
227+
long_times = []
228+
229+
short_time = 0.100
230+
long_time = 1
231+
232+
@pytest.fixture
233+
async def short():
234+
yield 42
235+
236+
short_times.append(time.time())
237+
await sleep(short_time)
238+
short_times.append(time.time())
239+
240+
@pytest.fixture
241+
async def long():
242+
yield 37
243+
244+
long_times.append(time.time())
245+
await sleep(short_time)
246+
long_times.append(time.time())
247+
248+
assert len(short_times) == 2
249+
250+
# long should start before short finishes
251+
assert long_times[0] < short_times[1]
252+
# short should finish before long finishes
253+
assert short_times[1] < long_times[1]
254+
255+
@pytest_twisted.inlineCallbacks
256+
def test_succeed(short, long):
257+
yield sleep(0)
258+
"""
259+
testdir.makepyfile(test_file)
260+
rr = testdir.run(sys.executable, "-m", "pytest", "-v", *cmd_opts)
261+
assert_outcomes(rr, {"passed": 1})
262+
263+
210264
@skip_if_no_async_generators()
211265
def test_async_fixture_yield(testdir, cmd_opts):
212266
test_file = """

0 commit comments

Comments
 (0)