Add a unit test testing interaction between threads and processes.
This unit test tests that we can call 'accept-process-output' in parallel from multiple threads. * test/src/process-tests.el (process-tests/multiple-threads-waiting): New unit test.
This commit is contained in:
parent
17fec60370
commit
8dcb19fc5e
1 changed files with 29 additions and 0 deletions
|
@ -789,6 +789,35 @@ have written output."
|
|||
(should (equal calls
|
||||
(list (list process "finished\n"))))))))))
|
||||
|
||||
(ert-deftest process-tests/multiple-threads-waiting ()
|
||||
(skip-unless (fboundp 'make-thread))
|
||||
(with-timeout (60 (ert-fail "Test timed out"))
|
||||
(process-tests--with-processes processes
|
||||
(let ((threads ())
|
||||
(cat (executable-find "cat")))
|
||||
(skip-unless cat)
|
||||
(dotimes (i 10)
|
||||
(let* ((name (format "test %d" i))
|
||||
(process (make-process :name name
|
||||
:command (list cat)
|
||||
:coding 'no-conversion
|
||||
:noquery t
|
||||
:connection-type 'pipe)))
|
||||
(push process processes)
|
||||
(set-process-thread process nil)
|
||||
(push (make-thread
|
||||
(lambda ()
|
||||
(while (accept-process-output process)))
|
||||
name)
|
||||
threads)))
|
||||
(mapc #'process-send-eof processes)
|
||||
(cl-loop for process in processes
|
||||
and thread in threads
|
||||
do
|
||||
(thread-join thread)
|
||||
(should (eq (process-status process) 'exit))
|
||||
(should (eql (process-exit-status process) 0)))))))
|
||||
|
||||
(defun process-tests--eval (command form)
|
||||
"Return a command that evaluates FORM in an Emacs subprocess.
|
||||
COMMAND must be a list returned by
|
||||
|
|
Loading…
Add table
Reference in a new issue