OpenSolo/sololink/config/test_configinit

245 lines
6.1 KiB
Bash
Executable File

#!/bin/sh
verbose=
# arguments
# -v verbose
until [ -z "$1" ]; do
case "$1" in
-v) verbose="-v" ;;
esac
shift
done
# This runs on Ubuntu
MD5SUM='md5sum -c --status'
config_names="hostapd wpa_supplicant sololink"
valid() {
[ -f ${1} ] && [ -f ${1}.md5 ] && ${MD5SUM} ${1}.md5
}
assert_valid() {
if ! valid ${1}; then
echo "##### TEST FAILED ##### (valid ${1})"
fi
}
assert_same() {
if ! cmp ${1} ${2}; then
echo "##### TEST FAILED ##### (cmp ${1} ${2})"
fi
}
test_first_boot() {
echo
echo "##### test_first_boot starting"
echo
# delete all
mkdir -p etc/
rm -f etc/*
# only .orig files exist
for config in ${config_names}; do
cp rootfs.ro/etc/${config}.orig etc/${config}.orig
chmod +w etc/${config}.orig
done
./configinit ${verbose}
# should have:
# * .base, .base.md5
# * .conf, .conf.md5
# * .orig, .orig.md5
# * .base, .conf, .orig should all be the same
# * all .md5 should be good
for config in ${config_names}; do
assert_valid etc/${config}.base
assert_valid etc/${config}.conf
assert_valid etc/${config}.orig
assert_same etc/${config}.orig etc/${config}.base
assert_same etc/${config}.orig etc/${config}.conf
done
echo
echo "##### test_first_boot complete"
echo
}
test_normal_boot() {
echo
echo "##### test_normal_boot starting"
echo
# delete all
mkdir -p etc/
rm -f etc/*
# .orig, .base, and .conf files exist
for config in ${config_names}; do
cp rootfs.ro/etc/${config}.orig etc/${config}.orig
chmod +w etc/${config}.orig
md5sum `realpath etc/${config}.orig` > etc/${config}.orig.md5
cp etc/${config}.orig etc/${config}.base
md5sum `realpath etc/${config}.base` > etc/${config}.base.md5
cp etc/${config}.orig etc/${config}.conf
# .conf is normally changed from .orig
echo "# added line!" >> etc/${config}.conf
md5sum `realpath etc/${config}.conf` > etc/${config}.conf.md5
done
./configinit ${verbose}
# should have:
# * .base, .base.md5
# * .conf, .conf.md5
# * .orig, .orig.md5
# * .base and .orig should be the same
# * all .md5 should be good
for config in ${config_names}; do
assert_valid etc/${config}.base
assert_valid etc/${config}.conf
assert_valid etc/${config}.orig
assert_same etc/${config}.orig etc/${config}.base
done
echo
echo "##### test_normal_boot complete"
echo
}
test_invalid_conf() {
echo
echo "##### test_invalid_conf starting"
echo
# delete all
mkdir -p etc/
rm -f etc/*
# .orig, .base, and .conf files exist
for config in ${config_names}; do
cp rootfs.ro/etc/${config}.orig etc/${config}.orig
chmod +w etc/${config}.orig
md5sum `realpath etc/${config}.orig` > etc/${config}.orig.md5
cp etc/${config}.orig etc/${config}.base
md5sum `realpath etc/${config}.base` > etc/${config}.base.md5
cp etc/${config}.orig etc/${config}.conf
# incomplete update of .conf
cp etc/${config}.conf etc/${config}.back
md5sum `realpath etc/${config}.back` > etc/${config}.back.md5
echo "# added line!" >> etc/${config}.conf
# .conf.md5 is now invalid
done
./configinit ${verbose}
# should have:
# * .base, .base.md5
# * .conf, .conf.md5
# * .orig, .orig.md5
# * .base and .orig should be the same
# * all .md5 should be good
for config in ${config_names}; do
assert_valid etc/${config}.base
assert_valid etc/${config}.conf
assert_valid etc/${config}.orig
assert_same etc/${config}.orig etc/${config}.base
done
echo
echo "##### test_invalid_conf complete"
echo
}
test_update() {
echo
echo "##### test_update starting"
echo
# delete all
mkdir -p etc/
rm -f etc/*
# .orig, .base, and .conf files exist
for config in ${config_names}; do
cp rootfs.ro/etc/${config}.orig etc/${config}.orig
chmod +w etc/${config}.orig
md5sum `realpath etc/${config}.orig` > etc/${config}.orig.md5
cp etc/${config}.orig etc/${config}.base
md5sum `realpath etc/${config}.base` > etc/${config}.base.md5
cp etc/${config}.orig etc/${config}.conf
md5sum `realpath etc/${config}.conf` > etc/${config}.conf.md5
done
# prior to the update, hostapd.conf and wpa_supplicant.conf had ssid changed
sed -i "s/^ssid=SoloLink_.*/ssid=SoloLink_Test/" etc/hostapd.conf
md5sum `realpath etc/hostapd.conf` > etc/hostapd.conf.md5
echo "network={" >> etc/wpa_supplicant.conf
echo " ssid=\"SoloLink_Test\"" >> etc/wpa_supplicant.conf
echo " key_mgmt=NONE" >> etc/wpa_supplicant.conf
echo "}" >> etc/wpa_supplicant.conf
md5sum `realpath etc/wpa_supplicant.conf` > etc/wpa_supplicant.conf.md5
# telemetry baud was changed in sololink.conf
sed -i "s/^telemBaud=.*/telemBaud=115200/" etc/sololink.conf
md5sum `realpath etc/sololink.conf` > etc/sololink.conf.md5
# as part of update, we change something in hostapd.orig
sed -i "s/^acs_num_scans=.*/acs_num_scans=1000/" etc/hostapd.orig
# we do not change wpa_supplicant.orig
# we add a new setting to sololink.orig
sed -i "s/useGpsTime=True/useGpsTime=True\n\nuseOuijiTime=Definitely/" etc/sololink.orig
# .orig.md5 is no longer correct for the updated versions
# (that is how the update is detected)
# show changes
for config in ${config_names}; do
echo "user changes in ${config}.conf:"
diff etc/${config}.base etc/${config}.conf
echo
echo "update changes in ${config}.orig:"
diff rootfs.ro/etc/${config}.orig etc/${config}.orig
echo
done
./configinit ${verbose}
# should have:
# * .base, .base.md5
# * .conf, .conf.md5
# * .orig, .orig.md5
# * .base and .orig should be the same, no user changes
# * .conf should have both update and user changes
for config in ${config_names}; do
assert_valid etc/${config}.base
assert_valid etc/${config}.conf
assert_valid etc/${config}.orig
assert_same etc/${config}.orig etc/${config}.base
echo "${config}.conf should have both user and update mods:"
diff rootfs.ro/etc/${config}.orig etc/${config}.conf
done
echo
echo "##### test_update complete"
echo
}
test_first_boot
test_normal_boot
test_invalid_conf
test_update
# clean up
rm -rf ./etc