1f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org/*
2f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
3f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org *
4f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org *  Use of this source code is governed by a BSD-style license
5f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org *  that can be found in the LICENSE file in the root of the source
6f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org *  tree. An additional intellectual property rights grant can be found
7f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org *  in the file PATENTS.  All contributing project authors may
8f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
9f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org */
10f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org
11f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org// This test doesn't actually verify the output since it's just printed
12f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org// to stdout by void functions, but it's still useful as it executes the code.
13f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org
14f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org#include <fstream>
15f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org#include <string>
16f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org
17f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org#include "testing/gtest/include/gtest/gtest.h"
18f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org#include "webrtc/test/testsupport/fileutils.h"
19f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org#include "webrtc/tools/frame_analyzer/video_quality_analysis.h"
20f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org
21f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.orgnamespace webrtc {
22f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.orgnamespace test {
23f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org
24e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.org// Setup a log file to write the output to instead of stdout because we don't
25e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.org// want those numbers to be picked up as perf numbers.
26e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.orgclass VideoQualityAnalysisTest : public ::testing::Test {
27e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.org protected:
28e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.org  static void SetUpTestCase() {
29e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.org    std::string log_filename = webrtc::test::OutputPath() +
30e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.org        "VideoQualityAnalysisTest.log";
31e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.org    logfile_ = fopen(log_filename.c_str(), "w");
32e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.org    ASSERT_TRUE(logfile_ != NULL);
33e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.org  }
34e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.org  static void TearDownTestCase() {
35e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.org    ASSERT_EQ(0, fclose(logfile_));
36e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.org  }
37e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.org  static FILE* logfile_;
38e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.org};
39e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.orgFILE* VideoQualityAnalysisTest::logfile_ = NULL;
40f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org
41e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.orgTEST_F(VideoQualityAnalysisTest, PrintAnalysisResultsEmpty) {
42f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org  ResultsContainer result;
43e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.org  PrintAnalysisResults(logfile_, "Empty", &result);
44f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org}
45f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org
46e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.orgTEST_F(VideoQualityAnalysisTest, PrintAnalysisResultsOneFrame) {
47f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org  ResultsContainer result;
48f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org  result.frames.push_back(AnalysisResult(0, 35.0, 0.9));
49e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.org  PrintAnalysisResults(logfile_, "OneFrame", &result);
50f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org}
51f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org
52e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.orgTEST_F(VideoQualityAnalysisTest, PrintAnalysisResultsThreeFrames) {
53f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org  ResultsContainer result;
54f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org  result.frames.push_back(AnalysisResult(0, 35.0, 0.9));
55f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org  result.frames.push_back(AnalysisResult(1, 34.0, 0.8));
56f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org  result.frames.push_back(AnalysisResult(2, 33.0, 0.7));
57e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.org  PrintAnalysisResults(logfile_, "ThreeFrames", &result);
58f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org}
59f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org
60e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.orgTEST_F(VideoQualityAnalysisTest, PrintMaxRepeatedAndSkippedFramesInvalidFile) {
61f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org  std::string stats_filename = OutputPath() + "non-existing-stats-file.txt";
62f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org  remove(stats_filename.c_str());
63e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.org  PrintMaxRepeatedAndSkippedFrames(logfile_, "NonExistingStatsFile",
64e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.org                                   stats_filename);
65f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org}
66f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org
67e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.orgTEST_F(VideoQualityAnalysisTest,
68e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.org       PrintMaxRepeatedAndSkippedFramesEmptyStatsFile) {
69f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org  std::string stats_filename = OutputPath() + "empty-stats.txt";
70f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org  std::ofstream stats_file;
71f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org  stats_file.open(stats_filename.c_str());
72f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org  stats_file.close();
73e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.org  PrintMaxRepeatedAndSkippedFrames(logfile_, "EmptyStatsFile", stats_filename);
74f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org}
75f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org
76e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.orgTEST_F(VideoQualityAnalysisTest, PrintMaxRepeatedAndSkippedFramesNormalFile) {
77f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org  std::string stats_filename = OutputPath() + "stats.txt";
78f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org  std::ofstream stats_file;
79f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org  stats_file.open(stats_filename.c_str());
80f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org  stats_file << "frame_0001 0100\n";
81f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org  stats_file << "frame_0002 0101\n";
82f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org  stats_file << "frame_0003 0101\n";
83f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org  stats_file << "frame_0004 0106\n";
84f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org  stats_file.close();
85f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org
86e2df8b7f0191497e8e7ceb22c8fb3cfbbc65487ekjellander@webrtc.org  PrintMaxRepeatedAndSkippedFrames(logfile_, "NormalStatsFile", stats_filename);
87f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org}
88f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org
89f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org
90f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org}  // namespace test
91f880f863dd9c0b1347ef185f5cc856f3ad045861kjellander@webrtc.org}  // namespace webrtc
92