in katran/lib/testing/katran_tester.cpp [388:470]
int main(int argc, char** argv) {
gflags::ParseCommandLineFlags(&argc, &argv, true);
google::InitGoogleLogging(argv[0]);
FLAGS_logtostderr = 1;
katran::TesterConfig config;
auto testParam = getTestParam();
config.inputFileName = FLAGS_pcap_input;
config.outputFileName = FLAGS_pcap_output;
config.testData = testParam.testData;
if (FLAGS_packet_num >= 0) {
config.singleTestRunPacketNumber_ = FLAGS_packet_num;
}
katran::BpfTester tester(config);
if (FLAGS_print_base64) {
if (FLAGS_pcap_input.empty()) {
std::cout << "pcap_input is not specified! exiting";
return 1;
}
tester.printPcktBase64();
return 0;
}
katran::KatranMonitorConfig kmconfig;
kmconfig.path = FLAGS_monitor_output;
if (FLAGS_iobuf_storage) {
kmconfig.storage = katran::PcapStorageFormat::IOBUF;
kmconfig.bufferSize = k1Mbyte;
}
katran::KatranConfig kconfig{
kMainInterface,
kV4TunInterface,
kV6TunInterface,
FLAGS_balancer_prog,
FLAGS_healthchecking_prog,
kDefaultMac,
kDefaultPriority,
kNoExternalMap,
kDefaultKatranPos};
kconfig.enableHc = FLAGS_healthchecking_prog.empty() ? false : true;
kconfig.monitorConfig = kmconfig;
kconfig.katranSrcV4 = "10.0.13.37";
kconfig.katranSrcV6 = "fc00:2307::1337";
kconfig.localMac = kLocalMac;
kconfig.maxVips = MAX_VIPS;
katran::KatranLb lb(kconfig);
lb.loadBpfProgs();
listFeatures(lb);
auto balancer_prog_fd = lb.getKatranProgFd();
if (FLAGS_optional_counter_tests) {
preTestOptionalLbCounters(lb);
}
tester.setBpfProgFd(balancer_prog_fd);
if (FLAGS_test_from_fixtures) {
runTestsFromFixture(lb, tester, testParam);
if (FLAGS_install_features_mask > 0 || FLAGS_remove_features_mask > 0) {
// install/remove features will reload prog if provided, therefore
// reloading again is redundant
testInstallAndRemoveFeatures(lb);
runTestsFromFixture(lb, tester, testParam);
} else if (!FLAGS_reloaded_balancer_prog.empty()) {
auto res = lb.reloadBalancerProg(FLAGS_reloaded_balancer_prog);
if (!res) {
LOG(INFO) << "cannot reload balancer program";
return 1;
}
listFeatures(lb);
runTestsFromFixture(lb, tester, testParam);
}
return 0;
}
prepareLbData(lb);
if (!FLAGS_pcap_input.empty()) {
tester.testPcktsFromPcap();
return 0;
} else if (FLAGS_perf_testing) {
// for perf tests to work katran must be compiled w -DINLINE_DECAP
preparePerfTestingLbData(lb);
tester.testPerfFromFixture(FLAGS_repeat, FLAGS_position);
}
return 0;
}