Blame SOURCES/0456-test-execute-Add-tests-for-new-PassEnvironment-direc.patch

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