]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
test: ensure testing uses correct mdmon
authorNeilBrown <neilb@suse.de>
Mon, 5 Aug 2013 04:55:13 +0000 (14:55 +1000)
committerNeilBrown <neilb@suse.de>
Mon, 5 Aug 2013 04:55:13 +0000 (14:55 +1000)
When testing we want to run mdmon directly, not use
systemctl to get systemd to run it.

So allow an environment variable to make that choice.

Signed-off-by: NeilBrown <neilb@suse.de>
test
util.c

diff --git a/test b/test
index 9e140f0abc269d52618c7e80c0afec23c2d99767..8e8d1df3612202fbcbc14c74f6adc99d295997f1 100755 (executable)
--- a/test
+++ b/test
@@ -30,6 +30,9 @@ if grep -s 'Personalities : .*multipath' > /dev/null /proc/mdstat ; then
 fi
 INTEGRITY=yes
 
+# make sure to test local mdmon, not system one
+export MDADM_NO_SYSTEMCTL=1
+
 # assume md0, md1, md2 exist in /dev
 md0=/dev/md0 md1=/dev/md1 md2=/dev/md2
 mdp0=/dev/md_d0
diff --git a/util.c b/util.c
index aa2c8be87dfbf17763633513e6087052b72bc9e8..e7e3d488896459e02225f330c510613423c229f5 100644 (file)
--- a/util.c
+++ b/util.c
@@ -1711,36 +1711,39 @@ int start_mdmon(char *devnm)
                pathbuf[0] = '\0';
 
        /* First try to run systemctl */
-       switch(fork()) {
-       case 0:
-               /* FIXME yuk. CLOSE_EXEC?? */
-               skipped = 0;
-               for (i = 3; skipped < 20; i++)
-                       if (close(i) < 0)
-                               skipped++;
-                       else
-                               skipped = 0;
-
-               /* Don't want to see error messages from systemctl.
-                * If the service doesn't exist, we start mdmon ourselves.
-                */
-               close(2);
-               open("/dev/null", O_WRONLY);
-               snprintf(pathbuf, sizeof(pathbuf), "mdmon@%s.service",
-                        devnm);
-               status = execl("/usr/bin/systemctl", "systemctl", "start",
-                              pathbuf, NULL);
-               status = execl("/bin/systemctl", "systemctl", "start",
-                              pathbuf, NULL);
-               exit(1);
-       case -1: pr_err("cannot run mdmon. "
-                        "Array remains readonly\n");
-               return -1;
-       default: /* parent - good */
-               pid = wait(&status);
-               if (pid >= 0 && status == 0)
-                       return 0;
-       }
+       if (!check_env("MDADM_NO_SYSTEMCTL"))
+               switch(fork()) {
+               case 0:
+                       /* FIXME yuk. CLOSE_EXEC?? */
+                       skipped = 0;
+                       for (i = 3; skipped < 20; i++)
+                               if (close(i) < 0)
+                                       skipped++;
+                               else
+                                       skipped = 0;
+
+                       /* Don't want to see error messages from
+                        * systemctl.  If the service doesn't exist,
+                        * we start mdmon ourselves.
+                        */
+                       close(2);
+                       open("/dev/null", O_WRONLY);
+                       snprintf(pathbuf, sizeof(pathbuf), "mdmon@%s.service",
+                                devnm);
+                       status = execl("/usr/bin/systemctl", "systemctl",
+                                      "start",
+                                      pathbuf, NULL);
+                       status = execl("/bin/systemctl", "systemctl", "start",
+                                      pathbuf, NULL);
+                       exit(1);
+               case -1: pr_err("cannot run mdmon. "
+                               "Array remains readonly\n");
+                       return -1;
+               default: /* parent - good */
+                       pid = wait(&status);
+                       if (pid >= 0 && status == 0)
+                               return 0;
+               }
 
        /* That failed, try running mdmon directly */
        switch(fork()) {