This commit is contained in:
Mohammad Rahman
2020-12-17 16:26:59 -05:00
60 changed files with 3762 additions and 550 deletions

View File

@@ -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 <<EOF | kubectl apply -f -
apiVersion: batch/v1
kind: Job
metadata:
name: nightly-ci-$today
spec:
template:
spec:
containers:
- name: tests
image: ${{ env.DOCKER_SERVER }}/cloud-sdk-nightly:${{ github.run_id }}
args:
- "--testrail-user-id"
- "gleb@opsfleet.com"
- "--testrail-user-password"
- "${{ env.TESTRAIL_USER_PASSWORD }}"
- "--skip-update-firmware"
imagePullSecrets:
- name: tip-docker-registry-key
restartPolicy: Never
backoffLimit: 0
EOF
# kubectl wait job/nightly-ci-$today --for=condition=complete --timeout=3600s
# kubectl logs -l job-name=nightly-ci-$today --since=1h
# kubectl delete job/nightly-ci-$today
shell: bash

142
.gitignore vendored Normal file
View File

@@ -0,0 +1,142 @@
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
.pybuilder/
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
# pytype static type analyzer
.pytype/
# Cython debug symbols
cython_debug/
docker/*
!docker/nightly*
docker/nightly*log

View File

@@ -1,536 +0,0 @@
#!/usr/bin/python3
import base64
import urllib.request
from bs4 import BeautifulSoup
import ssl
import subprocess, os
from artifactory import ArtifactoryPath
import tarfile
import paramiko
from paramiko import SSHClient
from scp import SCPClient
import os
import pexpect
from pexpect import pxssh
import sys
import paramiko
from scp import SCPClient
import pprint
from pprint import pprint
from os import listdir
import re
import requests
import json
import testrail_api
import logging
import datetime
import time
local_dir="logs/"
#print("Local Directory where all files will be copied and logged", local_dir)
tr_user="syama.devi@connectus.ai"
tr_pw="Connectus123$"
#print ("Testrail password =", tr_pw)
aws_host='3.96.56.0'
aws_user='ubuntu'
logger = logging.getLogger('Nightly_Sanity')
hdlr = logging.FileHandler(local_dir+"/Nightly_Sanity.log")
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
logger.setLevel(logging.INFO)
logger.info('Start Nightly Sanity run')
# For finding files
# https://stackoverflow.com/questions/3207219/how-do-i-list-all-files-of-a-directory
import glob
#external_results_dir=/var/tmp/lanforge
if sys.version_info[0] != 3:
print("This script requires Python 3")
exit(1)
if 'py-json' not in sys.path:
sys.path.append('../py-json')
from LANforge.LFUtils import *
# if you lack __init__.py in this directory you will not find sta_connect module#
import sta_connect
import sta_connect2
import testrail_api
from sta_connect import StaConnect
from sta_connect2 import StaConnect2
from testrail_api import APIClient
from datetime import date
client: APIClient = APIClient('https://telecominfraproject.testrail.com')
client.user = tr_user
client.password = tr_pw
###Class for jfrog Interaction
class GetBuild:
def __init__(self):
self.user = 'cicd_user'
self.password = 'fepv6nj9guCPeEHC'
ssl._create_default_https_context = ssl._create_unverified_context
def get_latest_image(self,url):
auth = str(
base64.b64encode(
bytes('%s:%s' % (self.user, self.password), 'utf-8')
),
'ascii'
).strip()
headers = {'Authorization': 'Basic ' + auth}
''' FIND THE LATEST FILE NAME'''
#print(url)
req = urllib.request.Request(url, headers=headers)
response = urllib.request.urlopen(req)
html = response.read()
soup = BeautifulSoup(html, features="html.parser")
##find the last pending link on dev
last_link = soup.find_all('a', href=re.compile("pending"))[-1]
latest_file=last_link['href']
latest_fw = latest_file.replace('.tar.gz','')
return latest_fw
###Class for CloudSDK Interaction via RestAPI
class CloudSDK:
def __init__(self):
self.user = 'support@example.com'
def get_bearer():
cloud_login_url = "https://wlan-portal-svc.demo.lab.wlan.tip.build/management/v1/oauth2/token"
payload = "{\n \"userId\": \"support@example.com\",\n \"password\": \"support\"\n}"
headers = {
'Content-Type': 'application/json'
}
try:
token_response = requests.request("POST", cloud_login_url, headers=headers, data=payload)
except requests.exceptions.RequestException as e:
raise SystemExit("Exiting Script! Cloud not get bearer token for reason:",e)
token_data = token_response.json()
bearer_token = token_data['access_token']
return(bearer_token)
def ap_firmware(customer_id,equipment_id):
equip_fw_url = "https://wlan-portal-svc.demo.lab.wlan.tip.build/portal/status/forEquipment?customerId="+customer_id+"&equipmentId="+equipment_id
payload = {}
headers = {
'Authorization': 'Bearer ' + bearer
}
status_response = requests.request("GET", equip_fw_url, headers=headers, data=payload)
status_data = status_response.json()
current_ap_fw = status_data[2]['details']['reportedSwVersion']
return current_ap_fw
def CloudSDK_images(apModel):
getFW_url = "https://wlan-portal-svc.demo.lab.wlan.tip.build/portal/firmware/version/byEquipmentType?equipmentType=AP&modelId=" + apModel
payload = {}
headers = {
'Authorization': 'Bearer ' + bearer
}
response = requests.request("GET", getFW_url, headers=headers, data=payload)
ap_fw_details = response.json()
###return ap_fw_details
fwlist = []
for version in ap_fw_details:
fwlist.append(version.get('versionName'))
return(fwlist)
#fw_versionNames = ap_fw_details[0]['versionName']
#return fw_versionNames
def firwmare_upload(commit, apModel,latest_image,fw_url):
fw_upload_url = "https://wlan-portal-svc.demo.lab.wlan.tip.build/portal/firmware/version"
payload = "{\n \"model_type\": \"FirmwareVersion\",\n \"id\": 0,\n \"equipmentType\": \"AP\",\n \"modelId\": \""+apModel+"\",\n \"versionName\": \""+latest_image+"\",\n \"description\": \"\",\n \"filename\": \""+fw_url+"\",\n \"commit\": \""+commit+"\",\n \"validationMethod\": \"MD5_CHECKSUM\",\n \"validationCode\": \"19494befa87eb6bb90a64fd515634263\",\n \"releaseDate\": 1596192028877,\n \"createdTimestamp\": 0,\n \"lastModifiedTimestamp\": 0\n}\n\n"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + bearer
}
response = requests.request("POST", fw_upload_url, headers=headers, data=payload)
#print(response)
upload_result = response.json()
return(upload_result)
def get_firmware_id(latest_ap_image):
#print(latest_ap_image)
fw_id_url = "https://wlan-portal-svc.demo.lab.wlan.tip.build/portal/firmware/version/byName?firmwareVersionName="+latest_ap_image
payload = {}
headers = {
'Authorization': 'Bearer ' + bearer
}
response = requests.request("GET", fw_id_url, headers=headers, data=payload)
fw_data = response.json()
latest_fw_id = fw_data['id']
return latest_fw_id
def update_firmware(equioment_id, latest_firmware_id):
url = "https://wlan-portal-svc.demo.lab.wlan.tip.build/portal/equipmentGateway/requestFirmwareUpdate?equipmentId="+equipment_id+"&firmwareVersionId="+latest_firmware_id
payload = {}
headers = {
'Authorization': 'Bearer ' + bearer
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
def set_ap_profile(equipment_id,test_profile_id):
###Get AP Info
url = "https://wlan-portal-svc.demo.lab.wlan.tip.build/portal/equipment?equipmentId="+equipment_id
payload = {}
headers = {
'Authorization': 'Bearer ' + bearer
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response)
###Add Lab Profile ID to Equipment
equipment_info = response.json()
#print(equipment_info)
equipment_info["profileId"] = test_profile_id
#print(equipment_info)
###Update AP Info with Required Profile ID
url = "https://wlan-portal-svc.demo.lab.wlan.tip.build/portal/equipment"
headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer ' + bearer
}
response = requests.request("PUT", url, headers=headers, data=json.dumps(equipment_info))
#print(response)
###Class for Tests
class RunTest:
def Single_Client_Connectivity(self, radio, ssid_name, ssid_psk, security, station, test_case, rid):
'''SINGLE CLIENT CONNECTIVITY using sta_connect2.py'''
staConnect = StaConnect2("10.10.10.201", 8080, debug_= False)
staConnect.sta_mode = 0
staConnect.upstream_resource = 1
staConnect.upstream_port = "eth2"
staConnect.radio = radio
staConnect.resource = 1
staConnect.dut_ssid = ssid_name
staConnect.dut_passwd = ssid_psk
staConnect.dut_security = security
staConnect.station_names = station
staConnect.runtime_secs = 30
staConnect.cleanup_on_exit = True
staConnect.setup()
staConnect.start()
print("napping %f sec" % staConnect.runtime_secs)
time.sleep(staConnect.runtime_secs)
staConnect.stop()
staConnect.cleanup()
run_results = staConnect.get_result_list()
for result in run_results:
print("test result: " + result)
#result = 'pass'
print("Single Client Connectivity :",staConnect.passes)
if staConnect.passes() == True:
print("Single client connection to", ssid_name, "successful. Test Passed")
client.update_testrail(case_id=test_case, run_id=rid, status_id=1, msg='Client connectivity passed')
else:
client.update_testrail(case_id=test_case, run_id=rid, status_id=5, msg='Client connectivity failed')
print("Single client connection to", ssid_name, "unsuccessful. Test Failed")
def Client_Count(customer_id, equipment_id):
url = "https://wlan-portal-svc.demo.lab.wlan.tip.build/portal/status/forEquipment?customerId=" + customer_id + "&equipmentId=" + equipment_id
payload = {}
headers = {
'Authorization': 'Bearer ' + bearer
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text.encode('utf8'))
def TestCase_941(self, rid):
#MULTI CLIENT CONNECTIVITY
staConnect = StaConnect2("10.10.10.201", 8080, debug_= True)
staConnect.sta_mode = 0
staConnect.upstream_resource = 1
staConnect.upstream_port = "eth2"
staConnect.radio = "wiphy0"
staConnect.resource = 1
staConnect.dut_ssid = "LAB_2dot4G_WPA2"
# staConnect.dut_passwd = "4C0nnectUS!"
staConnect.dut_passwd = "Connectus123$"
staConnect.dut_security = "wpa2"
staConnect.station_names = ["sta0020", 'sta0021', 'sta0022', 'sta0023']
staConnect.runtime_secs = 20
staConnect.cleanup_on_exit = True
staConnect.run()
run_results = staConnect.get_result_list()
for result in run_results:
print("test result: " + result)
if staConnect.passes() == True:
client.update_testrail(case_id=941, run_id=rid, status_id=1,
msg='client Connectivity to SSID Passed ')
else:
client.update_testrail(case_id=941, run_id=rid, status_id=5,
msg='client connectivity to SSID Failed')
######Testrail Project and Run ID Information ##############################
Test: RunTest = RunTest()
projId = client.get_project_id(project_name= 'WLAN')
print("TIP WLAN Project ID is:", projId)
logger.info('Start of Nightly Sanity')
###Dictionaries
ap_latest_dict = {
"ea8300": "Unknown",
"ecw5410": "unknown"
}
ap_updated_dict = {
"ea8300": "",
"ecw5410": ""
}
##Equipment IDs for Lab APs under test
equipment_id_dict = {
"ea8300": "3",
"ecw5410": "6"
}
###Testing AP Profile Information
profile_info_dict = {
"ecw5410": {
"profile_id": "7",
"fiveG_WPA2_SSID": "ECW5410_5G_WPA2",
"fiveG_WPA2_PSK": "Connectus123$",
"fiveG_WPA_SSID": "ECW5410_5G_WPA",
"fiveG_WPA_PSK": "Connectus123$",
"fiveG_OPEN_SSID": "ECW5410_5G_OPEN",
"twoFourG_OPEN_SSID": "ECW5410_2dot4G_OPEN",
"twoFourG_WPA2_SSID": "ECW5410_2dot4G_WPA2",
"twoFourG_WPA2_PSK": "Connectus123$",
"twoFourG_WPA_SSID":"ECW5410_2dot4G_WPA",
"twoFourG_WPA_PSK": "Connectus123$"
},
"ea8300": {
"profile_id": "24",
"fiveG_WPA2_SSID": "EA8300_5G_WPA2",
"fiveG_WPA2_PSK": "Connectus123$",
"fiveG_WPA_SSID": "EA8300_5G_WPA",
"fiveG_WPA_PSK": "Connectus123$",
"fiveG_OPEN_SSID": "EA8300_5G_OPEN",
"twoFourG_OPEN_SSID": "EA8300_2dot4G_OPEN",
"twoFourG_WPA2_SSID": "EA8300_2dot4G_WPA2",
"twoFourG_WPA2_PSK": "Connectus123$",
"twoFourG_WPA_SSID":"EA8300_2dot4G_WPA",
"twoFourG_WPA_PSK": "Connectus123$"
}
}
##Test Cases to be included in Test Runs
test_cases = [
2233,
2234,
2235,
2236,
2237,
2419,
2420
]
##AP models
ap_models = ["ea8300","ecw5410"]
#ap_models = ["ecw5410"]
###Get Cloud Bearer Token
bearer = CloudSDK.get_bearer()
#############################################################################
##################### CloudSDK Firmware Check ###############################
### 1) Get Token for CloudSDK ###############################################
### 2) Find Latest FW on jfrog for each AP Model ############################
### 3) Find Available FW on CloudSDK --> 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")

View File

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

View File

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

8
cicd/nola-basic-12/loop.bash Executable file
View File

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

View File

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

8
cicd/nola-basic-13/loop.bash Executable file
View File

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

View File

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

8
cicd/nola-basic-14/loop.bash Executable file
View File

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

View File

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

8
cicd/nola-basic-15/loop.bash Executable file
View File

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

View File

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

15
docker/Dockerfile Normal file
View File

@@ -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" ]

437
docker/nightly.py Executable file
View File

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

View File

@@ -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"
}
}
}
}

View File

@@ -0,0 +1,2 @@
DUT is an EAP-102 wifi-6, running TIP OpenWrt.

View File

@@ -0,0 +1,2 @@
DO_BUGCHECK=1
export DO_BUGCHECK

View File

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

View File

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

View File

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

View File

@@ -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 "<b>Top wlan-testing git commits.</b><br><pre>" > ./tmp_gitlog.html
git log -n 8 --oneline >> ./tmp_gitlog.html
echo "</pre>" >> ./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 "<b>Top wlan-ap git commits.</b><br><pre>" > $DUTGITLOG
(cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
echo "</pre>" >> $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"

View File

@@ -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 "<b>Top wlan-testing git commits.</b><br><pre>" > ./tmp_gitlog.html
git log -n 8 --oneline >> ./tmp_gitlog.html
echo "</pre>" >> ./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 "<b>Top wlan-ap git commits.</b><br><pre>" > $DUTGITLOG
(cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
echo "</pre>" >> $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"

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,2 @@
DUT is an EAP-102 wifi-6, running TIP OpenWrt.

View File

@@ -0,0 +1,2 @@
DO_BUGCHECK=1
export DO_BUGCHECK

View File

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

View File

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

View File

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

View File

@@ -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 "<b>Top wlan-testing git commits.</b><br><pre>" > ./tmp_gitlog.html
git log -n 8 --oneline >> ./tmp_gitlog.html
echo "</pre>" >> ./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 "<b>Top wlan-ap git commits.</b><br><pre>" > $DUTGITLOG
(cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
echo "</pre>" >> $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"

View File

@@ -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 "<b>Top wlan-testing git commits.</b><br><pre>" > ./tmp_gitlog.html
git log -n 8 --oneline >> ./tmp_gitlog.html
echo "</pre>" >> ./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 "<b>Top wlan-ap git commits.</b><br><pre>" > $DUTGITLOG
(cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
echo "</pre>" >> $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"

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1,2 @@
DUT is an EAP-102 wifi-6, running TIP OpenWrt.
Configured for <= 128 stations total.

View File

@@ -0,0 +1,2 @@
DO_BUGCHECK=1
export DO_BUGCHECK

View File

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

View File

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

View File

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

View File

@@ -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 "<b>Top wlan-testing git commits.</b><br><pre>" > ./tmp_gitlog.html
git log -n 8 --oneline >> ./tmp_gitlog.html
echo "</pre>" >> ./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 "<b>Top wlan-ap git commits.</b><br><pre>" > $DUTGITLOG
(cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
echo "</pre>" >> $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"

View File

@@ -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 "<b>Top wlan-testing git commits.</b><br><pre>" > ./tmp_gitlog.html
git log -n 8 --oneline >> ./tmp_gitlog.html
echo "</pre>" >> ./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 "<b>Top wlan-ap git commits.</b><br><pre>" > $DUTGITLOG
(cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
echo "</pre>" >> $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"

View File

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

View File

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

View File

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

View File

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

View File

@@ -0,0 +1 @@
DUT is an Edge-Core 5410 wifi-5, running TIP OpenWrt.

View File

@@ -0,0 +1,2 @@
DO_BUGCHECK=1
export DO_BUGCHECK

View File

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

View File

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

View File

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

View File

@@ -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 "<b>Top wlan-testing git commits.</b><br><pre>" > ./tmp_gitlog.html
git log -n 8 --oneline >> ./tmp_gitlog.html
echo "</pre>" >> ./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 "<b>Top wlan-ap git commits.</b><br><pre>" > $DUTGITLOG
(cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
echo "</pre>" >> $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"

View File

@@ -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 "<b>Top wlan-testing git commits.</b><br><pre>" > ./tmp_gitlog.html
git log -n 8 --oneline >> ./tmp_gitlog.html
echo "</pre>" >> ./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 "<b>Top wlan-ap git commits.</b><br><pre>" > $DUTGITLOG
(cd ../../../wlan-ap && git log -n 8 --oneline $DUT_SW_VER >> $DUTGITLOG && cd -)
echo "</pre>" >> $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"

View File

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

View File

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

View File

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

View File

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