From 98e67832aa73ecaa67d17e5faed629d0a93a8017 Mon Sep 17 00:00:00 2001 From: Jitendrakumar Kushavah <78074038+jitendra-kushavah@users.noreply.github.com> Date: Fri, 27 Jun 2025 10:40:42 +0530 Subject: [PATCH] Merged WIFI-7 branches (#1053) * Added sanity marker for 6g test cases Signed-off-by: jitendracandela * Add logic for better error handling * Add detailed error logging * Add fix for broken Dynamic VLAN 6GHz test cases * Configured channel mode to EHT for wifi7 * Removed sercomm_ap72tip and Added sonicfi_rap7110c-341x AP in the sanity, performance and regression workflows Signed-off-by: jitendracandela * Replaced HE mode with EHT mode for the AP config Signed-off-by: jitendracandela * Increased sleep time after config push * Replaced 2g test case with 5g test case in the sanity suite Signed-off-by: jitendracandela * Swapped the testbed basic-4a and basic-5a Signed-off-by: jitendracandela * Increased the sleep time after the config push Signed-off-by: jitendracandela * Update sleep time for all interfaces to come up * Removed sonicfi_rap7110c-341x AP from basic-4 and added it in advanced-2 testbed Signed-off-by: jitendracandela * Updated the DFS path for WiFi 7 APs Signed-off-by: jitendracandela * Add BE capacity tests and BE client scale tests * Rename client_scale tests into ax_client_scale tests * Rename client_scale_tests into ax_client_scale_tests * Remove bidirectional tests from ax_client_scale tests * Add configuraion data * Provide pass fail criteria for 2G 2x2 40MHz * Modified the marker name Signed-off-by: jitendracandela * Added be_client_scale_tests, wifi_capacity_be_tests and ax_client_scale_tests for new performance suite Signed-off-by: jitendracandela * Increased the wait time after config push Signed-off-by: jitendracandela * Added the ax capacity marker Signed-off-by: jitendracandela * Change upload and download rate for BE client scale * Added pass fail values for BE mode Signed-off-by: jitendracandela * Modified the markers for the test cases Signed-off-by: jitendracandela * Added be mode pass fail Signed-off-by: jitendracandela * Added pass-fail values for 6g 2x2 160MHz Signed-off-by: jitendracandela * Added pass-fail values for 6g 2x2 160MHz Signed-off-by: jitendracandela * Replaced basic-4a with adv-2a Signed-off-by: jitendracandela * Add Multiband testcases * Add multi_band_tests marker * Replaced dual band with multi band test Signed-off-by: jitendracandela * Update sleep time after config push * Update sleep time after config push * ADD EMPSK 6G testcase * Update dataplane tests * Modified the namespace name for sonicfi_rap630c-311g Signed-off-by: jitendra-kushavah * Replaced advanced-2a with advanced-2c Signed-off-by: jitendra-kushavah * Replaced advanced-2a with advanced-2c Signed-off-by: jitendra-kushavah * Updated code as per master Signed-off-by: jitendra-kushavah * Replaced advanced-2c with basic-5b Signed-off-by: jitendra-kushavah * Added jsonschema module Signed-off-by: jitendra-kushavah * Replace basic-5b with advanced-2c * Add EAP112 & OAP103-BR to all automation workflows * Add EAP112 & OAP103-BR to all automation workflows * Update workflows * Update workflows * Add CIG189H in workflows * Add CIG189H to performance workflow and add pass/fail criteria for performance testing * Add CIG189H in AP models in a workflow * Add Advance Captive Portal testcases on 5GHz and 6GHz * Change sonicfi-rap7110c-341x AP from advance-2c to basic-4a in sanity and regression workflows * Modify the namespace name for sonicfi_rap7110c-341x * Update logic to assign channel mode in controller.py Signed-off-by: bhargavi-ct * Update performance workflow and add sanity marker to a be_capacity test Signed-off-by: bhargavi-ct * Add pass fail criteria for perforamnce for CIG189H AP Signed-off-by: bhargavi-ct * Added sets parameter to enable the UDP-Burst,UDP-GRO and Multiple Endpoints options Signed-off-by: jitendra-kushavah * Remove regression marker from EMPSK testcase Signed-off-by: bhargavi-ct * Update DFS path for the EAP112 AP Signed-off-by: bhargavi-ct * Update pass fail criteria for CIG189H AP for AX mode Signed-off-by: bhargavi-ct * Update pass fail criteria for cig189h AP Signed-off-by: bhargavi-ct * Modify tedtbed from basic-4a to basic-5a for cig_wf189 AP in sanity workflow Signed-off-by: bhargavi-ct * Update dfs path for WIFI7 AP Signed-off-by: bhargavi-ct * Update dfs path Signed-off-by: bhargavi-ct * Update EMPSK test case Signed-off-by: bhargavi-ct * Enable 320MHz from client side for EMPSK test case Signed-off-by: bhargavi-ct * Add EMPSK test case into sanity test suite * Remove EMPSK from sanity Signed-off-by: bhargavi-ct * Fix typos: replaced wap with wpa encryption Signed-off-by: bhargavi-ct * Update EMPSK testcase Signed-off-by: bhargavi-ct * Update the testbed name for sonicfi_rap7110c-341x AP to basic-4a in performance workflow Signed-off-by: bhargavi-ct * Update radio config for DFS testcases Signed-off-by: bhargavi-ct * Update DFS testcase to verify configured channel Signed-off-by: bhargavi-ct * Add get_dut_logs_per_test_case and get_test_device_logs fixtures to multiband testcases Signed-off-by: bhargavi-ct --------- Signed-off-by: jitendracandela Signed-off-by: jitendra-kushavah Signed-off-by: bhargavi-ct Co-authored-by: bhargavi-mamidipaka Co-authored-by: bhargavi-ct --- .github/workflows/performance.yml | 1327 +++++++++++++++-- .github/workflows/quali.yml | 274 +++- .github/workflows/regression.yml | 1014 ++++++++++++- libs/tip_2x/ap_lib.py | 42 +- libs/tip_2x/controller.py | 28 +- libs/tip_2x/tip_2x.py | 65 +- tests/conftest.py | 2 +- .../open/test_click_to_continue_bridge.py | 493 +++++- .../open/test_click_to_continue_nat.py | 485 +++++- .../open/test_local_user_and_pass_bridge.py | 539 ++++++- .../open/test_local_user_and_pass_nat.py | 541 ++++++- .../open/test_click_to_continue_bridge.py | 208 ++- .../open/test_click_to_continue_nat.py | 209 ++- .../open/test_local_user_and_pass_bridge.py | 220 ++- .../open/test_local_user_and_pass_nat.py | 217 ++- .../open/test_radius_user_and_pass_bridge.py | 220 ++- .../open/test_radius_user_and_pass_nat.py | 219 ++- .../dfs_80MHz/test_dfs_80_bridge.py | 13 +- .../wpa2_personal/test_bridge_mode.py | 26 + .../wpa2_personal/test_nat_mode.py | 26 + .../__init__.py | 0 .../wpa2_personal}/__init__.py | 0 .../wpa2_personal/test_bridge_mode.py | 314 ++++ .../wpa2_personal/test_nat_mode.py | 312 ++++ .../wpa3_personal}/__init__.py | 0 .../wpa3_personal/test_bridge_mode.py | 151 ++ .../wpa3_personal/test_nat_mode.py | 146 ++ .../__init__.py | 0 .../open}/__init__.py | 0 .../open/test_bridge_mode.py | 70 +- .../open/test_nat_mode.py | 72 +- .../wpa2_personal/__init__.py | 0 .../wpa2_personal/test_bridge_mode.py | 179 ++- .../wpa2_personal/test_nat_mode.py | 179 ++- .../wpa3_personal/__init__.py | 0 .../wpa3_personal/test_bridge_mode.py | 130 +- .../wpa_personal/__init__.py | 0 .../wpa_personal/test_bridge_mode.py | 70 +- .../be_client_scale_test/__init__.py | 0 .../wpa2_personal/__init__.py | 0 .../wpa2_personal/test_bridge_mode.py | 450 ++++++ .../wpa2_personal/test_nat_mode.py | 450 ++++++ .../wpa3_personal/__init__.py | 0 .../wpa3_personal/test_bridge_mode.py | 156 ++ .../wpa2_security/test_bridge_mode.py | 155 +- .../wpa2_security/test_nat_mode.py | 159 +- .../wpa3_security/test_bridge_mode.py | 147 +- .../wpa3_security/test_nat_mode.py | 148 +- .../wap3_personal/test_bridge_mode.py | 207 ++- .../wap3_personal/test_nat_mode.py | 202 ++- .../wpa2_personal/test_bridge_mode.py | 2 +- .../wpa2_personal/test_nat_mode.py | 2 +- .../test_peak_throughput_wpa3_160Mhz_6g.py | 46 +- .../test_peak_throughput_wpa3_160Mhz_6g.py | 51 +- .../performance_pass_fail.json | 88 +- .../test_enterprise_tls.py | 21 +- .../wpa2_security/test_multipsk_basic_wpa2.py | 136 +- .../rate_limiting/test_rate_limiting.py | 1 + .../test_rate_limiting_with_radius.py | 51 +- .../test_enterprise_ttls.py | 3 +- .../test_general_security_modes.py | 8 +- .../sixg/test_dynamic_over_ssid_sixg_wpa3.py | 9 +- .../sixg/test_dynamic_vlan_sixg_wpa3.py | 9 +- .../multi_vlan/test_multi_vlan_sixg.py | 2 +- 64 files changed, 9407 insertions(+), 887 deletions(-) rename tests/e2e/basic/performance_tests/{client_scale_test => BE_capacity}/__init__.py (100%) rename tests/e2e/basic/performance_tests/{client_scale_test/open => BE_capacity/wpa2_personal}/__init__.py (100%) create mode 100644 tests/e2e/basic/performance_tests/BE_capacity/wpa2_personal/test_bridge_mode.py create mode 100644 tests/e2e/basic/performance_tests/BE_capacity/wpa2_personal/test_nat_mode.py rename tests/e2e/basic/performance_tests/{client_scale_test/wpa2_personal => BE_capacity/wpa3_personal}/__init__.py (100%) create mode 100644 tests/e2e/basic/performance_tests/BE_capacity/wpa3_personal/test_bridge_mode.py create mode 100644 tests/e2e/basic/performance_tests/BE_capacity/wpa3_personal/test_nat_mode.py rename tests/e2e/basic/performance_tests/{client_scale_test/wpa3_personal => ax_client_scale_test}/__init__.py (100%) rename tests/e2e/basic/performance_tests/{client_scale_test/wpa_personal => ax_client_scale_test/open}/__init__.py (100%) rename tests/e2e/basic/performance_tests/{client_scale_test => ax_client_scale_test}/open/test_bridge_mode.py (86%) rename tests/e2e/basic/performance_tests/{client_scale_test => ax_client_scale_test}/open/test_nat_mode.py (86%) create mode 100644 tests/e2e/basic/performance_tests/ax_client_scale_test/wpa2_personal/__init__.py rename tests/e2e/basic/performance_tests/{client_scale_test => ax_client_scale_test}/wpa2_personal/test_bridge_mode.py (81%) rename tests/e2e/basic/performance_tests/{client_scale_test => ax_client_scale_test}/wpa2_personal/test_nat_mode.py (81%) create mode 100644 tests/e2e/basic/performance_tests/ax_client_scale_test/wpa3_personal/__init__.py rename tests/e2e/basic/performance_tests/{client_scale_test => ax_client_scale_test}/wpa3_personal/test_bridge_mode.py (84%) create mode 100644 tests/e2e/basic/performance_tests/ax_client_scale_test/wpa_personal/__init__.py rename tests/e2e/basic/performance_tests/{client_scale_test => ax_client_scale_test}/wpa_personal/test_bridge_mode.py (86%) create mode 100644 tests/e2e/basic/performance_tests/be_client_scale_test/__init__.py create mode 100644 tests/e2e/basic/performance_tests/be_client_scale_test/wpa2_personal/__init__.py create mode 100644 tests/e2e/basic/performance_tests/be_client_scale_test/wpa2_personal/test_bridge_mode.py create mode 100644 tests/e2e/basic/performance_tests/be_client_scale_test/wpa2_personal/test_nat_mode.py create mode 100644 tests/e2e/basic/performance_tests/be_client_scale_test/wpa3_personal/__init__.py create mode 100644 tests/e2e/basic/performance_tests/be_client_scale_test/wpa3_personal/test_bridge_mode.py diff --git a/.github/workflows/performance.yml b/.github/workflows/performance.yml index c957ef791..21293e536 100644 --- a/.github/workflows/performance.yml +++ b/.github/workflows/performance.yml @@ -22,7 +22,7 @@ on: description: "revision of the Open Wifi Helm chart" ap_models: required: true - default: "cig_wf186h,edgecore_eap104,cig_wf196,udaya_a6-id2,sonicfi_rap630c-311g,hfcl_ion4xe,yuncore_fap655,cig_wf189,edgecore_eap105,sonicfi_rap7110c-341x,edgecore_eap101,edgecore_eap111" + default: "cig_wf186h,edgecore_eap104,sonicfi_rap630c-311g,hfcl_ion4xe,yuncore_fap655,cig_wf189,edgecore_eap105,sonicfi_rap7110c-341x,edgecore_eap101,edgecore_eap111,edgecore_oap103,edgecore_eap112,cig_wf189h" description: "the AP models to test" ap_version: required: true @@ -30,7 +30,7 @@ on: description: "revision of firmware to flash on AP, -" marker_expressions: required: true - default: "client_scale_tests,dataplane_tests,wifi_capacity_ax_tests,peak_throughput_tests,dual_band_tests" + default: "be_client_scale_tests,ax_client_scale_tests,dataplane_tests,wifi_capacity_ax_tests,wifi_capacity_be_tests,multi_band_tests" description: "Marker expressions to select tests to execute" additional_args: default: "" @@ -72,7 +72,7 @@ jobs: echo "ap_version=$(echo ${{ github.event.inputs.ap_version || 'next-latest' }})" >> $GITHUB_OUTPUT echo "existing_controller=$(echo ${{ github.event.inputs.existing_controller || 'qa01'}})" >> $GITHUB_OUTPUT - MARKER_EXPRESSIONS="${{ github.event.inputs.marker_expressions || 'client_scale_tests,dataplane_tests,wifi_capacity_ax_tests,peak_throughput_tests,dual_band_tests' }}" + MARKER_EXPRESSIONS="${{ github.event.inputs.marker_expressions || 'be_client_scale_tests,ax_client_scale_tests,dataplane_tests,wifi_capacity_ax_tests,wifi_capacity_be_tests,multi_band_tests' }}" MARKER_EXPRESSIONS=$(echo $MARKER_EXPRESSIONS | sed "s/,/\",\"/g" | sed 's/^/[\"/g' | sed 's/$/\"]/g') echo "additional_arguments=$(echo ${{ github.event.inputs.additional_arguments || ''}})" >> $GITHUB_OUTPUT cat >> $GITHUB_OUTPUT << EOF @@ -97,7 +97,7 @@ jobs: elif [[ "$DOW" -eq "4" ]]; then AP_MODELS="${{ github.event.inputs.ap_models || 'cig_wf186h,cig_wf196,yuncore_ax820' }}" else - AP_MODELS="${{ github.event.inputs.ap_models || 'cig_wf186h,cig_wf196,yuncore_ax820,yuncore_fap655,sercomm_ap72tip,edgecore_eap101' }}" + AP_MODELS="${{ github.event.inputs.ap_models || 'cig_wf186h,cig_wf196,yuncore_ax820,yuncore_fap655,sercomm_ap72tip,edgecore_eap101,edgecore_oap103,edgecore_eap112,cig_wf189h' }}" fi echo "List of AP models to test - $AP_MODELS" AP_MODELS=$(echo $AP_MODELS | sed "s/,/\",\"/g" | sed 's/^/[\"/g' | sed 's/$/\"]/g') @@ -230,17 +230,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wca - - name: run tests peak_throughput_tests + - name: run tests wifi_capacity_be_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'peak_throughput_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'wifi_capacity_be_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-ssdbt testbed: basic-5a - marker_expression: "performance and peak_throughput_tests" + marker_expression: "performance and wifi_capacity_be_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-peak_throughput_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-wifi_capacity_be_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -256,17 +256,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-ssdbt - - name: run tests client_scale_tests + - name: run tests ax_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'client_scale_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'ax_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-5a - marker_expression: "performance and client_scale_tests" + marker_expression: "performance and ax_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-client_scale_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-ax_client_scale_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -282,17 +282,43 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct - - name: run tests dual_band_tests + - name: run tests be_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'dual_band_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'be_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-5a - marker_expression: "performance and dual_band_tests" + marker_expression: "performance and be_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-dual_band_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-be_client_scale_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wct --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wct $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct + + - name: run tests multi_band_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'multi_band_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wct + testbed: basic-5a + marker_expression: "performance and multi_band_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-multi_band_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -334,7 +360,7 @@ jobs: test-hfcl-ion4xe: - needs: ["vars", "build", "test-udaya-a6-id2" ] + needs: ["vars", "build", "test-edgecore-oap103" ] runs-on: [ self-hosted, small ] timeout-minutes: 1440 if: "!cancelled() && contains(fromJSON(needs.vars.outputs.ap_models), 'hfcl_ion4xe')" @@ -433,17 +459,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wca - - name: run tests peak_throughput_tests + - name: run tests wifi_capacity_be_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'peak_throughput_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'wifi_capacity_be_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-ssdbt testbed: basic-3a - marker_expression: "performance and peak_throughput_tests" + marker_expression: "performance and wifi_capacity_be_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-peak_throughput_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-wifi_capacity_be_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -459,17 +485,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-ssdbt - - name: run tests client_scale_tests + - name: run tests ax_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'client_scale_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'ax_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-3a - marker_expression: "performance and client_scale_tests" + marker_expression: "performance and ax_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-client_scale_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-ax_client_scale_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -485,17 +511,43 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct - - name: run tests dual_band_tests + - name: run tests be_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'dual_band_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'be_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-3a - marker_expression: "performance and dual_band_tests" + marker_expression: "performance and be_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-dual_band_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-be_client_scale_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wct --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wct $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct + + - name: run tests multi_band_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'multi_band_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wct + testbed: basic-3a + marker_expression: "performance and multi_band_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-multi_band_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -636,17 +688,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wca - - name: run tests peak_throughput_tests + - name: run tests wifi_capacity_be_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'peak_throughput_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'wifi_capacity_be_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-ssdbt testbed: basic-1 - marker_expression: "performance and peak_throughput_tests" + marker_expression: "performance and wifi_capacity_be_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-peak_throughput_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-wifi_capacity_be_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -662,17 +714,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-ssdbt - - name: run tests client_scale_tests + - name: run tests ax_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'client_scale_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'ax_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-1 - marker_expression: "performance and client_scale_tests" + marker_expression: "performance and ax_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-client_scale_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-ax_client_scale_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -688,17 +740,43 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct - - name: run tests dual_band_tests + - name: run tests be_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'dual_band_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'be_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-1 - marker_expression: "performance and dual_band_tests" + marker_expression: "performance and be_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-dual_band_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-be_client_scale_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wct --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wct $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct + + - name: run tests multi_band_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'multi_band_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wct + testbed: basic-1 + marker_expression: "performance and multi_band_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-multi_band_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -839,17 +917,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wca - - name: run tests peak_throughput_tests + - name: run tests wifi_capacity_be_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'peak_throughput_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'wifi_capacity_be_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-ssdbt testbed: basic-6 - marker_expression: "performance and peak_throughput_tests" + marker_expression: "performance and wifi_capacity_be_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-peak_throughput_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-wifi_capacity_be_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -865,17 +943,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-ssdbt - - name: run tests client_scale_tests + - name: run tests ax_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'client_scale_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'ax_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-6 - marker_expression: "performance and client_scale_tests" + marker_expression: "performance and ax_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-client_scale_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-ax_client_scale_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -891,17 +969,43 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct - - name: run tests dual_band_tests + - name: run tests be_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'dual_band_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'be_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-6 - marker_expression: "performance and dual_band_tests" + marker_expression: "performance and be_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-dual_band_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-be_client_scale_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wct --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wct $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct + + - name: run tests multi_band_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'multi_band_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wct + testbed: basic-6 + marker_expression: "performance and multi_band_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-multi_band_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -1042,17 +1146,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wca - - name: run tests peak_throughput_tests + - name: run tests wifi_capacity_be_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'peak_throughput_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'wifi_capacity_be_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-ssdbt testbed: basic-2 - marker_expression: "performance and peak_throughput_tests" + marker_expression: "performance and wifi_capacity_be_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-peak_throughput_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-wifi_capacity_be_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -1068,17 +1172,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-ssdbt - - name: run tests client_scale_tests + - name: run tests ax_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'client_scale_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'ax_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-2 - marker_expression: "performance and client_scale_tests" + marker_expression: "performance and ax_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-client_scale_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-ax_client_scale_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -1094,17 +1198,43 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct - - name: run tests dual_band_tests + - name: run tests be_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'dual_band_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'be_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-2 - marker_expression: "performance and dual_band_tests" + marker_expression: "performance and be_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-dual_band_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-be_client_scale_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wct --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wct $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct + + - name: run tests multi_band_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'multi_band_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wct + testbed: basic-2 + marker_expression: "performance and multi_band_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-multi_band_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -1146,7 +1276,7 @@ jobs: test-edgecore-eap104: - needs: ["vars", "build", "test-cig-wf186h" ] + needs: ["vars", "build", "test-edgecore-eap112" ] runs-on: [ self-hosted, small ] timeout-minutes: 1440 if: "!cancelled() && contains(fromJSON(needs.vars.outputs.ap_models), 'edgecore_eap104')" @@ -1245,17 +1375,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wca - - name: run tests peak_throughput_tests + - name: run tests wifi_capacity_be_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'peak_throughput_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'wifi_capacity_be_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-ssdbt testbed: basic-1a - marker_expression: "performance and peak_throughput_tests" + marker_expression: "performance and wifi_capacity_be_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-peak_throughput_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-wifi_capacity_be_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -1271,17 +1401,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-ssdbt - - name: run tests client_scale_tests + - name: run tests ax_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'client_scale_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'ax_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-1a - marker_expression: "performance and client_scale_tests" + marker_expression: "performance and ax_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-client_scale_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-ax_client_scale_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -1297,17 +1427,43 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct - - name: run tests dual_band_tests + - name: run tests be_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'dual_band_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'be_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-1a - marker_expression: "performance and dual_band_tests" + marker_expression: "performance and be_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-dual_band_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-be_client_scale_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wct --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wct $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct + + - name: run tests multi_band_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'multi_band_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wct + testbed: basic-1a + marker_expression: "performance and multi_band_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-multi_band_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -1450,17 +1606,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wca - - name: run tests peak_throughput_tests + - name: run tests wifi_capacity_be_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'peak_throughput_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'wifi_capacity_be_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-ssdbt testbed: basic-2a - marker_expression: "performance and peak_throughput_tests" + marker_expression: "performance and wifi_capacity_be_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-peak_throughput_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-wifi_capacity_be_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -1476,17 +1632,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-ssdbt - - name: run tests client_scale_tests + - name: run tests ax_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'client_scale_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'ax_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-2a - marker_expression: "performance and client_scale_tests" + marker_expression: "performance and ax_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-client_scale_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-ax_client_scale_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -1502,17 +1658,43 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct - - name: run tests dual_band_tests + - name: run tests be_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'dual_band_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'be_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-2a - marker_expression: "performance and dual_band_tests" + marker_expression: "performance and be_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-dual_band_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-be_client_scale_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wct --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wct $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct + + - name: run tests multi_band_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'multi_band_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wct + testbed: basic-2a + marker_expression: "performance and multi_band_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-multi_band_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -1654,17 +1836,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wca - - name: run tests peak_throughput_tests + - name: run tests wifi_capacity_be_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'peak_throughput_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'wifi_capacity_be_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-ssdbt testbed: basic-4 - marker_expression: "performance and peak_throughput_tests" + marker_expression: "performance and wifi_capacity_be_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-peak_throughput_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-wifi_capacity_be_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -1680,17 +1862,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-ssdbt - - name: run tests client_scale_tests + - name: run tests ax_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'client_scale_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'ax_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-4 - marker_expression: "performance and client_scale_tests" + marker_expression: "performance and ax_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-client_scale_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-ax_client_scale_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -1706,17 +1888,43 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct - - name: run tests dual_band_tests + - name: run tests be_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'dual_band_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'be_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-4 - marker_expression: "performance and dual_band_tests" + marker_expression: "performance and be_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-dual_band_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-be_client_scale_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wct --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wct $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct + + - name: run tests multi_band_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'multi_band_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wct + testbed: basic-4 + marker_expression: "performance and multi_band_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-multi_band_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -1857,17 +2065,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wca - - name: run tests peak_throughput_tests + - name: run tests wifi_capacity_be_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'peak_throughput_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'wifi_capacity_be_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-ssdbt testbed: basic-6a - marker_expression: "performance and peak_throughput_tests" + marker_expression: "performance and wifi_capacity_be_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-peak_throughput_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-wifi_capacity_be_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -1883,17 +2091,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-ssdbt - - name: run tests client_scale_tests + - name: run tests ax_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'client_scale_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'ax_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-6a - marker_expression: "performance and client_scale_tests" + marker_expression: "performance and ax_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-client_scale_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-ax_client_scale_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -1909,17 +2117,43 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct - - name: run tests dual_band_tests + - name: run tests be_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'dual_band_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'be_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-6a - marker_expression: "performance and dual_band_tests" + marker_expression: "performance and be_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-dual_band_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-be_client_scale_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wct --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wct $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct + + - name: run tests multi_band_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'multi_band_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wct + testbed: basic-6a + marker_expression: "performance and multi_band_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-multi_band_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -2060,17 +2294,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wca - - name: run tests peak_throughput_tests + - name: run tests wifi_capacity_be_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'peak_throughput_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'wifi_capacity_be_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-ssdbt testbed: basic-3 - marker_expression: "performance and peak_throughput_tests" + marker_expression: "performance and wifi_capacity_be_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-peak_throughput_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-wifi_capacity_be_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -2086,17 +2320,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-ssdbt - - name: run tests client_scale_tests + - name: run tests ax_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'client_scale_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'ax_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-3 - marker_expression: "performance and client_scale_tests" + marker_expression: "performance and ax_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-client_scale_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-ax_client_scale_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -2112,17 +2346,43 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct - - name: run tests dual_band_tests + - name: run tests be_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'dual_band_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'be_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-3 - marker_expression: "performance and dual_band_tests" + marker_expression: "performance and be_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-dual_band_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-be_client_scale_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wct --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wct $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct + + - name: run tests multi_band_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'multi_band_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wct + testbed: basic-3 + marker_expression: "performance and multi_band_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-multi_band_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -2263,17 +2523,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wca - - name: run tests peak_throughput_tests + - name: run tests wifi_capacity_be_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'peak_throughput_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'wifi_capacity_be_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-ssdbt testbed: basic-5 - marker_expression: "performance and peak_throughput_tests" + marker_expression: "performance and wifi_capacity_be_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-peak_throughput_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-wifi_capacity_be_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -2289,17 +2549,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-ssdbt - - name: run tests client_scale_tests + - name: run tests ax_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'client_scale_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'ax_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-5 - marker_expression: "performance and client_scale_tests" + marker_expression: "performance and ax_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-client_scale_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-ax_client_scale_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -2315,17 +2575,43 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct - - name: run tests dual_band_tests + - name: run tests be_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'dual_band_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'be_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-5 - marker_expression: "performance and dual_band_tests" + marker_expression: "performance and be_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-dual_band_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-be_client_scale_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wct --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wct $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct + + - name: run tests multi_band_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'multi_band_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wct + testbed: basic-5 + marker_expression: "performance and multi_band_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-multi_band_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -2366,7 +2652,7 @@ jobs: run: kubectl -n openwifi-${{ needs.vars.outputs.existing_controller }} logs deployment/owsec test-sonicfi-rap7110c-341x: - needs: [ "vars", "build", "test-cig-wf196" ] + needs: [ "vars", "build", "test-cig-wf189h" ] runs-on: [ self-hosted, small ] timeout-minutes: 1440 if: "!cancelled() && contains(fromJSON(needs.vars.outputs.ap_models), 'sonicfi_rap7110c-341x')" @@ -2466,17 +2752,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wca - - name: run tests peak_throughput_tests + - name: run tests wifi_capacity_be_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'peak_throughput_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'wifi_capacity_be_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-ssdbt testbed: basic-4a - marker_expression: "performance and peak_throughput_tests" + marker_expression: "performance and wifi_capacity_be_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-peak_throughput_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-wifi_capacity_be_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -2492,17 +2778,17 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-ssdbt - - name: run tests client_scale_tests + - name: run tests ax_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'client_scale_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'ax_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-4a - marker_expression: "performance and client_scale_tests" + marker_expression: "performance and ax_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-client_scale_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-ax_client_scale_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -2518,17 +2804,43 @@ jobs: continue-on-error: true run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct - - name: run tests dual_band_tests + - name: run tests be_client_scale_tests uses: ./.github/actions/run-tests - if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'dual_band_tests')" + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'be_client_scale_tests')" with: namespace: ${{ steps.namespace.outputs.name }}-wct testbed: basic-4a - marker_expression: "performance and dual_band_tests" + marker_expression: "performance and be_client_scale_tests" configuration_file: "./lab_info.json" testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" - allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-dual_band_tests" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-be_client_scale_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wct --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wct $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct + + - name: run tests multi_band_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'multi_band_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wct + testbed: basic-4a + marker_expression: "performance and multi_band_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-multi_band_tests" dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" # necessary because if conditionals in composite actions are currently not respected @@ -2568,12 +2880,697 @@ jobs: if: failure() run: kubectl -n openwifi-${{ needs.vars.outputs.existing_controller }} logs deployment/owsec + test-edgecore-oap103: + needs: [ "vars", "build" ] + runs-on: [ self-hosted, small ] + timeout-minutes: 1440 + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.ap_models), 'edgecore_oap103')" + env: + AP_MODEL: edgecore_oap103 + steps: + - name: Set AP model output + id: ap_model + run: | + echo "model=${AP_MODEL}" >> $GITHUB_OUTPUT + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.8" + + + + # TODO WIFI-7839 delete when issue is resolved on AWS CLI side + - name: install kubectl + run: | + curl -s -LO "https://dl.k8s.io/release/v1.27.6/bin/linux/amd64/kubectl" + sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl + + - name: install aws CLI tool + run: | + curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" + unzip awscliv2.zip + sudo ./aws/install + + - name: get EKS access credentials + run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} + + - name: prepare namespace name + id: namespace + run: | + NAMESPACE="performance-${{ github.run_id }}-$(echo ${{ steps.ap_model.outputs.model }} | tr '[:upper:]' '[:lower:]' | tr '_' '-')" + echo "name=${NAMESPACE}" >> $GITHUB_OUTPUT + + - name: prepare configuration + run: | + cat << EOF > lab_info.json + ${{ secrets.LAB_INFO_JSON }} + EOF + + + - name: run tests dataplane_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'dataplane_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-dtt + testbed: basic-3 + marker_expression: "performance and dataplane_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-dataplane_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-dtt --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-dtt $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-dtt + + - name: run tests wifi_capacity_ax_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'wifi_capacity_ax_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wca + testbed: basic-3 + marker_expression: "performance and wifi_capacity_ax_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: '-o firmware="${{ needs.vars.outputs.ap_version }}"' + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-wifi_capacity_ax_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wca --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wca $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wca + + - name: run tests wifi_capacity_be_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'wifi_capacity_be_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-ssdbt + testbed: basic-3 + marker_expression: "performance and wifi_capacity_be_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-wifi_capacity_be_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-ssdbt --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-ssdbt $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-ssdbt + + - name: run tests ax_client_scale_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'ax_client_scale_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wct + testbed: basic-3 + marker_expression: "performance and ax_client_scale_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-ax_client_scale_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wct --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wct $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct + + - name: run tests be_client_scale_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'be_client_scale_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wct + testbed: basic-3 + marker_expression: "performance and be_client_scale_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-be_client_scale_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wct --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wct $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct + + - name: run tests multi_band_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'multi_band_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wct + testbed: basic-3 + marker_expression: "performance and multi_band_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-multi_band_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wct --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wct $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct + + - name: show gw logs + if: failure() + run: kubectl -n openwifi-${{ needs.vars.outputs.existing_controller }} logs deployment/owgw + + - name: show fms logs + if: failure() + run: kubectl -n openwifi-${{ needs.vars.outputs.existing_controller }} logs deployment/owfms + + - name: show prov logs + if: failure() + run: kubectl -n openwifi-${{ needs.vars.outputs.existing_controller }} logs deployment/owprov + + - name: show analytics logs + if: failure() + run: kubectl -n openwifi-${{ needs.vars.outputs.existing_controller }} logs deployment/owanalytics + + - name: show subscription (userportal) logs + if: failure() + run: kubectl -n openwifi-${{ needs.vars.outputs.existing_controller }} logs deployment/owsub + + - name: show sec logs + if: failure() + run: kubectl -n openwifi-${{ needs.vars.outputs.existing_controller }} logs deployment/owsec + + test-edgecore-eap112: + needs: [ "vars", "build" ] + runs-on: [ self-hosted, small ] + timeout-minutes: 1440 + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.ap_models), 'edgecore_eap112')" + env: + AP_MODEL: edgecore_eap112 + steps: + - name: Set AP model output + id: ap_model + run: | + echo "model=${AP_MODEL}" >> $GITHUB_OUTPUT + + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.8" + + + + # TODO WIFI-7839 delete when issue is resolved on AWS CLI side + - name: install kubectl + run: | + curl -s -LO "https://dl.k8s.io/release/v1.27.6/bin/linux/amd64/kubectl" + sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl + + - name: install aws CLI tool + run: | + curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" + unzip awscliv2.zip + sudo ./aws/install + + - name: get EKS access credentials + run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} + + - name: prepare namespace name + id: namespace + run: | + NAMESPACE="performance-${{ github.run_id }}-$(echo ${{ steps.ap_model.outputs.model }} | tr '[:upper:]' '[:lower:]' | tr '_' '-')" + echo "name=${NAMESPACE}" >> $GITHUB_OUTPUT + + - name: prepare configuration + run: | + cat << EOF > lab_info.json + ${{ secrets.LAB_INFO_JSON }} + EOF + + + - name: run tests dataplane_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'dataplane_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-dtt + testbed: basic-1 + marker_expression: "performance and dataplane_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-dataplane_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-dtt --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-dtt $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-dtt + + - name: run tests wifi_capacity_ax_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'wifi_capacity_ax_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wca + testbed: basic-1 + marker_expression: "performance and wifi_capacity_ax_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: '-o firmware="${{ needs.vars.outputs.ap_version }}"' + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-wifi_capacity_ax_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wca --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wca $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wca + + - name: run tests wifi_capacity_be_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'wifi_capacity_be_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-ssdbt + testbed: basic-1 + marker_expression: "performance and wifi_capacity_be_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-wifi_capacity_be_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-ssdbt --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-ssdbt $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-ssdbt + + - name: run tests ax_client_scale_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'ax_client_scale_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wct + testbed: basic-1 + marker_expression: "performance and ax_client_scale_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-ax_client_scale_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wct --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wct $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct + + - name: run tests be_client_scale_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'be_client_scale_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wct + testbed: basic-1 + marker_expression: "performance and be_client_scale_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-be_client_scale_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wct --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wct $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct + + - name: run tests multi_band_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'multi_band_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wct + testbed: basic-1 + marker_expression: "performance and multi_band_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-multi_band_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wct --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wct $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct + + - name: show gw logs + if: failure() + run: kubectl -n openwifi-${{ needs.vars.outputs.existing_controller }} logs deployment/owgw + + - name: show fms logs + if: failure() + run: kubectl -n openwifi-${{ needs.vars.outputs.existing_controller }} logs deployment/owfms + + - name: show prov logs + if: failure() + run: kubectl -n openwifi-${{ needs.vars.outputs.existing_controller }} logs deployment/owprov + + - name: show analytics logs + if: failure() + run: kubectl -n openwifi-${{ needs.vars.outputs.existing_controller }} logs deployment/owanalytics + + - name: show subscription (userportal) logs + if: failure() + run: kubectl -n openwifi-${{ needs.vars.outputs.existing_controller }} logs deployment/owsub + + - name: show sec logs + if: failure() + run: kubectl -n openwifi-${{ needs.vars.outputs.existing_controller }} logs deployment/owsec + + test-cig-wf189h: + needs: [ "vars", "build"] + runs-on: [ self-hosted, small ] + timeout-minutes: 1440 + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.ap_models), 'cig_wf189h')" + env: + + AP_MODEL: cig_wf189h + steps: + - name: Set AP model output + id: ap_model + run: | + echo "model=${AP_MODEL}" >> $GITHUB_OUTPUT + + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.8" + + + # TODO WIFI-7839 delete when issue is resolved on AWS CLI side + - name: install kubectl + run: | + curl -s -LO "https://dl.k8s.io/release/v1.27.6/bin/linux/amd64/kubectl" + sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl + + - name: install aws CLI tool + run: | + curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" + unzip awscliv2.zip + sudo ./aws/install + + - name: get EKS access credentials + run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} + + - name: prepare namespace name + id: namespace + run: | + NAMESPACE="performance-${{ github.run_id }}-$(echo ${{ steps.ap_model.outputs.model }} | tr '[:upper:]' '[:lower:]' | tr '_' '-')" + echo "name=${NAMESPACE}" >> $GITHUB_OUTPUT + + - name: prepare configuration + run: | + cat << EOF > lab_info.json + ${{ secrets.LAB_INFO_JSON }} + EOF + + + - name: run tests dataplane_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'dataplane_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-dtt + testbed: basic-4 + marker_expression: "performance and dataplane_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-dataplane_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-dtt --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-dtt $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-dtt + + - name: run tests wifi_capacity_ax_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'wifi_capacity_ax_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wca + testbed: basic-4 + marker_expression: "performance and wifi_capacity_ax_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: '-o firmware="${{ needs.vars.outputs.ap_version }}"' + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-wifi_capacity_ax_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wca --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wca $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wca + + - name: run tests wifi_capacity_be_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'wifi_capacity_be_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-ssdbt + testbed: basic-4 + marker_expression: "performance and wifi_capacity_be_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-wifi_capacity_be_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-ssdbt --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-ssdbt $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-ssdbt + + - name: run tests ax_client_scale_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'ax_client_scale_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wct + testbed: basic-4 + marker_expression: "performance and ax_client_scale_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-ax_client_scale_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wct --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wct $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct + + - name: run tests be_client_scale_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'be_client_scale_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wct + testbed: basic-4 + marker_expression: "performance and be_client_scale_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-be_client_scale_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wct --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wct $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct + + - name: run tests multi_band_tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'multi_band_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-wct + testbed: basic-4 + marker_expression: "performance and multi_band_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}-multi_band_tests" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-wct --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-wct $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-wct + + - name: show gw logs + if: failure() + run: kubectl -n openwifi-${{ needs.vars.outputs.existing_controller }} logs deployment/owgw + + - name: show fms logs + if: failure() + run: kubectl -n openwifi-${{ needs.vars.outputs.existing_controller }} logs deployment/owfms + + - name: show prov logs + if: failure() + run: kubectl -n openwifi-${{ needs.vars.outputs.existing_controller }} logs deployment/owprov + + - name: show analytics logs + if: failure() + run: kubectl -n openwifi-${{ needs.vars.outputs.existing_controller }} logs deployment/owanalytics + + - name: show subscription (userportal) logs + if: failure() + run: kubectl -n openwifi-${{ needs.vars.outputs.existing_controller }} logs deployment/owsub + + - name: show sec logs + if: failure() + run: kubectl -n openwifi-${{ needs.vars.outputs.existing_controller }} logs deployment/owsec # Save reports report: if: "!cancelled()" runs-on: ubuntu-latest - needs: [vars, test-cig-wf186h, test-edgecore-eap104, test-cig-wf196, test-udaya-a6-id2, test-sonicfi-rap630c-311g, test-hfcl-ion4xe, test-yuncore-fap655, test-cig-wf189, test-edgecore-eap105, test-sonicfi-rap7110c-341x, test-edgecore-eap101, test-edgecore-eap111] + needs: [vars, test-cig-wf186h, test-edgecore-eap104, test-cig-wf196, test-udaya-a6-id2, test-sonicfi-rap630c-311g, test-hfcl-ion4xe, test-yuncore-fap655, test-cig-wf189, test-edgecore-eap105, test-sonicfi-rap7110c-341x, test-edgecore-eap101, test-edgecore-eap111, test-edgecore-oap103, test-edgecore-eap112, test-cig-wf189h] strategy: fail-fast: false matrix: @@ -2595,27 +3592,33 @@ jobs: - uses: actions/download-artifact@v4 with: - name: allure-results-${{ matrix.model }}-peak_throughput_tests - path: allure-results-peak_throughput_tests + name: allure-results-${{ matrix.model }}-wifi_capacity_be_tests + path: allure-results-wifi_capacity_be_tests - uses: actions/download-artifact@v4 with: - name: allure-results-${{ matrix.model }}-client_scale_tests - path: allure-results-client_scale_tests + name: allure-results-${{ matrix.model }}-ax_client_scale_tests + path: allure-results-ax_client_scale_tests - uses: actions/download-artifact@v4 with: - name: allure-results-${{ matrix.model }}-dual_band_tests - path: allure-results-dual_band_tests + name: allure-results-${{ matrix.model }}-be_client_scale_tests + path: allure-results-be_client_scale_tests + + - uses: actions/download-artifact@v4 + with: + name: allure-results-${{ matrix.model }}-multi_band_tests + path: allure-results-multi_band_tests - name: merge results run: | mkdir allure-results cp -r allure-results-dataplane_tests/* allure-results/ cp -r allure-results-wifi_capacity_ax_tests/* allure-results/ - cp -r allure-results-peak_throughput_tests/* allure-results/ - cp -r allure-results-client_scale_tests/* allure-results/ - cp -r allure-results-dual_band_tests/* allure-results/ + cp -r allure-results-wifi_capacity_be_tests/* allure-results/ + cp -r allure-results-ax_client_scale_tests/* allure-results/ + cp -r allure-results-be_client_scale_tests/* allure-results/ + cp -r allure-results-multi_band_tests/* allure-results/ - name: download history of previous run continue-on-error: true @@ -2654,7 +3657,7 @@ jobs: # Cleanup cleanup: - needs: [test-cig-wf186h, test-edgecore-eap104, test-cig-wf196, test-udaya-a6-id2, test-sonicfi-rap630c-311g, test-hfcl-ion4xe, test-yuncore-fap655, test-cig-wf189, test-edgecore-eap105, test-sonicfi-rap7110c-341x, test-edgecore-eap101, test-edgecore-eap111] + needs: [test-cig-wf186h, test-edgecore-eap104, test-cig-wf196, test-udaya-a6-id2, test-sonicfi-rap630c-311g, test-hfcl-ion4xe, test-yuncore-fap655, test-cig-wf189, test-edgecore-eap105, test-sonicfi-rap7110c-341x, test-edgecore-eap101, test-edgecore-eap111, test-edgecore-oap103, test-edgecore-eap112, test-cig-wf189h] runs-on: ubuntu-latest if: always() steps: diff --git a/.github/workflows/quali.yml b/.github/workflows/quali.yml index a6de471cf..ff4ec7468 100644 --- a/.github/workflows/quali.yml +++ b/.github/workflows/quali.yml @@ -22,7 +22,7 @@ on: description: "revision of the Open Wifi Helm chart" ap_models: required: true - default: "cig_wf186h,edgecore_eap104,cig_wf196,udaya_a6-id2,sonicfi_rap630c-311g,hfcl_ion4xe,yuncore_fap655,cig_wf189,edgecore_eap105,sonicfi_rap7110c-341x,edgecore_eap101,edgecore_eap111" + default: "cig_wf186h,edgecore_eap104,sonicfi_rap630c-311g,hfcl_ion4xe,yuncore_fap655,cig_wf189,edgecore_eap105,sonicfi_rap7110c-341x,edgecore_eap101,edgecore_eap111,edgecore_oap103,edgecore_eap112,cig_wf189h" description: "the AP models to test" ap_version: required: true @@ -103,7 +103,7 @@ jobs: AP_MODELS="${{ github.event.inputs.ap_models || 'cig_wf189,edgecore_eap105,edgecore_eap111' }}" fi else - AP_MODELS="${{ github.event.inputs.ap_models || 'cig_wf186h,cig_wf196,yuncore_ax820,yuncore_fap655,sercomm_ap72tip,edgecore_eap101' }}" + AP_MODELS="${{ github.event.inputs.ap_models || 'cig_wf186h,cig_wf196,yuncore_ax820,yuncore_fap655,sercomm_ap72tip,edgecore_eap101,edgecore_oap103,edgecore_eap112,cig_wf189h' }}" fi echo "List of AP models to test - $AP_MODELS" @@ -1208,11 +1208,277 @@ jobs: if: failure() run: kubectl -n openwifi-qa01 logs deployment/owsec + test-edgecore-oap103: + needs: [ "vars", "build" ] + runs-on: ubuntu-latest + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.ap_models), 'edgecore_oap103')" + env: + AP_MODEL: edgecore_oap103 + steps: + - name: Set AP model output + id: ap_model + run: | + echo "model=${AP_MODEL}" >> $GITHUB_OUTPUT + + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.8" + + # TODO WIFI-7839 delete when issue is resolved on AWS CLI side + - name: install kubectl + run: | + curl -s -LO "https://dl.k8s.io/release/v1.27.6/bin/linux/amd64/kubectl" + sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl + + - name: get EKS access credentials + run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} + + - name: prepare namespace name + id: namespace + run: | + NAMESPACE="testing-${{ github.run_id }}-$(echo ${{ steps.ap_model.outputs.model }} | tr '[:upper:]' '[:lower:]' | tr '_' '-')" + echo "name=${NAMESPACE}" >> $GITHUB_OUTPUT + + - name: prepare configuration + run: | + cat << EOF > lab_info.json + ${{ secrets.LAB_INFO_JSON }} + EOF + + + - name: run tests + uses: ./.github/actions/run-tests + with: + namespace: ${{ steps.namespace.outputs.name }} + testbed: basic-3 + marker_expression: "${{ needs.vars.outputs.marker_expression }}" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: '-o firmware="${{ needs.vars.outputs.ap_version }}"' + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }} --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }} $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }} + + - name: show gw logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owgw + + - name: show fms logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owfms + + - name: show prov logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owprov + + - name: show analytics logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owanalytics + + - name: show subscription (userportal) logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owsub + + - name: show sec logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owsec + + test-edgecore-eap112: + needs: [ "vars", "build" ] + runs-on: ubuntu-latest + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.ap_models), 'edgecore_eap112')" + env: + AP_MODEL: edgecore_eap112 + steps: + - name: Set AP model output + id: ap_model + run: | + echo "model=${AP_MODEL}" >> $GITHUB_OUTPUT + + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.8" + + # TODO WIFI-7839 delete when issue is resolved on AWS CLI side + - name: install kubectl + run: | + curl -s -LO "https://dl.k8s.io/release/v1.27.6/bin/linux/amd64/kubectl" + sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl + + - name: get EKS access credentials + run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} + + - name: prepare namespace name + id: namespace + run: | + NAMESPACE="testing-${{ github.run_id }}-$(echo ${{ steps.ap_model.outputs.model }} | tr '[:upper:]' '[:lower:]' | tr '_' '-')" + echo "name=${NAMESPACE}" >> $GITHUB_OUTPUT + + - name: prepare configuration + run: | + cat << EOF > lab_info.json + ${{ secrets.LAB_INFO_JSON }} + EOF + + + - name: run tests + uses: ./.github/actions/run-tests + with: + namespace: ${{ steps.namespace.outputs.name }} + testbed: basic-1 + marker_expression: "${{ needs.vars.outputs.marker_expression }}" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: '-o firmware="${{ needs.vars.outputs.ap_version }}"' + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }} --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }} $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }} + + - name: show gw logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owgw + + - name: show fms logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owfms + + - name: show prov logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owprov + + - name: show analytics logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owanalytics + + - name: show subscription (userportal) logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owsub + + - name: show sec logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owsec + + test-cig-wf189h: + needs: [ "vars", "build" ] + runs-on: ubuntu-latest + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.ap_models), 'cig_wf189h')" + env: + AP_MODEL: cig_wf189h + steps: + - name: Set AP model output + id: ap_model + run: | + echo "model=${AP_MODEL}" >> $GITHUB_OUTPUT + + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.8" + + # TODO WIFI-7839 delete when issue is resolved on AWS CLI side + - name: install kubectl + run: | + curl -s -LO "https://dl.k8s.io/release/v1.27.6/bin/linux/amd64/kubectl" + sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl + + - name: get EKS access credentials + run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} + + - name: prepare namespace name + id: namespace + run: | + NAMESPACE="testing-${{ github.run_id }}-$(echo ${{ steps.ap_model.outputs.model }} | tr '[:upper:]' '[:lower:]' | tr '_' '-')" + echo "name=${NAMESPACE}" >> $GITHUB_OUTPUT + + - name: prepare configuration + run: | + cat << EOF > lab_info.json + ${{ secrets.LAB_INFO_JSON }} + EOF + + + - name: run tests + uses: ./.github/actions/run-tests + with: + namespace: ${{ steps.namespace.outputs.name }} + testbed: basic-4 + marker_expression: "${{ needs.vars.outputs.marker_expression }}" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: '-o firmware="${{ needs.vars.outputs.ap_version }}"' + allure_results_artifact_name: "allure-results-${{ steps.ap_model.outputs.model }}" + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }} --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }} $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }} + + - name: show gw logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owgw + + - name: show fms logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owfms + + - name: show prov logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owprov + + - name: show analytics logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owanalytics + + - name: show subscription (userportal) logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owsub + + - name: show sec logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owsec # Save reports report: if: "!cancelled()" runs-on: ubuntu-latest - needs: [vars, test-cig-wf186h, test-edgecore-eap104, test-cig-wf196, test-udaya-a6-id2, test-sonicfi-rap630c-311g, test-hfcl-ion4xe, test-yuncore-fap655, test-cig-wf189, test-edgecore-eap105, test-sonicfi-rap7110c-341x, test-edgecore-eap101, test-edgecore-eap111] + needs: [vars, test-cig-wf186h, test-edgecore-eap104, test-cig-wf196, test-udaya-a6-id2, test-sonicfi-rap630c-311g, test-hfcl-ion4xe, test-yuncore-fap655, test-cig-wf189, test-edgecore-eap105, test-sonicfi-rap7110c-341x, test-edgecore-eap101, test-edgecore-eap111,test-edgecore-oap103,test-edgecore-eap112,test-cig-wf189h] strategy: fail-fast: false matrix: @@ -1263,7 +1529,7 @@ jobs: # Cleanup cleanup: - needs: [test-cig-wf186h, test-edgecore-eap104, test-cig-wf196, test-udaya-a6-id2, test-sonicfi-rap630c-311g, test-hfcl-ion4xe, test-yuncore-fap655, test-cig-wf189, test-edgecore-eap105, test-sonicfi-rap7110c-341x, test-edgecore-eap101, test-edgecore-eap111] + needs: [test-cig-wf186h, test-edgecore-eap104, test-cig-wf196, test-udaya-a6-id2, test-sonicfi-rap630c-311g, test-hfcl-ion4xe, test-yuncore-fap655, test-cig-wf189, test-edgecore-eap105, test-sonicfi-rap7110c-341x, test-edgecore-eap101, test-edgecore-eap111,test-edgecore-oap103,test-edgecore-eap112,test-cig-wf189h] runs-on: ubuntu-latest if: always() steps: diff --git a/.github/workflows/regression.yml b/.github/workflows/regression.yml index c5f5b5878..44096289c 100644 --- a/.github/workflows/regression.yml +++ b/.github/workflows/regression.yml @@ -22,7 +22,7 @@ on: description: "revision of the Open Wifi Helm chart" ap_models: required: true - default: "cig_wf186h,edgecore_eap104,cig_wf196,udaya_a6-id2,sonicfi_rap630c-311g,hfcl_ion4xe,yuncore_fap655,cig_wf189,edgecore_eap105,sonicfi_rap7110c-341x,edgecore_eap101,edgecore_eap111" + default: "cig_wf186h,edgecore_eap104,sonicfi_rap630c-311g,hfcl_ion4xe,yuncore_fap655,cig_wf189,edgecore_eap105,sonicfi_rap7110c-341x,edgecore_eap101,edgecore_eap111,edgecore_oap103,edgecore_eap112,cig_wf189h" description: "the AP models to test" ap_version: required: true @@ -96,7 +96,7 @@ jobs: elif [[ "$DOW" -eq "7" ]]; then AP_MODELS="${{ github.event.inputs.ap_models || 'udaya_a6-id2,edgecore_eap102,yuncore_fap655,edgecore_eap101' }}" else - AP_MODELS="${{ github.event.inputs.ap_models || 'cig_wf186h,cig_wf196,yuncore_ax820,yuncore_fap655,sercomm_ap72tip,edgecore_eap101' }}" + AP_MODELS="${{ github.event.inputs.ap_models || 'cig_wf186h,cig_wf196,yuncore_ax820,yuncore_fap655,sercomm_ap72tip,edgecore_eap101,edgecore_oap103,edgecore_eap112,cig_wf189h' }}" fi AP_MODELS=$(echo $AP_MODELS | sed "s/,/\",\"/g" | sed 's/^/[\"/g' | sed 's/$/\"]/g') @@ -1461,7 +1461,7 @@ jobs: test-cig-wf189: - needs: ["vars", "build", "test-edgecore-eap105"] + needs: ["vars", "build", "test-cig-wf196"] runs-on: [self-hosted, small] timeout-minutes: 1440 if: "!cancelled() && contains(fromJSON(needs.vars.outputs.ap_models), 'cig_wf189')" @@ -3781,7 +3781,7 @@ jobs: run: kubectl -n openwifi-qa01 logs deployment/owsec test-sonicfi-rap7110c-341x: - needs: [ "vars", "build", "test-cig-wf196"] + needs: [ "vars", "build", "test-edgecore-eap105"] runs-on: [ self-hosted, small ] timeout-minutes: 1440 if: "!cancelled() && contains(fromJSON(needs.vars.outputs.ap_models), 'sonicfi_rap7110c-341x')" @@ -3910,7 +3910,7 @@ jobs: uses: ./.github/actions/run-tests if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'rate_limiting_with_radius_tests')" with: - namespace: ${{ steps.namespace.outputs.name }}-rate-limiting-radius + namespace: ${{ steps.namespace.outputs.name }}-rate-limit-rad testbed: basic-4a marker_expression: "ow_regression_lf and rate_limiting_with_radius_tests" configuration_file: "./lab_info.json" @@ -3924,13 +3924,13 @@ jobs: if: always() continue-on-error: true run: | - podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-rate-limiting-radius --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") - kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-rate-limiting-radius $podname || true + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-rate-limit-rad --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-rate-limit-rad $podname || true - name: delete namespace if: always() continue-on-error: true - run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-rate-limiting-radius + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-rate-limit-rad - name: run dynamic_vlan tests uses: ./.github/actions/run-tests @@ -4112,12 +4112,1006 @@ jobs: if: failure() run: kubectl -n openwifi-qa01 logs deployment/owsec + test-edgecore-oap103: + needs: [ "vars", "build" ] + runs-on: [ self-hosted, small ] + timeout-minutes: 1440 + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.ap_models), 'edgecore_oap103')" + env: + AP_MODEL: edgecore_oap103 + steps: + - name: Set AP model output + id: ap_model + run: | + echo "model=${AP_MODEL}" >> $GITHUB_OUTPUT + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.8" + + + # TODO WIFI-7839 delete when issue is resolved on AWS CLI side + - name: install kubectl + run: | + curl -s -LO "https://dl.k8s.io/release/v1.27.6/bin/linux/amd64/kubectl" + sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl + + - name: install aws CLI tool + run: | + curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" + unzip awscliv2.zip + sudo ./aws/install + + - name: get EKS access credentials + run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} + + - name: prepare namespace name + id: namespace + run: | + NAMESPACE="regression-${{ github.run_id }}-$(echo ${{ steps.ap_model.outputs.model }} | tr '[:upper:]' '[:lower:]' | tr '_' '-')" + echo "name=${NAMESPACE}" >> $GITHUB_OUTPUT + + - name: prepare configuration + run: | + cat << EOF > lab_info.json + ${{ secrets.LAB_INFO_JSON }} + EOF + + + - name: run dfs tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'dfs_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-dfs + testbed: basic-3 + marker_expression: "ow_regression_lf and dfs_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-dfs_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-dfs --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-dfs $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-dfs + + - name: run multipsk tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'multi_psk_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-multipsk + testbed: basic-3 + marker_expression: "ow_regression_lf and multi_psk_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-multi_psk_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-multipsk --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-multipsk $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-multipsk + + - name: run rate_limiting tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'rate_limiting_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-rate-limiting + testbed: basic-3 + marker_expression: "ow_regression_lf and rate_limiting_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-rate_limiting_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-rate-limiting --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-rate-limiting $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-rate-limiting + + - name: run rate_limiting_with_radius tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'rate_limiting_with_radius_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-rate-limiting-radius + testbed: basic-3 + marker_expression: "ow_regression_lf and rate_limiting_with_radius_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-rate_limiting_with_radius_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-rate-limiting-radius --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-rate-limiting-radius $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-rate-limiting-radius + + - name: run dynamic_vlan tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'dynamic_vlan_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-dynamic-vlan + testbed: basic-3 + marker_expression: "ow_regression_lf and dynamic_vlan_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-dynamic_vlan_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-dynamic-vlan --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-dynamic-vlan $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-dynamic-vlan + + - name: run multi_vlan tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'multi_vlan_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-multi-vlan + testbed: basic-3 + marker_expression: "ow_regression_lf and multi_vlan_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-multi_vlan_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-multi-vlan --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-multi-vlan $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-multi-vlan + + - name: run strict forwarding tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'strict_forwarding_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-strict-forwarding + testbed: basic-3 + marker_expression: "ow_regression_lf and strict_forwarding_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-strict_forwarding_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-strict-forwarding --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-strict-forwarding $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-strict-forwarding + + - name: run captive portal tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'advanced_captive_portal_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-captive-portal + testbed: basic-3 + marker_expression: "ow_regression_lf and advanced_captive_portal_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-advanced_captive_portal_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-captive-portal --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-captive-portal $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-captive-portal + + - name: run firmware upgrade & downgrade tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'firmware_upgrade_downgrade')" + with: + namespace: ${{ steps.namespace.outputs.name }}-fwd + testbed: basic-3 + marker_expression: "ow_regression_lf and firmware_upgrade_downgrade" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-firmware_upgrade_downgrade + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-fwd --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-fwd $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-fwd + + - name: run ap support bundle tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'asb_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-asb + testbed: basic-3 + marker_expression: "ow_regression_lf and asb_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-asb_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-asb --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-asb $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-asb + + - name: show gw logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owgw + + - name: show fms logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owfms + + - name: show prov logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owprov + + - name: show analytics logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owanalytics + + - name: show subscription (userportal) logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owsub + + - name: show sec logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owsec + + test-edgecore-eap112: + needs: [ "vars", "build" ] + runs-on: [ self-hosted, small ] + timeout-minutes: 1440 + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.ap_models), 'edgecore_eap112')" + env: + AP_MODEL: edgecore_eap112 + steps: + - name: Set AP model output + id: ap_model + run: | + echo "model=${AP_MODEL}" >> $GITHUB_OUTPUT + + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.8" + + + # TODO WIFI-7839 delete when issue is resolved on AWS CLI side + - name: install kubectl + run: | + curl -s -LO "https://dl.k8s.io/release/v1.27.6/bin/linux/amd64/kubectl" + sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl + + - name: install aws CLI tool + run: | + curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" + unzip awscliv2.zip + sudo ./aws/install + + - name: get EKS access credentials + run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} + + - name: prepare namespace name + id: namespace + run: | + NAMESPACE="regression-${{ github.run_id }}-$(echo ${{ steps.ap_model.outputs.model }} | tr '[:upper:]' '[:lower:]' | tr '_' '-')" + echo "name=${NAMESPACE}" >> $GITHUB_OUTPUT + + - name: prepare configuration + run: | + cat << EOF > lab_info.json + ${{ secrets.LAB_INFO_JSON }} + EOF + + + - name: run dfs tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'dfs_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-dfs + testbed: basic-1 + marker_expression: "ow_regression_lf and dfs_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-dfs_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-dfs --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-dfs $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-dfs + + - name: run multipsk tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'multi_psk_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-multipsk + testbed: basic-1 + marker_expression: "ow_regression_lf and multi_psk_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-multi_psk_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-multipsk --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-multipsk $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-multipsk + + - name: run rate_limiting tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'rate_limiting_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-rate-limiting + testbed: basic-1 + marker_expression: "ow_regression_lf and rate_limiting_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-rate_limiting_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-rate-limiting --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-rate-limiting $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-rate-limiting + + - name: run rate_limiting_with_radius tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'rate_limiting_with_radius_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-rate-limiting-radius + testbed: basic-1 + marker_expression: "ow_regression_lf and rate_limiting_with_radius_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-rate_limiting_with_radius_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-rate-limiting-radius --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-rate-limiting-radius $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-rate-limiting-radius + + - name: run dynamic_vlan tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'dynamic_vlan_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-dynamic-vlan + testbed: basic-1 + marker_expression: "ow_regression_lf and dynamic_vlan_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-dynamic_vlan_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-dynamic-vlan --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-dynamic-vlan $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-dynamic-vlan + + - name: run multi_vlan tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'multi_vlan_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-multi-vlan + testbed: basic-1 + marker_expression: "ow_regression_lf and multi_vlan_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-multi_vlan_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-multi-vlan --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-multi-vlan $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-multi-vlan + + - name: run strict forwarding tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'strict_forwarding_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-strict-forwarding + testbed: basic-1 + marker_expression: "ow_regression_lf and strict_forwarding_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-strict_forwarding_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-strict-forwarding --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-strict-forwarding $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-strict-forwarding + + - name: run captive portal tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'advanced_captive_portal_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-captive-portal + testbed: basic-1 + marker_expression: "ow_regression_lf and advanced_captive_portal_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-advanced_captive_portal_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-captive-portal --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-captive-portal $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-captive-portal + + - name: run firmware upgrade & downgrade tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'firmware_upgrade_downgrade')" + with: + namespace: ${{ steps.namespace.outputs.name }}-fwd + testbed: basic-1 + marker_expression: "ow_regression_lf and firmware_upgrade_downgrade" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-firmware_upgrade_downgrade + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-fwd --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-fwd $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-fwd + + - name: run ap support bundle tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'asb_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-asb + testbed: basic-1 + marker_expression: "ow_regression_lf and asb_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-asb_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-asb --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-asb $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-asb + + - name: show gw logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owgw + + - name: show fms logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owfms + + - name: show prov logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owprov + + - name: show analytics logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owanalytics + + - name: show subscription (userportal) logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owsub + + - name: show sec logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owsec + + test-cig-wf189h: + needs: [ "vars", "build" ] + runs-on: [ self-hosted, small ] + timeout-minutes: 1440 + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.ap_models), 'cig_wf189h')" + env: + AP_MODEL: cig_wf189h + steps: + - name: Set AP model output + id: ap_model + run: | + echo "model=${AP_MODEL}" >> $GITHUB_OUTPUT + + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.8" + + + # TODO WIFI-7839 delete when issue is resolved on AWS CLI side + - name: install kubectl + run: | + curl -s -LO "https://dl.k8s.io/release/v1.27.6/bin/linux/amd64/kubectl" + sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl + + - name: install aws CLI tool + run: | + curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" + unzip awscliv2.zip + sudo ./aws/install + + - name: get EKS access credentials + run: aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} + + - name: prepare namespace name + id: namespace + run: | + NAMESPACE="regression-${{ github.run_id }}-$(echo ${{ steps.ap_model.outputs.model }} | tr '[:upper:]' '[:lower:]' | tr '_' '-')" + echo "name=${NAMESPACE}" >> $GITHUB_OUTPUT + + - name: prepare configuration + run: | + cat << EOF > lab_info.json + ${{ secrets.LAB_INFO_JSON }} + EOF + + + - name: run dfs tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'dfs_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-dfs + testbed: basic-4 + marker_expression: "ow_regression_lf and dfs_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-dfs_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-dfs --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-dfs $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-dfs + + - name: run multipsk tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'multi_psk_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-multipsk + testbed: basic-4 + marker_expression: "ow_regression_lf and multi_psk_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-multi_psk_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-multipsk --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-multipsk $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-multipsk + + - name: run rate_limiting tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'rate_limiting_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-rate-limiting + testbed: basic-4 + marker_expression: "ow_regression_lf and rate_limiting_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-rate_limiting_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-rate-limiting --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-rate-limiting $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-rate-limiting + + - name: run rate_limiting_with_radius tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'rate_limiting_with_radius_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-rate-limiting-radius + testbed: basic-4 + marker_expression: "ow_regression_lf and rate_limiting_with_radius_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-rate_limiting_with_radius_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-rate-limiting-radius --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-rate-limiting-radius $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-rate-limiting-radius + + - name: run dynamic_vlan tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'dynamic_vlan_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-dynamic-vlan + testbed: basic-4 + marker_expression: "ow_regression_lf and dynamic_vlan_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-dynamic_vlan_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-dynamic-vlan --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-dynamic-vlan $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-dynamic-vlan + + - name: run multi_vlan tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'multi_vlan_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-multi-vlan + testbed: basic-4 + marker_expression: "ow_regression_lf and multi_vlan_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-multi_vlan_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-multi-vlan --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-multi-vlan $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-multi-vlan + + - name: run strict forwarding tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'strict_forwarding_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-strict-forwarding + testbed: basic-4 + marker_expression: "ow_regression_lf and strict_forwarding_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-strict_forwarding_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-strict-forwarding --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-strict-forwarding $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-strict-forwarding + + - name: run captive portal tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'advanced_captive_portal_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-captive-portal + testbed: basic-4 + marker_expression: "ow_regression_lf and advanced_captive_portal_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-advanced_captive_portal_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-captive-portal --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-captive-portal $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-captive-portal + + - name: run firmware upgrade & downgrade tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'firmware_upgrade_downgrade')" + with: + namespace: ${{ steps.namespace.outputs.name }}-fwd + testbed: basic-4 + marker_expression: "ow_regression_lf and firmware_upgrade_downgrade" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-firmware_upgrade_downgrade + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-fwd --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-fwd $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-fwd + + - name: run ap support bundle tests + uses: ./.github/actions/run-tests + if: "!cancelled() && contains(fromJSON(needs.vars.outputs.marker_expressions), 'asb_tests')" + with: + namespace: ${{ steps.namespace.outputs.name }}-asb + testbed: basic-4 + marker_expression: "ow_regression_lf and asb_tests" + configuration_file: "./lab_info.json" + testing_docker_image: tip-tip-wlan-cloud-docker-repo.jfrog.io/cloud-sdk-nightly:${{ github.run_id }} + additional_args: "-o firmware=${{ needs.vars.outputs.ap_version }} ${{ needs.vars.outputs.additional_arguments }}" + allure_results_artifact_name: allure-results-${{ steps.ap_model.outputs.model }}-asb_tests + dns_records_to_resolve: "sec-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build gw-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build fms-${{ needs.vars.outputs.existing_controller }}.cicd.lab.wlan.tip.build" + + # necessary because if conditionals in composite actions are currently not respected + - name: get tests logs + if: always() + continue-on-error: true + run: | + podname=$(kubectl get pods -n ${{ steps.namespace.outputs.name }}-asb --no-headers -o custom-columns=":metadata.name" -l job-name=testing | sed "s/pod\///") + kubectl logs --timestamps -n ${{ steps.namespace.outputs.name }}-asb $podname || true + + - name: delete namespace + if: always() + continue-on-error: true + run: kubectl delete ns --ignore-not-found=true --wait ${{ steps.namespace.outputs.name }}-asb + + - name: show gw logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owgw + + - name: show fms logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owfms + + - name: show prov logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owprov + + - name: show analytics logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owanalytics + + - name: show subscription (userportal) logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owsub + + - name: show sec logs + if: failure() + run: kubectl -n openwifi-qa01 logs deployment/owsec # Save reports report: if: "!cancelled()" runs-on: ubuntu-latest - needs: [vars, test-cig-wf186h, test-edgecore-eap104, test-cig-wf196, test-udaya-a6-id2, test-sonicfi-rap630c-311g, test-hfcl-ion4xe, test-yuncore-fap655, test-cig-wf189, test-edgecore-eap105, test-sonicfi-rap7110c-341x, test-edgecore-eap101, test-edgecore-eap111] + needs: [vars, test-cig-wf186h, test-edgecore-eap104, test-cig-wf196, test-udaya-a6-id2, test-sonicfi-rap630c-311g, test-hfcl-ion4xe, test-yuncore-fap655, test-cig-wf189, test-edgecore-eap105, test-sonicfi-rap7110c-341x, test-edgecore-eap101, test-edgecore-eap111,test-edgecore-oap103,test-edgecore-eap112,test-cig-wf189h] strategy: fail-fast: false matrix: @@ -4170,7 +5164,7 @@ jobs: # Cleanup cleanup: - needs: [test-cig-wf186h, test-edgecore-eap104, test-cig-wf196, test-udaya-a6-id2, test-sonicfi-rap630c-311g, test-hfcl-ion4xe, test-yuncore-fap655, test-cig-wf189, test-edgecore-eap105, test-sonicfi-rap7110c-341x, test-edgecore-eap101, test-edgecore-eap111] + needs: [test-cig-wf186h, test-edgecore-eap104, test-cig-wf196, test-udaya-a6-id2, test-sonicfi-rap630c-311g, test-hfcl-ion4xe, test-yuncore-fap655, test-cig-wf189, test-edgecore-eap105, test-sonicfi-rap7110c-341x, test-edgecore-eap101, test-edgecore-eap111,test-edgecore-oap103,test-edgecore-eap112,test-cig-wf189h] runs-on: ubuntu-latest if: always() steps: diff --git a/libs/tip_2x/ap_lib.py b/libs/tip_2x/ap_lib.py index 33abd76dd..af049116d 100644 --- a/libs/tip_2x/ap_lib.py +++ b/libs/tip_2x/ap_lib.py @@ -462,9 +462,21 @@ class APLIBS: logging.info("Status count: " + str(status_count_1)) if status_count_1 == 1: logging.info("In Mediatek Chipsets") - cmd = f'cd && cd /sys/kernel/debug/ieee80211/phy1/mt76/ && ls && echo 1 > radar_trigger' + cmd = f'cd && cd //sys/kernel/debug/ieee80211/phy1/mt76/ && ls && echo 1 > radar_trigger' else: - cmd = f'cd && cd /sys/kernel/debug/ath11k/ && cd ipq* && cd mac0 && ls && echo 1 > dfs_simulate_radar' + cmd1 = '[ -f /sys/kernel/debug/ieee80211/phy2/mt76/radar_trigger ] && echo "True" || echo "False"' + output = self.run_generic_command(cmd=cmd1, idx=idx, + print_log=print_log, + attach_allure=attach_allure, + expected_attachment_type=allure.attachment_type.JSON) + ret = output.split("\n") + status_count_1 = int(ret.count("True")) + logging.info("Status count: " + str(status_count_1)) + if status_count_1 == 1: + logging.info("In Mediatek EAP112 Chipset (phy2)") + cmd = f'cd && cd /sys/kernel/debug/ieee80211/phy2/mt76/ && ls && echo 1 > radar_trigger' + else: + cmd = f'cd && cd /sys/kernel/debug/ath11k/ && cd ipq* && cd mac0 && ls && echo 1 > dfs_simulate_radar' elif type_.lower() == "wifi7": cmd1 = '[ -f /sys/kernel/debug/ieee80211/phy0/ath12k_hw1/dfs_simulate_radar ] && echo "True" || echo "False"' output = self.run_generic_command(cmd=cmd1, idx=idx, @@ -478,7 +490,7 @@ class APLIBS: if status_count == 1: cmd = "cd && cd /sys/kernel/debug/ieee80211/phy0/ && cd ath12k_hw1 && echo 1 > dfs_simulate_radar" else: - cmd = f'cd && cd /sys/kernel/debug/ath12k/ && cd qcn* && cd mac1 && ls && echo 1 > dfs_simulate_radar' + cmd = "cd && cd /sys/kernel/debug/ieee80211/phy00/ && cd ath12k_hw1 && echo 1 > dfs_simulate_radar" output = self.run_generic_command(cmd=cmd, idx=idx, print_log=print_log, attach_allure=attach_allure, @@ -525,7 +537,7 @@ class APLIBS: cmd = f'cd && cd /sys/kernel/debug/ath11k/ && cd qcn6122_2 && cd mac0 && logread | grep DFS' else: #cmd = f'cd && cd /sys/kernel/debug/ath11k/ && cd ipq* && cd mac0 && logread | grep DFS' - cmd1 = '[ -f /sys/kernel/debug/ieee80211/phy1/mt76/radar_trigger ] && echo "True" || echo "False"' + cmd1 = '[ -f //sys/kernel/debug/ieee80211/phy1/mt76/radar_trigger ] && echo "True" || echo "False"' output = self.run_generic_command(cmd=cmd1, idx=idx, print_log=print_log, attach_allure=attach_allure, @@ -534,9 +546,21 @@ class APLIBS: status_count_1 = int(ret.count("True")) logging.info("Status count: " + str(status_count_1)) if status_count_1 == 1: - cmd = f'cd && cd /sys/kernel/debug/ieee80211/phy1/mt76/ && logread | grep DFS' + cmd = f'cd && cd //sys/kernel/debug/ieee80211/phy1/mt76/ && logread | grep DFS' else: - cmd = f'cd && cd /sys/kernel/debug/ath11k/ && cd ipq* && cd mac0 && logread | grep DFS' + # cmd = f'cd && cd /sys/kernel/debug/ath11k/ && cd ipq* && cd mac0 && logread | grep DFS' + cmd1 = '[ -f //sys/kernel/debug/ieee80211/phy2/mt76/radar_trigger ] && echo "True" || echo "False"' + output = self.run_generic_command(cmd=cmd1, idx=idx, + print_log=print_log, + attach_allure=attach_allure, + expected_attachment_type=allure.attachment_type.JSON) + ret = output.split("\n") + status_count_1 = int(ret.count("True")) + logging.info("Status count: " + str(status_count_1)) + if status_count_1 == 1: + cmd = f'cd && cd //sys/kernel/debug/ieee80211/phy2/mt76/ && logread | grep DFS' + else: + cmd = f'cd && cd /sys/kernel/debug/ath11k/ && cd ipq* && cd mac0 && logread | grep DFS' elif type_.lower() == "wifi7": cmd1 = '[ -f /sys/kernel/debug/ieee80211/phy0/ath12k_hw1/dfs_simulate_radar ] && echo "True" || echo "False"' output = self.run_generic_command(cmd=cmd1, idx=idx, @@ -545,9 +569,9 @@ class APLIBS: expected_attachment_type=allure.attachment_type.JSON) logging.info("DFS logread output: " + str(output)) if output.__contains__("False"): - cmd = f'cd && cd /sys/kernel/debug/ieee80211/phy0/ath12k_hw1/ && logread | grep DFS' + cmd = f'cd && cd /sys/kernel/debug/ieee80211/phy00/ath12k_hw1/ && logread | grep DFS' else: - cmd = f'cd && cd /sys/kernel/debug/ath12k/ && cd qcn* && cd mac1 && logread | grep DFS' + cmd = f'cd && cd /sys/kernel/debug/ieee80211/phy0/ath12k_hw1/ && logread | grep DFS' try: output = self.run_generic_command(cmd=cmd, idx=idx, @@ -692,4 +716,4 @@ if __name__ == '__main__': # a = obj.get_active_config() # if a == l: # print("a = l") - # print(obj.get_ap_version()) + # print(obj.get_ap_version()) \ No newline at end of file diff --git a/libs/tip_2x/controller.py b/libs/tip_2x/controller.py index 7546a7598..c44dd6c2c 100644 --- a/libs/tip_2x/controller.py +++ b/libs/tip_2x/controller.py @@ -2611,7 +2611,7 @@ class UProfileUtility: ssid_info.append(temp) return ssid_info - def set_radio_config(self, radio_config={}, open_roaming=False): + def set_radio_config(self, radio_config={}, open_roaming=False, ap_mode="wifi6"): if open_roaming: base_radio_config_2g = { "band": "2G", @@ -2627,6 +2627,13 @@ class UProfileUtility: "channel-width": 80, "channel": "auto" } + if ap_mode == "wifi6" or ap_mode =="wifi6e": + base_radio_config_2g["channel-mode"] = "HE" + base_radio_config_5g["channel-mode"] = "HE" + if ap_mode == "wifi7": + logging.info("yes it's wifi7 AP and open_roaming") + base_radio_config_2g["channel-mode"] = "EHT" + base_radio_config_5g["channel-mode"] = "EHT" for band in radio_config: if band == "2G" and radio_config[band] is not None: @@ -2641,22 +2648,33 @@ class UProfileUtility: base_radio_config_2g = { "band": "2G", "country": "US", - "channel-mode": "HE", + "channel-mode": "EHT", "channel": "auto" } base_radio_config_5g = { "band": "5G", "country": "US", "allow-dfs": False, - "channel-mode": "HE", + "channel-mode": "EHT", "channel": "auto" } base_radio_config_6g = { "band": "6G", "country": "US", - "channel-mode": "HE", + "channel-mode": "EHT", "channel": "auto" } + + if ap_mode == "wifi6" or ap_mode =="wifi6e": + base_radio_config_2g["channel-mode"] = "HE" + base_radio_config_5g["channel-mode"] = "HE" + base_radio_config_6g["channel-mode"] = "HE" + if ap_mode == "wifi7": + logging.info("yes it's wifi7 AP") + base_radio_config_2g["channel-mode"] = "EHT" + base_radio_config_5g["channel-mode"] = "EHT" + base_radio_config_6g["channel-mode"] = "EHT" + for band in radio_config: if band == "2G" and radio_config[band] is not None: for keys in radio_config[band]: @@ -2671,6 +2689,8 @@ class UProfileUtility: self.base_profile_config["radios"].append(base_radio_config_2g) self.base_profile_config["radios"].append(base_radio_config_5g) self.base_profile_config["radios"].append(base_radio_config_6g) + + logging.info(f"base_profile_config:{self.base_profile_config}") self.vlan_section["ssids"] = [] self.vlan_ids = [] diff --git a/libs/tip_2x/tip_2x.py b/libs/tip_2x/tip_2x.py index ec86f251e..f6628b311 100644 --- a/libs/tip_2x/tip_2x.py +++ b/libs/tip_2x/tip_2x.py @@ -64,7 +64,8 @@ class tip_2x: "wpa3_enterprise", "wpa_wpa2_enterprise_mixed", "wpa3_enterprise_mixed", - "wpa3_enterprise_192" + "wpa3_enterprise_192", + "owe" ] tip_2x_specific_encryption_translation = {"open": "none", "wpa": "psk", @@ -77,7 +78,8 @@ class tip_2x: "wpa3_enterprise": "wpa3", "wpa_wpa2_enterprise_mixed": "wpa-mixed", "wpa3_enterprise_mixed": "wpa3-mixed", - "wpa3_enterprise_192": "wpa3-192" + "wpa3_enterprise_192": "wpa3-192", + "owe":"owe" } def __init__(self, controller_data=None, target=None, configuration=None, @@ -231,6 +233,12 @@ class tip_2x: requested_combination=None, open_roaming=False): f_conf = self.setup_configuration_data(configuration=configuration, requested_combination=requested_combination) + + # fetch ap_mode from DUT data (ap_mode can be wifii6 or wifi6e or wifi7) + for i in range(0, len(self.device_under_tests_info)): + ap_mode = self.device_under_tests_info[i]["mode"] + logging.info(f"ap_mode:{ap_mode}") + if open_roaming: logging.info("Selected Configuration of open roaming: " + str(json.dumps(f_conf, indent=2))) final_configuration = f_conf.copy() @@ -243,10 +251,11 @@ class tip_2x: # Setup Radio Scenario if final_configuration["rf"] != {}: - profile_object.set_radio_config(radio_config=final_configuration["rf"], open_roaming=open_roaming) + profile_object.set_radio_config(radio_config=final_configuration["rf"], open_roaming=open_roaming, + ap_mode=ap_mode) else: final_configuration["rf"] = {"2G": {}, "5G": {}, "6G": {}} - profile_object.set_radio_config(open_roaming=open_roaming) + profile_object.set_radio_config(open_roaming=open_roaming, ap_mode=ap_mode) for ssid in final_configuration["ssid_modes"]: for ssid_data in final_configuration["ssid_modes"][ssid]: if final_configuration["radius"]: @@ -276,10 +285,10 @@ class tip_2x: # Setup Radio Scenario if final_configuration["rf"] != {}: - profile_object.set_radio_config(radio_config=final_configuration["rf"]) + profile_object.set_radio_config(radio_config=final_configuration["rf"], ap_mode=ap_mode) else: final_configuration["rf"] = {"2G": {}, "5G": {}, "6G": {}} - profile_object.set_radio_config() + profile_object.set_radio_config(ap_mode=ap_mode) for ssid in final_configuration["ssid_modes"]: for ssid_data in final_configuration["ssid_modes"][ssid]: if final_configuration["radius"]: @@ -393,8 +402,8 @@ class tip_2x: logging.info("resp: " + str(resp)) uuid = resp["details"]["uuid"] logging.info("uuid from resp: " + str(uuid)) - logging.info("Waiting for 30 sec after config push") - time.sleep(30) + logging.info("Waiting for 45 sec after config push") + time.sleep(45) r_data = self.dut_library_object.ubus_call_ucentral_status(idx=i, print_log=True, attach_allure=False) latest_uuid_after_apply = r_data["latest"] active_uuid_after_apply = r_data["active"] @@ -425,9 +434,9 @@ class tip_2x: pytest.fail("Config is not Properly Applied on AP") self.dut_library_object.get_active_config(idx=i, print_log=True, attach_allure=False) - logging.info("Waiting for 30 Seconds for All interfaces to come up") + logging.info("Waiting for 45 Seconds for All interfaces to come up") # wait time interfaces to come up - time.sleep(30) + time.sleep(45) # x = 0 # while uuid_before_apply == uuid_after_apply: @@ -502,15 +511,30 @@ class tip_2x: n = len(temp_data[dut]) lst = list(range(0, n)) ret_val[dut]["ssid_data"] = dict.fromkeys(lst) + fields = ["SSID", "Encryption", "Password", "Band", "BSSID"] for j in ret_val[dut]["ssid_data"]: - a = temp_data[dut][j].copy() - a = dict.fromkeys(["ssid", "encryption", "password", "band", "bssid"]) - a["ssid"] = temp_data[dut][j][0] - a["encryption"] = temp_data[dut][j][1] - a["password"] = temp_data[dut][j][2] - a["band"] = temp_data[dut][j][3] - a["bssid"] = temp_data[dut][j][4] - ret_val[dut]["ssid_data"][j] = a + ssid_entry = temp_data[dut][j] + expected_length = 5 + if len(ssid_entry) < expected_length: + missing_fields = [] + # Check each field for its presence + for index, field in enumerate(fields): + if len(ssid_entry) <= index: + missing_fields.append(field) + if missing_fields: + logging.error( + f"Error: Missing field(s) {', '.join(missing_fields)} for SSID entry '{ssid_entry[0]}' in {ssid_entry}. Please check iwinfo") + pytest.fail( + f"Error: Missing field(s) {', '.join(missing_fields)} for SSID entry '{ssid_entry[0]}' in {ssid_entry}. Please check iwinfo") + else: + a = temp_data[dut][j].copy() + a = dict.fromkeys(["ssid", "encryption", "password", "band", "bssid"]) + a["ssid"] = temp_data[dut][j][0] + a["encryption"] = temp_data[dut][j][1] + a["password"] = temp_data[dut][j][2] + a["band"] = temp_data[dut][j][3] + a["bssid"] = temp_data[dut][j][4] + ret_val[dut]["ssid_data"][j] = a temp = ret_val[dut]["radio_data"].copy() logging.info(f"temp:{temp}") for j in temp: @@ -660,14 +684,19 @@ class tip_2x: band = "2G" elif o[i + 9].__contains__("5."): band = "5G" + elif "unknown" in o[i + 9]: + logging.info(f"Error: {o[i - 1]} has an unknown channel frequency from iwinfo") + pytest.fail(f"Error: {o[i - 1]} has an unknown channel frequency from iwinfo") else: band = "6G" iwinfo_bssid_data[o[i - 1]] = [o[i + 1].replace('"', ''), o[i + 4], band] + logging.info(f"iwinfo_bssid_data:{iwinfo_bssid_data}") for p in iwinfo_bssid_data: for q in ssid_info_sdk: if iwinfo_bssid_data[p][0] == q[0] and iwinfo_bssid_data[p][2] == q[3]: q.append(iwinfo_bssid_data[p][1]) ssid_info_sdk.append(channel_info) + logging.info(f"ssid_info_sdk:{ssid_info_sdk}") return ssid_info_sdk def get_dut_version(self): diff --git a/tests/conftest.py b/tests/conftest.py index d19e8581a..4d7d22b4e 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -252,7 +252,7 @@ def get_security_flags(): security = ["open", "wpa", "wep", "wpa2_personal", "wpa3_personal", "wpa3_personal_mixed", "wpa_wpa2_enterprise_mixed", "wpa2_eap", "wpa2_only_eap", "wpa_wpa2_personal_mixed", "wpa_enterprise", "wpa2_enterprise", "wpa3_enterprise_mixed", - "wpa3_enterprise", "twog", "fiveg", "sixg", "fiveg_lower", "fiveg_upper", "radius"] + "wpa3_enterprise", "twog", "fiveg", "sixg", "fiveg_lower", "fiveg_upper", "radius", "owe"] yield security diff --git a/tests/e2e/basic/advanced_captive_portal_tests/external_captive_portal_tests/open/test_click_to_continue_bridge.py b/tests/e2e/basic/advanced_captive_portal_tests/external_captive_portal_tests/open/test_click_to_continue_bridge.py index f676f9f97..e8b061f43 100644 --- a/tests/e2e/basic/advanced_captive_portal_tests/external_captive_portal_tests/open/test_click_to_continue_bridge.py +++ b/tests/e2e/basic/advanced_captive_portal_tests/external_captive_portal_tests/open/test_click_to_continue_bridge.py @@ -4,6 +4,7 @@ pytest -m "external_captive_portal_tests and bridge" """ +import copy import logging import re import time @@ -12,47 +13,127 @@ import paramiko import pytest from tabulate import tabulate -pytestmark = [pytest.mark.external_captive_portal_tests, pytest.mark.bridge, pytest.mark.advanced_captive_portal_tests] +pytestmark = [pytest.mark.external_captive_portal_tests, pytest.mark.bridge, pytest.mark.advanced_captive_portal_tests, + pytest.mark.click_to_continue] + +captive = { + "auth-mode": "uam", + "uam-port": 3990, + "uam-secret": "hotsys123", + "uam-server": "https://customer.hotspotsystem.com/customer/hotspotlogin.php", + "nasid": "AlmondLabs", + "auth-server": "radius.hotspotsystem.com", + "auth-port": 1812, + "auth-secret": "hotsys123", + "walled-garden-fqdn": ["*.google.com", "telecominfraproject.com", "customer.hotspotsystem.com", "youtube.com"] +} setup_params_general = { "mode": "BRIDGE", "ssid_modes": { "open": [ {"ssid_name": "ssid_ext_cap_portal_open_2g_ctc", "appliedRadios": ["2G"], "security_key": "something", - "captive": { - "auth-mode": "uam", - "uam-port": 3990, - "uam-secret": "hotsys123", - "uam-server": "https://customer.hotspotsystem.com/customer/hotspotlogin.php", - "nasid": "AlmondLabs", - "auth-server": "radius.hotspotsystem.com", - "auth-port": 1812, - "auth-secret": "hotsys123", - "walled-garden-fqdn": [ - "*.google.com", - "telecominfraproject.com", - "customer.hotspotsystem.com", - "youtube.com" - ] + "captive": captive + }, + {"ssid_name": "ssid_ext_cap_portal_open_5g_ctc", "appliedRadios": ["5G"], "security_key": "something", + "captive": captive } + ], + "owe": [ + {"ssid_name": "ext_cap_portal_2g_ctc", "appliedRadios": ["2G"], "security_key": "something", + "captive": captive + }, + {"ssid_name": "ext_cap_portal_6g_ctc", "appliedRadios": ["6G"], "security_key": "something", + "captive": captive } ]}, - "rf": {}, + "rf": { + "2G": { + "band": "2G", + "channel": 6, + "channel-mode": "HE" + }, + "5G": { + "band": "5G", + "channel": 36, + "channel-mode": "HE" + }, + "6G": { + "band": "6G", + "channel": 33, + "channel-width": 160, + "channel-mode": "HE" + } + }, "radius": False } +# Deep copy the original dictionary to avoid modifying it +setup_params_general_wifi7 = copy.deepcopy(setup_params_general) + +# Update channel-mode to 'EHT' for all bands +for band in setup_params_general_wifi7["rf"]: + setup_params_general_wifi7["rf"][band]["channel-mode"] = "EHT" + if band == "6G": + setup_params_general_wifi7["rf"][band]["channel-width"] = 320 + +testbed_details_global = None +dut_data = {} +is_bw320 = False +is_ht160 = False + +@pytest.fixture(scope="class") +def setup_initial_configuration(request): + """Calls setup_testbed automatically before tests""" + global testbed_details_global + global setup_params_general + global dut_data + global is_bw320 + global is_ht160 + selected_tb = request.getfixturevalue("selected_testbed") + print(f"Selected Testbed: {selected_tb}") + testbed_details_global = request.getfixturevalue("get_testbed_details") + assert testbed_details_global is not None, "Testbed details should not be None" + print(f"Initialized Testbed Details: {testbed_details_global}") + + # Extract 'mode' from the first device in 'device_under_tests' + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + if ap_mode == "wifi7": + is_bw320 = True + if ap_mode == "wifi6e": + is_ht160 = True + + # Assign setup_params_general based on mode + if ap_mode == "wifi6" or ap_mode == "wifi6e": + setup_params_general = setup_params_general + elif ap_mode == "wifi7": + setup_params_general = setup_params_general_wifi7 + else: + print(f"Unknown mode: {ap_mode}. Defaulting to None") + + print(f"Setup Params Assigned: {setup_params_general}") + + get_marker = request.getfixturevalue("get_markers") + requested_combination = [] + for key in get_marker: + if get_marker[key]: + requested_combination.append(get_marker[key]) + + logging.info(f"requested_combination:::{requested_combination}") + get_target_obj = request.getfixturevalue("get_target_object") + logging.info("ready to start setup_basic_configuration") + logging.info(f"setup_params_general value before start:{setup_params_general}") + if isinstance(setup_params_general, tuple): + setup_params_general = setup_params_general[0] + dut_data = get_target_obj.setup_basic_configuration(configuration=setup_params_general, + requested_combination=requested_combination) + + logging.info(f"setup_basic_configuration dut data:{dut_data}") @allure.feature("Advanced Captive Portal Test") @allure.parent_suite("Advanced Captive Portal Tests") @allure.suite(suite_name="External Captive Portal") @allure.sub_suite(sub_suite_name="BRIDGE Mode") -@pytest.mark.parametrize( - 'setup_configuration', - [setup_params_general], - indirect=True, - scope="class" -) -@pytest.mark.usefixtures("setup_configuration") class TestBridgeModeExternalCaptivePortal(object): """ External Captive Portal Test: BRIDGE Mode @@ -61,17 +142,17 @@ class TestBridgeModeExternalCaptivePortal(object): @pytest.mark.open @pytest.mark.twog - @pytest.mark.click_to_continue @pytest.mark.ow_regression_lf @allure.title("Click-to-continue mode with open encryption 2.4 GHz Band Bridge mode") @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-11148", name="WIFI-11148") - def test_bridge_open_2g_click_to_continue(self, get_test_library, get_dut_logs_per_test_case, - get_test_device_logs, check_connectivity, setup_configuration, + def test_bridge_open_2g_click_to_continue(self, setup_initial_configuration, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, check_connectivity, get_testbed_details, get_target_object): """ BRIDGE Mode External Captive Portal Test with open encryption 2.4 GHz Band pytest -m "advanced_captive_portal_tests and external_captive_portal_tests and open and twog and bridge and click_to_continue" """ + get_test_library.check_band_ap(band="twog") def run_command_using_ssh(ssh_client, command: str): output = "" try_count = 1 @@ -96,9 +177,193 @@ class TestBridgeModeExternalCaptivePortal(object): radio_port_name = list(get_test_library.get_radio_availabilities(num_stations_2g=1)[0].keys())[0] security = "open" station = 'sta_ecp' + desired_band = "2G" + ssid_list = setup_params_general["ssid_modes"]["open"] + ssid_name = None + for ssid_info in ssid_list: + if desired_band in ssid_info["appliedRadios"]: + ssid_name = ssid_info["ssid_name"] + break + logging.info(f"ssid_name:{ssid_name}") + if ssid_name is None: + raise Exception(f"No SSID found configured for {desired_band}") logging.info(f"Creating a station on the configured ssid on {radio_port_name} radio...") sta_got_ip = get_test_library.client_connect_using_radio( - ssid=setup_params_general["ssid_modes"][security][0]["ssid_name"], + ssid=ssid_name, + passkey="[BLANK]", + security="open", + mode=setup_params_general["mode"], + radio=radio_port_name, + station_name=[station], + attach_port_info=False, + ) + + sta_info = get_test_library.json_get(_req_url=f"port/1/1/{station}") + dict_table_sta = { + "Key": list(sta_info["interface"].keys()), + "Value": list(sta_info["interface"].values()) + } + data_table_sta = tabulate(dict_table_sta, headers='keys', tablefmt='fancy_grid') + logging.info(f"Stations Data ({station}): \n{data_table_sta}\n") + allure.attach(name=f"Stations Data ({station})", body=str(data_table_sta)) + + if sta_got_ip is False: + logging.info("Station Failed to get IP") + pytest.fail("Station Failed to get IP") + + logging.info("Connecting SSH connection...") + hostname = get_test_library.manager_ip + port = get_test_library.manager_ssh_port + username = 'root' + password = 'lanforge' + ping_host = "google.com" + ping_count = 10 + ping_command = f"/home/lanforge/vrf_exec.bash {station} ping -c {ping_count} {ping_host}" + client = paramiko.SSHClient() + try: + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect(hostname, port=port, username=username, password=password) + + logging.info("Making sure client not getting internet access before UAM authentication...") + ping_output_pre_authentication = run_command_using_ssh(client, ping_command) + + logging.info(f"\nBefore Captive Portal-UAM authentication:\n{ping_output_pre_authentication}\n") + allure.attach(name="Before Captive Portal-UAM authentication, station ping response (google.com)", + body=str(ping_output_pre_authentication)) + + if "100% packet loss" not in ping_output_pre_authentication: + logging.info("Client already have internet access before UAM authentication!!!") + pytest.fail("Client already have internet access before UAM authentication") + logging.info("Client do not have internet access before UAM authentication.") + + logging.info("Getting the inet ip address...") + logging.info(f"AP idx: {get_test_library.dut_data.index(dut)}") + cmd_output = get_target_object.get_dut_library_object().run_generic_command( + cmd="ifconfig up0v0", + idx=get_test_library.dut_data.index(dut), + attach_allure=False + ) + ip_pattern = re.compile(r"inet addr:(\d+\.\d+\.\d+\.\d+)") + match = ip_pattern.search(cmd_output) + inet_ip_addr = match.group(1) + logging.info(f"inet ip addr: {inet_ip_addr}") + + expected_location = f"/home/lanforge/vrf_exec.bash {station} curl -I http://{inet_ip_addr}/hotspot/" + expected_location_output = run_command_using_ssh(client, expected_location) + + challenge_link = re.findall(r'^Location:\s+(.*?)\s*$', expected_location_output, re.MULTILINE)[0] + logging.info(f"Redirection link: {challenge_link}") + + url_info = {} + for field in challenge_link.split('?')[1].split('&'): + key_val_list = field.split('=') + if len(key_val_list) == 2 and len(key_val_list[1]) != 0: + url_info[key_val_list[0]] = key_val_list[1] + logging.info(f"url_info: {url_info}") + + challenge = url_info['challenge'] + nasid = url_info['nasid'] + station_mac = url_info['mac'] + uamport = url_info['uamport'] + + link = ( + f"https://customer.hotspotsystem.com/customer/hotspotlogin.php?name=&email=&company=&address=" + f"&city=&state=&country=&zip=&phone=&capture_custom_1=&capture_custom_2=&capture_custom_3=" + f"&capture_custom_4=&capture_custom_5=&ssl-login=&chal={challenge}&uamip={inet_ip_addr}" + f"&uamport={uamport}&nasid={nasid}&mac={station_mac}&userurl=&login=login&skin_id=" + f"&uid={station_mac}&pwd=password&operator={nasid}&location_id=1&lang=en&agree=1" + ) + + expected_302 = f'/home/lanforge/vrf_exec.bash {station} curl -I "{link}"' + response_302 = run_command_using_ssh(client, expected_302) + + logging.info(f"\n{response_302}") + allure.attach(name="Expected 302 response: ", body=str(response_302), + attachment_type=allure.attachment_type.TEXT) + + link_to_hit = re.findall(r'^Location:\s+(.*?)\s*$', response_302, re.MULTILINE)[0] + logging.info(f"Link to hit: {link_to_hit}") + + cmd_to_authenticate = f'/home/lanforge/vrf_exec.bash {station} curl "{link_to_hit}"' + authentication_response = run_command_using_ssh(client, cmd_to_authenticate) + + logging.info(f"\n{authentication_response}\n") + allure.attach(name="Response from captive portal: ", + body=authentication_response, attachment_type=allure.attachment_type.HTML) + + if "

Connected

" not in authentication_response: + logging.info("Captive portal authentication Failed") + pytest.fail("Captive portal authentication Failed") + + logging.info("Captive portal authentication successful! Checking if client got internet access...") + ping_output_post_authentication = run_command_using_ssh(client, ping_command) + + logging.info(f"\nAfter Captive Portal-UAM authentication:\n{ping_output_post_authentication}\n") + allure.attach(name="After Captive Portal-UAM authentication, station ping response (google.com)", + body=str(ping_output_post_authentication)) + + if "100% packet loss" in ping_output_post_authentication: + logging.info("Client did not get internet access even after authentication!!!") + pytest.fail("Client did not get internet access even after authentication") + except Exception as e: + logging.error(f"Error occurred: {e}", exc_info=True) + pytest.fail(f"Error occurred: {e}") + finally: + client.close() + + @pytest.mark.open + @pytest.mark.fiveg + @pytest.mark.ow_regression_lf + @allure.title("Click-to-continue mode with open encryption 5 GHz Band Bridge mode") + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14498", name="WIFI-14498") + def test_bridge_open_5g_click_to_continue(self, setup_initial_configuration, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, check_connectivity, + get_testbed_details, get_target_object): + """ + BRIDGE Mode External Captive Portal Test with open encryption 5 GHz Band + pytest -m "advanced_captive_portal_tests and external_captive_portal_tests and open and fiveg and bridge and click_to_continue" + """ + get_test_library.check_band_ap(band="fiveg") + def run_command_using_ssh(ssh_client, command: str): + output = "" + try_count = 1 + while output.strip() == "" and try_count <= 10: + try: + try_count += 1 + time.sleep(2) + logging.info(f"Executing command: {command}") + stdin, stdout, stderr = ssh_client.exec_command(command) + output = stdout.read().decode() + except Exception as exc: + logging.error(f"Handled Exception while running {command}: {exc}", exc_info=True) + + if output.strip() == "": + allure.attach(name="No response while running following command:", body=f"{command}") + raise Exception("No output from command, check test body!") + return output + + for dut in get_test_library.dut_data: + get_test_library.pre_cleanup() + + radio_port_dict = get_test_library.get_radio_availabilities(num_stations_5g=1) + logging.info(f"radio_port_dict value:{radio_port_dict}") + radio_port_name = list(radio_port_dict[1].keys())[0] + security = "open" + station = 'sta_ecp' + desired_band = "5G" + ssid_list = setup_params_general["ssid_modes"]["open"] + ssid_name = None + for ssid_info in ssid_list: + if desired_band in ssid_info["appliedRadios"]: + ssid_name = ssid_info["ssid_name"] + break + logging.info(f"ssid_name:{ssid_name}") + if ssid_name is None: + raise Exception(f"No SSID found configured for {desired_band}") + logging.info(f"Creating a station on the configured ssid on {radio_port_name} radio...") + + sta_got_ip = get_test_library.client_connect_using_radio( + ssid=ssid_name, passkey="[BLANK]", security="open", mode=setup_params_general["mode"], @@ -106,6 +371,178 @@ class TestBridgeModeExternalCaptivePortal(object): station_name=[station], attach_port_info=False ) + logging.info("station creation done") + + sta_info = get_test_library.json_get(_req_url=f"port/1/1/{station}") + dict_table_sta = { + "Key": list(sta_info["interface"].keys()), + "Value": list(sta_info["interface"].values()) + } + data_table_sta = tabulate(dict_table_sta, headers='keys', tablefmt='fancy_grid') + logging.info(f"Stations Data ({station}): \n{data_table_sta}\n") + allure.attach(name=f"Stations Data ({station})", body=str(data_table_sta)) + + if sta_got_ip is False: + logging.info("Station Failed to get IP") + pytest.fail("Station Failed to get IP") + + logging.info("Connecting SSH connection...") + hostname = get_test_library.manager_ip + port = get_test_library.manager_ssh_port + username = 'root' + password = 'lanforge' + ping_host = "google.com" + ping_count = 10 + ping_command = f"/home/lanforge/vrf_exec.bash {station} ping -c {ping_count} {ping_host}" + client = paramiko.SSHClient() + try: + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect(hostname, port=port, username=username, password=password) + + logging.info("Making sure client not getting internet access before UAM authentication...") + ping_output_pre_authentication = run_command_using_ssh(client, ping_command) + + logging.info(f"\nBefore Captive Portal-UAM authentication:\n{ping_output_pre_authentication}\n") + allure.attach(name="Before Captive Portal-UAM authentication, station ping response (google.com)", + body=str(ping_output_pre_authentication)) + + if "100% packet loss" not in ping_output_pre_authentication: + logging.info("Client already have internet access before UAM authentication!!!") + pytest.fail("Client already have internet access before UAM authentication") + logging.info("Client do not have internet access before UAM authentication.") + + logging.info("Getting the inet ip address...") + logging.info(f"AP idx: {get_test_library.dut_data.index(dut)}") + cmd_output = get_target_object.get_dut_library_object().run_generic_command( + cmd="ifconfig up0v0", + idx=get_test_library.dut_data.index(dut), + attach_allure=False + ) + ip_pattern = re.compile(r"inet addr:(\d+\.\d+\.\d+\.\d+)") + match = ip_pattern.search(cmd_output) + inet_ip_addr = match.group(1) + logging.info(f"inet ip addr: {inet_ip_addr}") + + expected_location = f"/home/lanforge/vrf_exec.bash {station} curl -I http://{inet_ip_addr}/hotspot/" + expected_location_output = run_command_using_ssh(client, expected_location) + + challenge_link = re.findall(r'^Location:\s+(.*?)\s*$', expected_location_output, re.MULTILINE)[0] + logging.info(f"Redirection link: {challenge_link}") + + url_info = {} + for field in challenge_link.split('?')[1].split('&'): + key_val_list = field.split('=') + if len(key_val_list) == 2 and len(key_val_list[1]) != 0: + url_info[key_val_list[0]] = key_val_list[1] + logging.info(f"url_info: {url_info}") + + challenge = url_info['challenge'] + nasid = url_info['nasid'] + station_mac = url_info['mac'] + uamport = url_info['uamport'] + + link = ( + f"https://customer.hotspotsystem.com/customer/hotspotlogin.php?name=&email=&company=&address=" + f"&city=&state=&country=&zip=&phone=&capture_custom_1=&capture_custom_2=&capture_custom_3=" + f"&capture_custom_4=&capture_custom_5=&ssl-login=&chal={challenge}&uamip={inet_ip_addr}" + f"&uamport={uamport}&nasid={nasid}&mac={station_mac}&userurl=&login=login&skin_id=" + f"&uid={station_mac}&pwd=password&operator={nasid}&location_id=1&lang=en&agree=1" + ) + expected_302 = f'/home/lanforge/vrf_exec.bash {station} curl -I "{link}"' + response_302 = run_command_using_ssh(client, expected_302) + + logging.info(f"\n{response_302}") + allure.attach(name="Expected 302 response: ", body=str(response_302), + attachment_type=allure.attachment_type.TEXT) + + link_to_hit = re.findall(r'^Location:\s+(.*?)\s*$', response_302, re.MULTILINE)[0] + logging.info(f"Link to hit: {link_to_hit}") + + cmd_to_authenticate = f'/home/lanforge/vrf_exec.bash {station} curl "{link_to_hit}"' + authentication_response = run_command_using_ssh(client, cmd_to_authenticate) + + logging.info(f"\n{authentication_response}\n") + allure.attach(name="Response from captive portal: ", + body=authentication_response, attachment_type=allure.attachment_type.HTML) + + if "

Connected

" not in authentication_response: + logging.info("Captive portal authentication Failed") + pytest.fail("Captive portal authentication Failed") + + logging.info("Captive portal authentication successful! Checking if client got internet access...") + ping_output_post_authentication = run_command_using_ssh(client, ping_command) + + logging.info(f"\nAfter Captive Portal-UAM authentication:\n{ping_output_post_authentication}\n") + allure.attach(name="After Captive Portal-UAM authentication, station ping response (google.com)", + body=str(ping_output_post_authentication)) + + if "100% packet loss" in ping_output_post_authentication: + logging.info("Client did not get internet access even after authentication!!!") + pytest.fail("Client did not get internet access even after authentication") + except Exception as e: + logging.error(f"Error occurred: {e}", exc_info=True) + pytest.fail(f"Error occurred: {e}") + finally: + client.close() + + @pytest.mark.owe + @pytest.mark.twog + @pytest.mark.sixg + @pytest.mark.ow_regression_lf + @allure.title("Click-to-continue mode with owe encryption 6 GHz Band Bridge mode") + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14498", name="WIFI-14498") + def test_bridge_6g_click_to_continue(self, setup_initial_configuration, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, check_connectivity, + get_testbed_details, get_target_object): + """ + BRIDGE Mode External Captive Portal Test with owe encryption 6 GHz Band + pytest -m "advanced_captive_portal_tests and external_captive_portal_tests and owe and sixg and bridge and click_to_continue" + """ + get_test_library.check_band_ap(band="sixg") + def run_command_using_ssh(ssh_client, command: str): + output = "" + try_count = 1 + while output.strip() == "" and try_count <= 10: + try: + try_count += 1 + time.sleep(2) + logging.info(f"Executing command: {command}") + stdin, stdout, stderr = ssh_client.exec_command(command) + output = stdout.read().decode() + except Exception as exc: + logging.error(f"Handled Exception while running {command}: {exc}", exc_info=True) + + if output.strip() == "": + allure.attach(name="No response while running following command:", body=f"{command}") + raise Exception("No output from command, check test body!") + return output + + for dut in get_test_library.dut_data: + get_test_library.pre_cleanup() + + radio_port_name = list(get_test_library.get_radio_availabilities(num_stations_6g=1).keys())[0] + station = 'sta_ecp' + desired_band = "6G" + ssid_list = setup_params_general["ssid_modes"]["owe"] + ssid_name = None + for ssid_info in ssid_list: + if desired_band in ssid_info["appliedRadios"]: + ssid_name = ssid_info["ssid_name"] + break + logging.info(f"ssid_name:{ssid_name}") + if ssid_name is None: + raise Exception(f"No SSID found configured for {desired_band}") + logging.info(f"Creating a station on the configured ssid on {radio_port_name} radio...") + sta_got_ip = get_test_library.client_connect_using_radio( + ssid=ssid_name, + passkey="[BLANK]", + security="owe", + mode=setup_params_general["mode"], + radio=radio_port_name, + station_name=[station], + attach_port_info=False, enable_owe = True, + is_bw320=is_bw320, is_ht160=is_ht160 + ) sta_info = get_test_library.json_get(_req_url=f"port/1/1/{station}") dict_table_sta = { diff --git a/tests/e2e/basic/advanced_captive_portal_tests/external_captive_portal_tests/open/test_click_to_continue_nat.py b/tests/e2e/basic/advanced_captive_portal_tests/external_captive_portal_tests/open/test_click_to_continue_nat.py index fad223246..643d27daa 100644 --- a/tests/e2e/basic/advanced_captive_portal_tests/external_captive_portal_tests/open/test_click_to_continue_nat.py +++ b/tests/e2e/basic/advanced_captive_portal_tests/external_captive_portal_tests/open/test_click_to_continue_nat.py @@ -4,6 +4,7 @@ pytest -m "external_captive_portal_tests and NAT" """ +import copy import logging import re import time @@ -12,14 +13,9 @@ import paramiko import pytest from tabulate import tabulate -pytestmark = [pytest.mark.external_captive_portal_tests, pytest.mark.NAT, pytest.mark.advanced_captive_portal_tests] +pytestmark = [pytest.mark.external_captive_portal_tests, pytest.mark.nat, pytest.mark.advanced_captive_portal_tests, pytest.mark.click_to_continue] -setup_params_general = { - "mode": "NAT", - "ssid_modes": { - "open": [ - {"ssid_name": "ssid_ext_cap_portal_open_2g_ctc", "appliedRadios": ["2G"], "security_key": "something", - "captive": { +captive = { "auth-mode": "uam", "uam-port": 3990, "uam-secret": "hotsys123", @@ -35,43 +31,132 @@ setup_params_general = { "youtube.com" ] } + +setup_params_general = { + "mode": "NAT", + "ssid_modes": { + "open": [ + {"ssid_name": "ssid_ext_cap_portal_open_2g_ctc", "appliedRadios": ["2G"], "security_key": "something", + "captive": captive + }, + {"ssid_name": "ssid_ext_cap_portal_open_5g_ctc", "appliedRadios": ["5G"], "security_key": "something", + "captive": captive + } + ], + "owe": [ + {"ssid_name": "ext_cap_portal_2g_ctc", "appliedRadios": ["2G"], "security_key": "something", + "captive": captive + }, + {"ssid_name": "ext_cap_portal_6g_ctc", "appliedRadios": ["6G"], "security_key": "something", + "captive": captive } ]}, - "rf": {}, + "rf": { + "2G": { + "band": "2G", + "channel": 6, + "channel-mode": "HE" + }, + "5G": { + "band": "5G", + "channel": 36, + "channel-mode": "HE" + }, + "6G": { + "band": "6G", + "channel": 33, + "channel-width": 160, + "channel-mode": "HE" + } + }, "radius": False } +# Deep copy the original dictionary to avoid modifying it +setup_params_general_wifi7 = copy.deepcopy(setup_params_general) + +# Update channel-mode to 'EHT' for all bands +for band in setup_params_general_wifi7["rf"]: + setup_params_general_wifi7["rf"][band]["channel-mode"] = "EHT" + if band == "6G": + setup_params_general_wifi7["rf"][band]["channel-width"] = 320 + +testbed_details_global = None +dut_data = {} +is_bw320 = False +is_ht160 = False + +@pytest.fixture(scope="class") +def setup_initial_configuration(request): + """Calls setup_testbed automatically before tests""" + global testbed_details_global + global setup_params_general + global dut_data + global is_bw320 + global is_ht160 + selected_tb = request.getfixturevalue("selected_testbed") + print(f"Selected Testbed: {selected_tb}") + testbed_details_global = request.getfixturevalue("get_testbed_details") + assert testbed_details_global is not None, "Testbed details should not be None" + print(f"Initialized Testbed Details: {testbed_details_global}") + + # Extract 'mode' from the first device in 'device_under_tests' + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + if ap_mode == "wifi7": + is_bw320 = True + if ap_mode == "wifi6e": + is_ht160 = True + + # Assign setup_params_general based on mode + if ap_mode == "wifi6" or ap_mode == "wifi6e": + setup_params_general = setup_params_general + elif ap_mode == "wifi7": + setup_params_general = setup_params_general_wifi7 + else: + print(f"Unknown mode: {ap_mode}. Defaulting to None") + + print(f"Setup Params Assigned: {setup_params_general}") + + get_marker = request.getfixturevalue("get_markers") + requested_combination = [] + for key in get_marker: + if get_marker[key]: + requested_combination.append(get_marker[key]) + + logging.info(f"requested_combination:::{requested_combination}") + get_target_obj = request.getfixturevalue("get_target_object") + logging.info("ready to start setup_basic_configuration") + logging.info(f"setup_params_general value before start:{setup_params_general}") + if isinstance(setup_params_general, tuple): + setup_params_general = setup_params_general[0] + dut_data = get_target_obj.setup_basic_configuration(configuration=setup_params_general, + requested_combination=requested_combination) + + logging.info(f"setup_basic_configuration dut data:{dut_data}") @allure.feature("Advanced Captive Portal Test") @allure.parent_suite("Advanced Captive Portal Tests") @allure.suite(suite_name="External Captive Portal") @allure.sub_suite(sub_suite_name="NAT Mode") -@pytest.mark.parametrize( - 'setup_configuration', - [setup_params_general], - indirect=True, - scope="class" -) -@pytest.mark.usefixtures("setup_configuration") class TestNatModeExternalCaptivePortal(object): """ External Captive Portal Test: NAT Mode - pytest -m "advanced_captive_portal_tests and NAT and external_captive_portal_tests" + pytest -m "advanced_captive_portal_tests and nat and external_captive_portal_tests" """ @pytest.mark.open @pytest.mark.twog - @pytest.mark.click_to_continue @pytest.mark.ow_regression_lf @allure.title("Click-to-continue mode with open encryption 2.4 GHz Band NAT mode") @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14124", name="WIFI-14124") - def test_nat_open_2g_click_to_continue(self, get_test_library, get_dut_logs_per_test_case, - get_test_device_logs, check_connectivity, setup_configuration, - get_testbed_details, get_target_object): + def test_nat_open_2g_click_to_continue(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case,get_test_device_logs, check_connectivity, + get_testbed_details, get_target_object): """ NAT Mode External Captive Portal Test with open encryption 2.4 GHz Band - pytest -m "advanced_captive_portal_tests and external_captive_portal_tests and open and twog and NAT and click_to_continue" + pytest -m "advanced_captive_portal_tests and external_captive_portal_tests and open and twog and nat and click_to_continue" """ + get_test_library.check_band_ap(band="twog") def run_command_using_ssh(ssh_client, command: str): output = "" try_count = 1 @@ -96,13 +181,24 @@ class TestNatModeExternalCaptivePortal(object): radio_port_name = list(get_test_library.get_radio_availabilities(num_stations_2g=1)[0].keys())[0] security = "open" station = 'sta_ecp' + desired_band = "2G" + ssid_list = setup_params_general["ssid_modes"]["open"] + ssid_name = None + for ssid_info in ssid_list: + if desired_band in ssid_info["appliedRadios"]: + ssid_name = ssid_info["ssid_name"] + break + logging.info(f"ssid_name:{ssid_name}") + if ssid_name is None: + raise Exception(f"No SSID found configured for {desired_band}") logging.info(f"Creating a station on the configured ssid on {radio_port_name} radio...") sta_got_ip = get_test_library.client_connect_using_radio( - ssid=setup_params_general["ssid_modes"][security][0]["ssid_name"], + ssid=ssid_name, passkey="[BLANK]", security="open", mode="NAT-WAN", radio=radio_port_name, + band="twog", station_name=[station], attach_port_info=False ) @@ -218,3 +314,348 @@ class TestNatModeExternalCaptivePortal(object): pytest.fail(f"Error occurred: {e}") finally: client.close() + + @pytest.mark.open + @pytest.mark.fiveg + @pytest.mark.ow_regression_lf + @allure.title("Click-to-continue mode with open encryption 5 GHz Band NAT mode") + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14498", name="WIFI-14498") + def test_nat_open_5g_click_to_continue(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case, get_test_device_logs, check_connectivity, + get_testbed_details, get_target_object): + """ + NAT Mode External Captive Portal Test with open encryption 5 GHz Band + pytest -m "advanced_captive_portal_tests and external_captive_portal_tests and open and fiveg and nat and click_to_continue" + """ + get_test_library.check_band_ap(band="fiveg") + def run_command_using_ssh(ssh_client, command: str): + output = "" + try_count = 1 + while output.strip() == "" and try_count <= 10: + try: + try_count += 1 + time.sleep(2) + logging.info(f"Executing command: {command}") + stdin, stdout, stderr = ssh_client.exec_command(command) + output = stdout.read().decode() + except Exception as exc: + logging.error(f"Handled Exception while running {command}: {exc}", exc_info=True) + + if output.strip() == "": + allure.attach(name="No response while running following command:", body=f"{command}") + raise Exception("No output from command, check test body!") + return output + + for dut in get_test_library.dut_data: + get_test_library.pre_cleanup() + + radio_port_name = list(get_test_library.get_radio_availabilities(num_stations_5g=1)[1].keys())[0] + security = "open" + station = 'sta_ecp' + desired_band = "5G" + ssid_list = setup_params_general["ssid_modes"]["open"] + ssid_name = None + for ssid_info in ssid_list: + if desired_band in ssid_info["appliedRadios"]: + ssid_name = ssid_info["ssid_name"] + break + logging.info(f"ssid_name:{ssid_name}") + if ssid_name is None: + raise Exception(f"No SSID found configured for {desired_band}") + + logging.info(f"Creating a station on the configured ssid on {radio_port_name} radio...") + + sta_got_ip = get_test_library.client_connect_using_radio( + ssid=ssid_name, + passkey="[BLANK]", + security="open", + mode="NAT-WAN", + radio=radio_port_name, + band="fiveg", + station_name=[station], + attach_port_info=False + ) + + sta_info = get_test_library.json_get(_req_url=f"port/1/1/{station}") + dict_table_sta = { + "Key": list(sta_info["interface"].keys()), + "Value": list(sta_info["interface"].values()) + } + data_table_sta = tabulate(dict_table_sta, headers='keys', tablefmt='fancy_grid') + logging.info(f"Stations Data ({station}): \n{data_table_sta}\n") + allure.attach(name=f"Stations Data ({station})", body=str(data_table_sta)) + + if sta_got_ip is False: + logging.info("Station Failed to get IP") + pytest.fail("Station Failed to get IP") + + logging.info("Connecting SSH connection...") + hostname = get_test_library.manager_ip + port = get_test_library.manager_ssh_port + username = 'root' + password = 'lanforge' + ping_host = "google.com" + ping_count = 10 + ping_command = f"/home/lanforge/vrf_exec.bash {station} ping -c {ping_count} {ping_host}" + client = paramiko.SSHClient() + try: + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect(hostname, port=port, username=username, password=password) + + logging.info("Making sure client not getting internet access before UAM authentication...") + ping_output_pre_authentication = run_command_using_ssh(client, ping_command) + + logging.info(f"\nBefore Captive Portal-UAM authentication:\n{ping_output_pre_authentication}\n") + allure.attach(name="Before Captive Portal-UAM authentication, station ping response (google.com)", + body=str(ping_output_pre_authentication)) + + if "100% packet loss" not in ping_output_pre_authentication: + logging.info("Client already have internet access before UAM authentication!!!") + pytest.fail("Client already have internet access before UAM authentication") + logging.info("Client do not have internet access before UAM authentication.") + + logging.info("Getting the inet ip address...") + logging.info(f"AP idx: {get_test_library.dut_data.index(dut)}") + cmd_output = get_target_object.get_dut_library_object().run_generic_command( + cmd="ifconfig up0v0", + idx=get_test_library.dut_data.index(dut), + attach_allure=False + ) + ip_pattern = re.compile(r"inet addr:(\d+\.\d+\.\d+\.\d+)") + match = ip_pattern.search(cmd_output) + inet_ip_addr = match.group(1) + logging.info(f"inet ip addr: {inet_ip_addr}") + + expected_location = f"/home/lanforge/vrf_exec.bash {station} curl -I http://{inet_ip_addr}/hotspot/" + expected_location_output = run_command_using_ssh(client, expected_location) + + challenge_link = re.findall(r'^Location:\s+(.*?)\s*$', expected_location_output, re.MULTILINE)[0] + logging.info(f"Redirection link: {challenge_link}") + + url_info = {} + for field in challenge_link.split('?')[1].split('&'): + key_val_list = field.split('=') + if len(key_val_list) == 2 and len(key_val_list[1]) != 0: + url_info[key_val_list[0]] = key_val_list[1] + logging.info(f"url_info: {url_info}") + + challenge = url_info['challenge'] + nasid = url_info['nasid'] + station_mac = url_info['mac'] + uamport = url_info['uamport'] + + link = ( + f"https://customer.hotspotsystem.com/customer/hotspotlogin.php?name=&email=&company=&address=" + f"&city=&state=&country=&zip=&phone=&capture_custom_1=&capture_custom_2=&capture_custom_3=" + f"&capture_custom_4=&capture_custom_5=&ssl-login=&chal={challenge}&uamip={inet_ip_addr}" + f"&uamport={uamport}&nasid={nasid}&mac={station_mac}&userurl=&login=login&skin_id=" + f"&uid={station_mac}&pwd=password&operator={nasid}&location_id=1&lang=en&agree=1" + ) + expected_302 = f'/home/lanforge/vrf_exec.bash {station} curl -I "{link}"' + response_302 = run_command_using_ssh(client, expected_302) + + logging.info(f"\n{response_302}") + allure.attach(name="Expected 302 response: ", body=str(response_302), + attachment_type=allure.attachment_type.TEXT) + + link_to_hit = re.findall(r'^Location:\s+(.*?)\s*$', response_302, re.MULTILINE)[0] + logging.info(f"Link to hit: {link_to_hit}") + + cmd_to_authenticate = f'/home/lanforge/vrf_exec.bash {station} curl "{link_to_hit}"' + authentication_response = run_command_using_ssh(client, cmd_to_authenticate) + + logging.info(f"\n{authentication_response}\n") + allure.attach(name="Response from captive portal: ", + body=authentication_response, attachment_type=allure.attachment_type.HTML) + + if "

Connected

" not in authentication_response: + logging.info("Captive portal authentication Failed") + pytest.fail("Captive portal authentication Failed") + + logging.info("Captive portal authentication successful! Checking if client got internet access...") + ping_output_post_authentication = run_command_using_ssh(client, ping_command) + + logging.info(f"\nAfter Captive Portal-UAM authentication:\n{ping_output_post_authentication}\n") + allure.attach(name="After Captive Portal-UAM authentication, station ping response (google.com)", + body=str(ping_output_post_authentication)) + + if "100% packet loss" in ping_output_post_authentication: + logging.info("Client did not get internet access even after authentication!!!") + pytest.fail("Client did not get internet access even after authentication") + except Exception as e: + logging.error(f"Error occurred: {e}", exc_info=True) + pytest.fail(f"Error occurred: {e}") + finally: + client.close() + + @pytest.mark.owe + @pytest.mark.twog + @pytest.mark.sixg + @pytest.mark.ow_regression_lf + @allure.title("Click-to-continue mode with owe encryption 6 GHz Band NAT mode") + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14498", name="WIFI-14498") + def test_nat_6g_click_to_continue(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case, get_test_device_logs, check_connectivity, + get_testbed_details, get_target_object): + """ + NAT Mode External Captive Portal Test with owe encryption 6 GHz Band + pytest -m "advanced_captive_portal_tests and external_captive_portal_tests and owe and sixg and nat and click_to_continue" + """ + get_test_library.check_band_ap(band="sixg") + def run_command_using_ssh(ssh_client, command: str): + output = "" + try_count = 1 + while output.strip() == "" and try_count <= 10: + try: + try_count += 1 + time.sleep(2) + logging.info(f"Executing command: {command}") + stdin, stdout, stderr = ssh_client.exec_command(command) + output = stdout.read().decode() + except Exception as exc: + logging.error(f"Handled Exception while running {command}: {exc}", exc_info=True) + + if output.strip() == "": + allure.attach(name="No response while running following command:", body=f"{command}") + raise Exception("No output from command, check test body!") + return output + + for dut in get_test_library.dut_data: + get_test_library.pre_cleanup() + + radio_port_name = list(get_test_library.get_radio_availabilities(num_stations_6g=1).keys())[0] + station = 'sta_ecp' + desired_band = "6G" + ssid_list = setup_params_general["ssid_modes"]["owe"] + ssid_name = None + for ssid_info in ssid_list: + if desired_band in ssid_info["appliedRadios"]: + ssid_name = ssid_info["ssid_name"] + break + logging.info(f"ssid_name:{ssid_name}") + if ssid_name is None: + raise Exception(f"No SSID found configured for {desired_band}") + logging.info(f"Creating a station on the configured ssid on {radio_port_name} radio...") + sta_got_ip = get_test_library.client_connect_using_radio( + ssid=ssid_name, + passkey="[BLANK]", + security="owe", + mode="NAT-WAN", + radio=radio_port_name, + band="sixg", + station_name=[station], + attach_port_info=False, enable_owe = True, + is_bw320=is_bw320, is_ht160=is_ht160 + ) + + sta_info = get_test_library.json_get(_req_url=f"port/1/1/{station}") + dict_table_sta = { + "Key": list(sta_info["interface"].keys()), + "Value": list(sta_info["interface"].values()) + } + data_table_sta = tabulate(dict_table_sta, headers='keys', tablefmt='fancy_grid') + logging.info(f"Stations Data ({station}): \n{data_table_sta}\n") + allure.attach(name=f"Stations Data ({station})", body=str(data_table_sta)) + + if sta_got_ip is False: + logging.info("Station Failed to get IP") + pytest.fail("Station Failed to get IP") + + logging.info("Connecting SSH connection...") + hostname = get_test_library.manager_ip + port = get_test_library.manager_ssh_port + username = 'root' + password = 'lanforge' + ping_host = "google.com" + ping_count = 10 + ping_command = f"/home/lanforge/vrf_exec.bash {station} ping -c {ping_count} {ping_host}" + client = paramiko.SSHClient() + try: + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect(hostname, port=port, username=username, password=password) + + logging.info("Making sure client not getting internet access before UAM authentication...") + ping_output_pre_authentication = run_command_using_ssh(client, ping_command) + + logging.info(f"\nBefore Captive Portal-UAM authentication:\n{ping_output_pre_authentication}\n") + allure.attach(name="Before Captive Portal-UAM authentication, station ping response (google.com)", + body=str(ping_output_pre_authentication)) + + if "100% packet loss" not in ping_output_pre_authentication: + logging.info("Client already have internet access before UAM authentication!!!") + pytest.fail("Client already have internet access before UAM authentication") + logging.info("Client do not have internet access before UAM authentication.") + + logging.info("Getting the inet ip address...") + logging.info(f"AP idx: {get_test_library.dut_data.index(dut)}") + cmd_output = get_target_object.get_dut_library_object().run_generic_command( + cmd="ifconfig up0v0", + idx=get_test_library.dut_data.index(dut), + attach_allure=False + ) + ip_pattern = re.compile(r"inet addr:(\d+\.\d+\.\d+\.\d+)") + match = ip_pattern.search(cmd_output) + inet_ip_addr = match.group(1) + logging.info(f"inet ip addr: {inet_ip_addr}") + + expected_location = f"/home/lanforge/vrf_exec.bash {station} curl -I http://{inet_ip_addr}/hotspot/" + expected_location_output = run_command_using_ssh(client, expected_location) + + challenge_link = re.findall(r'^Location:\s+(.*?)\s*$', expected_location_output, re.MULTILINE)[0] + logging.info(f"Redirection link: {challenge_link}") + + url_info = {} + for field in challenge_link.split('?')[1].split('&'): + key_val_list = field.split('=') + if len(key_val_list) == 2 and len(key_val_list[1]) != 0: + url_info[key_val_list[0]] = key_val_list[1] + logging.info(f"url_info: {url_info}") + + challenge = url_info['challenge'] + nasid = url_info['nasid'] + station_mac = url_info['mac'] + uamport = url_info['uamport'] + + link = ( + f"https://customer.hotspotsystem.com/customer/hotspotlogin.php?name=&email=&company=&address=" + f"&city=&state=&country=&zip=&phone=&capture_custom_1=&capture_custom_2=&capture_custom_3=" + f"&capture_custom_4=&capture_custom_5=&ssl-login=&chal={challenge}&uamip={inet_ip_addr}" + f"&uamport={uamport}&nasid={nasid}&mac={station_mac}&userurl=&login=login&skin_id=" + f"&uid={station_mac}&pwd=password&operator={nasid}&location_id=1&lang=en&agree=1" + ) + expected_302 = f'/home/lanforge/vrf_exec.bash {station} curl -I "{link}"' + response_302 = run_command_using_ssh(client, expected_302) + + logging.info(f"\n{response_302}") + allure.attach(name="Expected 302 response: ", body=str(response_302), + attachment_type=allure.attachment_type.TEXT) + + link_to_hit = re.findall(r'^Location:\s+(.*?)\s*$', response_302, re.MULTILINE)[0] + logging.info(f"Link to hit: {link_to_hit}") + + cmd_to_authenticate = f'/home/lanforge/vrf_exec.bash {station} curl "{link_to_hit}"' + authentication_response = run_command_using_ssh(client, cmd_to_authenticate) + + logging.info(f"\n{authentication_response}\n") + allure.attach(name="Response from captive portal: ", + body=authentication_response, attachment_type=allure.attachment_type.HTML) + + if "

Connected

" not in authentication_response: + logging.info("Captive portal authentication Failed") + pytest.fail("Captive portal authentication Failed") + + logging.info("Captive portal authentication successful! Checking if client got internet access...") + ping_output_post_authentication = run_command_using_ssh(client, ping_command) + + logging.info(f"\nAfter Captive Portal-UAM authentication:\n{ping_output_post_authentication}\n") + allure.attach(name="After Captive Portal-UAM authentication, station ping response (google.com)", + body=str(ping_output_post_authentication)) + + if "100% packet loss" in ping_output_post_authentication: + logging.info("Client did not get internet access even after authentication!!!") + pytest.fail("Client did not get internet access even after authentication") + except Exception as e: + logging.error(f"Error occurred: {e}", exc_info=True) + pytest.fail(f"Error occurred: {e}") + finally: + client.close() diff --git a/tests/e2e/basic/advanced_captive_portal_tests/external_captive_portal_tests/open/test_local_user_and_pass_bridge.py b/tests/e2e/basic/advanced_captive_portal_tests/external_captive_portal_tests/open/test_local_user_and_pass_bridge.py index f2197cb81..7f2bc9d4f 100644 --- a/tests/e2e/basic/advanced_captive_portal_tests/external_captive_portal_tests/open/test_local_user_and_pass_bridge.py +++ b/tests/e2e/basic/advanced_captive_portal_tests/external_captive_portal_tests/open/test_local_user_and_pass_bridge.py @@ -4,6 +4,7 @@ pytest -m "external_captive_portal_tests and bridge" """ +import copy import logging import re import time @@ -13,14 +14,10 @@ import pytest from tabulate import tabulate from bs4 import BeautifulSoup -pytestmark = [pytest.mark.external_captive_portal_tests, pytest.mark.bridge, pytest.mark.advanced_captive_portal_tests] +pytestmark = [pytest.mark.external_captive_portal_tests, pytest.mark.bridge, pytest.mark.advanced_captive_portal_tests, + pytest.mark.local_user_and_pass] -setup_params_general = { - "mode": "BRIDGE", - "ssid_modes": { - "open": [ - {"ssid_name": "ssid_ext_cap_portal_open_2g_id_p", "appliedRadios": ["2G"], "security_key": "something", - "captive": { +captive ={ "auth-mode": "uam", "uam-port": 3990, "uam-secret": "hotsys123", @@ -36,24 +33,113 @@ setup_params_general = { "youtube.com" ] } +setup_params_general = { + "mode": "BRIDGE", + "ssid_modes": { + "open": [ + {"ssid_name": "ssid_ext_cap_portal_open_2g_id_p", "appliedRadios": ["2G"], "security_key": "something", + "captive": captive + }, + {"ssid_name": "ssid_ext_cap_portal_open_5g_id_p", "appliedRadios": ["5G"], "security_key": "something", + "captive": captive + } + ], + "owe": [ + {"ssid_name": "ext_cap_portal_2g_lup", "appliedRadios": ["2G"], "security_key": "something", + "captive": captive + }, + {"ssid_name": "ext_cap_portal_6g_lup", "appliedRadios": ["6G"], "security_key": "something", + "captive": captive } ]}, - "rf": {}, + "rf": { + "2G": { + "band": "2G", + "channel": 6, + "channel-mode": "HE" + }, + "5G": { + "band": "5G", + "channel": 36, + "channel-mode": "HE" + }, + "6G": { + "band": "6G", + "channel": 33, + "channel-width": 160, + "channel-mode": "HE" + } + }, "radius": False } +# Deep copy the original dictionary to avoid modifying it +setup_params_general_wifi7 = copy.deepcopy(setup_params_general) + +# Update channel-mode to 'EHT' for all bands +for band in setup_params_general_wifi7["rf"]: + setup_params_general_wifi7["rf"][band]["channel-mode"] = "EHT" + if band == "6G": + setup_params_general_wifi7["rf"][band]["channel-width"] = 320 + +testbed_details_global = None +dut_data = {} +is_bw320 = False +is_ht160 = False + +@pytest.fixture(scope="class") +def setup_initial_configuration(request): + """Calls setup_testbed automatically before tests""" + global testbed_details_global + global setup_params_general + global dut_data + global is_bw320 + global is_ht160 + selected_tb = request.getfixturevalue("selected_testbed") + print(f"Selected Testbed: {selected_tb}") + testbed_details_global = request.getfixturevalue("get_testbed_details") + assert testbed_details_global is not None, "Testbed details should not be None" + print(f"Initialized Testbed Details: {testbed_details_global}") + + # Extract 'mode' from the first device in 'device_under_tests' + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + if ap_mode == "wifi7": + is_bw320 = True + if ap_mode == "wifi6e": + is_ht160 = True + + # Assign setup_params_general based on mode + if ap_mode == "wifi6" or ap_mode == "wifi6e": + setup_params_general = setup_params_general + elif ap_mode == "wifi7": + setup_params_general = setup_params_general_wifi7 + else: + print(f"Unknown mode: {ap_mode}. Defaulting to None") + + print(f"Setup Params Assigned: {setup_params_general}") + + get_marker = request.getfixturevalue("get_markers") + requested_combination = [] + for key in get_marker: + if get_marker[key]: + requested_combination.append(get_marker[key]) + + logging.info(f"requested_combination:::{requested_combination}") + get_target_obj = request.getfixturevalue("get_target_object") + logging.info("ready to start setup_basic_configuration") + logging.info(f"setup_params_general value before start:{setup_params_general}") + if isinstance(setup_params_general, tuple): + setup_params_general = setup_params_general[0] + dut_data = get_target_obj.setup_basic_configuration(configuration=setup_params_general, + requested_combination=requested_combination) + + logging.info(f"setup_basic_configuration dut data:{dut_data}") + @allure.feature("Advanced Captive Portal Test") @allure.parent_suite("Advanced Captive Portal Tests") @allure.suite(suite_name="External Captive Portal") @allure.sub_suite(sub_suite_name="BRIDGE Mode") -@pytest.mark.parametrize( - 'setup_configuration', - [setup_params_general], - indirect=True, - scope="class" -) -@pytest.mark.usefixtures("setup_configuration") class TestBridgeModeExternalCaptivePortal(object): """ External Captive Portal Test: BRIDGE Mode @@ -62,17 +148,17 @@ class TestBridgeModeExternalCaptivePortal(object): @pytest.mark.open @pytest.mark.twog - @pytest.mark.local_user_and_pass @pytest.mark.ow_regression_lf @allure.title("Local user/pass mode with open encryption 2.4 GHz Band Bridge mode") @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-13683", name="WIFI-13683") - def test_bridge_open_2g_local_user_and_pass(self, get_test_library, get_dut_logs_per_test_case, - get_test_device_logs, check_connectivity, setup_configuration, + def test_bridge_open_2g_local_user_and_pass(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case,get_test_device_logs, check_connectivity, get_testbed_details, get_target_object): """ BRIDGE Mode External Captive Portal Test with open encryption 2.4 GHz Band pytest -m "advanced_captive_portal_tests and external_captive_portal_tests and open and twog and bridge and local_user_and_pass" """ + get_test_library.check_band_ap(band="twog") def run_command_using_ssh(ssh_client, command: str): output = "" try_count = 1 @@ -97,9 +183,19 @@ class TestBridgeModeExternalCaptivePortal(object): radio_port_name = list(get_test_library.get_radio_availabilities(num_stations_2g=1)[0].keys())[0] security = "open" station = 'sta_ecp' + desired_band = "2G" + ssid_list = setup_params_general["ssid_modes"]["open"] + ssid_name = None + for ssid_info in ssid_list: + if desired_band in ssid_info["appliedRadios"]: + ssid_name = ssid_info["ssid_name"] + break + logging.info(f"ssid_name:{ssid_name}") + if ssid_name is None: + raise Exception(f"No SSID found configured for {desired_band}") logging.info(f"Creating a station on the configured ssid on {radio_port_name} radio...") sta_got_ip = get_test_library.client_connect_using_radio( - ssid=setup_params_general["ssid_modes"][security][0]["ssid_name"], + ssid=ssid_name, passkey="[BLANK]", security="open", mode=setup_params_general["mode"], @@ -251,3 +347,408 @@ class TestBridgeModeExternalCaptivePortal(object): logging.info("Throughput exceeded than set threshold") pytest.fail("Throughput exceeded than set threshold") logging.info("Throughput is within the set threshold") + + @pytest.mark.open + @pytest.mark.fiveg + @pytest.mark.ow_regression_lf + @allure.title("Local user/pass mode with open encryption 5 GHz Band Bridge mode") + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14498", name="WIFI-14498") + def test_bridge_open_5g_local_user_and_pass(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case, get_test_device_logs, check_connectivity, + get_testbed_details, get_target_object): + """ + BRIDGE Mode External Captive Portal Test with open encryption 5 GHz Band + pytest -m "advanced_captive_portal_tests and external_captive_portal_tests and open and fiveg and bridge and local_user_and_pass" + """ + get_test_library.check_band_ap(band="fiveg") + def run_command_using_ssh(ssh_client, command: str): + output = "" + try_count = 1 + while output.strip() == "" and try_count <= 10: + try: + try_count += 1 + time.sleep(2) + logging.info(f"Executing command: {command}") + stdin, stdout, stderr = ssh_client.exec_command(command) + output = stdout.read().decode() + except Exception as exc: + logging.error(f"Handled Exception while running {command}: {exc}", exc_info=True) + + if output.strip() == "": + allure.attach(name="No response while running following command:", body=f"{command}") + raise Exception("No output from command, check test body!") + return output + + for dut in get_test_library.dut_data: + get_test_library.pre_cleanup() + + radio_port_name = list(get_test_library.get_radio_availabilities(num_stations_5g=1)[1].keys())[0] + security = "open" + station = 'sta_ecp' + desired_band = "5G" + ssid_list = setup_params_general["ssid_modes"]["open"] + ssid_name = None + for ssid_info in ssid_list: + if desired_band in ssid_info["appliedRadios"]: + ssid_name = ssid_info["ssid_name"] + break + logging.info(f"ssid_name:{ssid_name}") + if ssid_name is None: + raise Exception(f"No SSID found configured for {desired_band}") + logging.info(f"Creating a station on the configured ssid on {radio_port_name} radio...") + sta_got_ip = get_test_library.client_connect_using_radio( + ssid=ssid_name, + passkey="[BLANK]", + security="open", + mode=setup_params_general["mode"], + radio=radio_port_name, + station_name=[station], + attach_port_info=False + ) + + sta_info = get_test_library.json_get(_req_url=f"port/1/1/{station}") + dict_table_sta = { + "Key": list(sta_info["interface"].keys()), + "Value": list(sta_info["interface"].values()) + } + data_table_sta = tabulate(dict_table_sta, headers='keys', tablefmt='fancy_grid') + logging.info(f"Stations Data ({station}): \n{data_table_sta}\n") + allure.attach(name=f"Stations Data ({station})", body=str(data_table_sta)) + + if sta_got_ip is False: + logging.info("Station Failed to get IP") + pytest.fail("Station Failed to get IP") + + logging.info("Connecting SSH connection...") + hostname = get_test_library.manager_ip + port = get_test_library.manager_ssh_port + username = 'root' + password = 'lanforge' + ping_host = "google.com" + ping_count = 10 + ping_command = f"/home/lanforge/vrf_exec.bash {station} ping -c {ping_count} {ping_host}" + client = paramiko.SSHClient() + try: + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect(hostname, port=port, username=username, password=password) + + logging.info("Making sure client not getting internet access before UAM authentication...") + ping_output_pre_authentication = run_command_using_ssh(client, ping_command) + + logging.info(f"\nBefore Captive Portal-UAM authentication:\n{ping_output_pre_authentication}\n") + allure.attach(name="Before Captive Portal-UAM authentication, station ping response (google.com)", + body=str(ping_output_pre_authentication)) + + if "100% packet loss" not in ping_output_pre_authentication: + logging.info("Client already have internet access before UAM authentication!!!") + pytest.fail("Client already have internet access before UAM authentication") + logging.info("Client do not have internet access before UAM authentication.") + + logging.info("Getting the inet ip address...") + logging.info(f"AP idx: {get_test_library.dut_data.index(dut)}") + cmd_output = get_target_object.get_dut_library_object().run_generic_command( + cmd="ifconfig up0v0", + idx=get_test_library.dut_data.index(dut), + attach_allure=False + ) + ip_pattern = re.compile(r"inet addr:(\d+\.\d+\.\d+\.\d+)") + match = ip_pattern.search(cmd_output) + inet_ip_addr = match.group(1) + logging.info(f"inet ip addr: {inet_ip_addr}") + + expected_location = f"/home/lanforge/vrf_exec.bash {station} curl -I http://{inet_ip_addr}/hotspot/" + expected_location_output = run_command_using_ssh(client, expected_location) + + challenge_link = re.findall(r'^Location:\s+(.*?)\s*$', expected_location_output, re.MULTILINE)[0] + logging.info(f"Redirection link: {challenge_link}") + + url_info = {} + for field in challenge_link.split('?')[1].split('&'): + key_val_list = field.split('=') + if len(key_val_list) == 2 and len(key_val_list[1]) != 0: + url_info[key_val_list[0]] = key_val_list[1] + logging.info(f"url_info: {url_info}") + + challenge = url_info['challenge'] + nasid = url_info['nasid'] + station_mac = url_info['mac'] + uamport = url_info['uamport'] + + link = (f'https://customer.hotspotsystem.com/customer/hotspotlogin.php?ssl-login=&chal={challenge}' + f'&uamip={inet_ip_addr}&uamport={uamport}&nasid={nasid}&mac={station_mac}' + f'&userurl=ct522-7481%2F&login=login&skin_id=&uid=userr1&pwd=password1') + html_request = f'/home/lanforge/vrf_exec.bash {station} curl "{link}"' + html_response = run_command_using_ssh(client, html_request) + + logging.info(f"HTML response containing authentication url:\n{html_response}") + allure.attach(name="HTML response containing authentication url:", body=str(html_response), + attachment_type=allure.attachment_type.TEXT) + + soup = BeautifulSoup(html_response, 'html.parser') + meta_tag = soup.find('meta', attrs={'http-equiv': 'refresh'}) + content = meta_tag['content'] + authentication_url = "=".join(content.split('=')[1:]) + + logging.info(f"Authentication URL extracted from HTML:\n{authentication_url}\n") + allure.attach(name="Authentication URL extracted from HTML:", body=str(authentication_url)) + + cmd_to_authenticate = f'/home/lanforge/vrf_exec.bash {station} curl "{authentication_url}"' + authentication_response = run_command_using_ssh(client, cmd_to_authenticate) + + logging.info(f"\n{authentication_response}\n") + allure.attach(name="Response from captive portal: ", + body=authentication_response, attachment_type=allure.attachment_type.HTML) + + if "

Connected

" not in authentication_response: + logging.info("Captive portal authentication Failed") + pytest.fail("Captive portal authentication Failed") + + logging.info("Captive portal authentication successful! Checking if client got internet access...") + ping_output_post_authentication = run_command_using_ssh(client, ping_command) + + logging.info(f"\nAfter Captive Portal-UAM authentication:\n{ping_output_post_authentication}\n") + allure.attach(name="After Captive Portal-UAM authentication, station ping response (google.com)", + body=str(ping_output_post_authentication)) + + if "100% packet loss" in ping_output_post_authentication: + logging.info("Client did not get internet access even after authentication!!!") + pytest.fail("Client did not get internet access even after authentication") + except Exception as e: + logging.error(f"Error occurred: {e}", exc_info=True) + pytest.fail(f"Error occurred: {e}") + finally: + client.close() + + logging.info("Checking throughput speed...") + wifi_capacity_obj_list = get_test_library.wifi_capacity(mode="BRIDGE", + download_rate="10Gbps", + upload_rate="56Kbps", + protocol="UDP-IPv4", + duration="60000", + batch_size="1", + stations=radio_port_name[:4] + station, + add_stations=False, + create_stations=False) + + report = wifi_capacity_obj_list[0].report_name[0]['LAST']["response"].split(":::")[1].split("/")[-1] + "/" + numeric_score = get_test_library.read_kpi_file(column_name=["numeric-score"], dir_name=report) + expected_throughput = 10 + throughput = { + "download": [numeric_score[0][0]], + "upload": [numeric_score[1][0]], + "total": [numeric_score[2][0]], + "expected": [f"<= {expected_throughput}"], + "unit": ["Mbps"], + "PASS": [numeric_score[2][0] <= expected_throughput] + } + data_table = tabulate(throughput, headers='keys', tablefmt='fancy_grid') + allure.attach(name='Throughput Data', body=data_table) + logging.info(f"\n{data_table}") + + if not throughput["PASS"][0]: + logging.info("Throughput exceeded than set threshold") + pytest.fail("Throughput exceeded than set threshold") + logging.info("Throughput is within the set threshold") + + @pytest.mark.owe + @pytest.mark.twog + @pytest.mark.sixg + @pytest.mark.ow_regression_lf + @allure.title("Local user/pass mode with owe encryption 6 GHz Band Bridge mode") + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14498", name="WIFI-14498") + def test_bridge_6g_local_user_and_pass(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case, get_test_device_logs, check_connectivity, + get_testbed_details, get_target_object): + """ + BRIDGE Mode External Captive Portal Test with owe encryption 6 GHz Band + pytest -m "advanced_captive_portal_tests and external_captive_portal_tests and owe and sixg and bridge and local_user_and_pass" + """ + get_test_library.check_band_ap(band="sixg") + def run_command_using_ssh(ssh_client, command: str): + output = "" + try_count = 1 + while output.strip() == "" and try_count <= 10: + try: + try_count += 1 + time.sleep(2) + logging.info(f"Executing command: {command}") + stdin, stdout, stderr = ssh_client.exec_command(command) + output = stdout.read().decode() + except Exception as exc: + logging.error(f"Handled Exception while running {command}: {exc}", exc_info=True) + + if output.strip() == "": + allure.attach(name="No response while running following command:", body=f"{command}") + raise Exception("No output from command, check test body!") + return output + + for dut in get_test_library.dut_data: + get_test_library.pre_cleanup() + + radio_port_name = list(get_test_library.get_radio_availabilities(num_stations_6g=1).keys())[0] + station = 'sta_ecp' + desired_band = "6G" + ssid_list = setup_params_general["ssid_modes"]["owe"] + ssid_name = None + for ssid_info in ssid_list: + if desired_band in ssid_info["appliedRadios"]: + ssid_name = ssid_info["ssid_name"] + break + logging.info(f"ssid_name:{ssid_name}") + if ssid_name is None: + raise Exception(f"No SSID found configured for {desired_band}") + logging.info(f"Creating a station on the configured ssid on {radio_port_name} radio...") + sta_got_ip = get_test_library.client_connect_using_radio( + ssid=ssid_name, + passkey="[BLANK]", + security="owe", + mode=setup_params_general["mode"], + radio=radio_port_name, + station_name=[station], + attach_port_info=False, enable_owe=True, + is_bw320=is_bw320, is_ht160=is_ht160 + ) + + sta_info = get_test_library.json_get(_req_url=f"port/1/1/{station}") + dict_table_sta = { + "Key": list(sta_info["interface"].keys()), + "Value": list(sta_info["interface"].values()) + } + data_table_sta = tabulate(dict_table_sta, headers='keys', tablefmt='fancy_grid') + logging.info(f"Stations Data ({station}): \n{data_table_sta}\n") + allure.attach(name=f"Stations Data ({station})", body=str(data_table_sta)) + + if sta_got_ip is False: + logging.info("Station Failed to get IP") + pytest.fail("Station Failed to get IP") + + logging.info("Connecting SSH connection...") + hostname = get_test_library.manager_ip + port = get_test_library.manager_ssh_port + username = 'root' + password = 'lanforge' + ping_host = "google.com" + ping_count = 10 + ping_command = f"/home/lanforge/vrf_exec.bash {station} ping -c {ping_count} {ping_host}" + client = paramiko.SSHClient() + try: + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect(hostname, port=port, username=username, password=password) + + logging.info("Making sure client not getting internet access before UAM authentication...") + ping_output_pre_authentication = run_command_using_ssh(client, ping_command) + + logging.info(f"\nBefore Captive Portal-UAM authentication:\n{ping_output_pre_authentication}\n") + allure.attach(name="Before Captive Portal-UAM authentication, station ping response (google.com)", + body=str(ping_output_pre_authentication)) + + if "100% packet loss" not in ping_output_pre_authentication: + logging.info("Client already have internet access before UAM authentication!!!") + pytest.fail("Client already have internet access before UAM authentication") + logging.info("Client do not have internet access before UAM authentication.") + + logging.info("Getting the inet ip address...") + logging.info(f"AP idx: {get_test_library.dut_data.index(dut)}") + cmd_output = get_target_object.get_dut_library_object().run_generic_command( + cmd="ifconfig up0v0", + idx=get_test_library.dut_data.index(dut), + attach_allure=False + ) + ip_pattern = re.compile(r"inet addr:(\d+\.\d+\.\d+\.\d+)") + match = ip_pattern.search(cmd_output) + inet_ip_addr = match.group(1) + logging.info(f"inet ip addr: {inet_ip_addr}") + + expected_location = f"/home/lanforge/vrf_exec.bash {station} curl -I http://{inet_ip_addr}/hotspot/" + expected_location_output = run_command_using_ssh(client, expected_location) + + challenge_link = re.findall(r'^Location:\s+(.*?)\s*$', expected_location_output, re.MULTILINE)[0] + logging.info(f"Redirection link: {challenge_link}") + + url_info = {} + for field in challenge_link.split('?')[1].split('&'): + key_val_list = field.split('=') + if len(key_val_list) == 2 and len(key_val_list[1]) != 0: + url_info[key_val_list[0]] = key_val_list[1] + logging.info(f"url_info: {url_info}") + + challenge = url_info['challenge'] + nasid = url_info['nasid'] + station_mac = url_info['mac'] + uamport = url_info['uamport'] + + link = (f'https://customer.hotspotsystem.com/customer/hotspotlogin.php?ssl-login=&chal={challenge}' + f'&uamip={inet_ip_addr}&uamport={uamport}&nasid={nasid}&mac={station_mac}' + f'&userurl=ct522-7481%2F&login=login&skin_id=&uid=userr1&pwd=password1') + html_request = f'/home/lanforge/vrf_exec.bash {station} curl "{link}"' + html_response = run_command_using_ssh(client, html_request) + + logging.info(f"HTML response containing authentication url:\n{html_response}") + allure.attach(name="HTML response containing authentication url:", body=str(html_response), + attachment_type=allure.attachment_type.TEXT) + + soup = BeautifulSoup(html_response, 'html.parser') + meta_tag = soup.find('meta', attrs={'http-equiv': 'refresh'}) + content = meta_tag['content'] + authentication_url = "=".join(content.split('=')[1:]) + + logging.info(f"Authentication URL extracted from HTML:\n{authentication_url}\n") + allure.attach(name="Authentication URL extracted from HTML:", body=str(authentication_url)) + + cmd_to_authenticate = f'/home/lanforge/vrf_exec.bash {station} curl "{authentication_url}"' + authentication_response = run_command_using_ssh(client, cmd_to_authenticate) + + logging.info(f"\n{authentication_response}\n") + allure.attach(name="Response from captive portal: ", + body=authentication_response, attachment_type=allure.attachment_type.HTML) + + if "

Connected

" not in authentication_response: + logging.info("Captive portal authentication Failed") + pytest.fail("Captive portal authentication Failed") + + logging.info("Captive portal authentication successful! Checking if client got internet access...") + ping_output_post_authentication = run_command_using_ssh(client, ping_command) + + logging.info(f"\nAfter Captive Portal-UAM authentication:\n{ping_output_post_authentication}\n") + allure.attach(name="After Captive Portal-UAM authentication, station ping response (google.com)", + body=str(ping_output_post_authentication)) + + if "100% packet loss" in ping_output_post_authentication: + logging.info("Client did not get internet access even after authentication!!!") + pytest.fail("Client did not get internet access even after authentication") + except Exception as e: + logging.error(f"Error occurred: {e}", exc_info=True) + pytest.fail(f"Error occurred: {e}") + finally: + client.close() + + logging.info("Checking throughput speed...") + wifi_capacity_obj_list = get_test_library.wifi_capacity(mode="BRIDGE", + download_rate="10Gbps", + upload_rate="56Kbps", + protocol="UDP-IPv4", + duration="60000", + batch_size="1", + stations=radio_port_name[:4] + station, + add_stations=False, + create_stations=False) + + report = wifi_capacity_obj_list[0].report_name[0]['LAST']["response"].split(":::")[1].split("/")[-1] + "/" + numeric_score = get_test_library.read_kpi_file(column_name=["numeric-score"], dir_name=report) + expected_throughput = 10 + throughput = { + "download": [numeric_score[0][0]], + "upload": [numeric_score[1][0]], + "total": [numeric_score[2][0]], + "expected": [f"<= {expected_throughput}"], + "unit": ["Mbps"], + "PASS": [numeric_score[2][0] <= expected_throughput] + } + data_table = tabulate(throughput, headers='keys', tablefmt='fancy_grid') + allure.attach(name='Throughput Data', body=data_table) + logging.info(f"\n{data_table}") + + if not throughput["PASS"][0]: + logging.info("Throughput exceeded than set threshold") + pytest.fail("Throughput exceeded than set threshold") + logging.info("Throughput is within the set threshold") \ No newline at end of file diff --git a/tests/e2e/basic/advanced_captive_portal_tests/external_captive_portal_tests/open/test_local_user_and_pass_nat.py b/tests/e2e/basic/advanced_captive_portal_tests/external_captive_portal_tests/open/test_local_user_and_pass_nat.py index cfbc86440..49721d035 100644 --- a/tests/e2e/basic/advanced_captive_portal_tests/external_captive_portal_tests/open/test_local_user_and_pass_nat.py +++ b/tests/e2e/basic/advanced_captive_portal_tests/external_captive_portal_tests/open/test_local_user_and_pass_nat.py @@ -4,6 +4,7 @@ pytest -m "external_captive_portal_tests and nat" """ +import copy import logging import re import time @@ -13,14 +14,10 @@ import pytest from tabulate import tabulate from bs4 import BeautifulSoup -pytestmark = [pytest.mark.external_captive_portal_tests, pytest.mark.nat, pytest.mark.advanced_captive_portal_tests] +pytestmark = [pytest.mark.external_captive_portal_tests, pytest.mark.nat, pytest.mark.advanced_captive_portal_tests, + pytest.mark.local_user_and_pass] -setup_params_general = { - "mode": "NAT", - "ssid_modes": { - "open": [ - {"ssid_name": "ssid_ext_cap_portal_open_2g_id_p", "appliedRadios": ["2G"], "security_key": "something", - "captive": { +captive = { "auth-mode": "uam", "uam-port": 3990, "uam-secret": "hotsys123", @@ -36,24 +33,113 @@ setup_params_general = { "youtube.com" ] } +setup_params_general = { + "mode": "NAT", + "ssid_modes": { + "open": [ + {"ssid_name": "ssid_ext_cap_portal_open_2g_id_p", "appliedRadios": ["2G"], "security_key": "something", + "captive": captive + }, + {"ssid_name": "ssid_ext_cap_portal_open_5g_id_p", "appliedRadios": ["5G"], "security_key": "something", + "captive": captive + } + ], + "owe": [ + {"ssid_name": "ext_cap_portal_2g_lup", "appliedRadios": ["2G"], "security_key": "something", + "captive": captive + }, + {"ssid_name": "ext_cap_portal_6g_lup", "appliedRadios": ["6G"], "security_key": "something", + "captive": captive } ]}, - "rf": {}, + "rf": { + "2G": { + "band": "2G", + "channel": 6, + "channel-mode": "HE" + }, + "5G": { + "band": "5G", + "channel": 36, + "channel-mode": "HE" + }, + "6G": { + "band": "6G", + "channel": 33, + "channel-width": 160, + "channel-mode": "HE" + } + }, "radius": False } +# Deep copy the original dictionary to avoid modifying it +setup_params_general_wifi7 = copy.deepcopy(setup_params_general) + +# Update channel-mode to 'EHT' for all bands +for band in setup_params_general_wifi7["rf"]: + setup_params_general_wifi7["rf"][band]["channel-mode"] = "EHT" + if band == "6G": + setup_params_general_wifi7["rf"][band]["channel-width"] = 320 + +testbed_details_global = None +dut_data = {} +is_bw320 = False +is_ht160 = False + +@pytest.fixture(scope="class") +def setup_initial_configuration(request): + """Calls setup_testbed automatically before tests""" + global testbed_details_global + global setup_params_general + global dut_data + global is_bw320 + global is_ht160 + selected_tb = request.getfixturevalue("selected_testbed") + print(f"Selected Testbed: {selected_tb}") + testbed_details_global = request.getfixturevalue("get_testbed_details") + assert testbed_details_global is not None, "Testbed details should not be None" + print(f"Initialized Testbed Details: {testbed_details_global}") + + # Extract 'mode' from the first device in 'device_under_tests' + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + if ap_mode == "wifi7": + is_bw320 = True + if ap_mode == "wifi6e": + is_ht160 = True + + # Assign setup_params_general based on mode + if ap_mode == "wifi6" or ap_mode == "wifi6e": + setup_params_general = setup_params_general + elif ap_mode == "wifi7": + setup_params_general = setup_params_general_wifi7 + else: + print(f"Unknown mode: {ap_mode}. Defaulting to None") + + print(f"Setup Params Assigned: {setup_params_general}") + + get_marker = request.getfixturevalue("get_markers") + requested_combination = [] + for key in get_marker: + if get_marker[key]: + requested_combination.append(get_marker[key]) + + logging.info(f"requested_combination:::{requested_combination}") + get_target_obj = request.getfixturevalue("get_target_object") + logging.info("ready to start setup_basic_configuration") + logging.info(f"setup_params_general value before start:{setup_params_general}") + if isinstance(setup_params_general, tuple): + setup_params_general = setup_params_general[0] + dut_data = get_target_obj.setup_basic_configuration(configuration=setup_params_general, + requested_combination=requested_combination) + + logging.info(f"setup_basic_configuration dut data:{dut_data}") + @allure.feature("Advanced Captive Portal Test") @allure.parent_suite("Advanced Captive Portal Tests") @allure.suite(suite_name="External Captive Portal") @allure.sub_suite(sub_suite_name="NAT Mode") -@pytest.mark.parametrize( - 'setup_configuration', - [setup_params_general], - indirect=True, - scope="class" -) -@pytest.mark.usefixtures("setup_configuration") class TestNatModeExternalCaptivePortal(object): """ External Captive Portal Test: NAT Mode @@ -62,17 +148,17 @@ class TestNatModeExternalCaptivePortal(object): @pytest.mark.open @pytest.mark.twog - @pytest.mark.local_user_and_pass @pytest.mark.ow_regression_lf @allure.title("Local user/pass mode with open encryption 2.4 GHz Band NAT mode") @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14125", name="WIFI-14125") - def test_nat_open_2g_local_user_and_pass(self, get_test_library, get_dut_logs_per_test_case, - get_test_device_logs, check_connectivity, setup_configuration, - get_testbed_details, get_target_object): + def test_nat_open_2g_local_user_and_pass(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case,get_test_device_logs, check_connectivity, + get_testbed_details, get_target_object): """ NAT Mode External Captive Portal Test with open encryption 2.4 GHz Band pytest -m "advanced_captive_portal_tests and external_captive_portal_tests and open and twog and nat and local_user_and_pass" """ + get_test_library.check_band_ap(band="twog") def run_command_using_ssh(ssh_client, command: str): output = "" try_count = 1 @@ -97,9 +183,19 @@ class TestNatModeExternalCaptivePortal(object): radio_port_name = list(get_test_library.get_radio_availabilities(num_stations_2g=1)[0].keys())[0] security = "open" station = 'sta_ecp' + desired_band = "2G" + ssid_list = setup_params_general["ssid_modes"]["open"] + ssid_name = None + for ssid_info in ssid_list: + if desired_band in ssid_info["appliedRadios"]: + ssid_name = ssid_info["ssid_name"] + break + logging.info(f"ssid_name:{ssid_name}") + if ssid_name is None: + raise Exception(f"No SSID found configured for {desired_band}") logging.info(f"Creating a station on the configured ssid on {radio_port_name} radio...") sta_got_ip = get_test_library.client_connect_using_radio( - ssid=setup_params_general["ssid_modes"][security][0]["ssid_name"], + ssid=ssid_name, passkey="[BLANK]", security="open", mode="NAT-WAN", @@ -251,3 +347,408 @@ class TestNatModeExternalCaptivePortal(object): logging.info("Throughput exceeded than set threshold") pytest.fail("Throughput exceeded than set threshold") logging.info("Throughput is within the set threshold") + + @pytest.mark.open + @pytest.mark.fiveg + @pytest.mark.ow_regression_lf + @allure.title("Local user/pass mode with open encryption 5 GHz Band NAT mode") + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14498", name="WIFI-14498") + def test_nat_open_5g_local_user_and_pass(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case, get_test_device_logs, check_connectivity, + get_testbed_details, get_target_object): + """ + NAT Mode External Captive Portal Test with open encryption 5 GHz Band + pytest -m "advanced_captive_portal_tests and external_captive_portal_tests and open and fiveg and nat and local_user_and_pass" + """ + get_test_library.check_band_ap(band="fiveg") + def run_command_using_ssh(ssh_client, command: str): + output = "" + try_count = 1 + while output.strip() == "" and try_count <= 10: + try: + try_count += 1 + time.sleep(2) + logging.info(f"Executing command: {command}") + stdin, stdout, stderr = ssh_client.exec_command(command) + output = stdout.read().decode() + except Exception as exc: + logging.error(f"Handled Exception while running {command}: {exc}", exc_info=True) + + if output.strip() == "": + allure.attach(name="No response while running following command:", body=f"{command}") + raise Exception("No output from command, check test body!") + return output + + for dut in get_test_library.dut_data: + get_test_library.pre_cleanup() + + radio_port_name = list(get_test_library.get_radio_availabilities(num_stations_5g=1)[1].keys())[0] + security = "open" + station = 'sta_ecp' + desired_band = "5G" + ssid_list = setup_params_general["ssid_modes"]["open"] + ssid_name = None + for ssid_info in ssid_list: + if desired_band in ssid_info["appliedRadios"]: + ssid_name = ssid_info["ssid_name"] + break + logging.info(f"ssid_name:{ssid_name}") + if ssid_name is None: + raise Exception(f"No SSID found configured for {desired_band}") + logging.info(f"Creating a station on the configured ssid on {radio_port_name} radio...") + sta_got_ip = get_test_library.client_connect_using_radio( + ssid=ssid_name, + passkey="[BLANK]", + security="open", + mode="NAT-WAN", + radio=radio_port_name, + station_name=[station], + attach_port_info=False + ) + + sta_info = get_test_library.json_get(_req_url=f"port/1/1/{station}") + dict_table_sta = { + "Key": list(sta_info["interface"].keys()), + "Value": list(sta_info["interface"].values()) + } + data_table_sta = tabulate(dict_table_sta, headers='keys', tablefmt='fancy_grid') + logging.info(f"Stations Data ({station}): \n{data_table_sta}\n") + allure.attach(name=f"Stations Data ({station})", body=str(data_table_sta)) + + if sta_got_ip is False: + logging.info("Station Failed to get IP") + pytest.fail("Station Failed to get IP") + + logging.info("Connecting SSH connection...") + hostname = get_test_library.manager_ip + port = get_test_library.manager_ssh_port + username = 'root' + password = 'lanforge' + ping_host = "google.com" + ping_count = 10 + ping_command = f"/home/lanforge/vrf_exec.bash {station} ping -c {ping_count} {ping_host}" + client = paramiko.SSHClient() + try: + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect(hostname, port=port, username=username, password=password) + + logging.info("Making sure client not getting internet access before UAM authentication...") + ping_output_pre_authentication = run_command_using_ssh(client, ping_command) + + logging.info(f"\nBefore Captive Portal-UAM authentication:\n{ping_output_pre_authentication}\n") + allure.attach(name="Before Captive Portal-UAM authentication, station ping response (google.com)", + body=str(ping_output_pre_authentication)) + + if "100% packet loss" not in ping_output_pre_authentication: + logging.info("Client already have internet access before UAM authentication!!!") + pytest.fail("Client already have internet access before UAM authentication") + logging.info("Client do not have internet access before UAM authentication.") + + logging.info("Getting the inet ip address...") + logging.info(f"AP idx: {get_test_library.dut_data.index(dut)}") + cmd_output = get_target_object.get_dut_library_object().run_generic_command( + cmd="ifconfig up0v0", + idx=get_test_library.dut_data.index(dut), + attach_allure=False + ) + ip_pattern = re.compile(r"inet addr:(\d+\.\d+\.\d+\.\d+)") + match = ip_pattern.search(cmd_output) + inet_ip_addr = match.group(1) + logging.info(f"inet ip addr: {inet_ip_addr}") + + expected_location = f"/home/lanforge/vrf_exec.bash {station} curl -I http://{inet_ip_addr}/hotspot/" + expected_location_output = run_command_using_ssh(client, expected_location) + + challenge_link = re.findall(r'^Location:\s+(.*?)\s*$', expected_location_output, re.MULTILINE)[0] + logging.info(f"Redirection link: {challenge_link}") + + url_info = {} + for field in challenge_link.split('?')[1].split('&'): + key_val_list = field.split('=') + if len(key_val_list) == 2 and len(key_val_list[1]) != 0: + url_info[key_val_list[0]] = key_val_list[1] + logging.info(f"url_info: {url_info}") + + challenge = url_info['challenge'] + nasid = url_info['nasid'] + station_mac = url_info['mac'] + uamport = url_info['uamport'] + + link = (f'https://customer.hotspotsystem.com/customer/hotspotlogin.php?ssl-login=&chal={challenge}' + f'&uamip={inet_ip_addr}&uamport={uamport}&nasid={nasid}&mac={station_mac}' + f'&userurl=ct522-7481%2F&login=login&skin_id=&uid=userr1&pwd=password1') + html_request = f'/home/lanforge/vrf_exec.bash {station} curl "{link}"' + html_response = run_command_using_ssh(client, html_request) + + logging.info(f"HTML response containing authentication url:\n{html_response}") + allure.attach(name="HTML response containing authentication url:", body=str(html_response), + attachment_type=allure.attachment_type.TEXT) + + soup = BeautifulSoup(html_response, 'html.parser') + meta_tag = soup.find('meta', attrs={'http-equiv': 'refresh'}) + content = meta_tag['content'] + authentication_url = "=".join(content.split('=')[1:]) + + logging.info(f"Authentication URL extracted from HTML:\n{authentication_url}\n") + allure.attach(name="Authentication URL extracted from HTML:", body=str(authentication_url)) + + cmd_to_authenticate = f'/home/lanforge/vrf_exec.bash {station} curl "{authentication_url}"' + authentication_response = run_command_using_ssh(client, cmd_to_authenticate) + + logging.info(f"\n{authentication_response}\n") + allure.attach(name="Response from captive portal: ", + body=authentication_response, attachment_type=allure.attachment_type.HTML) + + if "

Connected

" not in authentication_response: + logging.info("Captive portal authentication Failed") + pytest.fail("Captive portal authentication Failed") + + logging.info("Captive portal authentication successful! Checking if client got internet access...") + ping_output_post_authentication = run_command_using_ssh(client, ping_command) + + logging.info(f"\nAfter Captive Portal-UAM authentication:\n{ping_output_post_authentication}\n") + allure.attach(name="After Captive Portal-UAM authentication, station ping response (google.com)", + body=str(ping_output_post_authentication)) + + if "100% packet loss" in ping_output_post_authentication: + logging.info("Client did not get internet access even after authentication!!!") + pytest.fail("Client did not get internet access even after authentication") + except Exception as e: + logging.error(f"Error occurred: {e}", exc_info=True) + pytest.fail(f"Error occurred: {e}") + finally: + client.close() + + logging.info("Checking throughput speed...") + wifi_capacity_obj_list = get_test_library.wifi_capacity(mode="NAT-WAN", + download_rate="10Gbps", + upload_rate="56Kbps", + protocol="UDP-IPv4", + duration="60000", + batch_size="1", + stations=radio_port_name[:4] + station, + add_stations=False, + create_stations=False) + + report = wifi_capacity_obj_list[0].report_name[0]['LAST']["response"].split(":::")[1].split("/")[-1] + "/" + numeric_score = get_test_library.read_kpi_file(column_name=["numeric-score"], dir_name=report) + expected_throughput = 10 + throughput = { + "download": [numeric_score[0][0]], + "upload": [numeric_score[1][0]], + "total": [numeric_score[2][0]], + "expected": [f"<= {expected_throughput}"], + "unit": ["Mbps"], + "PASS": [numeric_score[2][0] <= expected_throughput] + } + data_table = tabulate(throughput, headers='keys', tablefmt='fancy_grid') + allure.attach(name='Throughput Data', body=data_table) + logging.info(f"\n{data_table}") + + if not throughput["PASS"][0]: + logging.info("Throughput exceeded than set threshold") + pytest.fail("Throughput exceeded than set threshold") + logging.info("Throughput is within the set threshold") + + @pytest.mark.owe + @pytest.mark.twog + @pytest.mark.sixg + @pytest.mark.ow_regression_lf + @allure.title("Local user/pass mode with owe encryption 6 GHz Band NAT mode") + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14498", name="WIFI-14498") + def test_nat_6g_local_user_and_pass(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case, get_test_device_logs, check_connectivity, + get_testbed_details, get_target_object): + """ + NAT Mode External Captive Portal Test with owe encryption 6 GHz Band + pytest -m "advanced_captive_portal_tests and external_captive_portal_tests and owe and sixg and nat and local_user_and_pass" + """ + get_test_library.check_band_ap(band="sixg") + def run_command_using_ssh(ssh_client, command: str): + output = "" + try_count = 1 + while output.strip() == "" and try_count <= 10: + try: + try_count += 1 + time.sleep(2) + logging.info(f"Executing command: {command}") + stdin, stdout, stderr = ssh_client.exec_command(command) + output = stdout.read().decode() + except Exception as exc: + logging.error(f"Handled Exception while running {command}: {exc}", exc_info=True) + + if output.strip() == "": + allure.attach(name="No response while running following command:", body=f"{command}") + raise Exception("No output from command, check test body!") + return output + + for dut in get_test_library.dut_data: + get_test_library.pre_cleanup() + + radio_port_name = list(get_test_library.get_radio_availabilities(num_stations_6g=1).keys())[0] + station = 'sta_ecp' + desired_band = "6G" + ssid_list = setup_params_general["ssid_modes"]["owe"] + ssid_name = None + for ssid_info in ssid_list: + if desired_band in ssid_info["appliedRadios"]: + ssid_name = ssid_info["ssid_name"] + break + logging.info(f"ssid_name:{ssid_name}") + if ssid_name is None: + raise Exception(f"No SSID found configured for {desired_band}") + logging.info(f"Creating a station on the configured ssid on {radio_port_name} radio...") + sta_got_ip = get_test_library.client_connect_using_radio( + ssid=ssid_name, + passkey="[BLANK]", + security="owe", + mode="NAT-WAN", + radio=radio_port_name, + station_name=[station], + attach_port_info=False, enable_owe=True, + is_bw320=is_bw320, is_ht160=is_ht160 + ) + + sta_info = get_test_library.json_get(_req_url=f"port/1/1/{station}") + dict_table_sta = { + "Key": list(sta_info["interface"].keys()), + "Value": list(sta_info["interface"].values()) + } + data_table_sta = tabulate(dict_table_sta, headers='keys', tablefmt='fancy_grid') + logging.info(f"Stations Data ({station}): \n{data_table_sta}\n") + allure.attach(name=f"Stations Data ({station})", body=str(data_table_sta)) + + if sta_got_ip is False: + logging.info("Station Failed to get IP") + pytest.fail("Station Failed to get IP") + + logging.info("Connecting SSH connection...") + hostname = get_test_library.manager_ip + port = get_test_library.manager_ssh_port + username = 'root' + password = 'lanforge' + ping_host = "google.com" + ping_count = 10 + ping_command = f"/home/lanforge/vrf_exec.bash {station} ping -c {ping_count} {ping_host}" + client = paramiko.SSHClient() + try: + client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) + client.connect(hostname, port=port, username=username, password=password) + + logging.info("Making sure client not getting internet access before UAM authentication...") + ping_output_pre_authentication = run_command_using_ssh(client, ping_command) + + logging.info(f"\nBefore Captive Portal-UAM authentication:\n{ping_output_pre_authentication}\n") + allure.attach(name="Before Captive Portal-UAM authentication, station ping response (google.com)", + body=str(ping_output_pre_authentication)) + + if "100% packet loss" not in ping_output_pre_authentication: + logging.info("Client already have internet access before UAM authentication!!!") + pytest.fail("Client already have internet access before UAM authentication") + logging.info("Client do not have internet access before UAM authentication.") + + logging.info("Getting the inet ip address...") + logging.info(f"AP idx: {get_test_library.dut_data.index(dut)}") + cmd_output = get_target_object.get_dut_library_object().run_generic_command( + cmd="ifconfig up0v0", + idx=get_test_library.dut_data.index(dut), + attach_allure=False + ) + ip_pattern = re.compile(r"inet addr:(\d+\.\d+\.\d+\.\d+)") + match = ip_pattern.search(cmd_output) + inet_ip_addr = match.group(1) + logging.info(f"inet ip addr: {inet_ip_addr}") + + expected_location = f"/home/lanforge/vrf_exec.bash {station} curl -I http://{inet_ip_addr}/hotspot/" + expected_location_output = run_command_using_ssh(client, expected_location) + + challenge_link = re.findall(r'^Location:\s+(.*?)\s*$', expected_location_output, re.MULTILINE)[0] + logging.info(f"Redirection link: {challenge_link}") + + url_info = {} + for field in challenge_link.split('?')[1].split('&'): + key_val_list = field.split('=') + if len(key_val_list) == 2 and len(key_val_list[1]) != 0: + url_info[key_val_list[0]] = key_val_list[1] + logging.info(f"url_info: {url_info}") + + challenge = url_info['challenge'] + nasid = url_info['nasid'] + station_mac = url_info['mac'] + uamport = url_info['uamport'] + + link = (f'https://customer.hotspotsystem.com/customer/hotspotlogin.php?ssl-login=&chal={challenge}' + f'&uamip={inet_ip_addr}&uamport={uamport}&nasid={nasid}&mac={station_mac}' + f'&userurl=ct522-7481%2F&login=login&skin_id=&uid=userr1&pwd=password1') + html_request = f'/home/lanforge/vrf_exec.bash {station} curl "{link}"' + html_response = run_command_using_ssh(client, html_request) + + logging.info(f"HTML response containing authentication url:\n{html_response}") + allure.attach(name="HTML response containing authentication url:", body=str(html_response), + attachment_type=allure.attachment_type.TEXT) + + soup = BeautifulSoup(html_response, 'html.parser') + meta_tag = soup.find('meta', attrs={'http-equiv': 'refresh'}) + content = meta_tag['content'] + authentication_url = "=".join(content.split('=')[1:]) + + logging.info(f"Authentication URL extracted from HTML:\n{authentication_url}\n") + allure.attach(name="Authentication URL extracted from HTML:", body=str(authentication_url)) + + cmd_to_authenticate = f'/home/lanforge/vrf_exec.bash {station} curl "{authentication_url}"' + authentication_response = run_command_using_ssh(client, cmd_to_authenticate) + + logging.info(f"\n{authentication_response}\n") + allure.attach(name="Response from captive portal: ", + body=authentication_response, attachment_type=allure.attachment_type.HTML) + + if "

Connected

" not in authentication_response: + logging.info("Captive portal authentication Failed") + pytest.fail("Captive portal authentication Failed") + + logging.info("Captive portal authentication successful! Checking if client got internet access...") + ping_output_post_authentication = run_command_using_ssh(client, ping_command) + + logging.info(f"\nAfter Captive Portal-UAM authentication:\n{ping_output_post_authentication}\n") + allure.attach(name="After Captive Portal-UAM authentication, station ping response (google.com)", + body=str(ping_output_post_authentication)) + + if "100% packet loss" in ping_output_post_authentication: + logging.info("Client did not get internet access even after authentication!!!") + pytest.fail("Client did not get internet access even after authentication") + except Exception as e: + logging.error(f"Error occurred: {e}", exc_info=True) + pytest.fail(f"Error occurred: {e}") + finally: + client.close() + + logging.info("Checking throughput speed...") + wifi_capacity_obj_list = get_test_library.wifi_capacity(mode="NAT-WAN", + download_rate="10Gbps", + upload_rate="56Kbps", + protocol="UDP-IPv4", + duration="60000", + batch_size="1", + stations=radio_port_name[:4] + station, + add_stations=False, + create_stations=False) + + report = wifi_capacity_obj_list[0].report_name[0]['LAST']["response"].split(":::")[1].split("/")[-1] + "/" + numeric_score = get_test_library.read_kpi_file(column_name=["numeric-score"], dir_name=report) + expected_throughput = 10 + throughput = { + "download": [numeric_score[0][0]], + "upload": [numeric_score[1][0]], + "total": [numeric_score[2][0]], + "expected": [f"<= {expected_throughput}"], + "unit": ["Mbps"], + "PASS": [numeric_score[2][0] <= expected_throughput] + } + data_table = tabulate(throughput, headers='keys', tablefmt='fancy_grid') + allure.attach(name='Throughput Data', body=data_table) + logging.info(f"\n{data_table}") + + if not throughput["PASS"][0]: + logging.info("Throughput exceeded than set threshold") + pytest.fail("Throughput exceeded than set threshold") + logging.info("Throughput is within the set threshold") diff --git a/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_click_to_continue_bridge.py b/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_click_to_continue_bridge.py index d5f1f3c76..429abef3c 100644 --- a/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_click_to_continue_bridge.py +++ b/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_click_to_continue_bridge.py @@ -4,43 +4,129 @@ pytest -m "advanced_captive_portal_tests and bridge" """ +import copy import logging import allure import pytest -pytestmark = [pytest.mark.advanced_captive_portal_tests, pytest.mark.bridge, pytest.mark.internal_captive_portal_tests] - -setup_params_general = { - "mode": "BRIDGE", - "ssid_modes": { - "open": [ - {"ssid_name": "ssid_captive_portal_open_2g_br", "appliedRadios": ["2G"], "security_key": "something", - "captive": { +pytestmark = [pytest.mark.advanced_captive_portal_tests, pytest.mark.bridge, pytest.mark.internal_captive_portal_tests, + pytest.mark.click_to_continue] +captive = { "auth-mode": "click-to-continue", "walled-garden-fqdn": [ "*.google.com", "telecominfraproject.com" ] } +setup_params_general = { + "mode": "BRIDGE", + "ssid_modes": { + "open": [ + {"ssid_name": "ssid_captive_portal_open_2g_br", "appliedRadios": ["2G"], "security_key": "something", + "captive": captive + }, + {"ssid_name": "ssid_captive_portal_open_5g_br", "appliedRadios": ["5G"], "security_key": "something", + "captive": captive + } + ], + "owe": [ + {"ssid_name": "int_cap_portal_2g_ctc", "appliedRadios": ["2G"], "security_key": "something", + "captive": captive + }, + {"ssid_name": "int_cap_portal_6g_ctc", "appliedRadios": ["6G"], "security_key": "something", + "captive": captive } ]}, - "rf": {}, + "rf": { + "2G": { + "band": "2G", + "channel": 6, + "channel-mode": "HE" + }, + "5G": { + "band": "5G", + "channel": 36, + "channel-mode": "HE" + }, + "6G": { + "band": "6G", + "channel": 33, + "channel-width": 160, + "channel-mode": "HE" + } + }, "radius": False } +# Deep copy the original dictionary to avoid modifying it +setup_params_general_wifi7 = copy.deepcopy(setup_params_general) + +# Update channel-mode to 'EHT' for all bands +for band in setup_params_general_wifi7["rf"]: + setup_params_general_wifi7["rf"][band]["channel-mode"] = "EHT" + if band == "6G": + setup_params_general_wifi7["rf"][band]["channel-width"] = 320 + +testbed_details_global = None +dut_data = {} +is_bw320 = False +is_ht160 = False + +@pytest.fixture(scope="class") +def setup_initial_configuration(request): + """Calls setup_testbed automatically before tests""" + global testbed_details_global + global setup_params_general + global dut_data + global is_bw320 + global is_ht160 + + selected_tb = request.getfixturevalue("selected_testbed") + print(f"Selected Testbed: {selected_tb}") + testbed_details_global = request.getfixturevalue("get_testbed_details") + assert testbed_details_global is not None, "Testbed details should not be None" + print(f"Initialized Testbed Details: {testbed_details_global}") + + # Extract 'mode' from the first device in 'device_under_tests' + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + + if ap_mode == "wifi7": + is_bw320 = True + if ap_mode == "wifi6e": + is_ht160 = True + + # Assign setup_params_general based on mode + if ap_mode == "wifi6" or ap_mode == "wifi6e": + setup_params_general = setup_params_general + elif ap_mode == "wifi7": + setup_params_general = setup_params_general_wifi7 + else: + print(f"Unknown mode: {ap_mode}. Defaulting to None") + + print(f"Setup Params Assigned: {setup_params_general}") + + get_marker = request.getfixturevalue("get_markers") + requested_combination = [] + for key in get_marker: + if get_marker[key]: + requested_combination.append(get_marker[key]) + + logging.info(f"requested_combination:::{requested_combination}") + get_target_obj = request.getfixturevalue("get_target_object") + logging.info("ready to start setup_basic_configuration") + logging.info(f"setup_params_general value before start:{setup_params_general}") + if isinstance(setup_params_general, tuple): + setup_params_general = setup_params_general[0] + dut_data = get_target_obj.setup_basic_configuration(configuration=setup_params_general, + requested_combination=requested_combination) + + logging.info(f"setup_basic_configuration dut data:{dut_data}") @allure.feature("Advanced Captive Portal Test") @allure.parent_suite("Advanced Captive Portal Tests") @allure.suite(suite_name="Internal Captive Portal") @allure.sub_suite(sub_suite_name="BRIDGE Mode") -@pytest.mark.parametrize( - 'setup_configuration', - [setup_params_general], - indirect=True, - scope="class" -) -@pytest.mark.usefixtures("setup_configuration") class TestBridgeModeadvancedcaptiveportal(object): """ Advanced Captive Portal Test: BRIDGE Mode @@ -49,13 +135,12 @@ class TestBridgeModeadvancedcaptiveportal(object): @pytest.mark.open @pytest.mark.twog - @pytest.mark.click_to_continue @pytest.mark.ow_regression_lf @allure.title("Click-to-continue mode with open encryption 2.4 GHz Band Bridge mode") @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-10977", name="WIFI-10977") - def test_bridge_open_2g_click_to_continue(self, get_test_library, get_dut_logs_per_test_case, - get_test_device_logs, num_stations, check_connectivity, - setup_configuration, get_testbed_details, get_target_object): + def test_bridge_open_2g_click_to_continue(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case,get_test_device_logs, num_stations, + check_connectivity, get_testbed_details, get_target_object): """ BRIDGE Mode Advanced Captive Portal Test with open encryption 2.4 GHz Band pytest -m "advanced_captive_portal_tests and internal_captive_portal_tests and open and twog and bridge and click_to_continue" @@ -81,9 +166,90 @@ class TestBridgeModeadvancedcaptiveportal(object): body="Click-to-continue mode: In this mode the client will be redirected to the page where " "the client needs to accept the terms of service before getting internet.") passes, result = get_test_library.advanced_captive_portal(ssid=ssid_name, security=security, - dut_data=setup_configuration, + dut_data=dut_data, passkey=security_key, mode=mode, band=band, num_sta=num_stations, json_post_data=json_post_data, get_testbed_details=get_testbed_details, tip_2x_obj=get_target_object) assert passes == "PASS", result + + @pytest.mark.open + @pytest.mark.fiveg + @pytest.mark.ow_regression_lf + @allure.title("Click-to-continue mode with open encryption 5 GHz Band Bridge mode") + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14498", name="WIFI-14498") + def test_bridge_open_5g_click_to_continue(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case, get_test_device_logs, num_stations, + check_connectivity, get_testbed_details, get_target_object): + """ + BRIDGE Mode Advanced Captive Portal Test with open encryption 5 GHz Band + pytest -m "advanced_captive_portal_tests and internal_captive_portal_tests and open and fiveg and bridge and click_to_continue" + """ + profile_data = {"ssid_name": "ssid_captive_portal_open_5g_br", "appliedRadios": ["5G"], + "security_key": "something", + "captive": { + "auth-mode": "click-to-continue", + "walled-garden-fqdn": [ + "*.google.com", + "telecominfraproject.com" + ] + } + } + ssid_name = profile_data["ssid_name"] + security_key = "[BLANK]" + security = "open" + mode = "BRIDGE" + band = "fiveg" + # json post data for API + json_post_data = 'action=click&accept_terms=clicked' + allure.attach(name="Definition", + body="Click-to-continue mode: In this mode the client will be redirected to the page where " + "the client needs to accept the terms of service before getting internet.") + passes, result = get_test_library.advanced_captive_portal(ssid=ssid_name, security=security, + dut_data=dut_data, + passkey=security_key, mode=mode, band=band, + num_sta=num_stations, json_post_data=json_post_data, + get_testbed_details=get_testbed_details, + tip_2x_obj=get_target_object) + assert passes == "PASS", result + + @pytest.mark.owe + @pytest.mark.twog + @pytest.mark.sixg + @pytest.mark.ow_regression_lf + @allure.title("Click-to-continue mode with owe encryption 6 GHz Band Bridge mode") + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14498", name="WIFI-14498") + def test_bridge_6g_click_to_continue(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case, get_test_device_logs, num_stations, + check_connectivity, get_testbed_details, get_target_object): + """ + BRIDGE Mode Advanced Captive Portal Test with owe encryption 6 GHz Band + pytest -m "advanced_captive_portal_tests and internal_captive_portal_tests and owe and sixg and bridge and click_to_continue" + """ + profile_data = {"ssid_name": "int_cap_portal_6g_ctc", "appliedRadios": ["6G"], + "security_key": "something", + "captive": { + "auth-mode": "click-to-continue", + "walled-garden-fqdn": [ + "*.google.com", + "telecominfraproject.com" + ] + } + } + ssid_name = profile_data["ssid_name"] + security_key = "[BLANK]" + security = "owe" + mode = "BRIDGE" + band = "sixg" + # json post data for API + json_post_data = 'action=click&accept_terms=clicked' + allure.attach(name="Definition", + body="Click-to-continue mode: In this mode the client will be redirected to the page where " + "the client needs to accept the terms of service before getting internet.") + passes, result = get_test_library.advanced_captive_portal(ssid=ssid_name, security=security, + dut_data=dut_data, + passkey=security_key, mode=mode, band=band, + num_sta=num_stations, json_post_data=json_post_data, + get_testbed_details=get_testbed_details, + tip_2x_obj=get_target_object, enable_owe=True, is_bw320=is_bw320,is_ht160=is_ht160) + assert passes == "PASS", result diff --git a/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_click_to_continue_nat.py b/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_click_to_continue_nat.py index cfdb69a7e..d458222ae 100644 --- a/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_click_to_continue_nat.py +++ b/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_click_to_continue_nat.py @@ -4,43 +4,129 @@ pytest -m "advanced_captive_portal_tests and nat" """ +import copy import logging import allure import pytest -pytestmark = [pytest.mark.advanced_captive_portal_tests, pytest.mark.nat, pytest.mark.internal_captive_portal_tests] +pytestmark = [pytest.mark.advanced_captive_portal_tests, pytest.mark.nat, pytest.mark.internal_captive_portal_tests, + pytest.mark.click_to_continue] -setup_params_general = { - "mode": "NAT", - "ssid_modes": { - "open": [ - {"ssid_name": "ssid_captive_portal_open_2g_br", "appliedRadios": ["2G"], "security_key": "something", - "captive": { +captive = { "auth-mode": "click-to-continue", "walled-garden-fqdn": [ "*.google.com", "telecominfraproject.com" ] } +setup_params_general = { + "mode": "NAT", + "ssid_modes": { + "open": [ + {"ssid_name": "ssid_captive_portal_open_2g_br", "appliedRadios": ["2G"], "security_key": "something", + "captive": captive + }, + {"ssid_name": "ssid_captive_portal_open_5g_br", "appliedRadios": ["5G"], "security_key": "something", + "captive": captive + } + ], + "owe": [ + {"ssid_name": "int_cap_portal_2g_ctc", "appliedRadios": ["2G"], "security_key": "something", + "captive": captive + }, + {"ssid_name": "int_cap_portal_6g_ctc", "appliedRadios": ["6G"], "security_key": "something", + "captive": captive } ]}, - "rf": {}, + "rf": { + "2G": { + "band": "2G", + "channel": 6, + "channel-mode": "HE" + }, + "5G": { + "band": "5G", + "channel": 36, + "channel-mode": "HE" + }, + "6G": { + "band": "6G", + "channel": 33, + "channel-width": 160, + "channel-mode": "HE" + } + }, "radius": False } +# Deep copy the original dictionary to avoid modifying it +setup_params_general_wifi7 = copy.deepcopy(setup_params_general) + +# Update channel-mode to 'EHT' for all bands +for band in setup_params_general_wifi7["rf"]: + setup_params_general_wifi7["rf"][band]["channel-mode"] = "EHT" + if band == "6G": + setup_params_general_wifi7["rf"][band]["channel-width"] = 320 + +testbed_details_global = None +dut_data = {} +is_bw320 = False +is_ht160 = False + +@pytest.fixture(scope="class") +def setup_initial_configuration(request): + """Calls setup_testbed automatically before tests""" + global testbed_details_global + global setup_params_general + global dut_data + global is_bw320 + global is_ht160 + selected_tb = request.getfixturevalue("selected_testbed") + print(f"Selected Testbed: {selected_tb}") + testbed_details_global = request.getfixturevalue("get_testbed_details") + assert testbed_details_global is not None, "Testbed details should not be None" + print(f"Initialized Testbed Details: {testbed_details_global}") + + # Extract 'mode' from the first device in 'device_under_tests' + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + if ap_mode == "wifi7": + is_bw320 = True + if ap_mode == "wifi6e": + is_ht160 = True + + # Assign setup_params_general based on mode + if ap_mode == "wifi6" or ap_mode == "wifi6e": + setup_params_general = setup_params_general + elif ap_mode == "wifi7": + setup_params_general = setup_params_general_wifi7 + else: + print(f"Unknown mode: {ap_mode}. Defaulting to None") + + print(f"Setup Params Assigned: {setup_params_general}") + + get_marker = request.getfixturevalue("get_markers") + requested_combination = [] + for key in get_marker: + if get_marker[key]: + requested_combination.append(get_marker[key]) + + logging.info(f"requested_combination:::{requested_combination}") + get_target_obj = request.getfixturevalue("get_target_object") + logging.info("ready to start setup_basic_configuration") + logging.info(f"setup_params_general value before start:{setup_params_general}") + if isinstance(setup_params_general, tuple): + setup_params_general = setup_params_general[0] + dut_data = get_target_obj.setup_basic_configuration(configuration=setup_params_general, + requested_combination=requested_combination) + + logging.info(f"setup_basic_configuration dut data:{dut_data}") + @allure.feature("Advanced Captive Portal Test") @allure.parent_suite("Advanced Captive Portal Tests") @allure.suite(suite_name="Internal Captive Portal") @allure.sub_suite(sub_suite_name="NAT Mode") -@pytest.mark.parametrize( - 'setup_configuration', - [setup_params_general], - indirect=True, - scope="class" -) -@pytest.mark.usefixtures("setup_configuration") class TestNatModeadvancedcaptiveportal(object): """ Advanced Captive Portal Test: NAT Mode @@ -49,13 +135,13 @@ class TestNatModeadvancedcaptiveportal(object): @pytest.mark.open @pytest.mark.twog - @pytest.mark.click_to_continue @pytest.mark.ow_regression_lf @allure.title("Click-to-continue mode with open encryption 2.4 GHz Band NAT mode") @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14121", name="WIFI-14121") - def test_nat_open_2g_click_to_continue(self, get_test_library, get_dut_logs_per_test_case, - get_test_device_logs, num_stations, check_connectivity, - setup_configuration, get_testbed_details, get_target_object): + def test_nat_open_2g_click_to_continue(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case,get_test_device_logs, + num_stations, check_connectivity, + get_testbed_details, get_target_object): """ nat Mode Advanced Captive Portal Test with open encryption 2.4 GHz Band pytest -m "advanced_captive_portal_tests and internal_captive_portal_tests and open and twog and nat and click_to_continue" @@ -81,9 +167,92 @@ class TestNatModeadvancedcaptiveportal(object): body="Click-to-continue mode: In this mode the client will be redirected to the page where " "the client needs to accept the terms of service before getting internet.") passes, result = get_test_library.advanced_captive_portal(ssid=ssid_name, security=security, - dut_data=setup_configuration, + dut_data=dut_data, passkey=security_key, mode=mode, band=band, num_sta=num_stations, json_post_data=json_post_data, get_testbed_details=get_testbed_details, tip_2x_obj=get_target_object) assert passes == "PASS", result + + @pytest.mark.open + @pytest.mark.fiveg + @pytest.mark.ow_regression_lf + @allure.title("Click-to-continue mode with open encryption 5 GHz Band NAT mode") + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14498", name="WIFI-14498") + def test_nat_open_5g_click_to_continue(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case, get_test_device_logs, + num_stations, check_connectivity, + get_testbed_details, get_target_object): + """ + nat Mode Advanced Captive Portal Test with open encryption 5 GHz Band + pytest -m "advanced_captive_portal_tests and internal_captive_portal_tests and open and fiveg and nat and click_to_continue" + """ + profile_data = {"ssid_name": "ssid_captive_portal_open_5g_br", "appliedRadios": ["5G"], + "security_key": "something", + "captive": { + "auth-mode": "click-to-continue", + "walled-garden-fqdn": [ + "*.google.com", + "telecominfraproject.com" + ] + } + } + ssid_name = profile_data["ssid_name"] + security_key = "[BLANK]" + security = "open" + mode = "NAT-WAN" + band = "fiveg" + # json post data for API + json_post_data = 'action=click&accept_terms=clicked' + allure.attach(name="Definition", + body="Click-to-continue mode: In this mode the client will be redirected to the page where " + "the client needs to accept the terms of service before getting internet.") + passes, result = get_test_library.advanced_captive_portal(ssid=ssid_name, security=security, + dut_data=dut_data, + passkey=security_key, mode=mode, band=band, + num_sta=num_stations, json_post_data=json_post_data, + get_testbed_details=get_testbed_details, + tip_2x_obj=get_target_object) + assert passes == "PASS", result + + @pytest.mark.owe + @pytest.mark.twog + @pytest.mark.sixg + @pytest.mark.ow_regression_lf + @allure.title("Click-to-continue mode with owe encryption 6 GHz Band NAT mode") + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14498", name="WIFI-14498") + def test_nat_6g_click_to_continue(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case, get_test_device_logs, + num_stations, check_connectivity, + get_testbed_details, get_target_object): + """ + nat Mode Advanced Captive Portal Test with owe encryption 6 GHz Band + pytest -m "advanced_captive_portal_tests and internal_captive_portal_tests and owe and sixg and nat and click_to_continue" + """ + profile_data = {"ssid_name": "int_cap_portal_6g_ctc", "appliedRadios": ["6G"], + "security_key": "something", + "captive": { + "auth-mode": "click-to-continue", + "walled-garden-fqdn": [ + "*.google.com", + "telecominfraproject.com" + ] + } + } + ssid_name = profile_data["ssid_name"] + security_key = "[BLANK]" + security = "owe" + mode = "NAT-WAN" + band = "sixg" + # json post data for API + json_post_data = 'action=click&accept_terms=clicked' + allure.attach(name="Definition", + body="Click-to-continue mode: In this mode the client will be redirected to the page where " + "the client needs to accept the terms of service before getting internet.") + passes, result = get_test_library.advanced_captive_portal(ssid=ssid_name, security=security, + dut_data=dut_data, + passkey=security_key, mode=mode, band=band, + num_sta=num_stations, json_post_data=json_post_data, + get_testbed_details=get_testbed_details, + tip_2x_obj=get_target_object, enable_owe=True, is_bw320=is_bw320,is_ht160=is_ht160) + assert passes == "PASS", result \ No newline at end of file diff --git a/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_local_user_and_pass_bridge.py b/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_local_user_and_pass_bridge.py index f5660630b..6950f2068 100644 --- a/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_local_user_and_pass_bridge.py +++ b/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_local_user_and_pass_bridge.py @@ -4,19 +4,16 @@ pytest -m "advanced_captive_portal_tests and bridge" """ +import copy import logging import allure import pytest -pytestmark = [pytest.mark.advanced_captive_portal_tests, pytest.mark.bridge, pytest.mark.internal_captive_portal_tests] +pytestmark = [pytest.mark.advanced_captive_portal_tests, pytest.mark.bridge, pytest.mark.internal_captive_portal_tests, + pytest.mark.local_user_and_pass] -setup_params_general = { - "mode": "BRIDGE", - "ssid_modes": { - "open": [ - {"ssid_name": "ssid_captive_portal_open_2g_br", "appliedRadios": ["2G"], "security_key": "something", - "captive": { +captive = { "auth-mode": "credentials", "credentials": [ { @@ -29,24 +26,111 @@ setup_params_general = { "telecominfraproject.com" ] } +setup_params_general = { + "mode": "BRIDGE", + "ssid_modes": { + "open": [ + {"ssid_name": "ssid_captive_portal_open_2g_br", "appliedRadios": ["2G"], "security_key": "something", + "captive": captive + }, + {"ssid_name": "ssid_captive_portal_open_5g_br", "appliedRadios": ["5G"], "security_key": "something", + "captive": captive + } + ], + "owe": [ + {"ssid_name": "int_cap_portal_2g_lup", "appliedRadios": ["2G"], "security_key": "something", + "captive": captive + }, + {"ssid_name": "int_cap_portal_6g_lup", "appliedRadios": ["6G"], "security_key": "something", + "captive": captive } ]}, - "rf": {}, + "rf": { + "2G": { + "band": "2G", + "channel": 6, + "channel-mode": "HE" + }, + "5G": { + "band": "5G", + "channel": 36, + "channel-mode": "HE" + }, + "6G": { + "band": "6G", + "channel": 33, + "channel-width": 160, + "channel-mode": "HE" + } + }, "radius": False } +# Deep copy the original dictionary to avoid modifying it +setup_params_general_wifi7 = copy.deepcopy(setup_params_general) + +# Update channel-mode to 'EHT' for all bands +for band in setup_params_general_wifi7["rf"]: + setup_params_general_wifi7["rf"][band]["channel-mode"] = "EHT" + if band == "6G": + setup_params_general_wifi7["rf"][band]["channel-width"] = 320 + +testbed_details_global = None +dut_data = {} +is_bw320 = False +is_ht160 = False + +@pytest.fixture(scope="class") +def setup_initial_configuration(request): + """Calls setup_testbed automatically before tests""" + global testbed_details_global + global setup_params_general + global dut_data + global is_bw320 + global is_ht160 + selected_tb = request.getfixturevalue("selected_testbed") + print(f"Selected Testbed: {selected_tb}") + testbed_details_global = request.getfixturevalue("get_testbed_details") + assert testbed_details_global is not None, "Testbed details should not be None" + print(f"Initialized Testbed Details: {testbed_details_global}") + + # Extract 'mode' from the first device in 'device_under_tests' + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + if ap_mode == "wifi7": + is_bw320 = True + if ap_mode == "wifi6e": + is_ht160 = True + # Assign setup_params_general based on mode + if ap_mode == "wifi6" or ap_mode == "wifi6e": + setup_params_general = setup_params_general + elif ap_mode == "wifi7": + setup_params_general = setup_params_general_wifi7 + else: + print(f"Unknown mode: {ap_mode}. Defaulting to None") + + print(f"Setup Params Assigned: {setup_params_general}") + + get_marker = request.getfixturevalue("get_markers") + requested_combination = [] + for key in get_marker: + if get_marker[key]: + requested_combination.append(get_marker[key]) + + logging.info(f"requested_combination:::{requested_combination}") + get_target_obj = request.getfixturevalue("get_target_object") + logging.info("ready to start setup_basic_configuration") + logging.info(f"setup_params_general value before start:{setup_params_general}") + if isinstance(setup_params_general, tuple): + setup_params_general = setup_params_general[0] + dut_data = get_target_obj.setup_basic_configuration(configuration=setup_params_general, + requested_combination=requested_combination) + + logging.info(f"setup_basic_configuration dut data:{dut_data}") @allure.feature("Advanced Captive Portal Test") @allure.parent_suite("Advanced Captive Portal Tests") @allure.suite(suite_name="Internal Captive Portal") @allure.sub_suite(sub_suite_name="BRIDGE Mode") -@pytest.mark.parametrize( - 'setup_configuration', - [setup_params_general], - indirect=True, - scope="class" -) -@pytest.mark.usefixtures("setup_configuration") class TestBridgeModeadvancedcaptiveportal(object): """ Advanced Captive Portal Test: BRIDGE Mode @@ -55,13 +139,12 @@ class TestBridgeModeadvancedcaptiveportal(object): @pytest.mark.open @pytest.mark.twog - @pytest.mark.local_user_and_pass @pytest.mark.ow_regression_lf @allure.title("Local user/pass mode with open encryption 2.4 GHz Band Bridge mode") @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-10991", name="WIFI-10991") - def test_bridge_open_2g_local_user_and_pass(self, get_test_library, get_dut_logs_per_test_case, - get_test_device_logs, num_stations, check_connectivity, - setup_configuration, get_testbed_details, get_target_object): + def test_bridge_open_2g_local_user_and_pass(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case,get_test_device_logs, + num_stations,check_connectivity,get_testbed_details, get_target_object): """ BRIDGE Mode Advanced Captive Portal Test with open encryption 2.4 GHz Band pytest -m "advanced_captive_portal_tests and internal_captive_portal_tests and open and twog and bridge and local_user_and_pass" @@ -93,9 +176,106 @@ class TestBridgeModeadvancedcaptiveportal(object): body="Local user/pass mode (Captive-Credentials): In this mode the client needs to " "enter the valid credentials that are configured in the AP to get the internet access.") passes, result = get_test_library.advanced_captive_portal(ssid=ssid_name, security=security, - dut_data=setup_configuration, + dut_data=dut_data, passkey=security_key, mode=mode, band=band, num_sta=num_stations, json_post_data=json_post_data, get_testbed_details=get_testbed_details, tip_2x_obj=get_target_object) assert passes == "PASS", result + + @pytest.mark.open + @pytest.mark.fiveg + @pytest.mark.ow_regression_lf + @allure.title("Local user/pass mode with open encryption 5 GHz Band Bridge mode") + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14498", name="WIFI-14498") + def test_bridge_open_5g_local_user_and_pass(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case, get_test_device_logs, + num_stations, check_connectivity, get_testbed_details, + get_target_object): + """ + BRIDGE Mode Advanced Captive Portal Test with open encryption 5 GHz Band + pytest -m "advanced_captive_portal_tests and internal_captive_portal_tests and open and fiveg and bridge and local_user_and_pass" + """ + profile_data = {"ssid_name": "ssid_captive_portal_open_5g_br", "appliedRadios": ["5G"], + "security_key": "something", + "captive": { + "auth-mode": "credentials", + "credentials": [ + { + "username": "abc", + "password": "def" + } + ], + "walled-garden-fqdn": [ + "*.google.com", + "telecominfraproject.com" + ] + } + } + ssid_name = profile_data["ssid_name"] + security_key = "[BLANK]" + security = "open" + mode = "BRIDGE" + band = "fiveg" + # json post data for API + json_post_data = 'username=abc&password=def&action=credentials' + allure.attach(name="Definition", + body="Local user/pass mode (Captive-Credentials): In this mode the client needs to " + "enter the valid credentials that are configured in the AP to get the internet access.") + passes, result = get_test_library.advanced_captive_portal(ssid=ssid_name, security=security, + dut_data=dut_data, + passkey=security_key, mode=mode, band=band, + num_sta=num_stations, json_post_data=json_post_data, + get_testbed_details=get_testbed_details, + tip_2x_obj=get_target_object) + assert passes == "PASS", result + + @pytest.mark.owe + @pytest.mark.twog + @pytest.mark.sixg + @pytest.mark.ow_regression_lf + @allure.title("Local user/pass mode with owe encryption 6 GHz Band Bridge mode") + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14498", name="WIFI-14498") + def test_bridge_6g_local_user_and_pass(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case, get_test_device_logs, + num_stations, check_connectivity, get_testbed_details, + get_target_object): + """ + BRIDGE Mode Advanced Captive Portal Test with owe encryption 6 GHz Band + pytest -m "advanced_captive_portal_tests and internal_captive_portal_tests and owe and sixg and bridge and local_user_and_pass" + """ + profile_data = {"ssid_name": "int_cap_portal_6g_lup", "appliedRadios": ["6G"], + "security_key": "something", + "captive": { + "auth-mode": "credentials", + "credentials": [ + { + "username": "abc", + "password": "def" + } + ], + "walled-garden-fqdn": [ + "*.google.com", + "telecominfraproject.com" + ] + } + } + ssid_name = profile_data["ssid_name"] + security_key = "[BLANK]" + security = "owe" + mode = "BRIDGE" + band = "sixg" + # json post data for API + json_post_data = 'username=abc&password=def&action=credentials' + allure.attach(name="Definition", + body="Local user/pass mode (Captive-Credentials): In this mode the client needs to " + "enter the valid credentials that are configured in the AP to get the internet access.") + passes, result = get_test_library.advanced_captive_portal(ssid=ssid_name, security=security, + dut_data=dut_data, + passkey=security_key, mode=mode, band=band, + num_sta=num_stations, json_post_data=json_post_data, + get_testbed_details=get_testbed_details, + tip_2x_obj=get_target_object, enable_owe=True, is_bw320=is_bw320,is_ht160=is_ht160) + assert passes == "PASS", result + + diff --git a/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_local_user_and_pass_nat.py b/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_local_user_and_pass_nat.py index 9dc6f22ad..2188315b9 100644 --- a/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_local_user_and_pass_nat.py +++ b/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_local_user_and_pass_nat.py @@ -4,19 +4,15 @@ pytest -m "advanced_captive_portal_tests and nat" """ +import copy import logging import allure import pytest -pytestmark = [pytest.mark.advanced_captive_portal_tests, pytest.mark.nat, pytest.mark.internal_captive_portal_tests] - -setup_params_general = { - "mode": "NAT", - "ssid_modes": { - "open": [ - {"ssid_name": "ssid_captive_portal_open_2g_br", "appliedRadios": ["2G"], "security_key": "something", - "captive": { +pytestmark = [pytest.mark.advanced_captive_portal_tests, pytest.mark.nat, pytest.mark.internal_captive_portal_tests, + pytest.mark.local_user_and_pass] +captive = { "auth-mode": "credentials", "credentials": [ { @@ -29,24 +25,111 @@ setup_params_general = { "telecominfraproject.com" ] } +setup_params_general = { + "mode": "NAT", + "ssid_modes": { + "open": [ + {"ssid_name": "ssid_captive_portal_open_2g_br", "appliedRadios": ["2G"], "security_key": "something", + "captive": captive + }, + {"ssid_name": "ssid_captive_portal_open_5g_br", "appliedRadios": ["5G"], "security_key": "something", + "captive": captive + } + ], + "owe": [ + {"ssid_name": "int_cap_portal_2g_lup", "appliedRadios": ["2G"], "security_key": "something", + "captive": captive + }, + {"ssid_name": "int_cap_portal_6g_lup", "appliedRadios": ["6G"], "security_key": "something", + "captive": captive } ]}, - "rf": {}, + "rf": { + "2G": { + "band": "2G", + "channel": 6, + "channel-mode": "HE" + }, + "5G": { + "band": "5G", + "channel": 36, + "channel-mode": "HE" + }, + "6G": { + "band": "6G", + "channel": 33, + "channel-width": 160, + "channel-mode": "HE" + } + }, "radius": False } +# Deep copy the original dictionary to avoid modifying it +setup_params_general_wifi7 = copy.deepcopy(setup_params_general) + +# Update channel-mode to 'EHT' for all bands +for band in setup_params_general_wifi7["rf"]: + setup_params_general_wifi7["rf"][band]["channel-mode"] = "EHT" + if band == "6G": + setup_params_general_wifi7["rf"][band]["channel-width"] = 320 + +testbed_details_global = None +dut_data = {} +is_bw320 = False +is_ht160 = False + +@pytest.fixture(scope="class") +def setup_initial_configuration(request): + """Calls setup_testbed automatically before tests""" + global testbed_details_global + global setup_params_general + global dut_data + global is_bw320 + global is_ht160 + selected_tb = request.getfixturevalue("selected_testbed") + print(f"Selected Testbed: {selected_tb}") + testbed_details_global = request.getfixturevalue("get_testbed_details") + assert testbed_details_global is not None, "Testbed details should not be None" + print(f"Initialized Testbed Details: {testbed_details_global}") + + # Extract 'mode' from the first device in 'device_under_tests' + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + if ap_mode == "wifi7": + is_bw320 = True + if ap_mode == "wifi6e": + is_ht160 = True + # Assign setup_params_general based on mode + if ap_mode == "wifi6" or ap_mode == "wifi6e": + setup_params_general = setup_params_general + elif ap_mode == "wifi7": + setup_params_general = setup_params_general_wifi7 + else: + print(f"Unknown mode: {ap_mode}. Defaulting to None") + + print(f"Setup Params Assigned: {setup_params_general}") + + get_marker = request.getfixturevalue("get_markers") + requested_combination = [] + for key in get_marker: + if get_marker[key]: + requested_combination.append(get_marker[key]) + + logging.info(f"requested_combination:::{requested_combination}") + get_target_obj = request.getfixturevalue("get_target_object") + logging.info("ready to start setup_basic_configuration") + logging.info(f"setup_params_general value before start:{setup_params_general}") + if isinstance(setup_params_general, tuple): + setup_params_general = setup_params_general[0] + dut_data = get_target_obj.setup_basic_configuration(configuration=setup_params_general, + requested_combination=requested_combination) + + logging.info(f"setup_basic_configuration dut data:{dut_data}") @allure.feature("Advanced Captive Portal Test") @allure.parent_suite("Advanced Captive Portal Tests") @allure.suite(suite_name="Internal Captive Portal") @allure.sub_suite(sub_suite_name="NAT Mode") -@pytest.mark.parametrize( - 'setup_configuration', - [setup_params_general], - indirect=True, - scope="class" -) -@pytest.mark.usefixtures("setup_configuration") class TestNatModeadvancedcaptiveportal(object): """ Advanced Captive Portal Test: NAT Mode @@ -55,13 +138,12 @@ class TestNatModeadvancedcaptiveportal(object): @pytest.mark.open @pytest.mark.twog - @pytest.mark.local_user_and_pass @pytest.mark.ow_regression_lf @allure.title("Local user/pass mode with open encryption 2.4 GHz Band NAT mode") @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14122", name="WIFI-14122") - def test_nat_open_2g_local_user_and_pass(self, get_test_library, get_dut_logs_per_test_case, - get_test_device_logs, num_stations, check_connectivity, - setup_configuration, get_testbed_details, get_target_object): + def test_nat_open_2g_local_user_and_pass(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case,get_test_device_logs, num_stations, + check_connectivity, get_testbed_details, get_target_object): """ NAT Mode Advanced Captive Portal Test with open encryption 2.4 GHz Band pytest -m "advanced_captive_portal_tests and internal_captive_portal_tests and open and twog and nat and local_user_and_pass" @@ -93,9 +175,102 @@ class TestNatModeadvancedcaptiveportal(object): body="Local user/pass mode (Captive-Credentials): In this mode the client needs to " "enter the valid credentials that are configured in the AP to get the internet access.") passes, result = get_test_library.advanced_captive_portal(ssid=ssid_name, security=security, - dut_data=setup_configuration, + dut_data=dut_data, passkey=security_key, mode=mode, band=band, num_sta=num_stations, json_post_data=json_post_data, get_testbed_details=get_testbed_details, tip_2x_obj=get_target_object) assert passes == "PASS", result + + @pytest.mark.open + @pytest.mark.fiveg + @pytest.mark.ow_regression_lf + @allure.title("Local user/pass mode with open encryption 5 GHz Band NAT mode") + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14498", name="WIFI-14498") + def test_nat_open_5g_local_user_and_pass(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case, get_test_device_logs, num_stations, + check_connectivity, get_testbed_details, get_target_object): + """ + NAT Mode Advanced Captive Portal Test with open encryption 5 GHz Band + pytest -m "advanced_captive_portal_tests and internal_captive_portal_tests and open and fiveg and nat and local_user_and_pass" + """ + profile_data = {"ssid_name": "ssid_captive_portal_open_5g_br", "appliedRadios": ["5G"], + "security_key": "something", + "captive": { + "auth-mode": "credentials", + "credentials": [ + { + "username": "abc", + "password": "def" + } + ], + "walled-garden-fqdn": [ + "*.google.com", + "telecominfraproject.com" + ] + } + } + ssid_name = profile_data["ssid_name"] + security_key = "[BLANK]" + security = "open" + mode = "NAT-WAN" + band = "fiveg" + # json post data for API + json_post_data = 'username=abc&password=def&action=credentials' + allure.attach(name="Definition", + body="Local user/pass mode (Captive-Credentials): In this mode the client needs to " + "enter the valid credentials that are configured in the AP to get the internet access.") + passes, result = get_test_library.advanced_captive_portal(ssid=ssid_name, security=security, + dut_data=dut_data, + passkey=security_key, mode=mode, band=band, + num_sta=num_stations, json_post_data=json_post_data, + get_testbed_details=get_testbed_details, + tip_2x_obj=get_target_object) + assert passes == "PASS", result + + @pytest.mark.owe + @pytest.mark.twog + @pytest.mark.sixg + @pytest.mark.ow_regression_lf + @allure.title("Local user/pass mode with owe encryption 6 GHz Band NAT mode") + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14498", name="WIFI-14498") + def test_nat_6g_local_user_and_pass(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case, get_test_device_logs, num_stations, + check_connectivity, get_testbed_details, get_target_object): + """ + NAT Mode Advanced Captive Portal Test with owe encryption 6 GHz Band + pytest -m "advanced_captive_portal_tests and internal_captive_portal_tests and owe and sixg and nat and local_user_and_pass" + """ + profile_data = {"ssid_name": "int_cap_portal_6g_lup", "appliedRadios": ["6G"], + "security_key": "something", + "captive": { + "auth-mode": "credentials", + "credentials": [ + { + "username": "abc", + "password": "def" + } + ], + "walled-garden-fqdn": [ + "*.google.com", + "telecominfraproject.com" + ] + } + } + ssid_name = profile_data["ssid_name"] + security_key = "[BLANK]" + security = "owe" + mode = "NAT-WAN" + band = "sixg" + # json post data for API + json_post_data = 'username=abc&password=def&action=credentials' + allure.attach(name="Definition", + body="Local user/pass mode (Captive-Credentials): In this mode the client needs to " + "enter the valid credentials that are configured in the AP to get the internet access.") + passes, result = get_test_library.advanced_captive_portal(ssid=ssid_name, security=security, + dut_data=dut_data, + passkey=security_key, mode=mode, band=band, + num_sta=num_stations, json_post_data=json_post_data, + get_testbed_details=get_testbed_details, + tip_2x_obj=get_target_object, enable_owe=True, is_bw320=is_bw320,is_ht160=is_ht160) + assert passes == "PASS", result diff --git a/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_radius_user_and_pass_bridge.py b/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_radius_user_and_pass_bridge.py index 25479972d..6671bf781 100644 --- a/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_radius_user_and_pass_bridge.py +++ b/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_radius_user_and_pass_bridge.py @@ -4,19 +4,16 @@ pytest -m "advanced_captive_portal_tests and bridge" """ +import copy import logging import allure import pytest -pytestmark = [pytest.mark.advanced_captive_portal_tests, pytest.mark.bridge, pytest.mark.internal_captive_portal_tests] +pytestmark = [pytest.mark.advanced_captive_portal_tests, pytest.mark.bridge, pytest.mark.internal_captive_portal_tests, + pytest.mark.radius_user_and_pass] -setup_params_general = { - "mode": "BRIDGE", - "ssid_modes": { - "open": [ - {"ssid_name": "ssid_captive_portal_open_2g_br", "appliedRadios": ["2G"], "security_key": "something", - "captive": { +captive = { "auth-mode": "radius", "auth-server": "10.28.3.21", "auth-port": 1812, @@ -26,24 +23,110 @@ setup_params_general = { "telecominfraproject.com" ] } +setup_params_general = { + "mode": "BRIDGE", + "ssid_modes": { + "open": [ + {"ssid_name": "ssid_captive_portal_open_2g_br", "appliedRadios": ["2G"], "security_key": "something", + "captive": captive + }, + {"ssid_name": "ssid_captive_portal_open_5g_br", "appliedRadios": ["5G"], "security_key": "something", + "captive": captive + } + ], + "owe": [ + {"ssid_name": "int_cap_portal_2g_rup", "appliedRadios": ["2G"], "security_key": "something", + "captive": captive + }, + {"ssid_name": "int_cap_portal_6g_rup", "appliedRadios": ["6G"], "security_key": "something", + "captive": captive } ]}, - "rf": {}, + "rf": { + "2G": { + "band": "2G", + "channel": 6, + "channel-mode": "HE" + }, + "5G": { + "band": "5G", + "channel": 36, + "channel-mode": "HE" + }, + "6G": { + "band": "6G", + "channel": 33, + "channel-width": 160, + "channel-mode": "HE" + } + }, "radius": False } +# Deep copy the original dictionary to avoid modifying it +setup_params_general_wifi7 = copy.deepcopy(setup_params_general) +# Update channel-mode to 'EHT' for all bands +for band in setup_params_general_wifi7["rf"]: + setup_params_general_wifi7["rf"][band]["channel-mode"] = "EHT" + if band == "6G": + setup_params_general_wifi7["rf"][band]["channel-width"] = 320 + +testbed_details_global = None +dut_data = {} +is_bw320 = False +is_ht160 = False + +@pytest.fixture(scope="class") +def setup_initial_configuration(request): + """Calls setup_testbed automatically before tests""" + global testbed_details_global + global setup_params_general + global dut_data + global is_bw320 + global is_ht160 + selected_tb = request.getfixturevalue("selected_testbed") + print(f"Selected Testbed: {selected_tb}") + testbed_details_global = request.getfixturevalue("get_testbed_details") + assert testbed_details_global is not None, "Testbed details should not be None" + print(f"Initialized Testbed Details: {testbed_details_global}") + + # Extract 'mode' from the first device in 'device_under_tests' + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + if ap_mode == "wifi7": + is_bw320 = True + if ap_mode == "wifi6e": + is_ht160 = True + # Assign setup_params_general based on mode + if ap_mode == "wifi6" or ap_mode == "wifi6e": + setup_params_general = setup_params_general + elif ap_mode == "wifi7": + setup_params_general = setup_params_general_wifi7 + else: + print(f"Unknown mode: {ap_mode}. Defaulting to None") + + print(f"Setup Params Assigned: {setup_params_general}") + + get_marker = request.getfixturevalue("get_markers") + requested_combination = [] + for key in get_marker: + if get_marker[key]: + requested_combination.append(get_marker[key]) + + logging.info(f"requested_combination:::{requested_combination}") + get_target_obj = request.getfixturevalue("get_target_object") + logging.info("ready to start setup_basic_configuration") + logging.info(f"setup_params_general value before start:{setup_params_general}") + if isinstance(setup_params_general, tuple): + setup_params_general = setup_params_general[0] + dut_data = get_target_obj.setup_basic_configuration(configuration=setup_params_general, + requested_combination=requested_combination) + + logging.info(f"setup_basic_configuration dut data:{dut_data}") @allure.feature("Advanced Captive Portal Test") @allure.parent_suite("Advanced Captive Portal Tests") @allure.suite(suite_name="Internal Captive Portal") @allure.sub_suite(sub_suite_name="BRIDGE Mode") -@pytest.mark.parametrize( - 'setup_configuration', - [setup_params_general], - indirect=True, - scope="class" -) -@pytest.mark.usefixtures("setup_configuration") class TestBridgeModeadvancedcaptiveportal(object): """ Advanced Captive Portal Test: BRIDGE Mode @@ -52,14 +135,12 @@ class TestBridgeModeadvancedcaptiveportal(object): @pytest.mark.open @pytest.mark.twog - @pytest.mark.radius_user_and_pass @pytest.mark.ow_regression_lf @allure.title("Radius user/pass mode with open encryption 2.4 GHz Band Bridge mode") @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-10996", name="WIFI-10996") - def test_bridge_open_2g_radius_user_and_pass(self, get_test_library, get_dut_logs_per_test_case, - get_test_device_logs, num_stations, check_connectivity, - setup_configuration, get_testbed_details, get_target_object, - radius_info): + def test_bridge_open_2g_radius_user_and_pass(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case,get_test_device_logs, num_stations, + check_connectivity,get_testbed_details,get_target_object,radius_info): """ BRIDGE Mode Advanced Captive Portal Test with open encryption 2.4 GHz Band pytest -m "advanced_captive_portal_tests and internal_captive_portal_tests and open and twog and bridge and radius_user_and_pass" @@ -92,9 +173,106 @@ class TestBridgeModeadvancedcaptiveportal(object): " the valid credentials that are configured in the radius server being used to get " "the internet access.") passes, result = get_test_library.advanced_captive_portal(ssid=ssid_name, security=security, - dut_data=setup_configuration, + dut_data=dut_data, passkey=security_key, mode=mode, band=band, num_sta=num_stations, json_post_data=json_post_data, get_testbed_details=get_testbed_details, tip_2x_obj=get_target_object) assert passes == "PASS", result + + @pytest.mark.open + @pytest.mark.fiveg + @pytest.mark.ow_regression_lf + @allure.title("Radius user/pass mode with open encryption 5 GHz Band Bridge mode") + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14498", name="WIFI-14498") + def test_bridge_open_5g_radius_user_and_pass(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case, get_test_device_logs, num_stations, + check_connectivity, get_testbed_details, get_target_object, + radius_info): + """ + BRIDGE Mode Advanced Captive Portal Test with open encryption 5 GHz Band + pytest -m "advanced_captive_portal_tests and internal_captive_portal_tests and open and fiveg and bridge and radius_user_and_pass" + """ + profile_data = {"ssid_name": "ssid_captive_portal_open_5g_br", "appliedRadios": ["5G"], + "security_key": "something", + "captive": { + "auth-mode": "radius", + "auth-server": "10.28.3.21", + "auth-port": 1812, + "auth-secret": "testing123", + "walled-garden-fqdn": [ + "*.google.com", + "telecominfraproject.com" + ] + } + } + ssid_name = profile_data["ssid_name"] + security_key = "[BLANK]" + security = "open" + mode = "BRIDGE" + band = "fiveg" + identity = radius_info['user'] + passwd = radius_info["password"] + # json post data for API + json_post_data = f"username={identity}&password={passwd}&action=radius" + print("json_post_data", json_post_data) + allure.attach(name="Definition", + body="Radius user/pass mode (Captive-Radius): In this mode the client needs to enter" + " the valid credentials that are configured in the radius server being used to get " + "the internet access.") + passes, result = get_test_library.advanced_captive_portal(ssid=ssid_name, security=security, + dut_data=dut_data, + passkey=security_key, mode=mode, band=band, + num_sta=num_stations, json_post_data=json_post_data, + get_testbed_details=get_testbed_details, + tip_2x_obj=get_target_object) + assert passes == "PASS", result + + @pytest.mark.owe + @pytest.mark.twog + @pytest.mark.sixg + @pytest.mark.ow_regression_lf + @allure.title("Radius user/pass mode with owe encryption 6 GHz Band Bridge mode") + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14498", name="WIFI-14498") + def test_bridge_6g_radius_user_and_pass(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case, get_test_device_logs, num_stations, + check_connectivity, get_testbed_details, get_target_object, + radius_info): + """ + BRIDGE Mode Advanced Captive Portal Test with owe encryption 6 GHz Band + pytest -m "advanced_captive_portal_tests and internal_captive_portal_tests and owe and sixg and bridge and radius_user_and_pass" + """ + profile_data = {"ssid_name": "int_cap_portal_6g_rup", "appliedRadios": ["6G"], + "security_key": "something", + "captive": { + "auth-mode": "radius", + "auth-server": "10.28.3.21", + "auth-port": 1812, + "auth-secret": "testing123", + "walled-garden-fqdn": [ + "*.google.com", + "telecominfraproject.com" + ] + } + } + ssid_name = profile_data["ssid_name"] + security_key = "[BLANK]" + security = "owe" + mode = "BRIDGE" + band = "sixg" + identity = radius_info['user'] + passwd = radius_info["password"] + # json post data for API + json_post_data = f"username={identity}&password={passwd}&action=radius" + print("json_post_data", json_post_data) + allure.attach(name="Definition", + body="Radius user/pass mode (Captive-Radius): In this mode the client needs to enter" + " the valid credentials that are configured in the radius server being used to get " + "the internet access.") + passes, result = get_test_library.advanced_captive_portal(ssid=ssid_name, security=security, + dut_data=dut_data, + passkey=security_key, mode=mode, band=band, + num_sta=num_stations, json_post_data=json_post_data, + get_testbed_details=get_testbed_details, + tip_2x_obj=get_target_object, enable_owe=True, is_bw320=is_bw320,is_ht160=is_ht160) + assert passes == "PASS", result diff --git a/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_radius_user_and_pass_nat.py b/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_radius_user_and_pass_nat.py index 82d7cab89..6b0f0d41c 100644 --- a/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_radius_user_and_pass_nat.py +++ b/tests/e2e/basic/advanced_captive_portal_tests/internal_captive_portal_tests/open/test_radius_user_and_pass_nat.py @@ -4,19 +4,15 @@ pytest -m "advanced_captive_portal_tests and nat" """ +import copy import logging import allure import pytest -pytestmark = [pytest.mark.advanced_captive_portal_tests, pytest.mark.nat, pytest.mark.internal_captive_portal_tests] - -setup_params_general = { - "mode": "NAT", - "ssid_modes": { - "open": [ - {"ssid_name": "ssid_captive_portal_open_2g_br", "appliedRadios": ["2G"], "security_key": "something", - "captive": { +pytestmark = [pytest.mark.advanced_captive_portal_tests, pytest.mark.nat, pytest.mark.internal_captive_portal_tests, + pytest.mark.radius_user_and_pass] +captive = { "auth-mode": "radius", "auth-server": "10.28.3.21", "auth-port": 1812, @@ -26,24 +22,110 @@ setup_params_general = { "telecominfraproject.com" ] } +setup_params_general = { + "mode": "NAT", + "ssid_modes": { + "open": [ + {"ssid_name": "ssid_captive_portal_open_2g_br", "appliedRadios": ["2G"], "security_key": "something", + "captive": captive + }, + {"ssid_name": "ssid_captive_portal_open_5g_br", "appliedRadios": ["5G"], "security_key": "something", + "captive": captive + } + ], + "owe": [ + {"ssid_name": "int_cap_portal_2g_rup", "appliedRadios": ["2G"], "security_key": "something", + "captive": captive + }, + {"ssid_name": "int_cap_portal_6g_rup", "appliedRadios": ["6G"], "security_key": "something", + "captive": captive } ]}, - "rf": {}, + "rf": { + "2G": { + "band": "2G", + "channel": 6, + "channel-mode": "HE" + }, + "5G": { + "band": "5G", + "channel": 36, + "channel-mode": "HE" + }, + "6G": { + "band": "6G", + "channel": 33, + "channel-width": 160, + "channel-mode": "HE" + } + }, "radius": False } +# Deep copy the original dictionary to avoid modifying it +setup_params_general_wifi7 = copy.deepcopy(setup_params_general) +# Update channel-mode to 'EHT' for all bands +for band in setup_params_general_wifi7["rf"]: + setup_params_general_wifi7["rf"][band]["channel-mode"] = "EHT" + if band == "6G": + setup_params_general_wifi7["rf"][band]["channel-width"] = 320 + +testbed_details_global = None +dut_data = {} +is_bw320 = False +is_ht160 = False + +@pytest.fixture(scope="class") +def setup_initial_configuration(request): + """Calls setup_testbed automatically before tests""" + global testbed_details_global + global setup_params_general + global dut_data + global is_bw320 + global is_ht160 + selected_tb = request.getfixturevalue("selected_testbed") + print(f"Selected Testbed: {selected_tb}") + testbed_details_global = request.getfixturevalue("get_testbed_details") + assert testbed_details_global is not None, "Testbed details should not be None" + print(f"Initialized Testbed Details: {testbed_details_global}") + + # Extract 'mode' from the first device in 'device_under_tests' + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + if ap_mode == "wifi7": + is_bw320 = True + if ap_mode == "wifi6e": + is_ht160 = True + # Assign setup_params_general based on mode + if ap_mode == "wifi6" or ap_mode == "wifi6e": + setup_params_general = setup_params_general + elif ap_mode == "wifi7": + setup_params_general = setup_params_general_wifi7 + else: + print(f"Unknown mode: {ap_mode}. Defaulting to None") + + print(f"Setup Params Assigned: {setup_params_general}") + + get_marker = request.getfixturevalue("get_markers") + requested_combination = [] + for key in get_marker: + if get_marker[key]: + requested_combination.append(get_marker[key]) + + logging.info(f"requested_combination:::{requested_combination}") + get_target_obj = request.getfixturevalue("get_target_object") + logging.info("ready to start setup_basic_configuration") + logging.info(f"setup_params_general value before start:{setup_params_general}") + if isinstance(setup_params_general, tuple): + setup_params_general = setup_params_general[0] + dut_data = get_target_obj.setup_basic_configuration(configuration=setup_params_general, + requested_combination=requested_combination) + + logging.info(f"setup_basic_configuration dut data:{dut_data}") @allure.feature("Advanced Captive Portal Test") @allure.parent_suite("Advanced Captive Portal Tests") @allure.suite(suite_name="Internal Captive Portal") @allure.sub_suite(sub_suite_name="NAT Mode") -@pytest.mark.parametrize( - 'setup_configuration', - [setup_params_general], - indirect=True, - scope="class" -) -@pytest.mark.usefixtures("setup_configuration") class TestNATModeadvancedcaptiveportal(object): """ Advanced Captive Portal Test: NAT Mode @@ -52,14 +134,12 @@ class TestNATModeadvancedcaptiveportal(object): @pytest.mark.open @pytest.mark.twog - @pytest.mark.radius_user_and_pass @pytest.mark.ow_regression_lf @allure.title("Radius user/pass mode with open encryption 2.4 GHz Band NAT mode") @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14123", name="WIFI-14123") - def test_nat_open_2g_radius_user_and_pass(self, get_test_library, get_dut_logs_per_test_case, - get_test_device_logs, num_stations, check_connectivity, - setup_configuration, get_testbed_details, get_target_object, - radius_info): + def test_nat_open_2g_radius_user_and_pass(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case, get_test_device_logs, num_stations, + check_connectivity, get_testbed_details, get_target_object, radius_info): """ NAT Mode Advanced Captive Portal Test with open encryption 2.4 GHz Band pytest -m "advanced_captive_portal_tests and internal_captive_portal_tests and open and twog and nat and radius_user_and_pass" @@ -92,9 +172,104 @@ class TestNATModeadvancedcaptiveportal(object): " the valid credentials that are configured in the radius server being used to get " "the internet access.") passes, result = get_test_library.advanced_captive_portal(ssid=ssid_name, security=security, - dut_data=setup_configuration, + dut_data=dut_data, passkey=security_key, mode=mode, band=band, num_sta=num_stations, json_post_data=json_post_data, get_testbed_details=get_testbed_details, tip_2x_obj=get_target_object) assert passes == "PASS", result + + @pytest.mark.open + @pytest.mark.fiveg + @pytest.mark.ow_regression_lf + @allure.title("Radius user/pass mode with open encryption 5 GHz Band NAT mode") + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14498", name="WIFI-14498") + def test_nat_open_5g_radius_user_and_pass(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case, get_test_device_logs, num_stations, + check_connectivity, get_testbed_details, get_target_object, radius_info): + """ + NAT Mode Advanced Captive Portal Test with open encryption 5 GHz Band + pytest -m "advanced_captive_portal_tests and internal_captive_portal_tests and open and fiveg and nat and radius_user_and_pass" + """ + profile_data = {"ssid_name": "ssid_captive_portal_open_5g_br", "appliedRadios": ["5G"], + "security_key": "something", + "captive": { + "auth-mode": "radius", + "auth-server": "10.28.3.21", + "auth-port": 1812, + "auth-secret": "testing123", + "walled-garden-fqdn": [ + "*.google.com", + "telecominfraproject.com" + ] + } + } + ssid_name = profile_data["ssid_name"] + security_key = "[BLANK]" + security = "open" + mode = "NAT-WAN" + band = "twog" + identity = radius_info['user'] + passwd = radius_info["password"] + # json post data for API + json_post_data = f"username={identity}&password={passwd}&action=radius" + print("json_post_data", json_post_data) + allure.attach(name="Definition", + body="Radius user/pass mode (Captive-Radius): In this mode the client needs to enter" + " the valid credentials that are configured in the radius server being used to get " + "the internet access.") + passes, result = get_test_library.advanced_captive_portal(ssid=ssid_name, security=security, + dut_data=dut_data, + passkey=security_key, mode=mode, band=band, + num_sta=num_stations, json_post_data=json_post_data, + get_testbed_details=get_testbed_details, + tip_2x_obj=get_target_object) + assert passes == "PASS", result + + @pytest.mark.owe + @pytest.mark.twog + @pytest.mark.sixg + @pytest.mark.ow_regression_lf + @allure.title("Radius user/pass mode with owe encryption 6 GHz Band NAT mode") + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14498", name="WIFI-14498") + def test_nat_6g_radius_user_and_pass(self, setup_initial_configuration, get_test_library, + get_dut_logs_per_test_case, get_test_device_logs, num_stations, + check_connectivity, get_testbed_details, get_target_object, radius_info): + """ + NAT Mode Advanced Captive Portal Test with owe encryption 6 GHz Band + pytest -m "advanced_captive_portal_tests and internal_captive_portal_tests and owe and sixg and nat and radius_user_and_pass" + """ + profile_data = {"ssid_name": "int_cap_portal_6g_rup", "appliedRadios": ["6G"], + "security_key": "something", + "captive": { + "auth-mode": "radius", + "auth-server": "10.28.3.21", + "auth-port": 1812, + "auth-secret": "testing123", + "walled-garden-fqdn": [ + "*.google.com", + "telecominfraproject.com" + ] + } + } + ssid_name = profile_data["ssid_name"] + security_key = "[BLANK]" + security = "owe" + mode = "NAT-WAN" + band = "sixg" + identity = radius_info['user'] + passwd = radius_info["password"] + # json post data for API + json_post_data = f"username={identity}&password={passwd}&action=radius" + print("json_post_data", json_post_data) + allure.attach(name="Definition", + body="Radius user/pass mode (Captive-Radius): In this mode the client needs to enter" + " the valid credentials that are configured in the radius server being used to get " + "the internet access.") + passes, result = get_test_library.advanced_captive_portal(ssid=ssid_name, security=security, + dut_data=dut_data, + passkey=security_key, mode=mode, band=band, + num_sta=num_stations, json_post_data=json_post_data, + get_testbed_details=get_testbed_details, + tip_2x_obj=get_target_object, enable_owe=True, is_bw320=is_bw320,is_ht160=is_ht160) + assert passes == "PASS", result \ No newline at end of file diff --git a/tests/e2e/basic/dfs_test/wpa2_personal/dfs_80MHz/test_dfs_80_bridge.py b/tests/e2e/basic/dfs_test/wpa2_personal/dfs_80MHz/test_dfs_80_bridge.py index 972dad525..df93dbf1f 100644 --- a/tests/e2e/basic/dfs_test/wpa2_personal/dfs_80MHz/test_dfs_80_bridge.py +++ b/tests/e2e/basic/dfs_test/wpa2_personal/dfs_80MHz/test_dfs_80_bridge.py @@ -21,7 +21,6 @@ setup_params_general1 = { "band": "5G", "country": "US", "allow-dfs": True, - "channel-mode": "VHT", "channel-width": 80, "channel": 52 } @@ -53,13 +52,15 @@ class TestDFSChannel52Bw80(object): To verify that a 5G client operating on channel 52 shifts to a non-DFS channel if radar is detected Unique Marker: pytest -m "bandwidth_80MHz and ow_sanity_lf and dfs_channel_52_bw_80" """ + channel = setup_params_general1["rf"]["5G"]["channel"] profile_data = setup_params_general1["ssid_modes"]["wpa2_personal"][0] ssid_name = profile_data["ssid_name"] security_key = profile_data["security_key"] security = "wpa2" band = "fiveg" mode = "BRIDGE" - get_test_library.dfs_test(ssid=ssid_name, security=security, + print("channel:",channel) + get_test_library.dfs_test(ssid=ssid_name, security=security, channel=channel, passkey=security_key, mode=mode, band=band, num_sta=1, dut_data=setup_configuration, tip_2x_obj=get_target_object) get_target_object.reboot() @@ -78,7 +79,6 @@ setup_params_general2 = { "band": "5G", "country": "US", "allow-dfs": True, - "channel-mode": "VHT", "channel-width": 80, "channel": 100 } @@ -110,13 +110,14 @@ class TestDFSChannel100Bw80(object): To verify that a 5G client operating on channel 100 shifts to a non-DFS channel if radar is detected Unique Marker: pytest -m "bandwidth_80MHz and ow_sanity_lf and dfs_channel_100_bw_80" """ + channel = setup_params_general2["rf"]["5G"]["channel"] profile_data = setup_params_general2["ssid_modes"]["wpa2_personal"][0] ssid_name = profile_data["ssid_name"] security_key = profile_data["security_key"] security = "wpa2" band = "fiveg" mode = "BRIDGE" - get_test_library.dfs_test(ssid=ssid_name, security=security, + get_test_library.dfs_test(ssid=ssid_name, security=security, channel=channel, passkey=security_key, mode=mode, band=band, num_sta=1, dut_data=setup_configuration, tip_2x_obj=get_target_object) get_target_object.reboot() @@ -135,7 +136,6 @@ setup_params_general11 = { "band": "5G", "country": "US", "allow-dfs": True, - "channel-mode": "VHT", "channel-width": 80, "channel": 132 } @@ -168,13 +168,14 @@ class TestDFSChannel132Bw80(object): Unique Marker: pytest -m "bandwidth_80MHz and ow_sanity_lf and dfs_channel_132_bw_80" """ + channel = setup_params_general11["rf"]["5G"]["channel"] profile_data = setup_params_general11["ssid_modes"]["wpa2_personal"][0] ssid_name = profile_data["ssid_name"] security_key = profile_data["security_key"] security = "wpa2" band = "fiveg" mode = "BRIDGE" - get_test_library.dfs_test(ssid=ssid_name, security=security, + get_test_library.dfs_test(ssid=ssid_name, security=security, channel=channel, passkey=security_key, mode=mode, band=band, num_sta=1, dut_data=setup_configuration, tip_2x_obj=get_target_object) get_target_object.reboot() diff --git a/tests/e2e/basic/performance_tests/AX_capacity/wpa2_personal/test_bridge_mode.py b/tests/e2e/basic/performance_tests/AX_capacity/wpa2_personal/test_bridge_mode.py index 60111f37e..514860b60 100644 --- a/tests/e2e/basic/performance_tests/AX_capacity/wpa2_personal/test_bridge_mode.py +++ b/tests/e2e/basic/performance_tests/AX_capacity/wpa2_personal/test_bridge_mode.py @@ -14,10 +14,23 @@ setup_params_general_5G = { ] }, "rf": { + "2G": { + "band": "2G", + "channel-width": 20, + "channel-mode": "HE", + "channel": 6 + }, "5G": { "band": "5G", "channel-width": 80, + "channel-mode": "HE", "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 } }, "radius": False @@ -208,7 +221,20 @@ setup_params_general_2G = { "2G": { "band": "2G", "channel-width": 20, + "channel-mode": "HE", "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "HE", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 } }, "radius": False diff --git a/tests/e2e/basic/performance_tests/AX_capacity/wpa2_personal/test_nat_mode.py b/tests/e2e/basic/performance_tests/AX_capacity/wpa2_personal/test_nat_mode.py index 3f37663ef..969e69513 100644 --- a/tests/e2e/basic/performance_tests/AX_capacity/wpa2_personal/test_nat_mode.py +++ b/tests/e2e/basic/performance_tests/AX_capacity/wpa2_personal/test_nat_mode.py @@ -14,10 +14,23 @@ setup_params_general_5G = { ] }, "rf": { + "2G": { + "band": "2G", + "channel-width": 20, + "channel-mode": "HE", + "channel": 6 + }, "5G": { "band": "5G", "channel-width": 80, + "channel-mode": "HE", "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 } }, "radius": False @@ -209,7 +222,20 @@ setup_params_general_2G = { "2G": { "band": "2G", "channel-width": 20, + "channel-mode": "HE", "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "HE", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 } }, "radius": False diff --git a/tests/e2e/basic/performance_tests/client_scale_test/__init__.py b/tests/e2e/basic/performance_tests/BE_capacity/__init__.py similarity index 100% rename from tests/e2e/basic/performance_tests/client_scale_test/__init__.py rename to tests/e2e/basic/performance_tests/BE_capacity/__init__.py diff --git a/tests/e2e/basic/performance_tests/client_scale_test/open/__init__.py b/tests/e2e/basic/performance_tests/BE_capacity/wpa2_personal/__init__.py similarity index 100% rename from tests/e2e/basic/performance_tests/client_scale_test/open/__init__.py rename to tests/e2e/basic/performance_tests/BE_capacity/wpa2_personal/__init__.py diff --git a/tests/e2e/basic/performance_tests/BE_capacity/wpa2_personal/test_bridge_mode.py b/tests/e2e/basic/performance_tests/BE_capacity/wpa2_personal/test_bridge_mode.py new file mode 100644 index 000000000..d8c50ce85 --- /dev/null +++ b/tests/e2e/basic/performance_tests/BE_capacity/wpa2_personal/test_bridge_mode.py @@ -0,0 +1,314 @@ +""" + Performance Test: BE Capacity Test : BRIDGE Mode + pytest -m "wifi_capacity_be_tests and wpa2_personal and bridge" +""" +import pytest +import allure + +pytestmark = [pytest.mark.bridge, pytest.mark.wifi_capacity_be_tests, pytest.mark.wpa2_personal] +setup_params_general_5G = { + "mode": "BRIDGE", + "ssid_modes": { + "wpa2_personal": [ + {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} + ] + }, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "EHT", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "EHT", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 320, + "channel-mode": "EHT", + "channel": 33 + } + }, + "radius": False +} + + +@allure.feature("Performance Test") +@allure.parent_suite("BE Capacity Test") +@allure.suite("5 GHz Band") +@allure.sub_suite("BRIDGE Mode") +@pytest.mark.parametrize( + 'setup_configuration', + [setup_params_general_5G], + indirect=True, + scope="class" +) +@pytest.mark.usefixtures("setup_configuration") +@pytest.mark.fiveg +class TestWifiCapacityBRIDGEModeBE5G(object): + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14446", name="WIFI-14446") + @pytest.mark.tcp_download + @pytest.mark.performance + @pytest.mark.ow_sanity_lf + @allure.title("Single BE client TCP Download wifi capacity") + def test_client_wpa2_bridge_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + get_lab_info, selected_testbed, check_connectivity): + """ + Description: + The test case examines the maximum performance of a DUT supporting BE clients in Bridge mode. + This test focuses on stressing the DUT's capacity under the influence of 5Ghz TCP Download traffic. + The 5Ghz station is configured for 80Mhz bandwidth and two spatial streams. + + Markers: + wifi_capacity_be_tests and wpa2_personal and bridge and fiveg and tcp_download + + Note: + Please refer to the PDF report for detailed observations and analysis of the test results. + """ + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + + get_test_library.be_capacity_test(instance_name="test_client_wpa2_bridge_tcp_dl", dut_data=setup_configuration, + dut_mode=dut_mode, protocol="TCP", upload_rate="56Kbps", + download_rate="10Gbps", num_stations={"5G": 1}, mode="BRIDGE") + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14446", name="WIFI-14446") + @pytest.mark.udp_download + @pytest.mark.performance + @allure.title("Single BE client UDP Download wifi capacity") + def test_client_wpa2_bridge_udp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + get_lab_info, selected_testbed, check_connectivity): + """ + Description: + The test case examines the maximum performance of a DUT supporting BE clients in Bridge mode. + This test focuses on stressing the DUT's capacity under the influence of 5Ghz UDP Download traffic. + The 5Ghz station is configured for 80Mhz bandwidth and two spatial streams. + + Markers: + wifi_capacity_be_tests and wpa2_personal and bridge and fiveg and udp_download + + Note: + Please refer to the PDF report for detailed observations and analysis of the test results. + """ + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + + get_test_library.be_capacity_test(instance_name="test_client_wpa2_bridge_udp_dl", dut_data=setup_configuration, + dut_mode=dut_mode, protocol="UDP", upload_rate="56Kbps", + download_rate="10Gbps", num_stations={"5G": 1}, mode="BRIDGE") + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14446", name="WIFI-14446") + @pytest.mark.tcp_upload + @pytest.mark.performance + @allure.title("Single BE client TCP Upload wifi capacity") + def test_client_wpa2_bridge_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + get_lab_info, selected_testbed, check_connectivity): + """ + Description: + The test case examines the maximum performance of a DUT supporting BE clients in Bridge mode. + This test focuses on stressing the DUT's capacity under the influence of 5Ghz TCP Upload traffic. + The 5Ghz station is configured for 80Mhz bandwidth and two spatial streams. + + Markers: + wifi_capacity_be_tests and wpa2_personal and bridge and fiveg and tcp_upload + + Note: + Please refer to the PDF report for detailed observations and analysis of the test results. + """ + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + + get_test_library.be_capacity_test(instance_name="test_client_wpa2_bridge_tcp_ul", + dut_data=setup_configuration, dut_mode=dut_mode, + protocol="TCP", upload_rate="10Gbps", download_rate="56Kbps", + num_stations={"5G": 1}, mode="BRIDGE") + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14446", name="WIFI-14446") + @pytest.mark.udp_upload + @pytest.mark.performance + @allure.title("Single BE client UDP Upload wifi capacity") + def test_client_wpa2_bridge_udp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + get_lab_info, selected_testbed, check_connectivity): + """ + Description: + The test case examines the maximum performance of a DUT supporting BE clients in Bridge mode. + The test case examines the maximum performance of a DUT supporting BE clients in Bridge mode. + This test focuses on stressing the DUT's capacity under the influence of 5Ghz UDP Upload traffic. + The 5Ghz station is configured for 80Mhz bandwidth and two spatial streams. + + Markers: + wifi_capacity_be_tests and wpa2_personal and bridge and fiveg and udp_upload + + Note: + Please refer to the PDF report for detailed observations and analysis of the test results. + """ + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + + get_test_library.be_capacity_test(instance_name="test_client_wpa2_bridge_udp_ul", + dut_data=setup_configuration, dut_mode=dut_mode, + protocol="UDP", upload_rate="10Gbps", download_rate="56Kbps", + num_stations={"5G": 1}, mode="BRIDGE") + assert True + + +setup_params_general_2G = { + "mode": "BRIDGE", + "ssid_modes": { + "wpa2_personal": [ + {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} + ] + }, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "EHT", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "EHT", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 320, + "channel-mode": "EHT", + "channel": 33 + } + }, + "radius": False +} + + +@allure.feature("Performance Test") +@allure.parent_suite("BE Capacity Test") +@allure.suite("2.4 GHz Band") +@allure.sub_suite("BRIDGE Mode") +@pytest.mark.parametrize( + 'setup_configuration', + [setup_params_general_2G], + indirect=True, + scope="class" +) +@pytest.mark.usefixtures("setup_configuration") +@pytest.mark.twog +class TestWifiCapacityBRIDGEModeBE2G(object): + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14446", name="WIFI-14446") + @pytest.mark.tcp_download + @pytest.mark.performance + @pytest.mark.ow_sanity_lf + @allure.title("Single BE client TCP Download wifi capacity") + def test_client_wpa2_bridge_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + get_lab_info, selected_testbed, check_connectivity): + """ + Description: + The test case examines the maximum performance of a DUT supporting BE clients in Bridge mode. + This test focuses on stressing the DUT's capacity under the influence of 2.4Ghz TCP Download traffic. + The 2.4Ghz station is configured for 20Mhz bandwidth and two spatial streams. + + Markers: + wifi_capacity_be_tests and wpa2_personal and bridge and twog and tcp_download + + Note: + Please refer to the PDF report for detailed observations and analysis of the test results. + """ + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + + get_test_library.be_capacity_test(instance_name="test_client_wpa2_bridge_tcp_dl", + dut_data=setup_configuration, dut_mode=dut_mode, + protocol="TCP", upload_rate="56Kbps", download_rate="10Gbps", + num_stations={"2G": 1}, mode="BRIDGE") + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14446", name="WIFI-14446") + @pytest.mark.udp_download + @pytest.mark.performance + @allure.title("Single BE client UDP Download wifi capacity") + def test_client_wpa2_bridge_udp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + get_lab_info, selected_testbed, check_connectivity): + """ + Description: + The test case examines the maximum performance of a DUT supporting BE clients in Bridge mode. + This test focuses on stressing the DUT's capacity under the influence of 2.4Ghz UDP Download traffic. + The 2.4Ghz station is configured for 20Mhz bandwidth and two spatial streams. + + Markers: + wifi_capacity_be_tests and wpa2_personal and bridge and twog and udp_download + + Note: + Please refer to the PDF report for detailed observations and analysis of the test results. + """ + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + + get_test_library.be_capacity_test(instance_name="test_client_wpa2_bridge_udp_dl", + dut_data=setup_configuration, dut_mode=dut_mode, + protocol="UDP", upload_rate="56Kbps", download_rate="10Gbps", + num_stations={"2G": 1}, mode="BRIDGE") + assert True + + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14446", name="WIFI-14446") + @pytest.mark.tcp_upload + @pytest.mark.performance + @allure.title("Single BE client TCP Upload wifi capacity") + def test_client_wpa2_bridge_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + get_lab_info, selected_testbed, check_connectivity): + """ + Description: + The test case examines the maximum performance of a DUT supporting BE clients in Bridge mode. + This test focuses on stressing the DUT's capacity under the influence of 2.4Ghz TCP Upload traffic. + The 2.4Ghz station is configured for 20Mhz bandwidth and two spatial streams. + + Markers: + wifi_capacity_be_tests and wpa2_personal and bridge and twog and tcp_upload + + Note: + Please refer to the PDF report for detailed observations and analysis of the test results. + """ + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + + get_test_library.be_capacity_test(instance_name="test_client_wpa2_bridge_tcp_ul", + dut_data=setup_configuration, dut_mode=dut_mode, + protocol="TCP", upload_rate="10Gbps", download_rate="56Kbps", + num_stations={"2G": 1}, mode="BRIDGE") + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14446", name="WIFI-14446") + @pytest.mark.udp_upload + @pytest.mark.performance + @allure.title("Single BE client UDP Upload wifi capacity") + def test_client_wpa2_bridge_udp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + get_lab_info, selected_testbed, check_connectivity): + """ + Description: + The test case examines the maximum performance of a 2G-enabled DUT supporting BE clients in Bridge mode. + This test focuses on stressing the DUT's capacity under the influence of 2.4Ghz UDP Upload traffic. + The 2.4Ghz station is configured for 20Mhz bandwidth and two spatial streams. + + Markers: + wifi_capacity_be_tests and wpa2_personal and bridge and twog and udp_upload + + Note: + Please refer to the PDF report for detailed observations and analysis of the test results. + """ + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + + get_test_library.be_capacity_test(instance_name="test_client_wpa2_bridge_udp_ul", + dut_data=setup_configuration, dut_mode=dut_mode, + protocol="UDP", upload_rate="10Gbps", download_rate="56Kbps", + num_stations={"2G": 1}, mode="BRIDGE") + assert True diff --git a/tests/e2e/basic/performance_tests/BE_capacity/wpa2_personal/test_nat_mode.py b/tests/e2e/basic/performance_tests/BE_capacity/wpa2_personal/test_nat_mode.py new file mode 100644 index 000000000..ef64c04b4 --- /dev/null +++ b/tests/e2e/basic/performance_tests/BE_capacity/wpa2_personal/test_nat_mode.py @@ -0,0 +1,312 @@ +""" + Performance Test: BE Capacity Test : NAT Mode + pytest -m "wifi_capacity_be_tests and wpa2_personal and nat" +""" +import pytest +import allure + +pytestmark = [pytest.mark.nat, pytest.mark.wifi_capacity_be_tests, pytest.mark.wpa2_personal] +setup_params_general_5G = { + "mode": "NAT", + "ssid_modes": { + "wpa2_personal": [ + {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} + ] + }, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "EHT", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "EHT", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 320, + "channel-mode": "EHT", + "channel": 33 + } + }, + "radius": False +} + + +@allure.feature("Performance Test") +@allure.parent_suite("BE Capacity Test") +@allure.suite("5 GHz Band") +@allure.sub_suite("NAT Mode") +@pytest.mark.parametrize( + 'setup_configuration', + [setup_params_general_5G], + indirect=True, + scope="class" +) +@pytest.mark.usefixtures("setup_configuration") +@pytest.mark.fiveg +class TestWifiCapacityNATModeBE5G(object): + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-6947", name="WIFI-6947") + @pytest.mark.tcp_download + @pytest.mark.performance + @allure.title("Single BE client TCP Download wifi capacity") + def test_client_wpa2_nat_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + get_lab_info, selected_testbed, check_connectivity): + """ + Description: + The test case examines the maximum performance of a DUT supporting BE clients in NAT mode. + This test focuses on stressing the DUT's capacity under the influence of 5Ghz TCP Download traffic. + The 5Ghz station is configured for 80Mhz bandwidth and two spatial streams. + + Markers: + wifi_capacity_be_tests and wpa2_personal and nat and fiveg and tcp_download + + Note: + Please refer to the PDF report for detailed observations and analysis of the test results. + """ + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + + get_test_library.be_capacity_test(instance_name="test_client_wpa2_nat_tcp_dl", + dut_data=setup_configuration, dut_mode=dut_mode, + protocol="TCP", upload_rate="56Kbps", download_rate="10Gbps", + num_stations={"5G": 1}, mode="NAT-WAN") + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-6950", name="WIFI-6950") + @pytest.mark.udp_download + @pytest.mark.performance + @allure.title("Single BE client UDP Download wifi capacity") + def test_client_wpa2_nat_udp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + get_lab_info, selected_testbed, check_connectivity): + """ + Description: + The test case examines the maximum performance of a DUT supporting BE clients in NAT mode. + This test focuses on stressing the DUT's capacity under the influence of 5Ghz UDP Download traffic. + The 5Ghz station is configured for 80Mhz bandwidth and two spatial streams. + + Markers: + wifi_capacity_be_tests and wpa2_personal and nat and fiveg and udp_download + + Note: + Please refer to the PDF report for detailed observations and analysis of the test results. + """ + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + + get_test_library.be_capacity_test(instance_name="test_client_wpa2_nat_tcp_dl", + dut_data=setup_configuration, dut_mode=dut_mode, + protocol="UDP", upload_rate="56Kbps", download_rate="10Gbps", + num_stations={"5G": 1}, mode="NAT-WAN") + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-6948", name="WIFI-6948") + @pytest.mark.tcp_upload + @pytest.mark.performance + @allure.title("Single BE client TCP Upload wifi capacity") + def test_client_wpa2_nat_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + get_lab_info, selected_testbed, check_connectivity): + """ + Description: + The test case examines the maximum performance of a DUT supporting BE clients in NAT mode. + This test focuses on stressing the DUT's capacity under the influence of 5Ghz TCP Upload traffic. + The 5Ghz station is configured for 80Mhz bandwidth and two spatial streams. + + Markers: + wifi_capacity_be_tests and wpa2_personal and nat and fiveg and tcp_upload + + Note: + Please refer to the PDF report for detailed observations and analysis of the test results. + """ + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + + get_test_library.be_capacity_test(instance_name="test_client_wpa2_nat_tcp_ul", + dut_data=setup_configuration, dut_mode=dut_mode, + protocol="TCP", upload_rate="10Gbps", download_rate="56Kbps", + num_stations={"5G": 1}, mode="NAT-WAN") + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-6951", name="WIFI-6951") + @pytest.mark.udp_upload + @pytest.mark.performance + @allure.title("Single BE client UDP Upload wifi capacity") + def test_client_wpa2_nat_udp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + get_lab_info, selected_testbed, check_connectivity): + """ + Description: + The test case examines the maximum performance of a DUT supporting BE clients in NAT mode. + This test focuses on stressing the DUT's capacity under the influence of 5Ghz UDP Upload traffic. + The 5Ghz station is configured for 80Mhz bandwidth and two spatial streams. + + Markers: + wifi_capacity_be_tests and wpa2_personal and nat and fiveg and udp_upload + + Note: + Please refer to the PDF report for detailed observations and analysis of the test results. + """ + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + + get_test_library.be_capacity_test(instance_name="test_client_wpa2_nat_udp_ul", + dut_data=setup_configuration, dut_mode=dut_mode, + protocol="UDP", upload_rate="10Gbps", download_rate="56Kbps", + num_stations={"5G": 1}, mode="NAT-WAN") + assert True + + +setup_params_general_2G = { + "mode": "NAT", + "ssid_modes": { + "wpa2_personal": [ + {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} + ] + }, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "EHT", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "EHT", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 320, + "channel-mode": "EHT", + "channel": 33 + } + }, + "radius": False +} + + +@allure.feature("Performance Test") +@allure.parent_suite("BE Capacity Test") +@allure.suite("2.4 GHz Band") +@allure.sub_suite("NAT Mode") +@pytest.mark.parametrize( + 'setup_configuration', + [setup_params_general_2G], + indirect=True, + scope="class" +) +@pytest.mark.usefixtures("setup_configuration") +@pytest.mark.twog +class TestWifiCapacityNATModeBE2G(object): + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-13290", name="WIFI-13290") + @pytest.mark.tcp_download + @pytest.mark.performance + @allure.title("Single BE client TCP Download wifi capacity") + def test_client_wpa2_nat_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + get_lab_info, selected_testbed, check_connectivity): + """ + Description: + The test case examines the maximum performance of a DUT supporting BE clients in NAT mode. + This test focuses on stressing the DUT's capacity under the influence of 2.4Ghz TCP Download traffic. + The 2.4Ghz station is configured for 20Mhz bandwidth and two spatial streams. + + Markers: + wifi_capacity_be_tests and wpa2_personal and nat and twog and tcp_download + + Note: + Please refer to the PDF report for detailed observations and analysis of the test results. + """ + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + + get_test_library.be_capacity_test(instance_name="test_client_wpa2_nat_tcp_dl", + dut_data=setup_configuration, dut_mode=dut_mode, + protocol="TCP", upload_rate="56Kbps", download_rate="10Gbps", + num_stations={"2G": 1}, mode="NAT-WAN") + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-13293", name="WIFI-13293") + @pytest.mark.udp_download + @pytest.mark.performance + @allure.title("Single BE client UDP Download wifi capacity") + def test_client_wpa2_nat_udp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + get_lab_info, selected_testbed, check_connectivity): + """ + Description: + The test case examines the maximum performance of a DUT supporting BE clients in NAT mode. + This test focuses on stressing the DUT's capacity under the influence of 2.4Ghz UDP Download traffic. + The 2.4Ghz station is configured for 20Mhz bandwidth and two spatial streams. + + Markers: + wifi_capacity_be_tests and wpa2_personal and nat and twog and udp_download + + Note: + Please refer to the PDF report for detailed observations and analysis of the test results. + """ + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + + get_test_library.be_capacity_test(instance_name="test_client_wpa2_nat_udp_dl", + dut_data=setup_configuration, dut_mode=dut_mode, + protocol="UDP", upload_rate="56Kbps", download_rate="10Gbps", + num_stations={"2G": 1}, mode="NAT-WAN") + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-13291", name="WIFI-13291") + @pytest.mark.tcp_upload + @pytest.mark.performance + @allure.title("Single BE client TCP Upload wifi capacity") + def test_client_wpa2_nat_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + get_lab_info, selected_testbed, check_connectivity): + """ + Description: + The test case examines the maximum performance of a DUT supporting BE clients in NAT mode. + This test focuses on stressing the DUT's capacity under the influence of 2.4Ghz TCP Upload traffic. + The 2.4Ghz station is configured for 20Mhz bandwidth and two spatial streams. + + Markers: + wifi_capacity_be_tests and wpa2_personal and nat and twog and tcp_upload + + Note: + Please refer to the PDF report for detailed observations and analysis of the test results. + """ + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + + get_test_library.be_capacity_test(instance_name="test_client_wpa2_nat_tcp_ul", + dut_data=setup_configuration, dut_mode=dut_mode, + protocol="TCP", upload_rate="10Gbps", download_rate="56Kbps", + num_stations={"2G": 1}, mode="NAT-WAN") + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-13294", name="WIFI-13294") + @pytest.mark.udp_upload + @pytest.mark.performance + @allure.title("Single BE client UDP Upload wifi capacity") + def test_client_wpa2_nat_udp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + get_lab_info, selected_testbed, check_connectivity): + """ + Description: + The test case examines the maximum performance of a DUT supporting BE clients in NAT mode. + This test focuses on stressing the DUT's capacity under the influence of 2.4Ghz UDP Upload traffic. + The 2.4Ghz station is configured for 20Mhz bandwidth and two spatial streams. + + Markers: + wifi_capacity_be_tests and wpa2_personal and nat and twog and udp_upload + + Note: + Please refer to the PDF report for detailed observations and analysis of the test results. + """ + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + + get_test_library.be_capacity_test(instance_name="test_client_wpa2_nat_udp_ul", + dut_data=setup_configuration, dut_mode=dut_mode, + protocol="UDP", upload_rate="10Gbps", download_rate="56Kbps", + num_stations={"2G": 1}, mode="NAT-WAN") + assert True diff --git a/tests/e2e/basic/performance_tests/client_scale_test/wpa2_personal/__init__.py b/tests/e2e/basic/performance_tests/BE_capacity/wpa3_personal/__init__.py similarity index 100% rename from tests/e2e/basic/performance_tests/client_scale_test/wpa2_personal/__init__.py rename to tests/e2e/basic/performance_tests/BE_capacity/wpa3_personal/__init__.py diff --git a/tests/e2e/basic/performance_tests/BE_capacity/wpa3_personal/test_bridge_mode.py b/tests/e2e/basic/performance_tests/BE_capacity/wpa3_personal/test_bridge_mode.py new file mode 100644 index 000000000..6547670d3 --- /dev/null +++ b/tests/e2e/basic/performance_tests/BE_capacity/wpa3_personal/test_bridge_mode.py @@ -0,0 +1,151 @@ +""" + + Performance Test: Single BE client Wifi capacity with Channel and Channel-width Test: Bridge Mode + pytest -m "wifi_capacity_be_tests and bridge" + +""" +import logging + +import allure +import pytest + +pytestmark = [pytest.mark.wifi_capacity_be_tests, pytest.mark.bridge, pytest.mark.sixg, + pytest.mark.wpa3_personal] + +setup_params_general = { + "mode": "BRIDGE", + "ssid_modes": { + "wpa3_personal": [ + {"ssid_name": "ssid_wpa3_2g", "appliedRadios": ["2G"], "security_key": "something"}, + {"ssid_name": "ssid_wpa3_6g_channel_auto", "appliedRadios": ["6G"], "security_key": "something"} + + ]}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "EHT", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "EHT", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 320, + "channel-mode": "EHT", + "channel": 33 + } + }, + "radius": False +} + + +@allure.feature("Performance Test") +@allure.parent_suite("BE Capacity Test") +@allure.suite("6 GHz Band") +@allure.sub_suite("BRIDGE Mode") + +@pytest.mark.parametrize( + 'setup_configuration', + [setup_params_general], + indirect=True, + scope="class" +) +@pytest.mark.wpa3_personal +@pytest.mark.twog +@pytest.mark.usefixtures("setup_configuration") +class TestWifiCapacityBRIDGEModeBE6G(object): + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14446", name="WIFI-14446") + @pytest.mark.sixg + @pytest.mark.tcp_download + @pytest.mark.performance + @pytest.mark.ow_sanity_lf + @allure.title("Single BE client TCP Download wifi capacity 320Mhz Bw") + def test_be_client_wpa3_bridge_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, get_lab_info, selected_testbed, check_connectivity): + """ Single BE client Capacity Test BRIDGE mode + pytest -m "wifi_capacity_be_tests and sixg and tcp_download and bridge" + """ + profile_data = {"ssid_name": "ssid_wpa3_6g_channel_auto", "appliedRadios": ["6G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "BRIDGE" + sets = [["UDP-Burst", "1"], ["UDP-GRO", "1"], ["Multiple Endpoints:", "10"]] + get_test_library.wifi_capacity(instance_name="test_client_wpa3_bridge_tcp_download", mode=mode, + download_rate="10Gbps", batch_size="1", + upload_rate="56Kbps", protocol="TCP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"6G": 1}, pass_fail_criteria=True , is_wifi7=True, is_bw320=True, + sets_=sets) + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14446", name="WIFI-14446") + @pytest.mark.udp_download + @pytest.mark.sixg + @pytest.mark.performance + @allure.title("Single BE client UDP Download wifi capacity 320Mhz Bw") + def test_be_client_wpa3_bridge_udp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, get_lab_info, selected_testbed, check_connectivity): + """ Single BE client Capacity Test BRIDGE mode + pytest -m "wifi_capacity_be_tests and sixg and udp_download and bridge" + """ + profile_data = {"ssid_name": "ssid_wpa3_6g_channel_auto", "appliedRadios": ["6G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "BRIDGE" + sets = [["UDP-Burst", "1"], ["UDP-GRO", "1"], ["Multiple Endpoints:", "10"]] + get_test_library.wifi_capacity(instance_name="test_client_wpa3_bridge_udp_dl", mode=mode, + download_rate="10Gbps", batch_size="1", + upload_rate="56Kbps", protocol="UDP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"6G": 1}, pass_fail_criteria=True, is_wifi7=True, is_bw320=True, + sets_=sets) + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14446", name="WIFI-14446") + @pytest.mark.tcp_upload + @pytest.mark.sixg + @pytest.mark.performance + @allure.title("Single BE client TCP Upload wifi capacity 320Mhz Bw") + def test_be_client_wpa3_bridge_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, get_lab_info, selected_testbed, check_connectivity): + """ Single BE client Capacity Test BRIDGE mode + pytest -m "wifi_capacity_be_tests and sixg and tcp_upload and bridge" + """ + profile_data = {"ssid_name": "ssid_wpa3_6g_channel_auto", "appliedRadios": ["6G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "BRIDGE" + # val = [['modes: Auto'], ['bandw_options: 320Mhz']] + sets = [["UDP-Burst", "1"], ["UDP-GRO", "1"], ["Multiple Endpoints:", "10"]] + get_test_library.wifi_capacity(instance_name="test_client_wpa3_bridge_tcp_ul", mode=mode, + download_rate="56Kbps", batch_size="1", + upload_rate="10Gbps", protocol="TCP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"6G": 1}, pass_fail_criteria=True, is_wifi7=True, is_bw320=True, + sets_=sets) + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14446", name="WIFI-14446") + @pytest.mark.udp_upload + @pytest.mark.sixg + @pytest.mark.performance + @allure.title("Single BE client UDP Upload wifi capacity 320Mhz Bw") + def test_be_client_wpa3_bridge_udp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, get_lab_info, selected_testbed, check_connectivity): + """ Single BE client Capacity Test BRIDGE mode + pytest -m "wifi_capacity_be_tests and sixg and udp_upload and bridge" + """ + profile_data = {"ssid_name": "ssid_wpa3_6g_channel_auto", "appliedRadios": ["6G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "BRIDGE" + sets = [["UDP-Burst", "1"], ["UDP-GRO", "1"], ["Multiple Endpoints:", "10"]] + get_test_library.wifi_capacity(instance_name="test_client_wpa3_bridge_udp_ul", mode=mode, + download_rate="56Kbps", batch_size="1", + upload_rate="10Gbps", protocol="UDP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"6G": 1}, pass_fail_criteria=True, is_wifi7=True, is_bw320=True, + sets_=sets) + assert True diff --git a/tests/e2e/basic/performance_tests/BE_capacity/wpa3_personal/test_nat_mode.py b/tests/e2e/basic/performance_tests/BE_capacity/wpa3_personal/test_nat_mode.py new file mode 100644 index 000000000..6632d586c --- /dev/null +++ b/tests/e2e/basic/performance_tests/BE_capacity/wpa3_personal/test_nat_mode.py @@ -0,0 +1,146 @@ +""" + + Performance Test: Single BE client Wifi capacity with Channel and Channel-width Test: nat Mode + pytest -m "be_capacity_tests and nat" + +""" + +import allure +import pytest + +pytestmark = [pytest.mark.wifi_capacity_be_tests, pytest.mark.nat, pytest.mark.sixg, + pytest.mark.wpa3_personal] + +setup_params_general = { + "mode": "NAT", + "ssid_modes": { + "wpa3_personal": [ + {"ssid_name": "ssid_wpa3_2g", "appliedRadios": ["2G"], "security_key": "something"}, + {"ssid_name": "ssid_wpa3_6g_channel_auto", "appliedRadios": ["6G"], "security_key": "something"} + ]}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "EHT", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "EHT", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 320, + "channel-mode": "EHT", + "channel": 33 + } + }, + "radius": False +} + + +@allure.feature("Performance Test") +@allure.parent_suite("BE Capacity Test") +@allure.suite("6 GHz Band") +@allure.sub_suite("NAT Mode") +@pytest.mark.parametrize( + 'setup_configuration', + [setup_params_general], + indirect=True, + scope="class" +) +@pytest.mark.wpa3_personal +@pytest.mark.twog +@pytest.mark.usefixtures("setup_configuration") +class TestWifiCapacityNATMode6G(object): + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14446", name="WIFI-14446") + @pytest.mark.tcp_download + @pytest.mark.sixg + @pytest.mark.performance + @allure.title("Single BE client TCP Download wifi capacity 320Mhz Bw") + def test_be_client_wpa3_nat_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, get_lab_info, selected_testbed, check_connectivity): + """ Single BE client Wifi Capacity Test nat mode + pytest -m "wifi_capacity_be_tests and sixg and tcp_download and nat" + """ + profile_data = {"ssid_name": "ssid_wpa3_6g_channel_auto", "appliedRadios": ["6G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "NAT-WAN" + sets = [["UDP-Burst", "1"], ["UDP-GRO", "1"], ["Multiple Endpoints:", "10"]] + get_test_library.wifi_capacity(instance_name="test_client_wpa3_nat_tcp_download", mode=mode, + download_rate="10Gbps", batch_size="1", + upload_rate="56Kbps", protocol="TCP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"6G": 1}, pass_fail_criteria=True, is_wifi7=True, is_bw320=True, + sets_=sets) + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14446", name="WIFI-14446") + @pytest.mark.udp_download + @pytest.mark.sixg + @pytest.mark.performance + @allure.title("Single BE client UDP Download wifi capacity 320Mhz Bw") + def test_be_client_wpa3_nat_udp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, get_lab_info, selected_testbed, check_connectivity): + """ Single client Wifi Capacity Test nat mode + pytest -m "wifi_capacity_be_tests and sixg and udp_download and nat" + """ + profile_data = {"ssid_name": "ssid_wpa3_6g_channel_auto", "appliedRadios": ["6G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "NAT-WAN" + sets = [["UDP-Burst", "1"], ["UDP-GRO", "1"], ["Multiple Endpoints:", "10"]] + get_test_library.wifi_capacity(instance_name="test_client_wpa3_nat_udp_dl", mode=mode, + download_rate="10Gbps", batch_size="1", + upload_rate="56Kbps", protocol="UDP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"6G": 1}, pass_fail_criteria=True, is_wifi7=True, is_bw320=True, + sets_=sets) + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14446", name="WIFI-14446") + @pytest.mark.tcp_upload + @pytest.mark.sixg + @pytest.mark.performance + @allure.title("Single BE client TCP Upload wifi capacity 320Mhz Bw") + def test_be_client_wpa3_nat_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, get_lab_info, selected_testbed, check_connectivity): + """ Single BE client Wifi Capacity Test nat mode + pytest -m "wifi_capacity_be_tests and sixg and tcp_upload and nat" + """ + profile_data = {"ssid_name": "ssid_wpa3_6g_channel_auto", "appliedRadios": ["6G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "NAT-WAN" + sets = [["UDP-Burst", "1"], ["UDP-GRO", "1"], ["Multiple Endpoints:", "10"]] + get_test_library.wifi_capacity(instance_name="test_client_wpa3_nat_tcp_ul", mode=mode, + download_rate="56Kbps", batch_size="1", + upload_rate="10Gbps", protocol="TCP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"6G": 1}, pass_fail_criteria=True, is_wifi7=True, is_bw320=True, + sets_=sets) + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14446", name="WIFI-14446") + @pytest.mark.udp_upload + @pytest.mark.sixg + @pytest.mark.performance + @allure.title("Single BE client UDP Upload wifi capacity 320Mhz Bw") + def test_be_client_wpa3_nat_udp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, get_lab_info, selected_testbed, check_connectivity): + """ Single client Wifi Capacity Test nat mode + pytest -m "wifi_capacity_be_tests and sixg and udp_upload and nat" + """ + profile_data = {"ssid_name": "ssid_wpa3_6g_channel_auto", "appliedRadios": ["6G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "NAT-WAN" + sets = [["UDP-Burst", "1"], ["UDP-GRO", "1"], ["Multiple Endpoints:", "10"]] + get_test_library.wifi_capacity(instance_name="test_client_wpa3_nat_udp_ul", mode=mode, + download_rate="56Kbps", batch_size="1", + upload_rate="10Gbps", protocol="UDP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"6G": 1}, pass_fail_criteria=True, is_wifi7=True, is_bw320=True, + sets_=sets) + assert True diff --git a/tests/e2e/basic/performance_tests/client_scale_test/wpa3_personal/__init__.py b/tests/e2e/basic/performance_tests/ax_client_scale_test/__init__.py similarity index 100% rename from tests/e2e/basic/performance_tests/client_scale_test/wpa3_personal/__init__.py rename to tests/e2e/basic/performance_tests/ax_client_scale_test/__init__.py diff --git a/tests/e2e/basic/performance_tests/client_scale_test/wpa_personal/__init__.py b/tests/e2e/basic/performance_tests/ax_client_scale_test/open/__init__.py similarity index 100% rename from tests/e2e/basic/performance_tests/client_scale_test/wpa_personal/__init__.py rename to tests/e2e/basic/performance_tests/ax_client_scale_test/open/__init__.py diff --git a/tests/e2e/basic/performance_tests/client_scale_test/open/test_bridge_mode.py b/tests/e2e/basic/performance_tests/ax_client_scale_test/open/test_bridge_mode.py similarity index 86% rename from tests/e2e/basic/performance_tests/client_scale_test/open/test_bridge_mode.py rename to tests/e2e/basic/performance_tests/ax_client_scale_test/open/test_bridge_mode.py index 58513658c..a19dc59c3 100644 --- a/tests/e2e/basic/performance_tests/client_scale_test/open/test_bridge_mode.py +++ b/tests/e2e/basic/performance_tests/ax_client_scale_test/open/test_bridge_mode.py @@ -1,14 +1,14 @@ """ - Performance Test: Client Scale Test : BRIDGE Mode - pytest -m "client_scale_test and BRIDGE" + Performance Test: AX Client Scale Test : BRIDGE Mode + pytest -m "ax_client_scale_tests and BRIDGE" """ import logging import allure import pytest -pytestmark = [pytest.mark.bridge, pytest.mark.client_scale_tests] +pytestmark = [pytest.mark.bridge, pytest.mark.ax_client_scale_tests] setup_params_general_2G = { "mode": "BRIDGE", @@ -22,8 +22,8 @@ setup_params_general_2G = { } -@allure.feature("Client Scale Tests") -@allure.parent_suite("Client Scale Tests") +@allure.feature("AX Client Scale Tests") +@allure.parent_suite("AX Client Scale Tests") @allure.suite(suite_name="Open Security") @allure.sub_suite(sub_suite_name="BRIDGE Mode") @pytest.mark.parametrize( @@ -37,8 +37,8 @@ setup_params_general_2G = { @pytest.mark.twog @pytest.mark.twog_band class TestWifiCapacityBRIDGEMode2G(object): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and open and twog" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and open and twog" """ @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3648", name="WIFI-3648") @@ -47,8 +47,8 @@ class TestWifiCapacityBRIDGEMode2G(object): @allure.title("Test for TCP Download 2.4 GHz") def test_client_open_BRIDGE_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and open and twog and tcp_download" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and open and twog and tcp_download" """ profile_data = {"ssid_name": "ssid_open_2g", "appliedRadios": ["2G"]} ssid_name = profile_data["ssid_name"] @@ -66,8 +66,8 @@ class TestWifiCapacityBRIDGEMode2G(object): @allure.title("Test for UDP Download 2.4 GHz") def test_client_open_BRIDGE_udp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and open and twog and udp_download" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and open and twog and udp_download" """ profile_data = {"ssid_name": "ssid_open_2g", "appliedRadios": ["2G"]} ssid_name = profile_data["ssid_name"] @@ -86,8 +86,8 @@ class TestWifiCapacityBRIDGEMode2G(object): def test_client_open_BRIDGE_tcp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and open and twog and tcp_bidirectional" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and open and twog and tcp_bidirectional" """ profile_data = {"ssid_name": "ssid_open_2g", "appliedRadios": ["2G"]} ssid_name = profile_data["ssid_name"] @@ -106,8 +106,8 @@ class TestWifiCapacityBRIDGEMode2G(object): def test_client_open_BRIDGE_udp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and open and twog and udp_bidirectional" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and open and twog and udp_bidirectional" """ profile_data = {"ssid_name": "ssid_open_2g", "appliedRadios": ["2G"]} ssid_name = profile_data["ssid_name"] @@ -125,8 +125,8 @@ class TestWifiCapacityBRIDGEMode2G(object): def test_client_open_bridge_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and open and twog and tcp_upload" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and open and twog and tcp_upload" """ profile_data = {"ssid_name": "ssid_open_2g", "appliedRadios": ["2G"]} ssid_name = profile_data["ssid_name"] @@ -144,8 +144,8 @@ class TestWifiCapacityBRIDGEMode2G(object): def test_client_open_bridge_udp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and open and twog and udp_upload" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and open and twog and udp_upload" """ profile_data = {"ssid_name": "ssid_open_2g", "appliedRadios": ["2G"]} ssid_name = profile_data["ssid_name"] @@ -170,8 +170,8 @@ setup_params_general_5G = { } -@allure.feature("Client Scale Tests") -@allure.parent_suite("Client Scale Tests") +@allure.feature("AX Client Scale Tests") +@allure.parent_suite("AX Client Scale Tests") @allure.suite(suite_name="Open Security") @allure.sub_suite(sub_suite_name="BRIDGE Mode") @pytest.mark.parametrize( @@ -185,8 +185,8 @@ setup_params_general_5G = { @pytest.mark.fiveg @pytest.mark.fiveg_band class TestWifiCapacityBRIDGEMode5G(object): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and open and fiveg" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and open and fiveg" """ @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3649", name="WIFI-3649") @@ -196,8 +196,8 @@ class TestWifiCapacityBRIDGEMode5G(object): def test_client_open_BRIDGE_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and open and fiveg and tcp_download" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and open and fiveg and tcp_download" """ profile_data = {"ssid_name": "ssid_open_5g", "appliedRadios": ["5G"]} ssid_name = profile_data["ssid_name"] @@ -217,8 +217,8 @@ class TestWifiCapacityBRIDGEMode5G(object): def test_client_open_BRIDGE_udp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and open and fiveg and udp_download" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and open and fiveg and udp_download" """ profile_data = {"ssid_name": "ssid_open_5g", "appliedRadios": ["5G"]} ssid_name = profile_data["ssid_name"] @@ -237,8 +237,8 @@ class TestWifiCapacityBRIDGEMode5G(object): def test_client_open_BRIDGE_tcp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and open and fiveg and tcp_bidirectional" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and open and fiveg and tcp_bidirectional" """ profile_data = {"ssid_name": "ssid_open_5g", "appliedRadios": ["5G"]} ssid_name = profile_data["ssid_name"] @@ -257,8 +257,8 @@ class TestWifiCapacityBRIDGEMode5G(object): def test_client_open_BRIDGE_udp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and open and fiveg and udp_bidirectional" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and open and fiveg and udp_bidirectional" """ profile_data = {"ssid_name": "ssid_open_5g", "appliedRadios": ["5G"]} ssid_name = profile_data["ssid_name"] @@ -276,8 +276,8 @@ class TestWifiCapacityBRIDGEMode5G(object): def test_client_open_bridge_udp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and open and fiveg and udp_upload" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and open and fiveg and udp_upload" """ profile_data = {"ssid_name": "ssid_open_5g", "appliedRadios": ["5G"]} ssid_name = profile_data["ssid_name"] @@ -295,8 +295,8 @@ class TestWifiCapacityBRIDGEMode5G(object): def test_client_open_bridge_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and open and fiveg and tcp_upload" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and open and fiveg and tcp_upload" """ profile_data = {"ssid_name": "ssid_open_5g", "appliedRadios": ["5G"]} ssid_name = profile_data["ssid_name"] diff --git a/tests/e2e/basic/performance_tests/client_scale_test/open/test_nat_mode.py b/tests/e2e/basic/performance_tests/ax_client_scale_test/open/test_nat_mode.py similarity index 86% rename from tests/e2e/basic/performance_tests/client_scale_test/open/test_nat_mode.py rename to tests/e2e/basic/performance_tests/ax_client_scale_test/open/test_nat_mode.py index d077e475b..fd6310795 100644 --- a/tests/e2e/basic/performance_tests/client_scale_test/open/test_nat_mode.py +++ b/tests/e2e/basic/performance_tests/ax_client_scale_test/open/test_nat_mode.py @@ -1,14 +1,14 @@ """ - Performance Test: Client Scale Test : NAT Mode - pytest -m "client_scale_test and nat" + Performance Test: AX Client Scale Test : NAT Mode + pytest -m "ax_client_scale_tests and nat" """ import logging import allure import pytest -pytestmark = [pytest.mark.nat, pytest.mark.client_scale_tests] +pytestmark = [pytest.mark.nat, pytest.mark.ax_client_scale_tests] setup_params_general_2G = { "mode": "NAT", @@ -22,8 +22,8 @@ setup_params_general_2G = { } -@allure.feature("Client Scale Tests") -@allure.parent_suite("Client Scale Tests") +@allure.feature("AX Client Scale Tests") +@allure.parent_suite("AX Client Scale Tests") @allure.suite(suite_name="Open Security") @allure.sub_suite(sub_suite_name="NAT Mode") @pytest.mark.parametrize( @@ -37,8 +37,8 @@ setup_params_general_2G = { @pytest.mark.twog @pytest.mark.twog_band class TestWifiCapacityNATMode2G(object): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and open and twog" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and open and twog" """ @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3648", name="WIFI-3648") @@ -47,8 +47,8 @@ class TestWifiCapacityNATMode2G(object): @allure.title("Test for TCP Download 2.4 GHz") def test_client_open_NAT_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and open and twog and tcp_download" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and open and twog and tcp_download" """ profile_data = {"ssid_name": "ssid_open_2g", "appliedRadios": ["2G"]} ssid_name = profile_data["ssid_name"] @@ -66,8 +66,8 @@ class TestWifiCapacityNATMode2G(object): @allure.title("Test for UDP Download 2.4 GHz") def test_client_open_NAT_udp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and open and twog and udp_download" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and open and twog and udp_download" """ profile_data = {"ssid_name": "ssid_open_2g", "appliedRadios": ["2G"]} ssid_name = profile_data["ssid_name"] @@ -86,8 +86,8 @@ class TestWifiCapacityNATMode2G(object): def test_client_open_NAT_tcp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and open and twog and tcp_bidirectional" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and open and twog and tcp_bidirectional" """ profile_data = {"ssid_name": "ssid_open_2g", "appliedRadios": ["2G"]} ssid_name = profile_data["ssid_name"] @@ -106,8 +106,8 @@ class TestWifiCapacityNATMode2G(object): def test_client_open_NAT_udp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and open and twog and udp_bidirectional" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and open and twog and udp_bidirectional" """ profile_data = {"ssid_name": "ssid_open_2g", "appliedRadios": ["2G"]} ssid_name = profile_data["ssid_name"] @@ -125,8 +125,8 @@ class TestWifiCapacityNATMode2G(object): def test_client_open_NAT_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and open and twog and tcp_upload" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and open and twog and tcp_upload" """ profile_data = {"ssid_name": "ssid_open_2g", "appliedRadios": ["2G"]} ssid_name = profile_data["ssid_name"] @@ -144,8 +144,8 @@ class TestWifiCapacityNATMode2G(object): def test_client_open_NAT_udp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and open and twog and udp_upload" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and open and twog and udp_upload" """ profile_data = {"ssid_name": "ssid_open_2g", "appliedRadios": ["2G"]} ssid_name = profile_data["ssid_name"] @@ -170,8 +170,8 @@ setup_params_general_5G = { } -@allure.feature("Client Scale Tests") -@allure.parent_suite("Client Scale Tests") +@allure.feature("AX Client Scale Tests") +@allure.parent_suite("AX Client Scale Tests") @allure.suite(suite_name="Open Security") @allure.sub_suite(sub_suite_name="NAT Mode") @pytest.mark.parametrize( @@ -185,8 +185,8 @@ setup_params_general_5G = { @pytest.mark.fiveg @pytest.mark.fiveg_band class TestWifiCapacityNATMode5G(object): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and open and fiveg" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and open and fiveg" """ @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3649", name="WIFI-3649") @@ -196,8 +196,8 @@ class TestWifiCapacityNATMode5G(object): def test_client_open_NAT_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and open and fiveg and tcp_download" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and open and fiveg and tcp_download" """ profile_data = {"ssid_name": "ssid_open_5g", "appliedRadios": ["5G"]} ssid_name = profile_data["ssid_name"] @@ -217,8 +217,8 @@ class TestWifiCapacityNATMode5G(object): def test_client_open_NAT_udp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and open and fiveg and udp_download" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and open and fiveg and udp_download" """ profile_data = {"ssid_name": "ssid_open_5g", "appliedRadios": ["5G"]} ssid_name = profile_data["ssid_name"] @@ -237,8 +237,8 @@ class TestWifiCapacityNATMode5G(object): def test_client_open_NAT_tcp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and open and fiveg and tcp_bidirectional" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and open and fiveg and tcp_bidirectional" """ profile_data = {"ssid_name": "ssid_open_5g", "appliedRadios": ["5G"]} ssid_name = profile_data["ssid_name"] @@ -257,8 +257,8 @@ class TestWifiCapacityNATMode5G(object): def test_client_open_NAT_udp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and open and fiveg and udp_bidirectional" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and open and fiveg and udp_bidirectional" """ profile_data = {"ssid_name": "ssid_open_5g", "appliedRadios": ["5G"]} ssid_name = profile_data["ssid_name"] @@ -276,8 +276,8 @@ class TestWifiCapacityNATMode5G(object): def test_client_open_NAT_udp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and open and fiveg and udp_upload" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and open and fiveg and udp_upload" """ profile_data = {"ssid_name": "ssid_open_5g", "appliedRadios": ["5G"]} ssid_name = profile_data["ssid_name"] @@ -295,8 +295,8 @@ class TestWifiCapacityNATMode5G(object): def test_client_open_NAT_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and open and fiveg and tcp_upload" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and open and fiveg and tcp_upload" """ profile_data = {"ssid_name": "ssid_open_5g", "appliedRadios": ["5G"]} ssid_name = profile_data["ssid_name"] @@ -306,4 +306,4 @@ class TestWifiCapacityNATMode5G(object): upload_rate="1Gbps", protocol="TCP", duration="60000", move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, num_stations={"5G": max_stations}) - assert True + assert True \ No newline at end of file diff --git a/tests/e2e/basic/performance_tests/ax_client_scale_test/wpa2_personal/__init__.py b/tests/e2e/basic/performance_tests/ax_client_scale_test/wpa2_personal/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/e2e/basic/performance_tests/client_scale_test/wpa2_personal/test_bridge_mode.py b/tests/e2e/basic/performance_tests/ax_client_scale_test/wpa2_personal/test_bridge_mode.py similarity index 81% rename from tests/e2e/basic/performance_tests/client_scale_test/wpa2_personal/test_bridge_mode.py rename to tests/e2e/basic/performance_tests/ax_client_scale_test/wpa2_personal/test_bridge_mode.py index 8905ce26f..52eec937e 100644 --- a/tests/e2e/basic/performance_tests/client_scale_test/wpa2_personal/test_bridge_mode.py +++ b/tests/e2e/basic/performance_tests/ax_client_scale_test/wpa2_personal/test_bridge_mode.py @@ -1,14 +1,14 @@ """ - Performance Test: Client Scale Test : BRIDGE Mode - pytest -m "client_scale_test and BRIDGE" + Performance Test: AX Client Scale Test : BRIDGE Mode + pytest -m "ax_client_scale_tests and BRIDGE" """ import logging import allure import pytest -pytestmark = [pytest.mark.performance, pytest.mark.bridge, pytest.mark.client_scale_tests] +pytestmark = [pytest.mark.bridge, pytest.mark.ax_client_scale_tests] setup_params_general_2G = { "mode": "BRIDGE", @@ -17,13 +17,32 @@ setup_params_general_2G = { {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} ] }, - "rf": {}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 20, + "channel-mode": "HE", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "HE", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 + } + }, "radius": False } -@allure.feature("Client Scale Tests") -@allure.parent_suite("Client Scale Tests") +@allure.feature("AX Client Scale Tests") +@allure.parent_suite("AX Client Scale Tests") @allure.suite(suite_name="WPA2 Personal Security") @allure.sub_suite(sub_suite_name="BRIDGE Mode") @pytest.mark.parametrize( @@ -37,18 +56,19 @@ setup_params_general_2G = { @pytest.mark.twog @pytest.mark.twog_band class TestWifiCapacityBRIDGEMode2G(object): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa2_personal and twog" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa2_personal and twog" """ @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3928", name="WIFI-3928") @pytest.mark.wpa2_personal @pytest.mark.tcp_download + @pytest.mark.performance @allure.title("Test for TCP Download 2.4 GHz") def test_client_wpa2_BRIDGE_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa2_personal and twog and tcp_download" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa2_personal and twog and tcp_download" """ profile_data = {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -63,11 +83,12 @@ class TestWifiCapacityBRIDGEMode2G(object): @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3930", name="WIFI-3930") @pytest.mark.wpa2_personal @pytest.mark.udp_download + @pytest.mark.performance @allure.title("Test for UDP Download 2.4 GHz") def test_client_wpa2_BRIDGE_udp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa2_personal and twog and udp_download" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa2_personal and twog and udp_download" """ profile_data = {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -86,8 +107,8 @@ class TestWifiCapacityBRIDGEMode2G(object): def test_client_wpa2_BRIDGE_tcp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa2_personal and twog and tcp_bidirectional" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa2_personal and twog and tcp_bidirectional" """ profile_data = {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -106,8 +127,8 @@ class TestWifiCapacityBRIDGEMode2G(object): def test_client_wpa2_BRIDGE_udp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa2_personal and twog and udp_bidirectional" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa2_personal and twog and udp_bidirectional" """ profile_data = {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -122,12 +143,13 @@ class TestWifiCapacityBRIDGEMode2G(object): @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-7127", name="WIFI-7127") @pytest.mark.wpa2_personal @pytest.mark.tcp_upload + @pytest.mark.performance @allure.title("Test for TCP Upload 2.4 GHz") def test_client_wpa2_bridge_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa2_personal and twog and tcp_upload" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa2_personal and twog and tcp_upload" """ profile_data = {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -142,12 +164,13 @@ class TestWifiCapacityBRIDGEMode2G(object): @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-7128", name="WIFI-7128") @pytest.mark.wpa2_personal @pytest.mark.udp_upload + @pytest.mark.performance @allure.title("Test for UDP Upload 2.4 GHz") def test_client_wpa2_bridge_udp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa2_personal and twog and udp_upload" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa2_personal and twog and udp_upload" """ profile_data = {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -167,13 +190,32 @@ setup_params_general_5G = { {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} ] }, - "rf": {}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 20, + "channel-mode": "HE", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "HE", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 + } + }, "radius": False } -@allure.feature("Client Scale Tests") -@allure.parent_suite("Client Scale Tests") +@allure.feature("AX Client Scale Tests") +@allure.parent_suite("AX Client Scale Tests") @allure.suite(suite_name="WPA2 Personal Security") @allure.sub_suite(sub_suite_name="BRIDGE Mode") @pytest.mark.parametrize( @@ -187,19 +229,20 @@ setup_params_general_5G = { @pytest.mark.fiveg @pytest.mark.fiveg_band class TestWifiCapacityBRIDGEMode5G(object): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa2_personal and fiveg" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa2_personal and fiveg" """ @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3929", name="WIFI-3929") @pytest.mark.wpa2_personal @pytest.mark.tcp_download + @pytest.mark.performance @allure.title("Test for TCP Download 5 GHz") def test_client_wpa2_BRIDGE_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa2_personal and fiveg and tcp_download" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa2_personal and fiveg and tcp_download" """ profile_data = {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -215,12 +258,13 @@ class TestWifiCapacityBRIDGEMode5G(object): @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3931", name="WIFI-3931") @pytest.mark.wpa2_personal @pytest.mark.udp_download + @pytest.mark.performance @allure.title("Test for UDP Download 5 GHz") def test_client_wpa2_BRIDGE_udp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa2_personal and fiveg and udp_download" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa2_personal and fiveg and udp_download" """ profile_data = {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -239,8 +283,8 @@ class TestWifiCapacityBRIDGEMode5G(object): def test_client_wpa2_BRIDGE_tcp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa2_personal and fiveg and tcp_bidirectional" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa2_personal and fiveg and tcp_bidirectional" """ profile_data = {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -259,8 +303,8 @@ class TestWifiCapacityBRIDGEMode5G(object): def test_client_wpa2_BRIDGE_udp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa2_personal and fiveg and udp_bidirectional" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa2_personal and fiveg and udp_bidirectional" """ profile_data = {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -274,12 +318,13 @@ class TestWifiCapacityBRIDGEMode5G(object): @pytest.mark.udp_upload @pytest.mark.wpa2_personal + @pytest.mark.performance @allure.title("Test for UDP Upload 5 GHz") def test_client_wpa2_bridge_udp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa2_personal and fiveg and udp_upload" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa2_personal and fiveg and udp_upload" """ profile_data = {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -293,12 +338,13 @@ class TestWifiCapacityBRIDGEMode5G(object): @pytest.mark.tcp_upload @pytest.mark.wpa2_personal + @pytest.mark.performance @allure.title("Test for TCP Upload 5 GHz") def test_client_wpa2_bridge_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa2_personal and fiveg and tcp_upload" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa2_personal and fiveg and tcp_upload" """ profile_data = {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -318,13 +364,32 @@ setup_params_general_dual = { {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} ] }, - "rf": {}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 20, + "channel-mode": "HE", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "HE", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 + } + }, "radius": False } -@allure.feature("Client Scale Tests") -@allure.parent_suite("Client Scale Tests") +@allure.feature("AX Client Scale Tests") +@allure.parent_suite("AX Client Scale Tests") @allure.suite(suite_name="WPA2 Personal Security") @allure.sub_suite(sub_suite_name="BRIDGE Mode") @pytest.mark.parametrize( @@ -340,18 +405,19 @@ setup_params_general_dual = { @pytest.mark.dual_band @pytest.mark.twog_band class TestWifiCapacityBRIDGEModeDual(object): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa2_personal and dual_band" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa2_personal and dual_band" """ @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3926", name="WIFI-3926") @pytest.mark.wpa2_personal @pytest.mark.tcp_download + @pytest.mark.performance @allure.title("Test for TCP Download 2.4 GHz and 5 GHz") def test_client_wpa2_BRIDGE_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa2_personal and dual_band and tcp_download" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa2_personal and dual_band and tcp_download" """ profile_data = {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -366,11 +432,12 @@ class TestWifiCapacityBRIDGEModeDual(object): @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3927", name="WIFI-3927") @pytest.mark.wpa2_personal @pytest.mark.udp_download + @pytest.mark.performance @allure.title("Test for UDP Download 2.4 GHz and 5 GHz") def test_client_wpa2_BRIDGE_udp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa2_personal and dual_band and udp_download" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa2_personal and dual_band and udp_download" """ profile_data = {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -389,8 +456,8 @@ class TestWifiCapacityBRIDGEModeDual(object): def test_client_wpa2_BRIDGE_tcp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa2_personal and dual_band and tcp_bidirectional" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa2_personal and dual_band and tcp_bidirectional" """ profile_data = {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -409,8 +476,8 @@ class TestWifiCapacityBRIDGEModeDual(object): def test_client_wpa2_BRIDGE_udp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa2_personal and dual_band and udp_bidirectional" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa2_personal and dual_band and udp_bidirectional" """ profile_data = {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -425,12 +492,13 @@ class TestWifiCapacityBRIDGEModeDual(object): @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-7127", name="WIFI-7127") @pytest.mark.wpa2_personal @pytest.mark.tcp_upload + @pytest.mark.performance @allure.title("Test for TCP Upload 2.4 GHz and 5 GHz") def test_client_wpa2_bridge_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa2_personal and dual_band and tcp_upload" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa2_personal and dual_band and tcp_upload" """ profile_data = {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -445,12 +513,13 @@ class TestWifiCapacityBRIDGEModeDual(object): @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-7128", name="WIFI-7128") @pytest.mark.wpa2_personal @pytest.mark.udp_upload + @pytest.mark.performance @allure.title("Test for UDP Upload 2.4 GHz and 5 GHz") def test_client_wpa2_bridge_udp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa2_personal and dual_band and udp_upload" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa2_personal and dual_band and udp_upload" """ profile_data = {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -460,4 +529,4 @@ class TestWifiCapacityBRIDGEModeDual(object): upload_rate="1Gbps", protocol="UDP", duration="60000", move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, num_stations={"2G": max_stations, "5G": max_stations}) - assert True + assert True \ No newline at end of file diff --git a/tests/e2e/basic/performance_tests/client_scale_test/wpa2_personal/test_nat_mode.py b/tests/e2e/basic/performance_tests/ax_client_scale_test/wpa2_personal/test_nat_mode.py similarity index 81% rename from tests/e2e/basic/performance_tests/client_scale_test/wpa2_personal/test_nat_mode.py rename to tests/e2e/basic/performance_tests/ax_client_scale_test/wpa2_personal/test_nat_mode.py index f36e9daa7..3ba1eb45d 100644 --- a/tests/e2e/basic/performance_tests/client_scale_test/wpa2_personal/test_nat_mode.py +++ b/tests/e2e/basic/performance_tests/ax_client_scale_test/wpa2_personal/test_nat_mode.py @@ -1,14 +1,14 @@ """ - Performance Test: Client Scale Test : NAT Mode - pytest -m "client_scale_test and nat" + Performance Test: AX Client Scale Test : NAT Mode + pytest -m "ax_client_scale_tests and nat" """ import logging import allure import pytest -pytestmark = [pytest.mark.performance, pytest.mark.nat, pytest.mark.client_scale_tests] +pytestmark = [pytest.mark.nat, pytest.mark.ax_client_scale_tests] setup_params_general_2G = { "mode": "NAT", @@ -17,13 +17,32 @@ setup_params_general_2G = { {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} ] }, - "rf": {}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 20, + "channel-mode": "HE", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "HE", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 + } + }, "radius": False } -@allure.feature("Client Scale Tests") -@allure.parent_suite("Client Scale Tests") +@allure.feature("AX Client Scale Tests") +@allure.parent_suite("AX Client Scale Tests") @allure.suite(suite_name="WPA2 Personal Security") @allure.sub_suite(sub_suite_name="NAT Mode") @pytest.mark.parametrize( @@ -37,18 +56,19 @@ setup_params_general_2G = { @pytest.mark.twog @pytest.mark.twog_band class TestWifiCapacityNATMode2G(object): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and wpa2_personal and twog" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and wpa2_personal and twog" """ @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3928", name="WIFI-3928") @pytest.mark.wpa2_personal @pytest.mark.tcp_download + @pytest.mark.performance @allure.title("Test for TCP Download 2.4 GHz") def test_client_wpa2_NAT_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and wpa2_personal and twog and tcp_download" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and wpa2_personal and twog and tcp_download" """ profile_data = {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -63,11 +83,12 @@ class TestWifiCapacityNATMode2G(object): @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3930", name="WIFI-3930") @pytest.mark.wpa2_personal @pytest.mark.udp_download + @pytest.mark.performance @allure.title("Test for UDP Download 2.4 GHz") def test_client_wpa2_NAT_udp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and wpa2_personal and twog and udp_download" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and wpa2_personal and twog and udp_download" """ profile_data = {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -86,8 +107,8 @@ class TestWifiCapacityNATMode2G(object): def test_client_wpa2_NAT_tcp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and wpa2_personal and twog and tcp_bidirectional" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and wpa2_personal and twog and tcp_bidirectional" """ profile_data = {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -106,8 +127,8 @@ class TestWifiCapacityNATMode2G(object): def test_client_wpa2_NAT_udp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and wpa2_personal and twog and udp_bidirectional" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and wpa2_personal and twog and udp_bidirectional" """ profile_data = {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -122,12 +143,13 @@ class TestWifiCapacityNATMode2G(object): @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-7127", name="WIFI-7127") @pytest.mark.wpa2_personal @pytest.mark.tcp_upload + @pytest.mark.performance @allure.title("Test for TCP Upload 2.4 GHz") def test_client_wpa2_NAT_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and wpa2_personal and twog and tcp_upload" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and wpa2_personal and twog and tcp_upload" """ profile_data = {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -142,12 +164,13 @@ class TestWifiCapacityNATMode2G(object): @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-7128", name="WIFI-7128") @pytest.mark.wpa2_personal @pytest.mark.udp_upload + @pytest.mark.performance @allure.title("Test for UDP Upload 2.4 GHz") def test_client_wpa2_NAT_udp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and wpa2_personal and twog and udp_upload" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and wpa2_personal and twog and udp_upload" """ profile_data = {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -167,13 +190,32 @@ setup_params_general_5G = { {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} ] }, - "rf": {}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 20, + "channel-mode": "HE", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "HE", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 + } + }, "radius": False } -@allure.feature("Client Scale Tests") -@allure.parent_suite("Client Scale Tests") +@allure.feature("AX Client Scale Tests") +@allure.parent_suite("AX Client Scale Tests") @allure.suite(suite_name="WPA2 Personal Security") @allure.sub_suite(sub_suite_name="NAT Mode") @pytest.mark.parametrize( @@ -187,19 +229,20 @@ setup_params_general_5G = { @pytest.mark.fiveg @pytest.mark.fiveg_band class TestWifiCapacityNATMode5G(object): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and wpa2_personal and fiveg" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and wpa2_personal and fiveg" """ @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3929", name="WIFI-3929") @pytest.mark.wpa2_personal @pytest.mark.tcp_download + @pytest.mark.performance @allure.title("Test for TCP Download 5 GHz") def test_client_wpa2_NAT_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and wpa2_personal and fiveg and tcp_download" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and wpa2_personal and fiveg and tcp_download" """ profile_data = {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -215,12 +258,13 @@ class TestWifiCapacityNATMode5G(object): @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3931", name="WIFI-3931") @pytest.mark.wpa2_personal @pytest.mark.udp_download + @pytest.mark.performance @allure.title("Test for UDP Download 5 GHz") def test_client_wpa2_NAT_udp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and wpa2_personal and fiveg and udp_download" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and wpa2_personal and fiveg and udp_download" """ profile_data = {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -239,8 +283,8 @@ class TestWifiCapacityNATMode5G(object): def test_client_wpa2_NAT_tcp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and wpa2_personal and fiveg and tcp_bidirectional" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and wpa2_personal and fiveg and tcp_bidirectional" """ profile_data = {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -259,8 +303,8 @@ class TestWifiCapacityNATMode5G(object): def test_client_wpa2_NAT_udp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and wpa2_personal and fiveg and udp_bidirectional" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and wpa2_personal and fiveg and udp_bidirectional" """ profile_data = {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -274,12 +318,13 @@ class TestWifiCapacityNATMode5G(object): @pytest.mark.udp_upload @pytest.mark.wpa2_personal + @pytest.mark.performance @allure.title("Test for UDP Upload 5 GHz") def test_client_wpa2_NAT_udp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and wpa2_personal and fiveg and udp_upload" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and wpa2_personal and fiveg and udp_upload" """ profile_data = {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -293,12 +338,13 @@ class TestWifiCapacityNATMode5G(object): @pytest.mark.tcp_upload @pytest.mark.wpa2_personal + @pytest.mark.performance @allure.title("Test for TCP Upload 5 GHz") def test_client_wpa2_NAT_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and wpa2_personal and fiveg and tcp_upload" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and wpa2_personal and fiveg and tcp_upload" """ profile_data = {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -318,13 +364,32 @@ setup_params_general_dual = { {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} ] }, - "rf": {}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 20, + "channel-mode": "HE", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "HE", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 + } + }, "radius": False } -@allure.feature("Client Scale Tests") -@allure.parent_suite("Client Scale Tests") +@allure.feature("AX Client Scale Tests") +@allure.parent_suite("AX Client Scale Tests") @allure.suite(suite_name="WPA2 Personal Security") @allure.sub_suite(sub_suite_name="NAT Mode") @pytest.mark.parametrize( @@ -340,18 +405,19 @@ setup_params_general_dual = { @pytest.mark.dual_band @pytest.mark.twog_band class TestWifiCapacityNATModeDual(object): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and wpa2_personal and dual_band" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and wpa2_personal and dual_band" """ @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3926", name="WIFI-3926") @pytest.mark.wpa2_personal @pytest.mark.tcp_download + @pytest.mark.performance @allure.title("Test for TCP Download 2.4 GHz and 5 GHz") def test_client_wpa2_NAT_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and wpa2_personal and dual_band and tcp_download" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and wpa2_personal and dual_band and tcp_download" """ profile_data = {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -366,11 +432,12 @@ class TestWifiCapacityNATModeDual(object): @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3927", name="WIFI-3927") @pytest.mark.wpa2_personal @pytest.mark.udp_download + @pytest.mark.performance @allure.title("Test for UDP Download 2.4 GHz and 5 GHz") def test_client_wpa2_NAT_udp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and wpa2_personal and dual_band and udp_download" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and wpa2_personal and dual_band and udp_download" """ profile_data = {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -389,8 +456,8 @@ class TestWifiCapacityNATModeDual(object): def test_client_wpa2_NAT_tcp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and wpa2_personal and dual_band and tcp_bidirectional" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and wpa2_personal and dual_band and tcp_bidirectional" """ profile_data = {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -409,8 +476,8 @@ class TestWifiCapacityNATModeDual(object): def test_client_wpa2_NAT_udp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and wpa2_personal and dual_band and udp_bidirectional" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and wpa2_personal and dual_band and udp_bidirectional" """ profile_data = {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -425,12 +492,13 @@ class TestWifiCapacityNATModeDual(object): @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-7127", name="WIFI-7127") @pytest.mark.wpa2_personal @pytest.mark.tcp_upload + @pytest.mark.performance @allure.title("Test for TCP Upload 2.4 GHz and 5 GHz") def test_client_wpa2_NAT_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and wpa2_personal and dual_band and tcp_upload" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and wpa2_personal and dual_band and tcp_upload" """ profile_data = {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -445,12 +513,13 @@ class TestWifiCapacityNATModeDual(object): @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-7128", name="WIFI-7128") @pytest.mark.wpa2_personal @pytest.mark.udp_upload + @pytest.mark.performance @allure.title("Test for UDP Upload 2.4 GHz and 5 GHz") def test_client_wpa2_NAT_udp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test NAT mode - pytest -m "client_scale_tests and nat and wpa2_personal and dual_band and udp_upload" + """ AX Client Scale Test NAT mode + pytest -m "ax_client_scale_tests and nat and wpa2_personal and dual_band and udp_upload" """ profile_data = {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -460,4 +529,4 @@ class TestWifiCapacityNATModeDual(object): upload_rate="1Gbps", protocol="UDP", duration="60000", move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, num_stations={"2G": max_stations, "5G": max_stations}) - assert True + assert True \ No newline at end of file diff --git a/tests/e2e/basic/performance_tests/ax_client_scale_test/wpa3_personal/__init__.py b/tests/e2e/basic/performance_tests/ax_client_scale_test/wpa3_personal/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/e2e/basic/performance_tests/client_scale_test/wpa3_personal/test_bridge_mode.py b/tests/e2e/basic/performance_tests/ax_client_scale_test/wpa3_personal/test_bridge_mode.py similarity index 84% rename from tests/e2e/basic/performance_tests/client_scale_test/wpa3_personal/test_bridge_mode.py rename to tests/e2e/basic/performance_tests/ax_client_scale_test/wpa3_personal/test_bridge_mode.py index 2ccaf0db0..567f3c913 100644 --- a/tests/e2e/basic/performance_tests/client_scale_test/wpa3_personal/test_bridge_mode.py +++ b/tests/e2e/basic/performance_tests/ax_client_scale_test/wpa3_personal/test_bridge_mode.py @@ -1,14 +1,14 @@ """ - Performance Test: Client Scale Test : BRIDGE Mode - pytest -m "client_scale_tests and bridge" + Performance Test: AX Client Scale Test : BRIDGE Mode + pytest -m "ax_client_scale_tests and bridge" """ import os import pytest import allure -pytestmark = [pytest.mark.bridge, pytest.mark.client_scale_tests] +pytestmark = [pytest.mark.bridge, pytest.mark.ax_client_scale_tests] setup_params_general_2G = { "mode": "BRIDGE", @@ -22,8 +22,8 @@ setup_params_general_2G = { } -@allure.feature("Client Scale Tests") -@allure.parent_suite("Client Scale Tests") +@allure.feature("AX Client Scale Tests") +@allure.parent_suite("AX Client Scale Tests") @allure.suite(suite_name="WPA3 Personal Security") @allure.sub_suite(sub_suite_name="BRIDGE Mode") @pytest.mark.parametrize( @@ -37,8 +37,8 @@ setup_params_general_2G = { @pytest.mark.twog @pytest.mark.twog_band class TestWifiCapacityBRIDGEMode2G(object): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa3_personal and twog" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa3_personal and twog" """ @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3651", name="WIFI-3651") @@ -47,8 +47,8 @@ class TestWifiCapacityBRIDGEMode2G(object): @allure.title("Test for TCP Download 2.4 GHz") def test_client_wpa3_bridge_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa3_personal and twog and tcp_download" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa3_personal and twog and tcp_download" """ profile_data = {"ssid_name": "ssid_wpa3_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -65,8 +65,8 @@ class TestWifiCapacityBRIDGEMode2G(object): @allure.title("Test for TCP Upload 2.4 GHz") def test_client_wpa3_bridge_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa3_personal and twog and tcp_upload" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa3_personal and twog and tcp_upload" """ profile_data = {"ssid_name": "ssid_wpa3_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -83,8 +83,8 @@ class TestWifiCapacityBRIDGEMode2G(object): @allure.title("Test for UDP Upload 2.4 GHz") def test_client_wpa3_bridge_udp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa3_personal and twog and udp_upload" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa3_personal and twog and udp_upload" """ profile_data = {"ssid_name": "ssid_wpa3_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -102,8 +102,8 @@ class TestWifiCapacityBRIDGEMode2G(object): @allure.title("Test for UDP Download 2.4 GHz") def test_client_wpa3_bridge_udp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa3_personal and twog and udp_download" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa3_personal and twog and udp_download" """ profile_data = {"ssid_name": "ssid_wpa3_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -122,8 +122,8 @@ class TestWifiCapacityBRIDGEMode2G(object): def test_client_wpa3_bridge_tcp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa3_personal and twog and tcp_bidirectional" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa3_personal and twog and tcp_bidirectional" """ profile_data = {"ssid_name": "ssid_wpa3_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -142,8 +142,8 @@ class TestWifiCapacityBRIDGEMode2G(object): def test_client_wpa3_bridge_udp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa3_personal and twog and udp_bidirectional" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa3_personal and twog and udp_bidirectional" """ profile_data = {"ssid_name": "ssid_wpa3_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -168,8 +168,8 @@ setup_params_general_5G = { } -@allure.feature("Client Scale Tests") -@allure.parent_suite("Client Scale Tests") +@allure.feature("AX Client Scale Tests") +@allure.parent_suite("AX Client Scale Tests") @allure.suite(suite_name="WPA3 Personal Security") @allure.sub_suite(sub_suite_name="BRIDGE Mode") @pytest.mark.parametrize( @@ -183,8 +183,8 @@ setup_params_general_5G = { @pytest.mark.fiveg @pytest.mark.fiveg_band class TestWifiCapacityBRIDGEMode5G(object): - """ Client Scale Test BRIDGE mode - client_scale_tests and bridge and wpa3_personal and fiveg" + """ AX Client Scale Test BRIDGE mode + ax_client_scale_tests and bridge and wpa3_personal and fiveg" """ @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3653", name="WIFI-3653") @@ -193,8 +193,8 @@ class TestWifiCapacityBRIDGEMode5G(object): @allure.title("Test for TCP Download 5 GHz") def test_client_wpa3_bridge_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa3_personal and fiveg and tcp_download" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa3_personal and fiveg and tcp_download" """ profile_data = {"ssid_name": "ssid_wpa3_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -212,8 +212,8 @@ class TestWifiCapacityBRIDGEMode5G(object): @allure.title("Test for UDP Download 5 GHz") def test_client_wpa3_bridge_udp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa3_personal and fiveg and udp_download" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa3_personal and fiveg and udp_download" """ profile_data = {"ssid_name": "ssid_wpa3_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -232,8 +232,8 @@ class TestWifiCapacityBRIDGEMode5G(object): def test_client_wpa3_bridge_tcp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa3_personal and fiveg and tcp_bidirectional" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa3_personal and fiveg and tcp_bidirectional" """ profile_data = {"ssid_name": "ssid_wpa3_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -252,8 +252,8 @@ class TestWifiCapacityBRIDGEMode5G(object): def test_client_wpa3_bridge_udp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa3_personal and fiveg and udp_bidirectional" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa3_personal and fiveg and udp_bidirectional" """ profile_data = {"ssid_name": "ssid_wpa3_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -270,8 +270,8 @@ class TestWifiCapacityBRIDGEMode5G(object): @allure.title("Test for TCP Upload 5 GHz") def test_client_wpa3_bridge_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa3_personal and fiveg and tcp_upload" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa3_personal and fiveg and tcp_upload" """ profile_data = {"ssid_name": "ssid_wpa3_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -288,8 +288,8 @@ class TestWifiCapacityBRIDGEMode5G(object): @allure.title("Test for UDP Upload 5 GHz") def test_client_wpa3_bridge_udp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa3_personal and fiveg and udp_upload" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa3_personal and fiveg and udp_upload" """ profile_data = {"ssid_name": "ssid_wpa3_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -310,13 +310,32 @@ setup_params_general_6G = { {"ssid_name": "ssid_wpa3_6g", "appliedRadios": ["6G"], "security_key": "something"} ] }, - "rf": {}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 20, + "channel-mode": "HE", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "HE", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 + } + }, "radius": False } -@allure.feature("Client Scale Tests") -@allure.parent_suite("Client Scale Tests") +@allure.feature("AX Client Scale Tests") +@allure.parent_suite("AX Client Scale Tests") @allure.suite(suite_name="WPA3 Personal Security") @allure.sub_suite(sub_suite_name="BRIDGE Mode") @pytest.mark.parametrize( @@ -328,20 +347,20 @@ setup_params_general_6G = { @pytest.mark.usefixtures("setup_configuration") @pytest.mark.wpa3_personal @pytest.mark.twog -@pytest.mark.performance class TestWifiCapacityBRIDGEMode6G(object): - """ Client Scale Test BRIDGE mode - client_scale_tests and bridge and wpa3_personal and sixg" + """ AX Client Scale Test BRIDGE mode + ax_client_scale_tests and bridge and wpa3_personal and sixg" """ @pytest.mark.wpa3_personal @pytest.mark.tcp_download @pytest.mark.sixg + @pytest.mark.performance @allure.title("Test for TCP Download 6 GHz") def test_client_wpa3_bridge_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa3_personal and sixg and tcp_download" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa3_personal and sixg and tcp_download" """ profile_data = {"ssid_name": "ssid_wpa3_6g", "appliedRadios": ["6G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -357,11 +376,12 @@ class TestWifiCapacityBRIDGEMode6G(object): @pytest.mark.wpa3_personal @pytest.mark.udp_download @pytest.mark.sixg + @pytest.mark.performance @allure.title("Test for UDP Download 6 GHz") def test_client_wpa3_bridge_udp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa3_personal and sixg and udp_download" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa3_personal and sixg and udp_download" """ profile_data = {"ssid_name": "ssid_wpa3_6g", "appliedRadios": ["6G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -381,8 +401,8 @@ class TestWifiCapacityBRIDGEMode6G(object): def test_client_wpa3_bridge_tcp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa3_personal and sixg and tcp_bidirectional" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa3_personal and sixg and tcp_bidirectional" """ profile_data = {"ssid_name": "ssid_wpa3_6g", "appliedRadios": ["6G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -402,8 +422,8 @@ class TestWifiCapacityBRIDGEMode6G(object): def test_client_wpa3_bridge_udp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa3_personal and sixg and udp_bidirectional" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa3_personal and sixg and udp_bidirectional" """ profile_data = {"ssid_name": "ssid_wpa3_6g", "appliedRadios": ["6G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -418,11 +438,12 @@ class TestWifiCapacityBRIDGEMode6G(object): @pytest.mark.wpa3_personal @pytest.mark.tcp_upload @pytest.mark.sixg + @pytest.mark.performance @allure.title("Test for TCP Upload 6 GHz") def test_client_wpa3_bridge_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa3_personal and sixg and tcp_upload" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa3_personal and sixg and tcp_upload" """ profile_data = {"ssid_name": "ssid_wpa3_6g", "appliedRadios": ["6G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -437,11 +458,12 @@ class TestWifiCapacityBRIDGEMode6G(object): @pytest.mark.wpa3_personal @pytest.mark.udp_upload @pytest.mark.sixg + @pytest.mark.performance @allure.title("Test for UDP Upload 6 GHz") def test_client_wpa3_bridge_udp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa3_personal and sixg and udp_upload" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa3_personal and sixg and udp_upload" """ profile_data = {"ssid_name": "ssid_wpa3_6g", "appliedRadios": ["6G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -451,4 +473,4 @@ class TestWifiCapacityBRIDGEMode6G(object): upload_rate="1Gbps", protocol="UDP", duration="60000", move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, num_stations={"6G": max_stations}) - assert True + assert True \ No newline at end of file diff --git a/tests/e2e/basic/performance_tests/ax_client_scale_test/wpa_personal/__init__.py b/tests/e2e/basic/performance_tests/ax_client_scale_test/wpa_personal/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/e2e/basic/performance_tests/client_scale_test/wpa_personal/test_bridge_mode.py b/tests/e2e/basic/performance_tests/ax_client_scale_test/wpa_personal/test_bridge_mode.py similarity index 86% rename from tests/e2e/basic/performance_tests/client_scale_test/wpa_personal/test_bridge_mode.py rename to tests/e2e/basic/performance_tests/ax_client_scale_test/wpa_personal/test_bridge_mode.py index a44e0dc21..b9b0c81d4 100644 --- a/tests/e2e/basic/performance_tests/client_scale_test/wpa_personal/test_bridge_mode.py +++ b/tests/e2e/basic/performance_tests/ax_client_scale_test/wpa_personal/test_bridge_mode.py @@ -1,14 +1,14 @@ """ - Performance Test: Client Scale Test : BRIDGE Mode - pytest -m "client_scale_test and BRIDGE" + Performance Test: AX Client Scale Test : BRIDGE Mode + pytest -m "ax_client_scale_tests and BRIDGE" """ import logging import allure import pytest -pytestmark = [pytest.mark.bridge, pytest.mark.client_scale_tests] +pytestmark = [pytest.mark.bridge, pytest.mark.ax_client_scale_tests] setup_params_general_2G = { "mode": "BRIDGE", @@ -22,8 +22,8 @@ setup_params_general_2G = { } -@allure.feature("Client Scale Tests") -@allure.parent_suite("Client Scale Tests") +@allure.feature("AX Client Scale Tests") +@allure.parent_suite("AX Client Scale Tests") @allure.suite(suite_name="WPA Personal Security") @allure.sub_suite(sub_suite_name="BRIDGE Mode") @pytest.mark.parametrize( @@ -37,8 +37,8 @@ setup_params_general_2G = { @pytest.mark.twog @pytest.mark.twog_band class TestWifiCapacityBRIDGEMode2G(object): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa_personal and twog" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa_personal and twog" """ @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3650", name="WIFI-3650") @@ -47,8 +47,8 @@ class TestWifiCapacityBRIDGEMode2G(object): @allure.title("Test for TCP Download 2.4 GHz") def test_client_wpa_BRIDGE_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa_personal and twog and tcp_download" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa_personal and twog and tcp_download" """ profile_data = {"ssid_name": "ssid_wpa_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -66,8 +66,8 @@ class TestWifiCapacityBRIDGEMode2G(object): @allure.title("Test for UDP Download 2.4 GHz") def test_client_wpa_BRIDGE_udp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa_personal and twog and udp_download" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa_personal and twog and udp_download" """ profile_data = {"ssid_name": "ssid_wpa_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -86,8 +86,8 @@ class TestWifiCapacityBRIDGEMode2G(object): def test_client_wpa_BRIDGE_tcp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa_personal and twog and tcp_bidirectional" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa_personal and twog and tcp_bidirectional" """ profile_data = {"ssid_name": "ssid_wpa_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -106,8 +106,8 @@ class TestWifiCapacityBRIDGEMode2G(object): def test_client_wpa_BRIDGE_udp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa_personal and twog and udp_bidirectional" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa_personal and twog and udp_bidirectional" """ profile_data = {"ssid_name": "ssid_wpa_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -125,8 +125,8 @@ class TestWifiCapacityBRIDGEMode2G(object): def test_client_wpa_bridge_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa_personal and twog and tcp_upload" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa_personal and twog and tcp_upload" """ profile_data = {"ssid_name": "ssid_wpa_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -144,8 +144,8 @@ class TestWifiCapacityBRIDGEMode2G(object): def test_client_wpa_bridge_udp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa_personal and twog and udp_upload" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa_personal and twog and udp_upload" """ profile_data = {"ssid_name": "ssid_wpa_2g", "appliedRadios": ["2G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -170,8 +170,8 @@ setup_params_general_5G = { } -@allure.feature("Client Scale Tests") -@allure.parent_suite("Client Scale Tests") +@allure.feature("AX Client Scale Tests") +@allure.parent_suite("AX Client Scale Tests") @allure.suite(suite_name="wpa Personal Security") @allure.sub_suite(sub_suite_name="BRIDGE Mode") @pytest.mark.parametrize( @@ -185,8 +185,8 @@ setup_params_general_5G = { @pytest.mark.fiveg @pytest.mark.fiveg_band class TestWifiCapacityBRIDGEMode5G(object): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa_personal and fiveg" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa_personal and fiveg" """ @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3652", name="WIFI-3652") @@ -196,8 +196,8 @@ class TestWifiCapacityBRIDGEMode5G(object): def test_client_wpa_BRIDGE_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa_personal and fiveg and tcp_download" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa_personal and fiveg and tcp_download" """ profile_data = {"ssid_name": "ssid_wpa_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -217,8 +217,8 @@ class TestWifiCapacityBRIDGEMode5G(object): def test_client_wpa_BRIDGE_udp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa_personal and fiveg and udp_download" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa_personal and fiveg and udp_download" """ profile_data = {"ssid_name": "ssid_wpa_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -237,8 +237,8 @@ class TestWifiCapacityBRIDGEMode5G(object): def test_client_wpa_BRIDGE_tcp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa_personal and fiveg and tcp_bidirectional" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa_personal and fiveg and tcp_bidirectional" """ profile_data = {"ssid_name": "ssid_wpa_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -257,8 +257,8 @@ class TestWifiCapacityBRIDGEMode5G(object): def test_client_wpa_BRIDGE_udp_bidirectional(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa_personal and fiveg and udp_bidirectional" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa_personal and fiveg and udp_bidirectional" """ profile_data = {"ssid_name": "ssid_wpa_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -276,8 +276,8 @@ class TestWifiCapacityBRIDGEMode5G(object): def test_client_wpa_bridge_udp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa_personal and fiveg and udp_upload" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa_personal and fiveg and udp_upload" """ profile_data = {"ssid_name": "ssid_wpa_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] @@ -295,8 +295,8 @@ class TestWifiCapacityBRIDGEMode5G(object): def test_client_wpa_bridge_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration, max_stations): - """ Client Scale Test BRIDGE mode - pytest -m "client_scale_tests and bridge and wpa_personal and fiveg and tcp_upload" + """ AX Client Scale Test BRIDGE mode + pytest -m "ax_client_scale_tests and bridge and wpa_personal and fiveg and tcp_upload" """ profile_data = {"ssid_name": "ssid_wpa_5g", "appliedRadios": ["5G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] diff --git a/tests/e2e/basic/performance_tests/be_client_scale_test/__init__.py b/tests/e2e/basic/performance_tests/be_client_scale_test/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/e2e/basic/performance_tests/be_client_scale_test/wpa2_personal/__init__.py b/tests/e2e/basic/performance_tests/be_client_scale_test/wpa2_personal/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/e2e/basic/performance_tests/be_client_scale_test/wpa2_personal/test_bridge_mode.py b/tests/e2e/basic/performance_tests/be_client_scale_test/wpa2_personal/test_bridge_mode.py new file mode 100644 index 000000000..a7ebd8281 --- /dev/null +++ b/tests/e2e/basic/performance_tests/be_client_scale_test/wpa2_personal/test_bridge_mode.py @@ -0,0 +1,450 @@ +""" + + Performance Test: BE Client Scale Test : BRIDGE Mode + pytest -m "be_client_scale_tests and BRIDGE" + +""" +import logging +import allure +import pytest + +pytestmark = [pytest.mark.bridge, pytest.mark.be_client_scale_tests] + +setup_params_general_2G = { + "mode": "BRIDGE", + "ssid_modes": { + "wpa2_personal": [ + {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} + ] + }, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "EHT", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "EHT", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 320, + "channel-mode": "EHT", + "channel": 33 + } + }, + "radius": False +} + + +@allure.feature("BE Client Scale Tests") +@allure.parent_suite("BE Client Scale Tests") +@allure.suite(suite_name="WPA2 Personal Security") +@allure.sub_suite(sub_suite_name="BRIDGE Mode") +@pytest.mark.parametrize( + 'setup_configuration', + [setup_params_general_2G], + indirect=True, + scope="class" +) +@pytest.mark.usefixtures("setup_configuration") +@pytest.mark.wpa2_personal +@pytest.mark.twog +@pytest.mark.twog_band +@pytest.mark.performance +class TestWifiCapacityBRIDGEMode2G(object): + """ BE Client Scale Test BRIDGE mode + pytest -m "be_client_scale_tests and bridge and wpa2_personal and twog" + """ + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14447", name="WIFI-14447") + @pytest.mark.wpa2_personal + @pytest.mark.tcp_download + @allure.title("Test for TCP Download 2.4 GHz") + def test_be_client_wpa2_BRIDGE_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, get_lab_info, + get_test_device_logs, num_stations, setup_configuration, max_stations, selected_testbed): + """ BE Client Scale Test BRIDGE mode + pytest -m "be_client_scale_tests and bridge and wpa2_personal and twog and tcp_download" + """ + profile_data = {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "BRIDGE" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_BRIDGE_tcp_dl", mode=mode, + download_rate="1Gbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="0Gbps", protocol="TCP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"2G": max_stations}, is_wifi7=True) + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14447", name="WIFI-14447") + @pytest.mark.wpa2_personal + @pytest.mark.udp_download + @allure.title("Test for UDP Download 2.4 GHz") + def test_be_client_wpa2_BRIDGE_udp_dl(self, get_test_library, get_dut_logs_per_test_case, get_lab_info, + get_test_device_logs, num_stations, setup_configuration, max_stations, selected_testbed): + """ BE Client Scale Test BRIDGE mode + pytest -m "be_client_scale_tests and bridge and wpa2_personal and twog and udp_download" + """ + profile_data = {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "BRIDGE" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_BRIDGE_udp_dl", mode=mode, + download_rate="1Gbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="56Kbps", protocol="UDP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"2G": max_stations}, is_wifi7=True) + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14447", name="WIFI-14447") + @pytest.mark.wpa2_personal + @pytest.mark.tcp_upload + @allure.title("Test for TCP Upload 2.4 GHz") + def test_be_client_wpa2_bridge_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, get_lab_info, + get_test_device_logs, num_stations, setup_configuration, + max_stations, selected_testbed): + """ BE Client Scale Test BRIDGE mode + pytest -m "be_client_scale_tests and bridge and wpa2_personal and twog and tcp_upload" + """ + profile_data = {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "BRIDGE" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_BRIDGE_tcp_ul", mode=mode, + download_rate="100Kbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="1Gbps", protocol="TCP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"2G": max_stations}, is_wifi7=True) + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14447", name="WIFI-14447") + @pytest.mark.wpa2_personal + @pytest.mark.udp_upload + @allure.title("Test for UDP Upload 2.4 GHz") + def test_be_client_wpa2_bridge_udp_ul(self, get_test_library, get_dut_logs_per_test_case, get_lab_info, + get_test_device_logs, num_stations, setup_configuration, + max_stations, selected_testbed): + """ BE Client Scale Test BRIDGE mode + pytest -m "be_client_scale_tests and bridge and wpa2_personal and twog and udp_upload" + """ + profile_data = {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "BRIDGE" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_BRIDGE_udp_ul", mode=mode, + download_rate="100Kbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="1Gbps", protocol="UDP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"2G": max_stations}, is_wifi7=True) + assert True + + +setup_params_general_5G = { + "mode": "BRIDGE", + "ssid_modes": { + "wpa2_personal": [ + {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} + ] + }, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "EHT", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "EHT", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 320, + "channel-mode": "EHT", + "channel": 33 + } + }, + "radius": False +} + + +@allure.feature("BE Client Scale Tests") +@allure.parent_suite("BE Client Scale Tests") +@allure.suite(suite_name="WPA2 Personal Security") +@allure.sub_suite(sub_suite_name="BRIDGE Mode") +@pytest.mark.parametrize( + 'setup_configuration', + [setup_params_general_5G], + indirect=True, + scope="class" +) +@pytest.mark.usefixtures("setup_configuration") +@pytest.mark.wpa2_personal +@pytest.mark.fiveg +@pytest.mark.fiveg_band +@pytest.mark.performance +class TestWifiCapacityBRIDGEMode5G(object): + """ BE Client Scale Test BRIDGE mode + pytest -m "be_client_scale_tests and bridge and wpa2_personal and fiveg" + """ + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14447", name="WIFI-14447") + @pytest.mark.wpa2_personal + @pytest.mark.tcp_download + @allure.title("Test for TCP Download 5 GHz") + def test_be_client_wpa2_BRIDGE_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test BRIDGE mode + pytest -m "be_client_scale_tests and bridge and wpa2_personal and fiveg and tcp_download" + """ + profile_data = {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "BRIDGE" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_BRIDGE_tcp_dl", mode=mode, + download_rate="1Gbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="0Gbps", protocol="TCP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"5G": max_stations}, is_wifi7=True) + + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14447", name="WIFI-14447") + @pytest.mark.wpa2_personal + @pytest.mark.udp_download + @allure.title("Test for UDP Download 5 GHz") + def test_be_client_wpa2_BRIDGE_udp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test BRIDGE mode + pytest -m "be_client_scale_tests and bridge and wpa2_personal and fiveg and udp_download" + """ + profile_data = {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "BRIDGE" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_BRIDGE_udp_dl", mode=mode, + download_rate="1Gbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="56Kbps", protocol="UDP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"5G": max_stations}, is_wifi7=True) + assert True + + @pytest.mark.udp_upload + @pytest.mark.wpa2_personal + @allure.title("Test for UDP Upload 5 GHz") + def test_be_client_wpa2_bridge_udp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test BRIDGE mode + pytest -m "be_client_scale_tests and bridge and wpa2_personal and fiveg and udp_upload" + """ + profile_data = {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "BRIDGE" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_BRIDGE_udp_ul", mode=mode, + download_rate="100Kbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="1Gbps", protocol="UDP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"5G": max_stations}, is_wifi7=True) + assert True + + @pytest.mark.tcp_upload + @pytest.mark.wpa2_personal + @allure.title("Test for TCP Upload 5 GHz") + def test_be_client_wpa2_bridge_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test BRIDGE mode + pytest -m "be_client_scale_tests and bridge and wpa2_personal and fiveg and tcp_upload" + """ + profile_data = {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "BRIDGE" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_BRIDGE_tcp_ul", mode=mode, + download_rate="100Kbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="1Gbps", protocol="TCP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"5G": max_stations}, is_wifi7=True) + assert True + + +setup_params_general_dual = { + "mode": "BRIDGE", + "ssid_modes": { + "wpa2_personal": [ + {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} + ] + }, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "EHT", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "EHT", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 320, + "channel-mode": "EHT", + "channel": 33 + } + }, + "radius": False +} + + +@allure.feature("BE Client Scale Tests") +@allure.parent_suite("BE Client Scale Tests") +@allure.suite(suite_name="WPA2 Personal Security") +@allure.sub_suite(sub_suite_name="BRIDGE Mode") +@pytest.mark.parametrize( + 'setup_configuration', + [setup_params_general_dual], + indirect=True, + scope="class" +) +@pytest.mark.usefixtures("setup_configuration") +@pytest.mark.wpa2_personal +@pytest.mark.twog +@pytest.mark.fiveg +@pytest.mark.dual_band +@pytest.mark.twog_band +class TestWifiCapacityBRIDGEModeDual(object): + """ BE Client Scale Test BRIDGE mode + pytest -m "be_client_scale_tests and bridge and wpa2_personal and dual_band" + """ + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14447", name="WIFI-14447") + @pytest.mark.wpa2_personal + @pytest.mark.tcp_download + @allure.title("Test for TCP Download 2.4 GHz and 5 GHz") + def test_be_client_wpa2_BRIDGE_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test BRIDGE mode + pytest -m "be_client_scale_tests and bridge and wpa2_personal and dual_band and tcp_download" + """ + profile_data = {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "BRIDGE" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_BRIDGE_tcp_dl", mode=mode, + download_rate="1Gbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="0Gbps", protocol="TCP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"2G": max_stations, "5G": max_stations}, is_wifi7=True) + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3927", name="WIFI-3927") + @pytest.mark.wpa2_personal + @pytest.mark.udp_download + @allure.title("Test for UDP Download 2.4 GHz and 5 GHz") + def test_be_client_wpa2_BRIDGE_udp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test BRIDGE mode + pytest -m "be_client_scale_tests and bridge and wpa2_personal and dual_band and udp_download" + """ + profile_data = {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "BRIDGE" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_BRIDGE_udp_dl", mode=mode, + download_rate="1Gbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="56Kbps", protocol="UDP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"2G": max_stations, "5G": max_stations}, is_wifi7=True) + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14447", name="WIFI-14447") + @pytest.mark.wpa2_personal + @pytest.mark.tcp_upload + @allure.title("Test for TCP Upload 2.4 GHz and 5 GHz") + def test_be_client_wpa2_bridge_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test BRIDGE mode + pytest -m "be_client_scale_tests and bridge and wpa2_personal and dual_band and tcp_upload" + """ + profile_data = {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "BRIDGE" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_BRIDGE_tcp_ul", mode=mode, + download_rate="100Kbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="1Gbps", protocol="TCP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"2G": max_stations, "5G": max_stations}, is_wifi7=True) + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14447", name="WIFI-14447") + @pytest.mark.wpa2_personal + @pytest.mark.udp_upload + @allure.title("Test for UDP Upload 2.4 GHz and 5 GHz") + def test_be_client_wpa2_bridge_udp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test BRIDGE mode + pytest -m "be_client_scale_tests and bridge and wpa2_personal and dual_band and udp_upload" + """ + profile_data = {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "BRIDGE" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_BRIDGE_udp_ul", mode=mode, + download_rate="100Kbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="1Gbps", protocol="UDP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"2G": max_stations, "5G": max_stations}, is_wifi7=True) + assert True diff --git a/tests/e2e/basic/performance_tests/be_client_scale_test/wpa2_personal/test_nat_mode.py b/tests/e2e/basic/performance_tests/be_client_scale_test/wpa2_personal/test_nat_mode.py new file mode 100644 index 000000000..306973659 --- /dev/null +++ b/tests/e2e/basic/performance_tests/be_client_scale_test/wpa2_personal/test_nat_mode.py @@ -0,0 +1,450 @@ +""" + + Performance Test: BE Client Scale Test : NAT Mode + pytest -m "be_client_scale_tests and nat" + +""" +import logging +import allure +import pytest + +pytestmark = [pytest.mark.nat, pytest.mark.be_client_scale_tests] + +setup_params_general_2G = { + "mode": "NAT", + "ssid_modes": { + "wpa2_personal": [ + {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} + ] + }, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "EHT", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "EHT", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 320, + "channel-mode": "EHT", + "channel": 33 + } + }, + "radius": False +} + + +@allure.feature("BE Client Scale Tests") +@allure.parent_suite("BE Client Scale Tests") +@allure.suite(suite_name="WPA2 Personal Security") +@allure.sub_suite(sub_suite_name="NAT Mode") +@pytest.mark.parametrize( + 'setup_configuration', + [setup_params_general_2G], + indirect=True, + scope="class" +) +@pytest.mark.usefixtures("setup_configuration") +@pytest.mark.wpa2_personal +@pytest.mark.twog +@pytest.mark.twog_band +@pytest.mark.performance +class TestWifiCapacityNATMode2G(object): + """ BE Client Scale Test NAT mode + pytest -m "be_client_scale_tests and nat and wpa2_personal and twog" + """ + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14447", name="WIFI-14447") + @pytest.mark.wpa2_personal + @pytest.mark.tcp_download + @allure.title("Test for TCP Download 2.4 GHz") + def test_BE_client_wpa2_NAT_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test NAT mode + pytest -m "be_client_scale_tests and nat and wpa2_personal and twog and tcp_download" + """ + profile_data = {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "NAT-WAN" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_NAT_tcp_dl", mode=mode, + download_rate="1Gbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="56Kbps", protocol="TCP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"2G": max_stations}, is_wifi7=True) + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14447", name="WIFI-14447") + @pytest.mark.wpa2_personal + @pytest.mark.udp_download + @allure.title("Test for UDP Download 2.4 GHz") + def test_be_client_wpa2_NAT_udp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test NAT mode + pytest -m "be_client_scale_tests and nat and wpa2_personal and twog and udp_download" + """ + profile_data = {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "NAT-WAN" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_NAT_udp_dl", mode=mode, + download_rate="1Gbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="56Kbps", protocol="UDP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"2G": max_stations}, is_wifi7=True) + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14447", name="WIFI-14447") + @pytest.mark.wpa2_personal + @pytest.mark.tcp_upload + @allure.title("Test for TCP Upload 2.4 GHz") + def test_be_client_wpa2_NAT_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test NAT mode + pytest -m "be_client_scale_tests and nat and wpa2_personal and twog and tcp_upload" + """ + profile_data = {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "NAT-WAN" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_NAT_tcp_ul", mode=mode, + download_rate="100Kbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="1Gbps", protocol="TCP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"2G": max_stations}, is_wifi7=True) + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14447", name="WIFI-14447") + @pytest.mark.wpa2_personal + @pytest.mark.udp_upload + @allure.title("Test for UDP Upload 2.4 GHz") + def test_be_client_wpa2_NAT_udp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test NAT mode + pytest -m "be_client_scale_tests and nat and wpa2_personal and twog and udp_upload" + """ + profile_data = {"ssid_name": "ssid_wpa2_2g", "appliedRadios": ["2G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "NAT-WAN" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_NAT_udp_ul", mode=mode, + download_rate="100Kbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="1Gbps", protocol="UDP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"2G": max_stations}, is_wifi7=True) + assert True + + +setup_params_general_5G = { + "mode": "NAT", + "ssid_modes": { + "wpa2_personal": [ + {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} + ] + }, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "EHT", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "EHT", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 320, + "channel-mode": "EHT", + "channel": 33 + } + }, + "radius": False +} + + +@allure.feature("BE Client Scale Tests") +@allure.parent_suite("BE Client Scale Tests") +@allure.suite(suite_name="WPA2 Personal Security") +@allure.sub_suite(sub_suite_name="NAT Mode") +@pytest.mark.parametrize( + 'setup_configuration', + [setup_params_general_5G], + indirect=True, + scope="class" +) +@pytest.mark.usefixtures("setup_configuration") +@pytest.mark.wpa2_personal +@pytest.mark.fiveg +@pytest.mark.fiveg_band +@pytest.mark.performance +class TestWifiCapacityNATMode5G(object): + """ BE Client Scale Test NAT mode + pytest -m "be_client_scale_tests and nat and wpa2_personal and fiveg" + """ + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14447", name="WIFI-14447") + @pytest.mark.wpa2_personal + @pytest.mark.tcp_download + @allure.title("Test for TCP Download 5 GHz") + def test_be_client_wpa2_NAT_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test NAT mode + pytest -m "be_client_scale_tests and nat and wpa2_personal and fiveg and tcp_download" + """ + profile_data = {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "NAT-WAN" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_NAT_tcp_dl", mode=mode, + download_rate="1Gbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="56Kbps", protocol="TCP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"5G": max_stations}, is_wifi7=True) + + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14447", name="WIFI-14447") + @pytest.mark.wpa2_personal + @pytest.mark.udp_download + @allure.title("Test for UDP Download 5 GHz") + def test_be_client_wpa2_NAT_udp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test NAT mode + pytest -m "be_client_scale_tests and nat and wpa2_personal and fiveg and udp_download" + """ + profile_data = {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "NAT-WAN" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_NAT_udp_dl", mode=mode, + download_rate="1Gbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="56Kbps", protocol="UDP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"5G": max_stations}, is_wifi7=True) + assert True + + @pytest.mark.udp_upload + @pytest.mark.wpa2_personal + @allure.title("Test for UDP Upload 5 GHz") + def test_be_client_wpa2_NAT_udp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test NAT mode + pytest -m "be_client_scale_tests and nat and wpa2_personal and fiveg and udp_upload" + """ + profile_data = {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "NAT-WAN" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_NAT_udp_ul", mode=mode, + download_rate="100Kbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="1Gbps", protocol="UDP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"5G": max_stations}, is_wifi7=True) + assert True + + @pytest.mark.tcp_upload + @pytest.mark.wpa2_personal + @allure.title("Test for TCP Upload 5 GHz") + def test_be_client_wpa2_NAT_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test NAT mode + pytest -m "be_client_scale_tests and nat and wpa2_personal and fiveg and tcp_upload" + """ + profile_data = {"ssid_name": "ssid_wpa2_5g", "appliedRadios": ["5G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "NAT-WAN" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_NAT_tcp_ul", mode=mode, + download_rate="100Kbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="1Gbps", protocol="TCP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"5G": max_stations}, is_wifi7=True) + assert True + + +setup_params_general_dual = { + "mode": "NAT", + "ssid_modes": { + "wpa2_personal": [ + {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} + ] + }, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "EHT", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "EHT", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 320, + "channel-mode": "EHT", + "channel": 33 + } + }, + "radius": False +} + + +@allure.feature("BE Client Scale Tests") +@allure.parent_suite("BE Client Scale Tests") +@allure.suite(suite_name="WPA2 Personal Security") +@allure.sub_suite(sub_suite_name="NAT Mode") +@pytest.mark.parametrize( + 'setup_configuration', + [setup_params_general_dual], + indirect=True, + scope="class" +) +@pytest.mark.usefixtures("setup_configuration") +@pytest.mark.wpa2_personal +@pytest.mark.twog +@pytest.mark.fiveg +@pytest.mark.dual_band +@pytest.mark.twog_band +class TestWifiCapacityNATModeDual(object): + """ BE Client Scale Test NAT mode + pytest -m "be_client_scale_tests and nat and wpa2_personal and dual_band" + """ + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14447", name="WIFI-14447") + @pytest.mark.wpa2_personal + @pytest.mark.tcp_download + @allure.title("Test for TCP Download 2.4 GHz and 5 GHz") + def test_be_client_wpa2_NAT_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test NAT mode + pytest -m "be_client_scale_tests and nat and wpa2_personal and dual_band and tcp_download" + """ + profile_data = {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "NAT-WAN" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_NAT_tcp_dl", mode=mode, + download_rate="1Gbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="56Kbps", protocol="TCP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"2G": max_stations, "5G": max_stations}, is_wifi7=True) + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14447", name="WIFI-14447") + @pytest.mark.wpa2_personal + @pytest.mark.udp_download + @allure.title("Test for UDP Download 2.4 GHz and 5 GHz") + def test_be_client_wpa2_NAT_udp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test NAT mode + pytest -m "be_client_scale_tests and nat and wpa2_personal and dual_band and udp_download" + """ + profile_data = {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "NAT-WAN" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_NAT_udp_dl", mode=mode, + download_rate="1Gbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="56Kbps", protocol="UDP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"2G": max_stations, "5G": max_stations}, is_wifi7=True) + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14447", name="WIFI-14447") + @pytest.mark.wpa2_personal + @pytest.mark.tcp_upload + @allure.title("Test for TCP Upload 2.4 GHz and 5 GHz") + def test_be_client_wpa2_NAT_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test NAT mode + pytest -m "be_client_scale_tests and nat and wpa2_personal and dual_band and tcp_upload" + """ + profile_data = {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "NAT-WAN" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_NAT_tcp_ul", mode=mode, + download_rate="100Kbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="1Gbps", protocol="TCP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"2G": max_stations, "5G": max_stations}, is_wifi7=True) + assert True + + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14447", name="WIFI-14447") + @pytest.mark.wpa2_personal + @pytest.mark.udp_upload + @allure.title("Test for UDP Upload 2.4 GHz and 5 GHz") + def test_be_client_wpa2_NAT_udp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, + max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test NAT mode + pytest -m "be_client_scale_tests and nat and wpa2_personal and dual_band and udp_upload" + """ + profile_data = {"ssid_name": "ssid_wpa2_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "NAT-WAN" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa2_NAT_udp_ul", mode=mode, + download_rate="100Kbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="1Gbps", protocol="UDP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"2G": max_stations, "5G": max_stations}, is_wifi7=True) + assert True diff --git a/tests/e2e/basic/performance_tests/be_client_scale_test/wpa3_personal/__init__.py b/tests/e2e/basic/performance_tests/be_client_scale_test/wpa3_personal/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/tests/e2e/basic/performance_tests/be_client_scale_test/wpa3_personal/test_bridge_mode.py b/tests/e2e/basic/performance_tests/be_client_scale_test/wpa3_personal/test_bridge_mode.py new file mode 100644 index 000000000..a3fcd3a37 --- /dev/null +++ b/tests/e2e/basic/performance_tests/be_client_scale_test/wpa3_personal/test_bridge_mode.py @@ -0,0 +1,156 @@ +""" + + Performance Test: BE Client Scale Test : BRIDGE Mode + pytest -m "be_client_scale_tests and bridge" + +""" +import logging +import os +import pytest +import allure + +pytestmark = [pytest.mark.bridge, pytest.mark.be_client_scale_tests] + +setup_params_general_6G = { + "mode": "BRIDGE", + "ssid_modes": { + "wpa3_personal": [ + {"ssid_name": "ssid_wpa3_2g", "appliedRadios": ["2G"], "security_key": "something"}, + {"ssid_name": "ssid_wpa3_6g", "appliedRadios": ["6G"], "security_key": "something"} + ] + }, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "EHT", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "EHT", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 320, + "channel-mode": "EHT", + "channel": 33 + } + }, + "radius": False +} + + +@allure.feature("BE Client Scale Tests") +@allure.parent_suite("BE Client Scale Tests") +@allure.suite(suite_name="WPA3 Personal Security") +@allure.sub_suite(sub_suite_name="BRIDGE Mode") +@pytest.mark.parametrize( + 'setup_configuration', + [setup_params_general_6G], + indirect=True, + scope="class" +) +@pytest.mark.usefixtures("setup_configuration") +@pytest.mark.wpa3_personal +@pytest.mark.twog +@pytest.mark.performance +class TestWifiCapacityBRIDGEMode6G(object): + """ BE Client Scale Test BRIDGE mode + be_client_scale_tests and bridge and wpa3_personal and sixg" + """ + + @pytest.mark.wpa3_personal + @pytest.mark.tcp_download + @pytest.mark.sixg + @allure.title("Test for TCP Download 6 GHz") + def test_be_client_wpa3_bridge_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test BRIDGE mode + pytest -m "be_client_scale_tests and bridge and wpa3_personal and sixg and tcp_download" + """ + profile_data = {"ssid_name": "ssid_wpa3_6g", "appliedRadios": ["6G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "BRIDGE" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa3_BRIDGE_tcp_dl", mode=mode, + download_rate="10Gbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="0Gbps", protocol="TCP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"6G": max_stations}, is_wifi7=True, is_bw320=True) + assert True + + # @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3659", name="WIFI-3659") + @pytest.mark.wpa3_personal + @pytest.mark.udp_download + @pytest.mark.sixg + @allure.title("Test for UDP Download 6 GHz") + def test_be_client_wpa3_bridge_udp_dl(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test BRIDGE mode + pytest -m "be_client_scale_tests and bridge and wpa3_personal and sixg and udp_download" + """ + profile_data = {"ssid_name": "ssid_wpa3_6g", "appliedRadios": ["6G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "BRIDGE" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa3_BRIDGE_udp_dl", mode=mode, + download_rate="10Gbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="56Kbps", protocol="UDP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"6G": max_stations}, is_wifi7=True, is_bw320=True) + assert True + + @pytest.mark.wpa3_personal + @pytest.mark.tcp_upload + @pytest.mark.sixg + @allure.title("Test for TCP Upload 6 GHz") + def test_be_client_wpa3_bridge_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test BRIDGE mode + pytest -m "be_client_scale_tests and bridge and wpa3_personal and sixg and tcp_upload" + """ + profile_data = {"ssid_name": "ssid_wpa3_6g", "appliedRadios": ["6G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "BRIDGE" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa3_BRIDGE_tcp_ul", mode=mode, + download_rate="100Kbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="10Gbps", protocol="TCP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"6G": max_stations}, is_wifi7=True, is_bw320=True) + assert True + + @pytest.mark.wpa3_personal + @pytest.mark.udp_upload + @pytest.mark.sixg + @allure.title("Test for UDP Upload 6 GHz") + def test_be_client_wpa3_bridge_udp_ul(self, get_test_library, get_dut_logs_per_test_case, + get_test_device_logs, num_stations, setup_configuration, max_stations, get_lab_info, selected_testbed): + """ BE Client Scale Test BRIDGE mode + pytest -m "be_client_scale_tests and bridge and wpa3_personal and sixg and udp_upload" + """ + profile_data = {"ssid_name": "ssid_wpa3_6g", "appliedRadios": ["6G"], "security_key": "something"} + ssid_name = profile_data["ssid_name"] + mode = "BRIDGE" + dut_mode = get_lab_info.CONFIGURATION[selected_testbed]["device_under_tests"][0]["mode"] + if dut_mode.lower() == "wifi6": + logging.info("AP does not support BE mode, so skipping this test.") + pytest.skip("AP does not support BE mode, so skipping this test") + get_test_library.wifi_capacity(instance_name="test_be_client_wpa3_BRIDGE_udp_ul", mode=mode, + download_rate="100Kbps", batch_size="1,5,10,20,40,64,128,256", + upload_rate="10Gbps", protocol="UDP", duration="60000", + move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, + num_stations={"6G": max_stations}, is_wifi7=True, is_bw320=True) + assert True diff --git a/tests/e2e/basic/performance_tests/dataplane_throughput_test/wpa2_security/test_bridge_mode.py b/tests/e2e/basic/performance_tests/dataplane_throughput_test/wpa2_security/test_bridge_mode.py index 65815032a..d9b4ed799 100644 --- a/tests/e2e/basic/performance_tests/dataplane_throughput_test/wpa2_security/test_bridge_mode.py +++ b/tests/e2e/basic/performance_tests/dataplane_throughput_test/wpa2_security/test_bridge_mode.py @@ -4,6 +4,7 @@ pytest -m "dataplane_tests wpa2_personal security and bridge" """ +import logging import os import pytest import allure @@ -11,28 +12,146 @@ import allure pytestmark = [pytest.mark.dataplane_tests, pytest.mark.bridge, pytest.mark.wpa2_personal, pytest.mark.performance] -setup_params_general = { +setup_params_general1 = { "mode": "BRIDGE", "ssid_modes": { "wpa2_personal": [ {"ssid_name": "wpa2_personal_dataplane_2g", "appliedRadios": ["2G"], "security_key": "something"}, {"ssid_name": "wpa2_personal_dataplane_5g", "appliedRadios": ["5G"], "security_key": "something"}]}, - "rf": {}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 20, + "channel-mode": "HE", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "HE", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 + } + }, + "radius": False +}, +setup_params_general2 = { + "mode": "BRIDGE", + "ssid_modes": { + "wpa2_personal": [ + {"ssid_name": "wpa2_personal_dataplane_2g", "appliedRadios": ["2G"], "security_key": "something"}, + {"ssid_name": "wpa2_personal_dataplane_5g", "appliedRadios": ["5G"], "security_key": "something"}, + {"ssid_name": "wpa2_personal_dataplane_6g", "appliedRadios": ["6G"], "security_key": "something"}]}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "HE", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "HE", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 + } + }, + "radius": False +}, +setup_params_general3 = { + "mode": "BRIDGE", + "ssid_modes": { + "wpa2_personal": [ + {"ssid_name": "wpa2_personal_dataplane_2g", "appliedRadios": ["2G"], "security_key": "something"}, + {"ssid_name": "wpa2_personal_dataplane_5g", "appliedRadios": ["5G"], "security_key": "something"}, + {"ssid_name": "wpa2_personal_dataplane_6g", "appliedRadios": ["6G"], "security_key": "something"}]}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "EHT", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "EHT", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 320, + "channel-mode": "EHT", + "channel": 33 + } + }, "radius": False } +testbed_details_global = None +setup_params_general = None +dut_data = {} + +@pytest.fixture(scope="class") +def initialize_testbed(request): + """Calls setup_testbed automatically before tests""" + global testbed_details_global + global setup_params_general + global dut_data + selected_tb = request.getfixturevalue("selected_testbed") + print(f"Selected Testbed: {selected_tb}") + testbed_details_global = request.getfixturevalue("get_testbed_details") + assert testbed_details_global is not None, "Testbed details should not be None" + print(f"Initialized Testbed Details: {testbed_details_global}") + + # Extract 'mode' from the first device in 'device_under_tests' + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + + # Assign setup_params_general based on mode + if ap_mode == "wifi6": + setup_params_general = setup_params_general1 + elif ap_mode == "wifi6e": + setup_params_general = setup_params_general2 + elif ap_mode == "wifi7": + setup_params_general = setup_params_general3 + else: + print(f"Unknown mode: {ap_mode}. Defaulting to None") + + print(f"Setup Params Assigned: {setup_params_general}") + + get_marker = request.getfixturevalue("get_markers") + logging.info(f"get_marker result:{get_marker}") + requested_combination = [] + for key in get_marker: + if get_marker[key]: + requested_combination.append(get_marker[key]) + + logging.info(f"requested_combination:::{requested_combination}") + get_target_obj = request.getfixturevalue("get_target_object") + logging.info("ready to start setup_basic_configuration") + logging.info(f"setup_params_general value before start:{setup_params_general}") + if isinstance(setup_params_general, tuple): + setup_params_general = setup_params_general[0] + dut_data = get_target_obj.setup_basic_configuration(configuration=setup_params_general, + requested_combination=requested_combination) + + logging.info(f"setup_basic_configuration dut data:{dut_data}") @allure.feature("Dataplane Tests") @allure.parent_suite("Dataplane Tests") @allure.suite(suite_name="WPA2 Personal Security") @allure.sub_suite(sub_suite_name="BRIDGE Mode") -@pytest.mark.parametrize( - 'setup_configuration', - [setup_params_general], - indirect=True, - scope="class" -) -@pytest.mark.usefixtures("setup_configuration") class TestDataplaneThroughputBRIDGE(object): """Dataplane THroughput BRIDGE Mode pytest -m "dataplane_tests and wpa2_personal and bridge" @@ -45,7 +164,7 @@ class TestDataplaneThroughputBRIDGE(object): def test_tcp_upd_wpa2_personal_bridge_2g_band(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, client_type, get_target_object, - num_stations, setup_configuration): + num_stations, initialize_testbed): """Dataplane THroughput BRIDGE Mode. pytest -m "dataplane_tests and bridge and wpa2_personal and twog" """ @@ -55,14 +174,17 @@ class TestDataplaneThroughputBRIDGE(object): security = "wpa2" mode = "BRIDGE" band = "twog" + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + logging.info(f"ap_mode value:{ap_mode}") influx_tags = "dataplane-tcp-udp-bridge-wpa2_personal-2.4G" get_test_library.dataplane_throughput_test(ssid=ssid_name, passkey=security_key, security=security, num_sta=1, mode=mode, band=band, instance_name="TIP_DPT_DPT_WPA2_2G_BRIDGE", influx_tags=influx_tags, move_to_influx=False, - dut_data=setup_configuration, - client_type=client_type + dut_data=dut_data, + client_type=client_type, duration="30s", path_loss=10, + download_rate="85%", upload_rate="0", ap_mode =ap_mode ) @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3674", name="WIFI-3674") @@ -72,7 +194,7 @@ class TestDataplaneThroughputBRIDGE(object): def test_tcp_upd_wpa2_personal_bridge_5g_band(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, client_type, get_target_object, - num_stations, setup_configuration): + num_stations, initialize_testbed): """Dataplane THroughput BRIDGE Mode pytest -m "dataplane_tests and bridge and wpa2_personal and fiveg" """ @@ -82,12 +204,15 @@ class TestDataplaneThroughputBRIDGE(object): security_key = profile_data["security_key"] mode = "BRIDGE" band = "fiveg" + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + logging.info(f"ap_mode value:{ap_mode}") influx_tags = "dataplane-tcp-udp-bridge-wpa2_personal-5G" get_test_library.dataplane_throughput_test(ssid=ssid_name, passkey=security_key, security=security, num_sta=1, mode=mode, band=band, instance_name="TIP_DPT_DPT_WPA2_5G_BRIDGE", influx_tags=influx_tags, move_to_influx=False, - dut_data=setup_configuration, - client_type=client_type + dut_data=dut_data, + client_type=client_type, duration="30s", path_loss=10, + download_rate="85%", upload_rate="0", ap_mode =ap_mode ) diff --git a/tests/e2e/basic/performance_tests/dataplane_throughput_test/wpa2_security/test_nat_mode.py b/tests/e2e/basic/performance_tests/dataplane_throughput_test/wpa2_security/test_nat_mode.py index 5f5c0246c..a37f08190 100644 --- a/tests/e2e/basic/performance_tests/dataplane_throughput_test/wpa2_security/test_nat_mode.py +++ b/tests/e2e/basic/performance_tests/dataplane_throughput_test/wpa2_security/test_nat_mode.py @@ -4,6 +4,7 @@ pytest -m "dataplane_tests wpa2_personal security and nat" """ +import logging import os import pytest import allure @@ -11,28 +12,148 @@ import allure pytestmark = [pytest.mark.dataplane_tests, pytest.mark.nat, pytest.mark.wpa2_personal, pytest.mark.performance] -setup_params_general = { +setup_params_general1 = { "mode": "NAT", "ssid_modes": { "wpa2_personal": [ {"ssid_name": "wpa2_personal_dataplane_2g", "appliedRadios": ["2G"], "security_key": "something"}, - {"ssid_name": "wpa2_personal_dataplane_5g", "appliedRadios": ["5G"], "security_key": "something"}]}, - "rf": {}, + {"ssid_name": "wpa2_personal_dataplane_5g", "appliedRadios": ["5G"], "security_key": "something"} + ]}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 20, + "channel-mode": "HE", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "HE", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 + } + }, + "radius": False +}, +setup_params_general2 = { + "mode": "NAT", + "ssid_modes": { + "wpa2_personal": [ + {"ssid_name": "wpa2_personal_dataplane_2g", "appliedRadios": ["2G"], "security_key": "something"}, + {"ssid_name": "wpa2_personal_dataplane_5g", "appliedRadios": ["5G"], "security_key": "something"}, + {"ssid_name": "wpa2_personal_dataplane_6g", "appliedRadios": ["6G"], "security_key": "something"} + ]}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "HE", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "HE", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 + } + }, + "radius": False +}, +setup_params_general3 = { + "mode": "NAT", + "ssid_modes": { + "wpa2_personal": [ + {"ssid_name": "wpa2_personal_dataplane_2g", "appliedRadios": ["2G"], "security_key": "something"}, + {"ssid_name": "wpa2_personal_dataplane_5g", "appliedRadios": ["5G"], "security_key": "something"}, + {"ssid_name": "wpa2_personal_dataplane_6g", "appliedRadios": ["6G"], "security_key": "something"} + ]}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "EHT", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "EHT", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 320, + "channel-mode": "EHT", + "channel": 33 + } + }, "radius": False } +testbed_details_global = None +setup_params_general = None +dut_data = {} + +@pytest.fixture(scope="class") +def initialize_testbed(request): + """Calls setup_testbed automatically before tests""" + global testbed_details_global + global setup_params_general + global dut_data + selected_tb = request.getfixturevalue("selected_testbed") + print(f"Selected Testbed: {selected_tb}") + testbed_details_global = request.getfixturevalue("get_testbed_details") + assert testbed_details_global is not None, "Testbed details should not be None" + print(f"Initialized Testbed Details: {testbed_details_global}") + + # Extract 'mode' from the first device in 'device_under_tests' + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + + # Assign setup_params_general based on mode + if ap_mode == "wifi6": + setup_params_general = setup_params_general1 + elif ap_mode == "wifi6e": + setup_params_general = setup_params_general2 + elif ap_mode == "wifi7": + setup_params_general = setup_params_general3 + else: + print(f"Unknown mode: {ap_mode}. Defaulting to None") + + print(f"Setup Params Assigned: {setup_params_general}") + + get_marker = request.getfixturevalue("get_markers") + requested_combination = [] + for key in get_marker: + if get_marker[key]: + requested_combination.append(get_marker[key]) + + logging.info(f"requested_combination:::{requested_combination}") + get_target_obj = request.getfixturevalue("get_target_object") + logging.info("ready to start setup_basic_configuration") + logging.info(f"setup_params_general value before start:{setup_params_general}") + if isinstance(setup_params_general, tuple): + setup_params_general = setup_params_general[0] + dut_data = get_target_obj.setup_basic_configuration(configuration=setup_params_general, + requested_combination=requested_combination) + + logging.info(f"setup_basic_configuration dut data:{dut_data}") @allure.feature("Dataplane Tests") @allure.parent_suite("Dataplane Tests") @allure.suite(suite_name="WPA2 Personal Security") @allure.sub_suite(sub_suite_name="NAT Mode") -@pytest.mark.parametrize( - 'setup_configuration', - [setup_params_general], - indirect=True, - scope="class" -) -@pytest.mark.usefixtures("setup_configuration") class TestDataplaneThroughputNAT(object): """Dataplane THroughput NAT Mode pytest -m "dataplane_tests and wpa2_personal and nat" @@ -45,7 +166,7 @@ class TestDataplaneThroughputNAT(object): def test_tcp_upd_wpa2_personal_nat_2g_band(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, client_type, get_target_object, - num_stations, setup_configuration): + num_stations, initialize_testbed): """Dataplane THroughput NAT Mode. pytest -m "dataplane_tests and nat and wpa2_personal and twog" """ @@ -55,14 +176,17 @@ class TestDataplaneThroughputNAT(object): security_key = profile_data["security_key"] mode = "NAT-WAN" band = "twog" + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + logging.info(f"ap_mode value:{ap_mode}") influx_tags = "dataplane-tcp-udp-nat-wpa2_personal-2.4G" get_test_library.dataplane_throughput_test(ssid=ssid_name, security=security, passkey=security_key, num_sta=1, mode=mode, band=band, instance_name="TIP_DPT_DPT_WPA2_2G_NAT", influx_tags=influx_tags, move_to_influx=False, - dut_data=setup_configuration, - client_type=client_type + dut_data=dut_data, + client_type=client_type, duration="30s", path_loss=10, + download_rate="85%", upload_rate="0", ap_mode =ap_mode ) @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3674", name="WIFI-3674") @@ -72,7 +196,7 @@ class TestDataplaneThroughputNAT(object): def test_tcp_upd_wpa2_personal_nat_5g_band(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, client_type, get_target_object, - num_stations, setup_configuration): + num_stations, initialize_testbed): """Dataplane THroughput NAT Mode pytest -m "dataplane_tests and nat and wpa2_personal and fiveg" """ @@ -82,12 +206,15 @@ class TestDataplaneThroughputNAT(object): security_key = profile_data["security_key"] mode = "NAT-WAN" band = "fiveg" + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + logging.info(f"ap_mode value:{ap_mode}") influx_tags = "dataplane-tcp-udp-nat-wpa2_personal-5G" get_test_library.dataplane_throughput_test(ssid=ssid_name, security=security, passkey=security_key, num_sta=1, mode=mode, band=band, instance_name="TIP_DPT_DPT_WPA2_5G_NAT", influx_tags=influx_tags, move_to_influx=False, - dut_data=setup_configuration, - client_type=client_type + dut_data=dut_data, + client_type=client_type, duration="30s", path_loss=10, + download_rate="85%", upload_rate="0", ap_mode =ap_mode ) diff --git a/tests/e2e/basic/performance_tests/dataplane_throughput_test/wpa3_security/test_bridge_mode.py b/tests/e2e/basic/performance_tests/dataplane_throughput_test/wpa3_security/test_bridge_mode.py index 05cc260ec..ac9f1e4d4 100644 --- a/tests/e2e/basic/performance_tests/dataplane_throughput_test/wpa3_security/test_bridge_mode.py +++ b/tests/e2e/basic/performance_tests/dataplane_throughput_test/wpa3_security/test_bridge_mode.py @@ -4,6 +4,7 @@ pytest -m "dataplane_tests wpa3_personal security and bridge" """ +import logging import os import pytest import allure @@ -11,7 +12,7 @@ import allure pytestmark = [pytest.mark.dataplane_tests, pytest.mark.bridge, pytest.mark.wpa3_personal] -setup_params_general = { +setup_params_general1 = { "mode": "BRIDGE", "ssid_modes": { "wpa3_personal": [ @@ -19,22 +20,141 @@ setup_params_general = { {"ssid_name": "wpa3_personal_dataplane_5g", "appliedRadios": ["5G"], "security_key": "something"}, {"ssid_name": "wpa3_personal_dataplane_6g", "appliedRadios": ["6G"], "security_key": "something"} ]}, - "rf": {}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 20, + "channel-mode": "HE", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "HE", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 + } + }, + "radius": False +}, +setup_params_general2 = { + "mode": "BRIDGE", + "ssid_modes": { + "wpa3_personal": [ + {"ssid_name": "wpa3_personal_dataplane_2g", "appliedRadios": ["2G"], "security_key": "something"}, + {"ssid_name": "wpa3_personal_dataplane_5g", "appliedRadios": ["5G"], "security_key": "something"}, + {"ssid_name": "wpa3_personal_dataplane_6g", "appliedRadios": ["6G"], "security_key": "something"} + ]}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "HE", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "HE", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 + } + }, + "radius": False +}, +setup_params_general3 = { + "mode": "BRIDGE", + "ssid_modes": { + "wpa3_personal": [ + {"ssid_name": "wpa3_personal_dataplane_2g", "appliedRadios": ["2G"], "security_key": "something"}, + {"ssid_name": "wpa3_personal_dataplane_5g", "appliedRadios": ["5G"], "security_key": "something"}, + {"ssid_name": "wpa3_personal_dataplane_6g", "appliedRadios": ["6G"], "security_key": "something"} + ]}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "EHT", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "EHT", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 320, + "channel-mode": "EHT", + "channel": 33 + } + }, "radius": False } +testbed_details_global = None +setup_params_general = None +dut_data = {} + +@pytest.fixture(scope="class") +def initialize_testbed(request): + """Calls setup_testbed automatically before tests""" + global testbed_details_global + global setup_params_general + global dut_data + selected_tb = request.getfixturevalue("selected_testbed") + print(f"Selected Testbed: {selected_tb}") + testbed_details_global = request.getfixturevalue("get_testbed_details") + assert testbed_details_global is not None, "Testbed details should not be None" + print(f"Initialized Testbed Details: {testbed_details_global}") + + # Extract 'mode' from the first device in 'device_under_tests' + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + + # Assign setup_params_general based on mode + if ap_mode == "wifi6": + setup_params_general = setup_params_general1 + elif ap_mode == "wifi6e": + setup_params_general = setup_params_general2 + elif ap_mode == "wifi7": + setup_params_general = setup_params_general3 + else: + print(f"Unknown mode: {ap_mode}. Defaulting to None") + + print(f"Setup Params Assigned: {setup_params_general}") + + get_marker = request.getfixturevalue("get_markers") + requested_combination = [] + for key in get_marker: + if get_marker[key]: + requested_combination.append(get_marker[key]) + + logging.info(f"requested_combination:::{requested_combination}") + get_target_obj = request.getfixturevalue("get_target_object") + logging.info("ready to start setup_basic_configuration") + logging.info(f"setup_params_general value before start:{setup_params_general}") + if isinstance(setup_params_general, tuple): + setup_params_general = setup_params_general[0] + dut_data = get_target_obj.setup_basic_configuration(configuration=setup_params_general, + requested_combination=requested_combination) + + logging.info(f"setup_basic_configuration dut data:{dut_data}") @allure.feature("Dataplane Tests") @allure.parent_suite("Dataplane Tests") @allure.suite(suite_name="WPA3 Personal Security") @allure.sub_suite(sub_suite_name="BRIDGE Mode") -@pytest.mark.parametrize( - 'setup_configuration', - [setup_params_general], - indirect=True, - scope="class" -) -@pytest.mark.usefixtures("setup_configuration") class TestDataplaneThroughputBRIDGE(object): """Dataplane THroughput BRIDGE Mode pytest -m "dataplane_tests and wpa3_personal and bridge" @@ -102,7 +222,7 @@ class TestDataplaneThroughputBRIDGE(object): def test_tcp_udp_wpa3_personal_bridge_6g_band(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, client_type, get_target_object, - num_stations, setup_configuration): + num_stations, initialize_testbed): """Dataplane THroughput BRIDGE Mode pytest -m "dataplane_tests and bridge and wpa3_personal and sixg" """ @@ -112,12 +232,15 @@ class TestDataplaneThroughputBRIDGE(object): security_key = profile_data["security_key"] mode = "BRIDGE" band = "sixg" + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + logging.info(f"ap_mode value:{ap_mode}") influx_tags = "dataplane-tcp-udp-bridge-wpa3_personal-6G" get_test_library.dataplane_throughput_test(ssid=ssid_name, security=security, passkey=security_key, num_sta=num_stations, mode=mode, band=band, instance_name="TIP_DPT_DPT_WPA_6G_BRIDGE", influx_tags=influx_tags, move_to_influx=False, - dut_data=setup_configuration, - client_type=client_type + dut_data=dut_data, + client_type=client_type, duration="30s", path_loss=10, + download_rate="85%", upload_rate="0", ap_mode =ap_mode ) diff --git a/tests/e2e/basic/performance_tests/dataplane_throughput_test/wpa3_security/test_nat_mode.py b/tests/e2e/basic/performance_tests/dataplane_throughput_test/wpa3_security/test_nat_mode.py index 6545362ba..eb8631f7d 100644 --- a/tests/e2e/basic/performance_tests/dataplane_throughput_test/wpa3_security/test_nat_mode.py +++ b/tests/e2e/basic/performance_tests/dataplane_throughput_test/wpa3_security/test_nat_mode.py @@ -4,6 +4,7 @@ pytest -m "dataplane_tests wpa3_personal security and nat" """ +import logging import os import pytest import allure @@ -11,7 +12,7 @@ import allure pytestmark = [pytest.mark.dataplane_tests, pytest.mark.nat, pytest.mark.wpa3_personal] -setup_params_general = { +setup_params_general1 = { "mode": "NAT", "ssid_modes": { "wpa3_personal": [ @@ -19,22 +20,142 @@ setup_params_general = { {"ssid_name": "wpa3_personal_dataplane_5g", "appliedRadios": ["5G"], "security_key": "something"}, {"ssid_name": "wpa3_personal_dataplane_6g", "appliedRadios": ["6G"], "security_key": "something"} ]}, - "rf": {}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 20, + "channel-mode": "HE", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "HE", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 + } + }, + "radius": False +}, +setup_params_general2 = { + "mode": "NAT", + "ssid_modes": { + "wpa3_personal": [ + {"ssid_name": "wpa3_personal_dataplane_2g", "appliedRadios": ["2G"], "security_key": "something"}, + {"ssid_name": "wpa3_personal_dataplane_5g", "appliedRadios": ["5G"], "security_key": "something"}, + {"ssid_name": "wpa3_personal_dataplane_6g", "appliedRadios": ["6G"], "security_key": "something"} + ]}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "HE", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "HE", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 + } + }, + "radius": False +}, +setup_params_general3 = { + "mode": "NAT", + "ssid_modes": { + "wpa3_personal": [ + {"ssid_name": "wpa3_personal_dataplane_2g", "appliedRadios": ["2G"], "security_key": "something"}, + {"ssid_name": "wpa3_personal_dataplane_5g", "appliedRadios": ["5G"], "security_key": "something"}, + {"ssid_name": "wpa3_personal_dataplane_6g", "appliedRadios": ["6G"], "security_key": "something"} + ]}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "EHT", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "EHT", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 320, + "channel-mode": "EHT", + "channel": 33 + } + }, "radius": False } +testbed_details_global = None +setup_params_general = None +dut_data = {} + +@pytest.fixture(scope="class") +def initialize_testbed(request): + """Calls setup_testbed automatically before tests""" + global testbed_details_global + global setup_params_general + global dut_data + selected_tb = request.getfixturevalue("selected_testbed") + print(f"Selected Testbed: {selected_tb}") + testbed_details_global = request.getfixturevalue("get_testbed_details") + assert testbed_details_global is not None, "Testbed details should not be None" + print(f"Initialized Testbed Details: {testbed_details_global}") + + # Extract 'mode' from the first device in 'device_under_tests' + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + + # Assign setup_params_general based on mode + if ap_mode == "wifi6": + setup_params_general = setup_params_general1 + elif ap_mode == "wifi6e": + setup_params_general = setup_params_general2 + elif ap_mode == "wifi7": + setup_params_general = setup_params_general3 + else: + print(f"Unknown mode: {ap_mode}. Defaulting to None") + + print(f"Setup Params Assigned: {setup_params_general}") + + get_marker = request.getfixturevalue("get_markers") + requested_combination = [] + for key in get_marker: + if get_marker[key]: + requested_combination.append(get_marker[key]) + + logging.info(f"requested_combination:::{requested_combination}") + get_target_obj = request.getfixturevalue("get_target_object") + logging.info("ready to start setup_basic_configuration") + logging.info(f"setup_params_general value before start:{setup_params_general}") + if isinstance(setup_params_general, tuple): + setup_params_general = setup_params_general[0] + dut_data = get_target_obj.setup_basic_configuration(configuration=setup_params_general, + requested_combination=requested_combination) + + logging.info(f"setup_basic_configuration dut data:{dut_data}") + @allure.feature("Dataplane Tests") @allure.parent_suite("Dataplane Tests") @allure.suite(suite_name="WPA3 Personal Security") @allure.sub_suite(sub_suite_name="NAT Mode") -@pytest.mark.parametrize( - 'setup_configuration', - [setup_params_general], - indirect=True, - scope="class" -) -@pytest.mark.usefixtures("setup_configuration") class TestDataplaneThroughputNAT(object): """Dataplane THroughput NAT Mode pytest -m "dataplane_tests and wpa3_personal and nat" @@ -102,7 +223,7 @@ class TestDataplaneThroughputNAT(object): def test_tcp_udp_wpa3_personal_nat_6g_band(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, client_type, get_target_object, - num_stations, setup_configuration): + num_stations, initialize_testbed): """Dataplane THroughput NAT Mode pytest -m "dataplane_tests and nat and wpa3_personal and sixg" """ @@ -112,12 +233,15 @@ class TestDataplaneThroughputNAT(object): security_key = profile_data["security_key"] mode = "NAT-WAN" band = "sixg" + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + logging.info(f"ap_mode value:{ap_mode}") influx_tags = "dataplane-tcp-udp-nat-wpa3_personal-6G" get_test_library.dataplane_throughput_test(ssid=ssid_name, security=security, passkey=security_key, num_sta=1, mode=mode, band=band, instance_name="TIP_DPT_DPT_WPA3_PERSONAL_6G_NAT", influx_tags=influx_tags, move_to_influx=False, - dut_data=setup_configuration, - client_type=client_type + dut_data=dut_data, + client_type=client_type, duration="30s", path_loss=10, + download_rate="85%", upload_rate="0", ap_mode =ap_mode ) diff --git a/tests/e2e/basic/performance_tests/dual_band_performance_test/wap3_personal/test_bridge_mode.py b/tests/e2e/basic/performance_tests/dual_band_performance_test/wap3_personal/test_bridge_mode.py index 60695c8bf..cc55256d7 100644 --- a/tests/e2e/basic/performance_tests/dual_band_performance_test/wap3_personal/test_bridge_mode.py +++ b/tests/e2e/basic/performance_tests/dual_band_performance_test/wap3_personal/test_bridge_mode.py @@ -1,65 +1,193 @@ """ - Dual Band Performance Test : BRIDGE Mode - pytest -m "performance and dual_band_tests and bridge" + Multi Band Performance Test : BRIDGE Mode + pytest -m "performance and multi_band_tests and bridge" """ - +import logging import allure import pytest -pytestmark = [pytest.mark.dual_band_tests, pytest.mark.bridge, - pytest.mark.single_station_dual_band_throughput] +pytestmark = [pytest.mark.performance, pytest.mark.multi_band_tests, pytest.mark.bridge] -setup_params_general = { +setup_params_general1 = { "mode": "BRIDGE", "ssid_modes": { "wpa3_personal": [ - {"ssid_name": "ssid_wpa3_personal_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} + {"ssid_name": "ssid_wpa3_personal_multi_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} ]}, - "rf": {}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 20, + "channel-mode": "HE", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "HE", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 + } + }, + "radius": False +}, +setup_params_general2 = { + "mode": "BRIDGE", + "ssid_modes": { + "wpa3_personal": [ + {"ssid_name": "ssid_wpa3_personal_multi_band", "appliedRadios": ["2G", "5G", "6G"], "security_key": "something"} + ]}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "HE", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "HE", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 + } + }, + "radius": False +}, +setup_params_general3 = { + "mode": "BRIDGE", + "ssid_modes": { + "wpa3_personal": [ + {"ssid_name": "ssid_wpa3_personal_multi_band", "appliedRadios": ["2G", "5G", "6G"], "security_key": "something"} + ]}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "EHT", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "EHT", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 320, + "channel-mode": "EHT", + "channel": 33 + } + }, "radius": False } +testbed_details_global = None +setup_params_general = None +dut_data = {} -@pytest.mark.dual_band_tests +@pytest.fixture(scope="class") +def setup_initial_configuration(request): + """Calls setup_testbed automatically before tests""" + global testbed_details_global + global setup_params_general + global dut_data + selected_tb = request.getfixturevalue("selected_testbed") + print(f"Selected Testbed: {selected_tb}") + testbed_details_global = request.getfixturevalue("get_testbed_details") + assert testbed_details_global is not None, "Testbed details should not be None" + print(f"Initialized Testbed Details: {testbed_details_global}") + + # Extract 'mode' from the first device in 'device_under_tests' + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + + # Assign setup_params_general based on mode + if ap_mode == "wifi6": + setup_params_general = setup_params_general1 + elif ap_mode == "wifi6e": + setup_params_general = setup_params_general2 + elif ap_mode == "wifi7": + setup_params_general = setup_params_general3 + else: + print(f"Unknown mode: {ap_mode}. Defaulting to None") + + print(f"Setup Params Assigned: {setup_params_general}") + + get_marker = request.getfixturevalue("get_markers") + requested_combination = [] + for key in get_marker: + if get_marker[key]: + requested_combination.append(get_marker[key]) + + logging.info(f"requested_combination:::{requested_combination}") + get_target_obj = request.getfixturevalue("get_target_object") + logging.info("ready to start setup_basic_configuration") + logging.info(f"setup_params_general value before start:{setup_params_general}") + if isinstance(setup_params_general, tuple): + setup_params_general = setup_params_general[0] + dut_data = get_target_obj.setup_basic_configuration(configuration=setup_params_general, + requested_combination=requested_combination) + + logging.info(f"setup_basic_configuration dut data:{dut_data}") + +@pytest.mark.multi_band_tests @pytest.mark.wifi5 @pytest.mark.wifi6 -@pytest.mark.parametrize( - 'setup_configuration', - [setup_params_general], - indirect=True, - scope="class" -) -@allure.parent_suite("Dual Band Tests") -@allure.suite("Dual Band Tests: Bridge mode") +@pytest.mark.wifi7 +@allure.parent_suite("Multi Band Tests") +@allure.suite("Multi Band Tests: Bridge mode") @allure.sub_suite("wpa3_personal security") -@allure.feature("Dual band performance test") -@pytest.mark.usefixtures("setup_configuration") -class TestWpa3DualbandPerformanceBridge(object): +@allure.feature("Multi band performance test") +class TestWpa3MultibandPerformanceBridge(object): """ - pytest -m "performance and dual_band_tests and bridge and wpa3_personal and twog and fiveg" + pytest -m "performance and multi_band_tests and bridge and wpa3_personal and twog and fiveg" """ @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3728", name="WIFI-3728") @pytest.mark.wpa3_personal @pytest.mark.twog @pytest.mark.fiveg - @allure.title("Test Dual Band with ApAuto test of bridge mode") - def test_client_wpa3_personal_bridge(self, get_test_library, setup_configuration, check_connectivity): + @pytest.mark.sixg + @allure.title("Test Multi Band with ApAuto test of bridge mode") + def test_client_wpa3_personal_bridge(self, setup_initial_configuration, get_test_library, check_connectivity, + get_dut_logs_per_test_case, get_test_device_logs): """ - Dual Band Test with wpa3_personal encryption - pytest -m "dual_band_tests and wpa3_personal" + Multi Band Test with wpa3_personal encryption + pytest -m "multi_band_tests and wpa3_personal" """ + + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + logging.info(f"setup_params_general data:{setup_params_general}") profile_data = setup_params_general["ssid_modes"]["wpa3_personal"] + logging.info(f"profile_data data:{profile_data}") ssid_2G, ssid_5G = profile_data[0]["ssid_name"], profile_data[0]["ssid_name"] - dut_name = list(setup_configuration.keys())[0] + dut_name = list(dut_data.keys())[0] mode = "BRIDGE" vlan = 1 dut_5g, dut_2g = "", "" + + if ap_mode == "wifi7" or ap_mode == "wifi6e": + dut_6g = "" + ssid_6G = profile_data[0]["ssid_name"] + influx_tags = "dual-band-bridge-wpa3" - for i in setup_configuration[dut_name]['ssid_data']: - get_test_library.dut_idx_mapping[str(i)] = list(setup_configuration[dut_name]['ssid_data'][i].values()) + for i in dut_data[dut_name]['ssid_data']: + logging.info(f"get_test_library.dut_idx_mapping: {get_test_library.dut_idx_mapping}") + logging.info(f"get_test_library.dut_idx_mapping: {get_test_library.dut_idx_mapping}") + get_test_library.dut_idx_mapping[str(i)] = list(dut_data[dut_name]['ssid_data'][i].values()) if get_test_library.dut_idx_mapping[str(i)][3] == "5G": dut_5g = dut_name + ' ' + get_test_library.dut_idx_mapping[str(i)][0] + ' ' + \ get_test_library.dut_idx_mapping[str(i)][4] @@ -67,8 +195,25 @@ class TestWpa3DualbandPerformanceBridge(object): dut_2g = dut_name + ' ' + get_test_library.dut_idx_mapping[str(i)][0] + ' ' + \ get_test_library.dut_idx_mapping[str(i)][4] - get_test_library.dual_band_performance_test(mode=mode, ssid_2G=ssid_2G, ssid_5G=ssid_5G, vlan_id=vlan, - dut_5g=dut_5g, dut_2g=dut_2g, influx_tags=influx_tags, - move_to_influx=False, dut_data=setup_configuration) + if get_test_library.dut_idx_mapping[str(i)][3] == "6G" and (ap_mode == "wifi7" or ap_mode == "wifi6e"): + dut_6g = dut_name + ' ' + get_test_library.dut_idx_mapping[str(i)][0] + ' ' + \ + get_test_library.dut_idx_mapping[str(i)][4] + logging.info(f"dut_6g value:{dut_6g}") + + logging.info(f"ap_mode value:{ap_mode}") + logging.info(f"setup_configuration value:{dut_data}") + + if ap_mode == "wifi7" or ap_mode == "wifi6e": + logging.info("ap mode is not wifi6 , ready to call triband") + get_test_library.multi_band_performance_test(mode=mode, ssid_2G=ssid_2G, ssid_5G=ssid_5G, + ssid_6G=ssid_6G, vlan_id=vlan, + dut_5g=dut_5g, dut_2g=dut_2g, dut_6g=dut_6g, + influx_tags=influx_tags, + move_to_influx=False, dut_data=dut_data) + else: + logging.info("ap mode is wifi6 , ready to call dualband") + get_test_library.multi_band_performance_test(mode=mode, ssid_2G=ssid_2G, ssid_5G=ssid_5G, vlan_id=vlan, + dut_5g=dut_5g, dut_2g=dut_2g, influx_tags=influx_tags, + move_to_influx=False, dut_data=dut_data) assert True diff --git a/tests/e2e/basic/performance_tests/dual_band_performance_test/wap3_personal/test_nat_mode.py b/tests/e2e/basic/performance_tests/dual_band_performance_test/wap3_personal/test_nat_mode.py index c573af5cd..862c03d1f 100644 --- a/tests/e2e/basic/performance_tests/dual_band_performance_test/wap3_personal/test_nat_mode.py +++ b/tests/e2e/basic/performance_tests/dual_band_performance_test/wap3_personal/test_nat_mode.py @@ -1,64 +1,192 @@ """ - Dual Band Performance Test : NAT Mode - pytest -m "performance and dual_band_tests and nat" + Multi Band Performance Test : NAT Mode + pytest -m "performance and multi_band_tests and nat" """ - +import logging import allure import pytest -pytestmark = [pytest.mark.nat, pytest.mark.dual_band_tests] +pytestmark = [pytest.mark.performance, pytest.mark.nat, pytest.mark.muti_band_tests] -setup_params_general = { +setup_params_general1 = { "mode": "NAT", "ssid_modes": { "wpa3_personal": [ - {"ssid_name": "ssid_wpa3_personal_dual_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} + {"ssid_name": "ssid_wpa3_personal_multi_band", "appliedRadios": ["2G", "5G"], "security_key": "something"} ]}, - "rf": {}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 20, + "channel-mode": "HE", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "HE", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 + } + }, + "radius": False +}, +setup_params_general2 = { + "mode": "NAT", + "ssid_modes": { + "wpa3_personal": [ + {"ssid_name": "ssid_wpa3_personal_multi_band", "appliedRadios": ["2G", "5G", "6G"], "security_key": "something"} + ]}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "HE", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "HE", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 + } + }, + "radius": False +}, +setup_params_general3 = { + "mode": "NAT", + "ssid_modes": { + "wpa3_personal": [ + {"ssid_name": "ssid_wpa3_personal_multi_band", "appliedRadios": ["2G", "5G", "6G"], "security_key": "something"} + ]}, + "rf": { + "2G": { + "band": "2G", + "channel-width": 40, + "channel-mode": "EHT", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "EHT", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 320, + "channel-mode": "EHT", + "channel": 33 + } + }, "radius": False } -@pytest.mark.dual_band_tests +testbed_details_global = None +setup_params_general = None +dut_data = {} + +@pytest.fixture(scope="class") +def setup_initial_configuration(request): + """Calls setup_testbed automatically before tests""" + global testbed_details_global + global setup_params_general + global dut_data + selected_tb = request.getfixturevalue("selected_testbed") + print(f"Selected Testbed: {selected_tb}") + testbed_details_global = request.getfixturevalue("get_testbed_details") + assert testbed_details_global is not None, "Testbed details should not be None" + print(f"Initialized Testbed Details: {testbed_details_global}") + + # Extract 'mode' from the first device in 'device_under_tests' + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + + # Assign setup_params_general based on mode + if ap_mode == "wifi6": + setup_params_general = setup_params_general1 + elif ap_mode == "wifi6e": + setup_params_general = setup_params_general2 + elif ap_mode == "wifi7": + setup_params_general = setup_params_general3 + else: + print(f"Unknown mode: {ap_mode}. Defaulting to None") + + print(f"Setup Params Assigned: {setup_params_general}") + + get_marker = request.getfixturevalue("get_markers") + requested_combination = [] + for key in get_marker: + if get_marker[key]: + requested_combination.append(get_marker[key]) + + logging.info(f"requested_combination:::{requested_combination}") + get_target_obj = request.getfixturevalue("get_target_object") + logging.info("ready to start setup_basic_configuration") + logging.info(f"setup_params_general value before start:{setup_params_general}") + if isinstance(setup_params_general, tuple): + setup_params_general = setup_params_general[0] + dut_data = get_target_obj.setup_basic_configuration(configuration=setup_params_general, + requested_combination=requested_combination) + + logging.info(f"setup_basic_configuration dut data:{dut_data}") + + +@pytest.mark.multi_band_tests @pytest.mark.wifi5 @pytest.mark.wifi6 -@pytest.mark.parametrize( - 'setup_configuration', - [setup_params_general], - indirect=True, - scope="class" -) -@allure.parent_suite("Dual Band Tests") -@allure.suite("Dual Band Tests: NAT mode") +@pytest.mark.wifi7 +@allure.parent_suite("Multi Band Tests") +@allure.suite("Multi Band Tests: NAT mode") @allure.sub_suite("wpa3_personal security") -@allure.feature("Dual band performance test") -@pytest.mark.usefixtures("setup_configuration") -class TestWpa3DualbandPerformanceNat(object): +@allure.feature("Multi band performance test") +class TestWpa3MultibandPerformanceNat(object): """ - pytest -m "performance and dual_band_tests and nat and wpa3_personal and twog and fiveg." + pytest -m "performance and multi_band_tests and nat and wpa3_personal and twog and fiveg." """ @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3728", name="WIFI-3728") @pytest.mark.wpa3_personal @pytest.mark.twog @pytest.mark.fiveg - @allure.title("Test Dual Band with ApAuto test of NAT mode") - def test_client_wpa3_personal_nat(self, get_test_library, setup_configuration, check_connectivity): + @pytest.mark.sixg + @allure.title("Test Multi Band with ApAuto test of NAT mode") + def test_client_wpa3_personal_nat(self, setup_initial_configuration, get_test_library, check_connectivity, + get_dut_logs_per_test_case, get_test_device_logs, get_target_object): """ - Dual Band Test with wpa3_personal encryption - pytest -m "dual_band_tests and wpa3_personal" + Multi Band Test with wpa3_personal encryption + pytest -m "multi_band_tests and wpa3_personal" """ + ap_mode = testbed_details_global["device_under_tests"][0].get("mode", "") + logging.info(f"setup_params_general data:{setup_params_general}") profile_data = setup_params_general["ssid_modes"]["wpa3_personal"] + logging.info(f"profile_data data:{profile_data}") + ssid_2G, ssid_5G = profile_data[0]["ssid_name"], profile_data[0]["ssid_name"] - dut_name = list(setup_configuration.keys())[0] + dut_name = list(dut_data.keys())[0] mode = "NAT-WAN" vlan = 1 dut_5g, dut_2g = "", "" + if ap_mode == "wifi7" or ap_mode == "wifi6e": + dut_6g = "" + ssid_6G = profile_data[0]["ssid_name"] + influx_tags = "dual-band-nat-wpa3" - for i in setup_configuration[dut_name]['ssid_data']: - get_test_library.dut_idx_mapping[str(i)] = list(setup_configuration[dut_name]['ssid_data'][i].values()) + for i in dut_data[dut_name]['ssid_data']: + get_test_library.dut_idx_mapping[str(i)] = list(dut_data[dut_name]['ssid_data'][i].values()) if get_test_library.dut_idx_mapping[str(i)][3] == "5G": dut_5g = dut_name + ' ' + get_test_library.dut_idx_mapping[str(i)][0] + ' ' + \ get_test_library.dut_idx_mapping[str(i)][4] @@ -66,8 +194,22 @@ class TestWpa3DualbandPerformanceNat(object): dut_2g = dut_name + ' ' + get_test_library.dut_idx_mapping[str(i)][0] + ' ' + \ get_test_library.dut_idx_mapping[str(i)][4] - get_test_library.dual_band_performance_test(mode=mode, ssid_2G=ssid_2G, ssid_5G=ssid_5G, vlan_id=vlan, - dut_5g=dut_5g, dut_2g=dut_2g, influx_tags=influx_tags, - move_to_influx=False, dut_data=setup_configuration) + if get_test_library.dut_idx_mapping[str(i)][3] == "6G" and (ap_mode == "wifi7" or ap_mode == "wifi6e"): + dut_6g = dut_name + ' ' + get_test_library.dut_idx_mapping[str(i)][0] + ' ' + \ + get_test_library.dut_idx_mapping[str(i)][4] + logging.info(f"dut_6g value:{dut_6g}") + + if ap_mode == "wifi7" or ap_mode == "wifi6e": + logging.info("ap mode is not wifi6 , ready to call triband") + get_test_library.multi_band_performance_test(mode=mode, ssid_2G=ssid_2G, ssid_5G=ssid_5G, + ssid_6G=ssid_6G, vlan_id=vlan, + dut_5g=dut_5g, dut_2g=dut_2g, dut_6g=dut_6g, + influx_tags=influx_tags, + move_to_influx=False, dut_data=dut_data) + else: + logging.info("ap mode is wifi6 , ready to call dualband") + get_test_library.multi_band_performance_test(mode=mode, ssid_2G=ssid_2G, ssid_5G=ssid_5G, vlan_id=vlan, + dut_5g=dut_5g, dut_2g=dut_2g, influx_tags=influx_tags, + move_to_influx=False, dut_data=dut_data) assert True diff --git a/tests/e2e/basic/performance_tests/dual_band_performance_test/wpa2_personal/test_bridge_mode.py b/tests/e2e/basic/performance_tests/dual_band_performance_test/wpa2_personal/test_bridge_mode.py index 7eff07280..bc040babb 100644 --- a/tests/e2e/basic/performance_tests/dual_band_performance_test/wpa2_personal/test_bridge_mode.py +++ b/tests/e2e/basic/performance_tests/dual_band_performance_test/wpa2_personal/test_bridge_mode.py @@ -9,7 +9,7 @@ import allure import pytest import time -pytestmark = [pytest.mark.performance, pytest.mark.dual_band_tests, pytest.mark.bridge, +pytestmark = [pytest.mark.dual_band_tests, pytest.mark.bridge, pytest.mark.single_station_dual_band_throughput] setup_params_general = { diff --git a/tests/e2e/basic/performance_tests/dual_band_performance_test/wpa2_personal/test_nat_mode.py b/tests/e2e/basic/performance_tests/dual_band_performance_test/wpa2_personal/test_nat_mode.py index 9080e5c0f..763a2acec 100644 --- a/tests/e2e/basic/performance_tests/dual_band_performance_test/wpa2_personal/test_nat_mode.py +++ b/tests/e2e/basic/performance_tests/dual_band_performance_test/wpa2_personal/test_nat_mode.py @@ -9,7 +9,7 @@ import os import allure import pytest -pytestmark = [pytest.mark.performance, pytest.mark.dual_band_tests, pytest.mark.nat, +pytestmark = [pytest.mark.dual_band_tests, pytest.mark.nat, pytest.mark.single_station_dual_band_throughput] setup_params_general = { "mode": "NAT", diff --git a/tests/e2e/basic/performance_tests/peak_throughput_tests/bridge_mode/wpa3_personal_encryption/test_peak_throughput_wpa3_160Mhz_6g.py b/tests/e2e/basic/performance_tests/peak_throughput_tests/bridge_mode/wpa3_personal_encryption/test_peak_throughput_wpa3_160Mhz_6g.py index 1a45404e8..5ef0c7ec4 100644 --- a/tests/e2e/basic/performance_tests/peak_throughput_tests/bridge_mode/wpa3_personal_encryption/test_peak_throughput_wpa3_160Mhz_6g.py +++ b/tests/e2e/basic/performance_tests/peak_throughput_tests/bridge_mode/wpa3_personal_encryption/test_peak_throughput_wpa3_160Mhz_6g.py @@ -20,9 +20,24 @@ setup_params_general = { ]}, "rf": { + "2G": { + "band": "2G", + "channel-width": 20, + "channel-mode": "HE", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "HE", + "channel": 36 + }, "6G": { - 'band': '6G', - 'channel-width': 160} + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 + } }, "radius": False } @@ -61,17 +76,23 @@ class Test160Mhz6GChannelautoPeakThroughput(object): profile_data = {"ssid_name": "ssid_wpa3_6g_channel_auto", "appliedRadios": ["6G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] mode = "BRIDGE" + sets = [["UDP-Burst", "1"], ["UDP-GRO", "1"], ["Multiple Endpoints:", "10"]] get_test_library.wifi_capacity(instance_name="test_client_wpa3_bridge_tcp_download", mode=mode, download_rate="10Gbps", batch_size="1", upload_rate="56Kbps", protocol="TCP", duration="60000", move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, - num_stations={"6G": 1}, pass_fail_criteria=True) + num_stations={"6G": 1}, pass_fail_criteria=True, sets_=sets) assert True @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-12395", name="WIFI-12395") @pytest.mark.udp_download @pytest.mark.sixg + @allure.feature("Performance Test") + @allure.parent_suite("AX Capacity Test") + @allure.suite("6 GHz Band") + @allure.sub_suite("BRIDGE Mode") @pytest.mark.performance + @pytest.mark.wifi_capacity_ax_tests @allure.title("Single client UDP Download wifi capacity 160Mhz Bw") def test_client_wpa3_bridge_udp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration): @@ -81,11 +102,12 @@ class Test160Mhz6GChannelautoPeakThroughput(object): profile_data = {"ssid_name": "ssid_wpa3_6g_channel_auto", "appliedRadios": ["6G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] mode = "BRIDGE" + sets = [["UDP-Burst", "1"], ["UDP-GRO", "1"], ["Multiple Endpoints:", "10"]] get_test_library.wifi_capacity(instance_name="test_client_wpa3_bridge_udp_dl", mode=mode, download_rate="10Gbps", batch_size="1", upload_rate="56Kbps", protocol="UDP", duration="60000", move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, - num_stations={"6G": 1}, pass_fail_criteria=True) + num_stations={"6G": 1}, pass_fail_criteria=True, sets_=sets) assert True @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-12397", name="WIFI-12397") @@ -129,7 +151,12 @@ class Test160Mhz6GChannelautoPeakThroughput(object): @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-12393", name="WIFI-12393") @pytest.mark.tcp_upload @pytest.mark.sixg + @allure.feature("Performance Test") + @allure.parent_suite("AX Capacity Test") + @allure.suite("6 GHz Band") + @allure.sub_suite("BRIDGE Mode") @pytest.mark.performance + @pytest.mark.wifi_capacity_ax_tests @allure.title("Single client TCP Upload wifi capacity 160Mhz Bw") def test_client_wpa3_bridge_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration): @@ -139,17 +166,23 @@ class Test160Mhz6GChannelautoPeakThroughput(object): profile_data = {"ssid_name": "ssid_wpa3_6g_channel_auto", "appliedRadios": ["6G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] mode = "BRIDGE" + sets = [["UDP-Burst", "1"], ["UDP-GRO", "1"], ["Multiple Endpoints:", "10"]] get_test_library.wifi_capacity(instance_name="test_client_wpa3_bridge_tcp_ul", mode=mode, download_rate="56Kbps", batch_size="1", upload_rate="10Gbps", protocol="TCP", duration="60000", move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, - num_stations={"6G": 1}, pass_fail_criteria=True) + num_stations={"6G": 1}, pass_fail_criteria=True, sets_=sets) assert True @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-12392", name="WIFI-12392") @pytest.mark.udp_upload @pytest.mark.sixg + @allure.feature("Performance Test") + @allure.parent_suite("AX Capacity Test") + @allure.suite("6 GHz Band") + @allure.sub_suite("BRIDGE Mode") @pytest.mark.performance + @pytest.mark.wifi_capacity_ax_tests @allure.title("Single client UDP Upload wifi capacity 160Mhz Bw") def test_client_wpa3_bridge_udp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration): @@ -159,9 +192,10 @@ class Test160Mhz6GChannelautoPeakThroughput(object): profile_data = {"ssid_name": "ssid_wpa3_6g_channel_auto", "appliedRadios": ["6G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] mode = "BRIDGE" + sets = [["UDP-Burst", "1"], ["UDP-GRO", "1"], ["Multiple Endpoints:", "10"]] get_test_library.wifi_capacity(instance_name="test_client_wpa3_bridge_udp_ul", mode=mode, download_rate="56Kbps", batch_size="1", upload_rate="10Gbps", protocol="UDP", duration="60000", move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, - num_stations={"6G": 1}, pass_fail_criteria=True) + num_stations={"6G": 1}, pass_fail_criteria=True, sets_=sets) assert True diff --git a/tests/e2e/basic/performance_tests/peak_throughput_tests/nat_mode/wpa3_personal_encryption/test_peak_throughput_wpa3_160Mhz_6g.py b/tests/e2e/basic/performance_tests/peak_throughput_tests/nat_mode/wpa3_personal_encryption/test_peak_throughput_wpa3_160Mhz_6g.py index ad397a0f4..d26446a10 100644 --- a/tests/e2e/basic/performance_tests/peak_throughput_tests/nat_mode/wpa3_personal_encryption/test_peak_throughput_wpa3_160Mhz_6g.py +++ b/tests/e2e/basic/performance_tests/peak_throughput_tests/nat_mode/wpa3_personal_encryption/test_peak_throughput_wpa3_160Mhz_6g.py @@ -19,9 +19,24 @@ setup_params_general = { {"ssid_name": "ssid_wpa3_6g_channel_auto", "appliedRadios": ["6G"], "security_key": "something"} ]}, "rf": { + "2G": { + "band": "2G", + "channel-width": 20, + "channel-mode": "HE", + "channel": 6 + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "HE", + "channel": 36 + }, "6G": { - 'band': '6G', - 'channel-width': 160} + "band": "6G", + "channel-width": 160, + "channel-mode": "HE", + "channel": 33 + } }, "radius": False } @@ -45,7 +60,12 @@ class Test160Mhz6GChannelautoPeakThroughput(object): @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-12400", name="WIFI-12400") @pytest.mark.tcp_download @pytest.mark.sixg + @allure.feature("Performance Test") + @allure.parent_suite("AX Capacity Test") + @allure.suite("6 GHz Band") + @allure.sub_suite("NAT Mode") @pytest.mark.performance + @pytest.mark.wifi_capacity_ax_tests @allure.title("Single client TCP Download wifi capacity 160Mhz Bw") def test_client_wpa3_nat_tcp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration): @@ -55,17 +75,23 @@ class Test160Mhz6GChannelautoPeakThroughput(object): profile_data = {"ssid_name": "ssid_wpa3_6g_channel_auto", "appliedRadios": ["6G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] mode = "NAT-WAN" + sets = [["UDP-Burst", "1"], ["UDP-GRO", "1"], ["Multiple Endpoints:", "10"]] get_test_library.wifi_capacity(instance_name="test_client_wpa3_nat_tcp_download", mode=mode, download_rate="10Gbps", batch_size="1", upload_rate="56Kbps", protocol="TCP", duration="60000", move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, - num_stations={"6G": 1}, pass_fail_criteria=True) + num_stations={"6G": 1}, pass_fail_criteria=True, sets_=sets) assert True @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-12401", name="WIFI-12401") @pytest.mark.udp_download @pytest.mark.sixg + @allure.feature("Performance Test") + @allure.parent_suite("AX Capacity Test") + @allure.suite("6 GHz Band") + @allure.sub_suite("NAT Mode") @pytest.mark.performance + @pytest.mark.wifi_capacity_ax_tests @allure.title("Single client UDP Download wifi capacity 160Mhz Bw") def test_client_wpa3_nat_udp_dl(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration): @@ -75,11 +101,12 @@ class Test160Mhz6GChannelautoPeakThroughput(object): profile_data = {"ssid_name": "ssid_wpa3_6g_channel_auto", "appliedRadios": ["6G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] mode = "NAT-WAN" + sets = [["UDP-Burst", "1"], ["UDP-GRO", "1"], ["Multiple Endpoints:", "10"]] get_test_library.wifi_capacity(instance_name="test_client_wpa3_nat_udp_dl", mode=mode, download_rate="10Gbps", batch_size="1", upload_rate="56Kbps", protocol="UDP", duration="60000", move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, - num_stations={"6G": 1}, pass_fail_criteria=True) + num_stations={"6G": 1}, pass_fail_criteria=True, sets_=sets) assert True @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-12403", name="WIFI-12403") @@ -123,7 +150,12 @@ class Test160Mhz6GChannelautoPeakThroughput(object): @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-12399", name="WIFI-12399") @pytest.mark.tcp_upload @pytest.mark.sixg + @allure.feature("Performance Test") + @allure.parent_suite("AX Capacity Test") + @allure.suite("6 GHz Band") + @allure.sub_suite("NAT Mode") @pytest.mark.performance + @pytest.mark.wifi_capacity_ax_tests @allure.title("Single client TCP Upload wifi capacity 160Mhz Bw") def test_client_wpa3_nat_tcp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration): @@ -133,17 +165,23 @@ class Test160Mhz6GChannelautoPeakThroughput(object): profile_data = {"ssid_name": "ssid_wpa3_6g_channel_auto", "appliedRadios": ["6G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] mode = "NAT-WAN" + sets = [["UDP-Burst", "1"], ["UDP-GRO", "1"], ["Multiple Endpoints:", "10"]] get_test_library.wifi_capacity(instance_name="test_client_wpa3_nat_tcp_ul", mode=mode, download_rate="56Kbps", batch_size="1", upload_rate="10Gbps", protocol="TCP", duration="60000", move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, - num_stations={"6G": 1}, pass_fail_criteria=True) + num_stations={"6G": 1}, pass_fail_criteria=True, sets_=sets) assert True @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-12398", name="WIFI-12398") @pytest.mark.udp_upload @pytest.mark.sixg + @allure.feature("Performance Test") + @allure.parent_suite("AX Capacity Test") + @allure.suite("6 GHz Band") + @allure.sub_suite("NAT Mode") @pytest.mark.performance + @pytest.mark.wifi_capacity_ax_tests @allure.title("Single client UDP Upload wifi capacity 160Mhz Bw") def test_client_wpa3_nat_udp_ul(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, num_stations, setup_configuration): @@ -153,9 +191,10 @@ class Test160Mhz6GChannelautoPeakThroughput(object): profile_data = {"ssid_name": "ssid_wpa3_6g_channel_auto", "appliedRadios": ["6G"], "security_key": "something"} ssid_name = profile_data["ssid_name"] mode = "NAT-WAN" + sets = [["UDP-Burst", "1"], ["UDP-GRO", "1"], ["Multiple Endpoints:", "10"]] get_test_library.wifi_capacity(instance_name="test_client_wpa3_nat_udp_ul", mode=mode, download_rate="56Kbps", batch_size="1", upload_rate="10Gbps", protocol="UDP", duration="60000", move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, - num_stations={"6G": 1}, pass_fail_criteria=True) + num_stations={"6G": 1}, pass_fail_criteria=True, sets_=sets) assert True diff --git a/tests/e2e/basic/performance_tests/performance_pass_fail.json b/tests/e2e/basic/performance_tests/performance_pass_fail.json index 16fe8506d..c359d5f18 100644 --- a/tests/e2e/basic/performance_tests/performance_pass_fail.json +++ b/tests/e2e/basic/performance_tests/performance_pass_fail.json @@ -377,9 +377,9 @@ "TCP": 3000, "UDP": 3000 }, - "6G 4x4 160MHz": { - "TCP": null, - "UDP": null + "6G 2x2 160MHz": { + "TCP": 2000, + "UDP": 2000 } } }, @@ -478,9 +478,9 @@ "TCP": 3000, "UDP": 3000 }, - "6G 4x4 160MHz": { - "TCP": null, - "UDP": null + "6G 2x2 160MHz": { + "TCP": 2000, + "UDP": 2000 } } }, @@ -548,9 +548,9 @@ "TCP": 3000, "UDP": 3000 }, - "6G 4x4 160MHz": { - "TCP": null, - "UDP": null + "6G 2x2 160MHz": { + "TCP": 2000, + "UDP": 2000 } } }, @@ -643,6 +643,72 @@ "UDP": null } } - } -} + }, + "edgecore_oap103":{ + "AX":{ + "2G 2x2 20MHz": { + "TCP": 200, + "UDP": 220 + }, + "5G 2x2 80MHz": { + "TCP": 800, + "UDP": 900 + } + } + }, + "edgecore_eap112":{ + "AX":{ + "2G 2x2 20MHz": { + "TCP": 200, + "UDP": 220 + }, + "5G 2x2 80MHz": { + "TCP": 800, + "UDP": 900 + } + } + }, + "cig_wf189h":{ + "AX":{ + "2G 2x2 20MHz": { + "TCP": 200, + "UDP": 220 + }, + "2G 2x2 40MHz": { + "TCP": 400, + "UDP": 400 + }, + "5G 2x2 80MHz": { + "TCP": 800, + "UDP": 900 + }, + "6G 2x2 160MHz": { + "TCP": 1600, + "UDP": 1800 + } + }, + "BE":{ + "2G 2x2 20MHz": { + "TCP": 240, + "UDP": 240 + }, + "2G 2x2 40MHz": { + "TCP": 480, + "UDP": 480 + }, + "5G 2x2 80MHz": { + "TCP": 1000, + "UDP": 1000 + }, + "6G 2x2 160MHz": { + "TCP": 2000, + "UDP": 2000 + }, + "6G 2x2 320MHz": { + "TCP": 3000, + "UDP": 3000 + } + } + } } +} \ No newline at end of file diff --git a/tests/e2e/basic/validation_of_operating_modes/bridge_mode/client_connectivity/test_enterprise_tls.py b/tests/e2e/basic/validation_of_operating_modes/bridge_mode/client_connectivity/test_enterprise_tls.py index 5ae8f8b71..7cebd835a 100644 --- a/tests/e2e/basic/validation_of_operating_modes/bridge_mode/client_connectivity/test_enterprise_tls.py +++ b/tests/e2e/basic/validation_of_operating_modes/bridge_mode/client_connectivity/test_enterprise_tls.py @@ -15,8 +15,7 @@ setup_params_enterprise = { {"ssid_name": "tls_ssid_wpa2_eap_5g", "appliedRadios": ["5G"], "security_key": "something"}], "wpa3_enterprise": [ {"ssid_name": "tls_ssid_wpa3_eap_2g", "appliedRadios": ["2G"], "security_key": "something"}, - {"ssid_name": "tls_ssid_wpa3_eap_5g", "appliedRadios": ["5G"], "security_key": "something"}, - {"ssid_name": "tls_ssid_wpa3_eap_6g", "appliedRadios": ["6G"], "security_key": "something"}]}, + {"ssid_name": "tls_ssid_wpa3_eap_5g", "appliedRadios": ["5G"], "security_key": "something"}]}, "rf": {}, "radius": True @@ -155,7 +154,7 @@ class TestBridgeModeEnterpriseTLSSuiteA(object): get_target_object, num_stations, setup_configuration, check_connectivity, radius_info): """ - To verify that a client created on 5G radio connects to AP in Bridge mode with WAP2 enterprise TLS security + To verify that a client created on 5G radio connects to AP in Bridge mode with WPA2 enterprise TLS security Unique Marker: pytest -m "client_connectivity_tests and enterprise and wpa2_enterprise and ow_sanity_lf and tls and bridge and fiveg" """ @@ -283,14 +282,14 @@ class TestBridgeModeEnterpriseTLSSuiteTwo(object): @pytest.mark.wpa_wpa2_enterprise_mixed @pytest.mark.twog - @allure.title("Bridge Mode Client Connectivity Test with WAP-WPA2-Enterprise-TLS in 2.4GHz Band") + @allure.title("Bridge Mode Client Connectivity Test with WPA-WPA2-Enterprise-TLS in 2.4GHz Band") @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-10589", name="WIFI-10589") def test_wpa_wpa2_enterprise_2g(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, get_target_object, num_stations, setup_configuration, check_connectivity, radius_info): """ - To verify that a client created on 2G radio connects to AP in Bridge mode with WAP-WPA2-Enterprise TLS security + To verify that a client created on 2G radio connects to AP in Bridge mode with WPA-WPA2-Enterprise TLS security Unique Marker: pytest -m "client_connectivity_tests and wpa_wpa2_enterprise_mixed and enterprise and ow_sanity_lf and tls and bridge and twog" """ profile_data = {"ssid_name": "tls_ssid_wpa_wpa2_eap_2g", "appliedRadios": ["2G"]} @@ -314,14 +313,14 @@ class TestBridgeModeEnterpriseTLSSuiteTwo(object): @pytest.mark.wpa_wpa2_enterprise_mixed @pytest.mark.fiveg - @allure.title("Bridge Mode Client Connectivity Test with WAP-WPA2-Enterprise-TLS in 5GHz Band") + @allure.title("Bridge Mode Client Connectivity Test with WPA-WPA2-Enterprise-TLS in 5GHz Band") @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-10590", name="WIFI-10590") def test_wpa_wpa2_enterprise_5g(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, get_target_object, num_stations, setup_configuration, check_connectivity, radius_info): """ - To verify that a client created on 5G radio connects to AP in Bridge mode with WAP-WPA2-Enterprise TLS security + To verify that a client created on 5G radio connects to AP in Bridge mode with WPA-WPA2-Enterprise TLS security Unique Marker: pytest -m "client_connectivity_tests and wpa_wpa2_enterprise_mixed and enterprise and ow_sanity_lf and tls and bridge and fiveg" """ profile_data = {"ssid_name": "tls_ssid_wpa_wpa2_eap_5g", "appliedRadios": ["5G"]} @@ -345,14 +344,14 @@ class TestBridgeModeEnterpriseTLSSuiteTwo(object): @pytest.mark.wpa3_enterprise_mixed @pytest.mark.twog - @allure.title("Bridge Mode Client Connectivity Test with WAP3-Enterprise-Mixed-TLS in 2.4GHz Band") + @allure.title("Bridge Mode Client Connectivity Test with WPA3-Enterprise-Mixed-TLS in 2.4GHz Band") @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-10591", name="WIFI-10591") def test_wpa3_enterprise_mixed_2g(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, get_target_object, num_stations, setup_configuration, check_connectivity, radius_info): """ - To verify that a client created on 2G radio connects to AP in Bridge mode with WAP3-Enterprise-Mixed TLS security + To verify that a client created on 2G radio connects to AP in Bridge mode with WPA3-Enterprise-Mixed TLS security Unique Marker: pytest -m "client_connectivity_tests and wpa3_enterprise_mixed and enterprise and ow_sanity_lf and tls and bridge and twog" """ profile_data = {"ssid_name": "tls_ssid_wpa3_mixed_eap_2g", "appliedRadios": ["2G"]} @@ -374,14 +373,14 @@ class TestBridgeModeEnterpriseTLSSuiteTwo(object): @pytest.mark.wpa3_enterprise_mixed @pytest.mark.fiveg - @allure.title("Bridge Mode Client Connectivity Test with WAP3-Enterprise-Mixed-TLS in 5GHz Band") + @allure.title("Bridge Mode Client Connectivity Test with WPA3-Enterprise-Mixed-TLS in 5GHz Band") @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-10592", name="WIFI-10592") def test_wpa3_enterprise_mixed_5g(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, get_target_object, num_stations, setup_configuration, check_connectivity, radius_info): """ - To verify that a client created on 5G radio connects to AP in Bridge mode with WAP3-Enterprise-Mixed TLS security + To verify that a client created on 5G radio connects to AP in Bridge mode with WPA3-Enterprise-Mixed TLS security Unique Marker: pytest -m "client_connectivity_tests and wpa3_enterprise_mixed and enterprise and ow_sanity_lf and tls and bridge and fiveg" """ profile_data = {"ssid_name": "tls_ssid_wpa3_mixed_eap_5g", "appliedRadios": ["5G"]} diff --git a/tests/e2e/basic/validation_of_operating_modes/bridge_mode/multi_psk/wpa2_security/test_multipsk_basic_wpa2.py b/tests/e2e/basic/validation_of_operating_modes/bridge_mode/multi_psk/wpa2_security/test_multipsk_basic_wpa2.py index 7d6ec0772..d88dbd53a 100644 --- a/tests/e2e/basic/validation_of_operating_modes/bridge_mode/multi_psk/wpa2_security/test_multipsk_basic_wpa2.py +++ b/tests/e2e/basic/validation_of_operating_modes/bridge_mode/multi_psk/wpa2_security/test_multipsk_basic_wpa2.py @@ -4,15 +4,19 @@ pytest -m "multipsk and wpa2_personal and twog" -s -vvv --skip-testrail --testbed=basic-03 --alluredir=../allure_reports wifi-3493 """ +import json +import logging +from datetime import time + import allure import pytest +import requests pytestmark = [pytest.mark.multi_psk_tests, - pytest.mark.ow_regression_lf, pytest.mark.bridge, pytest.mark.wpa2_personal, - pytest.mark.ow_sanity_lf, - pytest.mark.twog] + pytest.mark.twog, + pytest.mark.ow_sanity_lf] setup_params_general = { "mode": "BRIDGE", @@ -48,11 +52,11 @@ setup_params_general = { @allure.parent_suite("MultiPsk Test") @allure.suite("BRIDGE Mode") @allure.sub_suite("WPA2 Security") +@pytest.mark.ow_regression_lf @pytest.mark.usefixtures("setup_configuration") class TestMultipskBridgeWPA2(object): @pytest.mark.vlan1 - @pytest.mark.ow_sanity_lf @pytest.mark.wpa2 @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-3493", name="WIFI-3493") @allure.title("Test for Client Connect with 1 VLAN") @@ -91,7 +95,6 @@ class TestMultipskBridgeWPA2(object): assert True @pytest.mark.vlan2 - @pytest.mark.ow_sanity_lf @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-10657", name="WIFI-10657") @allure.title("Test for Client Connect with 2 VLAN's") def test_client_wpa2_2g_vlan2(self, get_test_library, get_dut_logs_per_test_case, @@ -126,4 +129,125 @@ class TestMultipskBridgeWPA2(object): get_test_library.multi_psk_test(band=band, mpsk_data=mpsk_data, ssid=ssid, bssid="['BLANK']", passkey=security_key, encryption=security, mode=mode, num_sta=1, dut_data=setup_configuration) - assert True \ No newline at end of file + assert True + + + +setup_params_general = { + "mode": "BRIDGE", + "ssid_modes": { + "wpa2_personal": [ + {"ssid_name": "OpenWifi-roam", + "appliedRadios": ["2G", "5G"], + "security": "psk2", + "security_key": "OpenWifi", + "multi-psk": [ + {"key": "aaaaaaaa"}, + {"key": "bbbbbbbb"} + ], + "roaming": True, + "rrm": { + "reduced-neighbor-reporting": True + } + } + ], + "wpa3_personal": [ + {"ssid_name": "OpenWifi-roam", + "appliedRadios": ["6G"], + "security": "sae", + "security_key": "OpenWifi", + "roaming": True, + "rrm": { + "reduced-neighbor-reporting": True + } + } + ] + }, + "rf": { + "2G": { + "band": "2G", + "channel-width": 20, + "channel-mode": "EHT", + "channel": "auto" + }, + "5G": { + "band": "5G", + "channel-width": 80, + "channel-mode": "EHT", + "channel": 36 + }, + "6G": { + "band": "6G", + "channel-width": 320, + "channel-mode": "EHT", + "channel": 33 + } + }, + "radius": False +} + +testbed_details_global = None +dut_data = {} + +@pytest.fixture(scope="class") +def setup_initial_configuration(request): + """Calls setup_testbed automatically before tests""" + global setup_params_general + global dut_data + logging.info(f"Setup Params Assigned: {setup_params_general}") + + requested_combination = [['2G', 'wpa2_personal'], ['5G', 'wpa2_personal'], ['6G', 'wpa3_personal']] + + logging.info(f"requested_combination:::{requested_combination}") + get_target_obj = request.getfixturevalue("get_target_object") + logging.info("ready to start setup_basic_configuration") + logging.info(f"setup_params_general value before start:{setup_params_general}") + dut_data = get_target_obj.setup_basic_configuration(configuration=setup_params_general, + requested_combination=requested_combination) + + logging.info(f"setup_basic_configuration dut data:{dut_data}") + +@allure.feature("MultiPsk Test") +@allure.parent_suite("MultiPsk Test") +@allure.suite("BRIDGE Mode") +@allure.sub_suite("WPA2 Security") +class TestEmpsk6GBridgeWPA2(object): + + # @pytest.mark.wpa3_personal + # @pytest.mark.wpa2_personal + # @pytest.mark.sixg + # @pytest.mark.twog + # @pytest.mark.fiveg + @pytest.mark.empsk + @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14423", name="WIFI-14423") + @allure.title("Test E-MPSK with WPA2 to WPA3 on 6GHz") + def test_client_wpa2_wpa3_6g_empsk(self, setup_initial_configuration, get_test_library,get_target_object, + check_connectivity, get_testbed_details): + """ + Verify E-MPSK working in BRIDGE mode: + - Client connects on 2.4/5GHz (WPA2 and WPA3) + - Encryption is changed from WPA2 to WPA3 (disable WPA2) + - Verify client successfully get an IP and associate to AP + """ + profile_data = { + "ssid_name": "OpenWifi-roam", + "appliedRadios": ["2G"], + "security": "psk2", + "security_key": "OpenWifi", + "multi-psk": [ + {"key": "aaaaaaaa"}, + {"key": "bbbbbbbb"} + ] + } + ssid = profile_data["ssid_name"] + security = "wpa2" + mode = "BRIDGE" + band = "twog" + num_sta = 1 + security_key = profile_data["multi-psk"][0]["key"] + sta_data = get_test_library.empsk_test(ssid=ssid, passkey=security_key, security=security, is_bw320=True, + mode=mode, band=band, pre_cleanup=True, num_sta=num_sta, + scan_ssid=True, dut_data=dut_data, extra_securities = ["wpa3"], + allure_attach=True) + + logging.info(f"sta_data{sta_data}") \ No newline at end of file diff --git a/tests/e2e/basic/validation_of_operating_modes/bridge_mode/rate_limiting/test_rate_limiting.py b/tests/e2e/basic/validation_of_operating_modes/bridge_mode/rate_limiting/test_rate_limiting.py index f199560db..e01e1afcf 100644 --- a/tests/e2e/basic/validation_of_operating_modes/bridge_mode/rate_limiting/test_rate_limiting.py +++ b/tests/e2e/basic/validation_of_operating_modes/bridge_mode/rate_limiting/test_rate_limiting.py @@ -820,6 +820,7 @@ class TestRateLimitingBridgeSixg(object): @pytest.mark.sixg @pytest.mark.upload_download @pytest.mark.batch_size_125 + @pytest.mark.ow_sanity_lf @pytest.mark.rate_limiting_tests @pytest.mark.bridge @allure.testcase(name="WIFI-14364", diff --git a/tests/e2e/basic/validation_of_operating_modes/bridge_mode/rate_limiting_with_radius/test_rate_limiting_with_radius.py b/tests/e2e/basic/validation_of_operating_modes/bridge_mode/rate_limiting_with_radius/test_rate_limiting_with_radius.py index ecaa80a95..df516134e 100644 --- a/tests/e2e/basic/validation_of_operating_modes/bridge_mode/rate_limiting_with_radius/test_rate_limiting_with_radius.py +++ b/tests/e2e/basic/validation_of_operating_modes/bridge_mode/rate_limiting_with_radius/test_rate_limiting_with_radius.py @@ -36,8 +36,8 @@ setup_params_general = { "appliedRadios": ["2G"], "security_key": "something", "rate-limit": { - "ingress-rate": 10, - "egress-rate": 10 + "ingress-rate": 20, + "egress-rate": 20 }, "radius_auth_data": RATE_LIMITING_RADIUS_SERVER_DATA, "radius_acc_data": RATE_LIMITING_RADIUS_ACCOUNTING_DATA @@ -47,8 +47,8 @@ setup_params_general = { "appliedRadios": ["5G"], "security_key": "something", "rate-limit": { - "ingress-rate": 10, - "egress-rate": 10 + "ingress-rate": 20, + "egress-rate": 20 }, "radius_auth_data": RATE_LIMITING_RADIUS_SERVER_DATA, "radius_acc_data": RATE_LIMITING_RADIUS_ACCOUNTING_DATA @@ -75,7 +75,6 @@ class TestRateLimitingWithRadiusBridge(object): @pytest.mark.wpa2_enterprise @pytest.mark.twog - @pytest.mark.ow_sanity_lf @pytest.mark.twog_upload_per_ssid @allure.title("Test for Upload per SSID 2.4 GHz") @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5849", name="WIFI-5849") @@ -130,7 +129,7 @@ class TestRateLimitingWithRadiusBridge(object): @pytest.mark.twog @pytest.mark.twog_download_perssid_persta @pytest.mark.ow_sanity_lf - @allure.title("Test for Download per SSID per Station 2.4GHz") + @allure.title("Test for TCP Download per SSID per Station 2.4GHz") @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5850", name="WIFI-5850") def test_radius_server_2g_download_perssid_persta(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, @@ -314,7 +313,8 @@ class TestRateLimitingWithRadiusBridge(object): @pytest.mark.wpa2_enterprise @pytest.mark.fiveg @pytest.mark.fiveg_upload_per_ssid - @allure.title("Test for Upload per SSID 5 GHz") + @pytest.mark.ow_sanity_lf + @allure.title("Test for UDP Upload per SSID 5 GHz") @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-5854", name="WIFI-5854") def test_radius_server_fiveg_per_ssid_upload(self, get_test_library, get_dut_logs_per_test_case, get_test_device_logs, @@ -334,7 +334,8 @@ class TestRateLimitingWithRadiusBridge(object): band = "fiveg" eap = "TTLS" ttls_passwd = "password" - identity = "bandwidth10m" + identity = "user" + configured = 5 allure.attach(name="ssid-rates", body=str(profile_data["rate-limit"])) get_test_library.pre_cleanup() passes, result = get_test_library.enterprise_client_connectivity_test(ssid=ssid_name, security=security, @@ -347,13 +348,19 @@ class TestRateLimitingWithRadiusBridge(object): assert passes == "PASS", result if passes == "PASS": raw_lines = [["dl_rate_sel: Total Download Rate:"], ["ul_rate_sel: Per-Station Download Rate:"]] - get_test_library.wifi_capacity(instance_name="Test_Radius_5g_up_per_ssid", mode=mode, + obj = get_test_library.wifi_capacity(instance_name="Test_Radius_5g_up_per_ssid", mode=mode, download_rate="0Gbps", batch_size="1", - upload_rate="1Gbps", protocol="TCP", duration="60000", + upload_rate="1Gbps", protocol="UDP", duration="60000", move_to_influx=False, dut_data=setup_configuration, ssid_name=ssid_name, add_stations=False, raw_lines=raw_lines) + report_name = obj[0].report_name[0]['LAST']["response"].split(":::")[1].split("/")[-1] + "/" + kpi_data = get_test_library.read_kpi_file(column_name=["numeric-score"], dir_name=report_name) + achieved = float("{:.2f}".format(kpi_data[1][0])) + if achieved <= configured: + assert True + else: + assert False, f"Expected Throughput should be less than {configured} Mbps" - assert True @pytest.mark.wpa2_enterprise @pytest.mark.fiveg @@ -797,8 +804,8 @@ class TestRateLimitingWithRadiusBridge(object): "appliedRadios": ["2G"], "security_key": "something", "rate-limit": { - "ingress-rate": 10, - "egress-rate": 10 + "ingress-rate": 20, + "egress-rate": 30 }} ssid_name = profile_data["ssid_name"] mode = "BRIDGE" @@ -860,8 +867,8 @@ class TestRateLimitingWithRadiusBridge(object): "appliedRadios": ["2G"], "security_key": "something", "rate-limit": { - "ingress-rate": 10, - "egress-rate": 10 + "ingress-rate": 60, + "egress-rate": 50 }} ssid_name = profile_data["ssid_name"] mode = "BRIDGE" @@ -923,8 +930,8 @@ class TestRateLimitingWithRadiusBridge(object): "appliedRadios": ["2G"], "security_key": "something", "rate-limit": { - "ingress-rate": 10, - "egress-rate": 10 + "ingress-rate": 60, + "egress-rate": 50 }} ssid_name = profile_data["ssid_name"] mode = "BRIDGE" @@ -986,7 +993,7 @@ class TestRateLimitingWithRadiusBridge(object): "appliedRadios": ["2G"], "security_key": "something", "rate-limit": { - "ingress-rate": 10, + "ingress-rate": 50, "egress-rate": 10 }} ssid_name = profile_data["ssid_name"] @@ -1048,7 +1055,7 @@ class TestRateLimitingWithRadiusBridge(object): "appliedRadios": ["2G"], "security_key": "something", "rate-limit": { - "ingress-rate": 10, + "ingress-rate": 50, "egress-rate": 10 }} ssid_name = profile_data["ssid_name"] @@ -1112,7 +1119,7 @@ class TestRateLimitingWithRadiusBridge(object): "security_key": "something", "rate-limit": { "ingress-rate": 10, - "egress-rate": 10 + "egress-rate": 50 }} ssid_name = profile_data["ssid_name"] mode = "BRIDGE" @@ -1175,7 +1182,7 @@ class TestRateLimitingWithRadiusBridge(object): "security_key": "something", "rate-limit": { "ingress-rate": 10, - "egress-rate": 10 + "egress-rate": 50 }} ssid_name = profile_data["ssid_name"] mode = "BRIDGE" @@ -1274,6 +1281,7 @@ class TestRateLimitingWithRadiusBridgeSixg(object): @pytest.mark.wpa3_enterprise @pytest.mark.sixg @pytest.mark.sixg_upload_per_ssid + @pytest.mark.ow_sanity_lf @allure.title("Test for UDP Upload per SSID 6 GHz") @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14366", name="WIFI-14366") def test_radius_server_6g_upload_per_ssid(self, get_test_library, get_dut_logs_per_test_case, @@ -1326,6 +1334,7 @@ class TestRateLimitingWithRadiusBridgeSixg(object): @pytest.mark.wpa3_enterprise @pytest.mark.sixg @pytest.mark.sixg_download_perssid_persta + @pytest.mark.ow_sanity_lf @allure.title("Test for TCP Download per Station 6GHz") @allure.testcase(url="https://telecominfraproject.atlassian.net/browse/WIFI-14365", name="WIFI-14365") def test_radius_server_6g_download_persta(self, get_test_library, get_dut_logs_per_test_case, 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 ec81b7b41..041f3d693 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 @@ -21,8 +21,7 @@ setup_params_enterprise = { {"ssid_name": "ssid_wpa2_eap_5g", "appliedRadios": ["5G"]}], "wpa3_enterprise": [ {"ssid_name": "ssid_wpa3_eap_2g", "appliedRadios": ["2G"]}, - {"ssid_name": "ssid_wpa3_eap_5g", "appliedRadios": ["5G"]}, - {"ssid_name": "ttls_ssid_wpa3_eap_6g", "appliedRadios": ["6G"]}]}, + {"ssid_name": "ssid_wpa3_eap_5g", "appliedRadios": ["5G"]}]}, "rf": {}, "radius": True 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 77d697651..395ad8809 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 @@ -232,7 +232,13 @@ setup_params_general_two_vlan = { {"ssid_name": "ssid_wpa_wpa2_p_m_5g_vlan", "appliedRadios": ["5G"], "security_key": "something", "vlan": 100}] }, - "rf": {}, + "rf": { + "6G": { + "band": "6G", + "channel-mode": "EHT", + "channel-width": 80, + } + }, "radius": False } diff --git a/tests/e2e/basic/validation_of_operating_modes/vlan_mode/dynamic_vlan/wpa3_enterprise/sixg/test_dynamic_over_ssid_sixg_wpa3.py b/tests/e2e/basic/validation_of_operating_modes/vlan_mode/dynamic_vlan/wpa3_enterprise/sixg/test_dynamic_over_ssid_sixg_wpa3.py index d9b1df37d..3af0315bc 100644 --- a/tests/e2e/basic/validation_of_operating_modes/vlan_mode/dynamic_vlan/wpa3_enterprise/sixg/test_dynamic_over_ssid_sixg_wpa3.py +++ b/tests/e2e/basic/validation_of_operating_modes/vlan_mode/dynamic_vlan/wpa3_enterprise/sixg/test_dynamic_over_ssid_sixg_wpa3.py @@ -15,7 +15,7 @@ DYNAMIC_VLAN_RADIUS_SERVER_DATA = lf_library.DYNAMIC_VLAN_RADIUS_SERVER_DATA DYNAMIC_VLAN_RADIUS_ACCOUNTING_DATA = lf_library.DYNAMIC_VLAN_RADIUS_ACCOUNTING_DATA pytestmark = [pytest.mark.dynamic_vlan_tests, - pytest.mark.vlan] + pytest.mark.vlan, pytest.mark.ow_sanity_lf] setup_params_general = { "mode": "VLAN", @@ -71,8 +71,11 @@ class TestDynamicVlanOverSsid6GWpa3(object): pytest -m "dynamic_precedence_over_ssid and wpa3_enterprise and vlan and sixg" """ - profile_data = setup_params_general["ssid_modes"]["wpa3_enterprise"] - ssid_name = profile_data[1]["ssid_name"] + profile_data = {"ssid_name": "ssid_wpa3e_6g", "appliedRadios": ["6G"], + "security_key": "something", + "vlan": 100 + } + ssid_name = profile_data["ssid_name"] security = "wpa3" extra_secu = [] mode = "VLAN" diff --git a/tests/e2e/basic/validation_of_operating_modes/vlan_mode/dynamic_vlan/wpa3_enterprise/sixg/test_dynamic_vlan_sixg_wpa3.py b/tests/e2e/basic/validation_of_operating_modes/vlan_mode/dynamic_vlan/wpa3_enterprise/sixg/test_dynamic_vlan_sixg_wpa3.py index fbb13bffc..27d501871 100644 --- a/tests/e2e/basic/validation_of_operating_modes/vlan_mode/dynamic_vlan/wpa3_enterprise/sixg/test_dynamic_vlan_sixg_wpa3.py +++ b/tests/e2e/basic/validation_of_operating_modes/vlan_mode/dynamic_vlan/wpa3_enterprise/sixg/test_dynamic_vlan_sixg_wpa3.py @@ -16,7 +16,7 @@ DYNAMIC_VLAN_RADIUS_SERVER_DATA = lf_library.DYNAMIC_VLAN_RADIUS_SERVER_DATA DYNAMIC_VLAN_RADIUS_ACCOUNTING_DATA = lf_library.DYNAMIC_VLAN_RADIUS_ACCOUNTING_DATA pytestmark = [pytest.mark.dynamic_vlan_tests, - pytest.mark.vlan] + pytest.mark.vlan, pytest.mark.ow_sanity_lf] setup_params_general = { "mode": "VLAN", @@ -72,8 +72,11 @@ class TestDynamicVlan6GWpa3(object): pytest -m "absence_of_radius_vlan_identifier and wpa3_enterprise and vlan and sixg" """ - profile_data = setup_params_general["ssid_modes"]["wpa3_enterprise"] - ssid_name = profile_data[1]["ssid_name"] + profile_data = {"ssid_name": "ssid_wpa3e_6g", "appliedRadios": ["6G"], + "security_key": "something", + "vlan": 100 + } + ssid_name = profile_data["ssid_name"] security = "wpa3" extra_secu = [] band = "sixg" diff --git a/tests/e2e/basic/validation_of_operating_modes/vlan_mode/multi_vlan/test_multi_vlan_sixg.py b/tests/e2e/basic/validation_of_operating_modes/vlan_mode/multi_vlan/test_multi_vlan_sixg.py index c97782764..9248776fd 100644 --- a/tests/e2e/basic/validation_of_operating_modes/vlan_mode/multi_vlan/test_multi_vlan_sixg.py +++ b/tests/e2e/basic/validation_of_operating_modes/vlan_mode/multi_vlan/test_multi_vlan_sixg.py @@ -6,7 +6,7 @@ import allure import pytest -pytestmark = [pytest.mark.multi_vlan_tests, pytest.mark.sixg] +pytestmark = [pytest.mark.multi_vlan_tests, pytest.mark.sixg, pytest.mark.ow_sanity_lf] setup_params_general = { "mode": "VLAN",