| #!/bin/bash | |
| # | |
| # Copyright (c) 2019 The WebRTC project authors. All Rights Reserved. | |
| # | |
| # Use of this source code is governed by a BSD-style license | |
| # that can be found in the LICENSE file in the root of the source | |
| # tree. An additional intellectual property rights grant can be found | |
| # in the file PATENTS. All contributing project authors may | |
| # be found in the AUTHORS file in the root of the source tree. | |
| # | |
| # Aliases. | |
| BIN=$1 | |
| TEST_RTC_EVENT_LOG=$2 | |
| INPUT_PCM_FILE=$3 | |
| # Check setup. | |
| if [ ! -f $BIN ]; then | |
| echo "Cannot find neteq_rtpplay binary." | |
| exit 99 | |
| fi | |
| if [ ! -f $TEST_RTC_EVENT_LOG ]; then | |
| echo "Cannot find RTC event log file." | |
| exit 99 | |
| fi | |
| if [ ! -f $INPUT_PCM_FILE ]; then | |
| echo "Cannot find PCM file." | |
| exit 99 | |
| fi | |
| # Defines. | |
| TMP_DIR=$(mktemp -d /tmp/tmp_XXXXXXXXXX) | |
| PASS=0 | |
| FAIL=1 | |
| TEST_SUITE_RESULT=$PASS | |
| file_hash () { | |
| md5sum $1 | awk '{ print $1 }' | |
| } | |
| test_passed () { | |
| echo PASS | |
| } | |
| test_failed () { | |
| echo "FAIL: $1" | |
| TEST_SUITE_RESULT=$FAIL | |
| } | |
| test_file_checksums_match () { | |
| if [ ! -f $1 ] || [ ! -f $2 ]; then | |
| test_failed "Cannot compare hash values: file(s) not found." | |
| return | |
| fi | |
| HASH1=$(file_hash $1) | |
| HASH2=$(file_hash $2) | |
| if [ "$HASH1" = "$HASH2" ]; then | |
| test_passed | |
| else | |
| test_failed "$1 differs from $2" | |
| fi | |
| } | |
| test_file_exists () { | |
| if [ -f $1 ]; then | |
| test_passed | |
| else | |
| test_failed "$1 does not exist" | |
| fi | |
| } | |
| test_exit_code_0 () { | |
| if [ $1 -eq 0 ]; then | |
| test_passed | |
| else | |
| test_failed "$1 did not return 0" | |
| fi | |
| } | |
| test_exit_code_not_0 () { | |
| if [ $1 -eq 0 ]; then | |
| test_failed "$1 returned 0" | |
| else | |
| test_passed | |
| fi | |
| } | |
| # Generate test data. | |
| # Case 1. Pre-existing way. | |
| CASE1_WAV=$TMP_DIR/case1.wav | |
| $BIN $TEST_RTC_EVENT_LOG $CASE1_WAV \ | |
| --replacement_audio_file $INPUT_PCM_FILE \ | |
| --textlog --pythonplot --matlabplot \ | |
| > $TMP_DIR/case1.stdout 2> /dev/null | |
| CASE1_RETURN_CODE=$? | |
| CASE1_TEXTLOG=$TMP_DIR/case1.wav.text_log.txt | |
| CASE1_PYPLOT=$TMP_DIR/case1_wav.py | |
| CASE1_MATPLOT=$TMP_DIR/case1_wav.m | |
| # Case 2. No output files. | |
| $BIN $TEST_RTC_EVENT_LOG --replacement_audio_file $INPUT_PCM_FILE \ | |
| > $TMP_DIR/case2.stdout 2> /dev/null | |
| CASE2_RETURN_CODE=$? | |
| # Case 3. No output audio file. | |
| # Case 3.1 Without --output_files_base_name (won't run). | |
| $BIN $TEST_RTC_EVENT_LOG \ | |
| --replacement_audio_file $INPUT_PCM_FILE \ | |
| --textlog --pythonplot --matlabplot \ | |
| &> /dev/null | |
| CASE3_1_RETURN_CODE=$? | |
| # Case 3.2 With --output_files_base_name (runs). | |
| $BIN $TEST_RTC_EVENT_LOG \ | |
| --replacement_audio_file $INPUT_PCM_FILE \ | |
| --output_files_base_name $TMP_DIR/case3_2 \ | |
| --textlog --pythonplot --matlabplot \ | |
| > $TMP_DIR/case3_2.stdout 2> /dev/null | |
| CASE3_2_RETURN_CODE=$? | |
| CASE3_2_TEXTLOG=$TMP_DIR/case3_2.text_log.txt | |
| CASE3_2_PYPLOT=$TMP_DIR/case3_2.py | |
| CASE3_2_MATPLOT=$TMP_DIR/case3_2.m | |
| # Case 4. With output audio file and --output_files_base_name. | |
| CASE4_WAV=$TMP_DIR/case4.wav | |
| $BIN $TEST_RTC_EVENT_LOG $TMP_DIR/case4.wav \ | |
| --replacement_audio_file $INPUT_PCM_FILE \ | |
| --output_files_base_name $TMP_DIR/case4 \ | |
| --textlog --pythonplot --matlabplot \ | |
| > $TMP_DIR/case4.stdout 2> /dev/null | |
| CASE4_RETURN_CODE=$? | |
| CASE4_TEXTLOG=$TMP_DIR/case4.text_log.txt | |
| CASE4_PYPLOT=$TMP_DIR/case4.py | |
| CASE4_MATPLOT=$TMP_DIR/case4.m | |
| # Tests. | |
| echo Check exit codes | |
| test_exit_code_0 $CASE1_RETURN_CODE | |
| test_exit_code_0 $CASE2_RETURN_CODE | |
| test_exit_code_not_0 $CASE3_1_RETURN_CODE | |
| test_exit_code_0 $CASE3_2_RETURN_CODE | |
| test_exit_code_0 $CASE4_RETURN_CODE | |
| echo Check that the expected output files exist | |
| test_file_exists $CASE1_TEXTLOG | |
| test_file_exists $CASE3_2_TEXTLOG | |
| test_file_exists $CASE4_TEXTLOG | |
| test_file_exists $CASE1_PYPLOT | |
| test_file_exists $CASE3_2_PYPLOT | |
| test_file_exists $CASE4_PYPLOT | |
| test_file_exists $CASE1_MATPLOT | |
| test_file_exists $CASE3_2_MATPLOT | |
| test_file_exists $CASE4_MATPLOT | |
| echo Check that the same WAV file is produced | |
| test_file_checksums_match $CASE1_WAV $CASE4_WAV | |
| echo Check that the same text log is produced | |
| test_file_checksums_match $CASE1_TEXTLOG $CASE3_2_TEXTLOG | |
| test_file_checksums_match $CASE1_TEXTLOG $CASE4_TEXTLOG | |
| echo Check that the same python plot scripts is produced | |
| test_file_checksums_match $CASE1_PYPLOT $CASE3_2_PYPLOT | |
| test_file_checksums_match $CASE1_PYPLOT $CASE4_PYPLOT | |
| echo Check that the same matlab plot scripts is produced | |
| test_file_checksums_match $CASE1_MATPLOT $CASE3_2_MATPLOT | |
| test_file_checksums_match $CASE1_MATPLOT $CASE4_MATPLOT | |
| # Clean up | |
| rm -fr $TMP_DIR | |
| if [ $TEST_SUITE_RESULT -eq $PASS ]; then | |
| echo All tests passed. | |
| exit 0 | |
| else | |
| echo One or more tests failed. | |
| exit 1 | |
| fi |