summary refs log tree commit diff stats
path: root/tests/async/tasyncexceptions.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/async/tasyncexceptions.nim')
-rw-r--r--tests/async/tasyncexceptions.nim40
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..de61c099d
--- /dev/null
+++ b/tests/async/tasyncexceptions.nim
@@ -0,0 +1,40 @@
+discard """
+  outputsub: "Error: unhandled exception: foobar"
+  exitcode: 1
+"""
+import asyncdispatch
+
+# Note: This is a test case for a bug.
+
+proc accept(): Future[int] {.async.} =
+  await sleepAsync(100)
+  result = 4
+
+proc recvLine(fd: int): Future[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(Exception, "foobar")
+
+proc serve() {.async.} =
+
+  while true:
+    var fut = await accept()
+    await processClient(fut)
+
+when true:
+  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()