summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMichael Albinus <michael.albinus@gmx.de>2016-07-14 10:10:53 +0200
committerMichael Albinus <michael.albinus@gmx.de>2016-07-14 10:10:53 +0200
commit05ba7a0f83205e647546c2a3bb90e16add58cf06 (patch)
treece75e6996b12e7702821f5a3de6fd873a2a6637c /test
parente393d4f4ce64498408bd82f88eeab182c18457e4 (diff)
Add test for handling environment variables in Tramp
* test/automatedtramp-tests.el (tramp-test--shell-command-to-string-asynchronously): New defun. (tramp-test29-environment-variables): New test. (tramp-test30-vc-registered) (tramp-test31-make-auto-save-file-name) (tramp-test32-special-characters) (tramp-test32-special-characters-with-stat) (tramp-test32-special-characters-with-perl) (tramp-test32-special-characters-with-ls, tramp-test33-utf8) (tramp-test33-utf8-with-stat, tramp-test33-utf8-with-perl) (tramp-test33-utf8-with-ls) (tramp-test34-asynchronous-requests) (tramp-test35-recursive-load, tramp-test36-unload): Rename.
Diffstat (limited to 'test')
-rw-r--r--test/automated/tramp-tests.el130
1 files changed, 113 insertions, 17 deletions
diff --git a/test/automated/tramp-tests.el b/test/automated/tramp-tests.el
index a12ee38757..cc90d1950c 100644
--- a/test/automated/tramp-tests.el
+++ b/test/automated/tramp-tests.el
@@ -1598,7 +1598,103 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
;; Cleanup.
(ignore-errors (delete-file tmp-name)))))
-(ert-deftest tramp-test29-vc-registered ()
+(defun tramp-test--shell-command-to-string-asynchronously (command)
+ "Like `shell-command-to-string', but for asynchronous processes."
+ (with-temp-buffer
+ (async-shell-command command (current-buffer))
+ ;; Suppress nasty messages.
+ (set-process-sentinel (get-buffer-process (current-buffer)) nil)
+ (while
+ (and (get-buffer-process (current-buffer))
+ (eq (process-status (get-buffer-process (current-buffer))) 'run))
+ (accept-process-output (get-buffer-process (current-buffer)) 1))
+ (buffer-substring-no-properties (point-min) (point-max))))
+
+;; This test is inspired by Bug#23952.
+(ert-deftest tramp-test29-environment-variables ()
+ "Check that remote processes set / unset environment variables properly."
+ :tags '(:expensive-test)
+ (skip-unless (tramp--test-enabled))
+ (skip-unless
+ (eq
+ (tramp-find-foreign-file-name-handler tramp-test-temporary-file-directory)
+ 'tramp-sh-file-name-handler))
+
+ ;; Implementation note: There is a "sleep 1" at the end of every
+ ;; test. Otherwise, the scripts could return too early, without
+ ;; expected output.
+ (dolist (this-shell-command-to-string
+ '(;; Synchronously.
+ shell-command-to-string
+ ;; Asynchronously.
+ tramp-test--shell-command-to-string-asynchronously))
+
+ (let ((default-directory tramp-test-temporary-file-directory)
+ (shell-file-name "/bin/sh")
+ (envvar (concat "VAR_" (upcase (md5 (current-time-string)))))
+ kill-buffer-query-functions)
+
+ (unwind-protect
+ ;; Set a value.
+ (let ((process-environment
+ (cons (concat envvar "=foo") process-environment)))
+ ;; Default value.
+ (should
+ (string-match
+ "foo"
+ (funcall
+ this-shell-command-to-string
+ (format "echo -n ${%s:?bla}; sleep 1" envvar))))))
+
+ (unwind-protect
+ ;; Set the empty value.
+ (let ((process-environment
+ (cons (concat envvar "=") process-environment)))
+ ;; Value is null.
+ (should
+ (string-match
+ "bla"
+ (funcall
+ this-shell-command-to-string
+ (format "echo -n ${%s:?bla}; sleep 1" envvar))))
+ ;; Variable is set.
+ (should
+ (string-match
+ (regexp-quote envvar)
+ (funcall this-shell-command-to-string "set; sleep 1")))))
+
+ ;; We force a reconnect, in order to have a clean environment.
+ (tramp-cleanup-connection
+ (tramp-dissect-file-name tramp-test-temporary-file-directory)
+ 'keep-debug 'keep-password)
+ (unwind-protect
+ ;; Unset the variable.
+ (let ((tramp-remote-process-environment
+ (cons (concat envvar "=foo")
+ tramp-remote-process-environment)))
+ ;; Set the initial value, we want to unset below.
+ (should
+ (string-match
+ "foo"
+ (funcall
+ this-shell-command-to-string
+ (format "echo -n ${%s:?bla}; sleep 1" envvar))))
+ (let ((process-environment
+ (cons envvar process-environment)))
+ ;; Variable is unset.
+ (should
+ (string-match
+ "bla"
+ (funcall
+ this-shell-command-to-string
+ (format "echo -n ${%s:?bla}; sleep 1" envvar))))
+ ;; Variable is unset.
+ (should-not
+ (string-match
+ (regexp-quote envvar)
+ (funcall this-shell-command-to-string "set; sleep 1")))))))))
+
+(ert-deftest tramp-test30-vc-registered ()
"Check `vc-registered'."
:tags '(:expensive-test)
(skip-unless (tramp--test-enabled))
@@ -1667,7 +1763,7 @@ This tests also `make-symbolic-link', `file-truename' and `add-name-to-file'."
;; Cleanup.
(ignore-errors (delete-directory tmp-name1 'recursive)))))
-(ert-deftest tramp-test30-make-auto-save-file-name ()
+(ert-deftest tramp-test31-make-auto-save-file-name ()
"Check `make-auto-save-file-name'."
(skip-unless (tramp--test-enabled))
@@ -1921,7 +2017,7 @@ Several special characters do not work properly there."
(ignore-errors (delete-directory tmp-name2 'recursive)))))
(defun tramp--test-special-characters ()
- "Perform the test in `tramp-test31-special-characters*'."
+ "Perform the test in `tramp-test32-special-characters*'."
;; Newlines, slashes and backslashes in file names are not
;; supported. So we don't test. And we don't test the tab
;; character on Windows or Cygwin, because the backslash is
@@ -1962,13 +2058,13 @@ Several special characters do not work properly there."
"{foo}bar{baz}"))
;; These tests are inspired by Bug#17238.
-(ert-deftest tramp-test31-special-characters ()
+(ert-deftest tramp-test32-special-characters ()
"Check special characters in file names."
(skip-unless (tramp--test-enabled))
(tramp--test-special-characters))
-(ert-deftest tramp-test31-special-characters-with-stat ()
+(ert-deftest tramp-test32-special-characters-with-stat ()
"Check special characters in file names.
Use the `stat' command."
:tags '(:expensive-test)
@@ -1987,7 +2083,7 @@ Use the `stat' command."
tramp-connection-properties)))
(tramp--test-special-characters)))
-(ert-deftest tramp-test31-special-characters-with-perl ()
+(ert-deftest tramp-test32-special-characters-with-perl ()
"Check special characters in file names.
Use the `perl' command."
:tags '(:expensive-test)
@@ -2009,7 +2105,7 @@ Use the `perl' command."
tramp-connection-properties)))
(tramp--test-special-characters)))
-(ert-deftest tramp-test31-special-characters-with-ls ()
+(ert-deftest tramp-test32-special-characters-with-ls ()
"Check special characters in file names.
Use the `ls' command."
:tags '(:expensive-test)
@@ -2032,7 +2128,7 @@ Use the `ls' command."
(tramp--test-special-characters)))
(defun tramp--test-utf8 ()
- "Perform the test in `tramp-test32-utf8*'."
+ "Perform the test in `tramp-test33-utf8*'."
(let* ((utf8 (if (and (eq system-type 'darwin)
(memq 'utf-8-hfs (coding-system-list)))
'utf-8-hfs 'utf-8))
@@ -2046,13 +2142,13 @@ Use the `ls' command."
"银河系漫游指南系列"
"Автостопом по гала́ктике")))
-(ert-deftest tramp-test32-utf8 ()
+(ert-deftest tramp-test33-utf8 ()
"Check UTF8 encoding in file names and file contents."
(skip-unless (tramp--test-enabled))
(tramp--test-utf8))
-(ert-deftest tramp-test32-utf8-with-stat ()
+(ert-deftest tramp-test33-utf8-with-stat ()
"Check UTF8 encoding in file names and file contents.
Use the `stat' command."
:tags '(:expensive-test)
@@ -2071,7 +2167,7 @@ Use the `stat' command."
tramp-connection-properties)))
(tramp--test-utf8)))
-(ert-deftest tramp-test32-utf8-with-perl ()
+(ert-deftest tramp-test33-utf8-with-perl ()
"Check UTF8 encoding in file names and file contents.
Use the `perl' command."
:tags '(:expensive-test)
@@ -2093,7 +2189,7 @@ Use the `perl' command."
tramp-connection-properties)))
(tramp--test-utf8)))
-(ert-deftest tramp-test32-utf8-with-ls ()
+(ert-deftest tramp-test33-utf8-with-ls ()
"Check UTF8 encoding in file names and file contents.
Use the `ls' command."
:tags '(:expensive-test)
@@ -2116,7 +2212,7 @@ Use the `ls' command."
(tramp--test-utf8)))
;; This test is inspired by Bug#16928.
-(ert-deftest tramp-test33-asynchronous-requests ()
+(ert-deftest tramp-test34-asynchronous-requests ()
"Check parallel asynchronous requests.
Such requests could arrive from timers, process filters and
process sentinels. They shall not disturb each other."
@@ -2206,7 +2302,7 @@ process sentinels. They shall not disturb each other."
(dolist (buf buffers)
(ignore-errors (kill-buffer buf)))))))
-(ert-deftest tramp-test34-recursive-load ()
+(ert-deftest tramp-test35-recursive-load ()
"Check that Tramp does not fail due to recursive load."
(skip-unless (tramp--test-enabled))
@@ -2229,7 +2325,7 @@ process sentinels. They shall not disturb each other."
(mapconcat 'shell-quote-argument load-path " -L ")
(shell-quote-argument code)))))))
-(ert-deftest tramp-test35-unload ()
+(ert-deftest tramp-test36-unload ()
"Check that Tramp and its subpackages unload completely.
Since it unloads Tramp, it shall be the last test to run."
;; Mark as failed until all symbols are unbound.
@@ -2277,8 +2373,8 @@ Since it unloads Tramp, it shall be the last test to run."
;; * Fix `tramp-test15-copy-directory' for `smb'. Using tar in a pipe
;; doesn't work well when an interactive password must be provided.
;; * Fix `tramp-test27-start-file-process' on MS Windows (`process-send-eof'?).
-;; * Fix Bug#16928. Set expected error of `tramp-test33-asynchronous-requests'.
-;; * Fix `tramp-test35-unload' (Not all symbols are unbound). Set
+;; * Fix Bug#16928. Set expected error of `tramp-test34-asynchronous-requests'.
+;; * Fix `tramp-test36-unload' (Not all symbols are unbound). Set
;; expected error.
(defun tramp-test-all (&optional interactive)