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