summary refs log tree commit diff stats
path: root/tests/osproc
diff options
context:
space:
mode:
Diffstat (limited to 'tests/osproc')
-rw-r--r--tests/osproc/passenv.nim2
-rw-r--r--tests/osproc/ta_in.nim9
-rw-r--r--tests/osproc/ta_out.nim33
-rw-r--r--tests/osproc/tafalse.nim7
-rw-r--r--tests/osproc/tclose.nim8
-rw-r--r--tests/osproc/texecps.nim4
-rw-r--r--tests/osproc/texitcode.nim23
-rw-r--r--tests/osproc/tnoexe.nim27
-rw-r--r--tests/osproc/treadlines.nim23
-rw-r--r--tests/osproc/tstderr.nim37
-rw-r--r--tests/osproc/tstdin.nim17
-rw-r--r--tests/osproc/tstdout.nim31
-rw-r--r--tests/osproc/twaitforexit.nim38
13 files changed, 97 insertions, 162 deletions
diff --git a/tests/osproc/passenv.nim b/tests/osproc/passenv.nim
index 815f7536f..40b1c3f7c 100644
--- a/tests/osproc/passenv.nim
+++ b/tests/osproc/passenv.nim
@@ -1,7 +1,7 @@
 discard """
   file: "passenv.nim"
   output: "123"
-  targets: "c c++ objc"
+  targets: "c cpp objc"
 """
 
 import osproc, os, strtabs
diff --git a/tests/osproc/ta_in.nim b/tests/osproc/ta_in.nim
deleted file mode 100644
index fb294ec14..000000000
--- a/tests/osproc/ta_in.nim
+++ /dev/null
@@ -1,9 +0,0 @@
-discard """
-action: compile
-"""
-
-# This file is prefixed with an "a", because other tests
-# depend on it and it must be compiled first.
-import strutils
-let x = stdin.readLine()
-echo x.parseInt + 5
diff --git a/tests/osproc/ta_out.nim b/tests/osproc/ta_out.nim
deleted file mode 100644
index 01b78eb11..000000000
--- a/tests/osproc/ta_out.nim
+++ /dev/null
@@ -1,33 +0,0 @@
-discard """
-output: '''
-start ta_out
-to stdout
-to stdout
-to stderr
-to stderr
-to stdout
-to stdout
-end ta_out
-'''
-"""
-
-echo "start ta_out"
-
-# This file is prefixed with an "a", because other tests
-# depend on it and it must be compiled first.
-stdout.writeLine("to stdout")
-stdout.flushFile()
-stdout.writeLine("to stdout")
-stdout.flushFile()
-
-stderr.writeLine("to stderr")
-stderr.flushFile()
-stderr.writeLine("to stderr")
-stderr.flushFile()
-
-stdout.writeLine("to stdout")
-stdout.flushFile()
-stdout.writeLine("to stdout")
-stdout.flushFile()
-
-echo "end ta_out"
diff --git a/tests/osproc/tafalse.nim b/tests/osproc/tafalse.nim
deleted file mode 100644
index 05a0bfce9..000000000
--- a/tests/osproc/tafalse.nim
+++ /dev/null
@@ -1,7 +0,0 @@
-discard """
-exitcode: 1
-"""
-
-# 'tafalse.nim' to ensure it is compiled before texitcode.nim
-import system
-quit(QuitFailure)
diff --git a/tests/osproc/tclose.nim b/tests/osproc/tclose.nim
index d466b466a..1c99237c7 100644
--- a/tests/osproc/tclose.nim
+++ b/tests/osproc/tclose.nim
@@ -13,12 +13,12 @@ when defined(linux):
   let initCount = countFds()
 
   let p = osproc.startProcess("echo", options={poUsePath})
-  assert countFds() == initCount + 3
+  doAssert countFds() == initCount + 3
   p.close
-  assert countFds() == initCount
+  doAssert countFds() == initCount
 
   let p1 = osproc.startProcess("echo", options={poUsePath})
   discard p1.inputStream
-  assert countFds() == initCount + 3
+  doAssert countFds() == initCount + 3
   p.close
-  assert countFds() == initCount
+  doAssert countFds() == initCount
diff --git a/tests/osproc/texecps.nim b/tests/osproc/texecps.nim
index 10715fa0f..b818fe8eb 100644
--- a/tests/osproc/texecps.nim
+++ b/tests/osproc/texecps.nim
@@ -1,3 +1,7 @@
+discard """
+joinable: false
+"""
+
 import osproc, streams, strutils, os
 
 const NumberOfProcesses = 13
diff --git a/tests/osproc/texitcode.nim b/tests/osproc/texitcode.nim
deleted file mode 100644
index 558017716..000000000
--- a/tests/osproc/texitcode.nim
+++ /dev/null
@@ -1,23 +0,0 @@
-discard """
-  output: ""
-"""
-
-import osproc, os
-
-const filename = when defined(Windows): "tafalse.exe" else: "tafalse"
-let dir = getCurrentDir() / "tests" / "osproc"
-doAssert fileExists(dir / filename)
-
-var p = startProcess(filename, dir)
-doAssert(waitForExit(p) == QuitFailure)
-
-p = startProcess(filename, dir)
-var running = true
-while running:
-  running = running(p)
-doAssert(waitForExit(p) == QuitFailure)
-
-# make sure that first call to running() after process exit returns false
-p = startProcess(filename, dir)
-os.sleep(500)
-doAssert(not running(p))
diff --git a/tests/osproc/tnoexe.nim b/tests/osproc/tnoexe.nim
new file mode 100644
index 000000000..19a3cca67
--- /dev/null
+++ b/tests/osproc/tnoexe.nim
@@ -0,0 +1,27 @@
+discard """
+  output: '''true
+true'''
+"""
+
+import std/osproc
+
+const command = "lsaaa -lah"
+
+try:
+  let process = startProcess(command, options = {poUsePath})
+  discard process.waitForExit()
+except OSError as e:
+  echo e.errorCode != 0
+
+# `poEvalCommand`, invokes the system shell to run the specified command
+try:
+  let process = startProcess(command, options = {poUsePath, poEvalCommand})
+  # linux
+  let exitCode = process.waitForExit()
+  echo exitCode != 0
+except OSError as e:
+  # Because the implementation of `poEvalCommand` on different platforms is inconsistent, 
+  # Linux will not throw an exception, but Windows will throw an exception
+
+  # windows
+  echo e.errorCode != 0
diff --git a/tests/osproc/treadlines.nim b/tests/osproc/treadlines.nim
new file mode 100644
index 000000000..bb6a7f129
--- /dev/null
+++ b/tests/osproc/treadlines.nim
@@ -0,0 +1,23 @@
+discard """
+  output: '''
+Error: cannot open 'a.nim'
+Error: cannot open 'b.nim'
+'''
+  targets: "c"
+"""
+
+import osproc
+from std/os import getCurrentCompilerExe
+
+var ps: seq[Process] # compile & run 2 progs in parallel
+const nim = getCurrentCompilerExe()
+for prog in ["a", "b"]:
+  ps.add startProcess(nim, "",
+                      ["r", "--hint:Conf:off", "--hint:Processing:off", prog],
+                      options = {poUsePath, poDaemon, poStdErrToStdOut})
+
+for p in ps:
+  let (lines, exCode) = p.readLines
+  if exCode != 0:
+    for line in lines: echo line
+  p.close
diff --git a/tests/osproc/tstderr.nim b/tests/osproc/tstderr.nim
deleted file mode 100644
index 55b11eba5..000000000
--- a/tests/osproc/tstderr.nim
+++ /dev/null
@@ -1,37 +0,0 @@
-discard """
-  output: '''
-start tstderr
---------------------------------------
-to stderr
-to stderr
---------------------------------------
-'''
-"""
-
-echo "start tstderr"
-
-import osproc, os, streams
-
-const filename = "ta_out".addFileExt(ExeExt)
-
-doAssert fileExists(getCurrentDir() / "tests" / "osproc" / filename)
-
-var p = startProcess(filename, getCurrentDir() / "tests" / "osproc",
-                     options={})
-
-try:
-  let stdoutStream = p.outputStream
-  let stderrStream = p.errorStream
-  var x = newStringOfCap(120)
-  var output = ""
-  while stderrStream.readLine(x.TaintedString):
-    output.add(x & "\n")
-
-  echo "--------------------------------------"
-  stdout.flushFile()
-  stderr.write output
-  stderr.flushFile()
-  echo "--------------------------------------"
-  stdout.flushFile()
-finally:
-  p.close()
diff --git a/tests/osproc/tstdin.nim b/tests/osproc/tstdin.nim
deleted file mode 100644
index 8579680ab..000000000
--- a/tests/osproc/tstdin.nim
+++ /dev/null
@@ -1,17 +0,0 @@
-discard """
-  output: "10"
-"""
-import osproc, os, streams
-
-const filename = when defined(Windows): "ta_in.exe" else: "ta_in"
-
-doAssert fileExists(getCurrentDir() / "tests" / "osproc" / filename)
-
-var p = startProcess(filename, getCurrentDir() / "tests" / "osproc")
-p.inputStream.write("5\n")
-p.inputStream.flush()
-
-var line = ""
-
-while p.outputStream.readLine(line.TaintedString):
-  echo line
diff --git a/tests/osproc/tstdout.nim b/tests/osproc/tstdout.nim
deleted file mode 100644
index e3ed3986a..000000000
--- a/tests/osproc/tstdout.nim
+++ /dev/null
@@ -1,31 +0,0 @@
-discard """
-  output: '''--------------------------------------
-start ta_out
-to stdout
-to stdout
-to stderr
-to stderr
-to stdout
-to stdout
-end ta_out
---------------------------------------
-'''
-"""
-import osproc, os, streams
-
-const filename = when defined(Windows): "ta_out.exe" else: "ta_out"
-
-doAssert fileExists(getCurrentDir() / "tests" / "osproc" / filename)
-
-var p = startProcess(filename, getCurrentDir() / "tests" / "osproc",
-                     options={poStdErrToStdOut})
-
-let outputStream = p.outputStream
-var x = newStringOfCap(120)
-var output = ""
-while outputStream.readLine(x.TaintedString):
-  output.add(x & "\n")
-
-echo "--------------------------------------"
-stdout.write output
-echo "--------------------------------------"
diff --git a/tests/osproc/twaitforexit.nim b/tests/osproc/twaitforexit.nim
new file mode 100644
index 000000000..535faca63
--- /dev/null
+++ b/tests/osproc/twaitforexit.nim
@@ -0,0 +1,38 @@
+import std/[osproc, os, times]
+
+block: # bug #5091
+    when defined(linux):
+        const filename = "false"
+        var p = startProcess(filename, options = {poStdErrToStdOut, poUsePath})
+        os.sleep(1000) # make sure process has exited already
+
+        let atStart = getTime()
+        const msWait = 2000
+
+        try:
+            discard waitForExit(p, msWait)
+        except OSError:
+            discard
+
+        # check that we don't have to wait msWait milliseconds
+        doAssert(getTime() <  atStart + milliseconds(msWait))
+
+block: # bug #23825
+
+    # the sleep command might not be available in all Windows installations
+
+    when defined(linux):
+
+        var thr: array[0..99, Thread[int]]
+
+        proc threadFunc(i: int) {.thread.} =
+            let sleepTime = float(i) / float(thr.len + 1)
+            doAssert sleepTime < 1.0
+            let p = startProcess("sleep", workingDir = "", args = @[$sleepTime], options = {poUsePath, poParentStreams})
+            # timeout = 1_000_000 seconds ~= 278 hours ~= 11.5 days
+            doAssert p.waitForExit(timeout=1_000_000_000) == 0
+
+        for i in low(thr)..high(thr):
+            createThread(thr[i], threadFunc, i)
+
+        joinThreads(thr)