110 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/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
 |