diff options
Diffstat (limited to 'tests/async/tasyncexceptions.nim')
-rw-r--r-- | tests/async/tasyncexceptions.nim | 40 |
1 files changed, 40 insertions, 0 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() |