diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index fd84574c6..432e18cc3 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -1,27 +1,135 @@ name: nightly build +env: + DOCKER_SERVER: tip-tip-wlan-cloud-docker-repo.jfrog.io + DOCKER_USER_NAME: ${{ secrets.DOCKER_USER_NAME }} + DOCKER_USER_PASSWORD: ${{ secrets.DOCKER_USER_PASSWORD }} + TESTRAIL_USER_PASSWORD: ${{ secrets.TESTRAIL_USER_PASSWORD }} + JFROG_USER_PASSWORD: ${{ secrets.JFROG_USER_PASSWORD }} + # AWS credentials + AWS_EKS_NAME: tip-wlan-main + AWS_DEFAULT_OUTPUT: json + AWS_DEFAULT_REGION: us-east-2 + AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_CLIENT_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_CLIENT_KEY }} + # Cloud SDK certs + CACERT: ${{ secrets.CACERT }} + CAKEY: ${{ secrets.CAKEY }} -on: +on: workflow_dispatch: schedule: - - cron: '15 0 * * *' + - cron: '15 0 * * *' jobs: build: runs-on: ubuntu-latest - container: 4c74356b41/cloud-sdk-nightly steps: - - name: Checkout + # checkout needed repositories + - name: Checkout Testing repo uses: actions/checkout@v2 with: path: wlan-testing - - name: Checkout LANforge scripts uses: actions/checkout@v2 with: + path: wlan-lanforge-scripts repository: Telecominfraproject/wlan-lanforge-scripts - token: ${{ secrets.GitHub_PAT }} # `GitHub_PAT` is a secret that contains your PAT - path: wlan-LANforge-scripts - + + # build and push docker image + - name: docker login + shell: bash + run: docker login ${{ env.DOCKER_SERVER }} -u ${{ env.DOCKER_USER_NAME }} -p ${{ env.DOCKER_USER_PASSWORD }} - name: build docker image shell: bash - run: ls -Rla; docker build -t tip/nightly -f wlan-testing/docker/Dockerfile + run: docker build -t ${{ env.DOCKER_SERVER }}/cloud-sdk-nightly:${{ github.run_id }} -f wlan-testing/docker/Dockerfile . + - name: push docker image + shell: bash + run: docker push ${{ env.DOCKER_SERVER }}/cloud-sdk-nightly:${{ github.run_id }} + + cloudsdk: + runs-on: ubuntu-latest + steps: + - name: Checkout pki scripts repo + uses: actions/checkout@v2 + with: + path: wlan-pki + repository: Telecominfraproject/wlan-pki-cert-scripts + ref: local/dev + - name: Checkout Cloud SDK repo + uses: actions/checkout@v2 + with: + path: wlan-helm + repository: Telecominfraproject/wlan-cloud-helm + - name: Checkout helm values repo + uses: actions/checkout@v2 + with: + path: toolsmith + repository: Telecominfraproject/Toolsmith + token: ${{ secrets.PAT_TOKEN }} + + - name: Prepare environment + shell: bash + run: | + mkdir ./wlan-helm/tip-wlan/resources/certs + mkdir -p ./wlan-pki/testCA/private + mkdir -p ./wlan-pki/testCA/newcerts + mkdir -p ./wlan-pki/generated + touch ./wlan-pki/testCA/index.txt + echo "01" > ./wlan-pki/testCA/serial.txt + echo "${{ env.CACERT }}" | base64 -d > ./wlan-pki/testCA/cacert.pem + echo "${{ env.CAKEY }}" | base64 -d > ./wlan-pki/testCA/private/cakey.pem + cp ./toolsmith/helm-values/aws-cicd.yaml ./wlan-helm/tip-wlan/resources/environments/aws-cicd.yaml + + - name: Generate certs + shell: bash + run: | + cd ./wlan-pki + ./generate_all.sh true + ./copy-certs-to-helm.sh "../wlan-helm" + + - name: Deploy Cloud SDK + shell: bash + run: | + cd ./wlan-helm/tip-wlan + aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} + # the 2 lines below are needed for the new flow only, not needed for the old one + # helm dependency update + # helm upgrade --install tip-wlan . -f resources/environments/aws-cicd.yaml --create-namespace -n tip + helm upgrade --install tip-wlan . -f resources/environments/aws-cicd.yaml --namespace default + + test: + runs-on: ubuntu-latest + needs: [ build, cloudsdk ] + steps: + - name: run tests + run: | + today=$(date +"%d-%m-%Y") + aws eks update-kubeconfig --name ${{ env.AWS_EKS_NAME }} + kubectl delete job nightly-ci-$today --wait=true --ignore-not-found=true + cat < if Latest FW not present, upload ### -############################################################################# - -###Check Latest FW Version on jfrog and CloudSDK for each model -for model in ap_models: - apModel = model - ###Check Latest FW on jFrog - jfrog_url = 'https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware/' - url = jfrog_url + apModel + "/dev/" - Build: GetBuild = GetBuild() - latest_image = Build.get_latest_image(url) - print(model,"Latest FW on jFrog:",latest_image) - ###Check images already on CloudSDK - firmware_list_by_model = CloudSDK.CloudSDK_images(apModel) - print("Available",apModel,"Firmware on CloudSDK:",firmware_list_by_model) - - if latest_image in firmware_list_by_model: - print("Latest Firmware",latest_image,"is on CloudSDK!") - ap_latest_dict[model] = latest_image - ap_updated_dict[model] = "Up to Date" - - else: - print("Latest Firmware is not on CloudSDK! Uploading...") - fw_url = "https://cicd_user:fepv6nj9guCPeEHC@tip.jfrog.io/artifactory/tip-wlan-ap-firmware/" + apModel + "/dev/" + latest_image + ".tar.gz" - #print(fw_url) - commit = latest_image.split("-")[-1] - fw_upload_status = CloudSDK.firwmare_upload(commit, apModel,latest_image,fw_url) - #print(fw_upload_status) - fw_id = fw_upload_status['id'] - print("Upload Complete.",latest_image,"FW ID is",fw_id) - ap_latest_dict[model] = latest_image - ap_updated_dict[model] = "Outdated" - - -sleep(1) -#print(ap_updated_dict) -if (ap_updated_dict["ea8300"] == "Up to Date") and (ap_updated_dict["ecw5410"] == "Up to Date"): - print("All AP FW loads up to date on CloudSDK") - logger.info("Newest builds on jfrog already loaded to CloudSDK") -else: - print("All new FW loads created on CloudSDK") - logger.info("New loads have been created on CloudSDK") -#print("Latest FW List:",ap_latest_dict) - -#################################################################################### -#################################################################################### -############ Update FW and Run Test Cases on Each AP Variant ####################### -#################################################################################### -#################################################################################### - -for key in equipment_id_dict: - ###Get Current AP Firmware and upgrade - customer_id = "2" - equipment_id = equipment_id_dict[key] - ap_fw = CloudSDK.ap_firmware(customer_id,equipment_id) - fw_model = ap_fw.partition("-")[0] - print("AP MODEL UNDER TEST IS", fw_model) - print ('Current AP Firmware:', ap_fw) - ###Find Latest FW for Current AP Model and Get FW ID - - latest_ap_image = ap_latest_dict[fw_model] - model_firmware_id = CloudSDK.get_firmware_id(latest_ap_image) - latest_firmware_id = str(model_firmware_id) - print("Latest FW ID is:",latest_firmware_id) - - ##Compare Latest and Current AP FW and Upgrade - if ap_fw == latest_ap_image: - print('FW does not require updating') - logger.info(fw_model + " does not require upgrade. Not performing sanity tests for this AP variant") - #raise SystemExit("No new FW loads available. Exiting Test...") - - else: - print('FW needs updating') - #Upgrade AP firmware - upgrade_fw = CloudSDK.update_firmware(equipment_id, latest_firmware_id) - logger.info("Lab "+fw_model+" Requires FW update") - time.sleep(300) - - ###Create Test Run - today = str(date.today()) - test_run_name = "Daily_Sanity_"+fw_model+"_"+today - client.create_testrun(name=test_run_name, case_ids=test_cases, project_id=projId) - rid = client.get_run_id(test_run_name="Daily_Sanity_"+fw_model+"_"+today) - - print("TIP run ID is:", rid) - - #Check if upgrade worked - ap_fw = CloudSDK.ap_firmware(customer_id, equipment_id) - print('Current AP Firmware:', ap_fw) - if ap_fw == latest_ap_image: - print("Upgrade Successful!") - client.update_testrail(case_id="2233", run_id=rid, status_id=1,msg='Upgrade successful') - logger.info("Lab "+fw_model+" upgrade SUCCESS. Proceeding with sanity testing for this AP variant") - else: - client.update_testrail(case_id="2233", run_id=rid, status_id=5, msg='Upgrade Failed') - logger.warning("Lab "+fw_model+" upgrade FAILED") - print("AP FW Upgrade Failed. Updating TestRail and skipping sanity testing for this AP variant...") - continue - - - ###Set Proper AP Profile - test_profile_id = profile_info_dict[fw_model]["profile_id"] - print(test_profile_id) - ap_profile = CloudSDK.set_ap_profile(equipment_id,test_profile_id) - - ###Run Client Single Connectivity Test Cases - #TC 2237 - 2.4 GHz WPA2 - test_case = "2237" - radio = "wiphy0" - station = ["sta2237"] - ssid_name = profile_info_dict[fw_model]["twoFourG_WPA2_SSID"] - ssid_psk = profile_info_dict[fw_model]["twoFourG_WPA2_PSK"] - security = "wpa2" - Test.Single_Client_Connectivity(radio, ssid_name, ssid_psk, security, station, test_case, rid) - - time.sleep(10) - - #TC 2420 - 2.4 GHz WPA - test_case = "2420" - radio = "wiphy0" - station = ["sta2420"] - ssid_name = profile_info_dict[fw_model]["twoFourG_WPA_SSID"] - ssid_psk = profile_info_dict[fw_model]["twoFourG_WPA_PSK"] - security = "wpa" - Test.Single_Client_Connectivity(radio, ssid_name, ssid_psk, security, station, test_case, rid) - - time.sleep(10) - - #TC 2234 - 2.4 GHz Open - test_case = "2234" - radio = "wiphy0" - station = ["sta2234"] - ssid_name = profile_info_dict[fw_model]["twoFourG_OPEN_SSID"] - ssid_psk = "BLANK" - security = "open" - Test.Single_Client_Connectivity(radio, ssid_name, ssid_psk, security, station, test_case, rid) - - time.sleep(10) - - #TC 2236 - 5 GHz WPA2 - test_case = "2236" - radio = "wiphy3" - station = ["sta2236"] - ssid_name = profile_info_dict[fw_model]["fiveG_WPA2_SSID"] - ssid_psk = profile_info_dict[fw_model]["fiveG_WPA2_PSK"] - security = "wpa2" - Test.Single_Client_Connectivity(radio, ssid_name, ssid_psk, security, station, test_case, rid) - - time.sleep(10) - - #TC 2419 - 5 GHz WPA - test_case = "2419" - radio = "wiphy3" - station = ["sta2419"] - ssid_name = profile_info_dict[fw_model]["fiveG_WPA_SSID"] - ssid_psk = profile_info_dict[fw_model]["fiveG_WPA_PSK"] - security = "wpa" - Test.Single_Client_Connectivity(radio, ssid_name, ssid_psk, security, station, test_case, rid) - - time.sleep(10) - - #TC 2235 - 5 GHz Open - test_case = "2235" - radio = "wiphy3" - station = ["sta2235"] - ssid_name = profile_info_dict[fw_model]["fiveG_OPEN_SSID"] - ssid_psk = "BLANK" - security = "open" - Test.Single_Client_Connectivity(radio, ssid_name, ssid_psk, security, station, test_case, rid) - -print(".....End of Sanity Test.....") -logger.info("End of Sanity Test run") \ No newline at end of file diff --git a/cicd/jfrog.pl b/cicd/jfrog.pl index 34a6a6fc9..86493ac64 100755 --- a/cicd/jfrog.pl +++ b/cicd/jfrog.pl @@ -12,7 +12,7 @@ use Getopt::Long; my $user = "cicd_user"; my $passwd = ""; my $url = "https://tip.jfrog.io/artifactory/tip-wlan-ap-firmware"; -my @platforms = ("ea8300", "ecw5410", "ecw5211", "ec420"); # Add more here as we have test beds that support them. +my @platforms = ("ea8300", "ecw5410", "ecw5211", "ec420", "eap102"); # Add more here as we have test beds that support them. my $files_processed = "jfrog_files_processed.txt"; my $tb_url_base = "cicd_user\@tip.cicd.cloud.com/testbeds"; # Used by SSH: scp -R results_dir cicd_user@tip.cicd.cloud.com/testbeds/ my $help = 0; diff --git a/cicd/nola-basic-12/TESTBED_INFO.txt b/cicd/nola-basic-12/TESTBED_INFO.txt new file mode 100644 index 000000000..9f5522ce9 --- /dev/null +++ b/cicd/nola-basic-12/TESTBED_INFO.txt @@ -0,0 +1,8 @@ +TESTBED_HW=eap102 +TESTBED_NAME=NOLA-12 + +# Controller's view of the test bed, from wlan-testing/cicd/[testbed] directory +TESTBED_DIR=../../testbeds/nola-basic-12 + +#TESTBED_CASEID_FAST=C1308 +#TESTBED_CASEID_BASIC=C1309 diff --git a/cicd/nola-basic-12/loop.bash b/cicd/nola-basic-12/loop.bash new file mode 100755 index 000000000..bc680ab3e --- /dev/null +++ b/cicd/nola-basic-12/loop.bash @@ -0,0 +1,8 @@ +#!/bin/bash + +while true +do + ../testbed_poll.pl --jfrog_passwd tip-read --jfrog_user tip-read --url http://orch/tip/testbeds/nola-basic-12/pending_work/ --dut_passwd openwifi --dut_user root + sleep 120 +done + diff --git a/cicd/nola-basic-13/TESTBED_INFO.txt b/cicd/nola-basic-13/TESTBED_INFO.txt new file mode 100644 index 000000000..820bc53a4 --- /dev/null +++ b/cicd/nola-basic-13/TESTBED_INFO.txt @@ -0,0 +1,8 @@ +TESTBED_HW=eap102 +TESTBED_NAME=NOLA-13 + +# Controller's view of the test bed, from wlan-testing/cicd/[testbed] directory +TESTBED_DIR=../../testbeds/nola-basic-13 + +#TESTBED_CASEID_FAST=C1308 +#TESTBED_CASEID_BASIC=C1309 diff --git a/cicd/nola-basic-13/loop.bash b/cicd/nola-basic-13/loop.bash new file mode 100755 index 000000000..50f30df0a --- /dev/null +++ b/cicd/nola-basic-13/loop.bash @@ -0,0 +1,8 @@ +#!/bin/bash + +while true +do + ../testbed_poll.pl --jfrog_passwd tip-read --jfrog_user tip-read --url http://orch/tip/testbeds/nola-basic-13/pending_work/ --dut_passwd openwifi --dut_user root + sleep 120 +done + diff --git a/cicd/nola-basic-14/TESTBED_INFO.txt b/cicd/nola-basic-14/TESTBED_INFO.txt new file mode 100644 index 000000000..18610f0ed --- /dev/null +++ b/cicd/nola-basic-14/TESTBED_INFO.txt @@ -0,0 +1,8 @@ +TESTBED_HW=eap102 +TESTBED_NAME=NOLA-14 + +# Controller's view of the test bed, from wlan-testing/cicd/[testbed] directory +TESTBED_DIR=../../testbeds/nola-basic-14 + +#TESTBED_CASEID_FAST=C1308 +#TESTBED_CASEID_BASIC=C1309 diff --git a/cicd/nola-basic-14/loop.bash b/cicd/nola-basic-14/loop.bash new file mode 100755 index 000000000..2d268a657 --- /dev/null +++ b/cicd/nola-basic-14/loop.bash @@ -0,0 +1,8 @@ +#!/bin/bash + +while true +do + ../testbed_poll.pl --jfrog_passwd tip-read --jfrog_user tip-read --url http://orch/tip/testbeds/nola-basic-14/pending_work/ --dut_passwd openwifi --dut_user root + sleep 120 +done + diff --git a/cicd/nola-basic-15/TESTBED_INFO.txt b/cicd/nola-basic-15/TESTBED_INFO.txt new file mode 100644 index 000000000..754466a69 --- /dev/null +++ b/cicd/nola-basic-15/TESTBED_INFO.txt @@ -0,0 +1,8 @@ +TESTBED_HW=ecw5410 +TESTBED_NAME=NOLA-15 + +# Controller's view of the test bed, from wlan-testing/cicd/[testbed] directory +TESTBED_DIR=../../testbeds/nola-basic-15 + +#TESTBED_CASEID_FAST=C1308 +#TESTBED_CASEID_BASIC=C1309 diff --git a/cicd/nola-basic-15/loop.bash b/cicd/nola-basic-15/loop.bash new file mode 100755 index 000000000..b7313265d --- /dev/null +++ b/cicd/nola-basic-15/loop.bash @@ -0,0 +1,8 @@ +#!/bin/bash + +while true +do + ../testbed_poll.pl --jfrog_passwd tip-read --jfrog_user tip-read --url http://orch/tip/testbeds/nola-basic-15/pending_work/ --dut_passwd openwifi --dut_user root + sleep 120 +done + diff --git a/cicd/testbed_poll.pl b/cicd/testbed_poll.pl index c0e4afbc0..bca7df792 100755 --- a/cicd/testbed_poll.pl +++ b/cicd/testbed_poll.pl @@ -16,6 +16,9 @@ my $url = ""; my $next_info = "__next_test.txt"; my $help = 0; my $owt_log = ""; +my $dut_passwd = ""; +my $dut_user = "root"; +my $sysupgrade_n = 0; #my $prompt = "root\@OpenAp"; my $prompt = "root\@Open"; # match OpenWrt and OpenAp-foo my $log = ""; @@ -25,13 +28,16 @@ my $usage = qq($0 [--jfrog_passwd { jfrog password } [--user { for accessing URL } [--passwd { for accessing URL } + [--dut_user { for accessing DUT } + [--dut_passwd { for accessing DUT } [--url { test-orchestrator URL for this test bed } [--next_info { output text file containing info about the next test to process } + [--sysupgrade-n { 0 | 1 } 1 means use the -n option when doing sysupgrade. [--log {location} For instance: --log stdout, for openwrt_ctl expect script. Example: $0 --user to_user --passwd secret --jfrog_user tip-read --jfrog_passwd tip-read \\ - --url https://tip.cicd.mycloud.com/testbed-ferndale-01/ + --url https://tip.cicd.mycloud.com/testbed-ferndale-01/ --dut_passwd owrt --dut_user root # Use specific scenario file. SCENARIO_CFG_FILE=/home/lanforge/git/wlan-testing/testbeds/ferndale-basic-01/scenario_small.txt \\ @@ -46,8 +52,11 @@ GetOptions 'jfrog_passwd=s' => \$jfrog_passwd, 'user=s' => \$user, 'passwd=s' => \$passwd, + 'dut_passwd=s' => \$dut_passwd, + 'dut_user=s' => \$dut_user, 'url=s' => \$url, 'next_info=s' => \$next_info, + 'sysupgrade_n=i' => \$sysupgrade_n, 'log=s' => \$log, 'help|?' => \$help, ) || (print($usage) && exit(1)); @@ -70,6 +79,15 @@ if ($log ne "") { $owt_log = "--log $log"; } my $owt_args = " --prompt $prompt"; + +if ($dut_user ne "") { + $owt_args .= " --user $dut_user"; +} + +if ($dut_passwd ne "") { + $owt_args .= " --passwd $dut_passwd"; +} + $owt_log .= $owt_args; my $i; @@ -187,7 +205,7 @@ for ($i = 0; $i<@lines; $i++) { do_system($cmd); do_system("rm -f openwrt-*.bin"); - do_system("rm -f *sysupgrade.bin"); # just in case openwrt prefix changes. + do_system("rm -f *sysupgrade.*"); # just in case openwrt prefix changes. do_system("tar xf $jfile"); print_note("Copy AP build to LANforge so LANforge can serve the file to AP"); @@ -247,7 +265,7 @@ for ($i = 0; $i<@lines; $i++) { # and then get it onto the DUT, reboot DUT, re-configure as needed, print_note("Request AP DUT to install the test image."); - do_system("scp *sysupgrade.bin lanforge\@$lfmgr:tip-$jfile"); + do_system("scp *sysupgrade.* lanforge\@$lfmgr:tip-$jfile"); # TODO: Kill anything using the serial port @@ -317,7 +335,13 @@ for ($i = 0; $i<@lines; $i++) { print_note("Request AP DUT to install the test image and reboot."); # TODO: Change this to curl download?? - my $ap_out = do_system("../../lanforge/lanforge-scripts/openwrt_ctl.py $owt_log --scheme serial --tty $serial --action sysupgrade --value \"lanforge\@$ap_gw:tip-$jfile\""); + my $ap_out; + if ($sysupgrade_n) { + $ap_out = do_system("../../lanforge/lanforge-scripts/openwrt_ctl.py $owt_log --scheme serial --tty $serial --action sysupgrade-n --value \"lanforge\@$ap_gw:tip-$jfile\""); + } + else { + $ap_out = do_system("../../lanforge/lanforge-scripts/openwrt_ctl.py $owt_log --scheme serial --tty $serial --action sysupgrade --value \"lanforge\@$ap_gw:tip-$jfile\""); + } print ("Sys-upgrade results:\n$ap_out\n"); if ($ap_out =~ /pexpect.exceptions.TIMEOUT/) { print("FATAL-ERROR: DUT is in bad state, bail out.\n"); diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 000000000..2989edc6f --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,15 @@ +FROM python:3.8 +WORKDIR /ci + +RUN apt update && apt install vim -y && rm -rf /var/lib/apt/lists/* +RUN pip3 install requests + +COPY wlan-lanforge-scripts/py-json/LANforge /ci/LANforge +COPY wlan-lanforge-scripts/py-json/realm.py /ci +COPY wlan-lanforge-scripts/py-json/generic_cx.py /ci +COPY wlan-lanforge-scripts/py-scripts/sta_connect2.py /ci +COPY wlan-lanforge-scripts/py-scripts/__init__.py /ci +COPY wlan-testing/docker/nightly.py /ci +COPY wlan-testing/docker/nightly_test_config.json /ci + +ENTRYPOINT [ "/ci/nightly.py" ] diff --git a/docker/nightly.py b/docker/nightly.py new file mode 100755 index 000000000..3944c29a8 --- /dev/null +++ b/docker/nightly.py @@ -0,0 +1,437 @@ +#!/usr/local/bin/python3 + +import re +import requests +import json +import logging +import argparse +from time import sleep, gmtime, strftime +from unittest.mock import Mock + +# the below hack is only needed for local dev +# This should be replaced with a module and added to dockerfile +import sys +for folder in 'py-json','py-scripts': + if folder not in sys.path: + sys.path.append(f'../lanforge/lanforge/{folder}') + +from LANforge.LFUtils import * +from sta_connect2 import StaConnect2 + +# Run from remote dev machine on ssh tunnel through to LANforge in TIP Lab, without testrails being used. +# SSH tunnel created with login to orchestrator with option: -L 10080:lf1:8080 +# python3 ./nightly.py --skip-update-firmware --no-testrails --lanforge-ip-address localhost --lanforge-port-number 10080 + +parser = argparse.ArgumentParser() +parser.add_argument("--sdk-base-url", type=str, help="cloudsdk base url", + default="https://wlan-portal-svc.cicd.lab.wlan.tip.build") +parser.add_argument("--sdk-user-id", type=str, help="cloudsdk user id", + default="support@example.com") +parser.add_argument("--sdk-user-password", type=str, help="cloudsdk user password", + default="support") +parser.add_argument("--jfrog-base-url", type=str, help="jfrog base url", + default="tip.jFrog.io/artifactory/tip-wlan-ap-firmware") +parser.add_argument("--jfrog-user-id", type=str, help="jfrog user id", + default="tip-read") +parser.add_argument("--jfrog-user-password", type=str, help="jfrog user password", + default="tip-read") +parser.add_argument("--testrail-base-url", type=str, help="testrail base url", + default="https://telecominfraproject.testrail.com") +parser.add_argument("--testrail-project", type=str, help="testrail project name", + default="opsfleet-wlan") +parser.add_argument("--testrail-user-id", type=str, help="testrail user id", + default="gleb@opsfleet.com") +parser.add_argument("--testrail-user-password", type=str, help="testrail user password", + default="password") +parser.add_argument("--lanforge-ip-address", type=str, help="ip address of the lanforge gui", + default="10.28.3.6") +parser.add_argument("--lanforge-port-number", type=str, help="port of the lanforge gui", + default="8080") +parser.add_argument('--skip-update-firmware', dest='update_firmware', action='store_false') +parser.add_argument('--no-testrails', dest='use_testrails', action='store_false') +parser.set_defaults(update_firmware=True) +parser.set_defaults(use_testrails=True) +command_line_args = parser.parse_args() + +logging.basicConfig(level=logging.DEBUG, + format="%(asctime)s %(levelname)-8s %(message)s file:%(pathname)s line:%(lineno)d", + datefmt="%m-%d %H:%M", + filename="nightly_cicd_sanity.log", + filemode="a") +formatter = logging.Formatter("%(asctime)s %(levelname)-8s %(message)s") +console = logging.StreamHandler() +console.setLevel(logging.INFO) +console.setFormatter(formatter) +logging.getLogger().addHandler(console) +logging.info("------------------------") +logging.info("nightly sanity run start") + +# ap details, test data and test config +with open("nightly_test_config.json") as json_file: + TEST_DATA = json.load(json_file) +TESTRAIL = { + True: { + "statusCode": 1, # status_id is 1 for Passed, 2 For Blocked, 4 for Retest, 5 for Failed + "message": "success" + }, + False: { + "statusCode": 5, + "message": "failure" + } +} + +# Class to interact with Testrail; better to replace this with pytest\nunit +class TestRail_Client: + def __new__(cls, *args, **kwargs): + if command_line_args.use_testrails: + return super().__new__(cls, *args, **kwargs) + else: + mock = Mock() + mock.get_project_id.return_value = -1 + mock.create_testrun.return_value = -1 + return mock + + def __init__(self): + self.user = command_line_args.testrail_user_id + self.password = command_line_args.testrail_user_password + self.__url = f"{command_line_args.testrail_base_url}/index.php?/api/v2/" + + def send_get(self, uri, filepath=None): + """Issue a GET request (read) against the API. + + Args: + uri: The API method to call including parameters, e.g. get_case/1. + filepath: The path and file name for attachment download; used only + for "get_attachment/:attachment_id". + + Returns: + A dict containing the result of the request. + """ + return self.__send_request("GET", uri, filepath) + + def send_post(self, uri, data): + """Issue a POST request (write) against the API. + + Args: + uri: The API method to call, including parameters, e.g. add_case/1. + data: The data to submit as part of the request as a dict; strings + must be UTF-8 encoded. If adding an attachment, must be the + path to the file. + + Returns: + A dict containing the result of the request. + """ + return self.__send_request("POST", uri, data) + + def __send_request(self, method, uri, data): + url = self.__url + uri + headers = { + "Content-Type": "application/json" + } + logging.debug(f"Method: {method}; Url: {url}; Data: {data}") + + if method == "POST": + if uri[:14] == "add_attachment": # add_attachment API method + files = { "attachment": open(data, "rb") } + response = requests.post(url, headers=headers, files=files, auth=(self.user, self.password)) + files["attachment"].close() + else: + payload = bytes(json.dumps(data), "utf-8") + response = requests.post(url, headers=headers, data=payload, auth=(self.user, self.password)) + else: + response = requests.get(url, headers=headers, auth=(self.user, self.password)) + logging.debug(f"headers: {headers}; response: {response.text}; response code: {response.status_code}") + + if response.status_code > 201: + try: + error = response.json() + except: # response.content not formatted as JSON + error = str(response.content) + logging.info(f"TestRail API returned HTTP status code {response.status_code} with the following: ({error})") + return + else: + logging.debug(uri[:15]) + if uri[:15] == "get_attachments": # Expecting file, not JSON + try: + logging.info (str(response.content)) + open(data, "wb").write(response.content) + return (data) + except: + return ("Error saving attachment.") + else: + try: + return response.json() + except: # Nothing to return + return {} + + def get_project_id(self, project_name): + "Get the project ID using project name" + projects = testrail.send_get("get_projects") + logging.debug(projects) + for project in projects: + if project["name"] == project_name: + return project["id"] + + def update_testrail(self, case_id, run_id, status_id, msg): + logging.info(f"Update TestRail; result status: {status_id}; case id: {case_id}; run id: {run_id}") + if run_id is not None: + try: + result = testrail.send_post( + f"add_result_for_case/{run_id}/{case_id}", + { "status_id": status_id, "comment": msg } + ) + logging.info(f"Updating TestRail result: {result}") + except Exception as e: + logging.info(f"Exception in update_testrail(): {e}") + else: + logging.info(f"Updated test result for case: {case_id} in test run: {run_id} with msg: {msg}") + + def create_testrun(self, name, case_ids, project_id): + result = testrail.send_post( + f"add_run/{project_id}", + {"name": name, "case_ids": case_ids, "include_all": False} + ) + logging.debug(result) + return result["id"] + +# Class for jFrog Interaction +class jFrog_Client: + def __init__(self): + self.user = command_line_args.jfrog_user_id + self.password = command_line_args.jfrog_user_password + self.baseUrl = command_line_args.jfrog_base_url + + def get_latest_image(self, model): + # todo handle auth errors + logging.debug(f"searching for the latest firmware on url: {model}") + response = requests.get(f"https://{self.baseUrl}/{model}/dev/", auth=(self.user, self.password)) + return re.findall('href="(.+pending.+).tar.gz"', response.text)[-1] + + def get_latest_image_url(self, model, latest_image): + return f"https://{self.user}:{self.password}@{self.baseUrl}/{model}/dev/{latest_image}.tar.gz" + +# Class for CloudSDK Interaction via RestAPI +class CloudSDK_Client: + def __init__(self): + self.baseUrl = command_line_args.sdk_base_url + cloud_login_url = f"{self.baseUrl}/management/v1/oauth2/token" + payload = { + "userId": command_line_args.sdk_user_id, + "password": command_line_args.sdk_user_password + } + headers = { + "Content-Type": "application/json" + } + try: + token_response = requests.post(cloud_login_url, headers=headers, data=json.dumps(payload)) + except requests.exceptions.RequestException as e: + raise SystemExit(f"Exiting Script! Cloud not get bearer token for reason: {e}") + token_data = token_response.json() + self.headers = { + "Authorization": f"Bearer {token_data['access_token']}" + } + + def ap_firmware(self, customer_id, equipment_id): + equip_fw_url = f"{self.baseUrl}/portal/status/forEquipment?customerId={customer_id}&equipmentId={equipment_id}&statusDataTypes=" + status_response = requests.get(equip_fw_url, headers=self.headers) + logging.debug(status_response.json()) + return (status_response.json())[2]["details"]["reportedSwVersion"] + + def get_images(self, apModel): + getFW_url = f"{self.baseUrl}/portal/firmware/version/byEquipmentType?equipmentType=AP&modelId={apModel}" + status_response = requests.get(getFW_url, headers=self.headers) + logging.debug(status_response.json()) + return([ version.get("versionName") for version in status_response.json()]) + + def firwmare_upload(self, apModel, latest_image, fw_url): + fw_upload_url = f"{self.baseUrl}/portal/firmware/version" + payload = { + "model_type": "FirmwareVersion", + "id": 0, + "equipmentType": "AP", + "modelId": apModel, + "versionName": latest_image, + "description": "", + "filename": fw_url, + "commit": latest_image.split("-")[-1], + "validationMethod": "MD5_CHECKSUM", + "validationCode": "19494befa87eb6bb90a64fd515634263", + "releaseDate": 1596192028877, + "createdTimestamp": 0, + "lastModifiedTimestamp": 0 + } + self.headers["Content-Type"] = "application/json" + response = requests.post(fw_upload_url, headers=self.headers, data=json.dumps(payload)) + self.headers.pop("Content-Type", None) + logging.debug(response) + return(response.json()) + + def get_firmware_id(self, latest_ap_image): + logging.debug(latest_ap_image) + fw_id_url = f"{self.baseUrl}/portal/firmware/version/byName?firmwareVersionName={latest_ap_image}" + response = requests.get(fw_id_url, headers=self.headers) + fw_data = response.json() + return fw_data["id"] + + def update_firmware(self, equipment_id, latest_firmware_id): + url = f"{self.baseUrl}/portal/equipmentGateway/requestFirmwareUpdate?equipmentId={equipment_id}&firmwareVersionId={latest_firmware_id}" + response = requests.post(url, headers=self.headers) + logging.info(response.text) + + def set_ap_profile(self, equipment_id, test_profile_id): + url = f"{self.baseUrl}/portal/equipment?equipmentId={equipment_id}" + response = requests.get(url, headers=self.headers) + logging.debug(response.json()) + + # Add Lab Profile ID to Equipment + equipment_info = response.json() + logging.debug(equipment_info) + equipment_info["profileId"] = test_profile_id + logging.debug(equipment_info) + + # Update AP Info with Required Profile ID + url = f"{self.baseUrl}/portal/equipment" + self.headers["Content-Type"] = "application/json" + response = requests.put(url, headers=self.headers, data=json.dumps(equipment_info)) + self.headers.pop("Content-Type", None) + logging.debug(response.text) + +# instantiate clients and configuration +sdk: CloudSDK_Client = CloudSDK_Client() +testrail: TestRail_Client = TestRail_Client() +jFrog: jFrog_Client = jFrog_Client() + +# 1. Find Latest firmware on jFrog for each AP Model +# 2. Find Available firmware on CloudSDK +# 3. If Latest firmware not present, upload +# 4. Update Firmware on each AP Model +# 5. Run tests +for model in TEST_DATA["ap_models"].keys(): + # Get latest firmware on jFrog and Cloud SDK + latest_image = jFrog.get_latest_image(model) + firmware_list_by_model = sdk.get_images(model) + logging.info(f"Model: {model}; Latest firmware on jFrog: {latest_image}; Latest firmware on Cloud SDK: {firmware_list_by_model}") + + if latest_image in firmware_list_by_model: + logging.info(f"Latest firmware {latest_image} present on CloudSDK!") + TEST_DATA["ap_models"][model]["firmware"] = latest_image + else: + logging.info(f"Uploading {latest_image} firmware to CloudSDK") + fw_url = jFrog.get_latest_image_url(model, latest_image) + fw_upload_status = sdk.firwmare_upload(model, latest_image, fw_url) + logging.info(f"Upload Complete. {latest_image}; firmware ID is {fw_upload_status['id']}") + TEST_DATA["ap_models"][model]["firmware"] = latest_image + + # Get Current AP Firmware and upgrade + ap_fw = sdk.ap_firmware(TEST_DATA["customer_id"], TEST_DATA["ap_models"][model]["id"]) + fw_model = ap_fw.partition("-")[0] + latest_ap_image = TEST_DATA["ap_models"][fw_model]["firmware"] + model_firmware_id = sdk.get_firmware_id(latest_ap_image) + logging.info(f"Firmware: {ap_fw}; latest firmware ID is: {model_firmware_id}") + + if ap_fw == latest_ap_image and command_line_args.update_firmware: + logging.info("Model does not require firmware upgrade, skipping sanity tests") + else: + if command_line_args.update_firmware: + firmware_update_case = [2831] + logging.info("Model requires firmware update, will update and sleep") + sdk.update_firmware(TEST_DATA["ap_models"][model]["id"], model_firmware_id) + sleep(300) + else: + firmware_update_case = [] + + test_cases_data = { + 2832: { # 2.4 GHz Open + "radio": "wiphy4", + "station": ["sta2234"], + "ssid_name": TEST_DATA["ap_models"][fw_model]["info"]["twoFourG_OPEN_SSID"], + "ssid_psk": "BLANK", + "security": "open" + }, + 2835: { # 2.4 GHz WPA2 + "radio": "wiphy4", + "station": ["sta2237"], + "ssid_name": TEST_DATA["ap_models"][fw_model]["info"]["twoFourG_WPA2_SSID"], + "ssid_psk": TEST_DATA["ap_models"][fw_model]["info"]["twoFourG_WPA2_PSK"], + "security": "wpa2" + }, + 2833: { # 5 GHz Open + "radio": "wiphy3", + "station": ["sta2235"], + "ssid_name": TEST_DATA["ap_models"][fw_model]["info"]["fiveG_OPEN_SSID"], + "ssid_psk": "BLANK", + "security": "open" + }, + 2834: { # 5 GHz WPA2 + "radio": "wiphy3", + "station": ["sta2236"], + "ssid_name": TEST_DATA["ap_models"][fw_model]["info"]["fiveG_WPA2_SSID"], + "ssid_psk": TEST_DATA["ap_models"][fw_model]["info"]["fiveG_WPA2_PSK"], + "security": "wpa2" + }, + 2836: { # 5 GHz WPA + "radio": "wiphy3", + "station": ["sta2419"], + "ssid_name": TEST_DATA["ap_models"][fw_model]["info"]["fiveG_WPA_SSID"], + "ssid_psk": TEST_DATA["ap_models"][fw_model]["info"]["fiveG_WPA_PSK"], + "security": "wpa" + }, + 2837: { # 2.4 GHz WPA + "radio": "wiphy0", + "station": ["sta2420"], + "ssid_name": TEST_DATA["ap_models"][fw_model]["info"]["twoFourG_WPA_SSID"], + "ssid_psk": TEST_DATA["ap_models"][fw_model]["info"]["twoFourG_WPA_PSK"], + "security": "wpa" + } + } + + # Create Test Run + test_run_name = f'Nightly_model_{fw_model}_firmware_{ap_fw}_{strftime("%Y-%m-%d", gmtime())}' + testrail_project_id = testrail.get_project_id(project_name=command_line_args.testrail_project) + runId = testrail.create_testrun(name=test_run_name, case_ids=( [*test_cases_data] + firmware_update_case ), project_id=testrail_project_id) + logging.info(f"Testrail project id: {testrail_project_id}; run ID is: {runId}") + + # Check if upgrade worked + if command_line_args.update_firmware: + results = TESTRAIL[(sdk.ap_firmware(TEST_DATA["customer_id"], TEST_DATA["ap_models"][model]["id"]) == latest_ap_image)] + testrail.update_testrail(case_id="2831", run_id=runId, status_id=results["statusCode"], msg=f"Upgrade {results['message']}") + logging.info(f"Upgrade {results['statusCode']}") + if not test_result: + continue + + # Set Proper AP Profile + test_profile_id = TEST_DATA["ap_models"][fw_model]["info"]["profile_id"] + sdk.set_ap_profile(TEST_DATA["ap_models"][model]["id"], test_profile_id) + logging.info(f"Test profile id: {test_profile_id}") + + # Run Client Single Connectivity Test Cases + for testcase in test_cases_data.keys(): + if test_cases_data[testcase]["ssid_name"] != "skip": + logging.info(f"Test parameters are:\n radio = {test_cases_data[testcase]['radio']}\n ssid_name = {test_cases_data[testcase]['ssid_name']}\n ssid_psk = {test_cases_data[testcase]['ssid_psk']}\n security = {test_cases_data[testcase]['security']}\n station = {test_cases_data[testcase]['station']}\n testcase = {testcase}") + staConnect = StaConnect2(command_line_args.lanforge_ip_address, command_line_args.lanforge_port_number, debug_ = False) + staConnect.sta_mode = 0 + staConnect.upstream_resource = 1 + staConnect.upstream_port = "eth2" + staConnect.radio = test_cases_data[testcase]["radio"] + staConnect.resource = 1 + staConnect.dut_ssid = test_cases_data[testcase]["ssid_name"] + staConnect.dut_passwd = test_cases_data[testcase]["ssid_psk"] + staConnect.dut_security = test_cases_data[testcase]["security"] + staConnect.station_names = test_cases_data[testcase]["station"] + staConnect.runtime_secs = 30 + staConnect.clean_all_sta = True + staConnect.cleanup_on_exit = True + staConnect.setup() + staConnect.start() + logging.info(f"sleeping {staConnect.runtime_secs} seconds") + sleep(staConnect.runtime_secs) + staConnect.stop() + staConnect.cleanup() + for result in staConnect.get_result_list(): + logging.info(f"test result: {result}") + results = TESTRAIL[staConnect.passes()] + logging.info(f"Single client connection to {test_cases_data[testcase]['ssid_name']} successful. Test {results['message']}") + testrail.update_testrail(case_id=testcase, run_id=runId, status_id=results["statusCode"], msg=f"Test {results['message']}") + +logging.info("----------------------") +logging.info("End of Sanity Test run") diff --git a/docker/nightly_test_config.json b/docker/nightly_test_config.json new file mode 100644 index 000000000..e3075c9f2 --- /dev/null +++ b/docker/nightly_test_config.json @@ -0,0 +1,22 @@ +{ + "customer_id": "2", + "ap_models": { + "ecw5410": { + "id": "1", + "firmware": "unknown", + "info": { + "profile_id": "6", + "fiveG_WPA2_SSID": "skip", + "fiveG_WPA2_PSK": "w1r3l3ss-fr33d0m", + "fiveG_WPA_SSID": "skip", + "fiveG_WPA_PSK": "w1r3l3ss-fr33d0m", + "fiveG_OPEN_SSID": "skip", + "twoFourG_OPEN_SSID": "skip", + "twoFourG_WPA2_SSID": "TipWlan-cloud-wifi", + "twoFourG_WPA2_PSK": "w1r3l3ss-fr33d0m", + "twoFourG_WPA_SSID": "skip", + "twoFourG_WPA_PSK": "w1r3l3ss-fr33d0m" + } + } + } +} \ No newline at end of file diff --git a/testbeds/nola-basic-12/NOTES.txt b/testbeds/nola-basic-12/NOTES.txt new file mode 100644 index 000000000..9fec63916 --- /dev/null +++ b/testbeds/nola-basic-12/NOTES.txt @@ -0,0 +1,2 @@ + +DUT is an EAP-102 wifi-6, running TIP OpenWrt. diff --git a/testbeds/nola-basic-12/OpenWrt-overlay/etc/config/bugcheck b/testbeds/nola-basic-12/OpenWrt-overlay/etc/config/bugcheck new file mode 100644 index 000000000..b138a6fad --- /dev/null +++ b/testbeds/nola-basic-12/OpenWrt-overlay/etc/config/bugcheck @@ -0,0 +1,2 @@ +DO_BUGCHECK=1 +export DO_BUGCHECK diff --git a/testbeds/nola-basic-12/OpenWrt-overlay/etc/config/wireless b/testbeds/nola-basic-12/OpenWrt-overlay/etc/config/wireless new file mode 100644 index 000000000..31e9743ad --- /dev/null +++ b/testbeds/nola-basic-12/OpenWrt-overlay/etc/config/wireless @@ -0,0 +1,34 @@ +config wifi-device 'radio0' + option type 'mac80211' + option channel '36' + option hwmode '11a' + option path 'platform/soc/c000000.wifi1' + option htmode 'HE80' + option disabled '0' + +config wifi-iface 'default_radio0' + option device 'radio0' + option network 'lan' + option mode 'ap' + option ssid 'Default-SSID-5gl' + option encryption 'psk-mixed' + option key '12345678' + option macaddr '00:00:ea:D2:01:01' + +config wifi-device 'radio1' + option type 'mac80211' + option channel '11' + option hwmode '11g' + option path 'platform/soc/c000000.wifi1+1' + option htmode 'HE20' + option disabled '0' + +config wifi-iface 'default_radio1' + option device 'radio1' + option network 'lan' + option mode 'ap' + option ssid 'Default-SSID-2g' + option encryption 'psk-mixed' + option key '12345678' + option macaddr '00:00:ea:92:01:01' + diff --git a/testbeds/nola-basic-12/ap-auto.txt b/testbeds/nola-basic-12/ap-auto.txt new file mode 100644 index 000000000..0d3b14a58 --- /dev/null +++ b/testbeds/nola-basic-12/ap-auto.txt @@ -0,0 +1,120 @@ +[BLANK] +show_events: 1 +show_log: 0 +port_sorting: 0 +kpi_id: AP Auto +bg: 0xE0ECF8 +test_rig: NOLA-12-Basic +show_scan: 1 +auto_helper: 1 +skip_2: 1 +skip_5: 1 +skip_5b: 1 +skip_dual: 0 +skip_tri: 1 +dut5b-0: NA +dut5-0: TIP Default-SSID-5gl +dut2-0: TIP Default-SSID-2g +dut5b-1: NA +dut5-1: NA +dut2-1: NA +dut5b-2: NA +dut5-2: NA +dut2-2: NA +spatial_streams: AUTO +bandw_options: AUTO +modes: Auto +upstream_port: 1.1.2 eth2 +operator: +mconn: 1 +tos: 0 +vid_buf: 1000000 +vid_speed: 700000 +reset_stall_thresh_udp_dl: 9600 +cx_prcnt: 950000 +cx_open_thresh: 35 +cx_psk_thresh: 75 +cx_1x_thresh: 130 +reset_stall_thresh_udp_ul: 9600 +reset_stall_thresh_tcp_dl: 9600 +reset_stall_thresh_tcp_ul: 9600 +reset_stall_thresh_l4: 100000 +reset_stall_thresh_voip: 20000 +stab_mcast_dl_min: 100000 +stab_mcast_dl_max: 0 +stab_udp_dl_min: 56000 +stab_udp_dl_max: 0 +stab_udp_ul_min: 56000 +stab_udp_ul_max: 0 +stab_tcp_dl_min: 500000 +stab_tcp_dl_max: 0 +stab_tcp_ul_min: 500000 +stab_tcp_ul_max: 0 +dl_speed: 85% +ul_speed: 85% +max_stations_2: 65 +max_stations_5: 67 +max_stations_5b: 64 +max_stations_dual: 132 +max_stations_tri: 64 +lt_sta: 2 +voip_calls: 0 +lt_dur: 3600 +reset_dur: 600 +lt_gi: 30 +dur20: 20 +hunt_retries: 1 +hunt_iter: 100 +bind_bssid: 1 +set_txpower_default: 0 +cap_dl: 1 +cap_ul: 0 +cap_use_pkt_sizes: 0 +stability_reset_radios: 0 +stability_use_pkt_sizes: 0 +pkt_loss_thresh: 10000 +frame_sizes: 200, 512, 1024, MTU +capacities: 1, 2, 5, 10, 20, 40, 64, 128, 256, 512, 1024, MAX +pf_text0: 2.4 DL 200 70Mbps +pf_text1: 2.4 DL 512 110Mbps +pf_text2: 2.4 DL 1024 115Mbps +pf_text3: 2.4 DL MTU 120Mbps +pf_text4: +pf_text5: 2.4 UL 200 88Mbps +pf_text6: 2.4 UL 512 106Mbps +pf_text7: 2.4 UL 1024 115Mbps +pf_text8: 2.4 UL MTU 120Mbps +pf_text9: +pf_text10: 5 DL 200 72Mbps +pf_text11: 5 DL 512 185Mbps +pf_text12: 5 DL 1024 370Mbps +pf_text13: 5 DL MTU 525Mbps +pf_text14: +pf_text15: 5 UL 200 90Mbps +pf_text16: 5 UL 512 230Mbps +pf_text17: 5 UL 1024 450Mbps +pf_text18: 5 UL MTU 630Mbps +radio2-0: 1.1.4 wiphy2 +radio2-1: 1.1.6 wiphy4 +radio5-0: 1.1.5 wiphy3 +radio5-1: 1.1.7 wiphy5 +radio5-2: 1.1.9 wiphy6 +radio5-3: 1.1.9 wiphy7 +basic_cx: 1 +tput: 0 +tput_multi: 0 +tput_multi_tcp: 1 +tput_multi_udp: 1 +tput_multi_dl: 1 +tput_multi_ul: 1 +dual_band_tput: 0 +capacity: 0 +band_steering: 0 +longterm: 0 +mix_stability: 0 +loop_iter: 1 +reset_batch_size: 1 +reset_duration_min: 10000 +reset_duration_max: 60000 +bandsteer_always_5g: 0 + diff --git a/testbeds/nola-basic-12/dpt-pkt-sz.txt b/testbeds/nola-basic-12/dpt-pkt-sz.txt new file mode 100644 index 000000000..670fb0c2b --- /dev/null +++ b/testbeds/nola-basic-12/dpt-pkt-sz.txt @@ -0,0 +1,55 @@ +[BLANK] +show_events: 1 +show_log: 0 +port_sorting: 0 +kpi_id: Dataplane +bg: 0xE0ECF8 +test_rig: +show_scan: 1 +auto_helper: 0 +skip_2: 0 +skip_5: 0 +selected_dut: TIP +duration: 15000 +traffic_port: 1.1.136 sta00500 +upstream_port: 1.1.2 eth2 +path_loss: 10 +speed: 85% +speed2: 0Kbps +min_rssi_bound: -150 +max_rssi_bound: 0 +channels: AUTO +modes: Auto +pkts: 60;142;256;512;1024;MTU;4000 +spatial_streams: AUTO +security_options: AUTO +bandw_options: AUTO +traffic_types: UDP +directions: DUT Transmit;DUT Receive +txo_preamble: OFDM +txo_mcs: 0 CCK, OFDM, HT, VHT +txo_retries: No Retry +txo_sgi: OFF +txo_txpower: 15 +attenuator: 0 +attenuator2: 0 +attenuator_mod: 255 +attenuator_mod2: 255 +attenuations: 0..+50..950 +attenuations2: 0..+50..950 +chamber: 0 +tt_deg: 0..+45..359 +cust_pkt_sz: +show_3s: 0 +show_ll_graphs: 1 +show_gp_graphs: 1 +show_1m: 1 +pause_iter: 0 +show_realtime: 1 +operator: +mconn: 1 +mpkt: 1000 +tos: 0 +loop_iterations: 1 + + diff --git a/testbeds/nola-basic-12/run_basic.bash b/testbeds/nola-basic-12/run_basic.bash new file mode 100755 index 000000000..7d88ff44d --- /dev/null +++ b/testbeds/nola-basic-12/run_basic.bash @@ -0,0 +1,71 @@ +#!/bin/bash + +# Example usage of this script +# DUT_SW_VER=my-build-id ./run_basic.bash +# +# Other DUT variables in test_bed_cfg.bash may also be over-ridden, +# including those below. See LANforge 'add_dut' CLI command for +# details on what these variables are for. + +# DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL +# DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3 +# DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3 +# DUT_BSSID1 DUT_BSSID2 DUT_BSSID3 + +# Source config file +. test_bed_cfg.bash + +echo "Top wlan-testing git commits.
" > ./tmp_gitlog.html
+git log -n 8 --oneline >> ./tmp_gitlog.html
+echo "
" >> ./tmp_gitlog.html + +NOTES_HTML=`pwd`/testbed_notes.html +GITLOG=`pwd`/tmp_gitlog.html + +if [ -d "../../../wlan-ap" ] +then + DUTGITLOG=/tmp/${DUT_SW_VER}_dut_gitlog.html + echo "Top wlan-ap git commits.
" > $DUTGITLOG
+    (cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
+    echo "
" >> $DUTGITLOG + export DUTGITLOG +fi +export NOTES_HTML GITLOG + +# TODO: Copy config file to cloud controller and restart it +# and/or do other config to make it work. + +# Change to scripts dir +cd ../../lanforge/lanforge-scripts/gui + +# Where to place results. basic_regression.bash will use this variable. +RSLTS_DIR=/tmp/nola-${NOLA_NUM}-basic-regression +export RSLTS_DIR + +# Clean any existing data from the results dir +rm -fr $RSLTS_DIR + +# Run one test +# DEFAULT_ENABLE=0 DO_SHORT_AP_STABILITY_RESET=1 ./basic_regression.bash + +# Clean up old DHCP leases +../lf_gui_cmd.pl --manager $GMANAGER --port $GMPORT --cmd "cli clear_port_counters ALL ALL ALL dhcp_leases" + +# Run all tests +./basic_regression.bash + +cd - + +if [ ! -d $RSLTS_DIR ] +then + echo "Test did not run as expected, $RSLTS_DIR not found." + mkdir -p $RSLTS_DIR +fi + +if [ -f ${MY_TMPDIR}/basic_regression_log.txt ] +then + echo "Found ${MY_TMPDIR}/basic_regression_log.txt, moving into $RSLTS_DIR" + mv ${MY_TMPDIR}/basic_regression_log.txt $RSLTS_DIR/ +fi + +echo "See results in $RSLTS_DIR" diff --git a/testbeds/nola-basic-12/run_basic_fast.bash b/testbeds/nola-basic-12/run_basic_fast.bash new file mode 100755 index 000000000..1d85a73cd --- /dev/null +++ b/testbeds/nola-basic-12/run_basic_fast.bash @@ -0,0 +1,83 @@ +#!/bin/bash + +# Example usage of this script +# DUT_SW_VER=my-build-id ./run_basic.bash +# +# Other DUT variables in test_bed_cfg.bash may also be over-ridden, +# including those below. See LANforge 'add_dut' CLI command for +# details on what these variables are for. + +# DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL +# DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3 +# DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3 +# DUT_BSSID1 DUT_BSSID2 DUT_BSSID3 + +#set -x + +DO_SHORT_AP_BASIC_CX=${DO_SHORT_AP_BASIC_CX:-1} +DO_WCT_BI=${DO_WCT_BI:-1} + +export DO_SHORT_AP_BASI_CX DO_WCT_BI + +# Source config file +. test_bed_cfg.bash + +echo "Top wlan-testing git commits.
" > ./tmp_gitlog.html
+git log -n 8 --oneline >> ./tmp_gitlog.html
+echo "
" >> ./tmp_gitlog.html + +NOTES_HTML=`pwd`/testbed_notes.html +GITLOG=`pwd`/tmp_gitlog.html + +if [ -d "../../../wlan-ap" ] +then + DUTGITLOG=/tmp/${DUT_SW_VER}_dut_gitlog.html + echo "Top wlan-ap git commits.
" > $DUTGITLOG
+    (cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
+    echo "
" >> $DUTGITLOG + export DUTGITLOG +fi +export NOTES_HTML GITLOG + +# TODO: Copy config file to cloud controller and restart it +# and/or do other config to make it work. + +# Change to scripts dir +cd ../../lanforge/lanforge-scripts/gui + +# Where to place results. basic_regression.bash will use this variable. +RSLTS_DIR=/tmp/nola-${NOLA_NUM}-basic-regression-fast +export RSLTS_DIR + +# Clean any existing data from the results dir +rm -fr $RSLTS_DIR + +# Clean up old DHCP leases +../lf_gui_cmd.pl --manager $GMANAGER --port $GMPORT --cmd "cli clear_port_counters ALL ALL ALL dhcp_leases" + +# Run a subset of available tests +# See 'Tests to run' comment in basic_regression.bash for available options. + +#DEFAULT_ENABLE=0 WCT_DURATION=20s DO_SHORT_AP_BASIC_CX=1 DO_WCT_BI=1 ./basic_regression.bash + +DEFAULT_ENABLE=0 WCT_DURATION=20s ./basic_regression.bash + + +# Run all tests +#./basic_regression.bash + +cd - + +if [ ! -d $RSLTS_DIR ] +then + echo "Test did not run as expected, $RSLTS_DIR not found." + mkdir -p $RSLTS_DIR +fi + +if [ -f ${MY_TMPDIR}/basic_regression_log.txt ] +then + echo "Found ${MY_TMPDIR}/basic_regression_log.txt, moving into $RSLTS_DIR" + mv ${MY_TMPDIR}/basic_regression_log.txt $RSLTS_DIR/ +fi + +echo "See results in $RSLTS_DIR" diff --git a/testbeds/nola-basic-12/scenario.txt b/testbeds/nola-basic-12/scenario.txt new file mode 100644 index 000000000..f2ab6bd99 --- /dev/null +++ b/testbeds/nola-basic-12/scenario.txt @@ -0,0 +1,9 @@ +profile_link 1.1 STA-AC 64 'DUT: TIP Radio-1' NA wiphy2,AUTO -1 +profile_link 1.1 STA-AC 64 'DUT: TIP Radio-2' NA wiphy3,AUTO -1 +profile_link 1.1 upstream-dhcp 1 NA NA eth2,AUTO -1 +profile_link 1.1 uplink-nat 1 'DUT: upstream LAN 10.28.2.1/24' NA eth1,eth2 -1 +profile_link 1.1 STA-AC 1 'DUT: TIP Radio-2' NA ALL-AX,AUTO -1 +dut ecw5410 393 148 +dut TIP 395 295 +dut upstream 306 62 +resource 1.1 132 218 diff --git a/testbeds/nola-basic-12/scenario_small.txt b/testbeds/nola-basic-12/scenario_small.txt new file mode 100644 index 000000000..072c13b13 --- /dev/null +++ b/testbeds/nola-basic-12/scenario_small.txt @@ -0,0 +1,9 @@ +profile_link 1.1 STA-AC 24 'DUT: TIP Radio-1' NA wiphy2,AUTO -1 +profile_link 1.1 STA-AC 24 'DUT: TIP Radio-2' NA wiphy3,AUTO -1 +profile_link 1.1 upstream-dhcp 1 NA NA eth2,AUTO -1 +profile_link 1.1 uplink-nat 1 'DUT: upstream LAN 10.28.2.1/24' NA eth1,eth2 -1 +profile_link 1.1 STA-AC 1 'DUT: TIP Radio-2' NA ALL-AX,AUTO -1 +dut ecw5410 393 148 +dut TIP 395 295 +dut upstream 306 62 +resource 1.1 132 218 diff --git a/testbeds/nola-basic-12/test_bed_cfg.bash b/testbeds/nola-basic-12/test_bed_cfg.bash new file mode 100644 index 000000000..3a3b5e085 --- /dev/null +++ b/testbeds/nola-basic-12/test_bed_cfg.bash @@ -0,0 +1,62 @@ +# Example test-bed configuration + +# Scripts should source this file to set the default environment variables +# and then override the variables specific to their test case (and it can be done +# in opposite order for same results +# +# After the env variables are set, +# call the 'lanforge/lanforge-scripts/gui/basic_regression.bash' +# from the directory in which it resides. + +NOLA_NUM=12 + +PWD=`pwd` +AP_SERIAL=${AP_SERIAL:-/dev/ttyAP1} +LF_SERIAL=${LF_SERIAL:-/dev/ttyLF1} +LFPASSWD=${LFPASSWD:-lanforge} # Root password on LANforge machine +AP_AUTO_CFG_FILE=${AP_AUTO_CFG_FILE:-$PWD/ap-auto.txt} +WCT_CFG_FILE=${WCT_CFG_FILE:-$PWD/wct.txt} +DPT_CFG_FILE=${DPT_CFG_FILE:-$PWD/dpt-pkt-sz.txt} +SCENARIO_CFG_FILE=${SCENARIO_CFG_FILE:-$PWD/scenario.txt} + +# Default to enable cloud-sdk for this testbed, cloud-sdk is at IP addr below +#USE_CLOUD_SDK=${USE_CLOUD_SDK:-192.168.100.164} + +# LANforge target machine +LFMANAGER=${LFMANAGER:-lf12} + +# LANforge GUI machine (may often be same as target) +GMANAGER=${GMANAGER:-lf12} +GMPORT=${GMPORT:-3990} +MY_TMPDIR=${MY_TMPDIR:-/tmp} + +# Test configuration (10 minutes by default, in interest of time) +STABILITY_DURATION=${STABILITY_DURATION:-600} +TEST_RIG_ID=${TEST_RIG_ID:-NOLA-${NOLA_NUM}-Basic} + +# DUT configuration +DUT_FLAGS=${DUT_FLAGS:-0x22} # AP, WPA-PSK +#DUT_FLAGS=${DUT_FLAGS:-0x2} # AP, Open +DUT_FLAGS_MASK=${DUT_FLAGS_MASK:-0xFFFF} +DUT_SW_VER=${DUT_SW_VER:-OpenWrt-TIP} +DUT_HW_VER=EAP-102 +DUT_MODEL=EAP-102 +DUT_SERIAL=${DUT_SERIAL:-NA} +DUT_SSID1=${DUT_SSID1:-Default-SSID-2g} +DUT_SSID2=${DUT_SSID2:-Default-SSID-5gl} +DUT_PASSWD1=${DUT_PASSWD1:-12345678} +DUT_PASSWD2=${DUT_PASSWD2:-12345678} +# 2.4 radio +DUT_BSSID1=00:00:ea:92:01:01 +# 5Ghz radio +DUT_BSSID2=00:00:ea:D2:01:01 + +export LF_SERIAL AP_SERIAL LFPASSWD +export AP_AUTO_CFG_FILE WCT_CFG_FILE DPT_CFG_FILE SCENARIO_CFG_FILE +export LFMANAGER GMANAGER GMPORT MY_TMPDIR +export STABILITY_DURATION TEST_RIG_ID +export DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL +export DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3 +export DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3 +export DUT_BSSID1 DUT_BSSID2 DUT_BSSID3 +export USE_CLOUD_SDK diff --git a/testbeds/nola-basic-12/wct.txt b/testbeds/nola-basic-12/wct.txt new file mode 100644 index 000000000..b4eeaa756 --- /dev/null +++ b/testbeds/nola-basic-12/wct.txt @@ -0,0 +1,197 @@ +[BLANK] +sel_port-0: 1.1.eth2 +sel_port-1: 1.1.sta00000 +sel_port-2: 1.1.sta00001 +sel_port-3: 1.1.sta00002 +sel_port-4: 1.1.sta00003 +sel_port-5: 1.1.sta00004 +sel_port-6: 1.1.sta00005 +sel_port-7: 1.1.sta00006 +sel_port-8: 1.1.sta00007 +sel_port-9: 1.1.sta00008 +sel_port-10: 1.1.sta00009 +sel_port-11: 1.1.sta00010 +sel_port-12: 1.1.sta00011 +sel_port-13: 1.1.sta00012 +sel_port-14: 1.1.sta00013 +sel_port-15: 1.1.sta00014 +sel_port-16: 1.1.sta00015 +sel_port-17: 1.1.sta00016 +sel_port-18: 1.1.sta00017 +sel_port-19: 1.1.sta00018 +sel_port-20: 1.1.sta00019 +sel_port-21: 1.1.sta00020 +sel_port-22: 1.1.sta00021 +sel_port-23: 1.1.sta00022 +sel_port-24: 1.1.sta00023 +sel_port-25: 1.1.sta00024 +sel_port-26: 1.1.sta00025 +sel_port-27: 1.1.sta00026 +sel_port-28: 1.1.sta00027 +sel_port-29: 1.1.sta00028 +sel_port-30: 1.1.sta00029 +sel_port-31: 1.1.sta00030 +sel_port-32: 1.1.sta00031 +sel_port-33: 1.1.sta00032 +sel_port-34: 1.1.sta00033 +sel_port-35: 1.1.sta00034 +sel_port-36: 1.1.sta00035 +sel_port-37: 1.1.sta00036 +sel_port-38: 1.1.sta00037 +sel_port-39: 1.1.sta00038 +sel_port-40: 1.1.sta00039 +sel_port-41: 1.1.sta00040 +sel_port-42: 1.1.sta00041 +sel_port-43: 1.1.sta00042 +sel_port-44: 1.1.sta00043 +sel_port-45: 1.1.sta00044 +sel_port-46: 1.1.sta00045 +sel_port-47: 1.1.sta00046 +sel_port-48: 1.1.sta00047 +sel_port-49: 1.1.sta00048 +sel_port-50: 1.1.sta00049 +sel_port-51: 1.1.sta00050 +sel_port-52: 1.1.sta00051 +sel_port-53: 1.1.sta00052 +sel_port-54: 1.1.sta00053 +sel_port-55: 1.1.sta00054 +sel_port-56: 1.1.sta00055 +sel_port-57: 1.1.sta00056 +sel_port-58: 1.1.sta00057 +sel_port-59: 1.1.sta00058 +sel_port-60: 1.1.sta00059 +sel_port-61: 1.1.sta00060 +sel_port-62: 1.1.sta00061 +sel_port-63: 1.1.sta00062 +sel_port-64: 1.1.sta00063 +sel_port-65: 1.1.sta00500 +sel_port-66: 1.1.sta00501 +sel_port-67: 1.1.sta00502 +sel_port-68: 1.1.sta00503 +sel_port-69: 1.1.sta00504 +sel_port-70: 1.1.sta00505 +sel_port-71: 1.1.sta00506 +sel_port-72: 1.1.sta00507 +sel_port-73: 1.1.sta00508 +sel_port-74: 1.1.sta00509 +sel_port-75: 1.1.sta00510 +sel_port-76: 1.1.sta00511 +sel_port-77: 1.1.sta00512 +sel_port-78: 1.1.sta00513 +sel_port-79: 1.1.sta00514 +sel_port-80: 1.1.sta00515 +sel_port-81: 1.1.sta00516 +sel_port-82: 1.1.sta00517 +sel_port-83: 1.1.sta00518 +sel_port-84: 1.1.sta00519 +sel_port-85: 1.1.sta00520 +sel_port-86: 1.1.sta00521 +sel_port-87: 1.1.sta00522 +sel_port-88: 1.1.sta00523 +sel_port-89: 1.1.sta00524 +sel_port-90: 1.1.sta00525 +sel_port-91: 1.1.sta00526 +sel_port-92: 1.1.sta00527 +sel_port-93: 1.1.sta00528 +sel_port-94: 1.1.sta00529 +sel_port-95: 1.1.sta00530 +sel_port-96: 1.1.sta00531 +sel_port-97: 1.1.sta00532 +sel_port-98: 1.1.sta00533 +sel_port-99: 1.1.sta00534 +sel_port-100: 1.1.sta00535 +sel_port-101: 1.1.sta00536 +sel_port-102: 1.1.sta00537 +sel_port-103: 1.1.sta00538 +sel_port-104: 1.1.sta00539 +sel_port-105: 1.1.sta00540 +sel_port-106: 1.1.sta00541 +sel_port-107: 1.1.sta00542 +sel_port-108: 1.1.sta00543 +sel_port-109: 1.1.sta00544 +sel_port-110: 1.1.sta00545 +sel_port-111: 1.1.sta00546 +sel_port-112: 1.1.sta00547 +sel_port-113: 1.1.sta00548 +sel_port-114: 1.1.sta00549 +sel_port-115: 1.1.sta00550 +sel_port-116: 1.1.sta00551 +sel_port-117: 1.1.sta00552 +sel_port-118: 1.1.sta00553 +sel_port-119: 1.1.sta00554 +sel_port-120: 1.1.sta00555 +sel_port-121: 1.1.sta00556 +sel_port-122: 1.1.sta00557 +sel_port-123: 1.1.sta00558 +sel_port-124: 1.1.sta00559 +sel_port-125: 1.1.sta00560 +sel_port-126: 1.1.sta00561 +sel_port-127: 1.1.sta00562 +sel_port-128: 1.1.sta00563 +sel_port-129: 1.1.wlan4 +sel_port-130: 1.1.wlan5 +sel_port-131: 1.1.wlan6 +sel_port-132: 1.1.wlan7 +show_events: 1 +show_log: 0 +port_sorting: 2 +kpi_id: Capacity-TCP-UL+DL +bg: 0xE0ECF8 +test_rig: NOLA-12-Basic +show_scan: 1 +auto_helper: 1 +skip_2: 0 +skip_5: 0 +skip_5b: 1 +skip_dual: 0 +skip_tri: 1 +batch_size: 1,5,10,20,40,80 +loop_iter: 1 +duration: 60000 +test_groups: 0 +test_groups_subset: 0 +protocol: TCP-IPv4 +dl_rate_sel: Total Download Rate: +dl_rate: 1000000000 +ul_rate_sel: Total Upload Rate: +ul_rate: 1000000000 +prcnt_tcp: 100000 +l4_endp: +pdu_sz: -1 +mss_sel: 1 +sock_buffer: 0 +ip_tos: 0 +multi_conn: -1 +min_speed: -1 +ps_interval: 60-second Running Average +fairness: 0 +naptime: 0 +before_clear: 5000 +rpt_timer: 1000 +try_lower: 0 +rnd_rate: 1 +leave_ports_up: 0 +down_quiesce: 0 +udp_nat: 1 +record_other_ssids: 0 +clear_reset_counters: 0 +do_pf: 0 +pf_min_period_dl: 128000 +pf_min_period_ul: 0 +pf_max_reconnects: 0 +use_mix_pdu: 0 +pdu_prcnt_pps: 1 +pdu_prcnt_bps: 0 +pdu_mix_ln-0: +show_scan: 1 +show_golden_3p: 0 +save_csv: 0 +show_realtime: 1 +show_pie: 1 +show_per_loop_totals: 1 +show_cx_time: 1 +show_dhcp: 1 +show_anqp: 1 +show_4way: 1 +show_latency: 1 + diff --git a/testbeds/nola-basic-13/NOTES.txt b/testbeds/nola-basic-13/NOTES.txt new file mode 100644 index 000000000..9fec63916 --- /dev/null +++ b/testbeds/nola-basic-13/NOTES.txt @@ -0,0 +1,2 @@ + +DUT is an EAP-102 wifi-6, running TIP OpenWrt. diff --git a/testbeds/nola-basic-13/OpenWrt-overlay/etc/config/bugcheck b/testbeds/nola-basic-13/OpenWrt-overlay/etc/config/bugcheck new file mode 100644 index 000000000..b138a6fad --- /dev/null +++ b/testbeds/nola-basic-13/OpenWrt-overlay/etc/config/bugcheck @@ -0,0 +1,2 @@ +DO_BUGCHECK=1 +export DO_BUGCHECK diff --git a/testbeds/nola-basic-13/OpenWrt-overlay/etc/config/wireless b/testbeds/nola-basic-13/OpenWrt-overlay/etc/config/wireless new file mode 100644 index 000000000..0c973bd5b --- /dev/null +++ b/testbeds/nola-basic-13/OpenWrt-overlay/etc/config/wireless @@ -0,0 +1,34 @@ +config wifi-device 'radio0' + option type 'mac80211' + option channel '36' + option hwmode '11a' + option path 'platform/soc/c000000.wifi1' + option htmode 'HE80' + option disabled '0' + +config wifi-iface 'default_radio0' + option device 'radio0' + option network 'lan' + option mode 'ap' + option ssid 'Default-SSID-5gl' + option encryption 'psk-mixed' + option key '12345678' + option macaddr '00:00:ea:D2:01:02' + +config wifi-device 'radio1' + option type 'mac80211' + option channel '11' + option hwmode '11g' + option path 'platform/soc/c000000.wifi1+1' + option htmode 'HE20' + option disabled '0' + +config wifi-iface 'default_radio1' + option device 'radio1' + option network 'lan' + option mode 'ap' + option ssid 'Default-SSID-2g' + option encryption 'psk-mixed' + option key '12345678' + option macaddr '00:00:ea:92:01:02' + diff --git a/testbeds/nola-basic-13/ap-auto.txt b/testbeds/nola-basic-13/ap-auto.txt new file mode 100644 index 000000000..71769a40e --- /dev/null +++ b/testbeds/nola-basic-13/ap-auto.txt @@ -0,0 +1,111 @@ +[BLANK] +sel_port-0: 1.1.sta00500 +show_events: 1 +show_log: 0 +port_sorting: 0 +kpi_id: AP Auto +bg: 0xE0ECF8 +test_rig: +show_scan: 1 +auto_helper: 1 +skip_2: 1 +skip_5: 1 +dut5b-0: NA +dut5-0: TIP Default-SSID-5gl +dut2-0: TIP Default-SSID-2g +dut5b-1: NA +dut5-1: NA +dut2-1: NA +dut5b-2: NA +dut5-2: NA +dut2-2: NA +spatial_streams: AUTO +bandw_options: AUTO +modes: Auto +upstream_port: 1.1.2 eth2 +operator: +mconn: 1 +tos: 0 +vid_buf: 1000000 +vid_speed: 700000 +reset_stall_thresh_udp_dl: 9600 +reset_stall_thresh_udp_ul: 9600 +reset_stall_thresh_tcp_dl: 9600 +reset_stall_thresh_tcp_ul: 9600 +reset_stall_thresh_l4: 100000 +reset_stall_thresh_voip: 20000 +stab_udp_dl_min: 56000 +stab_udp_dl_max: 0 +stab_udp_ul_min: 56000 +stab_udp_ul_max: 0 +stab_tcp_dl_min: 500000 +stab_tcp_dl_max: 0 +stab_tcp_ul_min: 500000 +stab_tcp_ul_max: 0 +dl_speed: 85% +ul_speed: 85% +max_stations_2: 129 +max_stations_5: 131 +max_stations_dual: 260 +lt_sta: 2 +voip_calls: 0 +lt_dur: 3600 +reset_dur: 600 +lt_gi: 30 +dur20: 20 +hunt_retries: 1 +cap_dl: 1 +cap_ul: 0 +cap_use_pkt_sizes: 0 +stability_reset_radios: 0 +pkt_loss_thresh: 10000 +frame_sizes: 200, 512, 1024, MTU +capacities: 1, 2, 5, 10, 20, 40, 64, 128, 256, 512, 1024, MAX +radio2-0: 1.1.4 wiphy0 +radio2-1: 1.1.0 wiphy2 +radio2-2: 1.1.0 wiphy4 +radio5-0: 1.1.5 wiphy3 +radio5-1: 1.1.7 wiphy5 +radio5-2: 1.1.9 wiphy6 +radio5-3: 1.1.9 wiphy7 +radio5-4: 1.1.0 wiphy1 +radio5-5: +basic_cx: 1 +tput: 0 +dual_band_tput: 0 +capacity: 0 +longterm: 0 +mix_stability: 0 +loop_iter: 1 +reset_batch_size: 1 +reset_duration_min: 10000 +reset_duration_max: 60000 + +# Configure pass/fail metrics for this testbed. +pf_text0: 2.4 DL 200 70Mbps +pf_text1: 2.4 DL 512 110Mbps +pf_text2: 2.4 DL 1024 115Mbps +pf_text3: 2.4 DL MTU 120Mbps +pf_text4: +pf_text5: 2.4 UL 200 88Mbps +pf_text6: 2.4 UL 512 106Mbps +pf_text7: 2.4 UL 1024 115Mbps +pf_text8: 2.4 UL MTU 120Mbps +pf_text9: +pf_text10: 5 DL 200 72Mbps +pf_text11: 5 DL 512 185Mbps +pf_text12: 5 DL 1024 370Mbps +pf_text13: 5 DL MTU 525Mbps +pf_text14: +pf_text15: 5 UL 200 90Mbps +pf_text16: 5 UL 512 230Mbps +pf_text17: 5 UL 1024 450Mbps +pf_text18: 5 UL MTU 630Mbps + +# Tune connect-time thresholds. +cx_prcnt: 950000 +cx_open_thresh: 35 +cx_psk_thresh: 75 +cx_1x_thresh: 130 + + diff --git a/testbeds/nola-basic-13/dpt-pkt-sz.txt b/testbeds/nola-basic-13/dpt-pkt-sz.txt new file mode 100644 index 000000000..670fb0c2b --- /dev/null +++ b/testbeds/nola-basic-13/dpt-pkt-sz.txt @@ -0,0 +1,55 @@ +[BLANK] +show_events: 1 +show_log: 0 +port_sorting: 0 +kpi_id: Dataplane +bg: 0xE0ECF8 +test_rig: +show_scan: 1 +auto_helper: 0 +skip_2: 0 +skip_5: 0 +selected_dut: TIP +duration: 15000 +traffic_port: 1.1.136 sta00500 +upstream_port: 1.1.2 eth2 +path_loss: 10 +speed: 85% +speed2: 0Kbps +min_rssi_bound: -150 +max_rssi_bound: 0 +channels: AUTO +modes: Auto +pkts: 60;142;256;512;1024;MTU;4000 +spatial_streams: AUTO +security_options: AUTO +bandw_options: AUTO +traffic_types: UDP +directions: DUT Transmit;DUT Receive +txo_preamble: OFDM +txo_mcs: 0 CCK, OFDM, HT, VHT +txo_retries: No Retry +txo_sgi: OFF +txo_txpower: 15 +attenuator: 0 +attenuator2: 0 +attenuator_mod: 255 +attenuator_mod2: 255 +attenuations: 0..+50..950 +attenuations2: 0..+50..950 +chamber: 0 +tt_deg: 0..+45..359 +cust_pkt_sz: +show_3s: 0 +show_ll_graphs: 1 +show_gp_graphs: 1 +show_1m: 1 +pause_iter: 0 +show_realtime: 1 +operator: +mconn: 1 +mpkt: 1000 +tos: 0 +loop_iterations: 1 + + diff --git a/testbeds/nola-basic-13/run_basic.bash b/testbeds/nola-basic-13/run_basic.bash new file mode 100755 index 000000000..7d88ff44d --- /dev/null +++ b/testbeds/nola-basic-13/run_basic.bash @@ -0,0 +1,71 @@ +#!/bin/bash + +# Example usage of this script +# DUT_SW_VER=my-build-id ./run_basic.bash +# +# Other DUT variables in test_bed_cfg.bash may also be over-ridden, +# including those below. See LANforge 'add_dut' CLI command for +# details on what these variables are for. + +# DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL +# DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3 +# DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3 +# DUT_BSSID1 DUT_BSSID2 DUT_BSSID3 + +# Source config file +. test_bed_cfg.bash + +echo "Top wlan-testing git commits.
" > ./tmp_gitlog.html
+git log -n 8 --oneline >> ./tmp_gitlog.html
+echo "
" >> ./tmp_gitlog.html + +NOTES_HTML=`pwd`/testbed_notes.html +GITLOG=`pwd`/tmp_gitlog.html + +if [ -d "../../../wlan-ap" ] +then + DUTGITLOG=/tmp/${DUT_SW_VER}_dut_gitlog.html + echo "Top wlan-ap git commits.
" > $DUTGITLOG
+    (cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
+    echo "
" >> $DUTGITLOG + export DUTGITLOG +fi +export NOTES_HTML GITLOG + +# TODO: Copy config file to cloud controller and restart it +# and/or do other config to make it work. + +# Change to scripts dir +cd ../../lanforge/lanforge-scripts/gui + +# Where to place results. basic_regression.bash will use this variable. +RSLTS_DIR=/tmp/nola-${NOLA_NUM}-basic-regression +export RSLTS_DIR + +# Clean any existing data from the results dir +rm -fr $RSLTS_DIR + +# Run one test +# DEFAULT_ENABLE=0 DO_SHORT_AP_STABILITY_RESET=1 ./basic_regression.bash + +# Clean up old DHCP leases +../lf_gui_cmd.pl --manager $GMANAGER --port $GMPORT --cmd "cli clear_port_counters ALL ALL ALL dhcp_leases" + +# Run all tests +./basic_regression.bash + +cd - + +if [ ! -d $RSLTS_DIR ] +then + echo "Test did not run as expected, $RSLTS_DIR not found." + mkdir -p $RSLTS_DIR +fi + +if [ -f ${MY_TMPDIR}/basic_regression_log.txt ] +then + echo "Found ${MY_TMPDIR}/basic_regression_log.txt, moving into $RSLTS_DIR" + mv ${MY_TMPDIR}/basic_regression_log.txt $RSLTS_DIR/ +fi + +echo "See results in $RSLTS_DIR" diff --git a/testbeds/nola-basic-13/run_basic_fast.bash b/testbeds/nola-basic-13/run_basic_fast.bash new file mode 100755 index 000000000..1d85a73cd --- /dev/null +++ b/testbeds/nola-basic-13/run_basic_fast.bash @@ -0,0 +1,83 @@ +#!/bin/bash + +# Example usage of this script +# DUT_SW_VER=my-build-id ./run_basic.bash +# +# Other DUT variables in test_bed_cfg.bash may also be over-ridden, +# including those below. See LANforge 'add_dut' CLI command for +# details on what these variables are for. + +# DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL +# DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3 +# DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3 +# DUT_BSSID1 DUT_BSSID2 DUT_BSSID3 + +#set -x + +DO_SHORT_AP_BASIC_CX=${DO_SHORT_AP_BASIC_CX:-1} +DO_WCT_BI=${DO_WCT_BI:-1} + +export DO_SHORT_AP_BASI_CX DO_WCT_BI + +# Source config file +. test_bed_cfg.bash + +echo "Top wlan-testing git commits.
" > ./tmp_gitlog.html
+git log -n 8 --oneline >> ./tmp_gitlog.html
+echo "
" >> ./tmp_gitlog.html + +NOTES_HTML=`pwd`/testbed_notes.html +GITLOG=`pwd`/tmp_gitlog.html + +if [ -d "../../../wlan-ap" ] +then + DUTGITLOG=/tmp/${DUT_SW_VER}_dut_gitlog.html + echo "Top wlan-ap git commits.
" > $DUTGITLOG
+    (cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
+    echo "
" >> $DUTGITLOG + export DUTGITLOG +fi +export NOTES_HTML GITLOG + +# TODO: Copy config file to cloud controller and restart it +# and/or do other config to make it work. + +# Change to scripts dir +cd ../../lanforge/lanforge-scripts/gui + +# Where to place results. basic_regression.bash will use this variable. +RSLTS_DIR=/tmp/nola-${NOLA_NUM}-basic-regression-fast +export RSLTS_DIR + +# Clean any existing data from the results dir +rm -fr $RSLTS_DIR + +# Clean up old DHCP leases +../lf_gui_cmd.pl --manager $GMANAGER --port $GMPORT --cmd "cli clear_port_counters ALL ALL ALL dhcp_leases" + +# Run a subset of available tests +# See 'Tests to run' comment in basic_regression.bash for available options. + +#DEFAULT_ENABLE=0 WCT_DURATION=20s DO_SHORT_AP_BASIC_CX=1 DO_WCT_BI=1 ./basic_regression.bash + +DEFAULT_ENABLE=0 WCT_DURATION=20s ./basic_regression.bash + + +# Run all tests +#./basic_regression.bash + +cd - + +if [ ! -d $RSLTS_DIR ] +then + echo "Test did not run as expected, $RSLTS_DIR not found." + mkdir -p $RSLTS_DIR +fi + +if [ -f ${MY_TMPDIR}/basic_regression_log.txt ] +then + echo "Found ${MY_TMPDIR}/basic_regression_log.txt, moving into $RSLTS_DIR" + mv ${MY_TMPDIR}/basic_regression_log.txt $RSLTS_DIR/ +fi + +echo "See results in $RSLTS_DIR" diff --git a/testbeds/nola-basic-13/scenario.txt b/testbeds/nola-basic-13/scenario.txt new file mode 100644 index 000000000..bde6a131d --- /dev/null +++ b/testbeds/nola-basic-13/scenario.txt @@ -0,0 +1,11 @@ +profile_link 1.1 STA-AC 64 'DUT: TIP Radio-1' NA wiphy0,AUTO -1 +profile_link 1.1 STA-AC 64 'DUT: TIP Radio-2' NA wiphy1,AUTO -1 +profile_link 1.1 STA-AC 64 'DUT: TIP Radio-1' NA wiphy2,AUTO -1 +profile_link 1.1 STA-AC 64 'DUT: TIP Radio-2' NA wiphy3,AUTO -1 +profile_link 1.1 upstream-dhcp 1 NA NA eth2,AUTO -1 +profile_link 1.1 uplink-nat 1 'DUT: upstream LAN 10.28.2.1/24' NA eth3,eth2 -1 +profile_link 1.1 STA-AC 1 'DUT: TIP Radio-2' NA ALL-AX,AUTO -1 +dut ecw5410 393 148 +dut TIP 395 295 +dut upstream 306 62 +resource 1.1 132 218 diff --git a/testbeds/nola-basic-13/scenario_small.txt b/testbeds/nola-basic-13/scenario_small.txt new file mode 100644 index 000000000..d70e64875 --- /dev/null +++ b/testbeds/nola-basic-13/scenario_small.txt @@ -0,0 +1,11 @@ +profile_link 1.1 STA-AC 24 'DUT: TIP Radio-1' NA wiphy0,AUTO -1 +profile_link 1.1 STA-AC 24 'DUT: TIP Radio-2' NA wiphy1,AUTO -1 +profile_link 1.1 STA-AC 24 'DUT: TIP Radio-1' NA wiphy2,AUTO -1 +profile_link 1.1 STA-AC 24 'DUT: TIP Radio-2' NA wiphy3,AUTO -1 +profile_link 1.1 upstream-dhcp 1 NA NA eth2,AUTO -1 +profile_link 1.1 uplink-nat 1 'DUT: upstream LAN 10.28.2.1/24' NA eth3,eth2 -1 +profile_link 1.1 STA-AC 1 'DUT: TIP Radio-2' NA ALL-AX,AUTO -1 +dut ecw5410 393 148 +dut TIP 395 295 +dut upstream 306 62 +resource 1.1 132 218 diff --git a/testbeds/nola-basic-13/test_bed_cfg.bash b/testbeds/nola-basic-13/test_bed_cfg.bash new file mode 100644 index 000000000..a402bb941 --- /dev/null +++ b/testbeds/nola-basic-13/test_bed_cfg.bash @@ -0,0 +1,62 @@ +# Example test-bed configuration + +# Scripts should source this file to set the default environment variables +# and then override the variables specific to their test case (and it can be done +# in opposite order for same results +# +# After the env variables are set, +# call the 'lanforge/lanforge-scripts/gui/basic_regression.bash' +# from the directory in which it resides. + +NOLA_NUM=13 + +PWD=`pwd` +AP_SERIAL=${AP_SERIAL:-/dev/ttyAP2} +LF_SERIAL=${LF_SERIAL:-/dev/ttyLF2} +LFPASSWD=${LFPASSWD:-lanforge} # Root password on LANforge machine +AP_AUTO_CFG_FILE=${AP_AUTO_CFG_FILE:-$PWD/ap-auto.txt} +WCT_CFG_FILE=${WCT_CFG_FILE:-$PWD/wct.txt} +DPT_CFG_FILE=${DPT_CFG_FILE:-$PWD/dpt-pkt-sz.txt} +SCENARIO_CFG_FILE=${SCENARIO_CFG_FILE:-$PWD/scenario.txt} + +# Default to enable cloud-sdk for this testbed, cloud-sdk is at IP addr below +#USE_CLOUD_SDK=${USE_CLOUD_SDK:-192.168.100.164} + +# LANforge target machine +LFMANAGER=${LFMANAGER:-lf13} + +# LANforge GUI machine (may often be same as target) +GMANAGER=${GMANAGER:-lf13} +GMPORT=${GMPORT:-3990} +MY_TMPDIR=${MY_TMPDIR:-/tmp} + +# Test configuration (10 minutes by default, in interest of time) +STABILITY_DURATION=${STABILITY_DURATION:-600} +TEST_RIG_ID=${TEST_RIG_ID:-NOLA-${NOLA_NUM}-Basic} + +# DUT configuration +DUT_FLAGS=${DUT_FLAGS:-0x22} # AP, WPA-PSK +#DUT_FLAGS=${DUT_FLAGS:-0x2} # AP, Open +DUT_FLAGS_MASK=${DUT_FLAGS_MASK:-0xFFFF} +DUT_SW_VER=${DUT_SW_VER:-OpenWrt-TIP} +DUT_HW_VER=EAP-102 +DUT_MODEL=EAP-102 +DUT_SERIAL=${DUT_SERIAL:-NA} +DUT_SSID1=${DUT_SSID1:-Default-SSID-2g} +DUT_SSID2=${DUT_SSID2:-Default-SSID-5gl} +DUT_PASSWD1=${DUT_PASSWD1:-12345678} +DUT_PASSWD2=${DUT_PASSWD2:-12345678} +# 2.4 radio +DUT_BSSID1=00:00:ea:92:01:02 +# 5Ghz radio +DUT_BSSID2=00:00:ea:D2:01:02 + +export LF_SERIAL AP_SERIAL LFPASSWD +export AP_AUTO_CFG_FILE WCT_CFG_FILE DPT_CFG_FILE SCENARIO_CFG_FILE +export LFMANAGER GMANAGER GMPORT MY_TMPDIR +export STABILITY_DURATION TEST_RIG_ID +export DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL +export DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3 +export DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3 +export DUT_BSSID1 DUT_BSSID2 DUT_BSSID3 +export USE_CLOUD_SDK diff --git a/testbeds/nola-basic-13/wct.txt b/testbeds/nola-basic-13/wct.txt new file mode 100644 index 000000000..321ac7c13 --- /dev/null +++ b/testbeds/nola-basic-13/wct.txt @@ -0,0 +1,323 @@ +[BLANK] +sel_port-0: 1.1.eth2 +sel_port-1: 1.1.sta00000 +sel_port-2: 1.1.sta00001 +sel_port-3: 1.1.sta00002 +sel_port-4: 1.1.sta00003 +sel_port-5: 1.1.sta00004 +sel_port-6: 1.1.sta00005 +sel_port-7: 1.1.sta00006 +sel_port-8: 1.1.sta00007 +sel_port-9: 1.1.sta00008 +sel_port-10: 1.1.sta00009 +sel_port-11: 1.1.sta00010 +sel_port-12: 1.1.sta00011 +sel_port-13: 1.1.sta00012 +sel_port-14: 1.1.sta00013 +sel_port-15: 1.1.sta00014 +sel_port-16: 1.1.sta00015 +sel_port-17: 1.1.sta00016 +sel_port-18: 1.1.sta00017 +sel_port-19: 1.1.sta00018 +sel_port-20: 1.1.sta00019 +sel_port-21: 1.1.sta00020 +sel_port-22: 1.1.sta00021 +sel_port-23: 1.1.sta00022 +sel_port-24: 1.1.sta00023 +sel_port-25: 1.1.sta00024 +sel_port-26: 1.1.sta00025 +sel_port-27: 1.1.sta00026 +sel_port-28: 1.1.sta00027 +sel_port-29: 1.1.sta00028 +sel_port-30: 1.1.sta00029 +sel_port-31: 1.1.sta00030 +sel_port-32: 1.1.sta00031 +sel_port-33: 1.1.sta00032 +sel_port-34: 1.1.sta00033 +sel_port-35: 1.1.sta00034 +sel_port-36: 1.1.sta00035 +sel_port-37: 1.1.sta00036 +sel_port-38: 1.1.sta00037 +sel_port-39: 1.1.sta00038 +sel_port-40: 1.1.sta00039 +sel_port-41: 1.1.sta00040 +sel_port-42: 1.1.sta00041 +sel_port-43: 1.1.sta00042 +sel_port-44: 1.1.sta00043 +sel_port-45: 1.1.sta00044 +sel_port-46: 1.1.sta00045 +sel_port-47: 1.1.sta00046 +sel_port-48: 1.1.sta00047 +sel_port-49: 1.1.sta00048 +sel_port-50: 1.1.sta00049 +sel_port-51: 1.1.sta00050 +sel_port-52: 1.1.sta00051 +sel_port-53: 1.1.sta00052 +sel_port-54: 1.1.sta00053 +sel_port-55: 1.1.sta00054 +sel_port-56: 1.1.sta00055 +sel_port-57: 1.1.sta00056 +sel_port-58: 1.1.sta00057 +sel_port-59: 1.1.sta00058 +sel_port-60: 1.1.sta00059 +sel_port-61: 1.1.sta00060 +sel_port-62: 1.1.sta00061 +sel_port-63: 1.1.sta00062 +sel_port-64: 1.1.sta00063 +sel_port-65: 1.1.sta00500 +sel_port-66: 1.1.sta00501 +sel_port-67: 1.1.sta00502 +sel_port-68: 1.1.sta00503 +sel_port-69: 1.1.sta00504 +sel_port-70: 1.1.sta00505 +sel_port-71: 1.1.sta00506 +sel_port-72: 1.1.sta00507 +sel_port-73: 1.1.sta00508 +sel_port-74: 1.1.sta00509 +sel_port-75: 1.1.sta00510 +sel_port-76: 1.1.sta00511 +sel_port-77: 1.1.sta00512 +sel_port-78: 1.1.sta00513 +sel_port-79: 1.1.sta00514 +sel_port-80: 1.1.sta00515 +sel_port-81: 1.1.sta00516 +sel_port-82: 1.1.sta00517 +sel_port-83: 1.1.sta00518 +sel_port-84: 1.1.sta00519 +sel_port-85: 1.1.sta00520 +sel_port-86: 1.1.sta00521 +sel_port-87: 1.1.sta00522 +sel_port-88: 1.1.sta00523 +sel_port-89: 1.1.sta00524 +sel_port-90: 1.1.sta00525 +sel_port-91: 1.1.sta00526 +sel_port-92: 1.1.sta00527 +sel_port-93: 1.1.sta00528 +sel_port-94: 1.1.sta00529 +sel_port-95: 1.1.sta00530 +sel_port-96: 1.1.sta00531 +sel_port-97: 1.1.sta00532 +sel_port-98: 1.1.sta00533 +sel_port-99: 1.1.sta00534 +sel_port-100: 1.1.sta00535 +sel_port-101: 1.1.sta00536 +sel_port-102: 1.1.sta00537 +sel_port-103: 1.1.sta00538 +sel_port-104: 1.1.sta00539 +sel_port-105: 1.1.sta00540 +sel_port-106: 1.1.sta00541 +sel_port-107: 1.1.sta00542 +sel_port-108: 1.1.sta00543 +sel_port-109: 1.1.sta00544 +sel_port-110: 1.1.sta00545 +sel_port-111: 1.1.sta00546 +sel_port-112: 1.1.sta00547 +sel_port-113: 1.1.sta00548 +sel_port-114: 1.1.sta00549 +sel_port-115: 1.1.sta00550 +sel_port-116: 1.1.sta00551 +sel_port-117: 1.1.sta00552 +sel_port-118: 1.1.sta00553 +sel_port-119: 1.1.sta00554 +sel_port-120: 1.1.sta00555 +sel_port-121: 1.1.sta00556 +sel_port-122: 1.1.sta00557 +sel_port-123: 1.1.sta00558 +sel_port-124: 1.1.sta00559 +sel_port-125: 1.1.sta00560 +sel_port-126: 1.1.sta00561 +sel_port-127: 1.1.sta00562 +sel_port-128: 1.1.sta00563 +sel_port-129: 1.1.sta04000 +sel_port-130: 1.1.sta04001 +sel_port-131: 1.1.sta04002 +sel_port-132: 1.1.sta04003 +sel_port-133: 1.1.sta04004 +sel_port-134: 1.1.sta04005 +sel_port-135: 1.1.sta04006 +sel_port-136: 1.1.sta04007 +sel_port-137: 1.1.sta04008 +sel_port-138: 1.1.sta04009 +sel_port-139: 1.1.sta04010 +sel_port-140: 1.1.sta04011 +sel_port-141: 1.1.sta04012 +sel_port-142: 1.1.sta04013 +sel_port-143: 1.1.sta04014 +sel_port-144: 1.1.sta04015 +sel_port-145: 1.1.sta04016 +sel_port-146: 1.1.sta04017 +sel_port-147: 1.1.sta04018 +sel_port-148: 1.1.sta04019 +sel_port-149: 1.1.sta04020 +sel_port-150: 1.1.sta04021 +sel_port-151: 1.1.sta04022 +sel_port-152: 1.1.sta04023 +sel_port-153: 1.1.sta04024 +sel_port-154: 1.1.sta04025 +sel_port-155: 1.1.sta04026 +sel_port-156: 1.1.sta04027 +sel_port-157: 1.1.sta04028 +sel_port-158: 1.1.sta04029 +sel_port-159: 1.1.sta04030 +sel_port-160: 1.1.sta04031 +sel_port-161: 1.1.sta04032 +sel_port-162: 1.1.sta04033 +sel_port-163: 1.1.sta04034 +sel_port-164: 1.1.sta04035 +sel_port-165: 1.1.sta04036 +sel_port-166: 1.1.sta04037 +sel_port-167: 1.1.sta04038 +sel_port-168: 1.1.sta04039 +sel_port-169: 1.1.sta04040 +sel_port-170: 1.1.sta04041 +sel_port-171: 1.1.sta04042 +sel_port-172: 1.1.sta04043 +sel_port-173: 1.1.sta04044 +sel_port-174: 1.1.sta04045 +sel_port-175: 1.1.sta04046 +sel_port-176: 1.1.sta04047 +sel_port-177: 1.1.sta04048 +sel_port-178: 1.1.sta04049 +sel_port-179: 1.1.sta04050 +sel_port-180: 1.1.sta04051 +sel_port-181: 1.1.sta04052 +sel_port-182: 1.1.sta04053 +sel_port-183: 1.1.sta04054 +sel_port-184: 1.1.sta04055 +sel_port-185: 1.1.sta04056 +sel_port-186: 1.1.sta04057 +sel_port-187: 1.1.sta04058 +sel_port-188: 1.1.sta04059 +sel_port-189: 1.1.sta04060 +sel_port-190: 1.1.sta04061 +sel_port-191: 1.1.sta04062 +sel_port-192: 1.1.sta04063 +sel_port-193: 1.1.sta04500 +sel_port-194: 1.1.sta04501 +sel_port-195: 1.1.sta04502 +sel_port-196: 1.1.sta04503 +sel_port-197: 1.1.sta04504 +sel_port-198: 1.1.sta04505 +sel_port-199: 1.1.sta04506 +sel_port-200: 1.1.sta04507 +sel_port-201: 1.1.sta04508 +sel_port-202: 1.1.sta04509 +sel_port-203: 1.1.sta04510 +sel_port-204: 1.1.sta04511 +sel_port-205: 1.1.sta04512 +sel_port-206: 1.1.sta04513 +sel_port-207: 1.1.sta04514 +sel_port-208: 1.1.sta04515 +sel_port-209: 1.1.sta04516 +sel_port-210: 1.1.sta04517 +sel_port-211: 1.1.sta04518 +sel_port-212: 1.1.sta04519 +sel_port-213: 1.1.sta04520 +sel_port-214: 1.1.sta04521 +sel_port-215: 1.1.sta04522 +sel_port-216: 1.1.sta04523 +sel_port-217: 1.1.sta04524 +sel_port-218: 1.1.sta04525 +sel_port-219: 1.1.sta04526 +sel_port-220: 1.1.sta04527 +sel_port-221: 1.1.sta04528 +sel_port-222: 1.1.sta04529 +sel_port-223: 1.1.sta04530 +sel_port-224: 1.1.sta04531 +sel_port-225: 1.1.sta04532 +sel_port-226: 1.1.sta04533 +sel_port-227: 1.1.sta04534 +sel_port-228: 1.1.sta04535 +sel_port-229: 1.1.sta04536 +sel_port-230: 1.1.sta04537 +sel_port-231: 1.1.sta04538 +sel_port-232: 1.1.sta04539 +sel_port-233: 1.1.sta04540 +sel_port-234: 1.1.sta04541 +sel_port-235: 1.1.sta04542 +sel_port-236: 1.1.sta04543 +sel_port-237: 1.1.sta04544 +sel_port-238: 1.1.sta04545 +sel_port-239: 1.1.sta04546 +sel_port-240: 1.1.sta04547 +sel_port-241: 1.1.sta04548 +sel_port-242: 1.1.sta04549 +sel_port-243: 1.1.sta04550 +sel_port-244: 1.1.sta04551 +sel_port-245: 1.1.sta04552 +sel_port-246: 1.1.sta04553 +sel_port-247: 1.1.sta04554 +sel_port-248: 1.1.sta04555 +sel_port-249: 1.1.sta04556 +sel_port-250: 1.1.sta04557 +sel_port-251: 1.1.sta04558 +sel_port-252: 1.1.sta04559 +sel_port-253: 1.1.sta04560 +sel_port-254: 1.1.sta04561 +sel_port-255: 1.1.sta04562 +sel_port-256: 1.1.sta04563 +sel_port-257: 1.1.wlan4 +sel_port-258: 1.1.wlan5 +sel_port-259: 1.1.wlan6 +sel_port-260: 1.1.wlan7 +show_events: 1 +show_log: 0 +port_sorting: 2 +kpi_id: WiFi Capacity +bg: 0xE0ECF8 +test_rig: +show_scan: 1 +auto_helper: 1 +skip_2: 0 +skip_5: 0 +batch_size: 1,5,10,20,40,80 +loop_iter: 1 +duration: 30000 +test_groups: 0 +test_groups_subset: 0 +protocol: TCP-IPv4 +dl_rate_sel: Total Download Rate: +dl_rate: 1000000000 +ul_rate_sel: Total Upload Rate: +ul_rate: 1000000000 +prcnt_tcp: 100000 +l4_endp: +pdu_sz: -1 +mss_sel: 1 +sock_buffer: 0 +ip_tos: 0 +multi_conn: -1 +min_speed: -1 +ps_interval: 60-second Running Average +fairness: 0 +naptime: 0 +before_clear: 5000 +rpt_timer: 1000 +try_lower: 0 +rnd_rate: 1 +leave_ports_up: 0 +down_quiesce: 0 +udp_nat: 1 +record_other_ssids: 0 +clear_reset_counters: 0 +do_pf: 0 +pf_min_period_dl: 128000 +pf_min_period_ul: 0 +pf_max_reconnects: 0 +use_mix_pdu: 0 +pdu_prcnt_pps: 1 +pdu_prcnt_bps: 0 +pdu_mix_ln-0: +show_scan: 1 +show_golden_3p: 0 +save_csv: 0 +show_realtime: 1 +show_pie: 1 +show_per_loop_totals: 1 +show_cx_time: 1 +show_dhcp: 1 +show_anqp: 1 +show_4way: 1 +show_latency: 1 + + diff --git a/testbeds/nola-basic-14/NOTES.txt b/testbeds/nola-basic-14/NOTES.txt new file mode 100644 index 000000000..e708146af --- /dev/null +++ b/testbeds/nola-basic-14/NOTES.txt @@ -0,0 +1,2 @@ +DUT is an EAP-102 wifi-6, running TIP OpenWrt. +Configured for <= 128 stations total. diff --git a/testbeds/nola-basic-14/OpenWrt-overlay/etc/config/bugcheck b/testbeds/nola-basic-14/OpenWrt-overlay/etc/config/bugcheck new file mode 100644 index 000000000..b138a6fad --- /dev/null +++ b/testbeds/nola-basic-14/OpenWrt-overlay/etc/config/bugcheck @@ -0,0 +1,2 @@ +DO_BUGCHECK=1 +export DO_BUGCHECK diff --git a/testbeds/nola-basic-14/OpenWrt-overlay/etc/config/wireless b/testbeds/nola-basic-14/OpenWrt-overlay/etc/config/wireless new file mode 100644 index 000000000..f58ce0822 --- /dev/null +++ b/testbeds/nola-basic-14/OpenWrt-overlay/etc/config/wireless @@ -0,0 +1,34 @@ +config wifi-device 'radio0' + option type 'mac80211' + option channel '36' + option hwmode '11a' + option path 'platform/soc/c000000.wifi1' + option htmode 'HE80' + option disabled '0' + +config wifi-iface 'default_radio0' + option device 'radio0' + option network 'lan' + option mode 'ap' + option ssid 'Default-SSID-5gl' + option encryption 'psk-mixed' + option key '12345678' + option macaddr '00:00:ea:D2:01:03' + +config wifi-device 'radio1' + option type 'mac80211' + option channel '11' + option hwmode '11g' + option path 'platform/soc/c000000.wifi1+1' + option htmode 'HE20' + option disabled '0' + +config wifi-iface 'default_radio1' + option device 'radio1' + option network 'lan' + option mode 'ap' + option ssid 'Default-SSID-2g' + option encryption 'psk-mixed' + option key '12345678' + option macaddr '00:00:ea:92:01:03' + diff --git a/testbeds/nola-basic-14/ap-auto.txt b/testbeds/nola-basic-14/ap-auto.txt new file mode 100644 index 000000000..df17fd21f --- /dev/null +++ b/testbeds/nola-basic-14/ap-auto.txt @@ -0,0 +1,111 @@ +[BLANK] +sel_port-0: 1.1.sta00500 +show_events: 1 +show_log: 0 +port_sorting: 0 +kpi_id: AP Auto +bg: 0xE0ECF8 +test_rig: +show_scan: 1 +auto_helper: 1 +skip_2: 1 +skip_5: 1 +dut5b-0: NA +dut5-0: TIP Default-SSID-5gl +dut2-0: TIP Default-SSID-2g +dut5b-1: NA +dut5-1: NA +dut2-1: NA +dut5b-2: NA +dut5-2: NA +dut2-2: NA +spatial_streams: AUTO +bandw_options: AUTO +modes: Auto +upstream_port: 1.1.2 eth2 +operator: +mconn: 1 +tos: 0 +vid_buf: 1000000 +vid_speed: 700000 +reset_stall_thresh_udp_dl: 9600 +reset_stall_thresh_udp_ul: 9600 +reset_stall_thresh_tcp_dl: 9600 +reset_stall_thresh_tcp_ul: 9600 +reset_stall_thresh_l4: 100000 +reset_stall_thresh_voip: 20000 +stab_udp_dl_min: 56000 +stab_udp_dl_max: 0 +stab_udp_ul_min: 56000 +stab_udp_ul_max: 0 +stab_tcp_dl_min: 500000 +stab_tcp_dl_max: 0 +stab_tcp_ul_min: 500000 +stab_tcp_ul_max: 0 +dl_speed: 85% +ul_speed: 85% +max_stations_2: 60 +max_stations_5: 60 +max_stations_dual: 120 +lt_sta: 2 +voip_calls: 0 +lt_dur: 3600 +reset_dur: 600 +lt_gi: 30 +dur20: 20 +hunt_retries: 1 +cap_dl: 1 +cap_ul: 0 +cap_use_pkt_sizes: 0 +stability_reset_radios: 0 +pkt_loss_thresh: 10000 +frame_sizes: 200, 512, 1024, MTU +capacities: 1, 2, 5, 10, 20, 40, 64, 128, 256, 512, 1024, MAX +radio2-0: 1.1.4 wiphy0 +radio2-1: 1.1.0 wiphy2 +radio2-2: 1.1.0 wiphy4 +radio5-0: 1.1.5 wiphy3 +radio5-1: 1.1.7 wiphy5 +radio5-2: 1.1.9 wiphy6 +radio5-3: 1.1.9 wiphy7 +radio5-4: 1.1.0 wiphy1 +radio5-5: +basic_cx: 1 +tput: 0 +dual_band_tput: 0 +capacity: 0 +longterm: 0 +mix_stability: 0 +loop_iter: 1 +reset_batch_size: 1 +reset_duration_min: 10000 +reset_duration_max: 60000 + +# Configure pass/fail metrics for this testbed. +pf_text0: 2.4 DL 200 70Mbps +pf_text1: 2.4 DL 512 110Mbps +pf_text2: 2.4 DL 1024 115Mbps +pf_text3: 2.4 DL MTU 120Mbps +pf_text4: +pf_text5: 2.4 UL 200 88Mbps +pf_text6: 2.4 UL 512 106Mbps +pf_text7: 2.4 UL 1024 115Mbps +pf_text8: 2.4 UL MTU 120Mbps +pf_text9: +pf_text10: 5 DL 200 72Mbps +pf_text11: 5 DL 512 185Mbps +pf_text12: 5 DL 1024 370Mbps +pf_text13: 5 DL MTU 525Mbps +pf_text14: +pf_text15: 5 UL 200 90Mbps +pf_text16: 5 UL 512 230Mbps +pf_text17: 5 UL 1024 450Mbps +pf_text18: 5 UL MTU 630Mbps + +# Tune connect-time thresholds. +cx_prcnt: 950000 +cx_open_thresh: 35 +cx_psk_thresh: 75 +cx_1x_thresh: 130 + + diff --git a/testbeds/nola-basic-14/dpt-pkt-sz.txt b/testbeds/nola-basic-14/dpt-pkt-sz.txt new file mode 100644 index 000000000..670fb0c2b --- /dev/null +++ b/testbeds/nola-basic-14/dpt-pkt-sz.txt @@ -0,0 +1,55 @@ +[BLANK] +show_events: 1 +show_log: 0 +port_sorting: 0 +kpi_id: Dataplane +bg: 0xE0ECF8 +test_rig: +show_scan: 1 +auto_helper: 0 +skip_2: 0 +skip_5: 0 +selected_dut: TIP +duration: 15000 +traffic_port: 1.1.136 sta00500 +upstream_port: 1.1.2 eth2 +path_loss: 10 +speed: 85% +speed2: 0Kbps +min_rssi_bound: -150 +max_rssi_bound: 0 +channels: AUTO +modes: Auto +pkts: 60;142;256;512;1024;MTU;4000 +spatial_streams: AUTO +security_options: AUTO +bandw_options: AUTO +traffic_types: UDP +directions: DUT Transmit;DUT Receive +txo_preamble: OFDM +txo_mcs: 0 CCK, OFDM, HT, VHT +txo_retries: No Retry +txo_sgi: OFF +txo_txpower: 15 +attenuator: 0 +attenuator2: 0 +attenuator_mod: 255 +attenuator_mod2: 255 +attenuations: 0..+50..950 +attenuations2: 0..+50..950 +chamber: 0 +tt_deg: 0..+45..359 +cust_pkt_sz: +show_3s: 0 +show_ll_graphs: 1 +show_gp_graphs: 1 +show_1m: 1 +pause_iter: 0 +show_realtime: 1 +operator: +mconn: 1 +mpkt: 1000 +tos: 0 +loop_iterations: 1 + + diff --git a/testbeds/nola-basic-14/run_basic.bash b/testbeds/nola-basic-14/run_basic.bash new file mode 100755 index 000000000..7d88ff44d --- /dev/null +++ b/testbeds/nola-basic-14/run_basic.bash @@ -0,0 +1,71 @@ +#!/bin/bash + +# Example usage of this script +# DUT_SW_VER=my-build-id ./run_basic.bash +# +# Other DUT variables in test_bed_cfg.bash may also be over-ridden, +# including those below. See LANforge 'add_dut' CLI command for +# details on what these variables are for. + +# DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL +# DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3 +# DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3 +# DUT_BSSID1 DUT_BSSID2 DUT_BSSID3 + +# Source config file +. test_bed_cfg.bash + +echo "Top wlan-testing git commits.
" > ./tmp_gitlog.html
+git log -n 8 --oneline >> ./tmp_gitlog.html
+echo "
" >> ./tmp_gitlog.html + +NOTES_HTML=`pwd`/testbed_notes.html +GITLOG=`pwd`/tmp_gitlog.html + +if [ -d "../../../wlan-ap" ] +then + DUTGITLOG=/tmp/${DUT_SW_VER}_dut_gitlog.html + echo "Top wlan-ap git commits.
" > $DUTGITLOG
+    (cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
+    echo "
" >> $DUTGITLOG + export DUTGITLOG +fi +export NOTES_HTML GITLOG + +# TODO: Copy config file to cloud controller and restart it +# and/or do other config to make it work. + +# Change to scripts dir +cd ../../lanforge/lanforge-scripts/gui + +# Where to place results. basic_regression.bash will use this variable. +RSLTS_DIR=/tmp/nola-${NOLA_NUM}-basic-regression +export RSLTS_DIR + +# Clean any existing data from the results dir +rm -fr $RSLTS_DIR + +# Run one test +# DEFAULT_ENABLE=0 DO_SHORT_AP_STABILITY_RESET=1 ./basic_regression.bash + +# Clean up old DHCP leases +../lf_gui_cmd.pl --manager $GMANAGER --port $GMPORT --cmd "cli clear_port_counters ALL ALL ALL dhcp_leases" + +# Run all tests +./basic_regression.bash + +cd - + +if [ ! -d $RSLTS_DIR ] +then + echo "Test did not run as expected, $RSLTS_DIR not found." + mkdir -p $RSLTS_DIR +fi + +if [ -f ${MY_TMPDIR}/basic_regression_log.txt ] +then + echo "Found ${MY_TMPDIR}/basic_regression_log.txt, moving into $RSLTS_DIR" + mv ${MY_TMPDIR}/basic_regression_log.txt $RSLTS_DIR/ +fi + +echo "See results in $RSLTS_DIR" diff --git a/testbeds/nola-basic-14/run_basic_fast.bash b/testbeds/nola-basic-14/run_basic_fast.bash new file mode 100755 index 000000000..1d85a73cd --- /dev/null +++ b/testbeds/nola-basic-14/run_basic_fast.bash @@ -0,0 +1,83 @@ +#!/bin/bash + +# Example usage of this script +# DUT_SW_VER=my-build-id ./run_basic.bash +# +# Other DUT variables in test_bed_cfg.bash may also be over-ridden, +# including those below. See LANforge 'add_dut' CLI command for +# details on what these variables are for. + +# DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL +# DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3 +# DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3 +# DUT_BSSID1 DUT_BSSID2 DUT_BSSID3 + +#set -x + +DO_SHORT_AP_BASIC_CX=${DO_SHORT_AP_BASIC_CX:-1} +DO_WCT_BI=${DO_WCT_BI:-1} + +export DO_SHORT_AP_BASI_CX DO_WCT_BI + +# Source config file +. test_bed_cfg.bash + +echo "Top wlan-testing git commits.
" > ./tmp_gitlog.html
+git log -n 8 --oneline >> ./tmp_gitlog.html
+echo "
" >> ./tmp_gitlog.html + +NOTES_HTML=`pwd`/testbed_notes.html +GITLOG=`pwd`/tmp_gitlog.html + +if [ -d "../../../wlan-ap" ] +then + DUTGITLOG=/tmp/${DUT_SW_VER}_dut_gitlog.html + echo "Top wlan-ap git commits.
" > $DUTGITLOG
+    (cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
+    echo "
" >> $DUTGITLOG + export DUTGITLOG +fi +export NOTES_HTML GITLOG + +# TODO: Copy config file to cloud controller and restart it +# and/or do other config to make it work. + +# Change to scripts dir +cd ../../lanforge/lanforge-scripts/gui + +# Where to place results. basic_regression.bash will use this variable. +RSLTS_DIR=/tmp/nola-${NOLA_NUM}-basic-regression-fast +export RSLTS_DIR + +# Clean any existing data from the results dir +rm -fr $RSLTS_DIR + +# Clean up old DHCP leases +../lf_gui_cmd.pl --manager $GMANAGER --port $GMPORT --cmd "cli clear_port_counters ALL ALL ALL dhcp_leases" + +# Run a subset of available tests +# See 'Tests to run' comment in basic_regression.bash for available options. + +#DEFAULT_ENABLE=0 WCT_DURATION=20s DO_SHORT_AP_BASIC_CX=1 DO_WCT_BI=1 ./basic_regression.bash + +DEFAULT_ENABLE=0 WCT_DURATION=20s ./basic_regression.bash + + +# Run all tests +#./basic_regression.bash + +cd - + +if [ ! -d $RSLTS_DIR ] +then + echo "Test did not run as expected, $RSLTS_DIR not found." + mkdir -p $RSLTS_DIR +fi + +if [ -f ${MY_TMPDIR}/basic_regression_log.txt ] +then + echo "Found ${MY_TMPDIR}/basic_regression_log.txt, moving into $RSLTS_DIR" + mv ${MY_TMPDIR}/basic_regression_log.txt $RSLTS_DIR/ +fi + +echo "See results in $RSLTS_DIR" diff --git a/testbeds/nola-basic-14/scenario.txt b/testbeds/nola-basic-14/scenario.txt new file mode 100644 index 000000000..d70e64875 --- /dev/null +++ b/testbeds/nola-basic-14/scenario.txt @@ -0,0 +1,11 @@ +profile_link 1.1 STA-AC 24 'DUT: TIP Radio-1' NA wiphy0,AUTO -1 +profile_link 1.1 STA-AC 24 'DUT: TIP Radio-2' NA wiphy1,AUTO -1 +profile_link 1.1 STA-AC 24 'DUT: TIP Radio-1' NA wiphy2,AUTO -1 +profile_link 1.1 STA-AC 24 'DUT: TIP Radio-2' NA wiphy3,AUTO -1 +profile_link 1.1 upstream-dhcp 1 NA NA eth2,AUTO -1 +profile_link 1.1 uplink-nat 1 'DUT: upstream LAN 10.28.2.1/24' NA eth3,eth2 -1 +profile_link 1.1 STA-AC 1 'DUT: TIP Radio-2' NA ALL-AX,AUTO -1 +dut ecw5410 393 148 +dut TIP 395 295 +dut upstream 306 62 +resource 1.1 132 218 diff --git a/testbeds/nola-basic-14/scenario_small.txt b/testbeds/nola-basic-14/scenario_small.txt new file mode 100644 index 000000000..d70e64875 --- /dev/null +++ b/testbeds/nola-basic-14/scenario_small.txt @@ -0,0 +1,11 @@ +profile_link 1.1 STA-AC 24 'DUT: TIP Radio-1' NA wiphy0,AUTO -1 +profile_link 1.1 STA-AC 24 'DUT: TIP Radio-2' NA wiphy1,AUTO -1 +profile_link 1.1 STA-AC 24 'DUT: TIP Radio-1' NA wiphy2,AUTO -1 +profile_link 1.1 STA-AC 24 'DUT: TIP Radio-2' NA wiphy3,AUTO -1 +profile_link 1.1 upstream-dhcp 1 NA NA eth2,AUTO -1 +profile_link 1.1 uplink-nat 1 'DUT: upstream LAN 10.28.2.1/24' NA eth3,eth2 -1 +profile_link 1.1 STA-AC 1 'DUT: TIP Radio-2' NA ALL-AX,AUTO -1 +dut ecw5410 393 148 +dut TIP 395 295 +dut upstream 306 62 +resource 1.1 132 218 diff --git a/testbeds/nola-basic-14/test_bed_cfg.bash b/testbeds/nola-basic-14/test_bed_cfg.bash new file mode 100644 index 000000000..8b489978b --- /dev/null +++ b/testbeds/nola-basic-14/test_bed_cfg.bash @@ -0,0 +1,62 @@ +# Example test-bed configuration + +# Scripts should source this file to set the default environment variables +# and then override the variables specific to their test case (and it can be done +# in opposite order for same results +# +# After the env variables are set, +# call the 'lanforge/lanforge-scripts/gui/basic_regression.bash' +# from the directory in which it resides. + +NOLA_NUM=14 + +PWD=`pwd` +AP_SERIAL=${AP_SERIAL:-/dev/ttyAP3} +LF_SERIAL=${LF_SERIAL:-/dev/ttyLF3} +LFPASSWD=${LFPASSWD:-lanforge} # Root password on LANforge machine +AP_AUTO_CFG_FILE=${AP_AUTO_CFG_FILE:-$PWD/ap-auto.txt} +WCT_CFG_FILE=${WCT_CFG_FILE:-$PWD/wct.txt} +DPT_CFG_FILE=${DPT_CFG_FILE:-$PWD/dpt-pkt-sz.txt} +SCENARIO_CFG_FILE=${SCENARIO_CFG_FILE:-$PWD/scenario.txt} + +# Default to enable cloud-sdk for this testbed, cloud-sdk is at IP addr below +#USE_CLOUD_SDK=${USE_CLOUD_SDK:-192.168.100.164} + +# LANforge target machine +LFMANAGER=${LFMANAGER:-lf14} + +# LANforge GUI machine (may often be same as target) +GMANAGER=${GMANAGER:-lf14} +GMPORT=${GMPORT:-3990} +MY_TMPDIR=${MY_TMPDIR:-/tmp} + +# Test configuration (10 minutes by default, in interest of time) +STABILITY_DURATION=${STABILITY_DURATION:-600} +TEST_RIG_ID=${TEST_RIG_ID:-NOLA-${NOLA_NUM}-Basic} + +# DUT configuration +DUT_FLAGS=${DUT_FLAGS:-0x22} # AP, WPA-PSK +#DUT_FLAGS=${DUT_FLAGS:-0x2} # AP, Open +DUT_FLAGS_MASK=${DUT_FLAGS_MASK:-0xFFFF} +DUT_SW_VER=${DUT_SW_VER:-OpenWrt-TIP} +DUT_HW_VER=EAP-102 +DUT_MODEL=EAP-102 +DUT_SERIAL=${DUT_SERIAL:-NA} +DUT_SSID1=${DUT_SSID1:-Default-SSID-2g} +DUT_SSID2=${DUT_SSID2:-Default-SSID-5gl} +DUT_PASSWD1=${DUT_PASSWD1:-12345678} +DUT_PASSWD2=${DUT_PASSWD2:-12345678} +# 2.4 radio +DUT_BSSID1=00:00:ea:92:01:03 +# 5Ghz radio +DUT_BSSID2=00:00:ea:D2:01:03 + +export LF_SERIAL AP_SERIAL LFPASSWD +export AP_AUTO_CFG_FILE WCT_CFG_FILE DPT_CFG_FILE SCENARIO_CFG_FILE +export LFMANAGER GMANAGER GMPORT MY_TMPDIR +export STABILITY_DURATION TEST_RIG_ID +export DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL +export DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3 +export DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3 +export DUT_BSSID1 DUT_BSSID2 DUT_BSSID3 +export USE_CLOUD_SDK diff --git a/testbeds/nola-basic-14/wct.txt b/testbeds/nola-basic-14/wct.txt new file mode 100644 index 000000000..321ac7c13 --- /dev/null +++ b/testbeds/nola-basic-14/wct.txt @@ -0,0 +1,323 @@ +[BLANK] +sel_port-0: 1.1.eth2 +sel_port-1: 1.1.sta00000 +sel_port-2: 1.1.sta00001 +sel_port-3: 1.1.sta00002 +sel_port-4: 1.1.sta00003 +sel_port-5: 1.1.sta00004 +sel_port-6: 1.1.sta00005 +sel_port-7: 1.1.sta00006 +sel_port-8: 1.1.sta00007 +sel_port-9: 1.1.sta00008 +sel_port-10: 1.1.sta00009 +sel_port-11: 1.1.sta00010 +sel_port-12: 1.1.sta00011 +sel_port-13: 1.1.sta00012 +sel_port-14: 1.1.sta00013 +sel_port-15: 1.1.sta00014 +sel_port-16: 1.1.sta00015 +sel_port-17: 1.1.sta00016 +sel_port-18: 1.1.sta00017 +sel_port-19: 1.1.sta00018 +sel_port-20: 1.1.sta00019 +sel_port-21: 1.1.sta00020 +sel_port-22: 1.1.sta00021 +sel_port-23: 1.1.sta00022 +sel_port-24: 1.1.sta00023 +sel_port-25: 1.1.sta00024 +sel_port-26: 1.1.sta00025 +sel_port-27: 1.1.sta00026 +sel_port-28: 1.1.sta00027 +sel_port-29: 1.1.sta00028 +sel_port-30: 1.1.sta00029 +sel_port-31: 1.1.sta00030 +sel_port-32: 1.1.sta00031 +sel_port-33: 1.1.sta00032 +sel_port-34: 1.1.sta00033 +sel_port-35: 1.1.sta00034 +sel_port-36: 1.1.sta00035 +sel_port-37: 1.1.sta00036 +sel_port-38: 1.1.sta00037 +sel_port-39: 1.1.sta00038 +sel_port-40: 1.1.sta00039 +sel_port-41: 1.1.sta00040 +sel_port-42: 1.1.sta00041 +sel_port-43: 1.1.sta00042 +sel_port-44: 1.1.sta00043 +sel_port-45: 1.1.sta00044 +sel_port-46: 1.1.sta00045 +sel_port-47: 1.1.sta00046 +sel_port-48: 1.1.sta00047 +sel_port-49: 1.1.sta00048 +sel_port-50: 1.1.sta00049 +sel_port-51: 1.1.sta00050 +sel_port-52: 1.1.sta00051 +sel_port-53: 1.1.sta00052 +sel_port-54: 1.1.sta00053 +sel_port-55: 1.1.sta00054 +sel_port-56: 1.1.sta00055 +sel_port-57: 1.1.sta00056 +sel_port-58: 1.1.sta00057 +sel_port-59: 1.1.sta00058 +sel_port-60: 1.1.sta00059 +sel_port-61: 1.1.sta00060 +sel_port-62: 1.1.sta00061 +sel_port-63: 1.1.sta00062 +sel_port-64: 1.1.sta00063 +sel_port-65: 1.1.sta00500 +sel_port-66: 1.1.sta00501 +sel_port-67: 1.1.sta00502 +sel_port-68: 1.1.sta00503 +sel_port-69: 1.1.sta00504 +sel_port-70: 1.1.sta00505 +sel_port-71: 1.1.sta00506 +sel_port-72: 1.1.sta00507 +sel_port-73: 1.1.sta00508 +sel_port-74: 1.1.sta00509 +sel_port-75: 1.1.sta00510 +sel_port-76: 1.1.sta00511 +sel_port-77: 1.1.sta00512 +sel_port-78: 1.1.sta00513 +sel_port-79: 1.1.sta00514 +sel_port-80: 1.1.sta00515 +sel_port-81: 1.1.sta00516 +sel_port-82: 1.1.sta00517 +sel_port-83: 1.1.sta00518 +sel_port-84: 1.1.sta00519 +sel_port-85: 1.1.sta00520 +sel_port-86: 1.1.sta00521 +sel_port-87: 1.1.sta00522 +sel_port-88: 1.1.sta00523 +sel_port-89: 1.1.sta00524 +sel_port-90: 1.1.sta00525 +sel_port-91: 1.1.sta00526 +sel_port-92: 1.1.sta00527 +sel_port-93: 1.1.sta00528 +sel_port-94: 1.1.sta00529 +sel_port-95: 1.1.sta00530 +sel_port-96: 1.1.sta00531 +sel_port-97: 1.1.sta00532 +sel_port-98: 1.1.sta00533 +sel_port-99: 1.1.sta00534 +sel_port-100: 1.1.sta00535 +sel_port-101: 1.1.sta00536 +sel_port-102: 1.1.sta00537 +sel_port-103: 1.1.sta00538 +sel_port-104: 1.1.sta00539 +sel_port-105: 1.1.sta00540 +sel_port-106: 1.1.sta00541 +sel_port-107: 1.1.sta00542 +sel_port-108: 1.1.sta00543 +sel_port-109: 1.1.sta00544 +sel_port-110: 1.1.sta00545 +sel_port-111: 1.1.sta00546 +sel_port-112: 1.1.sta00547 +sel_port-113: 1.1.sta00548 +sel_port-114: 1.1.sta00549 +sel_port-115: 1.1.sta00550 +sel_port-116: 1.1.sta00551 +sel_port-117: 1.1.sta00552 +sel_port-118: 1.1.sta00553 +sel_port-119: 1.1.sta00554 +sel_port-120: 1.1.sta00555 +sel_port-121: 1.1.sta00556 +sel_port-122: 1.1.sta00557 +sel_port-123: 1.1.sta00558 +sel_port-124: 1.1.sta00559 +sel_port-125: 1.1.sta00560 +sel_port-126: 1.1.sta00561 +sel_port-127: 1.1.sta00562 +sel_port-128: 1.1.sta00563 +sel_port-129: 1.1.sta04000 +sel_port-130: 1.1.sta04001 +sel_port-131: 1.1.sta04002 +sel_port-132: 1.1.sta04003 +sel_port-133: 1.1.sta04004 +sel_port-134: 1.1.sta04005 +sel_port-135: 1.1.sta04006 +sel_port-136: 1.1.sta04007 +sel_port-137: 1.1.sta04008 +sel_port-138: 1.1.sta04009 +sel_port-139: 1.1.sta04010 +sel_port-140: 1.1.sta04011 +sel_port-141: 1.1.sta04012 +sel_port-142: 1.1.sta04013 +sel_port-143: 1.1.sta04014 +sel_port-144: 1.1.sta04015 +sel_port-145: 1.1.sta04016 +sel_port-146: 1.1.sta04017 +sel_port-147: 1.1.sta04018 +sel_port-148: 1.1.sta04019 +sel_port-149: 1.1.sta04020 +sel_port-150: 1.1.sta04021 +sel_port-151: 1.1.sta04022 +sel_port-152: 1.1.sta04023 +sel_port-153: 1.1.sta04024 +sel_port-154: 1.1.sta04025 +sel_port-155: 1.1.sta04026 +sel_port-156: 1.1.sta04027 +sel_port-157: 1.1.sta04028 +sel_port-158: 1.1.sta04029 +sel_port-159: 1.1.sta04030 +sel_port-160: 1.1.sta04031 +sel_port-161: 1.1.sta04032 +sel_port-162: 1.1.sta04033 +sel_port-163: 1.1.sta04034 +sel_port-164: 1.1.sta04035 +sel_port-165: 1.1.sta04036 +sel_port-166: 1.1.sta04037 +sel_port-167: 1.1.sta04038 +sel_port-168: 1.1.sta04039 +sel_port-169: 1.1.sta04040 +sel_port-170: 1.1.sta04041 +sel_port-171: 1.1.sta04042 +sel_port-172: 1.1.sta04043 +sel_port-173: 1.1.sta04044 +sel_port-174: 1.1.sta04045 +sel_port-175: 1.1.sta04046 +sel_port-176: 1.1.sta04047 +sel_port-177: 1.1.sta04048 +sel_port-178: 1.1.sta04049 +sel_port-179: 1.1.sta04050 +sel_port-180: 1.1.sta04051 +sel_port-181: 1.1.sta04052 +sel_port-182: 1.1.sta04053 +sel_port-183: 1.1.sta04054 +sel_port-184: 1.1.sta04055 +sel_port-185: 1.1.sta04056 +sel_port-186: 1.1.sta04057 +sel_port-187: 1.1.sta04058 +sel_port-188: 1.1.sta04059 +sel_port-189: 1.1.sta04060 +sel_port-190: 1.1.sta04061 +sel_port-191: 1.1.sta04062 +sel_port-192: 1.1.sta04063 +sel_port-193: 1.1.sta04500 +sel_port-194: 1.1.sta04501 +sel_port-195: 1.1.sta04502 +sel_port-196: 1.1.sta04503 +sel_port-197: 1.1.sta04504 +sel_port-198: 1.1.sta04505 +sel_port-199: 1.1.sta04506 +sel_port-200: 1.1.sta04507 +sel_port-201: 1.1.sta04508 +sel_port-202: 1.1.sta04509 +sel_port-203: 1.1.sta04510 +sel_port-204: 1.1.sta04511 +sel_port-205: 1.1.sta04512 +sel_port-206: 1.1.sta04513 +sel_port-207: 1.1.sta04514 +sel_port-208: 1.1.sta04515 +sel_port-209: 1.1.sta04516 +sel_port-210: 1.1.sta04517 +sel_port-211: 1.1.sta04518 +sel_port-212: 1.1.sta04519 +sel_port-213: 1.1.sta04520 +sel_port-214: 1.1.sta04521 +sel_port-215: 1.1.sta04522 +sel_port-216: 1.1.sta04523 +sel_port-217: 1.1.sta04524 +sel_port-218: 1.1.sta04525 +sel_port-219: 1.1.sta04526 +sel_port-220: 1.1.sta04527 +sel_port-221: 1.1.sta04528 +sel_port-222: 1.1.sta04529 +sel_port-223: 1.1.sta04530 +sel_port-224: 1.1.sta04531 +sel_port-225: 1.1.sta04532 +sel_port-226: 1.1.sta04533 +sel_port-227: 1.1.sta04534 +sel_port-228: 1.1.sta04535 +sel_port-229: 1.1.sta04536 +sel_port-230: 1.1.sta04537 +sel_port-231: 1.1.sta04538 +sel_port-232: 1.1.sta04539 +sel_port-233: 1.1.sta04540 +sel_port-234: 1.1.sta04541 +sel_port-235: 1.1.sta04542 +sel_port-236: 1.1.sta04543 +sel_port-237: 1.1.sta04544 +sel_port-238: 1.1.sta04545 +sel_port-239: 1.1.sta04546 +sel_port-240: 1.1.sta04547 +sel_port-241: 1.1.sta04548 +sel_port-242: 1.1.sta04549 +sel_port-243: 1.1.sta04550 +sel_port-244: 1.1.sta04551 +sel_port-245: 1.1.sta04552 +sel_port-246: 1.1.sta04553 +sel_port-247: 1.1.sta04554 +sel_port-248: 1.1.sta04555 +sel_port-249: 1.1.sta04556 +sel_port-250: 1.1.sta04557 +sel_port-251: 1.1.sta04558 +sel_port-252: 1.1.sta04559 +sel_port-253: 1.1.sta04560 +sel_port-254: 1.1.sta04561 +sel_port-255: 1.1.sta04562 +sel_port-256: 1.1.sta04563 +sel_port-257: 1.1.wlan4 +sel_port-258: 1.1.wlan5 +sel_port-259: 1.1.wlan6 +sel_port-260: 1.1.wlan7 +show_events: 1 +show_log: 0 +port_sorting: 2 +kpi_id: WiFi Capacity +bg: 0xE0ECF8 +test_rig: +show_scan: 1 +auto_helper: 1 +skip_2: 0 +skip_5: 0 +batch_size: 1,5,10,20,40,80 +loop_iter: 1 +duration: 30000 +test_groups: 0 +test_groups_subset: 0 +protocol: TCP-IPv4 +dl_rate_sel: Total Download Rate: +dl_rate: 1000000000 +ul_rate_sel: Total Upload Rate: +ul_rate: 1000000000 +prcnt_tcp: 100000 +l4_endp: +pdu_sz: -1 +mss_sel: 1 +sock_buffer: 0 +ip_tos: 0 +multi_conn: -1 +min_speed: -1 +ps_interval: 60-second Running Average +fairness: 0 +naptime: 0 +before_clear: 5000 +rpt_timer: 1000 +try_lower: 0 +rnd_rate: 1 +leave_ports_up: 0 +down_quiesce: 0 +udp_nat: 1 +record_other_ssids: 0 +clear_reset_counters: 0 +do_pf: 0 +pf_min_period_dl: 128000 +pf_min_period_ul: 0 +pf_max_reconnects: 0 +use_mix_pdu: 0 +pdu_prcnt_pps: 1 +pdu_prcnt_bps: 0 +pdu_mix_ln-0: +show_scan: 1 +show_golden_3p: 0 +save_csv: 0 +show_realtime: 1 +show_pie: 1 +show_per_loop_totals: 1 +show_cx_time: 1 +show_dhcp: 1 +show_anqp: 1 +show_4way: 1 +show_latency: 1 + + diff --git a/testbeds/nola-basic-15/NOTES.txt b/testbeds/nola-basic-15/NOTES.txt new file mode 100644 index 000000000..7a1412587 --- /dev/null +++ b/testbeds/nola-basic-15/NOTES.txt @@ -0,0 +1 @@ +DUT is an Edge-Core 5410 wifi-5, running TIP OpenWrt. diff --git a/testbeds/nola-basic-15/OpenWrt-overlay/etc/config/bugcheck b/testbeds/nola-basic-15/OpenWrt-overlay/etc/config/bugcheck new file mode 100644 index 000000000..b138a6fad --- /dev/null +++ b/testbeds/nola-basic-15/OpenWrt-overlay/etc/config/bugcheck @@ -0,0 +1,2 @@ +DO_BUGCHECK=1 +export DO_BUGCHECK diff --git a/testbeds/nola-basic-15/OpenWrt-overlay/etc/config/wireless b/testbeds/nola-basic-15/OpenWrt-overlay/etc/config/wireless new file mode 100644 index 000000000..20cf5293b --- /dev/null +++ b/testbeds/nola-basic-15/OpenWrt-overlay/etc/config/wireless @@ -0,0 +1,32 @@ +config wifi-device 'radio0' + option type 'mac80211' + option channel '36' + option hwmode '11a' + option path 'soc/1b700000.pci/pci0001:00/0001:00:00.0/0001:01:00.0' + option htmode 'VHT80' + option disabled '0' + +config wifi-iface 'default_radio0' + option device 'radio0' + option network 'lan' + option mode 'ap' + option ssid 'Default-SSID-5gl' + option encryption 'psk-mixed' + option key '12345678' + +config wifi-device 'radio1' + option type 'mac80211' + option channel '11' + option hwmode '11g' + option path 'soc/1b900000.pci/pci0002:00/0002:00:00.0/0002:01:00.0' + option htmode 'HT20' + option disabled '0' + +config wifi-iface 'default_radio1' + option device 'radio1' + option network 'lan' + option mode 'ap' + option ssid 'Default-SSID-2g' + option encryption 'psk-mixed' + option key '12345678' + diff --git a/testbeds/nola-basic-15/ap-auto.txt b/testbeds/nola-basic-15/ap-auto.txt new file mode 100644 index 000000000..71769a40e --- /dev/null +++ b/testbeds/nola-basic-15/ap-auto.txt @@ -0,0 +1,111 @@ +[BLANK] +sel_port-0: 1.1.sta00500 +show_events: 1 +show_log: 0 +port_sorting: 0 +kpi_id: AP Auto +bg: 0xE0ECF8 +test_rig: +show_scan: 1 +auto_helper: 1 +skip_2: 1 +skip_5: 1 +dut5b-0: NA +dut5-0: TIP Default-SSID-5gl +dut2-0: TIP Default-SSID-2g +dut5b-1: NA +dut5-1: NA +dut2-1: NA +dut5b-2: NA +dut5-2: NA +dut2-2: NA +spatial_streams: AUTO +bandw_options: AUTO +modes: Auto +upstream_port: 1.1.2 eth2 +operator: +mconn: 1 +tos: 0 +vid_buf: 1000000 +vid_speed: 700000 +reset_stall_thresh_udp_dl: 9600 +reset_stall_thresh_udp_ul: 9600 +reset_stall_thresh_tcp_dl: 9600 +reset_stall_thresh_tcp_ul: 9600 +reset_stall_thresh_l4: 100000 +reset_stall_thresh_voip: 20000 +stab_udp_dl_min: 56000 +stab_udp_dl_max: 0 +stab_udp_ul_min: 56000 +stab_udp_ul_max: 0 +stab_tcp_dl_min: 500000 +stab_tcp_dl_max: 0 +stab_tcp_ul_min: 500000 +stab_tcp_ul_max: 0 +dl_speed: 85% +ul_speed: 85% +max_stations_2: 129 +max_stations_5: 131 +max_stations_dual: 260 +lt_sta: 2 +voip_calls: 0 +lt_dur: 3600 +reset_dur: 600 +lt_gi: 30 +dur20: 20 +hunt_retries: 1 +cap_dl: 1 +cap_ul: 0 +cap_use_pkt_sizes: 0 +stability_reset_radios: 0 +pkt_loss_thresh: 10000 +frame_sizes: 200, 512, 1024, MTU +capacities: 1, 2, 5, 10, 20, 40, 64, 128, 256, 512, 1024, MAX +radio2-0: 1.1.4 wiphy0 +radio2-1: 1.1.0 wiphy2 +radio2-2: 1.1.0 wiphy4 +radio5-0: 1.1.5 wiphy3 +radio5-1: 1.1.7 wiphy5 +radio5-2: 1.1.9 wiphy6 +radio5-3: 1.1.9 wiphy7 +radio5-4: 1.1.0 wiphy1 +radio5-5: +basic_cx: 1 +tput: 0 +dual_band_tput: 0 +capacity: 0 +longterm: 0 +mix_stability: 0 +loop_iter: 1 +reset_batch_size: 1 +reset_duration_min: 10000 +reset_duration_max: 60000 + +# Configure pass/fail metrics for this testbed. +pf_text0: 2.4 DL 200 70Mbps +pf_text1: 2.4 DL 512 110Mbps +pf_text2: 2.4 DL 1024 115Mbps +pf_text3: 2.4 DL MTU 120Mbps +pf_text4: +pf_text5: 2.4 UL 200 88Mbps +pf_text6: 2.4 UL 512 106Mbps +pf_text7: 2.4 UL 1024 115Mbps +pf_text8: 2.4 UL MTU 120Mbps +pf_text9: +pf_text10: 5 DL 200 72Mbps +pf_text11: 5 DL 512 185Mbps +pf_text12: 5 DL 1024 370Mbps +pf_text13: 5 DL MTU 525Mbps +pf_text14: +pf_text15: 5 UL 200 90Mbps +pf_text16: 5 UL 512 230Mbps +pf_text17: 5 UL 1024 450Mbps +pf_text18: 5 UL MTU 630Mbps + +# Tune connect-time thresholds. +cx_prcnt: 950000 +cx_open_thresh: 35 +cx_psk_thresh: 75 +cx_1x_thresh: 130 + + diff --git a/testbeds/nola-basic-15/dpt-pkt-sz.txt b/testbeds/nola-basic-15/dpt-pkt-sz.txt new file mode 100644 index 000000000..670fb0c2b --- /dev/null +++ b/testbeds/nola-basic-15/dpt-pkt-sz.txt @@ -0,0 +1,55 @@ +[BLANK] +show_events: 1 +show_log: 0 +port_sorting: 0 +kpi_id: Dataplane +bg: 0xE0ECF8 +test_rig: +show_scan: 1 +auto_helper: 0 +skip_2: 0 +skip_5: 0 +selected_dut: TIP +duration: 15000 +traffic_port: 1.1.136 sta00500 +upstream_port: 1.1.2 eth2 +path_loss: 10 +speed: 85% +speed2: 0Kbps +min_rssi_bound: -150 +max_rssi_bound: 0 +channels: AUTO +modes: Auto +pkts: 60;142;256;512;1024;MTU;4000 +spatial_streams: AUTO +security_options: AUTO +bandw_options: AUTO +traffic_types: UDP +directions: DUT Transmit;DUT Receive +txo_preamble: OFDM +txo_mcs: 0 CCK, OFDM, HT, VHT +txo_retries: No Retry +txo_sgi: OFF +txo_txpower: 15 +attenuator: 0 +attenuator2: 0 +attenuator_mod: 255 +attenuator_mod2: 255 +attenuations: 0..+50..950 +attenuations2: 0..+50..950 +chamber: 0 +tt_deg: 0..+45..359 +cust_pkt_sz: +show_3s: 0 +show_ll_graphs: 1 +show_gp_graphs: 1 +show_1m: 1 +pause_iter: 0 +show_realtime: 1 +operator: +mconn: 1 +mpkt: 1000 +tos: 0 +loop_iterations: 1 + + diff --git a/testbeds/nola-basic-15/run_basic.bash b/testbeds/nola-basic-15/run_basic.bash new file mode 100755 index 000000000..7d88ff44d --- /dev/null +++ b/testbeds/nola-basic-15/run_basic.bash @@ -0,0 +1,71 @@ +#!/bin/bash + +# Example usage of this script +# DUT_SW_VER=my-build-id ./run_basic.bash +# +# Other DUT variables in test_bed_cfg.bash may also be over-ridden, +# including those below. See LANforge 'add_dut' CLI command for +# details on what these variables are for. + +# DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL +# DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3 +# DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3 +# DUT_BSSID1 DUT_BSSID2 DUT_BSSID3 + +# Source config file +. test_bed_cfg.bash + +echo "Top wlan-testing git commits.
" > ./tmp_gitlog.html
+git log -n 8 --oneline >> ./tmp_gitlog.html
+echo "
" >> ./tmp_gitlog.html + +NOTES_HTML=`pwd`/testbed_notes.html +GITLOG=`pwd`/tmp_gitlog.html + +if [ -d "../../../wlan-ap" ] +then + DUTGITLOG=/tmp/${DUT_SW_VER}_dut_gitlog.html + echo "Top wlan-ap git commits.
" > $DUTGITLOG
+    (cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
+    echo "
" >> $DUTGITLOG + export DUTGITLOG +fi +export NOTES_HTML GITLOG + +# TODO: Copy config file to cloud controller and restart it +# and/or do other config to make it work. + +# Change to scripts dir +cd ../../lanforge/lanforge-scripts/gui + +# Where to place results. basic_regression.bash will use this variable. +RSLTS_DIR=/tmp/nola-${NOLA_NUM}-basic-regression +export RSLTS_DIR + +# Clean any existing data from the results dir +rm -fr $RSLTS_DIR + +# Run one test +# DEFAULT_ENABLE=0 DO_SHORT_AP_STABILITY_RESET=1 ./basic_regression.bash + +# Clean up old DHCP leases +../lf_gui_cmd.pl --manager $GMANAGER --port $GMPORT --cmd "cli clear_port_counters ALL ALL ALL dhcp_leases" + +# Run all tests +./basic_regression.bash + +cd - + +if [ ! -d $RSLTS_DIR ] +then + echo "Test did not run as expected, $RSLTS_DIR not found." + mkdir -p $RSLTS_DIR +fi + +if [ -f ${MY_TMPDIR}/basic_regression_log.txt ] +then + echo "Found ${MY_TMPDIR}/basic_regression_log.txt, moving into $RSLTS_DIR" + mv ${MY_TMPDIR}/basic_regression_log.txt $RSLTS_DIR/ +fi + +echo "See results in $RSLTS_DIR" diff --git a/testbeds/nola-basic-15/run_basic_fast.bash b/testbeds/nola-basic-15/run_basic_fast.bash new file mode 100755 index 000000000..1d85a73cd --- /dev/null +++ b/testbeds/nola-basic-15/run_basic_fast.bash @@ -0,0 +1,83 @@ +#!/bin/bash + +# Example usage of this script +# DUT_SW_VER=my-build-id ./run_basic.bash +# +# Other DUT variables in test_bed_cfg.bash may also be over-ridden, +# including those below. See LANforge 'add_dut' CLI command for +# details on what these variables are for. + +# DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL +# DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3 +# DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3 +# DUT_BSSID1 DUT_BSSID2 DUT_BSSID3 + +#set -x + +DO_SHORT_AP_BASIC_CX=${DO_SHORT_AP_BASIC_CX:-1} +DO_WCT_BI=${DO_WCT_BI:-1} + +export DO_SHORT_AP_BASI_CX DO_WCT_BI + +# Source config file +. test_bed_cfg.bash + +echo "Top wlan-testing git commits.
" > ./tmp_gitlog.html
+git log -n 8 --oneline >> ./tmp_gitlog.html
+echo "
" >> ./tmp_gitlog.html + +NOTES_HTML=`pwd`/testbed_notes.html +GITLOG=`pwd`/tmp_gitlog.html + +if [ -d "../../../wlan-ap" ] +then + DUTGITLOG=/tmp/${DUT_SW_VER}_dut_gitlog.html + echo "Top wlan-ap git commits.
" > $DUTGITLOG
+    (cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
+    echo "
" >> $DUTGITLOG + export DUTGITLOG +fi +export NOTES_HTML GITLOG + +# TODO: Copy config file to cloud controller and restart it +# and/or do other config to make it work. + +# Change to scripts dir +cd ../../lanforge/lanforge-scripts/gui + +# Where to place results. basic_regression.bash will use this variable. +RSLTS_DIR=/tmp/nola-${NOLA_NUM}-basic-regression-fast +export RSLTS_DIR + +# Clean any existing data from the results dir +rm -fr $RSLTS_DIR + +# Clean up old DHCP leases +../lf_gui_cmd.pl --manager $GMANAGER --port $GMPORT --cmd "cli clear_port_counters ALL ALL ALL dhcp_leases" + +# Run a subset of available tests +# See 'Tests to run' comment in basic_regression.bash for available options. + +#DEFAULT_ENABLE=0 WCT_DURATION=20s DO_SHORT_AP_BASIC_CX=1 DO_WCT_BI=1 ./basic_regression.bash + +DEFAULT_ENABLE=0 WCT_DURATION=20s ./basic_regression.bash + + +# Run all tests +#./basic_regression.bash + +cd - + +if [ ! -d $RSLTS_DIR ] +then + echo "Test did not run as expected, $RSLTS_DIR not found." + mkdir -p $RSLTS_DIR +fi + +if [ -f ${MY_TMPDIR}/basic_regression_log.txt ] +then + echo "Found ${MY_TMPDIR}/basic_regression_log.txt, moving into $RSLTS_DIR" + mv ${MY_TMPDIR}/basic_regression_log.txt $RSLTS_DIR/ +fi + +echo "See results in $RSLTS_DIR" diff --git a/testbeds/nola-basic-15/scenario.txt b/testbeds/nola-basic-15/scenario.txt new file mode 100644 index 000000000..bde6a131d --- /dev/null +++ b/testbeds/nola-basic-15/scenario.txt @@ -0,0 +1,11 @@ +profile_link 1.1 STA-AC 64 'DUT: TIP Radio-1' NA wiphy0,AUTO -1 +profile_link 1.1 STA-AC 64 'DUT: TIP Radio-2' NA wiphy1,AUTO -1 +profile_link 1.1 STA-AC 64 'DUT: TIP Radio-1' NA wiphy2,AUTO -1 +profile_link 1.1 STA-AC 64 'DUT: TIP Radio-2' NA wiphy3,AUTO -1 +profile_link 1.1 upstream-dhcp 1 NA NA eth2,AUTO -1 +profile_link 1.1 uplink-nat 1 'DUT: upstream LAN 10.28.2.1/24' NA eth3,eth2 -1 +profile_link 1.1 STA-AC 1 'DUT: TIP Radio-2' NA ALL-AX,AUTO -1 +dut ecw5410 393 148 +dut TIP 395 295 +dut upstream 306 62 +resource 1.1 132 218 diff --git a/testbeds/nola-basic-15/scenario_small.txt b/testbeds/nola-basic-15/scenario_small.txt new file mode 100644 index 000000000..d70e64875 --- /dev/null +++ b/testbeds/nola-basic-15/scenario_small.txt @@ -0,0 +1,11 @@ +profile_link 1.1 STA-AC 24 'DUT: TIP Radio-1' NA wiphy0,AUTO -1 +profile_link 1.1 STA-AC 24 'DUT: TIP Radio-2' NA wiphy1,AUTO -1 +profile_link 1.1 STA-AC 24 'DUT: TIP Radio-1' NA wiphy2,AUTO -1 +profile_link 1.1 STA-AC 24 'DUT: TIP Radio-2' NA wiphy3,AUTO -1 +profile_link 1.1 upstream-dhcp 1 NA NA eth2,AUTO -1 +profile_link 1.1 uplink-nat 1 'DUT: upstream LAN 10.28.2.1/24' NA eth3,eth2 -1 +profile_link 1.1 STA-AC 1 'DUT: TIP Radio-2' NA ALL-AX,AUTO -1 +dut ecw5410 393 148 +dut TIP 395 295 +dut upstream 306 62 +resource 1.1 132 218 diff --git a/testbeds/nola-basic-15/test_bed_cfg.bash b/testbeds/nola-basic-15/test_bed_cfg.bash new file mode 100644 index 000000000..418bff6e0 --- /dev/null +++ b/testbeds/nola-basic-15/test_bed_cfg.bash @@ -0,0 +1,62 @@ +# Example test-bed configuration + +# Scripts should source this file to set the default environment variables +# and then override the variables specific to their test case (and it can be done +# in opposite order for same results +# +# After the env variables are set, +# call the 'lanforge/lanforge-scripts/gui/basic_regression.bash' +# from the directory in which it resides. + +NOLA_NUM=15 + +PWD=`pwd` +AP_SERIAL=${AP_SERIAL:-/dev/ttyAP4} +LF_SERIAL=${LF_SERIAL:-/dev/ttyLF4} +LFPASSWD=${LFPASSWD:-lanforge} # Root password on LANforge machine +AP_AUTO_CFG_FILE=${AP_AUTO_CFG_FILE:-$PWD/ap-auto.txt} +WCT_CFG_FILE=${WCT_CFG_FILE:-$PWD/wct.txt} +DPT_CFG_FILE=${DPT_CFG_FILE:-$PWD/dpt-pkt-sz.txt} +SCENARIO_CFG_FILE=${SCENARIO_CFG_FILE:-$PWD/scenario.txt} + +# Default to enable cloud-sdk for this testbed, cloud-sdk is at IP addr below +#USE_CLOUD_SDK=${USE_CLOUD_SDK:-192.168.100.164} + +# LANforge target machine +LFMANAGER=${LFMANAGER:-lf15} + +# LANforge GUI machine (may often be same as target) +GMANAGER=${GMANAGER:-lf15} +GMPORT=${GMPORT:-3990} +MY_TMPDIR=${MY_TMPDIR:-/tmp} + +# Test configuration (10 minutes by default, in interest of time) +STABILITY_DURATION=${STABILITY_DURATION:-600} +TEST_RIG_ID=${TEST_RIG_ID:-NOLA-${NOLA_NUM}-Basic} + +# DUT configuration +DUT_FLAGS=${DUT_FLAGS:-0x22} # AP, WPA-PSK +#DUT_FLAGS=${DUT_FLAGS:-0x2} # AP, Open +DUT_FLAGS_MASK=${DUT_FLAGS_MASK:-0xFFFF} +DUT_SW_VER=${DUT_SW_VER:-OpenWrt-TIP} +DUT_HW_VER=ECW5410 +DUT_MODEL=ECW5410 +DUT_SERIAL=${DUT_SERIAL:-NA} +DUT_SSID1=${DUT_SSID1:-Default-SSID-2g} +DUT_SSID2=${DUT_SSID2:-Default-SSID-5gl} +DUT_PASSWD1=${DUT_PASSWD1:-12345678} +DUT_PASSWD2=${DUT_PASSWD2:-12345678} +# 2.4 radio +DUT_BSSID1=68:21:5F:D2:F7:26 +# 5Ghz radio +DUT_BSSID2=68:21:5F:D2:F7:27 + +export LF_SERIAL AP_SERIAL LFPASSWD +export AP_AUTO_CFG_FILE WCT_CFG_FILE DPT_CFG_FILE SCENARIO_CFG_FILE +export LFMANAGER GMANAGER GMPORT MY_TMPDIR +export STABILITY_DURATION TEST_RIG_ID +export DUT_FLAGS DUT_FLAGS_MASK DUT_SW_VER DUT_HW_VER DUT_MODEL +export DUT_SERIAL DUT_SSID1 DUT_SSID2 DUT_SSID3 +export DUT_PASSWD1 DUT_PASSWD2 DUT_PASSWD3 +export DUT_BSSID1 DUT_BSSID2 DUT_BSSID3 +export USE_CLOUD_SDK diff --git a/testbeds/nola-basic-15/wct.txt b/testbeds/nola-basic-15/wct.txt new file mode 100644 index 000000000..321ac7c13 --- /dev/null +++ b/testbeds/nola-basic-15/wct.txt @@ -0,0 +1,323 @@ +[BLANK] +sel_port-0: 1.1.eth2 +sel_port-1: 1.1.sta00000 +sel_port-2: 1.1.sta00001 +sel_port-3: 1.1.sta00002 +sel_port-4: 1.1.sta00003 +sel_port-5: 1.1.sta00004 +sel_port-6: 1.1.sta00005 +sel_port-7: 1.1.sta00006 +sel_port-8: 1.1.sta00007 +sel_port-9: 1.1.sta00008 +sel_port-10: 1.1.sta00009 +sel_port-11: 1.1.sta00010 +sel_port-12: 1.1.sta00011 +sel_port-13: 1.1.sta00012 +sel_port-14: 1.1.sta00013 +sel_port-15: 1.1.sta00014 +sel_port-16: 1.1.sta00015 +sel_port-17: 1.1.sta00016 +sel_port-18: 1.1.sta00017 +sel_port-19: 1.1.sta00018 +sel_port-20: 1.1.sta00019 +sel_port-21: 1.1.sta00020 +sel_port-22: 1.1.sta00021 +sel_port-23: 1.1.sta00022 +sel_port-24: 1.1.sta00023 +sel_port-25: 1.1.sta00024 +sel_port-26: 1.1.sta00025 +sel_port-27: 1.1.sta00026 +sel_port-28: 1.1.sta00027 +sel_port-29: 1.1.sta00028 +sel_port-30: 1.1.sta00029 +sel_port-31: 1.1.sta00030 +sel_port-32: 1.1.sta00031 +sel_port-33: 1.1.sta00032 +sel_port-34: 1.1.sta00033 +sel_port-35: 1.1.sta00034 +sel_port-36: 1.1.sta00035 +sel_port-37: 1.1.sta00036 +sel_port-38: 1.1.sta00037 +sel_port-39: 1.1.sta00038 +sel_port-40: 1.1.sta00039 +sel_port-41: 1.1.sta00040 +sel_port-42: 1.1.sta00041 +sel_port-43: 1.1.sta00042 +sel_port-44: 1.1.sta00043 +sel_port-45: 1.1.sta00044 +sel_port-46: 1.1.sta00045 +sel_port-47: 1.1.sta00046 +sel_port-48: 1.1.sta00047 +sel_port-49: 1.1.sta00048 +sel_port-50: 1.1.sta00049 +sel_port-51: 1.1.sta00050 +sel_port-52: 1.1.sta00051 +sel_port-53: 1.1.sta00052 +sel_port-54: 1.1.sta00053 +sel_port-55: 1.1.sta00054 +sel_port-56: 1.1.sta00055 +sel_port-57: 1.1.sta00056 +sel_port-58: 1.1.sta00057 +sel_port-59: 1.1.sta00058 +sel_port-60: 1.1.sta00059 +sel_port-61: 1.1.sta00060 +sel_port-62: 1.1.sta00061 +sel_port-63: 1.1.sta00062 +sel_port-64: 1.1.sta00063 +sel_port-65: 1.1.sta00500 +sel_port-66: 1.1.sta00501 +sel_port-67: 1.1.sta00502 +sel_port-68: 1.1.sta00503 +sel_port-69: 1.1.sta00504 +sel_port-70: 1.1.sta00505 +sel_port-71: 1.1.sta00506 +sel_port-72: 1.1.sta00507 +sel_port-73: 1.1.sta00508 +sel_port-74: 1.1.sta00509 +sel_port-75: 1.1.sta00510 +sel_port-76: 1.1.sta00511 +sel_port-77: 1.1.sta00512 +sel_port-78: 1.1.sta00513 +sel_port-79: 1.1.sta00514 +sel_port-80: 1.1.sta00515 +sel_port-81: 1.1.sta00516 +sel_port-82: 1.1.sta00517 +sel_port-83: 1.1.sta00518 +sel_port-84: 1.1.sta00519 +sel_port-85: 1.1.sta00520 +sel_port-86: 1.1.sta00521 +sel_port-87: 1.1.sta00522 +sel_port-88: 1.1.sta00523 +sel_port-89: 1.1.sta00524 +sel_port-90: 1.1.sta00525 +sel_port-91: 1.1.sta00526 +sel_port-92: 1.1.sta00527 +sel_port-93: 1.1.sta00528 +sel_port-94: 1.1.sta00529 +sel_port-95: 1.1.sta00530 +sel_port-96: 1.1.sta00531 +sel_port-97: 1.1.sta00532 +sel_port-98: 1.1.sta00533 +sel_port-99: 1.1.sta00534 +sel_port-100: 1.1.sta00535 +sel_port-101: 1.1.sta00536 +sel_port-102: 1.1.sta00537 +sel_port-103: 1.1.sta00538 +sel_port-104: 1.1.sta00539 +sel_port-105: 1.1.sta00540 +sel_port-106: 1.1.sta00541 +sel_port-107: 1.1.sta00542 +sel_port-108: 1.1.sta00543 +sel_port-109: 1.1.sta00544 +sel_port-110: 1.1.sta00545 +sel_port-111: 1.1.sta00546 +sel_port-112: 1.1.sta00547 +sel_port-113: 1.1.sta00548 +sel_port-114: 1.1.sta00549 +sel_port-115: 1.1.sta00550 +sel_port-116: 1.1.sta00551 +sel_port-117: 1.1.sta00552 +sel_port-118: 1.1.sta00553 +sel_port-119: 1.1.sta00554 +sel_port-120: 1.1.sta00555 +sel_port-121: 1.1.sta00556 +sel_port-122: 1.1.sta00557 +sel_port-123: 1.1.sta00558 +sel_port-124: 1.1.sta00559 +sel_port-125: 1.1.sta00560 +sel_port-126: 1.1.sta00561 +sel_port-127: 1.1.sta00562 +sel_port-128: 1.1.sta00563 +sel_port-129: 1.1.sta04000 +sel_port-130: 1.1.sta04001 +sel_port-131: 1.1.sta04002 +sel_port-132: 1.1.sta04003 +sel_port-133: 1.1.sta04004 +sel_port-134: 1.1.sta04005 +sel_port-135: 1.1.sta04006 +sel_port-136: 1.1.sta04007 +sel_port-137: 1.1.sta04008 +sel_port-138: 1.1.sta04009 +sel_port-139: 1.1.sta04010 +sel_port-140: 1.1.sta04011 +sel_port-141: 1.1.sta04012 +sel_port-142: 1.1.sta04013 +sel_port-143: 1.1.sta04014 +sel_port-144: 1.1.sta04015 +sel_port-145: 1.1.sta04016 +sel_port-146: 1.1.sta04017 +sel_port-147: 1.1.sta04018 +sel_port-148: 1.1.sta04019 +sel_port-149: 1.1.sta04020 +sel_port-150: 1.1.sta04021 +sel_port-151: 1.1.sta04022 +sel_port-152: 1.1.sta04023 +sel_port-153: 1.1.sta04024 +sel_port-154: 1.1.sta04025 +sel_port-155: 1.1.sta04026 +sel_port-156: 1.1.sta04027 +sel_port-157: 1.1.sta04028 +sel_port-158: 1.1.sta04029 +sel_port-159: 1.1.sta04030 +sel_port-160: 1.1.sta04031 +sel_port-161: 1.1.sta04032 +sel_port-162: 1.1.sta04033 +sel_port-163: 1.1.sta04034 +sel_port-164: 1.1.sta04035 +sel_port-165: 1.1.sta04036 +sel_port-166: 1.1.sta04037 +sel_port-167: 1.1.sta04038 +sel_port-168: 1.1.sta04039 +sel_port-169: 1.1.sta04040 +sel_port-170: 1.1.sta04041 +sel_port-171: 1.1.sta04042 +sel_port-172: 1.1.sta04043 +sel_port-173: 1.1.sta04044 +sel_port-174: 1.1.sta04045 +sel_port-175: 1.1.sta04046 +sel_port-176: 1.1.sta04047 +sel_port-177: 1.1.sta04048 +sel_port-178: 1.1.sta04049 +sel_port-179: 1.1.sta04050 +sel_port-180: 1.1.sta04051 +sel_port-181: 1.1.sta04052 +sel_port-182: 1.1.sta04053 +sel_port-183: 1.1.sta04054 +sel_port-184: 1.1.sta04055 +sel_port-185: 1.1.sta04056 +sel_port-186: 1.1.sta04057 +sel_port-187: 1.1.sta04058 +sel_port-188: 1.1.sta04059 +sel_port-189: 1.1.sta04060 +sel_port-190: 1.1.sta04061 +sel_port-191: 1.1.sta04062 +sel_port-192: 1.1.sta04063 +sel_port-193: 1.1.sta04500 +sel_port-194: 1.1.sta04501 +sel_port-195: 1.1.sta04502 +sel_port-196: 1.1.sta04503 +sel_port-197: 1.1.sta04504 +sel_port-198: 1.1.sta04505 +sel_port-199: 1.1.sta04506 +sel_port-200: 1.1.sta04507 +sel_port-201: 1.1.sta04508 +sel_port-202: 1.1.sta04509 +sel_port-203: 1.1.sta04510 +sel_port-204: 1.1.sta04511 +sel_port-205: 1.1.sta04512 +sel_port-206: 1.1.sta04513 +sel_port-207: 1.1.sta04514 +sel_port-208: 1.1.sta04515 +sel_port-209: 1.1.sta04516 +sel_port-210: 1.1.sta04517 +sel_port-211: 1.1.sta04518 +sel_port-212: 1.1.sta04519 +sel_port-213: 1.1.sta04520 +sel_port-214: 1.1.sta04521 +sel_port-215: 1.1.sta04522 +sel_port-216: 1.1.sta04523 +sel_port-217: 1.1.sta04524 +sel_port-218: 1.1.sta04525 +sel_port-219: 1.1.sta04526 +sel_port-220: 1.1.sta04527 +sel_port-221: 1.1.sta04528 +sel_port-222: 1.1.sta04529 +sel_port-223: 1.1.sta04530 +sel_port-224: 1.1.sta04531 +sel_port-225: 1.1.sta04532 +sel_port-226: 1.1.sta04533 +sel_port-227: 1.1.sta04534 +sel_port-228: 1.1.sta04535 +sel_port-229: 1.1.sta04536 +sel_port-230: 1.1.sta04537 +sel_port-231: 1.1.sta04538 +sel_port-232: 1.1.sta04539 +sel_port-233: 1.1.sta04540 +sel_port-234: 1.1.sta04541 +sel_port-235: 1.1.sta04542 +sel_port-236: 1.1.sta04543 +sel_port-237: 1.1.sta04544 +sel_port-238: 1.1.sta04545 +sel_port-239: 1.1.sta04546 +sel_port-240: 1.1.sta04547 +sel_port-241: 1.1.sta04548 +sel_port-242: 1.1.sta04549 +sel_port-243: 1.1.sta04550 +sel_port-244: 1.1.sta04551 +sel_port-245: 1.1.sta04552 +sel_port-246: 1.1.sta04553 +sel_port-247: 1.1.sta04554 +sel_port-248: 1.1.sta04555 +sel_port-249: 1.1.sta04556 +sel_port-250: 1.1.sta04557 +sel_port-251: 1.1.sta04558 +sel_port-252: 1.1.sta04559 +sel_port-253: 1.1.sta04560 +sel_port-254: 1.1.sta04561 +sel_port-255: 1.1.sta04562 +sel_port-256: 1.1.sta04563 +sel_port-257: 1.1.wlan4 +sel_port-258: 1.1.wlan5 +sel_port-259: 1.1.wlan6 +sel_port-260: 1.1.wlan7 +show_events: 1 +show_log: 0 +port_sorting: 2 +kpi_id: WiFi Capacity +bg: 0xE0ECF8 +test_rig: +show_scan: 1 +auto_helper: 1 +skip_2: 0 +skip_5: 0 +batch_size: 1,5,10,20,40,80 +loop_iter: 1 +duration: 30000 +test_groups: 0 +test_groups_subset: 0 +protocol: TCP-IPv4 +dl_rate_sel: Total Download Rate: +dl_rate: 1000000000 +ul_rate_sel: Total Upload Rate: +ul_rate: 1000000000 +prcnt_tcp: 100000 +l4_endp: +pdu_sz: -1 +mss_sel: 1 +sock_buffer: 0 +ip_tos: 0 +multi_conn: -1 +min_speed: -1 +ps_interval: 60-second Running Average +fairness: 0 +naptime: 0 +before_clear: 5000 +rpt_timer: 1000 +try_lower: 0 +rnd_rate: 1 +leave_ports_up: 0 +down_quiesce: 0 +udp_nat: 1 +record_other_ssids: 0 +clear_reset_counters: 0 +do_pf: 0 +pf_min_period_dl: 128000 +pf_min_period_ul: 0 +pf_max_reconnects: 0 +use_mix_pdu: 0 +pdu_prcnt_pps: 1 +pdu_prcnt_bps: 0 +pdu_mix_ln-0: +show_scan: 1 +show_golden_3p: 0 +save_csv: 0 +show_realtime: 1 +show_pie: 1 +show_per_loop_totals: 1 +show_cx_time: 1 +show_dhcp: 1 +show_anqp: 1 +show_4way: 1 +show_latency: 1 + +