From 3d3f0b649cff6fd009e072be4f5702f3763484ec Mon Sep 17 00:00:00 2001 From: Tomasz Langowski Date: Tue, 26 Jan 2021 11:46:44 +0100 Subject: [PATCH] [EGD-5323] Add change sim card test to harness Add change sim card test to harness --- .../developerMode/DeveloperModeEndpoint.cpp | 1 + .../developerMode/DeveloperModeHelper.cpp | 40 +++++++++++++- .../developerMode/DeveloperModeHelper.hpp | 8 +++ .../service-desktop/parser/ParserUtils.hpp | 1 + test/harness/utils.py | 14 ++++- test/pytest/conftest.py | 2 + test/pytest/test_change_sim.py | 53 +++++++++++++++++++ test/pytest/test_send_message.py | 4 +- 8 files changed, 119 insertions(+), 4 deletions(-) create mode 100644 test/pytest/test_change_sim.py diff --git a/module-services/service-desktop/endpoints/developerMode/DeveloperModeEndpoint.cpp b/module-services/service-desktop/endpoints/developerMode/DeveloperModeEndpoint.cpp index a2deeb084e6a04a1f904f15dae0c2817f5ea85a0..65e1583980ef14277fd7b7f1289deb6990a35f40 100644 --- a/module-services/service-desktop/endpoints/developerMode/DeveloperModeEndpoint.cpp +++ b/module-services/service-desktop/endpoints/developerMode/DeveloperModeEndpoint.cpp @@ -11,6 +11,7 @@ auto DeveloperModeEndpoint::handle(Context &context) -> void { switch (context.getMethod()) { case http::Method::get: + helper->processGetRequest(context); break; case http::Method::post: break; diff --git a/module-services/service-desktop/endpoints/developerMode/DeveloperModeHelper.cpp b/module-services/service-desktop/endpoints/developerMode/DeveloperModeHelper.cpp index 54388ecd79305123a396691655fb4d3823e1470c..e0e41c4c52c054df2cc653830a128d5e57706925 100644 --- a/module-services/service-desktop/endpoints/developerMode/DeveloperModeHelper.cpp +++ b/module-services/service-desktop/endpoints/developerMode/DeveloperModeHelper.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "DeveloperModeHelper.hpp" @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -69,12 +70,40 @@ auto DeveloperModeHelper::processPutRequest(Context &context) -> sys::ReturnCode MessageHandler::putToSendQueue(context.createSimpleResponse()); } + else if (body[json::developerMode::changeSim].is_number()) { + int simSelected = body[json::developerMode::changeSim].int_value(); + requestSimChange(simSelected); + MessageHandler::putToSendQueue(context.createSimpleResponse()); + } else { context.setResponseStatus(http::Code::BadRequest); MessageHandler::putToSendQueue(context.createSimpleResponse()); } return sys::ReturnCodes::Unresolved; } + +auto DeveloperModeHelper::processGetRequest(Context &context) -> sys::ReturnCodes +{ + auto body = context.getBody(); + if (body[json::developerMode::getInfo].is_string()) { + auto keyValue = body[json::developerMode::getInfo].string_value(); + if (keyValue == json::developerMode::simStateInfo) { + context.setResponseBody(json11::Json::object( + {{json::selectedSim, std::to_string(static_cast(Store::GSM::get()->selected))}, + {json::sim, std::to_string(static_cast(Store::GSM::get()->sim))}, + {json::trayState, std::to_string(static_cast(Store::GSM::get()->tray))}})); + } + else { + context.setResponseStatus(http::Code::BadRequest); + } + } + else { + context.setResponseStatus(http::Code::BadRequest); + } + MessageHandler::putToSendQueue(context.createSimpleResponse()); + return sys::ReturnCodes::Unresolved; +} + auto DeveloperModeHelper::getKeyCode(int val) noexcept -> bsp::KeyCodes { switch (val) { @@ -144,3 +173,12 @@ void DeveloperModeHelper::sendKeypress(bsp::KeyCodes keyCode, gui::InputEvent::S sys::Bus::SendUnicast(std::move(message), service::name::evt_manager, ownerServicePtr); } + +void DeveloperModeHelper::requestSimChange(const int simSelected) +{ + Store::GSM::SIM sim = Store::GSM::SIM::SIM1; + if (simSelected == static_cast(Store::GSM::SIM::SIM2)) { + sim = Store::GSM::SIM::SIM2; + } + CellularServiceAPI::SetSimCard(ownerServicePtr, sim); +} diff --git a/module-services/service-desktop/endpoints/developerMode/DeveloperModeHelper.hpp b/module-services/service-desktop/endpoints/developerMode/DeveloperModeHelper.hpp index 402cdc195c7a533bc340dbbffa6fafa94c2e5890..33446bf57e04e97855f05113ced68bd82758b296 100644 --- a/module-services/service-desktop/endpoints/developerMode/DeveloperModeHelper.hpp +++ b/module-services/service-desktop/endpoints/developerMode/DeveloperModeHelper.hpp @@ -25,9 +25,12 @@ namespace parserFSM static auto getKeyCode(int val) noexcept -> bsp::KeyCodes; void sendKeypress(bsp::KeyCodes keyCode, gui::InputEvent::State state); + void requestSimChange(const int simSelected); + public: DeveloperModeHelper(sys::Service *_ownerServicePtr) : ownerServicePtr(_ownerServicePtr){}; auto processPutRequest(Context &context) -> sys::ReturnCodes; + auto processGetRequest(Context &context) -> sys::ReturnCodes; }; namespace json::developerMode @@ -42,5 +45,10 @@ namespace parserFSM inline constexpr auto btState = "btState"; inline constexpr auto btOn = "on"; inline constexpr auto btCommand = "btCommand"; + inline constexpr auto changeSim = "changeSim"; + inline constexpr auto getInfo = "getInfo"; + + /// values for getInfo cmd + inline constexpr auto simStateInfo = "simState"; } } // namespace parserFSM diff --git a/module-services/service-desktop/parser/ParserUtils.hpp b/module-services/service-desktop/parser/ParserUtils.hpp index bb12a589c1f942fb9f723ff58f136412cf6327e6..d312e7eac58649b16e8882deb9cac5444685bf71 100644 --- a/module-services/service-desktop/parser/ParserUtils.hpp +++ b/module-services/service-desktop/parser/ParserUtils.hpp @@ -104,6 +104,7 @@ namespace parserFSM inline constexpr auto batteryLevel = "batteryLevel"; inline constexpr auto batteryState = "batteryState"; inline constexpr auto selectedSim = "selectedSim"; + inline constexpr auto sim = "sim"; inline constexpr auto trayState = "trayState"; inline constexpr auto signalStrength = "signalStrength"; inline constexpr auto fsTotal = "fsTotal"; diff --git a/test/harness/utils.py b/test/harness/utils.py index f733f117ffc1df7a752f6edace8be7e339e85f8b..607c72672cf58a5ecb4bde01b30175823a7c74f0 100644 --- a/test/harness/utils.py +++ b/test/harness/utils.py @@ -120,7 +120,19 @@ def send_char(char: str, connection): connection.send_key_code(int(char), key_type) connection.send_key_code(key_codes["right"]) last_char = char - + elif char.islower(): + tmp = char.upper() + # toggle to lowercase mode + connection.send_key_code(key_codes["*"], key_type) + if last_char is keymap[tmp][0]: + print("repeated key!") + connection.send_key_code(key_codes["right"], key_type) + for key in keymap[tmp]: + connection.send_key_code(int(key), key_type) + last_char = keymap[tmp][0] + # toggle to uppercase mode + connection.send_key_code(key_codes["*"], key_type) + connection.send_key_code(key_codes["*"], key_type) else: if last_char is keymap[char][0]: print("repeated key!") diff --git a/test/pytest/conftest.py b/test/pytest/conftest.py index e74247511cafdb617aa42e5fa2839f2dd8e78434..73e39ef54fec4b68e299562952670f8fc16cad54 100644 --- a/test/pytest/conftest.py +++ b/test/pytest/conftest.py @@ -128,3 +128,5 @@ def pytest_configure(config): "rt1051: mark test if it's target only (eg. calls, messages)") config.addinivalue_line("markers", "usb_cdc_echo: mark test if it's intended for usb-cdc echo mode") + config.addinivalue_line("markers", + "two_sim_cards: mark test in case when two sim cards are required") diff --git a/test/pytest/test_change_sim.py b/test/pytest/test_change_sim.py new file mode 100644 index 0000000000000000000000000000000000000000..c486de6b0adb610a96fdebfc0dada703aa622078 --- /dev/null +++ b/test/pytest/test_change_sim.py @@ -0,0 +1,53 @@ +# Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. +# For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md + +import pytest +from harness.interface.defs import status +from test_send_message import get_message_by_text, test_send_message as send_message +import time + + +@pytest.mark.rt1051 +@pytest.mark.two_sim_cards +@pytest.mark.usefixtures("phone_unlocked") +def test_change_sim(harness, phone_number, sms_text): + simCard = { + "SIM1": 0, + "SIM2": 1, + } + + # change sim to SIM1 + body = {"changeSim": simCard["SIM1"]} + ret = harness.endpoint_request("developerMode", "put", body) + assert ret["status"] == status["OK"] + + # time to change sim card in pure phone, value is experimentally chosen, no idea how to do it right + time.sleep(2) + + # retrieve sim info + body = {"getInfo": "simState"} + ret = harness.endpoint_request("developerMode", "get", body) + assert ret["status"] == status["OK"] + assert ret["body"]["selectedSim"] == str(simCard["SIM1"]) + assert ret["body"]["sim"] == str(simCard["SIM1"]) + + # send text message using SIM1 + send_message(harness, phone_number, sms_text) + + # change sim to SIM2 + body = {"changeSim": simCard["SIM2"]} + ret = harness.endpoint_request("developerMode", "put", body) + assert ret["status"] == status["OK"] + + # time to change sim card in pure phone, value is experimentally chosen, no idea how to do it right + time.sleep(2) + + # retrieve sim info + body = {"getInfo": "simState"} + ret = harness.endpoint_request("developerMode", "get", body) + assert ret["status"] == status["OK"] + assert ret["body"]["selectedSim"] == str(simCard["SIM2"]) + assert ret["body"]["sim"] == str(simCard["SIM2"]) + + # send text message using SIM2 + send_message(harness, phone_number, sms_text) diff --git a/test/pytest/test_send_message.py b/test/pytest/test_send_message.py index a37bba444da294c79b109f09b2ea086bc0f39606..1bfb475435b211b052a1b56fe78e9a243d399916 100644 --- a/test/pytest/test_send_message.py +++ b/test/pytest/test_send_message.py @@ -14,7 +14,7 @@ def get_message_by_text(harness, message: str, phone_number: str): @pytest.mark.rt1051 @pytest.mark.usefixtures("phone_unlocked") def test_send_message(harness, phone_number, sms_text): - old_messages = get_message_by_text(harness, sms_text.upper(), str(phone_number)) + old_messages = get_message_by_text(harness, sms_text, str(phone_number)) # enter menu harness.connection.send_key_code(key_codes["enter"]) @@ -38,7 +38,7 @@ def test_send_message(harness, phone_number, sms_text): time.sleep(1.2) # it take horrendous amount of time to go back to thread view harness.connection.send_key_code(key_codes["fnRight"]) - new_messages = get_message_by_text(harness, sms_text.upper(), str(phone_number)) + new_messages = get_message_by_text(harness, sms_text, str(phone_number)) diff_messages = [] for message in new_messages: