From 318b19ad79a2af88ccd6e2fdc21e6f0c1302ad41 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Mon, 7 Jul 2025 17:36:40 +0200 Subject: [PATCH] wip test --- .../src/CommandLineOptions.cpp | 217 ++++++++++-------- slsReceiverSoftware/src/CommandLineOptions.h | 14 +- slsReceiverSoftware/tests/test-Apps.cpp | 153 ++++++++++++ 3 files changed, 281 insertions(+), 103 deletions(-) create mode 100644 slsReceiverSoftware/tests/test-Apps.cpp diff --git a/slsReceiverSoftware/src/CommandLineOptions.cpp b/slsReceiverSoftware/src/CommandLineOptions.cpp index a7d91f8cb..3cb573371 100644 --- a/slsReceiverSoftware/src/CommandLineOptions.cpp +++ b/slsReceiverSoftware/src/CommandLineOptions.cpp @@ -11,6 +11,16 @@ #include #include +ParsedOptions CommandLineOptions::parse(const std::vector &args) { + std::vector argv; + argv.reserve(args.size()); + for (const auto &arg : args) { + argv.push_back(const_cast(arg.c_str())); + } + int argc = static_cast(argv.size()); + return parse(argc, argv.data()); +} + ParsedOptions CommandLineOptions::parse(int argc, char *argv[]) { CommonOptions base; base.port = DEFAULT_TCP_RX_PORTNO; @@ -24,26 +34,26 @@ ParsedOptions CommandLineOptions::parse(int argc, char *argv[]) { auto optString = buildOptString(); auto longOptions = buildOptionList(); - int opt; - int option_index = 0; + optind = 0; // reset getopt + int opt, option_index = 0; while ((opt = getopt_long(argc, argv, optString.c_str(), longOptions.data(), &option_index)) != -1) { switch (opt) { - case 'v': case 'h': + handleCommonOption(opt, optarg, base); + return base; // exit after version/help + case 'p': case 'u': handleCommonOption(opt, optarg, base); break; - case 'c': case 'n': case 't': handleAppSpecificOption(opt, optarg, base, multi, frame); break; - default: throw sls::RuntimeError("Invalid arguments." + getHelpMessage()); } @@ -51,38 +61,50 @@ ParsedOptions CommandLineOptions::parse(int argc, char *argv[]) { // remaining arguments if (optind < argc) { - // maintain backward compatibility of [start port] [num receivers] - // [optional arg] ( for multi receiver and frame synchronizer ) - if (appType_ != AppType::SingleReceiver && - GetDeprecated(argc, argv, base.port, numReceivers, optionalArg)) { - if (appType_ == AppType::MultiReceiver) { - multi.numReceivers = numReceivers; - multi.callbackEnabled = optionalArg; - } else if (appType_ == AppType::FrameSynchronizer) { - frame.numReceivers = numReceivers; - frame.printHeaders = optionalArg; - } - } else { + + // no deprecated arguments + if (appType_ == AppType::SingleReceiver) { throw sls::RuntimeError("Invalid arguments." + getHelpMessage()); } + + // maintain backward compatibility of [start port] [num receivers] + // [optional arg] + if (argc != 3 && argc != 4) { + throw sls::RuntimeError("Invalid number of arguments." + + getHelpMessage()); + } + + GetDeprecated(argc, argv, base.port, numReceivers, optionalArg); + if (appType_ == AppType::MultiReceiver) { + multi.numReceivers = numReceivers; + multi.callbackEnabled = optionalArg; + } else if (appType_ == AppType::FrameSynchronizer) { + frame.numReceivers = numReceivers; + frame.printHeaders = optionalArg; + } } + // Logging LOG(sls::logINFO) << "Number of receivers: " << numReceivers; LOG(sls::logINFO) << "TCP Port: " << base.port; + if (appType_ == AppType::MultiReceiver) { + LOG(sls::logINFO) << "Callback enabled: " << multi.callbackEnabled; + } else if (appType_ == AppType::FrameSynchronizer) { + LOG(sls::logINFO) << "Print headers: " << frame.printHeaders; + } + switch (appType_) { case AppType::SingleReceiver: return base; case AppType::MultiReceiver: - LOG(sls::logINFO) << "Call back enable: " << multi.callbackEnabled; static_cast(multi) = base; return multi; case AppType::FrameSynchronizer: - LOG(sls::logINFO) << "Print headers: " << frame.printHeaders; static_cast(frame) = base; return frame; + default: + throw sls::RuntimeError("Unknown AppType in CommandLineOptions::parse"); } - - throw std::logic_error("Unknown AppType"); } std::vector