tools/testing/selftests/sysctl: validate sysctl_writes_strict
[linux-2.6/btrfs-unstable.git] / tools / testing / selftests / sysctl / common_tests
blob17d534b1b7b4abfc0b4c3564875d9c0e114831ed
1 #!/bin/sh
3 TEST_FILE=$(mktemp)
5 echo "== Testing sysctl behavior against ${TARGET} =="
7 set_orig()
9 echo "${ORIG}" > "${TARGET}"
12 set_test()
14 echo "${TEST_STR}" > "${TARGET}"
17 verify()
19 local seen
20 seen=$(cat "$1")
21 if [ "${seen}" != "${TEST_STR}" ]; then
22 return 1
24 return 0
27 trap 'set_orig; rm -f "${TEST_FILE}"' EXIT
29 rc=0
31 echo -n "Writing test file ... "
32 echo "${TEST_STR}" > "${TEST_FILE}"
33 if ! verify "${TEST_FILE}"; then
34 echo "FAIL" >&2
35 exit 1
36 else
37 echo "ok"
40 echo -n "Checking sysctl is not set to test value ... "
41 if verify "${TARGET}"; then
42 echo "FAIL" >&2
43 exit 1
44 else
45 echo "ok"
48 echo -n "Writing sysctl from shell ... "
49 set_test
50 if ! verify "${TARGET}"; then
51 echo "FAIL" >&2
52 exit 1
53 else
54 echo "ok"
57 echo -n "Resetting sysctl to original value ... "
58 set_orig
59 if verify "${TARGET}"; then
60 echo "FAIL" >&2
61 exit 1
62 else
63 echo "ok"
66 # Now that we've validated the sanity of "set_test" and "set_orig",
67 # we can use those functions to set starting states before running
68 # specific behavioral tests.
70 echo -n "Writing entire sysctl in single write ... "
71 set_orig
72 dd if="${TEST_FILE}" of="${TARGET}" bs=4096 2>/dev/null
73 if ! verify "${TARGET}"; then
74 echo "FAIL" >&2
75 rc=1
76 else
77 echo "ok"
80 echo -n "Writing middle of sysctl after synchronized seek ... "
81 set_test
82 dd if="${TEST_FILE}" of="${TARGET}" bs=1 seek=1 skip=1 2>/dev/null
83 if ! verify "${TARGET}"; then
84 echo "FAIL" >&2
85 rc=1
86 else
87 echo "ok"
90 echo -n "Writing beyond end of sysctl ... "
91 set_orig
92 dd if="${TEST_FILE}" of="${TARGET}" bs=20 seek=2 2>/dev/null
93 if verify "${TARGET}"; then
94 echo "FAIL" >&2
95 rc=1
96 else
97 echo "ok"
100 echo -n "Writing sysctl with multiple long writes ... "
101 set_orig
102 (perl -e 'print "A" x 50;'; echo "${TEST_STR}") | \
103 dd of="${TARGET}" bs=50 2>/dev/null
104 if verify "${TARGET}"; then
105 echo "FAIL" >&2
106 rc=1
107 else
108 echo "ok"