| #!/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 |