diff --git a/.github/workflows/quali-basic-manual.yml b/.github/workflows/quali-basic-manual.yml index ce09f368e..6fbaa96b1 100644 --- a/.github/workflows/quali-basic-manual.yml +++ b/.github/workflows/quali-basic-manual.yml @@ -40,7 +40,7 @@ on: default: 'main' description: 'revision of the Open Wifi UI' ap_model: - description: 'AP model to test, one of ECW5410,EAP101,EC420,ECW5211,WF188N,EAP102,CIG194C' + description: 'AP model to test, one of edgecore_ecw5410,edgecore_eap101,tp-link_ec420-g1,edgecore_ecw5211,cig_wf188n,edgecore_eap102,cig_wf194c,hfcl_ion4' required: true firmware: default: 'next-latest' diff --git a/.github/workflows/quali.yml b/.github/workflows/quali.yml index b3f76616e..26e0a2bb5 100644 --- a/.github/workflows/quali.yml +++ b/.github/workflows/quali.yml @@ -41,7 +41,7 @@ on: description: 'revision of the Open Wifi UI' ap_models: required: true - default: 'ECW5410,EAP101,EC420,ECW5211,WF188N,EAP102,CIG194C' + default: 'edgecore_ecw5410,edgecore_eap101,tp-link_ec420-g1,edgecore_ecw5211,cig_wf188n,edgecore_eap102,cig_wf194c,hfcl_ion4' description: 'the AP models to test' ap_version: required: true @@ -71,12 +71,12 @@ jobs: - name: set variables id: vars run: | - echo ::set-output name=openwifi::$(echo "${{ github.event.inputs.openwifi_revision || 'v2.4.0-RC2' }}") - echo ::set-output name=gw::$(echo "${{ github.event.inputs.openwifi_gw_revision || 'v2.4.0-RC2' }}") + echo ::set-output name=openwifi::$(echo "${{ github.event.inputs.openwifi_revision || 'v2.4.0-RC3' }}") + echo ::set-output name=gw::$(echo "${{ github.event.inputs.openwifi_gw_revision || 'v2.4.0-RC3' }}") echo ::set-output name=sec::$(echo "${{ github.event.inputs.openwifi_sec_revision || 'v2.4.0-RC2' }}") echo ::set-output name=fms::$(echo "${{ github.event.inputs.openwifi_fms_revision || 'v2.4.0-RC2' }}") echo ::set-output name=ui::$(echo "${{ github.event.inputs.openwifi_ui_revision || 'v2.4.0-RC2' }}") - echo ::set-output name=ap_models::$(echo "${{ github.event.inputs.ap_models || 'ECW5410,EAP101,EC420,ECW5211,WF188N,EAP102,CIG194C' }}") + echo ::set-output name=ap_models::$(echo "${{ github.event.inputs.ap_models || 'edgecore_ecw5410,edgecore_eap101,tp-link_ec420-g1,edgecore_ecw5211,cig_wf188n,edgecore_eap102,cig_wf194c,hfcl_ion4' }}") echo ::set-output name=ap_version::$(echo "${{ github.event.inputs.ap_version || 'next-latest' }}") echo ::set-output name=marker_expression::$(echo "${{ github.event.inputs.marker_expression || 'uc_sanity' }}") diff --git a/.github/workflows/ucentralgw-dev-deployment.yaml b/.github/workflows/ucentralgw-dev-deployment.yaml index 489066273..5e3759d99 100644 --- a/.github/workflows/ucentralgw-dev-deployment.yaml +++ b/.github/workflows/ucentralgw-dev-deployment.yaml @@ -31,8 +31,8 @@ env: { "namespace": "dev01", "deploy_method": "git", - "chart_version": "v2.4.0-RC2", - "owgw_version": "v2.4.0-RC2", + "chart_version": "v2.4.0-RC3", + "owgw_version": "v2.4.0-RC3", "owsec_version": "v2.4.0-RC2", "owfms_version": "v2.4.0-RC2", "owprov_version": "main", diff --git a/.github/workflows/ucentralgw-qa-deployment.yaml b/.github/workflows/ucentralgw-qa-deployment.yaml index f314630cd..135f674ef 100644 --- a/.github/workflows/ucentralgw-qa-deployment.yaml +++ b/.github/workflows/ucentralgw-qa-deployment.yaml @@ -31,8 +31,8 @@ env: { "namespace": "qa01", "deploy_method": "git", - "chart_version": "v2.4.0-RC2", - "owgw_version": "v2.4.0-RC2", + "chart_version": "v2.4.0-RC3", + "owgw_version": "v2.4.0-RC3", "owsec_version": "v2.4.0-RC2", "owfms_version": "v2.4.0-RC2", "owprov_version": "main", diff --git a/libs/apnos/apnos.py b/libs/apnos/apnos.py index 94aba65ee..daa3a41a1 100644 --- a/libs/apnos/apnos.py +++ b/libs/apnos/apnos.py @@ -582,6 +582,24 @@ class APNOS: pass return vlan_list + def get_ap_uci_show_ucentral(self): + try: + client = self.ssh_cli_connect() + cmd = "uci show ucentral" + if self.mode: + cmd = f"cd ~/cicd-git/ && ./openwrt_ctl.py {self.owrt_args} -t {self.tty} --action " \ + f"cmd --value \"{cmd}\" " + stdin, stdout, stderr = client.exec_command(cmd) + output = stdout.read() + status = output.decode('utf-8').splitlines() + for i in status: + if i.startswith("ucentral.config.server="): + status = i.split("=")[1] + client.close() + except Exception as e: + print(e) + status = "Error" + return status if __name__ == '__main__': obj = { diff --git a/libs/lanforge/lf_tests.py b/libs/lanforge/lf_tests.py index a439174b5..fef4074ba 100644 --- a/libs/lanforge/lf_tests.py +++ b/libs/lanforge/lf_tests.py @@ -22,12 +22,13 @@ for folder in 'py-json', 'py-scripts': sys.path.append(f"../lanforge/lanforge-scripts/py-scripts/tip-cicd-sanity") sys.path.append(f'../libs') +sys.path.append(f'../tools') sys.path.append(f'../libs/lanforge/') from sta_connect2 import StaConnect2 import time import string import random - +from scp_util import SCP_File S = 12 # from eap_connect import EAPConnect from test_ipv4_ttls import TTLSTest @@ -50,6 +51,7 @@ class RunTest: def __init__(self, lanforge_data=None, local_report_path="../reports/", influx_params=None, debug=False): self.lanforge_ip = lanforge_data["ip"] self.lanforge_port = lanforge_data["port"] + self.lanforge_ssh_port = lanforge_data["ssh_port"] self.twog_radios = lanforge_data["2.4G-Radio"] self.fiveg_radios = lanforge_data["5G-Radio"] self.ax_radios = lanforge_data["AX-Radio"] @@ -129,6 +131,13 @@ class RunTest: print("test result: " + result) pytest.exit("Test Failed: Debug True") self.staConnect.cleanup() + supplicqant = "/home/lanforge/wifi/wpa_supplicant_log_" + self.staConnect.radio.split(".")[2] + ".txt" + obj = SCP_File(ip=self.lanforge_ip, port=self.lanforge_ssh_port, username="root", password="lanforge", + remote_path=supplicqant, + local_path=".") + obj.pull_file() + allure.attach.file(source="wpa_supplicant_log_" + self.staConnect.radio.split(".")[2] + ".txt", + name="supplicant_log") for result in run_results: print("test result: " + result) result = True @@ -215,6 +224,13 @@ class RunTest: # print(e) self.eap_connect.stop() + supplicqant = "/home/lanforge/wifi/wpa_supplicant_log_" + self.eap_connect.radio.split(".")[2] + ".txt" + obj = SCP_File(ip=self.lanforge_ip, port=self.lanforge_ssh_port, username="root", password="lanforge", + remote_path=supplicqant, + local_path=".") + obj.pull_file() + allure.attach.file(source="wpa_supplicant_log_" + self.eap_connect.radio.split(".")[2] + ".txt", + name="supplicant_log") if not self.eap_connect.passes(): if self.debug: print("test result: " + self.eap_connect.passes()) diff --git a/libs/lanforge/scp_util.py b/libs/lanforge/scp_util.py new file mode 100755 index 000000000..3b2c53177 --- /dev/null +++ b/libs/lanforge/scp_util.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python3 +import argparse + +import paramiko +from scp import SCPClient + + +class SCP_File: + def __init__(self, ip="localhost", port=22, username="lanforge", password="lanforge", remote_path="/home/lanforge/", + local_path="."): + self.ip = ip + self.port = port + self.remote_path = remote_path + self.local_path = local_path + self.username = username + self.password = password + + def pull_file(self): + ssh = paramiko.SSHClient() + ssh.load_system_host_keys() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(hostname=self.ip, username=self.username, password=self.password, port=self.port, allow_agent=False, + look_for_keys=False) + # ssh.close() + + with SCPClient(ssh.get_transport()) as scp: + scp.get(remote_path=self.remote_path, local_path=self.local_path, recursive=True) + scp.close() + + +def main(): + parser = argparse.ArgumentParser(prog="lf_utils", + formatter_class=argparse.RawTextHelpFormatter, + allow_abbrev=True, + epilog="About lf_tools.py", + description="Tools for LANforge System") + parser.add_argument('--host', type=str, help=' --host : IP Address f LANforge System', default="localhost") + parser.add_argument('--port', type=int, help='--passwd of dut', default=22) + parser.add_argument('--username', type=str, help='--username to use on LANforge', default="lanforge") + parser.add_argument('--password', type=str, help='--password to use on LANforge', default="lanforge") + parser.add_argument('--remote_path', type=str, help='--password to the given username', + default="/home/lanforge/lf_kinstall.pl") + parser.add_argument('--local_path', type=str, help='--action to perform' + 'reboot | run_cmd', default=".") + args = parser.parse_args() + lf_tools = SCP_File(ip=args.host, port=args.port, + username=args.username, password=args.password, + remote_path=args.remote_path, local_path=args.local_path) + lf_tools.pull_file() + + + + +if __name__ == '__main__': + main() diff --git a/libs/perfecto_libs/android_lib.py b/libs/perfecto_libs/android_lib.py index 2b6659414..63a886e48 100644 --- a/libs/perfecto_libs/android_lib.py +++ b/libs/perfecto_libs/android_lib.py @@ -51,6 +51,7 @@ def closeApp(appName, setup_perfectoMobile): setup_perfectoMobile[1].step_start("Closing App: " + appName) params = {'identifier': appName} setup_perfectoMobile[0].execute_script('mobile:application:close', params) + print("Closed App") def scrollDown(setup_perfectoMobile): print("Scroll Down") @@ -581,7 +582,7 @@ def verifyUploadDownloadSpeed_android(request, setup_perfectoMobile, get_APToMob driver.switch_to.context('WEBVIEW_1') try: - print("Launching Safari") + print("Launching Chrome") report.step_start("Google Home Page") driver.get(connData["webURL"]) print("Enter Search Text") @@ -2678,6 +2679,639 @@ def wifi_connect_eap(request, WifiName, User, ttls_passwd, setup_perfectoMobile, closeApp(connData["appPackage-android"], setup_perfectoMobile) return ssid_with_internet +#--------------------CAPTIVE PORTAL Android----------------------------------------- +def captive_portal_and(request, WifiName, WifiPass, setup_perfectoMobile, connData): + print("\n-------------------------------------") + print("Select Wifi/AccessPoint Connection") + print("-------------------------------------") + print("Verifying Wifi Connection Details....") + #allure.attach(name= body=str("\n-------------------------------------")) + report = setup_perfectoMobile[1] + driver = setup_perfectoMobile[0] + + ssid_with_internet = False + + report.step_start("Switching Driver Context") + print("Switching Context to Native") + contexts = driver.contexts + driver.switch_to.context(contexts[0]) + + # Open Settings Application + openApp(connData["appPackage-android"], setup_perfectoMobile) + deviceModelName = getDeviceModelName(setup_perfectoMobile) + print("Selected Device Model: " + deviceModelName) + #allure.attach(name= body=str("\Selected Device Model: " + deviceModelName)) + if deviceModelName != ("Pixel 4"): + report.step_start("Set Wifi Network to " + WifiName) + + + # -----------------To Open Connections page----------------------- + try: + print("Verifying Connected Wifi Connection") + report.step_start("Click Connections") + connElement = driver.find_element_by_xpath("//*[@text='Connections']") + connElement.click() + + + # ---------------------Open WIFI page------------------------------- + try: + report.step_start("Clicking Wi-Fi") + print("Clicking WIFI") + wifiElement = driver.find_element_by_xpath("//*[@text='Wi-Fi']") + wifiElement.click() + + + # --------------------To Turn on WIFi Switch if already OFF-------------------------------- + try: + driver.implicitly_wait(1) + get_switch_text_element = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/switch_text']") + get_switch_text = get_switch_text_element.text + print("get_switch_text: ",get_switch_text) + print("Find wifi switch") + try: #To Turn on Wi-Fi Switch + if get_switch_text == "Off": + # driver.implicitly_wait(3) + get_switch_element = driver.find_element_by_xpath("//*[@resource-id='com.android.settings:id/switch_widget']") + driver.implicitly_wait(1) + get_switch_element.click() + driver.implicitly_wait(1) + i = 0 + for i in range(5): + if get_switch_text == "On": + print("WIFI Switch is ON") + break + else: + try: + get_switch_text_element = driver.find_element_by_xpath( + "//*[@resource-id='com.android.settings:id/switch_text']") + get_switch_text = get_switch_text_element.text + except: + pass + print("Sleeping for: ", i) + time.sleep(i) + pass + if get_switch_text == "Off": + print("Switch is Still OFF") + closeApp(connData["appPackage-android"], setup_perfectoMobile) + return ssid_with_internet + else: + print("Switch is already On") + check_if_no_internet_popup(driver) + except: + print("Couldn't turn on WIFI switch") + closeApp(connData["appPackage-android"], setup_perfectoMobile) + return ssid_with_internet + + #---------------------This is to Forget current connected SSID------------------------------- + try: #To deal with already connected SSID + check_if_no_internet_popup(driver) + network_category = driver.find_element_by_xpath( + "//*[@resource-id='com.android.settings:id/connected_network_category']") + try: #To forget exhisting ssid + print("To forget ssid") + check_if_no_internet_popup(driver) + additional_details_element = driver.find_element_by_xpath( + "//*[@resource-id='com.android.settings:id/layout_details']") + additional_details_element.click() + try: + check_if_no_internet_popup(driver) + forget_ssid = driver.find_element_by_xpath( + "//*[@resource-id='com.android.settings:id/forget_button']//*[@resource-id='com.android.settings:id/icon']") + forget_ssid.click() + print("Forget old ssid") + except: + print("Couldn't forget ssid") + closeApp(connData["appPackage-android"], setup_perfectoMobile) + return ssid_with_internet + except: + print("Couldn't get into additional details") + except: + print("No Connected SSIDS") + #----------------------This is to Forget current connected SSID-------------------------------- + + + print("Searching for Wifi: " + WifiName) + #allure.attach(name= body=str("Searching for Wifi: " + WifiName)) + time.sleep(2) + print("Selecting Wifi: " + WifiName) + ssid_found = False + available_ssids = False + # This is To get all available ssids + # ------------------------------------------------------ + try: + for check_for_all_ssids in range(2): + available_ssids = get_all_available_ssids(driver) + try: + if WifiName not in available_ssids: + scrollDown(setup_perfectoMobile) + time.sleep(2) + else: + ssid_found = True + print(WifiName + " : Found in Device") + #allure.attach(name= body=str(WifiName + " : Found in Device")) + break + except: + print("1538") + pass + if not ssid_found: + print("could not found" + WifiName + " in device") + #allure.attach(name= body=str("could not found" + WifiName + " in device")) + closeApp(connData["appPackage-android"], setup_perfectoMobile) + return ssid_with_internet + except: + closeApp(connData["appPackage-android"], setup_perfectoMobile) + return ssid_with_internet + # ------------------------------------------------------- + + + + #Selecting WIFI + # ------------------------------------------------------- + try: + report.step_start("Selecting Wifi: " + WifiName) + print("Click wifi") + wifi_selection_element = WebDriverWait(driver, 35).until( + EC.presence_of_element_located((MobileBy.XPATH, "//*[@text='" + WifiName + "']"))) + wifi_selection_element.click() + check_if_no_internet_popup(driver) + #allure.attach(name= body=str("Selecting Wifi: " + WifiName)) + except Exception as e: + print("Exception on Selecting Wifi Network. Please check wifi Name or signal") + #allure.attach(name= body=str("Exception on Selecting Wifi Network. Please check wifi Name or signal")) + request.config.cache.set(key="SelectingWifiFailed", value=str(e)) + closeApp(connData["appPackage-android"], setup_perfectoMobile) + return ssid_with_internet + # ------------------------------------------------------- + + + #Set password if Needed + # ------------------------------------------------------- + try: + time.sleep(2) + check_if_no_internet_popup(driver) + report.step_start("Set Wifi Password") + print("Enter Wifi password") + wifi_password_element = driver.find_element_by_xpath( + "//*[@resource-id='com.android.settings:id/edittext']") + wifi_password_element.send_keys(WifiPass) + except NoSuchElementException: + print("Password Page Not Loaded, password May be cached in the System") + check_if_no_internet_popup(driver) + # ------------------------------------------------------- + + #Click on connect button + # ------------------------------------------------------- + try: + time.sleep(2) + report.step_start("Click Connect Button") + print("Click Connect Button") + join_btn_element = driver.find_element_by_xpath("//*[@text='Connect']") + join_btn_element.click() + except NoSuchElementException: + print("Connect Button Not Enabled...Verify if Password is set properly ") + check_if_no_internet_popup(driver) + #---------------------Clicking on ssid for captive portal login-------- + try: + time.sleep(2) + report.step_start("Selecting Wifi: " + WifiName) + wifi_selection_element = WebDriverWait(driver, 35).until( + EC.presence_of_element_located((MobileBy.XPATH, "//*[@text='" + WifiName + "']"))) + wifi_selection_element.click() + except NoSuchElementException: + print("Not connected to Captive portal Ssid.. ") + try: + time.sleep(2) + report.step_start("Click Accept Terms Button") + print("Click Accept Terms Button") + join_btn_element = driver.find_element_by_xpath("//*[@text='Accept Terms of Service']") + join_btn_element.click() + except NoSuchElementException: + print(" Couldn't press Accept terms button") + try: + time.sleep(2) + report.step_start("Click Continue Button") + print("Click Continue Button") + join_btn_element = driver.find_element_by_xpath("//*[@text='Continue']") + join_btn_element.click() + except NoSuchElementException: + print(" Couldn't press Continue button") + try: + time.sleep(2) + report.step_start("Click Last Terms if needed") + print("Click Last Terms if needed") + join_btn_element = driver.find_element_by_xpath("//*[@text='Done']") + join_btn_element.click() + except NoSuchElementException: + print(" Couldn't find the last terms page") + + #Verify if WiFi is connected + # ------------------------------------------------------- + try: + report.step_start("Verify if Wifi is Connected") + WifiInternetErrMsg = WebDriverWait(driver, 35).until( + EC.presence_of_element_located((MobileBy.XPATH, + "//*[@resource-id='android:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) + ssid_with_internet = True + print("Wifi Successfully Connected") + #allure.attach(name= body=str("Wifi Successfully Connected")) + # time.sleep(5) + check_if_no_internet_popup(driver) + except: + try: + check_if_no_internet_popup(driver) + WifiInternetErrMsg = WebDriverWait(driver, 35).until( + EC.presence_of_element_located((MobileBy.XPATH, + "//*[@resource-id='com.android.settings:id/summary' and @text='Connected without internet']/parent::*/android.widget.TextView[@text='" + + WifiName + "']"))) + print("Wifi Successfully Connected without internet") + #allure.attach(name= body=str("Wifi Successfully Connected without internet")) + check_if_no_internet_popup(driver) + except: + try: + report.step_start("Verify if Wifi is Connected") + WifiInternetErrMsg = WebDriverWait(driver, 60).until(EC.presence_of_element_located(( + MobileBy.XPATH, + "//*[@resource-id='com.android.settings:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) + ssid_with_internet = True + print("Wifi Successfully Connected") + #allure.attach(name=body=str("Wifi Successfully Connected")) + except NoSuchElementException: + print("Wifi Connection Error: " + WifiName) + #allure.attach(name=body=str("Wifi Connection Error: " + WifiName)) + closeApp(connData["appPackage-android"], setup_perfectoMobile) + return ssid_with_internet + # ------------------------------------------------------- + # Get into Additional Details + # To Get an IP Address + # To Forget connection + # To turn off auto. connect + # ------------------------------------------------------- + try: + print("Into additional details") + time.sleep(2) + additional_details_element = driver.find_element_by_xpath( + "//*[@resource-id='com.android.settings:id/layout_details']") + additional_details_element.click() + try: + time.sleep(2) + ip_address_element = driver.find_element_by_xpath( + "//*[@text='IP address']/parent::*/android.widget.TextView[@resource-id='com.android.settings:id/summary']") + ip_address_element_text = ip_address_element.text + print("Device IP address is :", ip_address_element_text) + except: + try: + time.sleep(2) + ip_address_element = driver.find_element_by_xpath( + "//*[@text='IP address']/parent::*/android.widget.TextView[@resource-id='android:id/summary']") + ip_address_element_text = ip_address_element.text + print("Device IP address is :", ip_address_element_text) + except: + print("IP address element not found") + # allure.attach(name= body=str("IP address element not found")) + + # closeApp(connData["appPackage-android"], setup_perfectoMobile) + # return ip_address_element_text, ssid_with_internet + + try: + check_if_no_internet_popup(driver) + driver.implicitly_wait(3) + time.sleep(2) + auto_reconnect_off = driver.find("//*[@resource-id='android:id/switch_widget']") + auto_reconnect_off_text = auto_reconnect_off.text + if auto_reconnect_off_text != "Off": + auto_reconnect_off.click() + print("Auto reconnect turning off") + else: + print("Auto reconnect is already off") + except: + print("Couldn't find auto reconnect element") + except: + print("Couldn't get into Additional settings") + except NoSuchElementException: + print("No Switch element found") + #allure.attach(name= body=str("No Switch element found")) + # ---------------------To Turn on WIFi Switch if already OFF------------------------------- + + except NoSuchElementException: + print("Couldn't find wifi Button") + #allure.attach(name= body=str("Couldn't find wifi Button")) + # ------------------Open WIFI page---------------------------------- + + except NoSuchElementException: + print("Exception: Verify Xpath - Update/check Xpath for Click Connections") + #allure.attach(name= body=str("Exception: Verify Xpath - Update/check Xpath for Click Connections")) + # -----------------To Open Connections page--------------------------- + # --------------------Pixel 4 code--------------------------- + else: + report.step_start("Set Wifi Network to " + WifiName) + + # -----------------To Open Connections page----------------------- + try: + print("Verifying Connected Wifi Connection") + report.step_start("Click Network & internet in pixel4") + connElement = driver.find_element_by_xpath("//*[@text='Network & internet']") + connElement.click() + + # ---------------------Open WIFI page------------------------------- + try: + report.step_start("Clicking Wi-Fi") + print("Clicking WIFI") + time.sleep(3) + wifiElement = WebDriverWait(driver, 10).until( + EC.presence_of_element_located((MobileBy.XPATH, "//*[@text='Wi‑Fi']"))) + wifiElement.click() + + # --------------------To Turn on WIFi Switch if already OFF-------------------------------- + try: + driver.implicitly_wait(1) + report.step_start("Turn on WIFi Switch if already OFF") + get_switch_text_element = driver.find_element_by_xpath( + "//*[@resource-id='android:id/icon']") + get_switch_text = get_switch_text_element.click() + if get_switch_text is not None: + switch_text = "Off" + else: + switch_text = "On" + + print("get_switch_text: ", switch_text) + print("Find wifi switch") + try: # To Turn on Wi-Fi Switch + if switch_text == "Off": + # driver.implicitly_wait(3) + get_switch_element = driver.find_element_by_xpath( + "//*[@resource-id='com.android.settings:id/switch_widget']") + driver.implicitly_wait(1) + get_switch_element.click() + driver.implicitly_wait(1) + i = 0 + for i in range(5): + if switch_text == "On": + print("WIFI Switch is ON") + break + else: + try: + get_switch_text_element = driver.find_element_by_xpath( + "//*[@text='Add network']") + get_switch_text = get_switch_text_element.text + if get_switch_text == "Add network": + switch_text = "On" + else: + switch_text = "Off" + except NoSuchElementException: + print("Exception: Verify Xpath") + # Scroll Down + scrollDown(setup_perfectoMobile) + print("Sleeping for: ", i) + time.sleep(i) + pass + if switch_text == "Off": + print("Switch is Still OFF") + closeApp(connData["appPackage-android"], setup_perfectoMobile) + return ssid_with_internet + else: + print("Switch is already On") + check_if_no_internet_popup(driver) + except: + print("Couldn't turn on WIFI switch") + closeApp(connData["appPackage-android"], setup_perfectoMobile) + return ssid_with_internet + + # ---------------------This is to Forget current connected SSID------------------------------- + try: # To deal with already connected SSID + check_if_no_internet_popup(driver) + network_category = driver.find_element_by_xpath("//*[@text='Connected']") + try: # To forget existing ssid + print("To forget ssid") + report.step_start("To forget ssid") + check_if_no_internet_popup(driver) + additional_details_element = driver.find_element_by_xpath( + "//*[@resource-id='com.android.settings:id/settings_button_no_background']") + additional_details_element.click() + except: + print("Couldn't get into additional details") + try: + check_if_no_internet_popup(driver) + forget_ssid = driver.find_element_by_xpath( + "//*[@resource-id='com.android.settings:id/button1']") + forget_ssid.click() + print("Forget old ssid") + except: + print("Couldn't forget ssid") + closeApp(connData["appPackage-android"], setup_perfectoMobile) + return ssid_with_internet + except: + print("No Connected SSIDS") + # ----------------------This is to Forget current connected SSID-------------------------------- + + # time.sleep(2) + # print("Selecting Wifi: " + WifiName) + # ssid_found = False + # available_ssids = False + # This is To get all available ssids + # ------------------------------------------------------ + # try: + # for check_for_all_ssids in range(2): + # available_ssids = WifiName + # try: + # if WifiName not in available_ssids: + # scrollDown(setup_perfectoMobile) + # time.sleep(2) + # else: + # ssid_found = True + # print(WifiName + " : Found in Device") + # # allure.attach(name= body=str(WifiName + " : Found in Device")) + # break + # except: + # print("1538") + # pass + # if not ssid_found: + # print("could not found" + WifiName + " in device") + # # allure.attach(name= body=str("could not found" + WifiName + " in device")) + # closeApp(connData["appPackage-android"], setup_perfectoMobile) + # return ssid_with_internet + # except: + # closeApp(connData["appPackage-android"], setup_perfectoMobile) + # return ssid_with_internet + # # ------------------------------------------------------- + + # Selecting WIFI + # ------------------------------------------------------- + try: + report.step_start("Selecting Wifi: " + WifiName) + print("Click wifi") + wifi_selection_element = WebDriverWait(driver, 35).until( + EC.presence_of_element_located((MobileBy.XPATH, "//*[@text='" + WifiName + "']"))) + wifi_selection_element.click() + check_if_no_internet_popup(driver) + # allure.attach(name= body=str("Selecting Wifi: " + WifiName)) + except Exception as e: + print("Exception on Selecting Wifi Network") + # allure.attach(name= body=str("Exception on Selecting Wifi Network. Please check wifi Name or signal")) + request.config.cache.set(key="SelectingWifiFailed", value=str(e)) + closeApp(connData["appPackage-android"], setup_perfectoMobile) + return ssid_with_internet + # ------------------------------------------------------- + # Set password if Needed + # ------------------------------------------------------- + try: + check_if_no_internet_popup(driver) + report.step_start("Set Wifi Password") + print("Entering password") + wifiPasswordElement = driver.find_element_by_xpath( + "//*[@resource-id='com.android.settings:id/password']") + wifiPasswordElement.send_keys(WifiPass) + except NoSuchElementException: + print("Password Page Not Loaded, password May be cached in the System") + check_if_no_internet_popup(driver) + # ------------------------------------------------------- + + # Click on connect button + # ------------------------------------------------------- + try: + report.step_start("Click Connect Button") + joinBTNElement = driver.find_element_by_xpath("//*[@text='Connect']") + joinBTNElement.click() + except NoSuchElementException: + print("Connect Button Not Enabled...Verify if Password is set properly ") + check_if_no_internet_popup(driver) + # ------------------------------------------------------- + try: + report.step_start("Selecting Wifi: " + WifiName) + wifiSelectionElement = WebDriverWait(driver, 35).until( + EC.presence_of_element_located((MobileBy.XPATH, "//*[@text='" + WifiName + "']"))) + wifiSelectionElement.click() + check_if_no_internet_popup(driver) + except Exception as e: + print("Exception on Selecting Wifi Network. Please check wifi Name or signal") + try: + time.sleep(2) + report.step_start("Click Accept Terms Button") + print("Click Accept Terms Button") + join_btn_element = driver.find_element_by_xpath("//*[@text='Accept Terms of Service']") + join_btn_element.click() + except NoSuchElementException: + print(" Couldn't press Accept terms button") + try: + time.sleep(2) + report.step_start("Click Continue Button") + print("Click Continue Button") + join_btn_element = driver.find_element_by_xpath("//*[@text='Continue']") + join_btn_element.click() + except NoSuchElementException: + print(" Couldn't press Continue button") + try: + time.sleep(2) + report.step_start("Click Last Terms if needed") + print("Click Last Terms if needed") + join_btn_element = driver.find_element_by_xpath("//*[@text='Done']") + join_btn_element.click() + except NoSuchElementException: + print(" Couldn't find the last terms page") + + # Verify if WiFi is connected + # ------------------------------------------------------- + try: + report.step_start("Verify if Wifi is Connected") + WifiInternetErrMsg = WebDriverWait(driver, 35).until( + EC.presence_of_element_located((MobileBy.XPATH, + "//*[@resource-id='android:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) + ssid_with_internet = True + print("Wifi Successfully Connected") + # time.sleep(5) + check_if_no_internet_popup(driver) + except: + try: + check_if_no_internet_popup(driver) + WifiInternetErrMsg = WebDriverWait(driver, 35).until( + EC.presence_of_element_located((MobileBy.XPATH, + "//*[@resource-id='com.android.settings:id/summary' and @text='Connected without internet']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) + print("Wifi Successfully Connected without internet") + check_if_no_internet_popup(driver) + except: + try: + report.step_start("Verify if Wifi is Connected") + WifiInternetErrMsg = WebDriverWait(driver, 60).until( + EC.presence_of_element_located(( + MobileBy.XPATH, + "//*[@resource-id='com.android.settings:id/summary' and @text='Connected']/parent::*/android.widget.TextView[@text='" + WifiName + "']"))) + ssid_with_internet = True + print("Wifi Successfully Connected") + except NoSuchElementException: + print("Wifi Connection Error: " + WifiName) + closeApp(connData["appPackage-android"], setup_perfectoMobile) + return ssid_with_internet + # ------------------------------------------------------- + + # Get into Additional Details + # To Get an IP Address + # To Forget connection + # To turn off auto. connect + # ------------------------------------------------------- + try: + print("Into additional details") + time.sleep(5) + report.step_start("Going for ip address") + additional_details_element = driver.find_element_by_xpath( + "//*[@resource-id='com.android.settings:id/settings_button_no_background']") + additional_details_element.click() + print("Entered ssid") + try: + time.sleep(10) + print("clicking Advanced") + report.step_start("clicking Advanced") + advanced_element = driver.find_element_by_xpath("//*[@text='Advanced']") + advanced_element.click() + print("clicked Advanced") + # print("Device IP address is :", ip_address_element_text) + except: + try: + time.sleep(5) + print("clicking Advanced2") + advanced_element = driver.find_element_by_xpath( + "//*[@resource-id='com.android.settings:id/recycler_view']/android.widget.FrameLayout[2]/android.widget.LinearLayout[1]/android.widget.RelativeLayout[1]") + advanced_element.click() + # print("Device IP address is :", ip_address_element_text) + except: + try: + time.sleep(5) + print("clicking Advanced2") + advanced_element = driver.find_element_by_xpath( + "//*[@resource-id='com.android.settings:id/recycler_view']/android.widget.LinearLayout[5]/android.widget.LinearLayout[1]/android.widget.ImageView[1]") + advanced_element.click() + except: + print("No advanced options") + # allure.attach(name= body=str("IP address element not found")) + + # closeApp(connData["appPackage-android"], setup_perfectoMobile) + # return ip_address_element_text, ssid_with_internet + # Scroll Down + scrollDown(setup_perfectoMobile) + try: + time.sleep(2) + ip_address_element = driver.find_element_by_xpath( + "//*[@text='IP address']/parent::*/android.widget.TextView[@resource-id='android:id/summary']") + ip_address_element_text = ip_address_element.text + print("Device IP address is :", ip_address_element_text) + except: + print("IP address element not found") + except: + print("Couldn't get into Additional settings") + # ------------------------------------------------------- + except: + print("No Switch element found") + # ---------------------To Turn on WIFi Switch if already OFF------------------------------- + + except: + print("Couldn't find wifi Button") + # ------------------Open WIFI page---------------------------------- + + except: + print("Exception: Verify Xpath - Update/check Xpath for Click Connections") + # -----------------To Open Connections page--------------------------- + + closeApp(connData["appPackage-android"], setup_perfectoMobile) + return ip_address_element_text, ssid_with_internet + def close_driver(driver): driver.close() diff --git a/libs/perfecto_libs/iOS_lib.py b/libs/perfecto_libs/iOS_lib.py index 2ed1efc17..59dc2171b 100644 --- a/libs/perfecto_libs/iOS_lib.py +++ b/libs/perfecto_libs/iOS_lib.py @@ -23,7 +23,7 @@ import allure def openApp(appName, setup_perfectoMobile): #print("Refreshing App: " + appName) - setup_perfectoMobile[1].step_start("Opening App: " + appName) + setup_perfectoMobile[1].step_start("Opening App: " + appName) params = {'identifier': appName} #Open/Close/Open Action is performed to ensure the app is back to its Original Settings setup_perfectoMobile[0].execute_script('mobile:application:open', params) @@ -32,7 +32,7 @@ def openApp(appName, setup_perfectoMobile): def scrollDown(setup_perfectoMobile): print("Scroll Down") - setup_perfectoMobile[1].step_start("Scroll Down") + setup_perfectoMobile[1].step_start("Scroll Down") params2 = {} params2["start"] = "50%,90%" params2["end"] = "50%,20%" @@ -40,16 +40,16 @@ def scrollDown(setup_perfectoMobile): time.sleep(5) setup_perfectoMobile[0].execute_script('mobile:touch:swipe', params2) time.sleep(5) - + def closeApp(appName, setup_perfectoMobile): #print("Closing App.." + appName) - setup_perfectoMobile[1].step_start("Closing App: " + appName) + setup_perfectoMobile[1].step_start("Closing App: " + appName) params = {'identifier': appName} setup_perfectoMobile[0].execute_script('mobile:application:close', params) def rebootPhone(setup_perfectoMobile): #print("Closing App.." + appName) - setup_perfectoMobile[1].step_start("Rebooting Phone...") + setup_perfectoMobile[1].step_start("Rebooting Phone...") params = {} setup_perfectoMobile[0].execute_script('mobile:handset:reboot', params) @@ -59,14 +59,14 @@ def set_APconnMobileDevice_iOS(request, WifiNameSSID, WifiPass, setup_perfectoMo print("\n-------------------------------------") print("Select Wifi/AccessPoint Connection") print("-------------------------------------") - + reportFlag = True - - print("Verifying Wifi/AP Connection Details....") - report = setup_perfectoMobile[1] + + print("Verifying Wifi/AP Connection Details....") + report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] - report.step_start("Switching Driver Context") + report.step_start("Switching Driver Context") print("Switching Context to Native") #contexts = driver.contexts #print(contexts) @@ -74,26 +74,26 @@ def set_APconnMobileDevice_iOS(request, WifiNameSSID, WifiPass, setup_perfectoMo #driver.switch_to.context(contexts[0]) print(WifiNameSSID) - report.step_start("Set Wifi Network to " + WifiNameSSID) + report.step_start("Set Wifi Network to " + WifiNameSSID) #Open Settings Application openApp(connData["bundleId-iOS-Settings"], setup_perfectoMobile) try: print("Verifying Connected Wifi Connection") - report.step_start("Verifying Connected Wifi Connection") + report.step_start("Verifying Connected Wifi Connection") element = driver.find_element_by_xpath("//XCUIElementTypeCell[@name='Wi-Fi']/XCUIElementTypeStaticText[2]") Wifi_AP_Name = element.text except NoSuchElementException: - print("Exception: Verify Xpath - UpdateXpath") - #NEED to fail if Wifi AP NAME isn't in the approved list AKA 5g & 2g. + print("Exception: Verify Xpath - UpdateXpath") + #NEED to fail if Wifi AP NAME isn't in the approved list AKA 5g & 2g. #print("Wifi Name Matches - Already Connected To: " + Wifi_AP_Name) #print("Wifi Name Matches - Already Connected To: " + WifiName) if Wifi_AP_Name.__eq__(WifiNameSSID): - print("Wifi Name Matches - Already Connected To: " + Wifi_AP_Name) - + print("Wifi Name Matches - Already Connected To: " + Wifi_AP_Name) + #Verify if Ap is connected with Wifi - report.step_start("Verify Wifi Connection Status..") + report.step_start("Verify Wifi Connection Status..") #print("Click Wifi Connection..") element.click() @@ -107,7 +107,7 @@ def set_APconnMobileDevice_iOS(request, WifiNameSSID, WifiPass, setup_perfectoMo reportFlag = False assert reportFlag - #Check AP Internet Error Msg + #Check AP Internet Error Msg print("Checking Internet Connection Error..") report.step_start("Checking Internet Connection Error..") @@ -118,7 +118,7 @@ def set_APconnMobileDevice_iOS(request, WifiNameSSID, WifiPass, setup_perfectoMo print("No Error with Wifi-AP Connection: " + Wifi_AP_Name) else: - print("Selecting Wifi: " + WifiNameSSID) + print("Selecting Wifi: " + WifiNameSSID) #consoleOutput+=str(WifiName)+ "\n" report.step_start("Selecting Wifi...: " + WifiNameSSID) element = driver.find_element_by_xpath("//XCUIElementTypeCell[@name='Wi-Fi']/XCUIElementTypeStaticText[2]") @@ -137,7 +137,7 @@ def set_APconnMobileDevice_iOS(request, WifiNameSSID, WifiPass, setup_perfectoMo wifiPassword.send_keys(WifiPass) except NoSuchElementException: print("Enter Password Page Not Loaded") - + try: joinBTN = driver.find_element_by_xpath("//*[@label='Join']") joinBTN.click() @@ -159,8 +159,8 @@ def Toggle_AirplaneMode_iOS(request, setup_perfectoMobile, connData): print("\n-----------------------") print("Toggle Airplane Mode") print("-----------------------") - - report = setup_perfectoMobile[1] + + report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] currentResult = True @@ -183,14 +183,14 @@ def Toggle_AirplaneMode_iOS(request, setup_perfectoMobile, connData): print("Verify Cellular Mode Text: Airplane Mode Success") except NoSuchElementException: currentResult = False - print("Cellular Mode Not in Airplane Mode: ERROR") + print("Cellular Mode Not in Airplane Mode: ERROR") #Set Airplane Mode Back - AirplaneMode.click() + AirplaneMode.click() except NoSuchElementException: currentResult = False print("Airplane Wifi Button not loaded...") - + #Verify No Sim Card Installed Msg Popup report.step_start("Verify No Sim Card Installed Msg Popup") print("Verify No Sim Card Installed Msg Popup..") @@ -198,7 +198,7 @@ def Toggle_AirplaneMode_iOS(request, setup_perfectoMobile, connData): NoSimCardErrorMsg = driver.find_element_by_xpath("//*[@value='No SIM Card Installed']") except NoSuchElementException: print("No Sim Card AlertMsg") - + #Click ok on No Sim Card Msg Popup print("Click ok on No Sim Card Msg Popup..") report.step_start("Click ok on No Sim Card Msg Popup") @@ -214,11 +214,11 @@ def verify_APconnMobileDevice_iOS(request, WifiName, setup_perfectoMobile, connD print("\n-----------------------") print("Verify Connected Wifi Mode") print("-----------------------") - - report = setup_perfectoMobile[1] + + report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] - report.step_start("Verifying WifiName: " + WifiName) + report.step_start("Verifying WifiName: " + WifiName) #Refresh Settings Application openApp(connData["bundleId-iOS-Settings"], setup_perfectoMobile) @@ -226,32 +226,32 @@ def verify_APconnMobileDevice_iOS(request, WifiName, setup_perfectoMobile, connD #Verifies if AP is connected to Wifi status try: print("Get Connected Wifi Name") - report.step_start("Get Connected Wifi Name") + report.step_start("Get Connected Wifi Name") element = WebDriverWait(driver, 45).until(EC.presence_of_element_located((MobileBy.XPATH, "//XCUIElementTypeCell[@name='Wi-Fi']/XCUIElementTypeStaticText[2]"))) #element = driver.find_element_by_xpath("") element.click() - + except Exception as e: print("SSID Not Connected Within allocated Time: " + WifiName) - report.step_start("SSID Not Connected: " + WifiName) + report.step_start("SSID Not Connected: " + WifiName) request.config.cache.set(key="SelectingWifiFailed", value=str(e)) reportFlag = False - assert reportFlag + assert reportFlag #print("Verifying if SSID Wifi Shows up") - #report.step_start("Verifying if SSID Wifi Shows up") + #report.step_start("Verifying if SSID Wifi Shows up") #wifiXpath2 = WebDriverWait(driver, 45).until(EC.presence_of_element_located((MobileBy.XPATH, "//*[@label='"+ WifiName + "']"))) #print("SSID is Present: " + WifiName) - #report.step_start("SSID is Present: " + WifiName) + #report.step_start("SSID is Present: " + WifiName) - try: + try: print("Waiting for Auto Connection to: " + WifiName) - report.step_start("Waiting for Auto Connection to: " + WifiName) + report.step_start("Waiting for Auto Connection to: " + WifiName) selectedWifiNetwork = "//*[@label='selected']/parent::*/parent::*/XCUIElementTypeStaticText[@label='"+ WifiName + "']/parent::*/XCUIElementTypeButton[@label='More Info']" passPointWifi = WebDriverWait(driver, 30).until(EC.presence_of_element_located((MobileBy.XPATH, selectedWifiNetwork))) except Exception as e: #Toggle Wifi Mode - Toggle_WifiMode_iOS(request, setup_perfectoMobile, connData) + Toggle_WifiMode_iOS(request, setup_perfectoMobile, connData) time.sleep(15) try: @@ -260,7 +260,7 @@ def verify_APconnMobileDevice_iOS(request, WifiName, setup_perfectoMobile, connD passPointWifi = WebDriverWait(driver, 30).until(EC.presence_of_element_located((MobileBy.XPATH, selectedWifiNetwork2))) except Exception as e: print("SSID Not Connected Within allocated Time: " + WifiName) - report.step_start("SSID Not Connected: " + WifiName) + report.step_start("SSID Not Connected: " + WifiName) request.config.cache.set(key="SelectingWifiFailed", value=str(e)) reportFlag = False assert reportFlag @@ -271,29 +271,29 @@ def ForgetWifiConnection(request, setup_perfectoMobile, wifiName, connData): print("\n-----------------------------") print("Forget Wifi/AP Connection") print("-----------------------------") - - report = setup_perfectoMobile[1] + + report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] - report.step_start("Switching Driver Context") + report.step_start("Switching Driver Context") print("Switching Context to Native") driver.switch_to.context('NATIVE_APP') #contexts = driver.contexts #print(contexts) - report.step_start("Forget Existing Wifi") + report.step_start("Forget Existing Wifi") openApp(connData["bundleId-iOS-Settings"], setup_perfectoMobile) try: # print("Verifying Connected Wifi Connection") - report.step_start("Verifying Existing Connected Wifi Connection") + report.step_start("Verifying Existing Connected Wifi Connection") element = driver.find_element_by_xpath("//XCUIElementTypeCell[@name='Wi-Fi']/XCUIElementTypeStaticText[2]") Wifi_AP_Name = element.text except NoSuchElementException: - print("Exception: Verify Xpath - UpdateXpath") + print("Exception: Verify Xpath - UpdateXpath") if Wifi_AP_Name.__eq__(wifiName): - print("Wifi Name Matches Connected To: " + Wifi_AP_Name) + print("Wifi Name Matches Connected To: " + Wifi_AP_Name) element.click() print("More Info on Wifi: " + Wifi_AP_Name) @@ -315,8 +315,8 @@ def ForgetWifiConnection(request, setup_perfectoMobile, wifiName, connData): elementforgetWifi.click() else: - print("Connected To: " + Wifi_AP_Name) - print("Initial Wifi: " + wifiName) + print("Connected To: " + Wifi_AP_Name) + print("Initial Wifi: " + wifiName) element.click() report.step_start("Click on More Info on Wifi") @@ -339,15 +339,15 @@ def Toggle_WifiMode_iOS(request, setup_perfectoMobile, connData): print("\n-----------------------") print("Toggle Wifi Mode") print("-----------------------") - - report = setup_perfectoMobile[1] + + report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] - report.step_start("Toggle Wifi Mode") + report.step_start("Toggle Wifi Mode") print("Toggle Wifi Mode..") try: print("Disable Wifi Radio Btn") - report.step_start("Disable Wifi Radio Btn") + report.step_start("Disable Wifi Radio Btn") WifiMode = driver.find_element_by_xpath("//*[@label='Wi-Fi' and @value='1']") #Toggle Wifi Mode WifiMode.click() @@ -355,20 +355,24 @@ def Toggle_WifiMode_iOS(request, setup_perfectoMobile, connData): #Verify Radio Button Mode try: print("Enable Wifi Radio Btn") - report.step_start("Enable Wifi Radio Btn") + report.step_start("Enable Wifi Radio Btn") WifiDissconnected = driver.find_element_by_xpath("//*[@label='Wi-Fi' and @value='0']") #self.assertEqual(WifiDissconnected.text, "Airplane Mode", "Airplane Mode Not Triggerd") print("Wifi Radio Button Toggled to Disable") except NoSuchElementException: - print("Wifi Radio Button Not Disabled...") - + print("Wifi Radio Button Not Disabled...") + #Set Airplane Mode Back - WifiDissconnected.click() - print("Wifi Radio Button Toggled to Enabled") + WifiDissconnected.click() + print("Wifi Radio Button Toggled to Enabled") except NoSuchElementException: print("Airplane Wifi Button not loaded...") def get_WifiIPAddress_iOS(request, setup_perfectoMobile, connData, wifiName): + print("\n------------------------------------") + print("Get Wifi IP Address IOS") + print("--------------------------------------") + report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] @@ -376,16 +380,16 @@ def get_WifiIPAddress_iOS(request, setup_perfectoMobile, connData, wifiName): try: # print("Verifying Connected Wifi Connection") - report.step_start("Loading Wifi Page") + report.step_start("Loading Wifi Page") element = driver.find_element_by_xpath("//XCUIElementTypeCell[@name='Wi-Fi']/XCUIElementTypeStaticText[2]") element.click() except NoSuchElementException: - print("Exception: Verify Xpath - unable to click on Wifi") + print("Exception: Verify Xpath - unable to click on Wifi") report.step_start("Wifi Page") WifiXpath = "//*[@label='selected']/parent::*/parent::*/XCUIElementTypeStaticText[@label='"+ wifiName + "']" elementWifName = driver.find_element_by_xpath(WifiXpath) - #Check AP Internet Error Msg + #Check AP Internet Error Msg print("Checking Internet Connection Error...") report.step_start("Checking Internet Connection Error..") @@ -394,13 +398,13 @@ def get_WifiIPAddress_iOS(request, setup_perfectoMobile, connData, wifiName): except NoSuchElementException: print("Wifi Connected without any errors: " + wifiName) - try: + try: WifiInternetInfo=driver.find_element_by_xpath("(//XCUIElementTypeButton[@label='More Info'])[1]") WifiInternetInfo.click() except NoSuchElementException: print("Wifi-AP Connected Successfully: " + wifiName) - try: + try: WifiIPaddress= driver.find_element_by_xpath("(//*[@label='Router']/parent::*/XCUIElementTypeStaticText)[2]").text return WifiIPaddress except NoSuchElementException: @@ -409,7 +413,7 @@ def get_WifiIPAddress_iOS(request, setup_perfectoMobile, connData, wifiName): return None def ping_deftapps_iOS(setup_perfectoMobile, AP_IPaddress): - report = setup_perfectoMobile[1] + report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] report.step_start("Pinging deftapps....") @@ -439,7 +443,7 @@ def ping_deftapps_iOS(setup_perfectoMobile, AP_IPaddress): report.step_start("Verifying Packet Loss..") print("Verifying Packet Loss..") try: - element5 = driver.find_element_by_xpath("//XCUIElementTypeStaticText[@label='0']") + element5 = driver.find_element_by_xpath("//XCUIElementTypeStaticText[@label='0']") #assertEqual(element5.text, "0", "Packet Loss Exist, Please Check Device") except NoSuchElementException: print("No Packet Loss Detected 1st Attempt") @@ -447,7 +451,7 @@ def ping_deftapps_iOS(setup_perfectoMobile, AP_IPaddress): report.step_start("Verifying Packet Sent..") print("Verifying Packet Sent..") try: - packetSent = driver.find_element_by_xpath("//XCUIElementTypeStaticText[@label='Sent']/parent::*/XCUIElementTypeStaticText[2]").text + packetSent = driver.find_element_by_xpath("//XCUIElementTypeStaticText[@label='Sent']/parent::*/XCUIElementTypeStaticText[2]").text #assertEqual(element5.text, "0", "Packet Loss Exist, Please Check Device") except NoSuchElementException: print("-------Exception: Packet Sent Error, check object ID") @@ -455,7 +459,7 @@ def ping_deftapps_iOS(setup_perfectoMobile, AP_IPaddress): report.step_start("Verifying Packet Received..") print("Verifying Packet Received..") try: - packetReceived = driver.find_element_by_xpath("//XCUIElementTypeStaticText[@label='Received']/parent::*/XCUIElementTypeStaticText[2]").text + packetReceived = driver.find_element_by_xpath("//XCUIElementTypeStaticText[@label='Received']/parent::*/XCUIElementTypeStaticText[2]").text #assertEqual(element5.text, "0", "Packet Loss Exist, Please Check Device") except NoSuchElementException: print("-------Exception: Packet Sent Error, check object ID") @@ -466,7 +470,7 @@ def ping_deftapps_iOS(setup_perfectoMobile, AP_IPaddress): print("Verifying No route to host Error Msg....") report.step_start("Verifying No route to host Error Msg..") try: - element7 = driver.find_element_by_xpath("(//XCUIElementTypeStaticText[@label='Sendto: No route to host'])[2]") + element7 = driver.find_element_by_xpath("(//XCUIElementTypeStaticText[@label='Sendto: No route to host'])[2]") print("Packet Loss Detected on AP!!!!!: " + AP_IPaddress) #self.assertNotEqual(element7.text, "Sendto: No route to host", "Packet Loss Exist, Please Check Device AP: " + Wifi_AP_Name) except NoSuchElementException: @@ -478,32 +482,32 @@ def ping_deftapps_iOS(setup_perfectoMobile, AP_IPaddress): return None def tearDown(setup_perfectoMobile): - report = setup_perfectoMobile[1] + report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] report.step_start("Exception Failure Tear Down....") try: - print(" -- Tear Down --") + print(" -- Tear Down --") report.test_stop(TestResultFactory.create_failure) print('Report-Url: ' + report.report_url() + '\n') driver.close() except Exception as e: - print(" -- Exception Not Able To close --") + print(" -- Exception Not Able To close --") print (e) finally: try: driver.quit() except Exception as e: - print(" -- Exception Not Able To Quit --") + print(" -- Exception Not Able To Quit --") print (e) def verifyUploadDownloadSpeediOS(request, setup_perfectoMobile, get_APToMobileDevice_data): print("\n-------------------------------------") print("Verify Upload & Download Speed") print("-------------------------------------") - - report = setup_perfectoMobile[1] + + report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] connData = get_APToMobileDevice_data currentResult = True @@ -513,7 +517,7 @@ def verifyUploadDownloadSpeediOS(request, setup_perfectoMobile, get_APToMobileDe #print(contexts) driver.switch_to.context('WEBVIEW_1') - + try: print("Launching Safari") report.step_start("Google Home Page") @@ -548,7 +552,7 @@ def verifyUploadDownloadSpeediOS(request, setup_perfectoMobile, get_APToMobileDe #Get upload/Download Speed try: - report.step_start("Get upload/Download Speed") + report.step_start("Get upload/Download Speed") time.sleep(60) downloadMbps = driver.find_element_by_xpath(connData["downloadMbps"]) downloadSpeed = downloadMbps.text @@ -563,17 +567,17 @@ def verifyUploadDownloadSpeediOS(request, setup_perfectoMobile, get_APToMobileDe except NoSuchElementException: print("Access Point Verification NOT Completed, checking Connection....") currentResult = False - + return currentResult def downloadInstallOpenRoamingProfile(request, profileDownloadURL, setup_perfectoMobile, get_APToMobileDevice_data): print("\n-------------------------------------") print("Download Open Roaming Profile") print("-------------------------------------") - + OpenRoamingWifiName = "" - report = setup_perfectoMobile[1] + report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] connData = get_APToMobileDevice_data currentResult = True @@ -582,14 +586,14 @@ def downloadInstallOpenRoamingProfile(request, profileDownloadURL, setup_perfect #print(contexts) driver.switch_to.context('WEBVIEW_1') - + print("Launching Safari with OpenRoaming Profile") - report.step_start("Open Roaming Download Page") - driver.get(profileDownloadURL) - + report.step_start("Open Roaming Download Page") + driver.get(profileDownloadURL) + try: print("Accept Popup") - report.step_start("Accept Popup") + report.step_start("Accept Popup") driver.switch_to.context('NATIVE_APP') WebDriverWait(driver, 40).until(EC.alert_is_present(), 'Time out confirmation popup to appear') alert = driver.switch_to.alert @@ -597,46 +601,46 @@ def downloadInstallOpenRoamingProfile(request, profileDownloadURL, setup_perfect print("Alert Accepted") except TimeoutException: print("no alert") - + #Open Settings Application openApp(connData["bundleId-iOS-Settings"], setup_perfectoMobile) try: print("Click on downloaded Profile") - report.step_start("Click on downloaded Profile") - downloadprofile = driver.find_element_by_xpath("//XCUIElementTypeStaticText[@label='Profile Downloaded']") + report.step_start("Click on downloaded Profile") + downloadprofile = driver.find_element_by_xpath("//XCUIElementTypeStaticText[@label='Profile Downloaded']") downloadprofile.click() except NoSuchElementException: print("Exception: Click Download Profile Button not showing up in settings") try: print("Install 1st Confirmation") - report.step_start("Install 1st Confirmation") - install1stConf = driver.find_element_by_xpath("//XCUIElementTypeButton[@label='Install']") + report.step_start("Install 1st Confirmation") + install1stConf = driver.find_element_by_xpath("//XCUIElementTypeButton[@label='Install']") install1stConf.click() except NoSuchElementException: print("Exception: Install 1st Confirmation") - + # //*[@label="The profile is not signed."] try: print("Install 2nd Confirmation") - report.step_start("Install 2nd Confirmation") - install2ndConf = driver.find_element_by_xpath("//XCUIElementTypeButton[@label='Install'] ") + report.step_start("Install 2nd Confirmation") + install2ndConf = driver.find_element_by_xpath("//XCUIElementTypeButton[@label='Install'] ") install2ndConf.click() except NoSuchElementException: print("Exception: Install 2nd Confirmation") try: print("Install 3rd Confirmation") - report.step_start("Install 3rd Confirmation") - install3rdConf = driver.find_element_by_xpath("//XCUIElementTypeButton[@label='Install']") + report.step_start("Install 3rd Confirmation") + install3rdConf = driver.find_element_by_xpath("//XCUIElementTypeButton[@label='Install']") install3rdConf.click() except NoSuchElementException: print("Exception: Install 3rd Confirmation") try: print("Verify Profile Installed") - report.step_start("Verify Profile Installed") + report.step_start("Verify Profile Installed") elelSearch2 = WebDriverWait(driver, 30).until(EC.presence_of_element_located((MobileBy.XPATH, "//*[@label='Profile Installed']"))) elelSearch2.click() except Exception as e: @@ -646,8 +650,8 @@ def downloadInstallOpenRoamingProfile(request, profileDownloadURL, setup_perfect try: print("Click Done Button") - report.step_start("Click Done Button") - elelSearch = driver.find_element_by_xpath("//XCUIElementTypeButton[@label='Done']") + report.step_start("Click Done Button") + elelSearch = driver.find_element_by_xpath("//XCUIElementTypeButton[@label='Done']") elelSearch.click() except NoSuchElementException: print("Exception: Clicking on Done Button") @@ -657,11 +661,11 @@ def downloadInstallOpenRoamingProfile(request, profileDownloadURL, setup_perfect print("Switching Context to Webview") driver.switch_to.context('WEBVIEW_1') print("Launching Google to Reset Browser") - report.step_start("Launching Google to Reset Browser") - driver.get("https://www.google.com") + report.step_start("Launching Google to Reset Browser") + driver.get("https://www.google.com") print("Switching Context to Native") - report.step_start("Switching Driver Context Native") + report.step_start("Switching Driver Context Native") driver.switch_to.context('NATIVE_APP') closeApp(connData["bundleId-iOS-Safari"], setup_perfectoMobile) @@ -669,19 +673,19 @@ def downloadInstallOpenRoamingProfile(request, profileDownloadURL, setup_perfect #Open Settings Application #openApp(connData["bundleId-iOS-Settings"], setup_perfectoMobile) - + # try: # print("Verifying OpenRoaming Connected Wifi") # time.sleep(3) - # report.step_start("Verifying Connected Wifi Name") + # report.step_start("Verifying Connected Wifi Name") # element = driver.find_element_by_xpath("//XCUIElementTypeCell[@name='Wi-Fi']/XCUIElementTypeStaticText[2]") # OpenRoamingWifiName = element.text # element.click() - + # except Exception as e: # OpenRoamingWifiName = "None" - # print("Wifi Not Connected to OpenRoaming Profile: ") + # print("Wifi Not Connected to OpenRoaming Profile: ") # request.config.cache.set(key="SelectingWifiFailed", value=str(e)) # assert False @@ -705,23 +709,23 @@ def ForgetProfileWifiConnection(request, setup_perfectoMobile, installedProfileS print("\n-----------------------------") print("Forget All Wifi/AP Connection") print("-----------------------------") - - report = setup_perfectoMobile[1] + + report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] - report.step_start("Switching Driver Context") + report.step_start("Switching Driver Context") print("Switching Context to Native") driver.switch_to.context('NATIVE_APP') contexts = driver.contexts #print(contexts) - report.step_start("Forget Existing Wifi") + report.step_start("Forget Existing Wifi") openApp(connData["bundleId-iOS-Settings"], setup_perfectoMobile) try: #Also have to check with Connected Status xpath print("Verifying Connected Wifi Connection") - report.step_start("Verifying Existing Connected Wifi Connection") + report.step_start("Verifying Existing Connected Wifi Connection") element22 = driver.find_element_by_xpath("//XCUIElementTypeCell[@name='Wi-Fi']/XCUIElementTypeStaticText[2]") element22.click() @@ -733,14 +737,14 @@ def ForgetProfileWifiConnection(request, setup_perfectoMobile, installedProfileS except NoSuchElementException and TimeoutException: Wifi_AP_Name = "None" - print("Wifi Not Connected to anything") + print("Wifi Not Connected to anything") if Wifi_AP_Name.__eq__("Not Connected"): - print("Not Connected to any wifi") + print("Not Connected to any wifi") #deleteOpenRoamingInstalledProfile(request, installedProfileSSID, setup_perfectoMobile, connData) elif Wifi_AP_Name.__eq__("None"): #deleteOpenRoamingInstalledProfile(request, installedProfileSSID, setup_perfectoMobile, connData) - print("Not Connected to any wifi Network/None") + print("Not Connected to any wifi Network/None") elif Wifi_AP_Name.__eq__(installedProfileSSID): deleteOpenRoamingInstalledProfile(request, installedProfileSSID, setup_perfectoMobile, connData) else: @@ -763,7 +767,7 @@ def ForgetProfileWifiConnection(request, setup_perfectoMobile, installedProfileS elementforgetWifi.click() except NoSuchElementException: - + print("Exception General Menu Not found") assert False @@ -771,22 +775,22 @@ def deleteOpenRoamingInstalledProfile(request, profileName, setup_perfectoMobile print("\n-----------------------------") print("Delete Open Roaming Profile") print("-----------------------------") - - report = setup_perfectoMobile[1] + + report = setup_perfectoMobile[1] driver = setup_perfectoMobile[0] - report.step_start("Switching Driver Context") + report.step_start("Switching Driver Context") print("Switching Context to Native") driver.switch_to.context('NATIVE_APP') contexts = driver.contexts #print(contexts) - report.step_start("Forget Existing Wifi") + report.step_start("Forget Existing Wifi") openApp(connData["bundleId-iOS-Settings"], setup_perfectoMobile) try: print("Click General") - report.step_start("Click General") + report.step_start("Click General") element = driver.find_element_by_xpath("//*[@value='General']") element.click() except NoSuchElementException: @@ -799,7 +803,7 @@ def deleteOpenRoamingInstalledProfile(request, profileName, setup_perfectoMobile print("Verify if any Profile Installed ") try: print("Select Profile ") - report.step_start("Select Profile") + report.step_start("Select Profile") elementProfile = driver.find_element_by_xpath("//*[@name='ManagedConfigurationList' and @label='Profile']") elementProfile.click() except NoSuchElementException: @@ -815,7 +819,7 @@ def deleteOpenRoamingInstalledProfile(request, profileName, setup_perfectoMobile try: print("Click Configuration Profile ") - report.step_start("Click Configuration Profile ") + report.step_start("Click Configuration Profile ") element = driver.find_element_by_xpath("//XCUIElementTypeStaticText[@label='" + profileName + "']") element.click() except NoSuchElementException: @@ -824,16 +828,16 @@ def deleteOpenRoamingInstalledProfile(request, profileName, setup_perfectoMobile try: print("Remove Profile") - report.step_start("Remove Profile ") + report.step_start("Remove Profile ") element = driver.find_element_by_xpath("//*[@label='Remove Profile']") element.click() except NoSuchElementException: print("Exception Remove") assert False - + try: print("Click Remove Button") - report.step_start("Click Remove Button") + report.step_start("Click Remove Button") element = driver.find_element_by_xpath("//*[@label='Remove']") element.click() except Exception as e: @@ -842,14 +846,14 @@ def deleteOpenRoamingInstalledProfile(request, profileName, setup_perfectoMobile except Exception: print("Exception There may be No Profiles Installed") - report.step_start("Exception There may be No Profiles Installed") + report.step_start("Exception There may be No Profiles Installed") closeApp(connData["bundleId-iOS-Settings"], setup_perfectoMobile) #To get an IP address def get_ip_address_ios(request, WifiName, WifiPass, setup_perfectoMobile, connData): print("\n-------------------------------------") - print("Select Wifi/AccessPoint Connection") + print("Select Wifi/Get IP Address IOS Connection") print("-------------------------------------") reportFlag = True @@ -1121,6 +1125,10 @@ def get_ip_address_ios(request, WifiName, WifiPass, setup_perfectoMobile, connDa #//XCUIElementTypeOther[2]/XCUIElementTypeOther[1]/XCUIElementTypeStaticText def get_all_available_ssids(driver): + print("\n----------------------------") + print("Get All Available SSID") + print("------------------------------") + active_ssid_list = [] try: time.sleep(8) @@ -1138,7 +1146,7 @@ def get_all_available_ssids(driver): #Connect to WIFI def wifi_connect(request, WifiName, WifiPass, setup_perfectoMobile, connData): print("\n-------------------------------------") - print("Select Wifi/AccessPoint Connection") + print("Select Wifi Connect Connection") print("-------------------------------------") reportFlag = True @@ -1327,7 +1335,7 @@ def wifi_connect(request, WifiName, WifiPass, setup_perfectoMobile, connData): #To disconnect and forget network def wifi_disconnect_and_forget(request, WifiName, WifiPass, setup_perfectoMobile, connData): print("\n-------------------------------------") - print("Select Wifi/AccessPoint Connection") + print("Wifi Disconnect and Forget Connection") print("-------------------------------------") reportFlag = True @@ -1478,7 +1486,7 @@ def wifi_disconnect_and_forget(request, WifiName, WifiPass, setup_perfectoMobile #To get an IP address def get_ip_address_eap_ios(request, WifiName ,User, ttls_passwd, setup_perfectoMobile, connData): print("\n-------------------------------------") - print("Select Wifi/AccessPoint Connection") + print("Get IP Address Enterprise IOS Connection") print("-------------------------------------") reportFlag = True @@ -1780,7 +1788,7 @@ def get_ip_address_eap_ios(request, WifiName ,User, ttls_passwd, setup_perfectoM def wifi_connect_eap(request, WifiName, User, ttls_passwd, setup_perfectoMobile, connData): print("\n-------------------------------------") - print("Select Wifi/AccessPoint Connection") + print("Wifi Connect Enterprise Connection") print("-------------------------------------") reportFlag = True @@ -1992,3 +2000,261 @@ def wifi_connect_eap(request, WifiName, User, ttls_passwd, setup_perfectoMobile, closeApp(connData["bundleId-iOS-Settings"], setup_perfectoMobile) return is_internet # ---------------------close app------------------------------- + +#Captive Portal +def captive_portal_ios(request, WifiName, WifiPass, setup_perfectoMobile, connData): + print("\n-------------------------------------") + print("CaptivePortal Connection IOS") + print("-------------------------------------") + + reportFlag = True + is_internet = False + ip_address_element_text = False + + print("Verifying Wifi/AP Connection Details....") + report = setup_perfectoMobile[1] + driver = setup_perfectoMobile[0] + + report.step_start("Switching Driver Context") + print("Switching Context to Native") + driver.switch_to.context('NATIVE_APP') + # driver.switch_to.context(contexts[0]) + + report.step_start("Set Wifi Network to " + WifiName) + # Open Settings Application + openApp(connData["bundleId-iOS-Settings"], setup_perfectoMobile) + + try: + time.sleep(2) + driver.implicitly_wait(2) + try: + print("Verifying Connected Wifi Connection") + report.step_start("Loading Wifi Page") + element = driver.find_element_by_xpath("//XCUIElementTypeCell[@name='Wi-Fi']") + element.click() + except NoSuchElementException: + print("Exception: Verify Xpath - unable to click on Wifi") + + time.sleep(2) + driver.implicitly_wait(2) + # --------------------To Turn on WIFi Switch if already OFF-------------------------------- + try: + get_wifi_switch_element = driver.find_element_by_xpath("//*[@label='Wi-Fi' and @value='0']") + get_wifi_switch_element_text = get_wifi_switch_element.text + try: + if get_wifi_switch_element_text == "0" or get_wifi_switch_element_text == 0: + get_wifi_switch_element = driver.find_element_by_xpath("//*[@label='Wi-Fi' and @value='0']") + driver.implicitly_wait(1) + get_wifi_switch_element.click() + driver.implicitly_wait(1) + i = 0 + for i in range(5): + try: + get_wifi_switch_element = driver.find_element_by_xpath("//*[@label='Wi-Fi' and @value='1']") + get_wifi_switch_element_text = get_wifi_switch_element.text + except: + print("switch is OFF") + + if get_wifi_switch_element_text == "1" or get_wifi_switch_element_text == 1: + print("WIFI Switch is ON") + break + else: + try: + get_wifi_switch_element = driver.find_element_by_xpath( + "//*[@label='Wi-Fi' and @value='0']") + get_wifi_switch_element_text = get_wifi_switch_element.text + except: + print("WIFi switch is ON") + if (get_wifi_switch_element_text == "0" or get_wifi_switch_element_text == 0): + print("switch is still OFF") + closeApp(connData["bundleId-iOS-Settings"], setup_perfectoMobile) + #return is_internet + else: + print("Switch is Still OFF") + closeApp(connData["bundleId-iOS-Settings"], setup_perfectoMobile) + #return is_internet + except: + print("No switch element found") + except: + print("get_wifi_switch_element is ON") + # --------------------To Turn on WIFi Switch if already OFF-------------------------------- + + except: + print("Cannot find WIFI element") + closeApp(connData["bundleId-iOS-Settings"], setup_perfectoMobile) + #return is_internet + + # ---------------------This is to Forget current connected SSID------------------------------- + + try: + print("getting in to Additional details") + additional_details_element = driver.find_element_by_xpath( + "//*[@label='selected']/parent::*/parent::*/XCUIElementTypeButton[@label='More Info']") + additional_details_element.click() + try: + print("Forget Connected Network") + forget_ssid = driver.find_element_by_xpath("//*[@label='Forget This Network']") + forget_ssid.click() + print("Forget old ssid") + try: + report.step_start("Forget SSID popup1") + forget_ssid_popup = driver.find_element_by_xpath("//*[@label='Forget']") + forget_ssid_popup.click() + + print("**alert** Forget SSID popup killed **alert**") + except: + print("Forget SSID popup not found") + except: + print("couldn't find forget ssid element") + except: + print("No connected SSID") + + # ---------------------This is to Forget current connected SSID------------------------------- + + # ---------------------To get all available SSID------------------------------- + print("Searching for Wifi: " + WifiName) + # allure.attach(name= body=str("Searching for Wifi: " + WifiName)) + time.sleep(2) + print("Selecting Wifi: " + WifiName) + ssid_found = False + available_ssids = False + + try: + for check_for_all_ssids in range(2): + available_ssids = get_all_available_ssids(driver) + try: + if WifiName not in available_ssids: + scrollDown(setup_perfectoMobile) + time.sleep(2) + else: + ssid_found = True + print(WifiName + " : Found in Device") + # allure.attach(name= body=str(WifiName + " : Found in Device")) + break + except: + pass + + if not ssid_found: + print("could not found " + WifiName + " in device") + closeApp(connData["bundleId-iOS-Settings"], setup_perfectoMobile) + return is_internet + except: + pass + # ---------------------To get all available SSID------------------------------- + + # ---------------------This is to Select SSID------------------------------- + try: + wifiSelectionElement = WebDriverWait(driver, 30).until( + EC.presence_of_element_located((MobileBy.XPATH, "//*[@label='" + WifiName + "']"))) + wifiSelectionElement.click() + print("Selecting SSID") + except Exception as e: + print("couldn't connect to " + WifiName) + request.config.cache.set(key="SelectingWifiFailed", value=str(e)) + closeApp(connData["bundleId-iOS-Settings"], setup_perfectoMobile) + return is_internet + # ---------------------This is to Select SSID------------------------------- + + # ---------------------Set Password------------------------------- + try: + wifiPassword = driver.find_element_by_xpath("//*[@label='Password']") + wifiPassword.send_keys(WifiPass) + except NoSuchElementException: + print("Enter Password Page Not Loaded") + # ---------------------Set Password------------------------------- + + # ---------------------Click on join------------------------------- + try: + joinBTN = driver.find_element_by_xpath("//*[@label='Join']") + joinBTN.click() + except Exception as e: + print("Join Button Not Enabled...Password may not be needed") + # ---------------------Click on join------------------------------- + + try: + time.sleep(4) + driver.implicitly_wait(4) + try: + time.sleep(8) + driver.implicitly_wait(2) + print("Acceptiong terms and Services") + report.step_start("loading Terms Page") + element = driver.find_element_by_xpath("//*[@label='Accept Terms of Service']") + element.click() + except NoSuchElementException: + print("Exception: Accept Terms of Service Button Not Found") + reportFlag = False + assert reportFlag + try: + time.sleep(2) + driver.implicitly_wait(2) + print("Continue to connect the services") + report.step_start("Continiue Terms and Services Page") + element = driver.find_element_by_xpath("//*[@label='Continue']") + element.click() + except NoSuchElementException: + print("Exception: Continue to connect Terms of Service Button Not Found") + try: + time.sleep(2) + driver.implicitly_wait(2) + print("Continue to the services") + report.step_start("Continue to use captive portal services") + element = driver.find_element_by_xpath("//*[@label='Continue']") + element.click() + except NoSuchElementException: + print("Exception: Continue to use captive portal services not found") + try: + time.sleep(2) + driver.implicitly_wait(2) + print("Final Result Page") + report.step_start("Final Confirmation Page for Captive Portal Login") + time.sleep(2) + driver.implicitly_wait(2) + element = driver.find_element_by_xpath("//*[@label='Done']") + element.click() + # if element == driver.find_element_by_xpath("//XCUIElementTypeOther[@label='Success']"): + # element1 = driver.find_element_by_xpath("//*[@label='Done']") + # element1.click() + # else: + # print("Failed to log in to captive portal") + except NoSuchElementException: + print("Exception: final Page for Captive Portal Not Found") + + + except NoSuchElementException: + print("No Splash Page Found") + + +# ---------------------Additional INFO------------------------------- + try: + time.sleep(4) + print("Selecting SSID: ",WifiName) + report.step_start("Selecting SSID") + additional_details_element = WebDriverWait(driver, 30).until( + EC.presence_of_element_located((MobileBy.XPATH, + "//*[@label='"+ WifiName+"']"))) + # //*[@label='selected']/parent::*/parent::*/XCUIElementTypeButton[@label='More Info'] + additional_details_element.click() + + try: + print("Checking IP address") + # (//*[@label="IP Address"]/parent::*/XCUIElementTypeStaticText)[2] + ip_address_element_text = driver.find_element_by_xpath("(//*[@label='IP Address']/parent::*/XCUIElementTypeStaticText)[2]").text + print("ip_address_element_text: ", ip_address_element_text) + # is_internet=True + except Exception as e: + print("IP Address not Found") + request.config.cache.set(key="select IP failed", value=str(e)) + try: + WifiInternetErrMsg2 = WebDriverWait(driver, 30).until( + EC.presence_of_element_located((MobileBy.XPATH, "//*[@label='No Internet Connection']"))) + except Exception as e: + is_internet = True + print("No Wifi-AP Error Internet Error: " + WifiName) + except Exception as e: + request.config.cache.set(key="select additional info failed", value=str(e)) + # ---------------------Additional INFO------------------------------- + + # --------------------- close app------------------------------- + #closeApp(connData["bundleId-iOS-Settings"], setup_perfectoMobile) + return ip_address_element_text, is_internet \ No newline at end of file diff --git a/tests/conftest.py b/tests/conftest.py index 31e663f25..db23806db 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -42,7 +42,6 @@ from LANforge.LFUtils import * if 'py-json' not in sys.path: sys.path.append('../py-scripts') from apnos.apnos import APNOS -from controller.controller_1x.controller import Controller from controller.controller_1x.controller import FirmwareUtility import pytest from lanforge.lf_tests import RunTest @@ -50,11 +49,10 @@ from cv_test_manager import cv_test from configuration import CONFIGURATION from configuration import RADIUS_SERVER_DATA from configuration import RADIUS_ACCOUNTING_DATA - +from lanforge.scp_util import SCP_File from testrails.testrail_api import APIClient from testrails.reporting import Reporting from lf_tools import ChamberView -from sta_connect2 import StaConnect2 from os import path from typing import Any, Callable, Optional @@ -266,6 +264,11 @@ def get_sdk_version(fixtures_ver): version = fixtures_ver.get_sdk_version() yield version +@pytest.fixture(scope="session") +def get_uci_show(fixtures_ver, get_apnos, get_configuration): + uci_show = fixtures_ver.get_uci_show(get_apnos, get_configuration) + yield uci_show + @pytest.fixture(scope="session") def skip_lf(request): @@ -524,6 +527,12 @@ def test_access_point(fixtures_ver, request, get_configuration, get_apnos): yield status +@pytest.fixture(scope="session") +def test_ap_connection_status(fixtures_ver, request, get_configuration, get_apnos): + """used to check the manager status of AP, should be used as a setup to verify if ap can reach cloud""" + connection, redirector_value = fixtures_ver.get_ap_status_logs(get_configuration, get_apnos) + yield connection, redirector_value + @pytest.fixture(scope="session") def traffic_generator_connectivity(testbed, get_configuration): """Verify if traffic generator is reachable""" @@ -679,3 +688,25 @@ def get_ap_logs(request, get_apnos, get_configuration): pass request.addfinalizer(collect_logs) + + +@pytest.fixture(scope="function") +def get_lf_logs(request, get_apnos, get_configuration): + ip = get_configuration["traffic_generator"]["details"]["ip"] + port = get_configuration["traffic_generator"]["details"]["ssh_port"] + + def collect_logs_lf(): + log_0 = "/home/lanforge/lanforge_log_0.txt" + log_1 = "/home/lanforge/lanforge_log_1.txt" + obj = SCP_File(ip=ip, port=port, username="root", password="lanforge", remote_path=log_0, + local_path=".") + obj.pull_file() + allure.attach.file(source="lanforge_log_0.txt", + name="lanforge_log_0") + obj = SCP_File(ip=ip, port=port, username="root", password="lanforge", remote_path=log_1, + local_path=".") + obj.pull_file() + allure.attach.file(source="lanforge_log_1.txt", + name="lanforge_log_1") + + request.addfinalizer(collect_logs_lf) diff --git a/tests/e2e/basic/conftest.py b/tests/e2e/basic/conftest.py index 369a60b09..8beea193f 100644 --- a/tests/e2e/basic/conftest.py +++ b/tests/e2e/basic/conftest.py @@ -71,6 +71,7 @@ def setup_profiles(request, setup_controller, testbed, get_equipment_ref, fixtur if vlan_list[i] > 4095 or vlan_list[i] < 1: vlan_list.pop(i) if request.param["mode"] == "VLAN": + lf_tools.reset_scenario() lf_tools.add_vlan(vlan_ids=vlan_list) # call this, if 1.x diff --git a/tests/e2e/basic/validation_of_operating_modes/bridge_mode/client_connectivity/test_enterprise_ttls.py b/tests/e2e/basic/validation_of_operating_modes/bridge_mode/client_connectivity/test_enterprise_ttls.py index aac865b2b..6d2683a34 100644 --- a/tests/e2e/basic/validation_of_operating_modes/bridge_mode/client_connectivity/test_enterprise_ttls.py +++ b/tests/e2e/basic/validation_of_operating_modes/bridge_mode/client_connectivity/test_enterprise_ttls.py @@ -46,7 +46,7 @@ class TestBridgeModeEnterpriseTTLSSuiteA(object): @pytest.mark.wpa_enterprise @pytest.mark.twog - def test_wpa_enterprise_2g(self, get_vif_state, get_ap_logs, + def test_wpa_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_twog, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): """ wpa enterprise 2g @@ -73,7 +73,7 @@ class TestBridgeModeEnterpriseTTLSSuiteA(object): @pytest.mark.wpa_enterprise @pytest.mark.fiveg - def test_wpa_enterprise_5g(self, station_names_fiveg, get_ap_logs, + def test_wpa_enterprise_5g(self, station_names_fiveg, get_ap_logs, get_lf_logs, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): """ wpa enterprise 5g @@ -98,7 +98,7 @@ class TestBridgeModeEnterpriseTTLSSuiteA(object): @pytest.mark.sanity_light @pytest.mark.wpa2_enterprise @pytest.mark.twog - def test_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs, + def test_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_twog, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): """ wpa enterprise 2g @@ -126,7 +126,7 @@ class TestBridgeModeEnterpriseTTLSSuiteA(object): @pytest.mark.sanity_light @pytest.mark.wpa2_enterprise @pytest.mark.fiveg - def test_wpa2_enterprise_5g(self, get_vif_state, get_ap_logs, + def test_wpa2_enterprise_5g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_fiveg, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): """ wpa enterprise 2g @@ -154,7 +154,7 @@ class TestBridgeModeEnterpriseTTLSSuiteA(object): @pytest.mark.wpa3_enterprise @pytest.mark.twog - def test_wpa3_enterprise_2g(self, get_vif_state, get_ap_logs, + def test_wpa3_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_twog, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): """ wpa enterprise 2g @@ -181,7 +181,7 @@ class TestBridgeModeEnterpriseTTLSSuiteA(object): @pytest.mark.wpa3_enterprise @pytest.mark.fiveg - def test_wpa3_enterprise_5g(self, get_vif_state, get_ap_logs, + def test_wpa3_enterprise_5g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_fiveg, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): """ wpa enterprise 2g @@ -239,7 +239,7 @@ class TestBridgeModeEnterpriseTTLSSuiteTwo(object): @pytest.mark.wpa_wpa2_enterprise_mixed @pytest.mark.twog - def test_wpa_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs, + def test_wpa_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_twog, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): """ wpa enterprise 2g @@ -267,7 +267,7 @@ class TestBridgeModeEnterpriseTTLSSuiteTwo(object): @pytest.mark.wpa_wpa2_enterprise_mixed @pytest.mark.fiveg - def test_wpa_wpa2_enterprise_5g(self, get_vif_state, get_ap_logs, + def test_wpa_wpa2_enterprise_5g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_fiveg, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): """ wpa enterprise 2g @@ -295,7 +295,7 @@ class TestBridgeModeEnterpriseTTLSSuiteTwo(object): @pytest.mark.wpa3_enterprise_mixed @pytest.mark.twog - def test_wpa3_enterprise_mixed_2g(self, get_vif_state, get_ap_logs, + def test_wpa3_enterprise_mixed_2g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_twog, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): """ wpa enterprise 2g @@ -322,7 +322,7 @@ class TestBridgeModeEnterpriseTTLSSuiteTwo(object): @pytest.mark.wpa3_enterprise_mixed @pytest.mark.fiveg - def test_wpa3_enterprise_mixed_5g(self, get_vif_state, get_ap_logs, + def test_wpa3_enterprise_mixed_5g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_fiveg, setup_profiles, lf_test, update_report, exit_on_fail, test_cases, radius_info): diff --git a/tests/e2e/basic/validation_of_operating_modes/bridge_mode/client_connectivity/test_general_security_modes.py b/tests/e2e/basic/validation_of_operating_modes/bridge_mode/client_connectivity/test_general_security_modes.py index b97121a4d..20ac2762c 100644 --- a/tests/e2e/basic/validation_of_operating_modes/bridge_mode/client_connectivity/test_general_security_modes.py +++ b/tests/e2e/basic/validation_of_operating_modes/bridge_mode/client_connectivity/test_general_security_modes.py @@ -50,7 +50,8 @@ class TestBridgeModeConnectivitySuiteA(object): @pytest.mark.open @pytest.mark.twog @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-2809", name="JIRA LINK") - def test_open_ssid_2g(self, get_vif_state, get_ap_logs, setup_profiles, lf_test, update_report, + def test_open_ssid_2g(self, get_vif_state, get_ap_logs, get_lf_logs, setup_profiles, lf_test, + update_report, station_names_twog, test_cases): """Client Connectivity open ssid 2.4G @@ -76,7 +77,7 @@ class TestBridgeModeConnectivitySuiteA(object): @pytest.mark.open @pytest.mark.fiveg @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-2801", name="JIRA LINK") - def test_open_ssid_5g(self, get_vif_state, get_ap_logs, lf_test, test_cases, station_names_fiveg, + def test_open_ssid_5g(self, get_vif_state, get_ap_logs, lf_test, test_cases, station_names_fiveg, get_lf_logs, update_report): """Client Connectivity open ssid 5G pytest -m "client_connectivity and bridge and general and open and fiveg" @@ -103,7 +104,7 @@ class TestBridgeModeConnectivitySuiteA(object): @pytest.mark.twog @allure.story('wpa 2.4 GHZ Band') @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-2801", name="JIRA LINK") - def test_wpa_ssid_2g(self, get_vif_state, get_ap_logs, update_report, + def test_wpa_ssid_2g(self, get_vif_state, get_ap_logs, update_report, get_lf_logs, lf_test, test_cases, station_names_twog): """Client Connectivity wpa ssid 2.4G pytest -m "client_connectivity and bridge and general and wpa and twog" @@ -129,7 +130,8 @@ class TestBridgeModeConnectivitySuiteA(object): @pytest.mark.wpa @pytest.mark.fiveg @allure.story('wpa 5 GHZ Band') - def test_wpa_ssid_5g(self, get_vif_state, get_ap_logs, lf_test, update_report, test_cases, station_names_fiveg): + def test_wpa_ssid_5g(self, get_vif_state, get_ap_logs, lf_test, update_report, get_lf_logs, + test_cases, station_names_fiveg): """Client Connectivity wpa ssid 5G pytest -m "client_connectivity and bridge and general and wpa and fiveg" """ @@ -154,7 +156,8 @@ class TestBridgeModeConnectivitySuiteA(object): @pytest.mark.wpa2_personal @pytest.mark.twog @allure.story('wpa2_personal 2.4 GHZ Band') - def test_wpa2_personal_ssid_2g(self, get_vif_state, get_ap_logs, lf_test, update_report, test_cases, + def test_wpa2_personal_ssid_2g(self, get_vif_state, get_ap_logs, get_lf_logs, + lf_test, update_report, test_cases, station_names_twog): """Client Connectivity wpa2_personal ssid 2.4G pytest -m "client_connectivity and bridge and general and wpa2_personal and twog" @@ -181,7 +184,7 @@ class TestBridgeModeConnectivitySuiteA(object): @pytest.mark.fiveg @allure.story('wpa2_personal 5 GHZ Band') def test_wpa2_personal_ssid_5g(self, get_vif_state, get_ap_logs, update_report, test_cases, - station_names_fiveg, + station_names_fiveg, get_lf_logs, lf_test): """Client Connectivity wpa2_personal ssid 5G pytest -m "client_connectivity and bridge and general and wpa2_personal and fiveg" @@ -270,7 +273,8 @@ class TestBridgeModeConnectivitySuiteTwo(object): @pytest.mark.wpa3_personal @pytest.mark.fiveg @allure.story('open 5 GHZ Band') - def test_wpa3_personal_ssid_5g(self, get_vif_state, get_ap_logs, station_names_fiveg, lf_test, test_cases, + def test_wpa3_personal_ssid_5g(self, get_vif_state, get_ap_logs, station_names_fiveg, + lf_test, test_cases, get_lf_logs, update_report): """Client Connectivity open ssid 2.4G pytest -m "client_connectivity and bridge and general and wpa3_personal and fiveg" @@ -296,7 +300,7 @@ class TestBridgeModeConnectivitySuiteTwo(object): @pytest.mark.twog @allure.story('open 2.4 GHZ Band') def test_wpa3_personal_mixed_ssid_2g(self, get_vif_state, get_ap_logs, station_names_twog, setup_profiles, - lf_test, + lf_test, get_lf_logs, update_report, test_cases): """Client Connectivity open ssid 2.4G @@ -323,7 +327,7 @@ class TestBridgeModeConnectivitySuiteTwo(object): @pytest.mark.fiveg @allure.story('open 5 GHZ Band') def test_wpa3_personal_mixed_ssid_5g(self, get_vif_state, get_ap_logs, station_names_fiveg, lf_test, - test_cases, + test_cases, get_lf_logs, update_report): """Client Connectivity open ssid 2.4G pytest -m "client_connectivity and bridge and general and wpa3_personal_mixed and fiveg" @@ -349,7 +353,7 @@ class TestBridgeModeConnectivitySuiteTwo(object): @pytest.mark.twog @allure.story('wpa wpa2 personal mixed 2.4 GHZ Band') def test_wpa_wpa2_personal_ssid_2g(self, get_vif_state, get_ap_logs, station_names_twog, setup_profiles, - lf_test, + lf_test, get_lf_logs, update_report, test_cases): """Client Connectivity open ssid 2.4G @@ -376,7 +380,8 @@ class TestBridgeModeConnectivitySuiteTwo(object): @pytest.mark.wpa_wpa2_personal_mixed @pytest.mark.fiveg @allure.story('wpa wpa2 personal mixed 5 GHZ Band') - def test_wpa_wpa2_personal_ssid_5g(self, get_vif_state, get_ap_logs, station_names_fiveg, lf_test, test_cases, + def test_wpa_wpa2_personal_ssid_5g(self, get_vif_state, get_ap_logs, station_names_fiveg, get_lf_logs, + lf_test, test_cases, update_report): """Client Connectivity open ssid 2.4G pytest -m "client_connectivity and bridge and general and wpa_wpa2_personal_mixed and fiveg" diff --git a/tests/e2e/basic/validation_of_operating_modes/nat_mode/client_connectivity/test_enterprise_ttls.py b/tests/e2e/basic/validation_of_operating_modes/nat_mode/client_connectivity/test_enterprise_ttls.py index d88ed1823..c5b35b0e2 100644 --- a/tests/e2e/basic/validation_of_operating_modes/nat_mode/client_connectivity/test_enterprise_ttls.py +++ b/tests/e2e/basic/validation_of_operating_modes/nat_mode/client_connectivity/test_enterprise_ttls.py @@ -34,7 +34,7 @@ class TestNATModeEnterpriseTTLSSuiteOne(object): @pytest.mark.wpa_enterprise @pytest.mark.twog - def test_wpa_enterprise_2g(self, get_vif_state, get_ap_logs, + def test_wpa_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_twog, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): profile_data = setup_params_enterprise["ssid_modes"]["wpa_enterprise"][0] @@ -59,7 +59,7 @@ class TestNATModeEnterpriseTTLSSuiteOne(object): @pytest.mark.wpa_enterprise @pytest.mark.fiveg - def test_wpa_enterprise_5g(self, get_vif_state, get_ap_logs, + def test_wpa_enterprise_5g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_fiveg, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): profile_data = setup_params_enterprise["ssid_modes"]["wpa_enterprise"][1] @@ -85,7 +85,7 @@ class TestNATModeEnterpriseTTLSSuiteOne(object): @pytest.mark.sanity_light @pytest.mark.wpa2_enterprise @pytest.mark.twog - def test_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs, + def test_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_twog, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): profile_data = setup_params_enterprise["ssid_modes"]["wpa2_enterprise"][0] @@ -111,7 +111,7 @@ class TestNATModeEnterpriseTTLSSuiteOne(object): @pytest.mark.sanity_light @pytest.mark.wpa2_enterprise @pytest.mark.fiveg - def test_wpa2_enterprise_5g(self, get_vif_state, get_ap_logs, + def test_wpa2_enterprise_5g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_fiveg, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): profile_data = setup_params_enterprise["ssid_modes"]["wpa2_enterprise"][1] @@ -136,7 +136,7 @@ class TestNATModeEnterpriseTTLSSuiteOne(object): @pytest.mark.wpa3_enterprise @pytest.mark.twog - def test_wpa3_enterprise_2g(self, get_vif_state, get_ap_logs, + def test_wpa3_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_twog, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): profile_data = setup_params_enterprise["ssid_modes"]["wpa3_enterprise"][0] @@ -160,7 +160,7 @@ class TestNATModeEnterpriseTTLSSuiteOne(object): @pytest.mark.wpa3_enterprise @pytest.mark.fiveg - def test_wpa3_enterprise_5g(self, get_vif_state,station_names_fiveg, get_ap_logs, + def test_wpa3_enterprise_5g(self, get_vif_state,station_names_fiveg, get_ap_logs, get_lf_logs, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): profile_data = setup_params_enterprise["ssid_modes"]["wpa3_enterprise"][1] @@ -210,7 +210,7 @@ class TestNATModeEnterpriseTTLSSuiteTwo(object): @pytest.mark.wpa_wpa2_enterprise_mixed @pytest.mark.twog - def test_wpa_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs, + def test_wpa_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_twog, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): profile_data = setup_params_enterprise_two["ssid_modes"]["wpa_wpa2_enterprise_mixed"][0] @@ -235,7 +235,7 @@ class TestNATModeEnterpriseTTLSSuiteTwo(object): @pytest.mark.wpa_wpa2_enterprise_mixed @pytest.mark.fiveg - def test_wpa_wpa2_enterprise_5g(self, get_vif_state, get_ap_logs, + def test_wpa_wpa2_enterprise_5g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_fiveg, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): profile_data = setup_params_enterprise_two["ssid_modes"]["wpa_wpa2_enterprise_mixed"][1] @@ -260,7 +260,7 @@ class TestNATModeEnterpriseTTLSSuiteTwo(object): @pytest.mark.wpa3_enterprise_mixed @pytest.mark.twog - def test_wpa3_enterprise_mixed_2g(self, get_vif_state, get_ap_logs, + def test_wpa3_enterprise_mixed_2g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_twog, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): profile_data = setup_params_enterprise_two["ssid_modes"]["wpa3_enterprise_mixed"][0] @@ -284,8 +284,8 @@ class TestNATModeEnterpriseTTLSSuiteTwo(object): @pytest.mark.wpa3_enterprise_mixed @pytest.mark.fiveg - def test_wpa3_enterprise_mixed_5g(self, get_vif_state, get_ap_logs, - station_names_fiveg, setup_profiles, lf_test, + def test_wpa3_enterprise_mixed_5g(self, get_vif_state, get_ap_logs, get_lf_logs, + station_names_fiveg, setup_profiles, lf_test, update_report, exit_on_fail, test_cases, radius_info): profile_data = setup_params_enterprise_two["ssid_modes"]["wpa3_enterprise_mixed"][1] diff --git a/tests/e2e/basic/validation_of_operating_modes/nat_mode/client_connectivity/test_general_security_modes.py b/tests/e2e/basic/validation_of_operating_modes/nat_mode/client_connectivity/test_general_security_modes.py index 32da13361..311411d1d 100644 --- a/tests/e2e/basic/validation_of_operating_modes/nat_mode/client_connectivity/test_general_security_modes.py +++ b/tests/e2e/basic/validation_of_operating_modes/nat_mode/client_connectivity/test_general_security_modes.py @@ -48,7 +48,7 @@ class TestNATModeConnectivitySuiteA(object): @pytest.mark.open @pytest.mark.twog @allure.story('open 2.4 GHZ Band') - def test_open_ssid_2g(self, get_vif_state, get_ap_logs, + def test_open_ssid_2g(self, get_vif_state, get_ap_logs, get_lf_logs, setup_profiles, lf_test, update_report, station_names_twog, test_cases): @@ -77,7 +77,7 @@ class TestNATModeConnectivitySuiteA(object): @pytest.mark.open @pytest.mark.fiveg @allure.story('open 5 GHZ Band') - def test_open_ssid_5g(self, get_vif_state, get_ap_logs, + def test_open_ssid_5g(self, get_vif_state, get_ap_logs, get_lf_logs, lf_test, test_cases, station_names_fiveg, update_report): """Client Connectivity open ssid 5G @@ -104,7 +104,7 @@ class TestNATModeConnectivitySuiteA(object): @pytest.mark.wpa @pytest.mark.twog @allure.story('wpa 2.4 GHZ Band') - def test_wpa_ssid_2g(self, get_vif_state, get_ap_logs, update_report, + def test_wpa_ssid_2g(self, get_vif_state, get_ap_logs, update_report, get_lf_logs, lf_test, test_cases, station_names_twog): """Client Connectivity wpa ssid 2.4G pytest -m "client_connectivity and NAT and general and wpa and twog" @@ -129,7 +129,7 @@ class TestNATModeConnectivitySuiteA(object): @pytest.mark.wpa @pytest.mark.fiveg @allure.story('wpa 5 GHZ Band') - def test_wpa_ssid_5g(self, get_vif_state, get_ap_logs, + def test_wpa_ssid_5g(self, get_vif_state, get_ap_logs, get_lf_logs, lf_test, update_report, test_cases, station_names_fiveg): """Client Connectivity wpa ssid 5G pytest -m "client_connectivity and NAT and general and wpa and fiveg" @@ -155,7 +155,7 @@ class TestNATModeConnectivitySuiteA(object): @pytest.mark.wpa2_personal @pytest.mark.twog @allure.story('wpa2_personal 2.4 GHZ Band') - def test_wpa2_personal_ssid_2g(self, get_vif_state, get_ap_logs, + def test_wpa2_personal_ssid_2g(self, get_vif_state, get_ap_logs, get_lf_logs, lf_test, update_report, test_cases, station_names_twog): """Client Connectivity wpa2_personal ssid 2.4G @@ -182,7 +182,7 @@ class TestNATModeConnectivitySuiteA(object): @pytest.mark.wpa2_personal @pytest.mark.fiveg @allure.story('wpa2_personal 5 GHZ Band') - def test_wpa2_personal_ssid_5g(self, get_vif_state, get_ap_logs, + def test_wpa2_personal_ssid_5g(self, get_vif_state, get_ap_logs, get_lf_logs, update_report, test_cases, station_names_fiveg, lf_test): @@ -245,7 +245,7 @@ class TestNATModeConnectivitySuiteB(object): @pytest.mark.wpa3_personal @pytest.mark.twog @allure.story('open 2.4 GHZ Band') - def test_wpa3_personal_ssid_2g(self, get_vif_state, get_ap_logs, + def test_wpa3_personal_ssid_2g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_twog, setup_profiles, lf_test, update_report, test_cases): @@ -272,7 +272,7 @@ class TestNATModeConnectivitySuiteB(object): @pytest.mark.wpa3_personal @pytest.mark.fiveg @allure.story('open 5 GHZ Band') - def test_wpa3_personal_ssid_5g(self, get_vif_state, get_ap_logs, + def test_wpa3_personal_ssid_5g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_fiveg, lf_test, test_cases, update_report): """Client Connectivity open ssid 2.4G @@ -300,7 +300,7 @@ class TestNATModeConnectivitySuiteB(object): @allure.story('open 2.4 GHZ Band') def test_wpa3_personal_mixed_ssid_2g(self, get_vif_state, get_ap_logs, station_names_twog, setup_profiles, - lf_test, + lf_test, get_lf_logs, update_report, test_cases): """Client Connectivity open ssid 2.4G @@ -326,7 +326,7 @@ class TestNATModeConnectivitySuiteB(object): @pytest.mark.wpa3_personal_mixed @pytest.mark.fiveg @allure.story('open 5 GHZ Band') - def test_wpa3_personal_mixed_ssid_5g(self, get_vif_state, get_ap_logs, + def test_wpa3_personal_mixed_ssid_5g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_fiveg, lf_test, test_cases, update_report): @@ -353,7 +353,7 @@ class TestNATModeConnectivitySuiteB(object): @pytest.mark.wpa_wpa2_personal_mixed @pytest.mark.twog @allure.story('wpa wpa2 personal mixed 2.4 GHZ Band') - def test_wpa_wpa2_personal_ssid_2g(self, get_vif_state, get_ap_logs, + def test_wpa_wpa2_personal_ssid_2g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_twog, setup_profiles, lf_test, update_report, @@ -382,7 +382,7 @@ class TestNATModeConnectivitySuiteB(object): @pytest.mark.wpa_wpa2_personal_mixed @pytest.mark.fiveg @allure.story('wpa wpa2 personal mixed 5 GHZ Band') - def test_wpa_wpa2_personal_ssid_5g(self, get_vif_state, get_ap_logs, + def test_wpa_wpa2_personal_ssid_5g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_fiveg, lf_test, test_cases, update_report): """Client Connectivity open ssid 2.4G diff --git a/tests/e2e/basic/validation_of_operating_modes/vlan_mode/client_connectivity/test_enterprise_ttls.py b/tests/e2e/basic/validation_of_operating_modes/vlan_mode/client_connectivity/test_enterprise_ttls.py index 5b2ade4eb..748202f50 100644 --- a/tests/e2e/basic/validation_of_operating_modes/vlan_mode/client_connectivity/test_enterprise_ttls.py +++ b/tests/e2e/basic/validation_of_operating_modes/vlan_mode/client_connectivity/test_enterprise_ttls.py @@ -34,7 +34,7 @@ class TestVLANModeEnterpriseTTLSSuiteOne(object): @pytest.mark.wpa_enterprise @pytest.mark.twog - def test_wpa_enterprise_2g(self, get_vif_state, get_ap_logs, + def test_wpa_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_twog, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): @@ -60,7 +60,7 @@ class TestVLANModeEnterpriseTTLSSuiteOne(object): @pytest.mark.wpa_enterprise @pytest.mark.fiveg - def test_wpa_enterprise_5g(self, get_vif_state, get_ap_logs, + def test_wpa_enterprise_5g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_fiveg, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): @@ -87,7 +87,7 @@ class TestVLANModeEnterpriseTTLSSuiteOne(object): @pytest.mark.sanity_light @pytest.mark.wpa2_enterprise @pytest.mark.twog - def test_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs, + def test_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_twog, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): @@ -114,7 +114,7 @@ class TestVLANModeEnterpriseTTLSSuiteOne(object): @pytest.mark.sanity_light @pytest.mark.wpa2_enterprise @pytest.mark.fiveg - def test_wpa2_enterprise_5g(self, get_vif_state, get_ap_logs, + def test_wpa2_enterprise_5g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_fiveg, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): @@ -140,7 +140,7 @@ class TestVLANModeEnterpriseTTLSSuiteOne(object): @pytest.mark.wpa3_enterprise @pytest.mark.twog - def test_wpa3_enterprise_2g(self, get_vif_state, get_ap_logs, + def test_wpa3_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_twog, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): @@ -165,7 +165,7 @@ class TestVLANModeEnterpriseTTLSSuiteOne(object): @pytest.mark.wpa3_enterprise @pytest.mark.fiveg - def test_wpa3_enterprise_5g(self, get_vif_state, get_ap_logs, + def test_wpa3_enterprise_5g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_fiveg, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): @@ -216,7 +216,7 @@ class TestVLANModeEnterpriseTTLSSuiteTwo(object): @pytest.mark.wpa_wpa2_enterprise_mixed @pytest.mark.twog - def test_wpa_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs, + def test_wpa_wpa2_enterprise_2g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_twog, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): @@ -244,7 +244,7 @@ class TestVLANModeEnterpriseTTLSSuiteTwo(object): @pytest.mark.fiveg def test_wpa_wpa2_enterprise_5g(self, get_vif_state, get_ap_logs, station_names_fiveg, setup_profiles, - lf_test, + lf_test, get_lf_logs, update_report, test_cases, radius_info, exit_on_fail): profile_data = setup_params_enterprise_two["ssid_modes"]["wpa_wpa2_enterprise_mixed"][1] ssid_name = profile_data["ssid_name"] @@ -268,7 +268,7 @@ class TestVLANModeEnterpriseTTLSSuiteTwo(object): @pytest.mark.wpa3_enterprise_mixed @pytest.mark.twog - def test_wpa3_enterprise_mixed_2g(self, get_vif_state, get_ap_logs, + def test_wpa3_enterprise_mixed_2g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_twog, setup_profiles, lf_test, update_report, test_cases, radius_info, exit_on_fail): @@ -293,7 +293,7 @@ class TestVLANModeEnterpriseTTLSSuiteTwo(object): @pytest.mark.wpa3_enterprise_mixed @pytest.mark.fiveg - def test_wpa3_enterprise_mixed_5g(self, get_vif_state, get_ap_logs, + def test_wpa3_enterprise_mixed_5g(self, get_vif_state, get_ap_logs, get_lf_logs, station_names_fiveg, setup_profiles, lf_test, update_report, exit_on_fail, diff --git a/tests/e2e/basic/validation_of_operating_modes/vlan_mode/client_connectivity/test_general_security_modes.py b/tests/e2e/basic/validation_of_operating_modes/vlan_mode/client_connectivity/test_general_security_modes.py index 021096dfb..097703e20 100644 --- a/tests/e2e/basic/validation_of_operating_modes/vlan_mode/client_connectivity/test_general_security_modes.py +++ b/tests/e2e/basic/validation_of_operating_modes/vlan_mode/client_connectivity/test_general_security_modes.py @@ -46,8 +46,8 @@ class TestvlanModeConnectivitySuiteA(object): @pytest.mark.open @pytest.mark.twog @allure.story('open 2.4 GHZ Band') - def test_open_ssid_2g(self, get_vif_state, get_ap_logs, - setup_profiles, lf_test, update_report, + def test_open_ssid_2g(self, get_vif_state, get_ap_logs, get_lf_logs, + setup_profiles, lf_test, update_report, station_names_twog, test_cases): """Client Connectivity open ssid 2.4G @@ -72,8 +72,8 @@ class TestvlanModeConnectivitySuiteA(object): @pytest.mark.open @pytest.mark.fiveg @allure.story('open 5 GHZ Band') - def test_open_ssid_5g(self, get_vif_state, get_ap_logs, - lf_test, test_cases, station_names_fiveg, + def test_open_ssid_5g(self, get_vif_state, get_ap_logs, get_lf_logs, + lf_test, test_cases, station_names_fiveg, update_report): """Client Connectivity open ssid 5G pytest -m "client_connectivity and vlan and general and open and fiveg" @@ -100,7 +100,7 @@ class TestvlanModeConnectivitySuiteA(object): @pytest.mark.twog @allure.story('wpa 2.4 GHZ Band') def test_wpa_ssid_2g(self, get_vif_state, get_ap_logs, - update_report, + update_report, get_lf_logs, lf_test, test_cases, station_names_twog): """Client Connectivity wpa ssid 2.4G pytest -m "client_connectivity and vlan and general and wpa and twog" @@ -126,7 +126,7 @@ class TestvlanModeConnectivitySuiteA(object): @pytest.mark.wpa @pytest.mark.fiveg @allure.story('wpa 5 GHZ Band') - def test_wpa_ssid_5g(self, get_vif_state, get_ap_logs, + def test_wpa_ssid_5g(self, get_vif_state, get_ap_logs, get_lf_logs, lf_test, update_report, test_cases, station_names_fiveg): """Client Connectivity wpa ssid 5G pytest -m "client_connectivity and vlan and general and wpa and fiveg" @@ -152,8 +152,8 @@ class TestvlanModeConnectivitySuiteA(object): @pytest.mark.wpa2_personal @pytest.mark.twog @allure.story('wpa2_personal 2.4 GHZ Band') - def test_wpa2_personal_ssid_2g(self, get_vif_state, get_ap_logs, - lf_test, update_report, test_cases, + def test_wpa2_personal_ssid_2g(self, get_vif_state, get_ap_logs, get_lf_logs, + lf_test, update_report, test_cases, station_names_twog): """Client Connectivity wpa2_personal ssid 2.4G pytest -m "client_connectivity and vlan and general and wpa2_personal and twog" @@ -179,8 +179,8 @@ class TestvlanModeConnectivitySuiteA(object): @pytest.mark.wpa2_personal @pytest.mark.fiveg @allure.story('wpa2_personal 5 GHZ Band') - def test_wpa2_personal_ssid_5g(self, get_vif_state, get_ap_logs, - update_report, test_cases, + def test_wpa2_personal_ssid_5g(self, get_vif_state, get_ap_logs, get_lf_logs, + update_report, test_cases, station_names_fiveg, lf_test): """Client Connectivity wpa2_personal ssid 5G @@ -243,8 +243,8 @@ class TestvlanModeConnectivitySuiteTwo(object): @pytest.mark.wpa3_personal @pytest.mark.twog @allure.story('open 2.4 GHZ Band') - def test_wpa3_personal_ssid_2g(self, get_vif_state, get_ap_logs, - station_names_twog, setup_profiles, lf_test, + def test_wpa3_personal_ssid_2g(self, get_vif_state, get_ap_logs, get_lf_logs, + station_names_twog, setup_profiles, lf_test, update_report, test_cases): """Client Connectivity open ssid 2.4G @@ -271,8 +271,8 @@ class TestvlanModeConnectivitySuiteTwo(object): @pytest.mark.wpa3_personal @pytest.mark.fiveg @allure.story('open 5 GHZ Band') - def test_wpa3_personal_ssid_5g(self, get_vif_state, get_ap_logs, - station_names_fiveg, lf_test, test_cases, + def test_wpa3_personal_ssid_5g(self, get_vif_state, get_ap_logs, get_lf_logs, + station_names_fiveg, lf_test, test_cases, update_report): """Client Connectivity open ssid 2.4G pytest -m "client_connectivity and vlan and general and wpa3_personal and fiveg" @@ -298,8 +298,8 @@ class TestvlanModeConnectivitySuiteTwo(object): @pytest.mark.twog @allure.story('open 2.4 GHZ Band') def test_wpa3_personal_mixed_ssid_2g(self, get_vif_state, get_ap_logs, - station_names_twog, setup_profiles, - lf_test, + station_names_twog, setup_profiles, + lf_test, get_lf_logs, update_report, test_cases): """Client Connectivity open ssid 2.4G @@ -326,8 +326,8 @@ class TestvlanModeConnectivitySuiteTwo(object): @pytest.mark.fiveg @allure.story('open 5 GHZ Band') def test_wpa3_personal_mixed_ssid_5g(self, get_vif_state, get_ap_logs, - station_names_fiveg, lf_test, - test_cases, + station_names_fiveg, lf_test, + test_cases, get_lf_logs, update_report): """Client Connectivity open ssid 2.4G pytest -m "client_connectivity and vlan and general and wpa3_personal_mixed and fiveg" @@ -353,8 +353,8 @@ class TestvlanModeConnectivitySuiteTwo(object): @pytest.mark.twog @allure.story('wpa wpa2 personal mixed 2.4 GHZ Band') def test_wpa_wpa2_personal_ssid_2g(self, get_vif_state, get_ap_logs, - station_names_twog, setup_profiles, - lf_test, + station_names_twog, setup_profiles, + lf_test, get_lf_logs, update_report, test_cases): """Client Connectivity open ssid 2.4G @@ -381,8 +381,8 @@ class TestvlanModeConnectivitySuiteTwo(object): @pytest.mark.wpa_wpa2_personal_mixed @pytest.mark.fiveg @allure.story('wpa wpa2 personal mixed 5 GHZ Band') - def test_wpa_wpa2_personal_ssid_5g(self, get_vif_state, get_ap_logs, - station_names_fiveg, lf_test, test_cases, + def test_wpa_wpa2_personal_ssid_5g(self, get_vif_state, get_ap_logs, get_lf_logs, + station_names_fiveg, lf_test, test_cases, update_report): """Client Connectivity open ssid 2.4G pytest -m "client_connectivity and vlan and general and wpa_wpa2_personal_mixed and fiveg" diff --git a/tests/e2e/interOp/captive_portal/__init__.py b/tests/e2e/interOp/captive_portal/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/e2e/interOp/captive_portal/bridge_mode/__init__.py b/tests/e2e/interOp/captive_portal/bridge_mode/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/e2e/interOp/captive_portal/bridge_mode/android/__init__.py b/tests/e2e/interOp/captive_portal/bridge_mode/android/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/e2e/interOp/captive_portal/bridge_mode/android/test_captive_portal_modes.py b/tests/e2e/interOp/captive_portal/bridge_mode/android/test_captive_portal_modes.py new file mode 100644 index 000000000..3423ee54d --- /dev/null +++ b/tests/e2e/interOp/captive_portal/bridge_mode/android/test_captive_portal_modes.py @@ -0,0 +1,276 @@ +from logging import exception +import io +import unittest +import warnings +from perfecto.test import TestResultFactory +import pytest +import sys +import time +from selenium.common.exceptions import NoSuchElementException +from selenium.webdriver.common.by import By +from appium import webdriver +from selenium.common.exceptions import NoSuchElementException + +import sys +import allure + +if 'perfecto_libs' not in sys.path: + sys.path.append(f'../libs/perfecto_libs') + +from android_lib import closeApp, set_APconnMobileDevice_android, Toggle_AirplaneMode_android, ForgetWifiConnection, openApp, \ + get_ip_address_and, verifyUploadDownloadSpeed_android, wifi_connect, wifi_disconnect_and_forget, captive_portal_and + +pytestmark = [pytest.mark.sanity, pytest.mark.interop, pytest.mark.android, pytest.mark.interop_and, pytest.mark.captive_portal + ,pytest.mark.interop_uc_sanity, pytest.mark.bridge] + +setup_params_general = { + "mode": "BRIDGE", + "ssid_modes": { + "open": [{"ssid_name": "captive_open_2g", "appliedRadios": ["2G"]}, + {"ssid_name": "captive_open_5g", "appliedRadios": ["5G"]}], + "wpa": [{"ssid_name": "captive_wpa_2g", "appliedRadios": ["2G"], "security_key": "lanforge"}, + {"ssid_name": "captive_wpa_5g", "appliedRadios": ["5G"], + "security_key": "lanforge"}], + "wpa2_personal": [{"ssid_name": "captive_wpa2_2g", "appliedRadios": ["2G"], "security_key": "lanforge"}, + {"ssid_name": "captive_wpa2_5g", "appliedRadios": ["5G"], + "security_key": "lanforge"}], + "wpa3_personal": [ + {"ssid_name": "captive_wpa3_2g", "appliedRadios": ["2G"], "security_key": "lanforge"}, + {"ssid_name": "captive_wpa3_5g", "appliedRadios": ["5G"], + "security_key": "lanforge"}]}, + "rf": {}, + "radius": False +} + + +@allure.suite(suite_name="interop sanity") +@allure.sub_suite(sub_suite_name="Bridge Mode Captive Portal : Suite-A") +@pytest.mark.InteropsuiteA +@allure.feature("BRIDGE MODE CAPTIVE PORTAL") +@pytest.mark.parametrize( + 'setup_profiles', + [setup_params_general], + indirect=True, + scope="class" +) +@pytest.mark.usefixtures("setup_profiles") +class TestBridgeModeCaptivePortalSuiteOneBridge(object): + """ Captive Portal SuiteA + pytest -m "captive portal and bridge and InteropsuiteA" + """ + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5178", name="WIFI-5178") + @pytest.mark.twog + @pytest.mark.open + def test_Captive_Portal_Open_2g_BRIDGE(self, request, get_vif_state, get_ap_logs, get_APToMobileDevice_data, + setup_perfectoMobile_android): + + profile_data = setup_params_general["ssid_modes"]["open"][0] + ssidName = profile_data["ssid_name"] + ssidPassword = "[BLANK]" + print("SSID_NAME: " + ssidName) + print("SSID_PASS: " + ssidPassword) + get_vif_state.append(ssidName) + if ssidName not in get_vif_state: + allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state)) + pytest.xfail("SSID NOT AVAILABLE IN VIF STATE") + + report = setup_perfectoMobile_android[1] + driver = setup_perfectoMobile_android[0] + connData = get_APToMobileDevice_data + + # Set Wifi/AP Mode + ip, is_internet = captive_portal_and(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData) + if is_internet: + if ip: + text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet") + else: + text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address") + print(text_body) + allure.attach(name="Connection Status: ", body=str(text_body)) + + assert verifyUploadDownloadSpeed_android(request, setup_perfectoMobile_android, connData) + wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData) + else: + allure.attach(name="Connection Status: ", body=str("No Internet access")) + assert False + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5141", name="WIFI-5141") + @pytest.mark.fiveg + @pytest.mark.open + def test_Captive_Portal_Open_5g_BRIDGE(self, request, get_vif_state, get_ap_logs, get_APToMobileDevice_data, + setup_perfectoMobile_android): + + profile_data = setup_params_general["ssid_modes"]["open"][1] + ssidName = profile_data["ssid_name"] + ssidPassword = "[BLANK]" + print("SSID_NAME: " + ssidName) + print("SSID_PASS: " + ssidPassword) + get_vif_state.append(ssidName) + if ssidName not in get_vif_state: + allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state)) + pytest.xfail("SSID NOT AVAILABLE IN VIF STATE") + + report = setup_perfectoMobile_android[1] + driver = setup_perfectoMobile_android[0] + connData = get_APToMobileDevice_data + + # Set Wifi/AP Mode + ip, is_internet = captive_portal_and(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData) + if is_internet: + if ip: + text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet") + else: + text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address") + print(text_body) + allure.attach(name="Connection Status: ", body=str(text_body)) + + assert verifyUploadDownloadSpeed_android(request, setup_perfectoMobile_android, connData) + wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData) + else: + allure.attach(name="Connection Status: ", body=str("No Internet access")) + assert False + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5180", name="WIFI-5180") + @pytest.mark.twog + @pytest.mark.wpa + def test_Captive_Portal_WPA_2g_Bridge(self, request, get_vif_state, get_ap_logs, get_APToMobileDevice_data, + setup_perfectoMobile_android): + + profile_data = setup_params_general["ssid_modes"]["wpa"][0] + ssidName = profile_data["ssid_name"] + ssidPassword = profile_data["security_key"] + print("SSID_NAME: " + ssidName) + print("SSID_PASS: " + ssidPassword) + get_vif_state.append(ssidName) + if ssidName not in get_vif_state: + allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state)) + pytest.xfail("SSID NOT AVAILABLE IN VIF STATE") + + report = setup_perfectoMobile_android[1] + driver = setup_perfectoMobile_android[0] + connData = get_APToMobileDevice_data + + # Set Wifi/AP Mode + ip, is_internet = captive_portal_and(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData) + if is_internet: + if ip: + text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet") + else: + text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address") + print(text_body) + allure.attach(name="Connection Status: ", body=str(text_body)) + + assert verifyUploadDownloadSpeed_android(request, setup_perfectoMobile_android, connData) + wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData) + else: + allure.attach(name="Connection Status: ", body=str("No Internet access")) + assert False + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5144", name="WIFI-5144") + @pytest.mark.fiveg + @pytest.mark.wpa + def test_Captive_Portal_WPA_5g_Bridge(self, request, get_vif_state, get_ap_logs, get_APToMobileDevice_data, + setup_perfectoMobile_android): + + profile_data = setup_params_general["ssid_modes"]["wpa"][1] + ssidName = profile_data["ssid_name"] + ssidPassword = profile_data["security_key"] + print("SSID_NAME: " + ssidName) + print("SSID_PASS: " + ssidPassword) + get_vif_state.append(ssidName) + if ssidName not in get_vif_state: + allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state)) + pytest.xfail("SSID NOT AVAILABLE IN VIF STATE") + + report = setup_perfectoMobile_android[1] + driver = setup_perfectoMobile_android[0] + connData = get_APToMobileDevice_data + + # Set Wifi/AP Mode + ip, is_internet = captive_portal_and(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData) + if is_internet: + if ip: + text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet") + else: + text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address") + print(text_body) + allure.attach(name="Connection Status: ", body=str(text_body)) + + assert verifyUploadDownloadSpeed_android(request, setup_perfectoMobile_android, connData) + wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData) + else: + allure.attach(name="Connection Status: ", body=str("No Internet access")) + assert False + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5184", name="WIFI-5184") + @pytest.mark.twog + @pytest.mark.wpa2_personal + def test_Captive_Portal_WPA2_2g_Personal_Bridge(self, request, get_vif_state, get_ap_logs, + get_APToMobileDevice_data, + setup_perfectoMobile_android): + + profile_data = setup_params_general["ssid_modes"]["wpa2_personal"][0] + ssidName = profile_data["ssid_name"] + ssidPassword = profile_data["security_key"] + print("SSID_NAME: " + ssidName) + print("SSID_PASS: " + ssidPassword) + get_vif_state.append(ssidName) + if ssidName not in get_vif_state: + allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state)) + pytest.xfail("SSID NOT AVAILABLE IN VIF STATE") + + report = setup_perfectoMobile_android[1] + driver = setup_perfectoMobile_android[0] + connData = get_APToMobileDevice_data + + # Set Wifi/AP Mode + ip, is_internet = captive_portal_and(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData) + if is_internet: + if ip: + text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet") + else: + text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address") + print(text_body) + allure.attach(name="Connection Status: ", body=str(text_body)) + + assert verifyUploadDownloadSpeed_android(request, setup_perfectoMobile_android, connData) + wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData) + else: + allure.attach(name="Connection Status: ", body=str("No Internet access")) + assert False + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5147", name="WIFI-5147") + @pytest.mark.fiveg + @pytest.mark.wpa2_personal + def test_Captive_Portal_WPA2_5g_Personal_Bridge(self, request, get_vif_state, get_ap_logs, + get_APToMobileDevice_data, + setup_perfectoMobile_android): + + profile_data = setup_params_general["ssid_modes"]["wpa2_personal"][1] + ssidName = profile_data["ssid_name"] + ssidPassword = profile_data["security_key"] + print("SSID_NAME: " + ssidName) + print("SSID_PASS: " + ssidPassword) + get_vif_state.append(ssidName) + if ssidName not in get_vif_state: + allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state)) + pytest.xfail("SSID NOT AVAILABLE IN VIF STATE") + + report = setup_perfectoMobile_android[1] + driver = setup_perfectoMobile_android[0] + connData = get_APToMobileDevice_data + + # Set Wifi/AP Mode + ip, is_internet = captive_portal_and(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData) + if is_internet: + if ip: + text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet") + else: + text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address") + print(text_body) + allure.attach(name="Connection Status: ", body=str(text_body)) + + assert verifyUploadDownloadSpeed_android(request, setup_perfectoMobile_android, connData) + wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_android, connData) + else: + allure.attach(name="Connection Status: ", body=str("No Internet access")) + assert False + diff --git a/tests/e2e/interOp/captive_portal/bridge_mode/ios/__init__.py b/tests/e2e/interOp/captive_portal/bridge_mode/ios/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/e2e/interOp/captive_portal/bridge_mode/ios/test_captive_portal_modes.py b/tests/e2e/interOp/captive_portal/bridge_mode/ios/test_captive_portal_modes.py new file mode 100644 index 000000000..979610a75 --- /dev/null +++ b/tests/e2e/interOp/captive_portal/bridge_mode/ios/test_captive_portal_modes.py @@ -0,0 +1,350 @@ +from logging import exception +import io +import unittest +import warnings +from perfecto.test import TestResultFactory +import pytest +import sys +import time +from selenium.common.exceptions import NoSuchElementException +from selenium.webdriver.common.by import By +from appium import webdriver +from selenium.common.exceptions import NoSuchElementException + +import sys +import allure + +if 'perfecto_libs' not in sys.path: + sys.path.append(f'../libs/perfecto_libs') + +from iOS_lib import closeApp, openApp, get_WifiIPAddress_iOS, ForgetWifiConnection, ping_deftapps_iOS, \ + Toggle_AirplaneMode_iOS, set_APconnMobileDevice_iOS, verify_APconnMobileDevice_iOS, Toggle_WifiMode_iOS, tearDown,\ + verifyUploadDownloadSpeediOS, get_ip_address_ios, captive_portal_ios, wifi_connect, wifi_disconnect_and_forget + +pytestmark = [pytest.mark.sanity, pytest.mark.interop, pytest.mark.ios, pytest.mark.interop_ios, + pytest.mark.captive_portal, pytest.mark.interop_uc_sanity, pytest.mark.bridge] + +setup_params_general = { + "mode": "BRIDGE", + "ssid_modes": { + "open": [{"ssid_name": "captive_open_2g", "appliedRadios": ["2G"]}, + {"ssid_name": "captive_open_5g", "appliedRadios": ["5G"]}], + "wpa": [{"ssid_name": "captive_wpa_2g", "appliedRadios": ["2G"], "security_key": "lanforge"}, + {"ssid_name": "captive_wpa_5g", "appliedRadios": ["5G"], + "security_key": "lanforge"}], + "wpa2": [{"ssid_name": "captive_wpa2_2g", "appliedRadios": ["2G"], "security_key": "lanforge"}, + {"ssid_name": "captive2_wpa_5g", "appliedRadios": ["5G"], + "security_key": "lanforge"}], + "wpa3_personal": [ + {"ssid_name": "captive_wpa3_2g", "appliedRadios": ["2G"], "security_key": "lanforge"}, + {"ssid_name": "captive_wpa3_5g", "appliedRadios": ["5G"], + "security_key": "lanforge"}]}, + "rf": {}, + "radius": False +} + + +@allure.suite(suite_name="interop sanity") +@allure.sub_suite(sub_suite_name="Bridge Mode Captive Portal : Suite-A") +@pytest.mark.InteropsuiteA +@allure.feature("BRIDGE MODE CAPTIVE PORTAL") +# @pytest.mark.parametrize( +# 'setup_profiles', +# [setup_params_general], +# indirect=True, +# scope="class" +# ) +#@pytest.mark.usefixtures("setup_profiles") +class TestBridgeModeCaptivePortalSuiteOneBridge(object): + """ Captive Portal SuiteA + pytest -m "captive portal and bridge and InteropsuiteA" + """ + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5179", name="WIFI-5179") + @pytest.mark.twog + @pytest.mark.open + def test_Captive_Portal_Open_2g_BRIDGE(self, request, get_vif_state, get_ap_logs, get_APToMobileDevice_data, + setup_perfectoMobile_iOS): + + profile_data = setup_params_general["ssid_modes"]["open"][0] + ssidName = profile_data["ssid_name"] + ssidPassword = "[BLANK]" + print("SSID_NAME: " + ssidName) + print("SSID_PASS: " + ssidPassword) + get_vif_state.append(ssidName) + if ssidName not in get_vif_state: + allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state)) + pytest.xfail("SSID NOT AVAILABLE IN VIF STATE") + + report = setup_perfectoMobile_iOS[1] + driver = setup_perfectoMobile_iOS[0] + connData = get_APToMobileDevice_data + + # Set Wifi/AP Mode + ip, is_internet = captive_portal_ios(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData) + if is_internet: + if ip: + text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet") + else: + text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address") + print(text_body) + allure.attach(name="Connection Status: ", body=str(text_body)) + + assert verifyUploadDownloadSpeediOS(request, setup_perfectoMobile_iOS, connData) + wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData) + else: + allure.attach(name="Connection Status: ", body=str("No Internet access")) + assert False + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5146", name="WIFI-5146") + @pytest.mark.fiveg + @pytest.mark.open + def test_Captive_Portal_Open_5g_BRIDGE(self, request, get_vif_state, get_ap_logs, get_APToMobileDevice_data, + setup_perfectoMobile_iOS): + + profile_data = setup_params_general["ssid_modes"]["open"][1] + ssidName = profile_data["ssid_name"] + ssidPassword = "[BLANK]" + print("SSID_NAME: " + ssidName) + print("SSID_PASS: " + ssidPassword) + get_vif_state.append(ssidName) + if ssidName not in get_vif_state: + allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state)) + pytest.xfail("SSID NOT AVAILABLE IN VIF STATE") + + report = setup_perfectoMobile_iOS[1] + driver = setup_perfectoMobile_iOS[0] + connData = get_APToMobileDevice_data + + # Set Wifi/AP Mode + ip, is_internet = captive_portal_ios(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData) + if is_internet: + if ip: + text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet") + else: + text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address") + print(text_body) + allure.attach(name="Connection Status: ", body=str(text_body)) + + assert verifyUploadDownloadSpeediOS(request, setup_perfectoMobile_iOS, connData) + wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData) + else: + allure.attach(name="Connection Status: ", body=str("No Internet access")) + assert False + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5182", name="WIFI-5182") + @pytest.mark.twog + @pytest.mark.wpa + def test_Captive_Portal_WPA_2g_Bridge(self, request, get_vif_state, get_ap_logs, get_APToMobileDevice_data, + setup_perfectoMobile_iOS): + + profile_data = setup_params_general["ssid_modes"]["wpa"][0] + ssidName = profile_data["ssid_name"] + ssidPassword = profile_data["security_key"] + print("SSID_NAME: " + ssidName) + print("SSID_PASS: " + ssidPassword) + get_vif_state.append(ssidName) + if ssidName not in get_vif_state: + allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state)) + pytest.xfail("SSID NOT AVAILABLE IN VIF STATE") + + report = setup_perfectoMobile_iOS[1] + driver = setup_perfectoMobile_iOS[0] + connData = get_APToMobileDevice_data + + # Set Wifi/AP Mode + ip, is_internet = captive_portal_ios(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData) + if is_internet: + if ip: + text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet") + else: + text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address") + print(text_body) + allure.attach(name="Connection Status: ", body=str(text_body)) + + assert verifyUploadDownloadSpeediOS(request, setup_perfectoMobile_iOS, connData) + wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData) + else: + allure.attach(name="Connection Status: ", body=str("No Internet access")) + assert False + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5149", name="WIFI-5149") + @pytest.mark.fiveg + @pytest.mark.wpa + def test_Captive_Portal_WPA_5g_Bridge(self, request, get_vif_state, get_ap_logs, get_APToMobileDevice_data, + setup_perfectoMobile_iOS): + + profile_data = setup_params_general["ssid_modes"]["wpa"][1] + ssidName = profile_data["ssid_name"] + ssidPassword = profile_data["security_key"] + print("SSID_NAME: " + ssidName) + print("SSID_PASS: " + ssidPassword) + get_vif_state.append(ssidName) + if ssidName not in get_vif_state: + allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state)) + pytest.xfail("SSID NOT AVAILABLE IN VIF STATE") + + report = setup_perfectoMobile_iOS[1] + driver = setup_perfectoMobile_iOS[0] + connData = get_APToMobileDevice_data + + # Set Wifi/AP Mode + ip, is_internet = captive_portal_ios(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData) + if is_internet: + if ip: + text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet") + else: + text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address") + print(text_body) + allure.attach(name="Connection Status: ", body=str(text_body)) + + assert verifyUploadDownloadSpeediOS(request, setup_perfectoMobile_iOS, connData) + wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData) + else: + allure.attach(name="Connection Status: ", body=str("No Internet access")) + assert False + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5186", name="WIFI-5186") + @pytest.mark.twog + @pytest.mark.wpa2_personal + def test_Captive_Portal_WPA2_2g_Personal_Bridge(self, request, get_vif_state, get_ap_logs, + get_APToMobileDevice_data, + setup_perfectoMobile_iOS): + + profile_data = setup_params_general["ssid_modes"]["wpa2_personal"][0] + ssidName = profile_data["ssid_name"] + ssidPassword = profile_data["security_key"] + print("SSID_NAME: " + ssidName) + print("SSID_PASS: " + ssidPassword) + get_vif_state.append(ssidName) + if ssidName not in get_vif_state: + allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state)) + pytest.xfail("SSID NOT AVAILABLE IN VIF STATE") + + report = setup_perfectoMobile_iOS[1] + driver = setup_perfectoMobile_iOS[0] + connData = get_APToMobileDevice_data + + # Set Wifi/AP Mode + ip, is_internet = captive_portal_ios(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData) + if is_internet: + if ip: + text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet") + else: + text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address") + print(text_body) + allure.attach(name="Connection Status: ", body=str(text_body)) + + assert verifyUploadDownloadSpeediOS(request, setup_perfectoMobile_iOS, connData) + wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData) + else: + allure.attach(name="Connection Status: ", body=str("No Internet access")) + assert False + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5153", name="WIFI-5153") + @pytest.mark.fiveg + @pytest.mark.wpa2_personal + def test_Captive_Portal_WPA2_5g_Personal_Bridge(self, request, get_vif_state, get_ap_logs, + get_APToMobileDevice_data, + setup_perfectoMobile_iOS): + + profile_data = setup_params_general["ssid_modes"]["wpa2_personal"][1] + ssidName = profile_data["ssid_name"] + ssidPassword = profile_data["security_key"] + print("SSID_NAME: " + ssidName) + print("SSID_PASS: " + ssidPassword) + get_vif_state.append(ssidName) + if ssidName not in get_vif_state: + allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state)) + pytest.xfail("SSID NOT AVAILABLE IN VIF STATE") + + report = setup_perfectoMobile_iOS[1] + driver = setup_perfectoMobile_iOS[0] + connData = get_APToMobileDevice_data + + # Set Wifi/AP Mode + ip, is_internet = captive_portal_ios(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData) + if is_internet: + if ip: + text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet") + else: + text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address") + print(text_body) + allure.attach(name="Connection Status: ", body=str(text_body)) + + assert verifyUploadDownloadSpeediOS(request, setup_perfectoMobile_iOS, connData) + wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData) + else: + allure.attach(name="Connection Status: ", body=str("No Internet access")) + assert False + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5130", name="WIFI-5130") + @pytest.mark.twog + @pytest.mark.wpa3_personal + def test_Captive_Portal_WPA3_2g_Personal_Bridge(self, request, get_vif_state, get_ap_logs, + get_APToMobileDevice_data, + setup_perfectoMobile_iOS): + + profile_data = setup_params_general["ssid_modes"]["wpa3_personal"][0] + ssidName = profile_data["ssid_name"] + ssidPassword = profile_data["security_key"] + print("SSID_NAME: " + ssidName) + print("SSID_PASS: " + ssidPassword) + get_vif_state.append(ssidName) + if ssidName not in get_vif_state: + allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state)) + pytest.xfail("SSID NOT AVAILABLE IN VIF STATE") + + report = setup_perfectoMobile_iOS[1] + driver = setup_perfectoMobile_iOS[0] + connData = get_APToMobileDevice_data + + # Set Wifi/AP Mode + ip, is_internet = captive_portal_ios(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData) + if is_internet: + if ip: + text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet") + else: + text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address") + print(text_body) + allure.attach(name="Connection Status: ", body=str(text_body)) + + assert verifyUploadDownloadSpeediOS(request, setup_perfectoMobile_iOS, connData) + wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData) + else: + allure.attach(name="Connection Status: ", body=str("No Internet access")) + assert False + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5140", name="WIFI-5140") + @pytest.mark.sg123 + @pytest.mark.fiveg + @pytest.mark.wpa3_personal + def test_Captive_Portal_WPA3_5g_Personal_Bridge(self, request, get_vif_state, get_ap_logs, + get_APToMobileDevice_data, + setup_perfectoMobile_iOS): + + profile_data = setup_params_general["ssid_modes"]["wpa3_personal"][1] + ssidName = profile_data["ssid_name"] + ssidPassword = profile_data["security_key"] + print("SSID_NAME: " + ssidName) + print("SSID_PASS: " + ssidPassword) + get_vif_state.append(ssidName) + if ssidName not in get_vif_state: + allure.attach(name="retest,vif state ssid not available:", body=str(get_vif_state)) + pytest.xfail("SSID NOT AVAILABLE IN VIF STATE") + + report = setup_perfectoMobile_iOS[1] + driver = setup_perfectoMobile_iOS[0] + connData = get_APToMobileDevice_data + + # Set Wifi/AP Mode + ip, is_internet = captive_portal_ios(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData) + if is_internet: + if ip: + text_body = ("connected to " + ssidName + " (" + ip + ") " + "with internet") + else: + text_body = ("connected to " + ssidName + "with Internet, couldn't get IP address") + print(text_body) + allure.attach(name="Connection Status: ", body=str(text_body)) + + assert verifyUploadDownloadSpeediOS(request, setup_perfectoMobile_iOS, connData) + wifi_disconnect_and_forget(request, ssidName, ssidPassword, setup_perfectoMobile_iOS, connData) + else: + allure.attach(name="Connection Status: ", body=str("No Internet access")) + assert False \ No newline at end of file diff --git a/tests/fixtures_2x.py b/tests/fixtures_2x.py index d0ab38050..6a8f9a11c 100644 --- a/tests/fixtures_2x.py +++ b/tests/fixtures_2x.py @@ -318,6 +318,39 @@ class Fixtures_2x: version_list.append(version) return version_list + def get_uci_show(self, get_apnos, get_configuration): + version_list = [] + for access_point_info in get_configuration['access_point']: + ap_ssh = get_apnos(access_point_info) + connectivity_data = ap_ssh.run_generic_command(cmd="uci show ucentral.config.server") + # connectivity_data.pop(0) + # connectivity_data.pop(1) + break + # version_list.append(connectivity_data) + return connectivity_data[1] + + def get_ap_status_logs(self, get_configuration, get_apnos): + connected = 0 + redirector_data = None + for access_point_info in get_configuration['access_point']: + ap_ssh = get_apnos(access_point_info, sdk="2.x") + # for i in range(15): + connectivity_data = ap_ssh.run_generic_command(cmd="ubus call ucentral status") + if "disconnected" in str(connectivity_data): + print("AP in disconnected state, sleeping for 30 sec") + # time.sleep(30) + connected = 0 + # # if i == 10: + # print("rebooting AP") + # ap_ssh.reboot() + # print("sleep for 300 sec") + # time.sleep(300) + else: + connected = 1 + + redirector_data = ap_ssh.run_generic_command(cmd="cat /etc/ucentral/redirector.json") + return connected, redirector_data + def get_sdk_version(self): version = self.controller_obj.get_sdk_version() return version diff --git a/tests/test_connectivity.py b/tests/test_connectivity.py index 726924c58..826458340 100644 --- a/tests/test_connectivity.py +++ b/tests/test_connectivity.py @@ -1,10 +1,12 @@ """ Test Case Module: Testing Basic Connectivity with Resources """ +import time import allure import pytest import requests +import json pytestmark = [pytest.mark.test_resources, pytest.mark.sanity, pytest.mark.uc_sanity, pytest.mark.sanity_55] @@ -17,26 +19,133 @@ class TestResources(object): @pytest.mark.test_cloud_controller @pytest.mark.uc_sanity @allure.testcase(name="test_controller_connectivity", url="") - def test_controller_connectivity(self, setup_controller): + def test_controller_connectivity(self, setup_controller, get_configuration): """Test case to verify cloud Controller Connectivity""" + login_response_json = setup_controller.login_resp.json() response_code = setup_controller.login_resp.status_code - allure.attach(name="Login Response Code", body=str(response_code)) - allure.attach(name="Login Response JSON", - body=str(login_response_json), - attachment_type=allure.attachment_type.JSON) - version = setup_controller.get_sdk_version() - print(version) - assert response_code == 200 + request_url = setup_controller.login_resp.request.url + print("Login_Request_URL: ", str(request_url)) + allure.attach(name="Login_Request_URL: ", body=str(request_url)) + print("response_code: ", response_code) + allure.attach(name="Login Response Code: ", body=str(response_code)) + print("login_response_json: ", login_response_json) + allure.attach(name="Login Response JSON: ", body=str(setup_controller.login_resp.json())) + if response_code != 200: + pytest.exit( + "exiting from pytest, login response is no 200: " + str(setup_controller.login_resp.status_code)) + + gw_system_info = setup_controller.get_system_gw() + request_url = gw_system_info.request.url + allure.attach(name="get_system_gw_request: ", body=str(request_url)) + gw_system_status = gw_system_info.status_code + gw_system_status_json = gw_system_info.json() + print("gw_status_check response from gateway: ", gw_system_status) + allure.attach(name="gw_status_check response from gateway: ", body=str(gw_system_status) + + str(gw_system_status_json)) + if gw_system_status != 200: + allure.attach(name="Login_Request_URL: ", body=str(request_url)) + pytest.exit("gw_status_check response from gateway: " + str(gw_system_status)) + + fms_system_info = setup_controller.get_system_fms() + request_url = fms_system_info.request.url + allure.attach(name="get_system_fms_request: ", body=str(request_url)) + fms_system_status = fms_system_info.status_code + fms_system_status_json = fms_system_info.json() + print("fms_status_check response from fms: ", fms_system_status) + allure.attach(name="fms_status_check response from fms:", body=str(fms_system_status) + + str(fms_system_status_json)) + if fms_system_status != 200: + pytest.exit("fms_status_check response from fms: " + str(fms_system_status)) + + # if gw_status_check != 200: + # for i in range(10): + # if setup_controller.get_system_gw().status_code != 200 and i < 9: + # print("sleeping for 30 sec, gw service is down with response not equals to 200") + # time.sleep(30) + # elif setup_controller.get_system_gw().status_code != 200 and i == 9: + # pytest.exit("GW service is not up yet, exiting from pytest") + # else: + # break + # + # if fms_status_check != 200: + # for i in range(10): + # if setup_controller.get_system_fms().status_code != 200 and i < 9: + # print("sleeping for 30 sec, fms service is down with response not equals to 200") + # time.sleep(30) + # elif setup_controller.get_system_fms().status_code != 200 and i == 9: + # pytest.exit("fms service is not up yet, exiting from pytest") + # else: + # break + # + # available_device_list = [] + # devices = setup_controller.get_devices() + # number_devices = len(devices["devices"]) + # for i in range(number_devices): + # available_device_list.append(devices["devices"][i]["serialNumber"]) + # print("available_device_list: ", available_device_list) + # + # if get_configuration["access_point"][0]["serial"] not in available_device_list: + # for i in range(10): + # available_device_list = [] + # devices = setup_controller.get_devices() + # number_devices = len(devices["devices"]) + # for i in range(number_devices): + # available_device_list.append(devices["devices"][i]["serialNumber"]) + # print(available_device_list) + # + # if get_configuration["access_point"][0]["serial"] not in available_device_list and i < 9: + # print("unable to find device on UI, Sleeping for 30 sec") + # time.sleep(30) + # elif get_configuration["access_point"][0]["serial"] not in available_device_list and i == 9: + # pytest.exit("Device" + get_configuration["access_point"][0]["serial"] + "not found on UI") + # else: + # break + # + # for ap in get_configuration['access_point']: + # + # ap_ssh = get_apnos(ap, pwd="../libs/apnos/", sdk="2.x") + # uci_show_ucentral = ap_ssh.run_generic_command("uci show ucentral") + # print(uci_show_ucentral) + # print("AP is pointing to: ", ap_ssh.get_ap_uci_show_ucentral()) + # expected_sdk = str(get_configuration["controller"]['url'].replace("https://sec", "\'gw").replace(":16001","\'")) + # if ap_ssh.get_ap_uci_show_ucentral() != expected_sdk: + # for i in range(10): + # ucentral_show = str(ap_ssh.get_ap_uci_show_ucentral().strip()) + # print("AP pointing to: ", ucentral_show) + # print("AP should point to: ", expected_sdk) + # + # if ucentral_show != expected_sdk and i < 9: + # print("AP is not pointing to right SDK, retry after 30 sec") + # time.sleep(30) + # elif ucentral_show != expected_sdk and i == 9: + # assert False + # pytest.exit("AP is not pointing to right SDK") + # else: + # break + + assert True @pytest.mark.test_access_points_connectivity @allure.testcase(name="test_access_points_connectivity", url="") - def test_access_points_connectivity(self, test_access_point, fixtures_ver): + def test_access_points_connectivity(self, setup_controller, get_uci_show, test_access_point, get_configuration, + test_ap_connection_status, fixtures_ver): """Test case to verify Access Points Connectivity""" data = [] for status in test_access_point: data.append(status[0]) + connection, redirector = test_ap_connection_status allure.attach(name="AP - Cloud connectivity info", body=str(fixtures_ver.ubus_connection)) + print("test_ap_connection_status: ", connection, redirector) + expected_sdk = str(get_configuration["controller"]['url'].replace("https://sec", "\'gw").replace(":16001", "\'")) + print("Expected SDK: ", expected_sdk) + allure.attach(name="Exoected SDK: ", body=str(expected_sdk)) + print("SDK On AP: ", str(get_uci_show.split("=")[1])) + allure.attach(name="SDK Pointed by AP: ", body=str(get_uci_show.split("=")[1])) + if expected_sdk not in get_uci_show: + pytest.exit("AP has invalid Redirector") + if test_ap_connection_status[0] == 0: + pytest.exit("AP in Disconnected State") assert False not in data @pytest.mark.traffic_generator_connectivity @@ -135,9 +244,12 @@ class TestFMS(object): assert False not in PASS @pytest.mark.firmware_upgrade - def test_firmware_upgrade_request(self, firmware_upgrade, get_ap_logs): + def test_firmware_upgrade_request(self, firmware_upgrade, get_ap_logs, test_ap_connection_status): for update in firmware_upgrade: allure.attach(name='serial: ' + update[0], body="") + if test_ap_connection_status[0] == 0: + assert False + pytest.exit("AP in Disconnected State") assert True @pytest.mark.test_firmware_ap diff --git a/tools/lf_tools.py b/tools/lf_tools.py deleted file mode 100644 index bb47ad288..000000000 --- a/tools/lf_tools.py +++ /dev/null @@ -1,70 +0,0 @@ -#!/usr/bin/python3.9 -""" - - lf_tools : Tools for LANforge - reboot, run_cmd, etc - ./lf_tools --host 10.28.3.8 --port 22 --username root --password lanforge --action reboot - ./lf_tools --host 10.28.3.8 --port 22 --username root --password lanforge --action run_cmd --cmd ls - -""" -import argparse -import paramiko - - -class LFTools: - - def __init__(self, host="", port=22, username="root", password="lanforge"): - self.host = host - self.port = port - self.username = username - self.password = password - - def ssh_cli_connect(self): - client = paramiko.SSHClient() - client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) - print("Connecting to LANforge: %s@%s:%s" % ( - self.username, self.host, self.port)) - client.connect(self.host, username=self.username, password=self.password, - port=self.port, timeout=10, allow_agent=False, banner_timeout=200) - - return client - - def run_cmd(self, cmd): - client = self.ssh_cli_connect() - stdin, stdout, stderr = client.exec_command(cmd) - output = "Output: " + str(stdout.read()) - error = "Error: " + str(stderr.read()) - client.close() - return output, error - - def run_action(self, action, cmd): - if action == "reboot": - output, error = self.run_cmd("reboot") - print(output, error) - elif action == "run_cmd": - output, error = self.run_cmd(cmd) - print(output, error) - else: - print("Invalid Action") - - -def main(): - parser = argparse.ArgumentParser(prog="lf_utils", - formatter_class=argparse.RawTextHelpFormatter, - allow_abbrev=True, - epilog="About lf_tools.py", - description="Tools for LANforge System") - parser.add_argument('--host', type=str, help=' --host : IP Address f LANforge System', default="localhost") - parser.add_argument('--port', type=int, help='--passwd of dut', default=22) - parser.add_argument('--username', type=str, help='--username to use on LANforge', default="root") - parser.add_argument('--password', type=str, help='--password to the given username', default="lanforge") - parser.add_argument('--action', type=str, help='--action to perform' - 'reboot | run_cmd', default="run_cmd") - parser.add_argument('--cmd', type=str, help='--cmd : used when action is "run_cmd"', default="pwd") - args = parser.parse_args() - lf_tools = LFTools(host=args.host, port=args.port, username=args.username, password=args.password) - lf_tools.run_action(args.action, args.cmd) - - -if __name__ == '__main__': - main() diff --git a/tools/scp_util.py b/tools/scp_util.py new file mode 100755 index 000000000..3b2c53177 --- /dev/null +++ b/tools/scp_util.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python3 +import argparse + +import paramiko +from scp import SCPClient + + +class SCP_File: + def __init__(self, ip="localhost", port=22, username="lanforge", password="lanforge", remote_path="/home/lanforge/", + local_path="."): + self.ip = ip + self.port = port + self.remote_path = remote_path + self.local_path = local_path + self.username = username + self.password = password + + def pull_file(self): + ssh = paramiko.SSHClient() + ssh.load_system_host_keys() + ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + ssh.connect(hostname=self.ip, username=self.username, password=self.password, port=self.port, allow_agent=False, + look_for_keys=False) + # ssh.close() + + with SCPClient(ssh.get_transport()) as scp: + scp.get(remote_path=self.remote_path, local_path=self.local_path, recursive=True) + scp.close() + + +def main(): + parser = argparse.ArgumentParser(prog="lf_utils", + formatter_class=argparse.RawTextHelpFormatter, + allow_abbrev=True, + epilog="About lf_tools.py", + description="Tools for LANforge System") + parser.add_argument('--host', type=str, help=' --host : IP Address f LANforge System', default="localhost") + parser.add_argument('--port', type=int, help='--passwd of dut', default=22) + parser.add_argument('--username', type=str, help='--username to use on LANforge', default="lanforge") + parser.add_argument('--password', type=str, help='--password to use on LANforge', default="lanforge") + parser.add_argument('--remote_path', type=str, help='--password to the given username', + default="/home/lanforge/lf_kinstall.pl") + parser.add_argument('--local_path', type=str, help='--action to perform' + 'reboot | run_cmd', default=".") + args = parser.parse_args() + lf_tools = SCP_File(ip=args.host, port=args.port, + username=args.username, password=args.password, + remote_path=args.remote_path, local_path=args.local_path) + lf_tools.pull_file() + + + + +if __name__ == '__main__': + main()