wolfMQTT/scripts/firmware.test

130 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
# MQTT Firmware test
no_pid=-1
broker_pid=$no_pid
do_cleanup() {
# Delete file
rm $fileout
if [ $broker_pid != $no_pid ]
then
kill -9 $broker_pid
echo "Killed broker PID $broker_pid"
broker_pid=$no_pid
fi
if [ $1 -ne 0 ]
then
exit 1
fi
}
generate_port() { # function to produce a random port number
if [[ "$OSTYPE" == "linux"* ]]; then
port=$(($(od -An -N2 /dev/urandom) % (65535-49152) + 49152))
elif [[ "$OSTYPE" == "darwin"* ]]; then
port=$(($(od -An -N2 /dev/random) % (65535-49152) + 49152))
else
echo "Unknown OS TYPE"
exit 1
fi
echo -e "Using port $port"
}
check_broker() {
timeout 10 sh -c 'until nc -v -z $0 $1; do sleep 1; done' localhost $port
}
# Check for application
[ ! -x ./examples/firmware/fwpush ] && echo -e "\n\nMQTT Example fwpush doesn't exist" && exit 1
[ ! -x ./examples/firmware/fwclient ] && echo -e "\n\nMQTT Example fwclient doesn't exist" && exit 1
# Check for TLS support
has_tls=no
./examples/mqttclient/mqttclient -? 2>&1 | grep -- 'Enable TLS'
if [ $? -eq 0 ]; then
has_tls=yes
fi
def_args="-T -C 5000 -n wolfMQTT/example/firmware_$((RANDOM))"
filein=./examples/publish.dat
fileout=./examples/publish.dat.trs
# Check for mosquitto
if command -v mosquitto
then
bwrap_path="$(command -v bwrap)"
if [ -n "$bwrap_path" ]; then
# bwrap only if using a local mosquitto instance
if [ "${AM_BWRAPPED-}" != "yes" ]; then
echo "Using bwrap"
export AM_BWRAPPED=yes
exec "$bwrap_path" --unshare-net --dev-bind / / "$0" "$@"
fi
unset AM_BWRAPPED
broker_args="-c scripts/broker_test/mosquitto.conf"
if test $has_tls == yes
then
port=18883
else
port=11883
fi
else
# mosquitto broker custom port non-TLS only
has_tls=no
generate_port
broker_args="-p $port"
fi
# Close the descriptors make passes to recipe commands (notably the
# "make -j" jobserver pipe) so a broker that outlives the test cannot stall
# a parallel make that is waiting on them.
mosquitto $broker_args 3>&- 4>&- 5>&- 6>&- 7>&- 8>&- 9>&- &
broker_pid=$!
echo "Broker PID is $broker_pid"
check_broker
def_args="${def_args} -h localhost -p ${port}"
fi
if test $has_tls == yes
then
def_args="${def_args} -A scripts/broker_test/ca-cert.pem -t"
fi
echo -e "Base args: $def_args"
# Start firmware client
./examples/firmware/fwclient $def_args -f $fileout $1 &
client_result=$?
[ $client_result -ne 0 ] && echo -e "\n\nMQTT Example fwclient failed!" && do_cleanup "-1"
# give some time for the client to connect and wait (it starts a new session)
sleep 0.5
# Start firmware push
./examples/firmware/fwpush $def_args -r -f $filein $1
server_result=$?
[ $server_result -ne 0 ] && echo -e "\n\nMQTT Example fwpush failed!" && do_cleanup "-1"
# give some time for the client complete
sleep 0.5
# Compare files
echo "Comparing files"
md5sum -b $filein $fileout
compare_result=$?
[ $compare_result -ne 0 ] && echo -e "\n\nMQTT Example firmware compare failed!" && do_cleanup "-1"
# End broker
do_cleanup "0"
echo -e "\n\nFirmware Example MQTT Client Tests Passed"
exit 0