mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 18:28:25 +00:00
152 lines
4.2 KiB
Bash
152 lines
4.2 KiB
Bash
# -*- shell-script -*-
|
|
|
|
FUNCTIONS_DIR="debian/tests/functions.d"
|
|
|
|
match_or_exit () {
|
|
file_to_match="$1"
|
|
pattern_file="$2"
|
|
|
|
while read line_to_match <&3 && read pattern_line <&4 ; do
|
|
if [ "${line_to_match##$pattern_line}" ]; then
|
|
echo '!!! MISMATCH !!!' >&2
|
|
echo "Line: ${line_to_match}" >&2
|
|
echo "Pattern: ${pattern_line}" >&2
|
|
exit 1
|
|
fi;
|
|
done 3<"${file_to_match}" 4<"${pattern_file}"
|
|
}
|
|
|
|
linecount () {
|
|
wc -l $1 | cut -d' ' -f1
|
|
}
|
|
|
|
error_exit () {
|
|
echo "ERROR: $1"
|
|
exit 1
|
|
}
|
|
|
|
stop_dnsmasq_bind_networking () {
|
|
systemctl stop dnsmasq.service
|
|
systemctl stop named.service
|
|
systemctl stop networking.service
|
|
}
|
|
|
|
configure_and_start_networking () {
|
|
#Add interfaces needed for the test
|
|
cat ${FUNCTIONS_DIR}/add-to.interfaces >> /etc/network/interfaces
|
|
systemctl start networking.service
|
|
}
|
|
|
|
configure_and_start_bind () {
|
|
cp ${FUNCTIONS_DIR}/db.autopkg.test /etc/bind/
|
|
cat ${FUNCTIONS_DIR}/add-to.named.conf.local >> /etc/bind/named.conf.local
|
|
cp ${FUNCTIONS_DIR}/named.conf.options /etc/bind/named.conf.options
|
|
systemctl start named.service
|
|
}
|
|
|
|
configure_and_start_dnsmasq () {
|
|
alt_mode=0
|
|
lua_mode=0
|
|
sysv_mode=0
|
|
service='dnsmasq.service'
|
|
sysv_param2=''
|
|
conf_dir='/etc/dnsmasq.d'
|
|
|
|
while [ -n "$1" ]; do
|
|
case "$1" in
|
|
alt|lua|sysv) eval ${1}_mode=1 ;;
|
|
*) error_exit "configure_and_start_dnsmasq(): invalid flag '$1'"
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ ${alt_mode} -eq 1 ]; then
|
|
cp ${FUNCTIONS_DIR}/dnsmasq.alt-autopkgtest.default /etc/default/dnsmasq.alt
|
|
cp /etc/dnsmasq.conf /etc/dnsmasq.alt.conf
|
|
mkdir /etc/dnsmasq.alt.d
|
|
service='dnsmasq@alt.service'
|
|
sysv_param2='alt'
|
|
conf_dir='/etc/dnsmasq.alt.d'
|
|
fi
|
|
|
|
cp ${FUNCTIONS_DIR}/dnsmasq-autopkgtest.conf "${conf_dir}"
|
|
|
|
if [ ${lua_mode} -eq 1 ]; then
|
|
mkdir -p /usr/local/share/dnsmasq
|
|
cp ${FUNCTIONS_DIR}/log.lua /usr/local/share/dnsmasq/
|
|
echo "dhcp-luascript=/usr/local/share/dnsmasq/log.lua\n" \
|
|
>>"${conf_dir}"/dnsmasq-autopkgtest.conf
|
|
fi
|
|
|
|
if [ ${sysv_mode} -eq 1 ]; then
|
|
SYSTEMCTL_SKIP_REDIRECT=1 /etc/init.d/dnsmasq start "${sysv_param2}"
|
|
else
|
|
systemctl enable "${service}"
|
|
systemctl start "${service}"
|
|
fi
|
|
}
|
|
|
|
check_compile_time_options () {
|
|
journalctl -b -u dnsmasq
|
|
echo ~~~ Check compile time options...
|
|
journalctl -b -u dnsmasq -g '[a-z]+: ' --output cat >options.msg
|
|
cat options.msg
|
|
match_or_exit options.msg ${FUNCTIONS_DIR}/options${1}.patterns
|
|
}
|
|
|
|
get_address_on_veth1_and_check_the_result () {
|
|
echo ~~~ Get an address on veth1 and check the result...
|
|
ip netns exec clientnet ifup veth1
|
|
ip netns exec clientnet ip addr show dev veth1 >ip-addr.out 2>&1
|
|
cat ip-addr.out
|
|
match_or_exit ip-addr.out ${FUNCTIONS_DIR}/ip-addr.patterns
|
|
}
|
|
|
|
query_test_zone_records_and_check_the_result () {
|
|
echo ~~~ Query some test zone records and check the result...
|
|
ip netns exec clientnet dig +short SOA autopkg.test >dig.out 2>&1
|
|
ip netns exec clientnet dig +short NS autopkg.test >>dig.out 2>&1
|
|
ip netns exec clientnet dig +short A ns.autopkg.test >>dig.out 2>&1
|
|
ip netns exec clientnet dig +short A dhcp3.autopkg.test >>dig.out 2>&1
|
|
cat dig.out
|
|
if [ `linecount dig.out` -ne `linecount ${FUNCTIONS_DIR}/dig.patterns` ] ; then
|
|
error_exit 'empty or unexpected output'
|
|
fi
|
|
match_or_exit dig.out ${FUNCTIONS_DIR}/dig.patterns
|
|
}
|
|
|
|
check_utils () {
|
|
#Test dhcp_lease_time and dhcp_release
|
|
leases_file='/var/lib/misc/dnsmasq.leases'
|
|
client_ip_address=`cut -d' ' -f3 $leases_file`
|
|
client_mac_address=`cut -d' ' -f2 $leases_file`
|
|
echo ~~~ Test dhcp_lease_time...
|
|
if ! dhcp_lease_time $client_ip_address; then
|
|
error_exit "'dhcp_lease_time $client_ip_address' failed with return code $?"
|
|
else
|
|
#Add \n to dhcp_lease_time's output
|
|
echo ''
|
|
fi
|
|
echo ~~~ Test dhcp_release...
|
|
cat $leases_file
|
|
if ! dhcp_release veth0 $client_ip_address 1-$client_mac_address; then
|
|
error_exit "'dhcp_release veth0 $client_ip_address 1-$client_mac_address' failed with return code $?0"
|
|
fi
|
|
if [ -n "`cat $leases_file`" ]; then
|
|
cat $leases_file
|
|
error_exit "$leases_file is not empty"
|
|
fi
|
|
}
|
|
|
|
check_lua_log () {
|
|
log_file='/var/log/dnsmasq-lua.log'
|
|
echo ~~~ Check log file generated by lua script
|
|
ls -l ${log_file}
|
|
if [ -s ${log_file} ]; then
|
|
cat ${log_file}
|
|
match_or_exit ${log_file} ${FUNCTIONS_DIR}/log.patterns
|
|
else
|
|
error_exit "${log_file} is empty"
|
|
fi
|
|
}
|