1 #!/bin/sh 2 3 TEST_FILE=$(mktemp) 4 5 echo "== Testing sysctl behavior against ${TARGET} ==" 6 7 set_orig() 8 { 9 echo "${ORIG}" > "${TARGET}" 10 } 11 12 set_test() 13 { 14 echo "${TEST_STR}" > "${TARGET}" 15 } 16 17 verify() 18 { 19 local seen 20 seen=$(cat "$1") 21 if [ "${seen}" != "${TEST_STR}" ]; then 22 return 1 23 fi 24 return 0 25 } 26 27 trap 'set_orig; rm -f "${TEST_FILE}"' EXIT 28 29 rc=0 30 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" 38 fi 39 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" 46 fi 47 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" 55 fi 56 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" 64 fi 65 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. 69 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" 78 fi 79 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" 88 fi 89 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" 98 fi 99 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" 109 fi 110