libx52/tests/common_infra.sh

193 lines
4.1 KiB
Bash

#!/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'
X52_MFD_BRIGHTNESS_INDEX='00b1'
X52_LED_BRIGHTNESS_INDEX='00b2'
X52_BLINK_INDICATOR_INDEX='00b4'
X52_SHIFT_INDICATOR_INDEX='00fd'
X52_INDICATOR_STATE_ON='0051'
X52_INDICATOR_STATE_OFF='0050'
X52_CLOCK_1_INDEX='00c0'
X52_CLOCK_2_INDEX='00c1'
X52_CLOCK_3_INDEX='00c2'
X52_CLOCK_DATE_INDEX='00c4'
X52_CLOCK_YEAR_INDEX='00c8'
X52_MFD_LINE_0_SET_INDEX='00d1'
X52_MFD_LINE_1_SET_INDEX='00d2'
X52_MFD_LINE_2_SET_INDEX='00d4'
X52_MFD_LINE_0_CLR_INDEX='00d9'
X52_MFD_LINE_1_CLR_INDEX='00da'
X52_MFD_LINE_2_CLR_INDEX='00dc'
find_programs()
{
# Tests and distcheck do not work on OSX, skip the tests
if [[ `uname -s` == [Dd]arwin* ]]
then
exit $EXIT_SKIP
fi
# 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()
{
export LIBUSBX52_DEVICE_LIST=$(mktemp)
EXPECTED_OUTPUT=$(mktemp)
OBSERVED_OUTPUT=$(mktemp)
trap "rm -f $EXPECTED_OUTPUT $OBSERVED_OUTPUT $LIBUSBX52_DEVICE_LIST" EXIT
$X52DEVLIST 06a3 0762
TEST_COUNT=0
TEST_PASS=0
TEST_FAIL=0
}
expect_pattern()
{
# Save pattern to expected output file
export LIBUSBX52_OUTPUT_DATA=$EXPECTED_OUTPUT
$X52LOGACT $@
# Save actual API calls to observed output file
export LIBUSBX52_OUTPUT_DATA=$OBSERVED_OUTPUT
}
verify_output()
{
if diff -q $EXPECTED_OUTPUT $OBSERVED_OUTPUT
then
echo "PASS: $TEST_ID"
TEST_PASS=$(($TEST_PASS + 1))
else
echo "FAIL: $TEST_ID"
echo 'Expected:'
echo '========='
sed 's/^/\t/' $EXPECTED_OUTPUT
echo
echo 'Observed:'
echo '========='
sed 's/^/\t/' $OBSERVED_OUTPUT
TEST_FAIL=$(($TEST_FAIL + 1))
fi
TEST_COUNT=$(($TEST_COUNT + 1))
}
verify_test_suite()
{
local sep='--------'
sep="$sep$sep"
sep="$sep$sep"
sep="$sep$sep"
echo
echo $sep
echo $TEST_SUITE_ID
echo $sep
echo -e "Total Tests:\t$TEST_COUNT"
echo -e "Tests Passed:\t$TEST_PASS"
echo -e "Tests Failed:\t$TEST_FAIL"
echo $sep
echo
if [[ "$TEST_FAIL" != 0 ]]
then
exit $EXIT_FAILURE
else
exit $EXIT_SUCCESS
fi
}
set -e
find_programs
setup_test
setup_preload