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