'[sudo] make check-root' is analogous to 'make check-slow'.
---
 Makefile.am              | 17 ++++++++++++++++-
 docs/guestfs-hacking.pod | 37 ++++++++++++++++++++++++++++++++++++-
 tests/test-functions.sh  |  9 +++++++++
 3 files changed, 61 insertions(+), 2 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index 7250cae..12486de 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -517,6 +517,20 @@ check-slow: build-test-guests
        done; \
        exit $$(( $$errors ? 1 : 0 ))
 
+check-root: build-test-guests
+       @if test "$$(id -u)" -ne 0; then \
+         echo "***"; \
+         echo "*** error: You must run 'check-root' as root."; \
+         echo "***"; \
+         exit 1; \
+       fi
+       @errors=0; \
+       for f in `grep -l '^$@:' $(SUBDIRS:%=%/Makefile.am)`; do \
+         echo $(MAKE) -C `dirname $$f` $@; \
+         $(MAKE) -C `dirname $$f` $@ || (( errors++ )); \
+       done; \
+       exit $$(( $$errors ? 1 : 0 ))
+
 build-test-guests:
        $(MAKE) -C test-data/phony-guests check
 
@@ -590,8 +604,9 @@ help:
        @echo "make check-with-upstream-qemu     Test using upstream qemu."
        @echo "make check-with-upstream-libvirt  Test using upstream libvirt."
        @echo "make check-slow                   Slow/long-running tests."
+       @echo "sudo make check-root              Tests which must be run as 
root."
        @echo
-       @echo "make check-all                    Runs all 'check*' rules."
+       @echo "make check-all                    Runs all 'check*' rules except 
check-root."
        @echo "make check-release                Runs 'check*' rules required 
for release."
        @echo
        @echo "make installcheck                 Test installed libguestfs 
packages."
diff --git a/docs/guestfs-hacking.pod b/docs/guestfs-hacking.pod
index df429a1..401dc95 100644
--- a/docs/guestfs-hacking.pod
+++ b/docs/guestfs-hacking.pod
@@ -662,9 +662,44 @@ Add a rule to the F<Makefile.am>:
 
 =back
 
+=item C<sudo make check-root>
+
+Runs some tests which require root privileges.  These are supposed to
+be safe, but take care.  You have to run this as root (eg. using
+L<sudo(8)> explicitly).
+
+To mark a test as requiring root:
+
+=over 4
+
+=item *
+
+Add it to the list of C<TESTS> in the F<Makefile.am>, just like a
+normal test.
+
+=item *
+
+Modify the test so it checks if euid == 0, and if I<not> set it skips
+(ie. returns with exit code 77).  If using C<$TEST_FUNCTIONS>, you can
+call the function C<root_test> for this.
+
+=item *
+
+Add a variable C<ROOT_TESTS> to the F<Makefile.am> listing the root
+tests.
+
+=item *
+
+Add a rule to the F<Makefile.am>:
+
+ check-root:
+   $(MAKE) check TESTS="$(ROOT_TESTS)"
+
+=back
+
 =item C<make check-all>
 
-Equivalent to running all C<make check*> rules.
+Equivalent to running all C<make check*> rules except C<check-root>.
 
 =item C<make check-release>
 
diff --git a/tests/test-functions.sh b/tests/test-functions.sh
index 74ad2ef..e5e8246 100755
--- a/tests/test-functions.sh
+++ b/tests/test-functions.sh
@@ -242,6 +242,15 @@ slow_test ()
     fi
 }
 
+# Root tests should always call this function.  (See guestfs-hacking(1)).
+root_test ()
+{
+    if test "$(id -u)" -ne 0; then
+        echo "$(basename $0): use 'sudo make check-root' to run this test"
+        exit 77
+    fi
+}
+
 do_md5 ()
 {
   case "$(uname)" in
-- 
2.9.3

_______________________________________________
Libguestfs mailing list
Libguestfs@redhat.com
https://www.redhat.com/mailman/listinfo/libguestfs

Reply via email to