From 03379186f9d094b1fc29bbc19be0e742ccbbd314 Mon Sep 17 00:00:00 2001 From: Bartosz Date: Wed, 14 Dec 2022 18:45:57 +0100 Subject: [PATCH] [MOS-000] Fixed tests for update Fixed tests for performing update, now it does not require developer endpoint --- test/pytest/conftest.py | 24 ++++++++++++ test/pytest/test_updater.py | 75 +++++++++++++++++++++++-------------- 2 files changed, 71 insertions(+), 28 deletions(-) diff --git a/test/pytest/conftest.py b/test/pytest/conftest.py index dea0cf10b707e51c4c4d726fa3a3f75f3737f72c..15c2ffe2ecfde16de0d28e11fe0be79c58556154 100644 --- a/test/pytest/conftest.py +++ b/test/pytest/conftest.py @@ -15,6 +15,7 @@ from harness.harness import Harness from harness import utils from harness.interface.error import TestError, Error from harness.interface.CDCSerial import Keytype, CDCSerial as serial +from harness.api.security import SetPhoneLockOff, GetPhoneLockStatus from harness.interface.defs import key_codes @@ -27,6 +28,8 @@ def pytest_addoption(parser): parser.addoption("--call_duration", type=int, action="store", default=30) parser.addoption("--sms_text", type=str, action="store", default='') parser.addoption("--bt_device", type=str, action="store", default='') + parser.addoption("--passcode", type=str, action="store", default='') + parser.addoption("--update_file_path", type=str, action="store", default='') @pytest.fixture(scope='session') @@ -35,6 +38,17 @@ def phone_number(request): assert phone_number return phone_number +@pytest.fixture(scope='session') +def passcode(request): + passcode = request.config.option.passcode + assert passcode + return passcode +@pytest.fixture(scope='session') +def update_file_path(request): + update_file_path = request.config.option.update_file_path + assert update_file_path + return update_file_path + @pytest.fixture(scope='session') def call_duration(request): @@ -187,6 +201,16 @@ def phone_ends_test_in_desktop(harness): assert harness.get_application_name() == target_application time.sleep(1) +@pytest.fixture(scope='session') +def phone_security_unlocked(harness,passcode): + for _ in range(2): + try: + GetPhoneLockStatus().run(harness) + except TransactionError as e: + log.info(f"transaction code: {e}") + log.info("Phone security locked, unlocking") + SetPhoneLockOff(passcode=passcode).run(harness) + def pytest_configure(config): config.addinivalue_line("markers", "service_desktop_test: mark test if it's related to service-desktop API") diff --git a/test/pytest/test_updater.py b/test/pytest/test_updater.py index 2a16341096c0334b8cf3d06d0210f6199b0e5e29..f49aa28a905e1d2dfd65dfb511cf3f7c92444313 100644 --- a/test/pytest/test_updater.py +++ b/test/pytest/test_updater.py @@ -3,54 +3,73 @@ import os import pytest -import logging -from harness import log +import shutil +from harness import log, utils from harness.interface.defs import Method, Endpoint -from harness.request import Transaction, Request, TransactionError from harness.rt_harness_discovery import get_harness_automatic from harness.harness import Harness from harness.api.filesystem import put_file, get_file -from harness.api.developermode import PhoneModeLock from harness.api.update import PhoneReboot, Reboot +from harness.api.device_info import GetDeviceInfo + +old_version = None +old_sha = None def get_version(harness: Harness): r = harness.request(Endpoint.DEVICEINFO, Method.GET, {}).response version = r.body["version"] sha = r.body["gitRevision"] - return f"version: {version} sha: {sha}" + return version, sha -def disable_some_logs(harness: Harness): - from harness.interface.defs import PureLogLevel - for val in ["SysMgrService", "ServiceDesktop_w2", "CellularMux"]: - ret = harness.request(Endpoint.DEVELOPERMODE, Method.POST, { - "log": True, "service": val, "level": PureLogLevel.LOGERROR.value}) - log.info(f"{ret.response}") +@pytest.mark.usefixtures("phone_security_unlocked") +@pytest.mark.rt1051 +@pytest.mark.order("first") +def test_perform_update(harness: Harness, update_file_path): + filename = os.path.basename(update_file_path) + path = os.path.dirname(update_file_path) + if filename != "update.tar": + filename = "update.tar" + try: + os.remove(os.path.join(path, filename)) + except OSError: + pass + shutil.copyfile(update_file_path, os.path.join(path, filename)) + update_file_path = os.path.join(path, filename) -@pytest.mark.usefixtures("phone_unlocked") -@pytest.mark.rt1051 -def test_update(harness: Harness): - filename = "update.tar" + global old_version + global old_sha + (old_version, old_sha) = get_version(harness) - log.info(get_version(harness)) - PhoneModeLock(False).run(harness) - put_file(harness, filename, "/sys/user/temp") + put_file(harness, update_file_path, "/sys/user/temp") PhoneReboot(Reboot.UPDATE).run(harness) assert harness.connection.watch_port_reboot(300) + +@pytest.mark.usefixtures("phone_security_unlocked") +@pytest.mark.rt1051 +@pytest.mark.order("second") +def test_verify_update(): + global old_version + global old_sha + harness = get_harness_automatic(300) - import time - time.sleep(15) - harness.unlock_phone() - PhoneModeLock(False).run(harness) - - log.info(get_version(harness)) - get_file(harness, "updater.log", "./") - with open("updater.log") as f: + + ret = GetDeviceInfo().run(harness) + recovery_status_path = ret.response.body["recoveryStatusFilePath"] + path = os.path.dirname(recovery_status_path) + filename = os.path.basename(recovery_status_path) + + (new_version, new_sha) = get_version(harness) + assert new_version != old_version + assert new_sha != old_sha + + get_file(harness, file_pure=filename, path_local="./", path_pure=path) + with open(filename) as f: line = f.readline() - assert "OK" in line - PhoneModeLock(True).run(harness) + print(line) + assert "successful" in line log.info("update done!")