923a60
From f35b737bdd6e508cf73f43a1beb3f5cb8c1ebb07 Mon Sep 17 00:00:00 2001
923a60
From: Filipe Brandenburger <filbranden@google.com>
923a60
Date: Sun, 8 Nov 2015 10:37:05 -0800
923a60
Subject: [PATCH] test-execute: Add tests for new PassEnvironment= directive
923a60
923a60
Check the base case, plus erasing the list, listing the same variable
923a60
name more than once and when variables are absent from the manager
923a60
execution environment.
923a60
923a60
Confirmed that `sudo ./test-execute` passes and that modifying the test
923a60
cases (or the values of the set variables in test-execute.c) is enough
923a60
to make the test cases fail.
923a60
923a60
(cherry picked from commit 4c80d201ace0377312c27143afab04e9c9f1ee64)
923a60
923a60
Related: #1426214
923a60
---
923a60
 Makefile.am                                |  4 ++++
923a60
 src/test/test-execute.c                    | 14 ++++++++++++++
923a60
 test/exec-passenvironment-absent.service   |  7 +++++++
923a60
 test/exec-passenvironment-empty.service    |  8 ++++++++
923a60
 test/exec-passenvironment-repeated.service |  8 ++++++++
923a60
 test/exec-passenvironment.service          |  7 +++++++
923a60
 6 files changed, 48 insertions(+)
923a60
 create mode 100644 test/exec-passenvironment-absent.service
923a60
 create mode 100644 test/exec-passenvironment-empty.service
923a60
 create mode 100644 test/exec-passenvironment-repeated.service
923a60
 create mode 100644 test/exec-passenvironment.service
923a60
923a60
diff --git a/Makefile.am b/Makefile.am
923a60
index 924b34b699..e9ceac98a4 100644
923a60
--- a/Makefile.am
923a60
+++ b/Makefile.am
923a60
@@ -1477,6 +1477,10 @@ EXTRA_DIST += \
923a60
 	test/exec-environment-empty.service \
923a60
 	test/exec-environment-multiple.service \
923a60
 	test/exec-environment.service \
923a60
+	test/exec-passenvironment-absent.service \
923a60
+	test/exec-passenvironment-empty.service \
923a60
+	test/exec-passenvironment-repeated.service \
923a60
+	test/exec-passenvironment.service \
923a60
 	test/exec-group.service \
923a60
 	test/exec-ignoresigpipe-no.service \
923a60
 	test/exec-ignoresigpipe-yes.service \
923a60
diff --git a/src/test/test-execute.c b/src/test/test-execute.c
923a60
index 5a02960e76..8def1946dc 100644
923a60
--- a/src/test/test-execute.c
923a60
+++ b/src/test/test-execute.c
923a60
@@ -142,6 +142,19 @@ static void test_exec_environment(Manager *m) {
923a60
         test(m, "exec-environment-empty.service", 0, CLD_EXITED);
923a60
 }
923a60
 
923a60
+static void test_exec_passenvironment(Manager *m) {
923a60
+        assert_se(setenv("VAR1", "word1 word2", 1) == 0);
923a60
+        assert_se(setenv("VAR2", "word3", 1) == 0);
923a60
+        assert_se(setenv("VAR3", "$word 5 6", 1) == 0);
923a60
+        test(m, "exec-passenvironment.service", 0, CLD_EXITED);
923a60
+        test(m, "exec-passenvironment-repeated.service", 0, CLD_EXITED);
923a60
+        test(m, "exec-passenvironment-empty.service", 0, CLD_EXITED);
923a60
+        assert_se(unsetenv("VAR1") == 0);
923a60
+        assert_se(unsetenv("VAR2") == 0);
923a60
+        assert_se(unsetenv("VAR3") == 0);
923a60
+        test(m, "exec-passenvironment-absent.service", 0, CLD_EXITED);
923a60
+}
923a60
+
923a60
 static void test_exec_umask(Manager *m) {
923a60
         test(m, "exec-umask-default.service", 0, CLD_EXITED);
923a60
         test(m, "exec-umask-0177.service", 0, CLD_EXITED);
923a60
@@ -165,6 +178,7 @@ int main(int argc, char *argv[]) {
923a60
                 test_exec_user,
923a60
                 test_exec_group,
923a60
                 test_exec_environment,
923a60
+                test_exec_passenvironment,
923a60
                 test_exec_umask,
923a60
                 test_exec_runtimedirectory,
923a60
                 NULL,
923a60
diff --git a/test/exec-passenvironment-absent.service b/test/exec-passenvironment-absent.service
923a60
new file mode 100644
923a60
index 0000000000..7d5e32a4eb
923a60
--- /dev/null
923a60
+++ b/test/exec-passenvironment-absent.service
923a60
@@ -0,0 +1,7 @@
923a60
+[Unit]
923a60
+Description=Test for PassEnvironment with variables absent from the execution environment
923a60
+
923a60
+[Service]
923a60
+ExecStart=/bin/sh -x -c 'test "$${VAR1-unset}" = "unset" && test "$${VAR2-unset}" = "unset" && test "$${VAR3-unset}" = "unset"'
923a60
+Type=oneshot
923a60
+PassEnvironment=VAR1 VAR2 VAR3
923a60
diff --git a/test/exec-passenvironment-empty.service b/test/exec-passenvironment-empty.service
923a60
new file mode 100644
923a60
index 0000000000..c93c197c10
923a60
--- /dev/null
923a60
+++ b/test/exec-passenvironment-empty.service
923a60
@@ -0,0 +1,8 @@
923a60
+[Unit]
923a60
+Description=Test for PassEnvironment and erasing the variable list
923a60
+
923a60
+[Service]
923a60
+ExecStart=/bin/sh -x -c 'test "$${VAR1-unset}" = "unset" && test "$${VAR2-unset}" = "unset" && test "$${VAR3-unset}" = "unset"'
923a60
+Type=oneshot
923a60
+PassEnvironment=VAR1 VAR2 VAR3
923a60
+PassEnvironment=
923a60
diff --git a/test/exec-passenvironment-repeated.service b/test/exec-passenvironment-repeated.service
923a60
new file mode 100644
923a60
index 0000000000..5e8c56f26a
923a60
--- /dev/null
923a60
+++ b/test/exec-passenvironment-repeated.service
923a60
@@ -0,0 +1,8 @@
923a60
+[Unit]
923a60
+Description=Test for PassEnvironment with a variable name repeated
923a60
+
923a60
+[Service]
923a60
+ExecStart=/bin/sh -x -c 'test "$$VAR1" = "word1 word2" && test "$$VAR2" = word3 && test "$$VAR3" = "\\$$word 5 6"'
923a60
+Type=oneshot
923a60
+PassEnvironment=VAR1 VAR2
923a60
+PassEnvironment=VAR1 VAR3
923a60
diff --git a/test/exec-passenvironment.service b/test/exec-passenvironment.service
923a60
new file mode 100644
923a60
index 0000000000..b4a9909682
923a60
--- /dev/null
923a60
+++ b/test/exec-passenvironment.service
923a60
@@ -0,0 +1,7 @@
923a60
+[Unit]
923a60
+Description=Test for PassEnvironment
923a60
+
923a60
+[Service]
923a60
+ExecStart=/bin/sh -x -c 'test "$$VAR1" = "word1 word2" && test "$$VAR2" = word3 && test "$$VAR3" = "\\$$word 5 6"'
923a60
+Type=oneshot
923a60
+PassEnvironment=VAR1 VAR2 VAR3