libx52/tests/common_infra.sh

204 lines
4.4 KiB
Bash

#!/bin/bash
# Common infrastructure for the test cases
#
# Copyright (C) 2012-2018 Nirenjan Krishnan (nirenjan@nirenjan.org)
#
# SPDX-License-Identifier: GPL-2.0-only WITH Classpath-exception-2.0
# 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
echo "1..0 # skip Tests not supported on OSX"
exit 0
fi
# Find the X52cli script
X52CLI=$(find .. -path '*/cli/x52cli' -perm -+x)
if [[ -z "$X52CLI" ]]
then
exit 1
fi
# Find the x52test_log_actions program
X52LOGACT=$(find .. -path '*/libusbx52/x52test_log_actions' -perm -+x)
if [[ -z "$X52LOGACT" ]]
then
exit 1
fi
# Find the x52test_create_device_list program
X52DEVLIST=$(find .. -path '*/libusbx52/x52test_create_device_list' -perm -+x)
if [[ -z "$X52DEVLIST" ]]
then
exit 1
fi
}
# This is for additional programs that are not needed by every test case
require_programs()
{
local skip=false
for prog in "$@"
do
if ! command -v "$prog"
then
echo "1..0 # skip Required program '$prog' not found"
skip=true
fi
done
if $skip
then
exit 0
fi
}
setup_preload()
{
# Find the libusb stub library
LIBUSB=$(find .. -name 'libusbx52.so.*.*.*' -type f)
if [[ -z "$LIBUSB" ]]
then
exit 1
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()
{
TEST_NUM=$((TEST_NUM + 1))
# 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()
{
TEST_COUNT=$(($TEST_COUNT + 1))
if diff -q $EXPECTED_OUTPUT $OBSERVED_OUTPUT
then
echo "ok $TEST_COUNT $TEST_ID"
TEST_PASS=$(($TEST_PASS + 1))
else
echo "not ok $TEST_COUNT $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
}
verify_test_suite()
{
local sep='--------'
sep="$sep$sep"
sep="$sep$sep"
sep="$sep$sep"
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 "1..$TEST_COUNT"
}
set -e
find_programs
setup_test
setup_preload