Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / tools / testing / selftests / sysctl / common_tests
diff --git a/kernel/tools/testing/selftests/sysctl/common_tests b/kernel/tools/testing/selftests/sysctl/common_tests
new file mode 100644 (file)
index 0000000..17d534b
--- /dev/null
@@ -0,0 +1,109 @@
+#!/bin/sh
+
+TEST_FILE=$(mktemp)
+
+echo "== Testing sysctl behavior against ${TARGET} =="
+
+set_orig()
+{
+       echo "${ORIG}" > "${TARGET}"
+}
+
+set_test()
+{
+       echo "${TEST_STR}" > "${TARGET}"
+}
+
+verify()
+{
+       local seen
+       seen=$(cat "$1")
+       if [ "${seen}" != "${TEST_STR}" ]; then
+               return 1
+       fi
+       return 0
+}
+
+trap 'set_orig; rm -f "${TEST_FILE}"' EXIT
+
+rc=0
+
+echo -n "Writing test file ... "
+echo "${TEST_STR}" > "${TEST_FILE}"
+if ! verify "${TEST_FILE}"; then
+       echo "FAIL" >&2
+       exit 1
+else
+       echo "ok"
+fi
+
+echo -n "Checking sysctl is not set to test value ... "
+if verify "${TARGET}"; then
+       echo "FAIL" >&2
+       exit 1
+else
+       echo "ok"
+fi
+
+echo -n "Writing sysctl from shell ... "
+set_test
+if ! verify "${TARGET}"; then
+       echo "FAIL" >&2
+       exit 1
+else
+       echo "ok"
+fi
+
+echo -n "Resetting sysctl to original value ... "
+set_orig
+if verify "${TARGET}"; then
+       echo "FAIL" >&2
+       exit 1
+else
+       echo "ok"
+fi
+
+# Now that we've validated the sanity of "set_test" and "set_orig",
+# we can use those functions to set starting states before running
+# specific behavioral tests.
+
+echo -n "Writing entire sysctl in single write ... "
+set_orig
+dd if="${TEST_FILE}" of="${TARGET}" bs=4096 2>/dev/null
+if ! verify "${TARGET}"; then
+       echo "FAIL" >&2
+       rc=1
+else
+       echo "ok"
+fi
+
+echo -n "Writing middle of sysctl after synchronized seek ... "
+set_test
+dd if="${TEST_FILE}" of="${TARGET}" bs=1 seek=1 skip=1 2>/dev/null
+if ! verify "${TARGET}"; then
+       echo "FAIL" >&2
+       rc=1
+else
+       echo "ok"
+fi
+
+echo -n "Writing beyond end of sysctl ... "
+set_orig
+dd if="${TEST_FILE}" of="${TARGET}" bs=20 seek=2 2>/dev/null
+if verify "${TARGET}"; then
+        echo "FAIL" >&2
+        rc=1
+else
+        echo "ok"
+fi
+
+echo -n "Writing sysctl with multiple long writes ... "
+set_orig
+(perl -e 'print "A" x 50;'; echo "${TEST_STR}") | \
+       dd of="${TARGET}" bs=50 2>/dev/null
+if verify "${TARGET}"; then
+       echo "FAIL" >&2
+       rc=1
+else
+       echo "ok"
+fi