summary refs log tree commit diff stats
path: root/tests/stdlib/tosprocterminate.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/stdlib/tosprocterminate.nim')
-rw-r--r--tests/stdlib/tosprocterminate.nim44
1 files changed, 44 insertions, 0 deletions
diff --git a/tests/stdlib/tosprocterminate.nim b/tests/stdlib/tosprocterminate.nim
new file mode 100644
index 000000000..93b0317f7
--- /dev/null
+++ b/tests/stdlib/tosprocterminate.nim
@@ -0,0 +1,44 @@
+discard """
+  cmd: "nim $target $options -r $file"
+  targets: "c cpp"
+  matrix: "--mm:refc; --mm:orc"
+"""
+
+import os, osproc, times, std / monotimes
+import std/assertions
+
+when defined(windows):
+  const ProgramWhichDoesNotEnd = "notepad"
+elif defined(openbsd):
+  const ProgramWhichDoesNotEnd = "/bin/cat"
+else:
+  const ProgramWhichDoesNotEnd = "/bin/sh"
+
+echo("starting " & ProgramWhichDoesNotEnd)
+var process = startProcess(ProgramWhichDoesNotEnd)
+sleep(500)
+echo("stopping process")
+process.terminate()
+var TimeToWait = 5000
+while process.running() and TimeToWait > 0:
+  sleep(100)
+  TimeToWait = TimeToWait - 100
+
+doAssert not process.running()
+echo("stopped process")
+
+process.close()
+
+echo("starting " & ProgramWhichDoesNotEnd)
+process = startProcess(ProgramWhichDoesNotEnd)
+echo("process should be stopped after 2s")
+
+let start = getMonoTime()
+discard process.waitForExit(2000)
+let took = getMonoTime() - start
+
+doAssert not process.running()
+# some additional time to account for overhead
+doAssert took < initDuration(seconds = 3)
+
+echo("stopped process after ", took)