Home | History | Annotate | Download | only in sysctl
      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