Wifi 13007 (#854)

* Added one test case for Firmware Upgrade/Downgrade Testplan

Signed-off-by: jitendracandela <jitendra.kushavah@candelatech.com>

* Added get_latest_four_release_images method for Firmware Upgrade/Downgrade Test Plan

Signed-off-by: jitendracandela <jitendra.kushavah@candelatech.com>

* Modified get_latest_four_release_images method

Signed-off-by: jitendracandela <jitendra.kushavah@candelatech.com>

* Added five more test cases for Firmware Upgrade/Downgrade Test Plan

Signed-off-by: jitendracandela <jitendra.kushavah@candelatech.com>

* Fixed issue in allure attach

Signed-off-by: jitendracandela <jitendra.kushavah@candelatech.com>

* Renamed the method name as get_least_three_release_images_from_current_image and Modified the method

Signed-off-by: jitendracandela <jitendra.kushavah@candelatech.com>

* Deleted 6 test cases and converted into a single test case

Signed-off-by: jitendracandela <jitendra.kushavah@candelatech.com>

* Modified logic in get_least_three_release_images_from_current_image method

Signed-off-by: jitendracandela <jitendra.kushavah@candelatech.com>

* Modified logic in test_upgrade_downgrade_tests

Signed-off-by: jitendracandela <jitendra.kushavah@candelatech.com>

---------

Signed-off-by: jitendracandela <jitendra.kushavah@candelatech.com>
This commit is contained in:
jitendracandela
2023-11-08 15:52:58 +05:30
committed by GitHub
parent f14da9b643
commit 374ebb902f
2 changed files with 260 additions and 0 deletions

View File

@@ -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:

View File

@@ -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)