[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 8dcb19f 4/4: Add a unit test testing interaction between threads
master 8dcb19f 4/4: Add a unit test testing interaction between threads and processes.
Sat, 23 Jan 2021 13:12:29 -0500 (EST)
Author: Philipp Stephani <firstname.lastname@example.org>
Commit: Philipp Stephani <email@example.com>
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.
test/src/process-tests.el | 29 +++++++++++++++++++++++++++++
1 file changed, 29 insertions(+)
diff --git a/test/src/process-tests.el b/test/src/process-tests.el
index 949f735..676e1b1 100644
@@ -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)))
+ (mapc #'process-send-eof processes)
+ (cl-loop for process in processes
+ and thread in threads
+ (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