From c275480fa5447588b979052e04855cbd35263829 Mon Sep 17 00:00:00 2001 From: Kuba Date: Mon, 25 Jan 2021 17:53:31 +0100 Subject: [PATCH] [EGD-4990] Add UT for at+ccfc parser It adds Unit tests for at+ccfc command parser. --- module-cellular/at/response.cpp | 11 ++ module-cellular/test/unittest_response.cpp | 137 +++++++++++++++++++++ 2 files changed, 148 insertions(+) diff --git a/module-cellular/at/response.cpp b/module-cellular/at/response.cpp index 8eb82024473ad200f9c253bdee230f225da66255..f0ed9ab42f2594ad80ad912fc54cce76a088e7f2 100644 --- a/module-cellular/at/response.cpp +++ b/module-cellular/at/response.cpp @@ -447,6 +447,11 @@ namespace at return true; } + if (el.find(toRemove) == std::string::npos) { + parsed.clear(); + return false; + } + utils::findAndReplaceAll(el, toRemove, emptyString); auto tokens = utils::split(el, ","); @@ -459,6 +464,7 @@ namespace at if (!utils::toNumeric(tokens[Tokens::Status], statusToken) || !utils::toNumeric(tokens[Tokens::Class], connectionClassToken)) { + parsed.clear(); return false; } auto status = static_cast(statusToken); @@ -466,12 +472,17 @@ namespace at if (magic_enum::enum_contains(status) && magic_enum::enum_contains(connectionClass)) { + if (tokens[Tokens::Number].find(quote) == std::string::npos) { + parsed.clear(); + return false; + } auto number = tokens[Tokens::Number]; utils::findAndReplaceAll(number, quote, emptyString); utils::trim(number); parsed.push_back(ParsedCcfc(connectionClass, status, number)); } else { + parsed.clear(); return false; } } diff --git a/module-cellular/test/unittest_response.cpp b/module-cellular/test/unittest_response.cpp index 52bfccd7118d0b7b8dc9c3991e4cc5a32fb74e52..92e7cf92e824fb01c97a5273c57ea634118b9c47 100644 --- a/module-cellular/test/unittest_response.cpp +++ b/module-cellular/test/unittest_response.cpp @@ -549,3 +549,140 @@ TEST_CASE("Response CCWA?") REQUIRE(ret.size() == 0); } } + +TEST_CASE("Response CCFC") +{ + SECTION("OK CCFC? - all disabled") + { + + at::Result resp; + resp.code = at::Result::Code::OK; + std::vector ret; + resp.response.push_back("+CCFC: 0,255"); + resp.response.push_back("OK"); + + REQUIRE(resp.code == at::Result::Code::OK); + REQUIRE(at::response::ccfc::parse(resp.response, ret) == true); + REQUIRE(ret.size() == 1); + REQUIRE(ret[0].status == at::response::ccfc::ForwardingStatus::NotActive); + REQUIRE(ret[0].connectionClass == at::response::ccfc::ConnectionClass::None); + } + + SECTION("OK CCFC? - voice enabled") + { + + at::Result resp; + resp.code = at::Result::Code::OK; + std::vector ret; + resp.response.push_back("+CCFC: 1,1,\"+48111222333\",145,,,"); + resp.response.push_back("OK"); + + REQUIRE(resp.code == at::Result::Code::OK); + REQUIRE(at::response::ccfc::parse(resp.response, ret) == true); + REQUIRE(ret.size() == 1); + REQUIRE(ret[0].status == at::response::ccfc::ForwardingStatus::Active); + REQUIRE(ret[0].connectionClass == at::response::ccfc::ConnectionClass::Voice); + REQUIRE(ret[0].number == "+48111222333"); + } + + SECTION("OK CCFC? - voice, fax, sync, async enabled") + { + + at::Result resp; + resp.code = at::Result::Code::OK; + std::vector ret; + resp.response.push_back("+CCFC: 1,1,\"+48111222333\",145,,,"); + resp.response.push_back("+CCFC: 1,4,\"+48111222333\",145,,,"); + resp.response.push_back("+CCFC: 1,16,\"+48111222333\",145,,,"); + resp.response.push_back("+CCFC: 1,32,\"+48111222333\",145,,,"); + resp.response.push_back("OK"); + + REQUIRE(resp.code == at::Result::Code::OK); + REQUIRE(at::response::ccfc::parse(resp.response, ret) == true); + REQUIRE(ret.size() == 4); + REQUIRE(ret[0].status == at::response::ccfc::ForwardingStatus::Active); + REQUIRE(ret[0].connectionClass == at::response::ccfc::ConnectionClass::Voice); + REQUIRE(ret[0].number == "+48111222333"); + + REQUIRE(ret[1].status == at::response::ccfc::ForwardingStatus::Active); + REQUIRE(ret[1].connectionClass == at::response::ccfc::ConnectionClass::Fax); + REQUIRE(ret[1].number == "+48111222333"); + + REQUIRE(ret[2].status == at::response::ccfc::ForwardingStatus::Active); + REQUIRE(ret[2].connectionClass == at::response::ccfc::ConnectionClass::DataAsync); + REQUIRE(ret[2].number == "+48111222333"); + + REQUIRE(ret[3].status == at::response::ccfc::ForwardingStatus::Active); + REQUIRE(ret[3].connectionClass == at::response::ccfc::ConnectionClass::DataSync); + REQUIRE(ret[3].number == "+48111222333"); + } + + SECTION("WRONG CCFC? - invalid status") + { + + at::Result resp; + resp.code = at::Result::Code::OK; + std::vector ret; + resp.response.push_back("+CCFC: 7,1,\"+48111222333\",145,,,"); + resp.response.push_back("OK"); + + REQUIRE(resp.code == at::Result::Code::OK); + REQUIRE(at::response::ccfc::parse(resp.response, ret) == false); + REQUIRE(ret.size() == 0); + } + + SECTION("WRONG CCFC? - invalid class") + { + + at::Result resp; + resp.code = at::Result::Code::OK; + std::vector ret; + resp.response.push_back("+CCFC: 1,99,\"+48111222333\",145,,,"); + resp.response.push_back("OK"); + + REQUIRE(resp.code == at::Result::Code::OK); + REQUIRE(at::response::ccfc::parse(resp.response, ret) == false); + REQUIRE(ret.size() == 0); + } + + SECTION("WRONG CCFC? - to little tokens") + { + at::Result resp; + resp.code = at::Result::Code::OK; + std::vector ret; + resp.response.push_back("+CCFC: 1,1,\"+48111222333\",145,,,"); + resp.response.push_back("+CCFC: 1,\"+48111222333\",145,,,"); + resp.response.push_back("OK"); + + REQUIRE(resp.code == at::Result::Code::OK); + REQUIRE(at::response::ccfc::parse(resp.response, ret) == false); + REQUIRE(ret.size() == 0); + } + + SECTION("WRONG CCFC? - to many tokens") + { + at::Result resp; + resp.code = at::Result::Code::OK; + std::vector ret; + resp.response.push_back("+CCFC: 1,1,\"+48111222333\",145,,,"); + resp.response.push_back("+CCFC: 1,1,23,\"+48111222333\",145,,,"); + resp.response.push_back("OK"); + + REQUIRE(resp.code == at::Result::Code::OK); + REQUIRE(at::response::ccfc::parse(resp.response, ret) == false); + REQUIRE(ret.size() == 0); + } + + SECTION("WRONG CCFC? - invalid token") + { + at::Result resp; + resp.code = at::Result::Code::OK; + std::vector ret; + resp.response.push_back("+CFCC: 1,1,\"+48111222333\",145,,,"); + resp.response.push_back("OK"); + + REQUIRE(resp.code == at::Result::Code::OK); + REQUIRE(at::response::ccfc::parse(resp.response, ret) == false); + REQUIRE(ret.size() == 0); + } +}