diff options
Diffstat (limited to 'tests/async')
-rw-r--r-- | tests/async/tasyncexceptions.nim | 40 | ||||
-rw-r--r-- | tests/async/tasynciossl.nim | 3 |
2 files changed, 42 insertions, 1 deletions
diff --git a/tests/async/tasyncexceptions.nim b/tests/async/tasyncexceptions.nim new file mode 100644 index 000000000..ca73c6a3d --- /dev/null +++ b/tests/async/tasyncexceptions.nim @@ -0,0 +1,40 @@ +discard """ + file: "tasyncexceptions.nim" + exitcode: 1 + outputsub: "Error: unhandled exception: foobar [E_Base]" +""" +import asyncdispatch + +proc accept(): PFuture[int] {.async.} = + await sleepAsync(100) + result = 4 + +proc recvLine(fd: int): PFuture[string] {.async.} = + await sleepAsync(100) + return "get" + +proc processClient(fd: int) {.async.} = + # these finish synchronously, we need some async delay to emulate this bug. + var line = await recvLine(fd) + var foo = line[0] + if foo == 'g': + raise newException(EBase, "foobar") + + +proc serve() {.async.} = + + while true: + var fut = await accept() + await processClient(fut) + +when isMainModule: + proc main = + var fut = serve() + fut.callback = + proc () = + if fut.failed: + # This test ensures that this exception crashes the application + # as it is not handled. + raise fut.error + runForever() + main() diff --git a/tests/async/tasynciossl.nim b/tests/async/tasynciossl.nim index 26c4c587c..6b38fcf7b 100644 --- a/tests/async/tasynciossl.nim +++ b/tests/async/tasynciossl.nim @@ -5,7 +5,8 @@ discard """ """ import sockets, asyncio, strutils, times -var disp = newDispatcher() +var disp {.threadvar.}: PDispatcher +disp = newDispatcher() var msgCount = 0 when defined(ssl): |