Subject: Re: bug#26911: 25.2; eshell "cd .." doesn't work correctly with TRAMP

From: Michael Albinus <[email-masked]>
Date: Sat, 05 Sep 2020 17:57:56 +0200

Eli Zaretskii <[email-masked]> writes:

Hi Eli,

> First, I think I know the reason for the problem I had yesterday to
> run all the tests.  There's some problem in the Tramp tests that
> causes almost each test that was run to leave 3 processes on the
> remote system: 2 sshd's and 1 /bin/sh.  AFAICT, these are created by
> the first connection made by each test.  Most tests create additional
> connections, but their processes are all killed or exit when the test
> completes, whereas this one connection is left behind.  And some test
> leave behind more than one such triplet.  So after running enough
> tests, the system is full of these triplets of zombie processes, and
> on a resource-challenged system that could cause additional
> connections to fail due to lack of resources to start another process.
>
> Is it possible to make sure these processes are killed as part of each
> test's cleanup?  For now, I ran the tests one by one, each time
> killing the zombie processes manually on the remote system.  It took
> some time...

Most of the tests start with (skip-unless (tramp--test-enabled)). This
defun calls tramp-cleanup-connection, which shall also kill all related
Tramp processes. Doesn't seem to work on MS Windows.

Hard to debug for me w/o such a machine. Could you write a bug report as
a reminder for me, that I investigate when I have such a machine?

> Anyway, doing this cleanup manually allowed me to run all the tests
> (skipping those which I knew to be "unstable"), and all but one of
> them succeeded.  The one which failed is shown below together with the
> failure description:
>
>   Test tramp-test30-make-process condition:
>       (ert-test-failed
>        ((should
> 	 (string-match
> 	  (if ... "unknown signal
>   \\'" "killed.*
>   \\'")
> 	  (buffer-string)))
> 	:form
> 	(string-match "unknown signal
>   \\'" "killed
>   ")
> 	:value nil))
>      FAILED  1/1  tramp-test30-make-process (39.250000 sec)
>
> Just to be sure, I've ran this test twice, and each time it failed
> with the same error.

Hahh! There is a special case in that test for MS-Windows:

--8<---------------cut here---------------start------------->8---
(should
 (string-match
  (if (eq system-type 'windows-nt)
      "unknown signal\n\\'" "killed.*\n\\'")
  (buffer-string))))
--8<---------------cut here---------------end--------------->8---

IIRC, somebody has reported this different return message. Or maybe I
have seen this on the MS Windows machine I've used for testing.

Maybe we shall simply allow both messages, because the exact wording
doesn't matter. What about the appended patch?

> Thanks.

Best regards, Michael.

*** /tmp/ediff7ZRJwF	2020-09-05 17:54:46.315839349 +0200
--- /home/albinus/src/tramp/test/tramp-tests.el	2020-09-05 17:53:23.687580606 +0200
***************
*** 4498,4508 ****
  	    ;; Read output.
  	    (with-timeout (10 (tramp--test-timeout-handler))
  	      (while (accept-process-output proc 0 nil t)))
! 	    (should
! 	     (string-match
! 	      (if (eq system-type 'windows-nt)
! 		  "unknown signal\n\\'" "killed.*\n\\'")
! 	      (buffer-string))))

  	;; Cleanup.
  	(ignore-errors (delete-process proc)))
--- 4498,4504 ----
  	    ;; Read output.
  	    (with-timeout (10 (tramp--test-timeout-handler))
  	      (while (accept-process-output proc 0 nil t)))
! 	    (should (string-match "unknown signal\\|killed" (buffer-string))))

  	;; Cleanup.
  	(ignore-errors (delete-process proc)))