Browse Source

Add 2nd reload test

Davin McCall 4 years ago
parent
commit
87ba6f7116

+ 2 - 0
.gitignore

@@ -26,6 +26,8 @@
 /src/igr-tests/restart/basic-ran
 /src/igr-tests/check-basic/output.txt
 /src/igr-tests/check-cycle/output.txt
+/src/igr-tests/reload1/sd
+/src/igr-tests/reload2/sd
 
 # Generated man pages:
 /doc/manpages/*.5

+ 1 - 0
src/igr-tests/Makefile

@@ -11,3 +11,4 @@ clean:
 	rm -f restart/basic-ran
 	rm -f check-basic/output.txt check-cycle/output.txt
 	rm -rf reload1/sd
+    rm -rf reload2/sd

+ 1 - 1
src/igr-tests/igr-runner.cc

@@ -13,7 +13,7 @@ extern char **environ;
 int main(int argc, char **argv)
 {
     const char * const test_dirs[] = { "basic", "environ", "ps-environ", "chain-to", "force-stop", "restart",
-            "check-basic", "check-cycle", "reload1" };
+            "check-basic", "check-cycle", "reload1", "reload2" };
     constexpr int num_tests = sizeof(test_dirs) / sizeof(test_dirs[0]);
 
     int passed = 0;

+ 4 - 0
src/igr-tests/reload2/initial.expected

@@ -0,0 +1,4 @@
+[{+}     ] boot
+[{+}     ] a
+[{+}     ] b
+[{+}     ] hold

+ 1 - 0
src/igr-tests/reload2/output2.expected

@@ -0,0 +1 @@
+Service reloaded.

+ 5 - 0
src/igr-tests/reload2/output3.expected

@@ -0,0 +1,5 @@
+[{+}     ] boot
+[     {-}] a
+[{+}     ] b
+[{+}     ] hold
+[{+}     ] c

+ 48 - 0
src/igr-tests/reload2/run-test.sh

@@ -0,0 +1,48 @@
+#!/bin/sh
+
+# Similar to reload1 test, but with boot service stopped while we reload.
+
+# Start with boot depending on a,b
+rm -rf sd
+cp -R sd1 sd
+
+../../dinit -d sd -u -p socket -q &
+DINITPID=$!
+
+# Give some time for startup
+sleep 0.2
+
+../../dinitctl --quiet -p socket start hold
+
+STATUS=PASS
+
+if [ "$(../../dinitctl -p socket list)" != "$(cat initial.expected)" ]; then
+   STATUS=FAIL
+fi
+
+../../dinitctl --quiet -p socket stop boot
+
+# Put alternate descriptions in place: boot depends on b, c
+if [ "$STATUS" = PASS ]; then
+    rm -rf sd
+    cp -R sd2 sd
+
+    # This should succeed since boot is stopped
+    if [ "$(../../dinitctl -p socket reload boot 2>&1)" != "$(cat output2.expected)" ]; then
+        STATUS=FAIL
+    fi
+    
+fi
+
+if [ "$STATUS" = PASS ]; then
+    ../../dinitctl --quiet -p socket start boot
+    if [ "$(../../dinitctl -p socket list)" != "$(cat output3.expected)" ]; then
+        STATUS=FAIL
+    fi
+fi
+
+../../dinitctl --quiet -p socket shutdown
+wait $DINITPID
+
+if [ $STATUS = PASS ]; then exit 0; fi
+exit 1

+ 1 - 0
src/igr-tests/reload2/sd1/a

@@ -0,0 +1 @@
+type = internal

+ 1 - 0
src/igr-tests/reload2/sd1/b

@@ -0,0 +1 @@
+type = internal

+ 3 - 0
src/igr-tests/reload2/sd1/boot

@@ -0,0 +1,3 @@
+type = internal
+depends-on = a
+depends-on = b

+ 1 - 0
src/igr-tests/reload2/sd1/c

@@ -0,0 +1 @@
+type = internal

+ 2 - 0
src/igr-tests/reload2/sd1/hold

@@ -0,0 +1,2 @@
+# extra service to prevent shutdown when we stop boot
+type = internal

+ 1 - 0
src/igr-tests/reload2/sd2/a

@@ -0,0 +1 @@
+type = internal

+ 1 - 0
src/igr-tests/reload2/sd2/b

@@ -0,0 +1 @@
+type = internal

+ 3 - 0
src/igr-tests/reload2/sd2/boot

@@ -0,0 +1,3 @@
+type = internal
+depends-on = b
+depends-on = c

+ 1 - 0
src/igr-tests/reload2/sd2/c

@@ -0,0 +1 @@
+type = internal