Add tests framework and LED tests

pull/13/head
nirenjan 2017-07-27 20:00:35 -07:00
parent f0a0a7dcaf
commit e463d9b890
46 changed files with 765 additions and 1 deletions

View File

@ -1,6 +1,6 @@
ACLOCAL_AMFLAGS = -I m4
SUBDIRS = lib utils
SUBDIRS = lib utils tests
# Extra files that need to be in the distribution
EXTRA_DIST = README.md LICENSE

View File

@ -35,5 +35,6 @@ AC_CONFIG_FILES([
utils/Makefile
utils/cli/Makefile
utils/test/Makefile
tests/Makefile
])
AC_OUTPUT

48
tests/Makefile.am 100644
View File

@ -0,0 +1,48 @@
TEST_EXTENSIONS = .sh
SH_LOG_COMPILER = $(SHELL)
AM_SH_LOG_FLAGS =
TESTS = \
test_led_fire_off.sh \
test_led_fire_on.sh \
test_led_throttle_off.sh \
test_led_throttle_on.sh \
test_led_a_off.sh \
test_led_a_red.sh \
test_led_a_amber.sh \
test_led_a_green.sh \
test_led_b_off.sh \
test_led_b_red.sh \
test_led_b_amber.sh \
test_led_b_green.sh \
test_led_d_off.sh \
test_led_d_red.sh \
test_led_d_amber.sh \
test_led_d_green.sh \
test_led_e_off.sh \
test_led_e_red.sh \
test_led_e_amber.sh \
test_led_e_green.sh \
test_led_t1_off.sh \
test_led_t1_red.sh \
test_led_t1_amber.sh \
test_led_t1_green.sh \
test_led_t2_off.sh \
test_led_t2_red.sh \
test_led_t2_amber.sh \
test_led_t2_green.sh \
test_led_t3_off.sh \
test_led_t3_red.sh \
test_led_t3_amber.sh \
test_led_t3_green.sh \
test_led_pov_off.sh \
test_led_pov_red.sh \
test_led_pov_amber.sh \
test_led_pov_green.sh \
test_led_clutch_off.sh \
test_led_clutch_red.sh \
test_led_clutch_amber.sh \
test_led_clutch_green.sh \
test_skip.sh

View File

@ -0,0 +1,127 @@
#!/bin/bash
# Common infrastructure for the test cases
# Set up exit status codes
EXIT_SUCCESS=0
EXIT_SKIP=77
EXIT_HARD_ERROR=99
EXIT_FAILURE=1
# Set up some command sequences
X52_LED_COMMAND_INDEX=00b8
X52_LED_FIRE_ON=0101
X52_LED_FIRE_OFF=0100
X52_LED_A_RED_ON=0201
X52_LED_A_RED_OFF=0200
X52_LED_A_GREEN_ON=0301
X52_LED_A_GREEN_OFF=0300
X52_LED_B_RED_ON=0401
X52_LED_B_RED_OFF=0400
X52_LED_B_GREEN_ON=0501
X52_LED_B_GREEN_OFF=0500
X52_LED_D_RED_ON=0601
X52_LED_D_RED_OFF=0600
X52_LED_D_GREEN_ON=0701
X52_LED_D_GREEN_OFF=0700
X52_LED_E_RED_ON=0801
X52_LED_E_RED_OFF=0800
X52_LED_E_GREEN_ON=0901
X52_LED_E_GREEN_OFF=0900
X52_LED_T1_RED_ON=0a01
X52_LED_T1_RED_OFF=0a00
X52_LED_T1_GREEN_ON=0b01
X52_LED_T1_GREEN_OFF=0b00
X52_LED_T2_RED_ON=0c01
X52_LED_T2_RED_OFF=0c00
X52_LED_T2_GREEN_ON=0d01
X52_LED_T2_GREEN_OFF=0d00
X52_LED_T3_RED_ON=0e01
X52_LED_T3_RED_OFF=0e00
X52_LED_T3_GREEN_ON=0f01
X52_LED_T3_GREEN_OFF=0f00
X52_LED_POV_RED_ON=1001
X52_LED_POV_RED_OFF=1000
X52_LED_POV_GREEN_ON=1101
X52_LED_POV_GREEN_OFF=1100
X52_LED_CLUTCH_RED_ON=1201
X52_LED_CLUTCH_RED_OFF=1200
X52_LED_CLUTCH_GREEN_ON=1301
X52_LED_CLUTCH_GREEN_OFF=1300
X52_LED_THROTTLE_ON=1401
X52_LED_THROTTLE_OFF=1400
find_programs()
{
# Find the X52cli script
X52CLI=$(find .. -path '*/cli/x52cli' -executable)
if [[ -z "$X52CLI" ]]
then
exit $EXIT_HARD_ERROR
fi
# Find the x52test_log_actions program
X52LOGACT=$(find .. -path '*/libusbx52/x52test_log_actions' -executable)
if [[ -z "$X52LOGACT" ]]
then
exit $EXIT_HARD_ERROR
fi
# Find the x52test_create_device_list program
X52DEVLIST=$(find .. -path '*/libusbx52/x52test_create_device_list' -executable)
if [[ -z "$X52DEVLIST" ]]
then
exit $EXIT_HARD_ERROR
fi
}
setup_preload()
{
# Find the libusb stub library
LIBUSB=$(find .. -name 'libusbx52.so.*.*.*' -type f)
if [[ -z "$LIBUSB" ]]
then
exit $EXIT_HARD_ERROR
fi
export LD_PRELOAD=$(realpath $LIBUSB)
}
setup_test()
{
EXPECTED_OUTPUT=$(mktemp)
trap "rm -f $EXPECTED_OUTPUT /tmp/libusbx52*" EXIT
$X52DEVLIST 06a3 0762
}
expect_pattern()
{
local msg="libusb_control_transfer: RqType: 40 bRequest: 91"
msg="$msg wValue: $2 wIndex: $1 timeout: 5000"
echo "$msg" >> $EXPECTED_OUTPUT
}
verify_output()
{
if diff -q $EXPECTED_OUTPUT /tmp/libusbx52_output_data
then
exit $EXIT_SUCCESS
else
echo 'Expected:'
echo '========='
sed 's/^/\t/' $EXPECTED_OUTPUT
echo
echo 'Observed:'
echo '========='
sed 's/^/\t/' /tmp/libusbx52_output_data
exit $EXIT_FAILURE
fi
}
set -e
find_programs
setup_test
setup_preload

106
tests/make_tests.sh 100755
View File

@ -0,0 +1,106 @@
#!/bin/bash
# Script to generate the test scripts
# Most of the test cases are extremely similar, but they do need to be created
# and saved in the repository so that the automake infrastructure can pick them
# up.
_mono_led_template()
{
local led_ident=$(echo $1 | tr a-z A-Z)
local led_color=$2
local state=$(echo "\$X52_LED_${led_ident}_${led_color}" | tr a-z A-Z)
cat << EOF
#!/bin/bash
# Test setting the $led_ident button $led_color
source \$(dirname \$0)/common_infra.sh
expect_pattern \$X52_LED_COMMAND_INDEX $state
\$X52CLI led $led_ident $led_color
verify_output
EOF
}
_color_led_template()
{
local led_ident=$(echo $1 | tr a-z A-Z)
local led_color=$2
local led_r_state=off
local led_g_state=off
case $led_color in
"red")
led_r_state=on
;;
"green")
led_g_state=on
;;
"amber")
led_r_state=on
led_g_state=on
;;
esac
led_r_state=$(echo "\$X52_LED_${led_ident}_red_${led_r_state}" | tr a-z A-Z)
led_g_state=$(echo "\$X52_LED_${led_ident}_green_${led_g_state}" | tr a-z A-Z)
cat << EOF
#!/bin/bash
# Test setting the $led_ident button to $led_color
source \$(dirname \$0)/common_infra.sh
expect_pattern \$X52_LED_COMMAND_INDEX $led_r_state
expect_pattern \$X52_LED_COMMAND_INDEX $led_g_state
\$X52CLI led $led_ident $led_color
verify_output
EOF
}
make_led_tests()
{
# Make the mono-color LED tests
for led in fire throttle
do
for state in off on
do
filename=test_led_${led}_${state}.sh
_mono_led_template $led $state > $filename
echo -e "\t$filename \\" >> Makefile.am
done
done
# Make the multi-color LED tests
for led in a b d e t1 t2 t3 pov clutch
do
for state in off red amber green
do
filename=test_led_${led}_${state}.sh
_color_led_template $led $state > test_led_${led}_${state}.sh
echo -e "\t$filename \\" >> Makefile.am
done
done
}
clear_tests()
{
# Delete the tests from Makefile.am
sed -i '/^TESTS /,$d' Makefile.am
echo "TESTS = \\" >> Makefile.am
}
finalize_tests()
{
# Put the last line to close the tests list
echo -e "\ttest_skip.sh\n" >> Makefile.am
}
clear_tests
make_led_tests
finalize_tests

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the A button to amber
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_A_RED_ON
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_A_GREEN_ON
$X52CLI led A amber
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the A button to green
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_A_RED_OFF
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_A_GREEN_ON
$X52CLI led A green
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the A button to off
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_A_RED_OFF
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_A_GREEN_OFF
$X52CLI led A off
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the A button to red
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_A_RED_ON
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_A_GREEN_OFF
$X52CLI led A red
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the B button to amber
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_B_RED_ON
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_B_GREEN_ON
$X52CLI led B amber
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the B button to green
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_B_RED_OFF
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_B_GREEN_ON
$X52CLI led B green
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the B button to off
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_B_RED_OFF
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_B_GREEN_OFF
$X52CLI led B off
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the B button to red
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_B_RED_ON
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_B_GREEN_OFF
$X52CLI led B red
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the CLUTCH button to amber
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_CLUTCH_RED_ON
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_CLUTCH_GREEN_ON
$X52CLI led CLUTCH amber
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the CLUTCH button to green
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_CLUTCH_RED_OFF
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_CLUTCH_GREEN_ON
$X52CLI led CLUTCH green
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the CLUTCH button to off
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_CLUTCH_RED_OFF
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_CLUTCH_GREEN_OFF
$X52CLI led CLUTCH off
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the CLUTCH button to red
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_CLUTCH_RED_ON
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_CLUTCH_GREEN_OFF
$X52CLI led CLUTCH red
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the D button to amber
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_D_RED_ON
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_D_GREEN_ON
$X52CLI led D amber
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the D button to green
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_D_RED_OFF
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_D_GREEN_ON
$X52CLI led D green
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the D button to off
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_D_RED_OFF
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_D_GREEN_OFF
$X52CLI led D off
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the D button to red
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_D_RED_ON
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_D_GREEN_OFF
$X52CLI led D red
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the E button to amber
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_E_RED_ON
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_E_GREEN_ON
$X52CLI led E amber
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the E button to green
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_E_RED_OFF
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_E_GREEN_ON
$X52CLI led E green
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the E button to off
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_E_RED_OFF
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_E_GREEN_OFF
$X52CLI led E off
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the E button to red
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_E_RED_ON
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_E_GREEN_OFF
$X52CLI led E red
verify_output

View File

@ -0,0 +1,11 @@
#!/bin/bash
# Test setting the FIRE button off
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_FIRE_OFF
$X52CLI led FIRE off
verify_output

View File

@ -0,0 +1,11 @@
#!/bin/bash
# Test setting the FIRE button on
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_FIRE_ON
$X52CLI led FIRE on
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the POV button to amber
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_POV_RED_ON
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_POV_GREEN_ON
$X52CLI led POV amber
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the POV button to green
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_POV_RED_OFF
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_POV_GREEN_ON
$X52CLI led POV green
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the POV button to off
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_POV_RED_OFF
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_POV_GREEN_OFF
$X52CLI led POV off
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the POV button to red
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_POV_RED_ON
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_POV_GREEN_OFF
$X52CLI led POV red
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the T1 button to amber
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T1_RED_ON
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T1_GREEN_ON
$X52CLI led T1 amber
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the T1 button to green
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T1_RED_OFF
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T1_GREEN_ON
$X52CLI led T1 green
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the T1 button to off
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T1_RED_OFF
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T1_GREEN_OFF
$X52CLI led T1 off
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the T1 button to red
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T1_RED_ON
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T1_GREEN_OFF
$X52CLI led T1 red
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the T2 button to amber
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T2_RED_ON
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T2_GREEN_ON
$X52CLI led T2 amber
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the T2 button to green
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T2_RED_OFF
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T2_GREEN_ON
$X52CLI led T2 green
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the T2 button to off
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T2_RED_OFF
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T2_GREEN_OFF
$X52CLI led T2 off
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the T2 button to red
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T2_RED_ON
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T2_GREEN_OFF
$X52CLI led T2 red
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the T3 button to amber
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T3_RED_ON
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T3_GREEN_ON
$X52CLI led T3 amber
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the T3 button to green
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T3_RED_OFF
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T3_GREEN_ON
$X52CLI led T3 green
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the T3 button to off
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T3_RED_OFF
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T3_GREEN_OFF
$X52CLI led T3 off
verify_output

View File

@ -0,0 +1,12 @@
#!/bin/bash
# Test setting the T3 button to red
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T3_RED_ON
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_T3_GREEN_OFF
$X52CLI led T3 red
verify_output

View File

@ -0,0 +1,11 @@
#!/bin/bash
# Test setting the THROTTLE button off
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_THROTTLE_OFF
$X52CLI led THROTTLE off
verify_output

View File

@ -0,0 +1,11 @@
#!/bin/bash
# Test setting the THROTTLE button on
source $(dirname $0)/common_infra.sh
expect_pattern $X52_LED_COMMAND_INDEX $X52_LED_THROTTLE_ON
$X52CLI led THROTTLE on
verify_output

View File

@ -0,0 +1,6 @@
#!/bin/bash
# Test the LED Fire button
source $(dirname $0)/common_infra.sh
exit $EXIT_SKIP