blob: b9f69582c942c969720d36b839b7016ed558dc57 [file] [log] [blame]
/*
* Copyright (c) 2011 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.
*/
#include "vie_autotest_main.h"
#include "gflags/gflags.h"
#include "gtest/gtest.h"
#include "vie_autotest.h"
#include "vie_autotest_window_manager_interface.h"
#include "vie_window_creator.h"
DEFINE_bool(automated, false, "Run Video engine tests in noninteractive mode.");
static const std::string kStandardTest = "ViEStandardIntegrationTest";
static const std::string kExtendedTest = "ViEExtendedIntegrationTest";
static const std::string kApiTest = "ViEApiIntegrationTest";
ViEAutoTestMain::ViEAutoTestMain() {
index_to_test_method_map_[1] = "RunsBaseTestWithoutErrors";
index_to_test_method_map_[2] = "RunsCaptureTestWithoutErrors";
index_to_test_method_map_[3] = "RunsCodecTestWithoutErrors";
index_to_test_method_map_[4] = "RunsEncryptionTestWithoutErrors";
index_to_test_method_map_[5] = "RunsFileTestWithoutErrors";
index_to_test_method_map_[6] = "RunsImageProcessTestWithoutErrors";
index_to_test_method_map_[7] = "RunsNetworkTestWithoutErrors";
index_to_test_method_map_[8] = "RunsRenderTestWithoutErrors";
index_to_test_method_map_[9] = "RunsRtpRtcpTestWithoutErrors";
}
int ViEAutoTestMain::RunTests(int argc, char** argv) {
// Initialize logging.
ViETest::Init();
// Initialize the testing framework.
testing::InitGoogleTest(&argc, argv);
// Parse remaining flags:
google::ParseCommandLineFlags(&argc, &argv, true);
int result;
if (FLAGS_automated) {
// Run in automated mode.
result = RUN_ALL_TESTS();
} else {
// Run in interactive mode.
result = RunInteractiveMode();
}
ViETest::Terminate();
return result;
}
int ViEAutoTestMain::AskUserForTestCase() {
int choice;
std::string answer;
do {
ViETest::Log("\nSpecific tests:");
ViETest::Log("\t 0. Go back to previous menu.");
// Print all test method choices. Assumes that map sorts on its key.
int last_valid_choice = 0;
std::map<int, std::string>::const_iterator iterator;
for (iterator = index_to_test_method_map_.begin();
iterator != index_to_test_method_map_.end();
++iterator) {
ViETest::Log("\t %d. %s", iterator->first, iterator->second.c_str());
last_valid_choice = iterator->first;
}
ViETest::Log("Choose specific test:");
choice = AskUserForNumber(0, last_valid_choice);
} while (choice == kInvalidChoice);
return choice;
}
int ViEAutoTestMain::AskUserForNumber(int min_allowed, int max_allowed) {
int result;
if (scanf("%d", &result) <= 0) {
ViETest::Log("\nPlease enter a number instead, then hit enter.");
getchar();
return kInvalidChoice;
}
getchar(); // Consume enter key.
if (result < min_allowed || result > max_allowed) {
ViETest::Log("%d-%d are valid choices. Please try again.", min_allowed,
max_allowed);
return kInvalidChoice;
}
return result;
}
int ViEAutoTestMain::RunTestMatching(const std::string test_case,
const std::string test_method) {
testing::FLAGS_gtest_filter = test_case + "." + test_method;
return RUN_ALL_TESTS();
}
int ViEAutoTestMain::RunSpecificTestCaseIn(const std::string test_case_name)
{
// If user says 0, it means don't run anything.
int specific_choice = AskUserForTestCase();
if (specific_choice != 0){
return RunTestMatching(test_case_name,
index_to_test_method_map_[specific_choice]);
}
return 0;
}
int ViEAutoTestMain::RunSpecialTestCase(int choice) {
// 7-9 don't run in GTest and need to initialize by themselves.
assert(choice >= 7 && choice <= 9);
// Create the windows
ViEWindowCreator windowCreator;
ViEAutoTestWindowManagerInterface* windowManager =
windowCreator.CreateTwoWindows();
// Create the test cases
ViEAutoTest vieAutoTest(windowManager->GetWindow1(),
windowManager->GetWindow2());
int errors = 0;
switch (choice) {
case 7: errors = vieAutoTest.ViELoopbackCall(); break;
case 8: errors = vieAutoTest.ViECustomCall(); break;
case 9: errors = vieAutoTest.ViESimulcastCall(); break;
}
windowCreator.TerminateWindows();
return errors;
}
bool ViEAutoTestMain::RunInteractiveMode() {
ViETest::Log(" ============================== ");
ViETest::Log(" WebRTC ViE 3.x Autotest ");
ViETest::Log(" ============================== \n");
int choice = 0;
int errors = 0;
do {
ViETest::Log("Test types: ");
ViETest::Log("\t 0. Quit");
ViETest::Log("\t 1. All standard tests (delivery test)");
ViETest::Log("\t 2. All API tests");
ViETest::Log("\t 3. All extended test");
ViETest::Log("\t 4. Specific standard test");
ViETest::Log("\t 5. Specific API test");
ViETest::Log("\t 6. Specific extended test");
ViETest::Log("\t 7. Simple loopback call");
ViETest::Log("\t 8. Custom configure a call");
ViETest::Log("\t 9. Simulcast in loopback");
ViETest::Log("Select type of test:");
choice = AskUserForNumber(0, 9);
if (choice == kInvalidChoice) {
continue;
}
switch (choice) {
case 0: break;
case 1: errors = RunTestMatching(kStandardTest, "*"); break;
case 2: errors = RunTestMatching(kApiTest, "*"); break;
case 3: errors = RunTestMatching(kExtendedTest, "*"); break;
case 4: errors = RunSpecificTestCaseIn(kStandardTest); break;
case 5: errors = RunSpecificTestCaseIn(kApiTest); break;
case 6: errors = RunSpecificTestCaseIn(kExtendedTest); break;
default: errors = RunSpecialTestCase(choice); break;
}
} while (choice != 0);
if (errors) {
ViETest::Log("Test done with errors, see ViEAutotestLog.txt for test "
"result.\n");
} else {
ViETest::Log("Test done without errors, see ViEAutotestLog.txt for "
"test result.\n");
}
return true;
}