109 lines · 1.8 KB · Text
RawDownload
#!/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 1else	echo "ok"fi echo -n "Checking sysctl is not set to test value ... "if verify "${TARGET}"; then	echo "FAIL" >&2	exit 1else	echo "ok"fi echo -n "Writing sysctl from shell ... "set_testif ! verify "${TARGET}"; then	echo "FAIL" >&2	exit 1else	echo "ok"fi echo -n "Resetting sysctl to original value ... "set_origif verify "${TARGET}"; then	echo "FAIL" >&2	exit 1else	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_origdd if="${TEST_FILE}" of="${TARGET}" bs=4096 2>/dev/nullif ! verify "${TARGET}"; then	echo "FAIL" >&2	rc=1else	echo "ok"fi echo -n "Writing middle of sysctl after synchronized seek ... "set_testdd if="${TEST_FILE}" of="${TARGET}" bs=1 seek=1 skip=1 2>/dev/nullif ! verify "${TARGET}"; then	echo "FAIL" >&2	rc=1else	echo "ok"fi echo -n "Writing beyond end of sysctl ... "set_origdd if="${TEST_FILE}" of="${TARGET}" bs=20 seek=2 2>/dev/nullif verify "${TARGET}"; then        echo "FAIL" >&2        rc=1else        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/nullif verify "${TARGET}"; then	echo "FAIL" >&2	rc=1else	echo "ok"fi