From e9b5d2989abc8008df7ff3ea287ee896ee1121a6 Mon Sep 17 00:00:00 2001 From: Colm Donelan Date: Mon, 2 Mar 2020 21:35:10 +0000 Subject: GatordMock: Fixing errors in parsing command file. An empty line resulted in program exit. * Ignore empty lines. * Add error message when an invalid number of parameters to SET or WAIT command is encountered. Signed-off-by: Colm Donelan Change-Id: Ie2d229c1330b71b559d988d4ecb8019f2f850333 --- tests/profiling/gatordmock/CommandFileParser.cpp | 103 +++++++++++++---------- 1 file changed, 58 insertions(+), 45 deletions(-) (limited to 'tests/profiling/gatordmock') diff --git a/tests/profiling/gatordmock/CommandFileParser.cpp b/tests/profiling/gatordmock/CommandFileParser.cpp index 7c746f16e9..6f67e4d113 100644 --- a/tests/profiling/gatordmock/CommandFileParser.cpp +++ b/tests/profiling/gatordmock/CommandFileParser.cpp @@ -26,56 +26,69 @@ void CommandFileParser::ParseFile(std::string CommandFile, GatordMockService& mo while (mockService.ReceiveThreadRunning() && std::getline(infile, line)) { std::istringstream iss(line); - std::vector tokens; std::copy(std::istream_iterator(iss), std::istream_iterator(), std::back_inserter(tokens)); - - std::string command = tokens[0]; - - if (command == "LIST") - { - // Expected format for the SET command - // - // LIST - // - - mockService.SendRequestCounterDir(); - } - if (command == "SET") - { - // Expected format for the SET command - // - // SET 500000 1 2 5 10 - // - // This breaks down to: - // SET command - // 500000 polling period in micro seconds - // 1 2 5 10 counter list - - uint32_t period = static_cast(std::stoul(tokens[1])); - - std::vector counters; - - std::transform(tokens.begin() + 2, tokens.end(), std::back_inserter(counters), - [](const std::string& str) { return static_cast(std::stoul(str)); }); - - mockService.SendPeriodicCounterSelectionList(period, counters); - } - else if (command == "WAIT") + if (tokens.size() > 0) { - // Expected format for the SET command - // - // WAIT 11000000 - // - // This breaks down to: - // WAIT command - // 11000000 timeout period in micro seconds - - uint32_t timeout = static_cast(std::stoul(tokens[1])); - - mockService.WaitCommand(timeout); + std::string command = tokens[0]; + if (command == "LIST") + { + // Expected format for the SET command + // + // LIST + // + + mockService.SendRequestCounterDir(); + } + if (command == "SET") + { + // Expected format for the SET command + // + // SET 500000 1 2 5 10 + // + // This breaks down to: + // SET command + // 500000 polling period in micro seconds + // 1 2 5 10 counter list + + if (tokens.size() > 2) // minimum of 3 tokens. + { + uint32_t period = static_cast(std::stoul(tokens[1])); + + std::vector counters; + + std::transform(tokens.begin() + 2, tokens.end(), std::back_inserter(counters), + [](const std::string& str) + { return static_cast(std::stoul(str)); }); + + mockService.SendPeriodicCounterSelectionList(period, counters); + } + else + { + std::cerr << "Invalid SET command. Format is: SET " << std::endl; + } + } + else if (command == "WAIT") + { + // Expected format for the SET command + // + // WAIT 11000000 + // + // This breaks down to: + // WAIT command + // 11000000 timeout period in micro seconds + if (tokens.size() > 1) // minimum of 2 tokens. + { + uint32_t timeout = static_cast(std::stoul(tokens[1])); + mockService.WaitCommand(timeout); + } + else + { + std::cerr << "Invalid WAIT command. Format is: WAIT " << std::endl; + } + } } } } -- cgit v1.2.1