]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test-execute: Add tests for new PassEnvironment= directive
authorFilipe Brandenburger <filbranden@google.com>
Sun, 8 Nov 2015 18:37:05 +0000 (10:37 -0800)
committerFilipe Brandenburger <filbranden@google.com>
Wed, 11 Nov 2015 15:55:23 +0000 (07:55 -0800)
Check the base case, plus erasing the list, listing the same variable
name more than once and when variables are absent from the manager
execution environment.

Confirmed that `sudo ./test-execute` passes and that modifying the test
cases (or the values of the set variables in test-execute.c) is enough
to make the test cases fail.

Makefile.am
src/test/test-execute.c
test/test-execute/exec-passenvironment-absent.service [new file with mode: 0644]
test/test-execute/exec-passenvironment-empty.service [new file with mode: 0644]
test/test-execute/exec-passenvironment-repeated.service [new file with mode: 0644]
test/test-execute/exec-passenvironment.service [new file with mode: 0644]

index 7f75e1ec98cc0d0732f98bc33861bd1ae4d7069e..b13473d0d54f735f87db0bdf5f3811e6a41e9c75 100644 (file)
@@ -1546,6 +1546,10 @@ EXTRA_DIST += \
        test/test-execute/exec-environment-empty.service \
        test/test-execute/exec-environment-multiple.service \
        test/test-execute/exec-environment.service \
+       test/test-execute/exec-passenvironment-absent.service \
+       test/test-execute/exec-passenvironment-empty.service \
+       test/test-execute/exec-passenvironment-repeated.service \
+       test/test-execute/exec-passenvironment.service \
        test/test-execute/exec-group.service \
        test/test-execute/exec-ignoresigpipe-no.service \
        test/test-execute/exec-ignoresigpipe-yes.service \
index e2ec53ee51d6fb3820376d4aed9eab918f4570c8..baf7926cab415f8e7e30ca43400a6a1bda3317b8 100644 (file)
@@ -168,6 +168,19 @@ static void test_exec_environmentfile(Manager *m) {
         unlink("/tmp/test-exec_environmentfile.conf");
 }
 
+static void test_exec_passenvironment(Manager *m) {
+        assert_se(setenv("VAR1", "word1 word2", 1) == 0);
+        assert_se(setenv("VAR2", "word3", 1) == 0);
+        assert_se(setenv("VAR3", "$word 5 6", 1) == 0);
+        test(m, "exec-passenvironment.service", 0, CLD_EXITED);
+        test(m, "exec-passenvironment-repeated.service", 0, CLD_EXITED);
+        test(m, "exec-passenvironment-empty.service", 0, CLD_EXITED);
+        assert_se(unsetenv("VAR1") == 0);
+        assert_se(unsetenv("VAR2") == 0);
+        assert_se(unsetenv("VAR3") == 0);
+        test(m, "exec-passenvironment-absent.service", 0, CLD_EXITED);
+}
+
 static void test_exec_umask(Manager *m) {
         test(m, "exec-umask-default.service", 0, CLD_EXITED);
         test(m, "exec-umask-0177.service", 0, CLD_EXITED);
@@ -237,6 +250,7 @@ int main(int argc, char *argv[]) {
                 test_exec_group,
                 test_exec_environment,
                 test_exec_environmentfile,
+                test_exec_passenvironment,
                 test_exec_umask,
                 test_exec_runtimedirectory,
                 test_exec_capabilityboundingset,
diff --git a/test/test-execute/exec-passenvironment-absent.service b/test/test-execute/exec-passenvironment-absent.service
new file mode 100644 (file)
index 0000000..7d5e32a
--- /dev/null
@@ -0,0 +1,7 @@
+[Unit]
+Description=Test for PassEnvironment with variables absent from the execution environment
+
+[Service]
+ExecStart=/bin/sh -x -c 'test "$${VAR1-unset}" = "unset" && test "$${VAR2-unset}" = "unset" && test "$${VAR3-unset}" = "unset"'
+Type=oneshot
+PassEnvironment=VAR1 VAR2 VAR3
diff --git a/test/test-execute/exec-passenvironment-empty.service b/test/test-execute/exec-passenvironment-empty.service
new file mode 100644 (file)
index 0000000..c93c197
--- /dev/null
@@ -0,0 +1,8 @@
+[Unit]
+Description=Test for PassEnvironment and erasing the variable list
+
+[Service]
+ExecStart=/bin/sh -x -c 'test "$${VAR1-unset}" = "unset" && test "$${VAR2-unset}" = "unset" && test "$${VAR3-unset}" = "unset"'
+Type=oneshot
+PassEnvironment=VAR1 VAR2 VAR3
+PassEnvironment=
diff --git a/test/test-execute/exec-passenvironment-repeated.service b/test/test-execute/exec-passenvironment-repeated.service
new file mode 100644 (file)
index 0000000..5e8c56f
--- /dev/null
@@ -0,0 +1,8 @@
+[Unit]
+Description=Test for PassEnvironment with a variable name repeated
+
+[Service]
+ExecStart=/bin/sh -x -c 'test "$$VAR1" = "word1 word2" && test "$$VAR2" = word3 && test "$$VAR3" = "\\$$word 5 6"'
+Type=oneshot
+PassEnvironment=VAR1 VAR2
+PassEnvironment=VAR1 VAR3
diff --git a/test/test-execute/exec-passenvironment.service b/test/test-execute/exec-passenvironment.service
new file mode 100644 (file)
index 0000000..b4a9909
--- /dev/null
@@ -0,0 +1,7 @@
+[Unit]
+Description=Test for PassEnvironment
+
+[Service]
+ExecStart=/bin/sh -x -c 'test "$$VAR1" = "word1 word2" && test "$$VAR2" = word3 && test "$$VAR3" = "\\$$word 5 6"'
+Type=oneshot
+PassEnvironment=VAR1 VAR2 VAR3