summaryrefslogtreecommitdiff
path: root/tests/modules/process/sched_process_pipe.lua
diff options
context:
space:
mode:
authorruki <[email protected]>2020-02-03 22:56:27 +0800
committerruki <[email protected]>2020-02-07 22:45:56 +0800
commit0320b5a0731fca04011d5149a0c7d956033e9140 (patch)
tree312d9193ed57a0216c48f6c5863c87cd0335a6e4 /tests/modules/process/sched_process_pipe.lua
parentcf9970fddd580f8b9bb8ed25d6d9cfa67a607b69 (diff)
fix pipe/socket.wait
Diffstat (limited to 'tests/modules/process/sched_process_pipe.lua')
-rw-r--r--tests/modules/process/sched_process_pipe.lua48
1 files changed, 48 insertions, 0 deletions
diff --git a/tests/modules/process/sched_process_pipe.lua b/tests/modules/process/sched_process_pipe.lua
new file mode 100644
index 000000000..d3690d619
--- /dev/null
+++ b/tests/modules/process/sched_process_pipe.lua
@@ -0,0 +1,48 @@
+import("core.base.pipe")
+import("core.base.bytes")
+import("core.base.scheduler")
+
+function _session_read_pipe(id, rpipeopt)
+ local results = {}
+ local pipe = rpipeopt.pipe
+ print("%s/%d: read ..", pipe, id)
+ while not rpipeopt.stop do
+ local real, data = pipe:read(8192)
+ if real > 0 then
+ table.insert(results, bytes(data, 1, real))
+ elseif real == 0 then
+ if pipe:wait(pipe.EV_READ, -1) < 0 then
+ break
+ end
+ else
+ break
+ end
+ end
+ if #results > 0 then
+ results = bytes(results)
+ end
+ print("%s/%d: read ok, size: %d", pipe, id, results:size())
+ if results:size() > 0 then
+ results:dump()
+ end
+ pipe:close()
+end
+
+function _session(id, program, ...)
+ local rpipe, wpipe = pipe.openpair(10)
+ local rpipeopt = {pipe = rpipe, stop = false}
+ scheduler.co_start(_session_read_pipe, i, rpipeopt)
+ local proc = process.openv(program, table.pack(...), {stdout = wpipe})
+ local ok, status = proc:wait(-1)
+ rpipeopt.stop = true
+ print("%s/%d: %d, status: %d", proc, id, ok, status)
+ proc:close()
+ wpipe:close()
+end
+
+function main(program, ...)
+ for i = 1, 10 do
+ scheduler.co_start(_session, i, program, ...)
+ end
+ scheduler.runloop()
+end