You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
109 lines
1.8 KiB
109 lines
1.8 KiB
#!/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
|
|
|