From 374ebb902f02707621d006c2da7f11dabaa2d757 Mon Sep 17 00:00:00 2001 From: jitendracandela <78074038+jitendracandela@users.noreply.github.com> Date: Wed, 8 Nov 2023 15:52:58 +0530 Subject: [PATCH] Wifi 13007 (#854) * Added one test case for Firmware Upgrade/Downgrade Testplan Signed-off-by: jitendracandela * Added get_latest_four_release_images method for Firmware Upgrade/Downgrade Test Plan Signed-off-by: jitendracandela * Modified get_latest_four_release_images method Signed-off-by: jitendracandela * Added five more test cases for Firmware Upgrade/Downgrade Test Plan Signed-off-by: jitendracandela * Fixed issue in allure attach Signed-off-by: jitendracandela * Renamed the method name as get_least_three_release_images_from_current_image and Modified the method Signed-off-by: jitendracandela * Deleted 6 test cases and converted into a single test case Signed-off-by: jitendracandela * Modified logic in get_least_three_release_images_from_current_image method Signed-off-by: jitendracandela * Modified logic in test_upgrade_downgrade_tests Signed-off-by: jitendracandela --------- Signed-off-by: jitendracandela --- libs/tip_2x/controller.py | 43 ++++ .../ucentral_gateway/test_fms_service.py | 217 ++++++++++++++++++ 2 files changed, 260 insertions(+) diff --git a/libs/tip_2x/controller.py b/libs/tip_2x/controller.py index 2e16a0f81..4b16272de 100644 --- a/libs/tip_2x/controller.py +++ b/libs/tip_2x/controller.py @@ -1397,6 +1397,49 @@ class FMSUtils: return "error" + def get_least_three_release_images_from_current_image(self, firmware_list=[], current_image=""): + """This method will return latest three release images""" + image_date = [] + all_images_from_current_image = [] + current_image_index = None + for i in firmware_list: + image_date.append(i["imageDate"]) + image_date.sort(reverse=True) + ordered_list_firmware = [] + for i in image_date: + for j in firmware_list: + if i == j["imageDate"]: + ordered_list_firmware.append(j) + break + for i in range(len(ordered_list_firmware)): + if current_image in ordered_list_firmware[i]["revision"]: + current_image_index = i + break + logging.info("current_image_index: " + str(current_image_index)) + all_images_from_current_image = ordered_list_firmware[current_image_index:] + logging.info("all_images_from_current_image" + str(all_images_from_current_image)) + release_images_all = [] + least_3_release_images = [] + for firmware in all_images_from_current_image: + if firmware['revision'].split("/")[1].replace(" ", "").split('-')[1].__contains__('v2.'): + if "rc" not in firmware['image']: + release_images_all.append(firmware) + logging.info("release_images_all" + str(release_images_all)) + latest_release_image_number = int(release_images_all[0]['image'].split(".")[1]) + latest_3_releases_list_num = [latest_release_image_number, latest_release_image_number - 1, + latest_release_image_number - 2] + count = 0 + # Find out List of least 3 release Image + # Logic for least 3 release Images + for i in release_images_all: + if "v2." + str(latest_3_releases_list_num[count]) + "." in str(i['image']): + least_3_release_images.append(i) + count = count + 1 + if len(least_3_release_images) == 3: + break + logging.info("least three release images from current image: " + str(least_3_release_images)) + return least_3_release_images + class ProvUtils: diff --git a/tests/controller_tests/ucentral_gateway/test_fms_service.py b/tests/controller_tests/ucentral_gateway/test_fms_service.py index bfd803827..05d3407e6 100644 --- a/tests/controller_tests/ucentral_gateway/test_fms_service.py +++ b/tests/controller_tests/ucentral_gateway/test_fms_service.py @@ -6,6 +6,9 @@ import allure import pytest +import importlib +import time +logging = importlib.import_module("logging") @pytest.mark.uc_sanity @@ -138,3 +141,217 @@ class TestUcentralFMSService(object): entries = "info" system_info = get_target_object.controller_library_object.get_system_configuration_items(entries) assert system_info.status_code == 200 + + +"""Test cases for Firmware Upgrade/Downgrade""" + + +@pytest.mark.firmware_upgrade_downgrade +@allure.parent_suite("Firmware Tests") +@allure.suite("Firmware Upgrade/Downgrade Tests") +class TestFirmwareUpgradeDowngrade(object): + @pytest.mark.upgrade_downgrade_test + @allure.title("Firmware Downgrade and Upgrade test") + @allure.testcase(name="WIFI-13007", + url="https://telecominfraproject.atlassian.net/browse/WIFI-13012") + def test_upgrade_downgrade_tests(self, get_target_object, get_testbed_details): + """ + To validate the reliability and correctness of the firmware downgrade and upgrade process + on Access Points (APs) for three consecutive releases, ensuring no functionality issues. + Unique marker: pytest -m "upgrade_downgrade_test" + F1 - Current AP firmware + F2 - One lower release image + F3 - Two lower release image + F4 - Three lower release image + Flow: + AP is on F1 (If F1 is current AP image) + AP downgrade to F2 + AP upgrade from F2 to F1 + AP downgrade from F1 to F3 + AP upgrade from F3 to F1 + AP downgrade from F1 to F4 + AP upgrade from F4 to F1 + """ + for ap in range(len(get_target_object.device_under_tests_info)): + firmware_list = get_target_object.firmware_library_object.get_firmwares( + model=get_target_object.device_under_tests_info[ap]['model'], + branch="", + commit_id='', + limit='', + offset='3000') + # check the current AP Revision (F1) + ap_version_f1 = get_target_object.dut_library_object.get_ap_version(idx=ap) + + current_version = str(ap_version_f1).split("/")[1].replace(" ", "").splitlines()[0] + f1_version = current_version + # Finding uri for current image + for i in firmware_list: + if f1_version in i["revision"]: + ap_version_f1 = i + break + latest_3_release_images = get_target_object.firmware_library_object.get_least_three_release_images_from_current_image( + firmware_list=firmware_list, current_image=current_version) + if len(latest_3_release_images) < 3: + pytest.fail("Least 3 release images from current image are not available on GW") + allure.attach(name="Current Firmware Image(F1): ", + body=str(ap_version_f1)) + logging.info("Current Firmware Image(F1): " + str(ap_version_f1)) + allure.attach(name="F2 Firmware Image: ", + body=str(latest_3_release_images[0])) + logging.info("F2 Firmware Image: " + str(latest_3_release_images[0])) + allure.attach(name="F3 Firmware Image: ", + body=str(latest_3_release_images[1])) + logging.info("F3 Firmware Image: " + str(latest_3_release_images[1])) + allure.attach(name="F4 Firmware Image: ", + body=str(latest_3_release_images[2])) + logging.info("F4 Firmware Image: " + str(latest_3_release_images[2])) + f1_version = current_version + f2_version = latest_3_release_images[0]['revision'].split("/")[1].replace(" ", "") + f3_version = latest_3_release_images[1]['revision'].split("/")[1].replace(" ", "") + f4_version = latest_3_release_images[2]['revision'].split("/")[1].replace(" ", "") + # Downgrade F1 to F2 + logging.info("---------- Downgrading F1 to F2----------") + get_target_object.firmware_library_object.upgrade_firmware( + serial=get_target_object.device_under_tests_info[ap]['identifier'], + url=str(latest_3_release_images[0]['uri'])) + # wait for 300 seconds after firmware upgrade + logging.info("Waiting for 300 Sec for Firmware Downgrade") + time.sleep(300) + # check the current AP Revision again + ap_version = get_target_object.dut_library_object.get_ap_version(idx=ap) + current_version = str(ap_version).split("/")[1].replace(" ", "").splitlines()[0] + # print and report the Firmware versions after upgrade + allure.attach(name="After Firmware Downgrade Request to F2 from F1: ", + body="Current revision: " + current_version + "\nF2 revision: " + f2_version) + logging.info("current revision: " + str(current_version) + + "\nF2 revision: " + str(f2_version)) + + if current_version == f2_version: + logging.info("firmware Downgrade successfully to F2: " + f2_version) + else: + logging.info("firmware Downgrade failed to F2: " + f2_version) + pytest.fail("firmware Downgrade failed to F2: " + f2_version) + + # Upgrade F2 to F1 + logging.info("---------- Upgrading F2 to F1----------") + get_target_object.firmware_library_object.upgrade_firmware( + serial=get_target_object.device_under_tests_info[ap]['identifier'], + url=str(ap_version_f1['uri'])) + # wait for 300 seconds after firmware upgrade + logging.info("Waiting for 300 Sec for Firmware Downgrade") + time.sleep(300) + + # check the current AP Revision again + ap_version = get_target_object.dut_library_object.get_ap_version(idx=ap) + current_version = str(ap_version).split("/")[1].replace(" ", "").splitlines()[0] + # print and report the Firmware versions after upgrade + allure.attach(name="After Firmware Upgrade Request to F1 from F2: ", + body="Current revision: " + current_version + "\nF1 revision: " + f1_version) + logging.info("current revision: " + str(current_version) + + "\nF1 revision: " + str(f1_version)) + + if current_version == f1_version: + logging.info("firmware Upgrade successfully to F1: " + f1_version) + else: + logging.info("firmware Upgrade failed to F1: " + f1_version) + pytest.fail("firmware Upgrade failed to F1: " + f1_version) + + # Downgrade F1 to F3 + logging.info("---------- Downgrading F1 to F3----------") + get_target_object.firmware_library_object.upgrade_firmware( + serial=get_target_object.device_under_tests_info[ap]['identifier'], + url=str(latest_3_release_images[1]['uri'])) + # wait for 300 seconds after firmware upgrade + logging.info("Waiting for 300 Sec for Firmware Downgrade") + time.sleep(300) + # check the current AP Revision again + ap_version = get_target_object.dut_library_object.get_ap_version(idx=ap) + current_version = str(ap_version).split("/")[1].replace(" ", "").splitlines()[0] + # print and report the Firmware versions after upgrade + allure.attach(name="After Firmware Downgrade Request to F3 from F1: ", + body="Current revision: " + current_version + "\nF3 revision: " + f3_version) + logging.info("current revision: " + str(current_version) + + "\nF3 revision: " + str(f3_version)) + + if current_version == f3_version: + logging.info("firmware Downgrade successfully to F3: " + f3_version) + else: + logging.info("firmware Downgrade failed to F3: " + f3_version) + pytest.fail("firmware Downgrade failed to F3: " + f3_version) + + # Upgrade F3 to F1 + logging.info("---------- Upgrading F3 to F1----------") + get_target_object.firmware_library_object.upgrade_firmware( + serial=get_target_object.device_under_tests_info[ap]['identifier'], + url=str(ap_version_f1['uri'])) + # wait for 300 seconds after firmware upgrade + logging.info("Waiting for 300 Sec for Firmware Downgrade") + time.sleep(300) + + # check the current AP Revision again + ap_version = get_target_object.dut_library_object.get_ap_version(idx=ap) + current_version = str(ap_version).split("/")[1].replace(" ", "").splitlines()[0] + # print and report the Firmware versions after upgrade + allure.attach(name="After Firmware Upgrade Request to F1 from F3: ", + body="Current revision: " + current_version + "\nF1 revision: " + f1_version) + logging.info("current revision: " + str(current_version) + + "\nF1 revision: " + str(f1_version)) + + if current_version == f1_version: + logging.info("firmware Upgrade successfully to F1: " + f1_version) + else: + logging.info("firmware Upgrade failed to F1: " + f1_version) + pytest.fail("firmware Upgrade failed to F1: " + f1_version) + + # Downgrade F1 to F4 + logging.info("---------- Downgrading F1 to F4----------") + get_target_object.firmware_library_object.upgrade_firmware( + serial=get_target_object.device_under_tests_info[ap]['identifier'], + url=str(latest_3_release_images[2]['uri'])) + # wait for 300 seconds after firmware upgrade + logging.info("Waiting for 300 Sec for Firmware Downgrade") + time.sleep(300) + # check the current AP Revision again + ap_version = get_target_object.dut_library_object.get_ap_version(idx=ap) + current_version = str(ap_version).split("/")[1].replace(" ", "").splitlines()[0] + # print and report the Firmware versions after upgrade + allure.attach(name="After Firmware Downgrade Request to F4 from F1: ", + body="Current revision: " + current_version + "\nF4 revision: " + f4_version) + logging.info("current revision: " + str(current_version) + + "\nF4 revision: " + str(f4_version)) + + if current_version == f4_version: + logging.info("firmware Downgrade successfully to F4: " + f4_version) + else: + logging.info("firmware Downgrade failed to F4: " + f4_version) + pytest.fail("firmware Downgrade failed to F4: " + f4_version) + + # Upgrade F4 to F1 + logging.info("---------- Upgrading F4 to F1----------") + get_target_object.firmware_library_object.upgrade_firmware( + serial=get_target_object.device_under_tests_info[ap]['identifier'], + url=str(ap_version_f1['uri'])) + # wait for 300 seconds after firmware upgrade + logging.info("Waiting for 300 Sec for Firmware Downgrade") + time.sleep(300) + + # check the current AP Revision again + ap_version = get_target_object.dut_library_object.get_ap_version(idx=ap) + current_version = str(ap_version).split("/")[1].replace(" ", "").splitlines()[0] + # print and report the Firmware versions after upgrade + allure.attach(name="After Firmware Upgrade Request to F1 from F4: ", + body="Current revision: " + current_version + "\nF1 revision: " + f1_version) + logging.info("current revision: " + str(current_version) + + "\nF1 revision: " + str(f1_version)) + + if current_version == f1_version: + logging.info("firmware Upgrade successfully to F1: " + f1_version) + else: + logging.info("firmware Upgrade failed to F1: " + f1_version) + pytest.fail("firmware Upgrade failed to F1: " + f1_version) + + + + + +