mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
os: make process_test.v more portable (prepare for windows)
This commit is contained in:
parent
c37daba41d
commit
5d653a37b6
@ -53,19 +53,20 @@ fn main() {
|
||||
args := os.args[1..]
|
||||
if '-h' in args || '--help' in args {
|
||||
println("Usage:
|
||||
test_os_process [-v] [-h] [-target stderr/stdout/both/alternate] [-exitcode 0] [-timeout_ms 1000] [-period_ms 100]
|
||||
test_os_process [-v] [-h] [-target stderr/stdout/both/alternate] [-exitcode 0] [-timeout_ms 200] [-period_ms 50]
|
||||
Prints lines periodically (-period_ms), to stdout/stderr (-target).
|
||||
After a while (-timeout_ms), exit with (-exitcode).
|
||||
This program is useful for platform independent testing
|
||||
of child process/standart input/output control.
|
||||
It is used in V's `os` module tests.
|
||||
")
|
||||
return
|
||||
}
|
||||
ctx.is_verbose = '-v' in args
|
||||
ctx.target = s2target(cmdline.option(args, '-target', 'both'))
|
||||
ctx.exitcode = cmdline.option(args, '-exitcode', '0').int()
|
||||
ctx.timeout_ms = cmdline.option(args, '-timeout_ms', '1000').int()
|
||||
ctx.period_ms = cmdline.option(args, '-period_ms', '100').int()
|
||||
ctx.timeout_ms = cmdline.option(args, '-timeout_ms', '200').int()
|
||||
ctx.period_ms = cmdline.option(args, '-period_ms', '50').int()
|
||||
if ctx.target == .alternate {
|
||||
ctx.omode = .stdout
|
||||
}
|
||||
|
@ -1,6 +1,19 @@
|
||||
import os
|
||||
import time
|
||||
|
||||
const vexe = os.getenv('VEXE')
|
||||
|
||||
const vroot = os.dir(vexe)
|
||||
|
||||
const test_os_process = os.join_path(os.temp_dir(), 'v', 'test_os_process.exe')
|
||||
|
||||
const test_os_process_source = os.join_path(vroot, 'cmd/tools/test_os_process.v')
|
||||
|
||||
fn testsuite_begin() {
|
||||
os.rm(test_os_process) or { }
|
||||
assert os.system('$vexe -o $test_os_process $test_os_process_source') == 0
|
||||
}
|
||||
|
||||
fn test_getpid() {
|
||||
pid := os.getpid()
|
||||
eprintln('current pid: $pid')
|
||||
@ -12,8 +25,8 @@ fn test_run() {
|
||||
return
|
||||
}
|
||||
//
|
||||
mut p := os.new_process('/bin/sleep')
|
||||
p.set_args(['0.2'])
|
||||
mut p := os.new_process(test_os_process)
|
||||
p.set_args(['-timeout_ms', '150', '-period_ms', '50'])
|
||||
p.run()
|
||||
assert p.status == .running
|
||||
assert p.pid > 0
|
||||
@ -23,7 +36,9 @@ fn test_run() {
|
||||
if !p.is_alive() {
|
||||
break
|
||||
}
|
||||
os.system('ps -opid= -oppid= -ouser= -onice= -of= -ovsz= -orss= -otime= -oargs= -p $p.pid')
|
||||
$if trace_process_output ? {
|
||||
os.system('ps -opid= -oppid= -ouser= -onice= -of= -ovsz= -orss= -otime= -oargs= -p $p.pid')
|
||||
}
|
||||
time.wait(50 * time.millisecond)
|
||||
i++
|
||||
}
|
||||
@ -39,24 +54,38 @@ fn test_wait() {
|
||||
if os.user_os() == 'windows' {
|
||||
return
|
||||
}
|
||||
mut p := os.new_process('/bin/date')
|
||||
mut p := os.new_process(test_os_process)
|
||||
assert p.status != .exited
|
||||
p.wait()
|
||||
assert p.pid != os.getpid()
|
||||
assert p.code == 0
|
||||
assert p.status == .exited
|
||||
assert p.code == 0
|
||||
assert p.pid != os.getpid()
|
||||
}
|
||||
|
||||
fn test_slurping_output() {
|
||||
if os.user_os() == 'windows' {
|
||||
return
|
||||
}
|
||||
mut p := os.new_process('/bin/date')
|
||||
mut p := os.new_process(test_os_process)
|
||||
p.set_redirect_stdio()
|
||||
assert p.status != .exited
|
||||
p.wait()
|
||||
assert p.code == 0
|
||||
assert p.status == .exited
|
||||
assert p.code == 0
|
||||
output := p.stdout_slurp().trim_space()
|
||||
errors := p.stderr_slurp().trim_space()
|
||||
eprintln('p output: "$output"')
|
||||
eprintln('p errors: "$errors"')
|
||||
$if trace_process_output ? {
|
||||
eprintln('---------------------------')
|
||||
eprintln('p output: "$output"')
|
||||
eprintln('p errors: "$errors"')
|
||||
eprintln('---------------------------')
|
||||
}
|
||||
assert output.contains('stdout, 1')
|
||||
assert output.contains('stdout, 2')
|
||||
assert output.contains('stdout, 3')
|
||||
assert output.contains('stdout, 4')
|
||||
assert errors.contains('stderr, 1')
|
||||
assert errors.contains('stderr, 2')
|
||||
assert errors.contains('stderr, 3')
|
||||
assert errors.contains('stderr, 4')
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user