Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / webrtc / video_engine / test / auto_test / source / vie_autotest_main.cc
1 /*
2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10
11 #include "webrtc/video_engine/test/auto_test/interface/vie_autotest_main.h"
12
13 #include "gflags/gflags.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15
16 #include "webrtc/test/field_trial.h"
17 #include "webrtc/test/testsupport/fileutils.h"
18 #include "webrtc/video_engine/test/auto_test/interface/vie_autotest.h"
19 #include "webrtc/video_engine/test/auto_test/interface/vie_autotest_window_manager_interface.h"
20 #include "webrtc/video_engine/test/auto_test/interface/vie_window_creator.h"
21
22 DEFINE_bool(automated, false, "Run Video engine tests in noninteractive mode.");
23 DEFINE_bool(auto_custom_call, false, "Run custom call directly.");
24 DEFINE_string(force_fieldtrials, "",
25     "Field trials control experimental feature code which can be forced. "
26     "E.g. running with --force_fieldtrials=WebRTC-FooFeature/Enable/"
27     " will assign the group Enable to field trial WebRTC-FooFeature.");
28
29 static const std::string kStandardTest = "ViEStandardIntegrationTest";
30 static const std::string kExtendedTest = "ViEExtendedIntegrationTest";
31 static const std::string kApiTest = "ViEApiIntegrationTest";
32
33 ViEAutoTestMain::ViEAutoTestMain() {
34   index_to_test_method_map_[1] = "RunsBaseTestWithoutErrors";
35   index_to_test_method_map_[2] = "RunsCaptureTestWithoutErrors";
36   index_to_test_method_map_[3] = "RunsCodecTestWithoutErrors";
37   index_to_test_method_map_[4] = "[unused]";
38   index_to_test_method_map_[5] = "RunsImageProcessTestWithoutErrors";
39   index_to_test_method_map_[6] = "RunsNetworkTestWithoutErrors";
40   index_to_test_method_map_[7] = "RunsRenderTestWithoutErrors";
41   index_to_test_method_map_[8] = "RunsRtpRtcpTestWithoutErrors";
42 }
43
44 int ViEAutoTestMain::RunTests(int argc, char** argv) {
45   // Initialize logging.
46   ViETest::Init();
47   // Initialize WebRTC testing framework so paths to resources can be resolved.
48   webrtc::test::SetExecutablePath(argv[0]);
49   // Initialize the testing framework.
50   testing::InitGoogleTest(&argc, argv);
51   // AllowCommandLineParsing allows us to ignore flags passed on to us by
52   // Chromium build bots without having to explicitly disable them.
53   google::AllowCommandLineReparsing();
54   // Parse remaining flags:
55   google::ParseCommandLineFlags(&argc, &argv, true);
56   // Initialize field trial
57   webrtc::test::InitFieldTrialsFromString(FLAGS_force_fieldtrials);
58
59   int result;
60   if (FLAGS_automated) {
61     // Run in automated mode.
62 #if defined(WEBRTC_LINUX)
63     // All window-related tests are disabled on Linux for now.
64     // See https://code.google.com/p/chromium/issues/detail?id=318760
65     return 0;
66 #endif
67     result = RUN_ALL_TESTS();
68   } else if (FLAGS_auto_custom_call) {
69     // Run automated custom call.
70     result = RunSpecialTestCase(8);
71   } else {
72     // Run in interactive mode.
73     result = RunInteractiveMode();
74   }
75
76   ViETest::Terminate();
77   return result;
78 }
79
80 int ViEAutoTestMain::AskUserForTestCase() {
81   int choice;
82   std::string answer;
83
84   do {
85     ViETest::Log("\nSpecific tests:");
86     ViETest::Log("\t 0. Go back to previous menu.");
87
88     // Print all test method choices. Assumes that map sorts on its key.
89     int last_valid_choice = 0;
90     std::map<int, std::string>::const_iterator iterator;
91     for (iterator = index_to_test_method_map_.begin();
92         iterator != index_to_test_method_map_.end();
93         ++iterator) {
94       ViETest::Log("\t %d. %s", iterator->first, iterator->second.c_str());
95       last_valid_choice = iterator->first;
96     }
97
98     ViETest::Log("Choose specific test:");
99     choice = AskUserForNumber(0, last_valid_choice);
100   } while (choice == kInvalidChoice);
101
102   return choice;
103 }
104
105 int ViEAutoTestMain::AskUserForNumber(int min_allowed, int max_allowed) {
106   int result;
107   if (scanf("%d", &result) <= 0) {
108     ViETest::Log("\nPlease enter a number instead, then hit enter.");
109     getc(stdin);
110     return kInvalidChoice;
111   }
112   getc(stdin);  // Consume enter key.
113
114   if (result < min_allowed || result > max_allowed) {
115     ViETest::Log("%d-%d are valid choices. Please try again.", min_allowed,
116                  max_allowed);
117     return kInvalidChoice;
118   }
119
120   return result;
121 }
122
123 int ViEAutoTestMain::RunTestMatching(const std::string test_case,
124                                      const std::string test_method) {
125   testing::FLAGS_gtest_filter = test_case + "." + test_method;
126   return RUN_ALL_TESTS();
127 }
128
129 int ViEAutoTestMain::RunSpecificTestCaseIn(const std::string test_case_name)
130 {
131   // If user says 0, it means don't run anything.
132   int specific_choice = AskUserForTestCase();
133   if (specific_choice != 0){
134     return RunTestMatching(test_case_name,
135                            index_to_test_method_map_[specific_choice]);
136   }
137   return 0;
138 }
139
140 int ViEAutoTestMain::RunSpecialTestCase(int choice) {
141   // 7-10 don't run in GTest and need to initialize by themselves.
142   assert(choice >= 7 && choice <= 10);
143
144   // Create the windows
145   ViEWindowCreator windowCreator;
146   ViEAutoTestWindowManagerInterface* windowManager =
147       windowCreator.CreateTwoWindows();
148
149   // Create the test cases
150   ViEAutoTest vieAutoTest(windowManager->GetWindow1(),
151                           windowManager->GetWindow2());
152
153   int errors = 0;
154   switch (choice) {
155     case 7: errors = vieAutoTest.ViELoopbackCall();  break;
156     case 8: errors = vieAutoTest.ViECustomCall();    break;
157     case 9: errors = vieAutoTest.ViESimulcastCall(); break;
158     case 10: errors = vieAutoTest.ViERecordCall();   break;
159   }
160
161   windowCreator.TerminateWindows();
162   return errors;
163 }
164
165 int ViEAutoTestMain::RunInteractiveMode() {
166   ViETest::Log(" ============================== ");
167   ViETest::Log("    WebRTC ViE 3.x Autotest     ");
168   ViETest::Log(" ============================== \n");
169
170   int choice = 0;
171   int errors = 0;
172   do {
173     ViETest::Log("Test types: ");
174     ViETest::Log("\t 0. Quit");
175     ViETest::Log("\t 1. All standard tests (delivery test)");
176     ViETest::Log("\t 2. All API tests");
177     ViETest::Log("\t 3. All extended test");
178     ViETest::Log("\t 4. Specific standard test");
179     ViETest::Log("\t 5. Specific API test");
180     ViETest::Log("\t 6. Specific extended test");
181     ViETest::Log("\t 7. Simple loopback call");
182     ViETest::Log("\t 8. Custom configure a call");
183     ViETest::Log("\t 9. Simulcast in loopback");
184     ViETest::Log("\t 10. Record");
185     ViETest::Log("Select type of test:");
186
187     choice = AskUserForNumber(0, 10);
188     if (choice == kInvalidChoice) {
189       continue;
190     }
191     switch (choice) {
192       case 0:                                                 break;
193       case 1:  errors = RunTestMatching(kStandardTest, "*");  break;
194       case 2:  errors = RunTestMatching(kApiTest,      "*");  break;
195       case 3:  errors = RunTestMatching(kExtendedTest, "*");  break;
196       case 4:  errors = RunSpecificTestCaseIn(kStandardTest); break;
197       case 5:  errors = RunSpecificTestCaseIn(kApiTest);      break;
198       case 6:  errors = RunSpecificTestCaseIn(kExtendedTest); break;
199       default: errors = RunSpecialTestCase(choice);           break;
200     }
201   } while (choice != 0);
202
203   if (errors) {
204     ViETest::Log("Test done with errors, see ViEAutotestLog.txt for test "
205         "result.\n");
206     return 1;
207   } else {
208     ViETest::Log("Test done without errors, see ViEAutotestLog.txt for "
209         "test result.\n");
210     return 0;
211   }
212 }