2021-12-11 21:39:31 +00:00
|
|
|
cmake_minimum_required(VERSION 3.0)
|
|
|
|
project (FreeDATA)
|
|
|
|
include(CTest)
|
|
|
|
enable_testing()
|
|
|
|
|
|
|
|
# Find codec2
|
|
|
|
if(CODEC2_BUILD_DIR)
|
|
|
|
find_package(codec2 REQUIRED
|
|
|
|
PATHS ${CODEC2_BUILD_DIR}
|
|
|
|
NO_DEFAULT_PATH
|
|
|
|
CONFIGS codec2.cmake
|
|
|
|
)
|
|
|
|
if(codec2_FOUND)
|
|
|
|
message(STATUS "Codec2 library found in build tree.")
|
|
|
|
endif()
|
|
|
|
else()
|
|
|
|
find_package(codec2 REQUIRED)
|
|
|
|
endif()
|
|
|
|
|
2021-12-12 12:54:23 +00:00
|
|
|
# test variables
|
|
|
|
set(FRAMESPERBURST 3)
|
|
|
|
set(BURSTS 1)
|
|
|
|
set(TESTFRAMES 3)
|
|
|
|
|
2021-12-20 21:50:02 +00:00
|
|
|
add_test(NAME audio_buffer
|
|
|
|
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
|
2023-10-22 07:50:17 +00:00
|
|
|
export PYTHONPATH=../modem;
|
2021-12-20 21:50:02 +00:00
|
|
|
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
|
|
|
|
python3 test_audiobuffer.py")
|
|
|
|
set_tests_properties(audio_buffer PROPERTIES PASS_REGULAR_EXPRESSION "errors: 0")
|
2022-05-21 23:04:17 +00:00
|
|
|
|
2021-12-20 20:52:14 +00:00
|
|
|
add_test(NAME resampler
|
2021-12-15 21:20:24 +00:00
|
|
|
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
|
2023-10-22 07:50:17 +00:00
|
|
|
export PYTHONPATH=../modem;
|
2021-12-20 10:10:41 +00:00
|
|
|
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
|
2022-05-21 23:04:17 +00:00
|
|
|
python3 test_resample_48_8.py")
|
2021-12-20 20:52:14 +00:00
|
|
|
set_tests_properties(resampler PROPERTIES PASS_REGULAR_EXPRESSION "PASS")
|
2021-12-15 21:20:24 +00:00
|
|
|
|
2023-10-22 07:50:17 +00:00
|
|
|
add_test(NAME modem_state_machine
|
2022-05-21 23:04:17 +00:00
|
|
|
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
|
2023-10-22 07:50:17 +00:00
|
|
|
export PYTHONPATH=../modem;
|
2022-05-21 23:04:17 +00:00
|
|
|
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
|
2023-10-22 07:50:17 +00:00
|
|
|
python3 test_modem_states.py")
|
|
|
|
set_tests_properties(modem_state_machine PROPERTIES PASS_REGULAR_EXPRESSION "errors: 0")
|
2022-05-21 23:04:17 +00:00
|
|
|
|
2023-10-22 07:50:17 +00:00
|
|
|
add_test(NAME modem_irs_iss
|
2022-05-21 23:04:17 +00:00
|
|
|
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
|
2023-10-22 07:50:17 +00:00
|
|
|
export PYTHONPATH=../modem;
|
2022-05-21 23:04:17 +00:00
|
|
|
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
|
2023-10-22 07:50:17 +00:00
|
|
|
python3 test_modem.py")
|
|
|
|
set_tests_properties(modem_irs_iss PROPERTIES PASS_REGULAR_EXPRESSION "errors: 0")
|
2022-05-21 23:04:17 +00:00
|
|
|
|
2023-05-15 06:55:49 +00:00
|
|
|
# disabled this test as its actually broken since we introduced session IDs
|
2022-12-01 07:40:12 +00:00
|
|
|
#add_test(NAME chat_text
|
|
|
|
# COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
|
2023-10-22 07:50:17 +00:00
|
|
|
# export PYTHONPATH=../modem;
|
2022-12-01 07:40:12 +00:00
|
|
|
# cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
|
|
|
|
# python3 test_chat_text.py")
|
|
|
|
# set_tests_properties(chat_text PROPERTIES PASS_REGULAR_EXPRESSION "errors: 0")
|
2022-06-16 23:16:31 +00:00
|
|
|
|
2023-04-21 13:16:31 +00:00
|
|
|
add_test(NAME datac13_frames
|
2022-06-16 23:16:31 +00:00
|
|
|
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
|
2023-10-22 07:50:17 +00:00
|
|
|
export PYTHONPATH=../modem;
|
2022-06-16 23:16:31 +00:00
|
|
|
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
|
2023-04-21 13:16:31 +00:00
|
|
|
python3 test_datac13.py")
|
|
|
|
set_tests_properties(datac13_frames PROPERTIES PASS_REGULAR_EXPRESSION "errors: 0")
|
2022-06-16 23:16:31 +00:00
|
|
|
|
2023-05-15 06:55:49 +00:00
|
|
|
# disabled this test as its actually broken since we introduced dataclasses
|
|
|
|
#add_test(NAME datac13_frames_negative
|
|
|
|
# COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
|
2023-10-22 07:50:17 +00:00
|
|
|
# export PYTHONPATH=../modem;
|
2023-05-15 06:55:49 +00:00
|
|
|
# cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
|
|
|
|
# python3 test_datac13_negative.py")
|
|
|
|
# set_tests_properties(datac13_frames_negative PROPERTIES PASS_REGULAR_EXPRESSION "errors: 0")
|
2022-06-21 23:46:22 +00:00
|
|
|
|
2022-05-21 23:04:17 +00:00
|
|
|
add_test(NAME helper_routines
|
|
|
|
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
|
2023-10-22 07:50:17 +00:00
|
|
|
export PYTHONPATH=../modem;
|
2022-05-21 23:04:17 +00:00
|
|
|
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
|
|
|
|
python3 test_helpers.py")
|
|
|
|
set_tests_properties(helper_routines PROPERTIES PASS_REGULAR_EXPRESSION "errors: 0")
|
|
|
|
|
|
|
|
add_test(NAME py_highsnr_stdio_P_P_multi
|
|
|
|
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
|
2023-10-22 07:50:17 +00:00
|
|
|
export PYTHONPATH=../modem;
|
2022-05-21 23:04:17 +00:00
|
|
|
export BURSTS=${BURSTS};
|
|
|
|
export FRAMESPERBURST=${FRAMESPERBURST};
|
|
|
|
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
|
|
|
|
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
|
|
|
|
python3 test_highsnr_stdio_P_P_multi.py")
|
2023-04-21 13:16:31 +00:00
|
|
|
set_tests_properties(py_highsnr_stdio_P_P_multi PROPERTIES PASS_REGULAR_EXPRESSION "DATAC13: ${BURSTS}/${FRAMESPERBURST} DATAC1: ${BURSTS}/${FRAMESPERBURST} DATAC3: ${BURSTS}/${FRAMESPERBURST}")
|
2022-05-21 23:04:17 +00:00
|
|
|
|
|
|
|
add_test(NAME py_highsnr_stdio_P_P_datacx
|
|
|
|
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
|
2023-10-22 07:50:17 +00:00
|
|
|
export PYTHONPATH=../modem;
|
2022-05-21 23:04:17 +00:00
|
|
|
export BURSTS=${BURSTS};
|
|
|
|
export FRAMESPERBURST=${FRAMESPERBURST};
|
|
|
|
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
|
|
|
|
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
|
|
|
|
python3 test_highsnr_stdio_P_P_datacx.py")
|
|
|
|
set_tests_properties(py_highsnr_stdio_P_P_datacx PROPERTIES PASS_REGULAR_EXPRESSION "RECEIVED BURSTS: ${BURSTS} RECEIVED FRAMES: ${FRAMESPERBURST}")
|
|
|
|
|
|
|
|
add_test(NAME py_highsnr_stdio_P_C_datacx
|
|
|
|
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
|
2023-10-22 07:50:17 +00:00
|
|
|
export PYTHONPATH=../modem;
|
2022-05-21 23:04:17 +00:00
|
|
|
export BURSTS=${BURSTS};
|
|
|
|
export FRAMESPERBURST=${FRAMESPERBURST};
|
|
|
|
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
|
|
|
|
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
|
|
|
|
python3 test_highsnr_stdio_P_C_datacx.py")
|
|
|
|
set_tests_properties(py_highsnr_stdio_P_C_datacx PROPERTIES PASS_REGULAR_EXPRESSION "HELLO WORLD")
|
|
|
|
|
|
|
|
add_test(NAME py_highsnr_stdio_C_P_datacx
|
|
|
|
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
|
2023-10-22 07:50:17 +00:00
|
|
|
export PYTHONPATH=../modem;
|
2022-05-21 23:04:17 +00:00
|
|
|
export BURSTS=${BURSTS};
|
|
|
|
export FRAMESPERBURST=${FRAMESPERBURST};
|
|
|
|
export TESTFRAMES=${TESTFRAMES};
|
|
|
|
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
|
|
|
|
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
|
|
|
|
python3 test_highsnr_stdio_C_P_datacx.py")
|
|
|
|
set_tests_properties(py_highsnr_stdio_C_P_datacx PROPERTIES PASS_REGULAR_EXPRESSION "RECEIVED BURSTS: ${BURSTS} RECEIVED FRAMES: ${FRAMESPERBURST}")
|
|
|
|
|
2021-12-20 20:52:14 +00:00
|
|
|
add_test(NAME highsnr_stdio_P_C_single
|
2021-12-11 22:05:06 +00:00
|
|
|
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
|
2021-12-11 22:50:53 +00:00
|
|
|
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
|
2021-12-20 10:10:41 +00:00
|
|
|
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
|
2023-04-21 13:16:31 +00:00
|
|
|
python3 util_tx.py --mode datac13 --delay 500 --framesperburst ${FRAMESPERBURST} --bursts ${BURSTS} |
|
2021-12-16 03:24:59 +00:00
|
|
|
sox -t .s16 -r 48000 -c 1 - -t .s16 -r 8000 -c 1 - |
|
2023-04-21 13:16:31 +00:00
|
|
|
freedv_data_raw_rx datac13 - - --framesperburst ${FRAMESPERBURST} | hexdump -C")
|
2021-12-20 20:52:14 +00:00
|
|
|
set_tests_properties(highsnr_stdio_P_C_single PROPERTIES PASS_REGULAR_EXPRESSION "HELLO WORLD")
|
2021-12-11 21:39:31 +00:00
|
|
|
|
2021-12-20 20:52:14 +00:00
|
|
|
add_test(NAME highsnr_stdio_C_P_single
|
2021-12-12 12:54:23 +00:00
|
|
|
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
|
|
|
|
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
|
2021-12-20 10:10:41 +00:00
|
|
|
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
|
2023-04-21 13:16:31 +00:00
|
|
|
freedv_data_raw_tx datac13 --testframes ${TESTFRAMES} --bursts ${BURSTS} --framesperburst ${FRAMESPERBURST} /dev/zero - |
|
2021-12-16 03:24:59 +00:00
|
|
|
sox -t .s16 -r 8000 -c 1 - -t .s16 -r 48000 -c 1 - |
|
2023-04-21 13:16:31 +00:00
|
|
|
python3 util_rx.py --mode datac13 --framesperburst ${FRAMESPERBURST} --bursts ${BURSTS}")
|
2021-12-20 20:52:14 +00:00
|
|
|
set_tests_properties(highsnr_stdio_C_P_single PROPERTIES PASS_REGULAR_EXPRESSION "RECEIVED BURSTS: ${BURSTS} RECEIVED FRAMES: ${FRAMESPERBURST}")
|
2021-12-12 12:54:23 +00:00
|
|
|
|
2021-12-20 20:52:14 +00:00
|
|
|
add_test(NAME highsnr_stdio_P_P_single
|
2021-12-12 12:54:23 +00:00
|
|
|
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
|
|
|
|
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
|
2021-12-20 10:10:41 +00:00
|
|
|
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
|
2023-04-21 13:16:31 +00:00
|
|
|
python3 util_tx.py --mode datac13 --delay 500 --framesperburst ${FRAMESPERBURST} --bursts ${BURSTS} |
|
|
|
|
python3 util_rx.py --debug --mode datac13 --framesperburst ${FRAMESPERBURST} --bursts ${BURSTS}")
|
2021-12-20 20:52:14 +00:00
|
|
|
set_tests_properties(highsnr_stdio_P_P_single PROPERTIES PASS_REGULAR_EXPRESSION "RECEIVED BURSTS: ${BURSTS} RECEIVED FRAMES: ${FRAMESPERBURST}")
|
2022-05-21 23:04:17 +00:00
|
|
|
|
2021-12-20 20:52:14 +00:00
|
|
|
add_test(NAME highsnr_stdio_P_P_multi
|
2021-12-13 20:11:09 +00:00
|
|
|
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
|
|
|
|
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
|
2021-12-20 10:10:41 +00:00
|
|
|
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
|
2022-05-20 20:31:42 +00:00
|
|
|
python3 util_multimode_tx.py --delay 500 --framesperburst ${FRAMESPERBURST} --bursts ${BURSTS} |
|
2023-04-21 14:14:32 +00:00
|
|
|
python3 util_multimode_rx.py --framesperburst ${FRAMESPERBURST} --bursts ${BURSTS} --timeout 60")
|
2023-04-21 13:16:31 +00:00
|
|
|
set_tests_properties(highsnr_stdio_P_P_multi PROPERTIES PASS_REGULAR_EXPRESSION "DATAC13: ${BURSTS}/${FRAMESPERBURST} DATAC1: ${BURSTS}/${FRAMESPERBURST} DATAC3: ${BURSTS}/${FRAMESPERBURST}")
|
2021-12-14 02:48:12 +00:00
|
|
|
|
2021-12-20 20:52:14 +00:00
|
|
|
# These tests can't run on GitHub actions as we don't have a virtual sound card
|
2021-12-14 02:48:12 +00:00
|
|
|
if(NOT DEFINED ENV{GITHUB_RUN_ID})
|
|
|
|
|
2021-12-14 20:51:54 +00:00
|
|
|
# uses aplay/arecord then pipe to Python
|
2021-12-20 20:52:14 +00:00
|
|
|
add_test(NAME highsnr_virtual1_P_P_single_alsa
|
2021-12-14 02:48:12 +00:00
|
|
|
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
|
|
|
|
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
|
2021-12-20 10:10:41 +00:00
|
|
|
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
|
2021-12-14 20:51:54 +00:00
|
|
|
./test_virtual1.sh")
|
2021-12-20 20:52:14 +00:00
|
|
|
set_tests_properties(highsnr_virtual1_P_P_single_alsa PROPERTIES PASS_REGULAR_EXPRESSION "RECEIVED BURSTS: 5 RECEIVED FRAMES: 10 RX_ERRORS: 0")
|
2021-12-14 20:51:54 +00:00
|
|
|
|
2021-12-15 03:37:26 +00:00
|
|
|
# let Python do audio I/O
|
2021-12-20 20:52:14 +00:00
|
|
|
add_test(NAME highsnr_virtual2_P_P_single
|
2021-12-14 20:51:54 +00:00
|
|
|
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
|
|
|
|
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
|
2021-12-20 10:10:41 +00:00
|
|
|
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
|
2021-12-14 20:51:54 +00:00
|
|
|
./test_virtual2.sh")
|
2021-12-20 20:52:14 +00:00
|
|
|
set_tests_properties(highsnr_virtual2_P_P_single PROPERTIES PASS_REGULAR_EXPRESSION "RECEIVED BURSTS: 3 RECEIVED FRAMES: 6 RX_ERRORS: 0")
|
2021-12-14 02:48:12 +00:00
|
|
|
|
2021-12-15 03:37:26 +00:00
|
|
|
# Multimode test with Python I/O
|
2021-12-20 20:52:14 +00:00
|
|
|
add_test(NAME highsnr_virtual3_P_P_multi
|
2021-12-14 22:07:01 +00:00
|
|
|
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
|
|
|
|
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
|
2021-12-20 10:10:41 +00:00
|
|
|
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
|
2021-12-14 22:07:01 +00:00
|
|
|
./test_virtual_mm.sh")
|
2023-04-21 13:16:31 +00:00
|
|
|
set_tests_properties(highsnr_virtual3_P_P_multi PROPERTIES PASS_REGULAR_EXPRESSION "DATAC13: 2/4 DATAC1: 2/4 DATAC3: 2/4")
|
2021-12-19 14:04:35 +00:00
|
|
|
|
|
|
|
# let Python do audio I/O via pyaudio callback mode
|
2021-12-20 20:52:14 +00:00
|
|
|
add_test(NAME highsnr_virtual4_P_P_single_callback
|
2021-12-19 14:04:35 +00:00
|
|
|
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
|
|
|
|
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
|
2021-12-20 10:10:41 +00:00
|
|
|
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
|
2021-12-20 09:33:35 +00:00
|
|
|
./test_virtual3a.sh")
|
2021-12-20 20:52:14 +00:00
|
|
|
set_tests_properties(highsnr_virtual4_P_P_single_callback PROPERTIES PASS_REGULAR_EXPRESSION "RECEIVED BURSTS: 3 RECEIVED FRAMES: 6 RX_ERRORS: 0")
|
2021-12-19 14:04:35 +00:00
|
|
|
|
2021-12-20 09:33:35 +00:00
|
|
|
# let Python do audio I/O via pyaudio callback mode with code outside of callback
|
2021-12-20 20:52:14 +00:00
|
|
|
add_test(NAME highsnr_virtual4_P_P_single_callback_outside
|
2021-12-20 09:33:35 +00:00
|
|
|
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
|
|
|
|
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
|
2021-12-20 10:10:41 +00:00
|
|
|
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
|
2021-12-20 09:33:35 +00:00
|
|
|
./test_virtual3b.sh")
|
2021-12-20 20:52:14 +00:00
|
|
|
set_tests_properties(highsnr_virtual4_P_P_single_callback_outside PROPERTIES PASS_REGULAR_EXPRESSION "RECEIVED BURSTS: 3 RECEIVED FRAMES: 6 RX_ERRORS: 0")
|
2021-12-19 14:04:35 +00:00
|
|
|
|
2021-12-20 11:15:35 +00:00
|
|
|
# let Python do audio I/O via pyaudio callback mode with code outside of callback
|
2021-12-20 20:52:14 +00:00
|
|
|
add_test(NAME highsnr_virtual5_P_P_multi_callback
|
2021-12-20 11:15:35 +00:00
|
|
|
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
|
|
|
|
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
|
|
|
|
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
|
|
|
|
./test_virtual4a.sh")
|
2023-04-21 13:16:31 +00:00
|
|
|
set_tests_properties(highsnr_virtual5_P_P_multi_callback PROPERTIES PASS_REGULAR_EXPRESSION "DATAC13: 2/4 DATAC1: 2/4 DATAC3: 2/4")
|
2021-12-20 11:15:35 +00:00
|
|
|
|
|
|
|
# let Python do audio I/O via pyaudio callback mode with code outside of callback
|
2021-12-20 20:52:14 +00:00
|
|
|
add_test(NAME highsnr_virtual5_P_P_multi_callback_outside
|
2021-12-20 11:15:35 +00:00
|
|
|
COMMAND sh -c "export LD_LIBRARY_PATH=${CODEC2_BUILD_DIR}/src;
|
|
|
|
PATH=$PATH:${CODEC2_BUILD_DIR}/src;
|
|
|
|
cd ${CMAKE_CURRENT_SOURCE_DIR}/test;
|
|
|
|
./test_virtual4b.sh")
|
2023-04-21 13:16:31 +00:00
|
|
|
set_tests_properties(highsnr_virtual5_P_P_multi_callback_outside PROPERTIES PASS_REGULAR_EXPRESSION "DATAC13: 2/4 DATAC1: 2/4 DATAC3: 2/4")
|
2022-05-21 23:04:17 +00:00
|
|
|
|
2021-12-14 02:48:12 +00:00
|
|
|
endif()
|
2022-05-21 23:04:17 +00:00
|
|
|
|