diff --git a/src/voice_engine/main/test/auto_test/standard/file_before_streaming_test.cc b/src/voice_engine/main/test/auto_test/standard/file_before_streaming_test.cc index 9019199594..3390b0becd 100644 --- a/src/voice_engine/main/test/auto_test/standard/file_before_streaming_test.cc +++ b/src/voice_engine/main/test/auto_test/standard/file_before_streaming_test.cc @@ -11,19 +11,20 @@ #include "after_initialization_fixture.h" #include "test/testsupport/fileutils.h" -namespace { - -const int kSampleRateHz = 16000; -const int kTestDurationMs = 1000; -const int16_t kInputValue = 15000; -const int16_t kSilenceValue = 0; - +namespace { + +const int kSampleRateHz = 16000; +const int kTestDurationMs = 1000; +const int kSkipOutputMs = 50; +const int16_t kInputValue = 15000; +const int16_t kSilenceValue = 0; + } // namespace class FileBeforeStreamingTest : public AfterInitializationFixture { protected: FileBeforeStreamingTest() - : input_filename_(webrtc::test::OutputPath() + "file_test_input.pcm"), + : input_filename_(webrtc::test::OutputPath() + "file_test_input.pcm"), output_filename_(webrtc::test::OutputPath() + "file_test_output.pcm") { } @@ -34,57 +35,60 @@ class FileBeforeStreamingTest : public AfterInitializationFixture { void TearDown() { voe_base_->DeleteChannel(channel_); } - - // TODO(andrew): consolidate below methods in a shared place? - - // Generate input file with constant values as |kInputValue|. The file - // will be one second longer than the duration of the test. - void GenerateInputFile() { - FILE* input_file = fopen(input_filename_.c_str(), "wb"); - ASSERT_TRUE(input_file != NULL); - for (int i = 0; i < kSampleRateHz / 1000 * (kTestDurationMs + 1000); i++) { - ASSERT_EQ(1u, fwrite(&kInputValue, sizeof(kInputValue), 1, input_file)); - } - ASSERT_EQ(0, fclose(input_file)); + + // TODO(andrew): consolidate below methods in a shared place? + + // Generate input file with constant values as |kInputValue|. The file + // will be one second longer than the duration of the test. + void GenerateInputFile() { + FILE* input_file = fopen(input_filename_.c_str(), "wb"); + ASSERT_TRUE(input_file != NULL); + for (int i = 0; i < kSampleRateHz / 1000 * (kTestDurationMs + 1000); i++) { + ASSERT_EQ(1u, fwrite(&kInputValue, sizeof(kInputValue), 1, input_file)); + } + ASSERT_EQ(0, fclose(input_file)); } - void RecordOutput() { - // Start recording the mixed output for |kTestDurationMs| long. - EXPECT_EQ(0, voe_file_->StartRecordingPlayout(-1, - output_filename_.c_str())); - Sleep(kTestDurationMs); + void RecordOutput() { + // Start recording the mixed output for |kTestDurationMs| long. + EXPECT_EQ(0, voe_file_->StartRecordingPlayout(-1, + output_filename_.c_str())); + Sleep(kTestDurationMs); EXPECT_EQ(0, voe_file_->StopRecordingPlayout(-1)); } - void VerifyOutput(int16_t target_value) { - FILE* output_file = fopen(output_filename_.c_str(), "rb"); - ASSERT_TRUE(output_file != NULL); - int16_t output_value = 0; - int samples_read = 0; - - while (fread(&output_value, sizeof(output_value), 1, output_file) == 1) { - samples_read++; - EXPECT_EQ(output_value, target_value); - } - - // Ensure the recording length is close to the duration of the test. - ASSERT_GE((samples_read * 1000.0) / kSampleRateHz, 0.9 * kTestDurationMs); - - // Ensure we read the entire file. - ASSERT_NE(0, feof(output_file)); - ASSERT_EQ(0, fclose(output_file)); + void VerifyOutput(int16_t target_value) { + FILE* output_file = fopen(output_filename_.c_str(), "rb"); + ASSERT_TRUE(output_file != NULL); + int16_t output_value = 0; + int samples_read = 0; + + // Skip the first segment to avoid initialization and ramping-in effects. + EXPECT_EQ(0, fseek(output_file, sizeof(output_value) * + kSampleRateHz / 1000 * kSkipOutputMs, SEEK_SET)); + while (fread(&output_value, sizeof(output_value), 1, output_file) == 1) { + samples_read++; + EXPECT_EQ(output_value, target_value); + } + + // Ensure the recording length is close to the duration of the test. + ASSERT_GE((samples_read * 1000.0) / kSampleRateHz, 0.9 * kTestDurationMs); + + // Ensure we read the entire file. + ASSERT_NE(0, feof(output_file)); + ASSERT_EQ(0, fclose(output_file)); } -void VerifyEmptyOutput() { - FILE* output_file = fopen(output_filename_.c_str(), "rb"); - ASSERT_TRUE(output_file != NULL); - ASSERT_EQ(0, fseek(output_file, 0, SEEK_END)); - EXPECT_EQ(0, ftell(output_file)); - ASSERT_EQ(0, fclose(output_file)); -} +void VerifyEmptyOutput() { + FILE* output_file = fopen(output_filename_.c_str(), "rb"); + ASSERT_TRUE(output_file != NULL); + ASSERT_EQ(0, fseek(output_file, 0, SEEK_END)); + EXPECT_EQ(0, ftell(output_file)); + ASSERT_EQ(0, fclose(output_file)); +} int channel_; - const std::string input_filename_; + const std::string input_filename_; const std::string output_filename_; }; @@ -94,8 +98,7 @@ void VerifyEmptyOutput() { // 1. the same DC signal if file is played out, // 2. total silence if file is not played out, // 3. no output if playout is not started. -TEST_F(FileBeforeStreamingTest, - DISABLED_TestStartPlayingFileLocallyWithStartPlayout) { +TEST_F(FileBeforeStreamingTest, TestStartPlayingFileLocallyWithStartPlayout) { GenerateInputFile(); TEST_LOG("Playout is not started. File will not be played out.\n");