aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorMichael Albinus2019-06-10 17:53:15 +0200
committerMichael Albinus2019-06-10 17:53:15 +0200
commit03b66d23a863835484267a8085bb9112d9bdecae (patch)
tree5fe4734a0d8367d7ed8c2f334028125617ef8163 /test
parentfb39d31e45ec766421f3ba3e5792b5f0365741c2 (diff)
downloademacs-03b66d23a863835484267a8085bb9112d9bdecae.tar.gz
emacs-03b66d23a863835484267a8085bb9112d9bdecae.zip
Make tramp-test43-asynchronous-requests working, again
* test/lisp/net/tramp-tests.el (tramp-list-tramp-buffers): Declare `tramp-list-tramp-buffers'. (tramp--test-ignore-make-symbolic-link-error) (tramp--test-ignore-add-name-to-file-error): Improve declaration. (tramp--test-with-proper-process-name-and-buffer): New macro. (tramp-test43-asynchronous-requests): Use the macro for timer, process filter and process sentinel. Comment the remote file operation in the timer. Remove further async events. Accept output from all processes.
Diffstat (limited to 'test')
-rw-r--r--test/lisp/net/tramp-tests.el117
1 files changed, 77 insertions, 40 deletions
diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el
index 38f9af230a3..9bdd708c92d 100644
--- a/test/lisp/net/tramp-tests.el
+++ b/test/lisp/net/tramp-tests.el
@@ -55,6 +55,7 @@
55(declare-function tramp-get-remote-path "tramp-sh") 55(declare-function tramp-get-remote-path "tramp-sh")
56(declare-function tramp-get-remote-perl "tramp-sh") 56(declare-function tramp-get-remote-perl "tramp-sh")
57(declare-function tramp-get-remote-stat "tramp-sh") 57(declare-function tramp-get-remote-stat "tramp-sh")
58(declare-function tramp-list-tramp-buffers "tramp-cmds")
58(declare-function tramp-method-out-of-band-p "tramp-sh") 59(declare-function tramp-method-out-of-band-p "tramp-sh")
59(declare-function tramp-smb-get-localname "tramp-smb") 60(declare-function tramp-smb-get-localname "tramp-smb")
60(defvar auto-save-file-name-transforms) 61(defvar auto-save-file-name-transforms)
@@ -2962,7 +2963,7 @@ This tests also `file-directory-p' and `file-accessible-directory-p'."
2962;; support symbolic links at all. 2963;; support symbolic links at all.
2963(defmacro tramp--test-ignore-make-symbolic-link-error (&rest body) 2964(defmacro tramp--test-ignore-make-symbolic-link-error (&rest body)
2964 "Run BODY, ignoring \"make-symbolic-link not supported\" file error." 2965 "Run BODY, ignoring \"make-symbolic-link not supported\" file error."
2965 (declare (indent defun) (debug t)) 2966 (declare (indent defun) (debug (body)))
2966 `(condition-case err 2967 `(condition-case err
2967 (progn ,@body) 2968 (progn ,@body)
2968 ((error quit debug) 2969 ((error quit debug)
@@ -3175,7 +3176,7 @@ This tests also `file-executable-p', `file-writable-p' and `set-file-modes'."
3175;; Method "smb" could run into "NT_STATUS_REVISION_MISMATCH" error. 3176;; Method "smb" could run into "NT_STATUS_REVISION_MISMATCH" error.
3176(defmacro tramp--test-ignore-add-name-to-file-error (&rest body) 3177(defmacro tramp--test-ignore-add-name-to-file-error (&rest body)
3177 "Run BODY, ignoring \"error with add-name-to-file\" file error." 3178 "Run BODY, ignoring \"error with add-name-to-file\" file error."
3178 (declare (indent defun) (debug t)) 3179 (declare (indent defun) (debug (body)))
3179 `(condition-case err 3180 `(condition-case err
3180 (progn ,@body) 3181 (progn ,@body)
3181 ((error quit debug) 3182 ((error quit debug)
@@ -5483,6 +5484,37 @@ Use the `ls' command."
5483(defconst tramp--test-asynchronous-requests-timeout 300 5484(defconst tramp--test-asynchronous-requests-timeout 300
5484 "Timeout for `tramp-test43-asynchronous-requests'.") 5485 "Timeout for `tramp-test43-asynchronous-requests'.")
5485 5486
5487(defmacro tramp--test-with-proper-process-name-and-buffer (proc &rest body)
5488 "Set \"process-name\" and \"process-buffer\" connection properties.
5489This is needed in timer functions as well as process filters and sentinels."
5490 (declare (indent 1) (debug (processp body)))
5491 `(let* ((v (tramp-get-connection-property ,proc "vector" nil))
5492 (pname (tramp-get-connection-property v "process-name" nil))
5493 (pbuffer (tramp-get-connection-property v "process-buffer" nil)))
5494 (tramp--test-message
5495 "tramp--test-with-proper-process-name-and-buffer before %s %s"
5496 (tramp-get-connection-property v "process-name" nil)
5497 (tramp-get-connection-property v "process-buffer" nil))
5498 (if (process-name ,proc)
5499 (tramp-set-connection-property v "process-name" (process-name ,proc))
5500 (tramp-flush-connection-property v "process-name"))
5501 (if (process-buffer ,proc)
5502 (tramp-set-connection-property
5503 v "process-buffer" (process-buffer ,proc))
5504 (tramp-flush-connection-property v "process-buffer"))
5505 (tramp--test-message
5506 "tramp--test-with-proper-process-name-and-buffer changed %s %s"
5507 (tramp-get-connection-property v "process-name" nil)
5508 (tramp-get-connection-property v "process-buffer" nil))
5509 (unwind-protect
5510 (progn ,@body)
5511 (if pname
5512 (tramp-set-connection-property v "process-name" pname)
5513 (tramp-flush-connection-property v "process-name"))
5514 (if pbuffer
5515 (tramp-set-connection-property v "process-buffer" pbuffer)
5516 (tramp-flush-connection-property v "process-buffer")))))
5517
5486;; This test is inspired by Bug#16928. 5518;; This test is inspired by Bug#16928.
5487(ert-deftest tramp-test43-asynchronous-requests () 5519(ert-deftest tramp-test43-asynchronous-requests ()
5488 "Check parallel asynchronous requests. 5520 "Check parallel asynchronous requests.
@@ -5532,10 +5564,10 @@ process sentinels. They shall not disturb each other."
5532 ((getenv "EMACS_HYDRA_CI") 10) 5564 ((getenv "EMACS_HYDRA_CI") 10)
5533 (t 1))) 5565 (t 1)))
5534 ;; We must distinguish due to performance reasons. 5566 ;; We must distinguish due to performance reasons.
5535 (timer-operation 5567 ;; (timer-operation
5536 (cond 5568 ;; (cond
5537 ((tramp--test-mock-p) #'vc-registered) 5569 ;; ((tramp--test-mock-p) #'vc-registered)
5538 (t #'file-attributes))) 5570 ;; (t #'file-attributes)))
5539 ;; This is when all timers start. We check inside the 5571 ;; This is when all timers start. We check inside the
5540 ;; timer function, that we don't exceed timeout. 5572 ;; timer function, that we don't exceed timeout.
5541 (timer-start (current-time)) 5573 (timer-start (current-time))
@@ -5553,25 +5585,31 @@ process sentinels. They shall not disturb each other."
5553 (run-at-time 5585 (run-at-time
5554 0 timer-repeat 5586 0 timer-repeat
5555 (lambda () 5587 (lambda ()
5556 (when (> (- (time-to-seconds) (time-to-seconds timer-start)) 5588 (tramp--test-with-proper-process-name-and-buffer
5557 tramp--test-asynchronous-requests-timeout) 5589 (get-buffer-process
5558 (tramp--test-timeout-handler)) 5590 (tramp-get-buffer
5559 (when buffers 5591 (tramp-dissect-file-name
5560 (let ((time (float-time)) 5592 tramp-test-temporary-file-directory)))
5561 (default-directory tmp-name) 5593 (when (> (- (time-to-seconds) (time-to-seconds timer-start))
5562 (file 5594 tramp--test-asynchronous-requests-timeout)
5563 (buffer-name (nth (random (length buffers)) buffers)))) 5595 (tramp--test-timeout-handler))
5564 (tramp--test-message 5596 (when buffers
5565 "Start timer %s %s" file (current-time-string)) 5597 (let ((time (float-time))
5566 (funcall timer-operation file) 5598 (default-directory tmp-name)
5567 ;; Adjust timer if it takes too much time. 5599 (file
5568 (tramp--test-message 5600 (buffer-name
5569 "Stop timer %s %s" file (current-time-string)) 5601 (nth (random (length buffers)) buffers))))
5570 (when (> (- (float-time) time) timer-repeat) 5602 (tramp--test-message
5571 (setq timer-repeat (* 1.5 timer-repeat)) 5603 "Start timer %s %s" file (current-time-string))
5572 (setf (timer--repeat-delay timer) timer-repeat) 5604 ;; (funcall timer-operation file)
5573 (tramp--test-message 5605 (tramp--test-message
5574 "Increase timer %s" timer-repeat))))))) 5606 "Stop timer %s %s" file (current-time-string))
5607 ;; Adjust timer if it takes too much time.
5608 (when (> (- (float-time) time) timer-repeat)
5609 (setq timer-repeat (* 1.1 timer-repeat))
5610 (setf (timer--repeat-delay timer) timer-repeat)
5611 (tramp--test-message
5612 "Increase timer %s" timer-repeat))))))))
5575 5613
5576 ;; Create temporary buffers. The number of buffers 5614 ;; Create temporary buffers. The number of buffers
5577 ;; corresponds to the number of processes; it could be 5615 ;; corresponds to the number of processes; it could be
@@ -5598,27 +5636,28 @@ process sentinels. They shall not disturb each other."
5598 (set-process-filter 5636 (set-process-filter
5599 proc 5637 proc
5600 (lambda (proc string) 5638 (lambda (proc string)
5601 (tramp--test-message 5639 (tramp--test-with-proper-process-name-and-buffer proc
5602 "Process filter %s %s %s" proc string (current-time-string)) 5640 (tramp--test-message
5603 (with-current-buffer (process-buffer proc) 5641 "Process filter %s %s %s"
5604 (insert string)) 5642 proc string (current-time-string))
5605 (when (< (process-get proc 'bar) 2) 5643 (with-current-buffer (process-buffer proc)
5606 (dired-uncache (process-get proc 'foo)) 5644 (insert string))
5607 (should (file-attributes (process-get proc 'foo)))))) 5645 (when (< (process-get proc 'bar) 2)
5646 (dired-uncache (process-get proc 'foo))
5647 (should (file-attributes (process-get proc 'foo)))))))
5608 ;; Add process sentinel. It shall not perform remote 5648 ;; Add process sentinel. It shall not perform remote
5609 ;; operations, triggering Tramp processes. This blocks. 5649 ;; operations, triggering Tramp processes. This blocks.
5610 (set-process-sentinel 5650 (set-process-sentinel
5611 proc 5651 proc
5612 (lambda (proc _state) 5652 (lambda (proc _state)
5613 (tramp--test-message 5653 (tramp--test-with-proper-process-name-and-buffer proc
5614 "Process sentinel %s %s" proc (current-time-string)))))) 5654 (tramp--test-message
5655 "Process sentinel %s %s" proc (current-time-string)))))))
5615 5656
5616 ;; Send a string to the processes. Use a random order of 5657 ;; Send a string to the processes. Use a random order of
5617 ;; the buffers. Mix with regular operation. 5658 ;; the buffers. Mix with regular operation.
5618 (let ((buffers (copy-sequence buffers))) 5659 (let ((buffers (copy-sequence buffers)))
5619 (while buffers 5660 (while buffers
5620 ;; Activate timer.
5621 (sit-for 0.01 'nodisp)
5622 (let* ((buf (nth (random (length buffers)) buffers)) 5661 (let* ((buf (nth (random (length buffers)) buffers))
5623 (proc (get-buffer-process buf)) 5662 (proc (get-buffer-process buf))
5624 (file (process-get proc 'foo)) 5663 (file (process-get proc 'foo))
@@ -5632,9 +5671,7 @@ process sentinels. They shall not disturb each other."
5632 (should (file-attributes file))) 5671 (should (file-attributes file)))
5633 ;; Send string to process. 5672 ;; Send string to process.
5634 (process-send-string proc (format "%s\n" (buffer-name buf))) 5673 (process-send-string proc (format "%s\n" (buffer-name buf)))
5635 (while (accept-process-output proc 0 nil 0)) 5674 (while (accept-process-output nil 0))
5636 ;; Give the watchdog a chance.
5637 (read-event nil nil 0.01)
5638 (tramp--test-message 5675 (tramp--test-message
5639 "Continue action %d %s %s" count buf (current-time-string)) 5676 "Continue action %d %s %s" count buf (current-time-string))
5640 ;; Regular operation post process action. 5677 ;; Regular operation post process action.
@@ -5864,8 +5901,8 @@ Since it unloads Tramp, it shall be the last test to run."
5864;; * Fix `tramp-test29-start-file-process' and 5901;; * Fix `tramp-test29-start-file-process' and
5865;; `tramp-test30-make-process' on MS Windows (`process-send-eof'?). 5902;; `tramp-test30-make-process' on MS Windows (`process-send-eof'?).
5866;; * Implement `tramp-test31-interrupt-process' for `adb'. 5903;; * Implement `tramp-test31-interrupt-process' for `adb'.
5867;; * Fix Bug#16928 in `tramp-test43-asynchronous-requests'. Looks 5904;; * Fix Bug#16928 in `tramp-test43-asynchronous-requests'. A remote
5868;; like it is resolved now. Remove `:unstable' tag? 5905;; file name operation cannot run in the timer. Remove `:unstable' tag?
5869 5906
5870(provide 'tramp-tests) 5907(provide 'tramp-tests)
5871;;; tramp-tests.el ends here 5908;;; tramp-tests.el ends here