diff --git a/lf_libs/lf_tests.py b/lf_libs/lf_tests.py index 67038a71..68440ea7 100644 --- a/lf_libs/lf_tests.py +++ b/lf_libs/lf_tests.py @@ -63,6 +63,8 @@ lf_pcap = importlib.import_module("py-scripts.lf_pcap") LfPcap = lf_pcap.LfPcap lf_ap_auto_test = importlib.import_module("py-scripts.lf_ap_auto_test") ApAutoTest = lf_ap_auto_test.ApAutoTest +roam_test = importlib.import_module("py-scripts.lf_hard_roam_test") +RoamTest = roam_test.HardRoam class lf_tests(lf_libs): @@ -1641,7 +1643,8 @@ class lf_tests(lf_libs): upstream_port = list(self.lanforge_data['wan_ports'].keys())[0] + "." + str(vlan_id[0]) logging.info("Upstream data: " + str(upstream_port)) skip_bandv2 = [['Skip 2.4Ghz Tests', f'{skip_twog}'], ['Skip 5Ghz Tests', f'{skip_fiveg}'], - ['2.4Ghz Channel', f'{channel_2g}'], ['5Ghz Channel', f'{channel_5g}'], ["use_virtual_ax_sta", "1"], + ['2.4Ghz Channel', f'{channel_2g}'], ['5Ghz Channel', f'{channel_5g}'], + ["use_virtual_ax_sta", "1"], ["Use Issue-3 Behaviour", "0"], ["Skip 6Ghz Tests", "1"]] enable_tests = [['rxsens: 0'], ['max_cx: 0'], ['max_tput: 0'], ['peak_perf: 0'], ['max_tput_bi: 0'], ['dual_band_tput: 0'], ['multi_band_tput: 0'], ['atf: 0'], ['atf3: 0'], ['qos3: 0'], @@ -2649,7 +2652,8 @@ class lf_tests(lf_libs): elif num_sta == 1: # else between a 2G/5G station and uplink port radio_name = radio_name_2g if band_2g is True else radio_name_5g sta_got_ip.append(self.client_connect_using_radio(ssid=ssid1, passkey=passkey, band=band, security=security, - mode=mode, radio=radio_name[0], station_name=[station_name], + mode=mode, radio=radio_name[0], + station_name=[station_name], dut_data=dut_data, sniff_radio=sniff_radio, attach_port_info=False, attach_station_data=False)) self.create_layer3(side_a_min_rate=side_a_min_rate, side_a_max_rate=side_a_max_rate, @@ -2955,6 +2959,60 @@ class lf_tests(lf_libs): description = f"{e}" return pass_fail, description + def roam_test(self, ap1_bssid="90:3c:b3:6c:46:dd", ap2_bssid="90:3c:b3:6c:47:2d", fiveg_radio="1.1.wiphy4", + twog_radio="1.1.wiphy4", sixg_radio="1.1.wiphy4", + band="twog", sniff_radio_="1.1.wiphy5", num_sta=1, security="wpa2", security_key="Openwifi", + ssid="OpenWifi", upstream="1.1.eth1", duration=None, iteration=1, channel="11", option="ota", + dut_name=["edgecore_eap101", "edgecore_eap102"], traffic_type="lf_udp", identity="identity", + ttls_pass="ttls_pass", sta_type="11r"): + roam_obj = RoamTest(lanforge_ip=self.manager_ip, + lanforge_port=self.manager_http_port, + lanforge_ssh_port=self.manager_ssh_port, + c1_bssid=ap1_bssid, + c2_bssid=ap2_bssid, + fiveg_radio=fiveg_radio, + twog_radio=twog_radio, + sixg_radio=sixg_radio, + band=band, + sniff_radio_=sniff_radio_, + num_sta=num_sta, + security=security, + security_key=security_key, + ssid=ssid, + upstream=upstream, + duration=duration, + iteration=iteration, + channel=channel, + option=option, + duration_based=False, + iteration_based=True, + dut_name=dut_name, + traffic_type=traffic_type, + scheme="ssh", + dest="localhost", + user="admin", + passwd="OpenWifi123", + prompt="WLC2", + series_cc="9800", + ap="AP687D.B45C.1D1C", + port="8888", + band_cc="5g", + timeout="10", + identity=identity, + ttls_pass=ttls_pass, + soft_roam=False, + sta_type=sta_type, + multicast=False + ) + x = os.getcwd() + logging.info("Current Working Directory :", x) + file = roam_obj.generate_csv() + logging.info("CSV File :", file) + roam_obj.precleanup() + kernel, message = roam_obj.run(file_n=file) + report_dir_name = roam_obj.generate_report(csv_list=file, kernel_lst=kernel, current_path=str(x) + "/11r") + logging.info(report_dir_name) + if __name__ == '__main__': basic = { diff --git a/py-scripts/lf_hard_roam_test.py b/py-scripts/lf_hard_roam_test.py index 42a354b6..8f496062 100755 --- a/py-scripts/lf_hard_roam_test.py +++ b/py-scripts/lf_hard_roam_test.py @@ -88,7 +88,7 @@ stability of the network when clients move between APs. 1. The BSSID of the station should change after roaming from one AP to another 2 The station should not experience any disconnections during/after the roaming process. - 3. The duration of the roaming process should be less than 50 ms. + 3. The duration of the roaming process should be less than 100 ms. The following are the criteria for FAIL the test: @@ -96,7 +96,7 @@ stability of the network when clients move between APs. 2. No roaming occurs, as all stations are connected to the same AP. 3. The captured packet does not contain a Reassociation Response Frame. 4. The station experiences disconnection during/after the roaming process. - 5. The duration of the roaming process exceeds 50 ms. + 5. The duration of the roaming process exceeds 100 ms. STATUS: BETA RELEASE (MORE TESTING ONLY WITH MULTICAST) @@ -941,13 +941,13 @@ class HardRoam(Realm): if self.duration is not None: if time.time() > timeout: break - # Get the serial number of attenuators from lf - ser_no = self.attenuator_serial() - print(ser_no[0]) - logging.info(str(ser_no[0])) - ser_1 = ser_no[0].split(".")[2] - ser_2 = ser_no[1].split(".")[2] if self.soft_roam: + # Get the serial number of attenuators from lf + ser_no = self.attenuator_serial() + print(ser_no[0]) + logging.info(str(ser_no[0])) + ser_1 = ser_no[0].split(".")[2] + ser_2 = ser_no[1].split(".")[2] if iterations % 2 == 0: print("even set c1 to lowest and c2 to highest attenuation ") logging.info("even set c1 to lowest and c2 to highest attenuation ") @@ -1518,14 +1518,14 @@ class HardRoam(Realm): logging.info("Roam Time (ms)" + str(roam_time)) roam_time1.append(roam_time) if self.option == "ota": - if roam_time < 50: + if roam_time < 100: pass_fail_list.append("PASS") pcap_file_list.append(str(file_name)) remark.append("Passed all criteria") else: pass_fail_list.append("FAIL") pcap_file_list.append(str(file_name)) - remark.append("Roam time is greater then 50 ms") + remark.append("Roam time is greater then 100 ms") else: pass_fail_list.append("PASS") pcap_file_list.append(str(file_name)) @@ -1638,7 +1638,7 @@ class HardRoam(Realm): pass_fail_list.append("FAIL") pcap_file_list.append(str(file_name)) remark.append( - "(BSSID mismatched)Roam time is greater then 50 ms,") + "(BSSID mismatched)Roam time is greater then 100 ms,") else: pass_fail_list.append("FAIL") pcap_file_list.append(str(file_name)) @@ -1957,14 +1957,14 @@ class HardRoam(Realm): "The following are the criteria for PASS the test:

" "1. The BSSID of the station should change after roaming from one AP to another.
" "2. The station should not experience any disconnections during/after the roaming process.
" - "3. The duration of the roaming process should be less than 50 ms.
" + "3. The duration of the roaming process should be less than 100 ms.
" "
" "The following are the criteria for FAIL the test:

" "1. The BSSID of the station remains unchanged after roaming from one AP to another.
" "2. No roaming occurs, as all stations are connected to the same AP.
" "3. The captured packet does not contain a Reassociation Response Frame.
" "4. The station experiences disconnection during/after the roaming process.
" - "5. The duration of the roaming process exceeds 50 ms.
") + "5. The duration of the roaming process exceeds 100 ms.
") report.build_objective() for i in csv_list: report.move_data(directory="csv_data", _file_name=str(i)) @@ -2103,7 +2103,7 @@ stability of the network when clients move between APs. 1. The BSSID of the station should change after roaming from one AP to another 2 The station should not experience any disconnections during/after the roaming process. - 3. The duration of the roaming process should be less than 50 ms. + 3. The duration of the roaming process should be less than 100 ms. The following are the criteria for FAIL the test: @@ -2111,7 +2111,7 @@ stability of the network when clients move between APs. 2. No roaming occurs, as all stations are connected to the same AP. 3. The captured packet does not contain a Reassociation Response Frame. 4. The station experiences disconnection during/after the roaming process. - 5. The duration of the roaming process exceeds 50 ms. + 5. The duration of the roaming process exceeds 100 ms. ############################################ @@ -2289,4 +2289,4 @@ EXAMPLE: For multiple station and multiple iteration if __name__ == '__main__': - main() \ No newline at end of file + main()