mirror of
https://github.com/Telecominfraproject/wlan-testing.git
synced 2026-01-08 05:11:40 +00:00
Move tip-cicd-nightly from wlan-lanforge-scripts to wlan-testing
This is a copy of that code from commit a99d6c31a983cbf5b763ecd2905dddbd6e59d18d in wlan-testing. Signed-off-by: Ben Greear <greearb@candelatech.com>
This commit is contained in:
1694
unit_tests/Nightly_Sanity.py
Executable file
1694
unit_tests/Nightly_Sanity.py
Executable file
File diff suppressed because it is too large
Load Diff
66
unit_tests/README.md
Normal file
66
unit_tests/README.md
Normal file
@@ -0,0 +1,66 @@
|
||||
# TIP CICD Sanity Scripts
|
||||
This directory contains scripts and modules designed for wlan sanity testing.
|
||||
|
||||
## Nightly Sanity
|
||||
This script is used to look for and test new firmware available for the APs. AP equipment IDs and SSID information used in test is stored in the lab_ap_info file
|
||||
|
||||
1. Check current CloudSDK version
|
||||
2. Find latest dev firmware on TIP jfrog and create instances on CloudSDK (if necessary)
|
||||
3. Create report_data.json file with information about versions and test case pass/fail
|
||||
4. For each AP model:
|
||||
1. Check current AP firmware *(If AP already running newest firmware, test will skip)*
|
||||
2. Create Testrail test run with required test cases included
|
||||
3. Upgrade AP via CloudSDK API
|
||||
4. Check if AP upgrade and CloudSDK connection successful
|
||||
5. For each SSID mode (bridge, NAT and VLAN), marking TestRail and report_data.json with pass/fail:
|
||||
1. Create SSID Profiles for various security modes and radio types
|
||||
2. Create AP Profile for SSID mode
|
||||
3. Apply AP profile to AP
|
||||
5. Check that SSID have been applied properly on AP
|
||||
4. Perform client connectivity tests
|
||||
6. Update sanity_status.json with **overall** pass/fail
|
||||
|
||||
## Throughput Test
|
||||
This script is used to test UDP and TCP throughput on different modes of SSIDs, on multiple AP models. It is designed to run on APs that have successfully passed through Nightly_Sanity test.
|
||||
|
||||
For each AP model:
|
||||
1) Read sanity_status.json to see if throughput should be run, if yes:
|
||||
1) Run throughput tests on SSIDs modes
|
||||
2) Record results to CSV file
|
||||
2) Update sanity_status.json that throughput tests have been run
|
||||
|
||||
## Environment Variables
|
||||
Environment variables required to run scripts and modules in this directory
|
||||
#### Nightly_Sanity.py
|
||||
CLOUD_SDK_URL: CloudSDK URL for API calls
|
||||
SANITY_LOG_DIR: Logger file directory
|
||||
SANITY_REPORT_DIR: Report file directory
|
||||
REPORT_TEMPLATE: Report template path
|
||||
TR_USER: TestRail Username
|
||||
TR_PWD: TestRail Password
|
||||
MILESTONE: TestRail Milestone ID
|
||||
PROJECT_ID: TestRail Project ID
|
||||
EAP_IDENTITY: EAP identity for testing
|
||||
EAP_PWD: EAP password for testing
|
||||
AP_USER: Username for AP
|
||||
JFROG_USER: Jfrog username
|
||||
JFROG_PWD: Jfrog password
|
||||
|
||||
#### cloudsdk.py
|
||||
CLOUDSDK_USER: CloudSDK username
|
||||
CLOUDSDK_PWD: CloudSDK password
|
||||
|
||||
#### cluster_version.py
|
||||
AWS_USER: CloudSDK username
|
||||
AWS_PWD: CloudSDK password
|
||||
|
||||
#### testrail_api.py
|
||||
TR_USER tr_user TestRail Username
|
||||
TR_PWD tr_pw TestRail Password
|
||||
|
||||
#### Throughput_Test.py
|
||||
CLOUD_SDK_URL: CloudSDK URL for API calls
|
||||
CSV_PATH: Path for CSV file
|
||||
EAP_IDENTITY: EAP identity for testing
|
||||
EAP_PWD: EAP password for testing
|
||||
TPUT_LOG_DIR: Logger file directory
|
||||
530
unit_tests/Throughput_Test.py
Executable file
530
unit_tests/Throughput_Test.py
Executable file
@@ -0,0 +1,530 @@
|
||||
import csv
|
||||
import sys
|
||||
import time
|
||||
import datetime
|
||||
from datetime import date
|
||||
import json
|
||||
import os
|
||||
import logging
|
||||
|
||||
import single_client_throughput
|
||||
import cloudsdk
|
||||
from cloudsdk import CloudSDK
|
||||
import lab_ap_info
|
||||
|
||||
cloudSDK_url=os.getenv('CLOUD_SDK_URL')
|
||||
station = ["tput5000"]
|
||||
runtime = 10
|
||||
csv_path=os.getenv('CSV_PATH')
|
||||
bridge_upstream_port = "eth2"
|
||||
nat_upstream_port = "eth2"
|
||||
vlan_upstream_port = "vlan100"
|
||||
|
||||
#EAP Credentials
|
||||
identity=os.getenv('EAP_IDENTITY')
|
||||
ttls_password=os.getenv('EAP_PWD')
|
||||
|
||||
local_dir=os.getenv('TPUT_LOG_DIR')
|
||||
logger = logging.getLogger('Throughput_Test')
|
||||
hdlr = logging.FileHandler(local_dir+"/Throughput_Testing.log")
|
||||
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
|
||||
hdlr.setFormatter(formatter)
|
||||
logger.addHandler(hdlr)
|
||||
logger.setLevel(logging.INFO)
|
||||
|
||||
|
||||
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')
|
||||
|
||||
def throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput):
|
||||
#parse client_tput list returned from single_client_throughput
|
||||
udp_ds = client_tput[0].partition(": ")[2]
|
||||
udp_us = client_tput[1].partition(": ")[2]
|
||||
tcp_ds = client_tput[2].partition(": ")[2]
|
||||
tcp_us = client_tput[3].partition(": ")[2]
|
||||
# Find band for CSV ---> This code is not great, it SHOULD get that info from LANForge!
|
||||
if "5G" in ssid_name:
|
||||
frequency = "5 GHz"
|
||||
elif "2dot4G" in ssid_name:
|
||||
frequency = "2.4 GHz"
|
||||
else:
|
||||
frequency = "Unknown"
|
||||
# Append row to top of CSV file
|
||||
row = [ap_model, firmware, frequency, mimo, security, mode, udp_ds, udp_us, tcp_ds, tcp_us]
|
||||
with open(csv_file, 'r') as readFile:
|
||||
reader = csv.reader(readFile)
|
||||
lines = list(reader)
|
||||
lines.insert(1, row)
|
||||
with open(csv_file, 'w') as writeFile:
|
||||
writer = csv.writer(writeFile)
|
||||
writer.writerows(lines)
|
||||
readFile.close()
|
||||
writeFile.close()
|
||||
|
||||
#Import dictionaries for AP Info
|
||||
from lab_ap_info import equipment_id_dict
|
||||
from lab_ap_info import profile_info_dict
|
||||
from lab_ap_info import ap_models
|
||||
from lab_ap_info import mimo_2dot4g
|
||||
from lab_ap_info import mimo_5g
|
||||
from lab_ap_info import customer_id
|
||||
from lab_ap_info import cloud_type
|
||||
#import json file to determine if throughput should be run for specific AP model
|
||||
sanity_status = json.load(open("sanity_status.json"))
|
||||
|
||||
#create CSV file for test run
|
||||
today = str(date.today())
|
||||
csv_file = csv_path+"throughput_test_"+today+".csv"
|
||||
headers = ['AP Type', 'Firmware','Radio', 'MIMO', 'Security', 'Mode', 'UDP Downstream (Mbps)', 'UDP Upstream (Mbps)', 'TCP Downstream (Mbps)', 'TCP Upstream (Mbps)']
|
||||
with open(csv_file, "w") as file:
|
||||
create = csv.writer(file)
|
||||
create.writerow(headers)
|
||||
file.close()
|
||||
|
||||
ap_firmware_dict = {
|
||||
"ea8300": '',
|
||||
"ecw5211": '',
|
||||
"ecw5410": '',
|
||||
"ec420": ''
|
||||
}
|
||||
|
||||
logger.info('Start of Throughput Test')
|
||||
|
||||
for key in equipment_id_dict:
|
||||
if sanity_status['sanity_status'][key] == "passed":
|
||||
logger.info("Running throughput test on " + key)
|
||||
##Get Bearer Token to make sure its valid (long tests can require re-auth)
|
||||
bearer = CloudSDK.get_bearer(cloudSDK_url, cloud_type)
|
||||
###Get Current AP Firmware
|
||||
equipment_id = equipment_id_dict[key]
|
||||
ap_fw = CloudSDK.ap_firmware(customer_id, equipment_id, cloudSDK_url, bearer)
|
||||
fw_model = ap_fw.partition("-")[0]
|
||||
print("AP MODEL UNDER TEST IS", fw_model)
|
||||
print('Current AP Firmware:', ap_fw)
|
||||
##add current FW to dictionary
|
||||
ap_firmware_dict[fw_model] = ap_fw
|
||||
|
||||
###########################################################################
|
||||
############## Bridge Throughput Testing #################################
|
||||
###########################################################################
|
||||
print("Testing for Bridge SSIDs")
|
||||
logger.info("Starting Brdige SSID tput tests on " + key)
|
||||
###Set Proper AP Profile for Bridge SSID Tests
|
||||
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, cloudSDK_url, bearer)
|
||||
### Wait for Profile Push
|
||||
print('-----------------PROFILE PUSH -------------------')
|
||||
time.sleep(180)
|
||||
|
||||
##Set port for LANForge
|
||||
port = bridge_upstream_port
|
||||
|
||||
# 5G WPA2 Enterprise UDP DS/US and TCP DS/US
|
||||
ap_model = fw_model
|
||||
firmware = ap_fw
|
||||
sta_list = station
|
||||
radio = lab_ap_info.lanforge_5g
|
||||
ssid_name = profile_info_dict[fw_model]["fiveG_WPA2-EAP_SSID"]
|
||||
security = "wpa2"
|
||||
eap_type = "TTLS"
|
||||
mode = "Bridge"
|
||||
mimo = mimo_5g[fw_model]
|
||||
client_tput = single_client_throughput.eap_tput(sta_list, ssid_name, radio, security, eap_type, identity, ttls_password, port)
|
||||
print(fw_model, "5 GHz WPA2-EAP throughput:\n", client_tput)
|
||||
security = "wpa2-eap"
|
||||
throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
#5G WPA2 UDP DS/US and TCP DS/US
|
||||
ap_model = fw_model
|
||||
firmware = ap_fw
|
||||
radio = lab_ap_info.lanforge_5g
|
||||
ssid_name = profile_info_dict[fw_model]["fiveG_WPA2_SSID"]
|
||||
ssid_psk = profile_info_dict[fw_model]["fiveG_WPA2_PSK"]
|
||||
security = "wpa2"
|
||||
mode = "Bridge"
|
||||
mimo = mimo_5g[fw_model]
|
||||
client_tput = single_client_throughput.main(ap_model, firmware, radio, ssid_name, ssid_psk, security, station, runtime, port)
|
||||
print(fw_model, "5 GHz WPA2 throughput:\n",client_tput)
|
||||
security = "wpa2-psk"
|
||||
throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
# 5G WPA UDP DS/US and TCP DS/US
|
||||
ap_model = fw_model
|
||||
firmware = ap_fw
|
||||
radio = lab_ap_info.lanforge_5g
|
||||
ssid_name = profile_info_dict[fw_model]["fiveG_WPA_SSID"]
|
||||
ssid_psk = profile_info_dict[fw_model]["fiveG_WPA_PSK"]
|
||||
security = "wpa"
|
||||
mode = "Bridge"
|
||||
mimo = mimo_5g[fw_model]
|
||||
client_tput = single_client_throughput.main(ap_model, firmware, radio, ssid_name, ssid_psk, security, station, runtime, port)
|
||||
print(fw_model, "5 GHz WPA throughput:\n",client_tput)
|
||||
security = "wpa-psk"
|
||||
throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
# 5G Open UDP DS/US and TCP DS/US
|
||||
# ap_model = fw_model
|
||||
# firmware = ap_fw
|
||||
# radio = lab_ap_info.lanforge_5g
|
||||
# ssid_name = profile_info_dict[fw_model]["fiveG_OPEN_SSID"]
|
||||
# ssid_psk = "BLANK"
|
||||
# security = "open"
|
||||
#mode = "Bridge"
|
||||
#mimo = mimo_5g[fw_model]
|
||||
# client_tput = single_client_throughput.main(ap_model, firmware, radio, ssid_name, ssid_psk, security, station, runtime, port)
|
||||
#print(fw_model, "5 GHz Open throughput:\n",client_tput)
|
||||
#throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
# 2.4G WPA2 Enterprise UDP DS/US and TCP DS/US
|
||||
ap_model = fw_model
|
||||
firmware = ap_fw
|
||||
sta_list = station
|
||||
radio = lab_ap_info.lanforge_2dot4g
|
||||
ssid_name = profile_info_dict[fw_model]["twoFourG_WPA2-EAP_SSID"]
|
||||
security = "wpa2"
|
||||
eap_type = "TTLS"
|
||||
mode = "Bridge"
|
||||
mimo = mimo_2dot4g[fw_model]
|
||||
client_tput = single_client_throughput.eap_tput(sta_list, ssid_name, radio, security, eap_type, identity,
|
||||
ttls_password, port)
|
||||
print(fw_model, "2.4 GHz WPA2-EAP throughput:\n", client_tput)
|
||||
security = "wpa2-eap"
|
||||
throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
# 2.4G WPA2 UDP DS/US and TCP DS/US
|
||||
ap_model = fw_model
|
||||
firmware = ap_fw
|
||||
radio = lab_ap_info.lanforge_2dot4g
|
||||
ssid_name = profile_info_dict[fw_model]["twoFourG_WPA2_SSID"]
|
||||
ssid_psk = profile_info_dict[fw_model]["twoFourG_WPA2_PSK"]
|
||||
security = "wpa2"
|
||||
mode = "Bridge"
|
||||
mimo = mimo_2dot4g[fw_model]
|
||||
client_tput = single_client_throughput.main(ap_model, firmware, radio, ssid_name, ssid_psk, security, station, runtime, port)
|
||||
print(fw_model, "2.4 GHz WPA2 throughput:\n",client_tput)
|
||||
security = "wpa2-psk"
|
||||
throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
# 2.4G WPA UDP DS/US and TCP DS/US
|
||||
ap_model = fw_model
|
||||
firmware = ap_fw
|
||||
radio = lab_ap_info.lanforge_2dot4g
|
||||
ssid_name = profile_info_dict[fw_model]["twoFourG_WPA_SSID"]
|
||||
ssid_psk = profile_info_dict[fw_model]["twoFourG_WPA_PSK"]
|
||||
security = "wpa"
|
||||
mode = "Bridge"
|
||||
mimo = mimo_2dot4g[fw_model]
|
||||
client_tput = single_client_throughput.main(ap_model, firmware, radio, ssid_name, ssid_psk, security, station, runtime, port)
|
||||
print(fw_model, "2.4 GHz WPA throughput:\n",client_tput)
|
||||
security = "wpa-psk"
|
||||
throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
# 2.4G Open UDP DS/US and TCP DS/US
|
||||
#ap_model = fw_model
|
||||
#firmware = ap_fw
|
||||
# radio = lab_ap_info.lanforge_5g
|
||||
# ssid_name = profile_info_dict[fw_model]["twoFourG_OPEN_SSID"]
|
||||
# ssid_psk = "BLANK"
|
||||
# security = "open"
|
||||
#mode = "Bridge"
|
||||
#mimo = mimo_2dot4g[fw_model]
|
||||
#client_tput = single_client_throughput.main(ap_model, firmware, radio, ssid_name, ssid_psk, security, station, runtime, port)
|
||||
#print(fw_model, "2.4 GHz Open throughput:\n",client_tput)
|
||||
#throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
###########################################################################
|
||||
################# NAT Mode Throughput Testing ############################
|
||||
###########################################################################
|
||||
print('Testing for NAT SSIDs')
|
||||
logger.info("Starting NAT SSID tput tests on " + key)
|
||||
###Set Proper AP Profile for NAT SSID Tests
|
||||
test_profile_id = profile_info_dict[fw_model + '_nat']["profile_id"]
|
||||
print(test_profile_id)
|
||||
ap_profile = CloudSDK.set_ap_profile(equipment_id, test_profile_id, cloudSDK_url, bearer)
|
||||
|
||||
### Wait for Profile Push
|
||||
print('-----------------PROFILE PUSH -------------------')
|
||||
time.sleep(180)
|
||||
|
||||
##Set port for LANForge
|
||||
port = nat_upstream_port
|
||||
|
||||
# 5G WPA2 Enterprise UDP DS/US and TCP DS/US
|
||||
ap_model = fw_model
|
||||
firmware = ap_fw
|
||||
sta_list = station
|
||||
radio = lab_ap_info.lanforge_5g
|
||||
ssid_name = profile_info_dict[fw_model+'_nat']["fiveG_WPA2-EAP_SSID"]
|
||||
security = "wpa2"
|
||||
eap_type = "TTLS"
|
||||
mode = "NAT"
|
||||
mimo = mimo_5g[fw_model]
|
||||
client_tput = single_client_throughput.eap_tput(sta_list, ssid_name, radio, security, eap_type, identity,
|
||||
ttls_password, port)
|
||||
print(fw_model, "5 GHz WPA2-EAP NAT throughput:\n", client_tput)
|
||||
security = "wpa2-eap"
|
||||
throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
# 5G WPA2 NAT UDP DS/US and TCP DS/US
|
||||
ap_model = fw_model
|
||||
firmware = ap_fw
|
||||
radio = lab_ap_info.lanforge_5g
|
||||
ssid_name = profile_info_dict[fw_model+'_nat']["fiveG_WPA2_SSID"]
|
||||
ssid_psk = profile_info_dict[fw_model+'_nat']["fiveG_WPA2_PSK"]
|
||||
security = "wpa2"
|
||||
mode = "NAT"
|
||||
mimo = mimo_5g[fw_model]
|
||||
client_tput = single_client_throughput.main(ap_model, firmware, radio, ssid_name, ssid_psk, security, station, runtime, port)
|
||||
print(fw_model, "5 GHz WPA2 NAT throughput:\n", client_tput)
|
||||
security = "wpa2-psk"
|
||||
throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
# 5G WPA UDP DS/US and TCP DS/US
|
||||
ap_model = fw_model
|
||||
firmware = ap_fw
|
||||
radio = lab_ap_info.lanforge_5g
|
||||
ssid_name = profile_info_dict[fw_model+'_nat']["fiveG_WPA_SSID"]
|
||||
ssid_psk = profile_info_dict[fw_model+'_nat']["fiveG_WPA_PSK"]
|
||||
security = "wpa"
|
||||
mode = "NAT"
|
||||
mimo = mimo_5g[fw_model]
|
||||
client_tput = single_client_throughput.main(ap_model, firmware, radio, ssid_name, ssid_psk, security, station, runtime, port)
|
||||
print(fw_model, "5 GHz WPA NAT throughput:\n", client_tput)
|
||||
security = "wpa-psk"
|
||||
throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
# 5G Open UDP DS/US and TCP DS/US
|
||||
# ap_model = fw_model
|
||||
# firmware = ap_fw
|
||||
# radio = lab_ap_info.lanforge_5g
|
||||
# ssid_name = profile_info_dict[fw_model+'_nat']["fiveG_OPEN_SSID"]
|
||||
# ssid_psk = "BLANK"
|
||||
# security = "open"
|
||||
# mode = "NAT"
|
||||
#mimo = mimo_5g[fw_model]
|
||||
# client_tput = single_client_throughput.main(ap_model, firmware, radio, ssid_name, ssid_psk, security, station, runtime, port)
|
||||
# print(fw_model, "5 GHz Open NAT throughput:\n",client_tput)
|
||||
# throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
# 2.4G WPA2 Enterprise UDP DS/US and TCP DS/US
|
||||
ap_model = fw_model
|
||||
firmware = ap_fw
|
||||
sta_list = station
|
||||
radio = lab_ap_info.lanforge_2dot4g
|
||||
ssid_name = profile_info_dict[fw_model+'_nat']["twoFourG_WPA2-EAP_SSID"]
|
||||
security = "wpa2"
|
||||
eap_type = "TTLS"
|
||||
mode = "NAT"
|
||||
mimo = mimo_2dot4g[fw_model]
|
||||
client_tput = single_client_throughput.eap_tput(sta_list, ssid_name, radio, security, eap_type, identity, ttls_password, port)
|
||||
print(fw_model, "2.4 GHz WPA2-EAP NAT throughput:\n", client_tput)
|
||||
security = "wpa2-eap"
|
||||
throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
# 2.4G WPA2 UDP DS/US and TCP DS/US
|
||||
ap_model = fw_model
|
||||
firmware = ap_fw
|
||||
radio = lab_ap_info.lanforge_2dot4g
|
||||
ssid_name = profile_info_dict[fw_model+'_nat']["twoFourG_WPA2_SSID"]
|
||||
ssid_psk = profile_info_dict[fw_model+'_nat']["twoFourG_WPA2_PSK"]
|
||||
security = "wpa2"
|
||||
mode = "NAT"
|
||||
mimo = mimo_2dot4g[fw_model]
|
||||
client_tput = single_client_throughput.main(ap_model, firmware, radio, ssid_name, ssid_psk, security, station, runtime, port)
|
||||
print(fw_model, "2.4 GHz WPA2 NAT throughput:\n", client_tput)
|
||||
security = "wpa2-psk"
|
||||
throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
# 2.4G WPA UDP DS/US and TCP DS/US
|
||||
ap_model = fw_model
|
||||
firmware = ap_fw
|
||||
radio = lab_ap_info.lanforge_2dot4g
|
||||
ssid_name = profile_info_dict[fw_model+'_nat']["twoFourG_WPA_SSID"]
|
||||
ssid_psk = profile_info_dict[fw_model+'_nat']["twoFourG_WPA_PSK"]
|
||||
security = "wpa"
|
||||
mode = "NAT"
|
||||
mimo = mimo_2dot4g[fw_model]
|
||||
client_tput = single_client_throughput.main(ap_model, firmware, radio, ssid_name, ssid_psk, security, station, runtime, port)
|
||||
print(fw_model, "2.4 GHz WPA NAT throughput:\n", client_tput)
|
||||
security = "wpa-psk"
|
||||
throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
# 2.4G Open NAT UDP DS/US and TCP DS/US
|
||||
# ap_model = fw_model
|
||||
# firmware = ap_fw
|
||||
# radio = lab_ap_info.lanforge_5g
|
||||
# ssid_name = profile_info_dict[fw_model+'_nat']["twoFourG_OPEN_SSID"]
|
||||
# ssid_psk = "BLANK"
|
||||
# security = "open"
|
||||
# mode = "NAT"
|
||||
#mimo = mimo_2dot4g[fw_model]
|
||||
# client_tput = single_client_throughput.main(ap_model, firmware, radio, ssid_name, ssid_psk, security, station, runtime, port)
|
||||
# print(fw_model, "2.4 GHz Open NAT throughput:\n",client_tput)
|
||||
# throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
###########################################################################
|
||||
################# Custom VLAN Mode Throughput Testing #####################
|
||||
###########################################################################
|
||||
print('Testing for Custom VLAN SSIDs')
|
||||
logger.info("Starting Custom VLAN SSID tput tests on " + key)
|
||||
###Set Proper AP Profile for NAT SSID Tests
|
||||
test_profile_id = profile_info_dict[fw_model + '_vlan']["profile_id"]
|
||||
print(test_profile_id)
|
||||
ap_profile = CloudSDK.set_ap_profile(equipment_id, test_profile_id, cloudSDK_url, bearer)
|
||||
|
||||
### Wait for Profile Push
|
||||
print('-----------------PROFILE PUSH -------------------')
|
||||
time.sleep(180)
|
||||
|
||||
##Set port for LANForge
|
||||
port = vlan_upstream_port
|
||||
|
||||
# 5G WPA2 Enterprise UDP DS/US and TCP DS/US
|
||||
ap_model = fw_model
|
||||
firmware = ap_fw
|
||||
sta_list = station
|
||||
radio = lab_ap_info.lanforge_5g
|
||||
ssid_name = profile_info_dict[fw_model + '_vlan']["fiveG_WPA2-EAP_SSID"]
|
||||
security = "wpa2"
|
||||
eap_type = "TTLS"
|
||||
mode = "VLAN"
|
||||
mimo = mimo_5g[fw_model]
|
||||
client_tput = single_client_throughput.eap_tput(sta_list, ssid_name, radio, security, eap_type, identity, ttls_password, port)
|
||||
print(fw_model, "5 GHz WPA2-EAP VLAN throughput:\n", client_tput)
|
||||
security = "wpa2-eap"
|
||||
throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
# 5G WPA2 VLAN UDP DS/US and TCP DS/US
|
||||
ap_model = fw_model
|
||||
firmware = ap_fw
|
||||
radio = lab_ap_info.lanforge_5g
|
||||
ssid_name = profile_info_dict[fw_model + '_vlan']["fiveG_WPA2_SSID"]
|
||||
ssid_psk = profile_info_dict[fw_model + '_vlan']["fiveG_WPA2_PSK"]
|
||||
security = "wpa2"
|
||||
mode = "VLAN"
|
||||
mimo = mimo_5g[fw_model]
|
||||
client_tput = single_client_throughput.main(ap_model, firmware, radio, ssid_name, ssid_psk, security, station, runtime, port)
|
||||
print(fw_model, "5 GHz WPA2 VLAN throughput:\n", client_tput)
|
||||
security = "wpa2-psk"
|
||||
throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
# 5G WPA UDP DS/US and TCP DS/US
|
||||
ap_model = fw_model
|
||||
firmware = ap_fw
|
||||
radio = lab_ap_info.lanforge_5g
|
||||
ssid_name = profile_info_dict[fw_model + '_vlan']["fiveG_WPA_SSID"]
|
||||
ssid_psk = profile_info_dict[fw_model + '_vlan']["fiveG_WPA_PSK"]
|
||||
security = "wpa"
|
||||
mode = "VLAN"
|
||||
mimo = mimo_5g[fw_model]
|
||||
client_tput = single_client_throughput.main(ap_model, firmware, radio, ssid_name, ssid_psk, security, station, runtime, port)
|
||||
print(fw_model, "5 GHz WPA VLAN throughput:\n", client_tput)
|
||||
security = "wpa-psk"
|
||||
throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
# 5G Open UDP DS/US and TCP DS/US
|
||||
# ap_model = fw_model
|
||||
# firmware = ap_fw
|
||||
# radio = lab_ap_info.lanforge_5g
|
||||
# ssid_name = profile_info_dict[fw_model+'_vlan']["fiveG_OPEN_SSID"]
|
||||
# ssid_psk = "BLANK"
|
||||
# security = "open"
|
||||
# mode = "VLAN"
|
||||
# mimo = mimo_5g[fw_model]
|
||||
# client_tput = single_client_throughput.main(ap_model, firmware, radio, ssid_name, ssid_psk, security, station, runtime, port)
|
||||
# print(fw_model, "5 GHz Open VLAN throughput:\n",client_tput)
|
||||
# throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
# 2.4G WPA2 Enterprise UDP DS/US and TCP DS/US
|
||||
ap_model = fw_model
|
||||
firmware = ap_fw
|
||||
sta_list = station
|
||||
radio = lab_ap_info.lanforge_2dot4g
|
||||
ssid_name = profile_info_dict[fw_model + '_vlan']["twoFourG_WPA2-EAP_SSID"]
|
||||
security = "wpa2"
|
||||
eap_type = "TTLS"
|
||||
mode = "VLAN"
|
||||
mimo = mimo_2dot4g[fw_model]
|
||||
client_tput = single_client_throughput.eap_tput(sta_list, ssid_name, radio, security, eap_type, identity, ttls_password, port)
|
||||
print(fw_model, "2.4 GHz WPA2-EAP VLAN throughput:\n", client_tput)
|
||||
security = "wpa2-eap"
|
||||
throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
# 2.4G WPA2 UDP DS/US and TCP DS/US
|
||||
ap_model = fw_model
|
||||
firmware = ap_fw
|
||||
radio = lab_ap_info.lanforge_2dot4g
|
||||
ssid_name = profile_info_dict[fw_model + '_vlan']["twoFourG_WPA2_SSID"]
|
||||
ssid_psk = profile_info_dict[fw_model + '_vlan']["twoFourG_WPA2_PSK"]
|
||||
security = "wpa2"
|
||||
mode = "VLAN"
|
||||
mimo = mimo_2dot4g[fw_model]
|
||||
client_tput = single_client_throughput.main(ap_model, firmware, radio, ssid_name, ssid_psk, security, station, runtime, port)
|
||||
print(fw_model, "2.4 GHz WPA2 VLAN throughput:\n", client_tput)
|
||||
security = "wpa2-psk"
|
||||
throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
# 2.4G WPA UDP DS/US and TCP DS/US
|
||||
ap_model = fw_model
|
||||
firmware = ap_fw
|
||||
radio = lab_ap_info.lanforge_2dot4g
|
||||
ssid_name = profile_info_dict[fw_model + '_vlan']["twoFourG_WPA_SSID"]
|
||||
ssid_psk = profile_info_dict[fw_model + '_vlan']["twoFourG_WPA_PSK"]
|
||||
security = "wpa"
|
||||
mode = "VLAN"
|
||||
mimo = mimo_2dot4g[fw_model]
|
||||
client_tput = single_client_throughput.main(ap_model, firmware, radio, ssid_name, ssid_psk, security, station, runtime, port)
|
||||
print(fw_model, "2.4 GHz WPA VLAN throughput:\n", client_tput)
|
||||
security = "wpa-psk"
|
||||
throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
# 2.4G Open VLAN UDP DS/US and TCP DS/US
|
||||
# ap_model = fw_model
|
||||
# firmware = ap_fw
|
||||
# radio = lab_ap_info.lanforge_5g
|
||||
# ssid_name = profile_info_dict[fw_model+'_vlan']["twoFourG_OPEN_SSID"]
|
||||
# ssid_psk = "BLANK"
|
||||
# security = "open"
|
||||
# mode = "VLAN"
|
||||
# mimo = mimo_2dot4g[fw_model]
|
||||
# client_tput = single_client_throughput.main(ap_model, firmware, radio, ssid_name, ssid_psk, security, station, runtime, port)
|
||||
# print(fw_model, "2.4 GHz Open VLAN throughput:\n",client_tput)
|
||||
# throughput_csv(csv_file, ssid_name, ap_model, mimo, firmware, security, mode, client_tput)
|
||||
|
||||
|
||||
#Indicates throughput has been run for AP model
|
||||
sanity_status['sanity_status'][key] = "tput run"
|
||||
logger.info("Trhoughput tests complete on " + key)
|
||||
|
||||
elif sanity_status['sanity_status'][key] == "tput run":
|
||||
print("Throughput test already run on", key)
|
||||
logger.info("Throughput test already run on "+ key +" for latest AP FW")
|
||||
|
||||
else:
|
||||
print(key,"did not pass Nightly Sanity. Skipping throughput test on this AP Model")
|
||||
logger.info(key+" did not pass Nightly Sanity. Skipping throughput test.")
|
||||
|
||||
#Indicate which AP model has had tput test to external json file
|
||||
with open('sanity_status.json', 'w') as json_file:
|
||||
json.dump(sanity_status, json_file)
|
||||
|
||||
with open(csv_file, 'r') as readFile:
|
||||
reader = csv.reader(readFile)
|
||||
lines = list(reader)
|
||||
row_count = len(lines)
|
||||
#print(row_count)
|
||||
|
||||
if row_count <= 1:
|
||||
os.remove(csv_file)
|
||||
file.close()
|
||||
|
||||
else:
|
||||
print("Saving File")
|
||||
file.close()
|
||||
|
||||
print(" -- Throughput Testing Complete -- ")
|
||||
117
unit_tests/ap_ssh.py
Executable file
117
unit_tests/ap_ssh.py
Executable file
@@ -0,0 +1,117 @@
|
||||
##################################################################################
|
||||
# Module contains functions to get specific data from AP CLI using SSH
|
||||
#
|
||||
# Used by Nightly_Sanity and Throughput_Test #####################################
|
||||
##################################################################################
|
||||
|
||||
import paramiko
|
||||
from paramiko import SSHClient
|
||||
import socket
|
||||
|
||||
def ssh_cli_active_fw(ap_ip, username, password):
|
||||
try:
|
||||
client = paramiko.SSHClient()
|
||||
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
||||
client.connect(ap_ip, username=username, password=password, timeout=5)
|
||||
stdin, stdout, stderr = client.exec_command('/usr/opensync/bin/ovsh s AWLAN_Node -c | grep FW_IMAGE_ACTIVE')
|
||||
|
||||
version_matrix = str(stdout.read())
|
||||
version_matrix_split = version_matrix.partition('FW_IMAGE_ACTIVE","')[2]
|
||||
cli_active_fw = version_matrix_split.partition('"],[')[0]
|
||||
#print("Active FW is",cli_active_fw)
|
||||
|
||||
stdin, stdout, stderr = client.exec_command('/usr/opensync/bin/ovsh s Manager -c | grep status')
|
||||
status = str(stdout.read())
|
||||
|
||||
if "ACTIVE" in status:
|
||||
#print("AP is in Active state")
|
||||
state = "active"
|
||||
elif "BACKOFF" in status:
|
||||
#print("AP is in Backoff state")
|
||||
state = "backoff"
|
||||
else:
|
||||
#print("AP is not in Active state")
|
||||
state = "unknown"
|
||||
|
||||
cli_info = {
|
||||
"state": state,
|
||||
"active_fw": cli_active_fw
|
||||
}
|
||||
|
||||
return(cli_info)
|
||||
|
||||
except paramiko.ssh_exception.AuthenticationException:
|
||||
print("Authentication Error, Check Credentials")
|
||||
return "ERROR"
|
||||
except paramiko.SSHException:
|
||||
print("Cannot SSH to the AP")
|
||||
return "ERROR"
|
||||
except socket.timeout:
|
||||
print("AP Unreachable")
|
||||
return "ERROR"
|
||||
|
||||
def iwinfo_status(ap_ip, username, password):
|
||||
try:
|
||||
client = paramiko.SSHClient()
|
||||
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
||||
client.connect(ap_ip, username=username, password=password, timeout=5)
|
||||
stdin, stdout, stderr = client.exec_command('iwinfo | grep ESSID')
|
||||
|
||||
for line in stdout.read().splitlines():
|
||||
print(line)
|
||||
|
||||
except paramiko.ssh_exception.AuthenticationException:
|
||||
print("Authentication Error, Check Credentials")
|
||||
return "ERROR"
|
||||
except paramiko.SSHException:
|
||||
print("Cannot SSH to the AP")
|
||||
return "ERROR"
|
||||
except socket.timeout:
|
||||
print("AP Unreachable")
|
||||
return "ERROR"
|
||||
|
||||
def get_vif_config(ap_ip, username, password):
|
||||
try:
|
||||
client = paramiko.SSHClient()
|
||||
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
||||
client.connect(ap_ip, username=username, password=password, timeout=5)
|
||||
stdin, stdout, stderr = client.exec_command(
|
||||
"/usr/opensync/bin/ovsh s Wifi_VIF_Config -c | grep 'ssid :'")
|
||||
|
||||
output = str(stdout.read(), 'utf-8')
|
||||
ssid_output = output.splitlines()
|
||||
ssid_list = [s.strip('ssid : ') for s in ssid_output]
|
||||
return ssid_list
|
||||
|
||||
except paramiko.ssh_exception.AuthenticationException:
|
||||
print("Authentication Error, Check Credentials")
|
||||
return "ERROR"
|
||||
except paramiko.SSHException:
|
||||
print("Cannot SSH to the AP")
|
||||
return "ERROR"
|
||||
except socket.timeout:
|
||||
print("AP Unreachable")
|
||||
return "ERROR"
|
||||
|
||||
def get_vif_state(ap_ip, username, password):
|
||||
try:
|
||||
client = paramiko.SSHClient()
|
||||
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
||||
client.connect(ap_ip, username=username, password=password, timeout=5)
|
||||
stdin, stdout, stderr = client.exec_command(
|
||||
"/usr/opensync/bin/ovsh s Wifi_VIF_State -c | grep 'ssid :'")
|
||||
|
||||
output = str(stdout.read(), 'utf-8')
|
||||
ssid_output = output.splitlines()
|
||||
ssid_list = [s.strip('ssid : ') for s in ssid_output]
|
||||
return ssid_list
|
||||
|
||||
except paramiko.ssh_exception.AuthenticationException:
|
||||
print("Authentication Error, Check Credentials")
|
||||
return "ERROR"
|
||||
except paramiko.SSHException:
|
||||
print("Cannot SSH to the AP")
|
||||
return "ERROR"
|
||||
except socket.timeout:
|
||||
print("AP Unreachable")
|
||||
return "ERROR"
|
||||
267
unit_tests/cloudsdk.py
Executable file
267
unit_tests/cloudsdk.py
Executable file
@@ -0,0 +1,267 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
##################################################################################
|
||||
# Module contains functions to interact with CloudSDK using APIs
|
||||
# Start by calling get_bearer to obtain bearer token, then other APIs can be used
|
||||
#
|
||||
# Used by Nightly_Sanity and Throughput_Test #####################################
|
||||
##################################################################################
|
||||
|
||||
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
|
||||
|
||||
user=os.getenv('CLOUDSDK_USER')
|
||||
password=os.getenv('CLOUDSDK_PWD')
|
||||
|
||||
###Class for CloudSDK Interaction via RestAPI
|
||||
class CloudSDK:
|
||||
def __init__(self):
|
||||
self.user = user
|
||||
|
||||
def get_bearer(cloudSDK_url, cloud_type):
|
||||
cloud_login_url = cloudSDK_url+"/management/"+cloud_type+"/oauth2/token"
|
||||
payload = '''
|
||||
{
|
||||
"userId": "'''+user+'''",
|
||||
"password": "'''+password+'''"
|
||||
}
|
||||
'''
|
||||
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, cloudSDK_url, bearer):
|
||||
equip_fw_url = cloudSDK_url+"/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_code = status_response.status_code
|
||||
if status_code is 200:
|
||||
status_data = status_response.json()
|
||||
#print(status_data)
|
||||
current_ap_fw = status_data[2]['details']['reportedSwVersion']
|
||||
return current_ap_fw
|
||||
else:
|
||||
return("ERROR")
|
||||
|
||||
def CloudSDK_images(apModel, cloudSDK_url, bearer):
|
||||
getFW_url = cloudSDK_url+"/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,cloudSDK_url,bearer):
|
||||
fw_upload_url = cloudSDK_url+"/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, cloudSDK_url, bearer):
|
||||
#print(latest_ap_image)
|
||||
fw_id_url = cloudSDK_url+"/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 delete_firmware(fw_id, cloudSDK_url, bearer):
|
||||
url = cloudSDK_url + '/portal/firmware/version?firmwareVersionId=' + fw_id
|
||||
payload = {}
|
||||
headers = {
|
||||
'Authorization': 'Bearer ' + bearer
|
||||
}
|
||||
response = requests.request("DELETE", url, headers=headers, data=payload)
|
||||
return(response)
|
||||
|
||||
def update_firmware(equipment_id, latest_firmware_id, cloudSDK_url, bearer):
|
||||
url = cloudSDK_url+"/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)
|
||||
return response.json()
|
||||
|
||||
def set_ap_profile(equipment_id, test_profile_id, cloudSDK_url, bearer):
|
||||
###Get AP Info
|
||||
url = cloudSDK_url+"/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 = cloudSDK_url+"/portal/equipment"
|
||||
headers = {
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': 'Bearer ' + bearer
|
||||
}
|
||||
|
||||
response = requests.request("PUT", url, headers=headers, data=json.dumps(equipment_info))
|
||||
#print(response)
|
||||
|
||||
def get_cloudsdk_version(cloudSDK_url, bearer):
|
||||
#print(latest_ap_image)
|
||||
url = cloudSDK_url+"/ping"
|
||||
|
||||
payload = {}
|
||||
headers = {
|
||||
'Authorization': 'Bearer ' + bearer
|
||||
}
|
||||
response = requests.request("GET", url, headers=headers, data=payload)
|
||||
cloud_sdk_version = response.json()
|
||||
return cloud_sdk_version
|
||||
|
||||
def create_ap_profile(cloudSDK_url, bearer, template, name, child_profiles):
|
||||
with open(template, 'r+') as ap_profile:
|
||||
profile = json.load(ap_profile)
|
||||
profile["name"] = name
|
||||
profile["childProfileIds"] = child_profiles
|
||||
|
||||
with open(template, 'w') as ap_profile:
|
||||
json.dump(profile, ap_profile)
|
||||
|
||||
url = cloudSDK_url+"/portal/profile"
|
||||
headers = {
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': 'Bearer ' + bearer
|
||||
}
|
||||
response = requests.request("POST", url, headers=headers, data=open(template, 'rb'))
|
||||
ap_profile = response.json()
|
||||
print(ap_profile)
|
||||
ap_profile_id = ap_profile['id']
|
||||
return ap_profile_id
|
||||
|
||||
def create_ssid_profile(cloudSDK_url, bearer, template, name, ssid, passkey, radius, security, mode, vlan, radios):
|
||||
with open(template, 'r+') as ssid_profile:
|
||||
profile = json.load(ssid_profile)
|
||||
profile['name'] = name
|
||||
profile['details']['ssid'] = ssid
|
||||
profile['details']['keyStr'] = passkey
|
||||
profile['details']['radiusServiceName'] = radius
|
||||
profile['details']['secureMode'] = security
|
||||
profile['details']['forwardMode'] = mode
|
||||
profile['details']['vlanId'] = vlan
|
||||
profile['details']['appliedRadios'] = radios
|
||||
with open(template, 'w') as ssid_profile:
|
||||
json.dump(profile, ssid_profile)
|
||||
|
||||
url = cloudSDK_url + "/portal/profile"
|
||||
headers = {
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': 'Bearer ' + bearer
|
||||
}
|
||||
response = requests.request("POST", url, headers=headers, data=open(template, 'rb'))
|
||||
ssid_profile = response.json()
|
||||
#print(ssid_profile)
|
||||
ssid_profile_id = ssid_profile['id']
|
||||
return ssid_profile_id
|
||||
|
||||
def create_radius_profile(cloudSDK_url, bearer, template, name, subnet_name, subnet, subnet_mask, region, server_name, server_ip, secret, auth_port):
|
||||
with open(template, 'r+') as radius_profile:
|
||||
profile = json.load(radius_profile)
|
||||
|
||||
profile['name'] = name
|
||||
|
||||
subnet_config = profile['details']['subnetConfiguration']
|
||||
old_subnet_name = list(subnet_config.keys())[0]
|
||||
subnet_config[subnet_name] = subnet_config.pop(old_subnet_name)
|
||||
profile['details']['subnetConfiguration'][subnet_name]['subnetAddress'] = subnet
|
||||
profile['details']['subnetConfiguration'][subnet_name]['subnetCidrPrefix'] = subnet_mask
|
||||
profile['details']['subnetConfiguration'][subnet_name]['subnetName'] = subnet_name
|
||||
|
||||
region_map = profile['details']['serviceRegionMap']
|
||||
old_region = list(region_map.keys())[0]
|
||||
region_map[region] = region_map.pop(old_region)
|
||||
profile['details']['serviceRegionName'] = region
|
||||
profile['details']['subnetConfiguration'][subnet_name]['serviceRegionName'] = region
|
||||
profile['details']['serviceRegionMap'][region]['regionName'] = region
|
||||
|
||||
server_map = profile['details']['serviceRegionMap'][region]['serverMap']
|
||||
old_server_name = list(server_map.keys())[0]
|
||||
server_map[server_name] = server_map.pop(old_server_name)
|
||||
profile['details']['serviceRegionMap'][region]['serverMap'][server_name][0]['ipAddress'] = server_ip
|
||||
profile['details']['serviceRegionMap'][region]['serverMap'][server_name][0]['secret'] = secret
|
||||
profile['details']['serviceRegionMap'][region]['serverMap'][server_name][0]['authPort'] = auth_port
|
||||
|
||||
with open(template, 'w') as radius_profile:
|
||||
json.dump(profile, radius_profile)
|
||||
|
||||
url = cloudSDK_url + "/portal/profile"
|
||||
headers = {
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': 'Bearer ' + bearer
|
||||
}
|
||||
response = requests.request("POST", url, headers=headers, data=open(template, 'rb'))
|
||||
radius_profile = response.json()
|
||||
#print(radius_profile)
|
||||
#print(ssid_profile)
|
||||
radius_profile_id = radius_profile['id']
|
||||
return radius_profile_id
|
||||
373
unit_tests/eap_connect.py
Executable file
373
unit_tests/eap_connect.py
Executable file
@@ -0,0 +1,373 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
#########################################################################################################
|
||||
# Built to allow connection and test of clients using EAP-TTLS.
|
||||
# Functions can be called to create a station, create TCP and UDP traffic, run it a short amount of time.
|
||||
#
|
||||
# Used by Nightly_Sanity and Throughput_Test ############################################################
|
||||
#########################################################################################################
|
||||
|
||||
# This will create a station, create TCP and UDP traffic, run it a short amount of time,
|
||||
# and verify whether traffic was sent and received. It also verifies the station connected
|
||||
# to the requested BSSID if bssid is specified as an argument.
|
||||
# The script will clean up the station and connections at the end of the test.
|
||||
|
||||
import sys
|
||||
|
||||
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')
|
||||
|
||||
import argparse
|
||||
import LANforge
|
||||
from LANforge import LFUtils
|
||||
# from LANforge import LFCliBase
|
||||
from LANforge import lfcli_base
|
||||
from LANforge.lfcli_base import LFCliBase
|
||||
from LANforge.LFUtils import *
|
||||
import realm
|
||||
from realm import Realm
|
||||
import pprint
|
||||
|
||||
OPEN="open"
|
||||
WEP="wep"
|
||||
WPA="wpa"
|
||||
WPA2="wpa2"
|
||||
MODE_AUTO=0
|
||||
|
||||
class EAPConnect(LFCliBase):
|
||||
def __init__(self, host, port, security=None, ssid=None, sta_list=None, number_template="00000", _debug_on=False, _dut_bssid="",
|
||||
_exit_on_error=False, _sta_name=None, _resource=1, radio="wiphy0", key_mgmt="WPA-EAP", eap="", identity="",
|
||||
ttls_passwd="", hessid=None, ttls_realm="", domain="", _sta_prefix='eap', _exit_on_fail=False, _cleanup_on_exit=True):
|
||||
super().__init__(host, port, _debug=_debug_on, _halt_on_error=_exit_on_error, _exit_on_fail=_exit_on_fail)
|
||||
self.host = host
|
||||
self.port = port
|
||||
self.ssid = ssid
|
||||
self.radio = radio
|
||||
self.security = security
|
||||
#self.password = password
|
||||
self.sta_list = sta_list
|
||||
self.key_mgmt = key_mgmt
|
||||
self.eap = eap
|
||||
self.sta_prefix = _sta_prefix
|
||||
self.identity = identity
|
||||
self.ttls_passwd = ttls_passwd
|
||||
self.ttls_realm = ttls_realm
|
||||
self.domain = domain
|
||||
self.hessid = hessid
|
||||
self.dut_bssid = _dut_bssid
|
||||
self.timeout = 120
|
||||
self.number_template = number_template
|
||||
self.debug = _debug_on
|
||||
self.local_realm = realm.Realm(lfclient_host=self.host, lfclient_port=self.port)
|
||||
self.station_profile = self.local_realm.new_station_profile()
|
||||
self.station_profile.lfclient_url = self.lfclient_url
|
||||
self.station_profile.ssid = self.ssid
|
||||
self.station_profile.security = self.security
|
||||
self.station_profile.number_template_ = self.number_template
|
||||
self.station_profile.mode = 0
|
||||
#Added to test_ipv4_ttls code
|
||||
self.upstream_url = None # defer construction
|
||||
self.sta_url_map = None
|
||||
self.upstream_resource = None
|
||||
self.upstream_port = "eth2"
|
||||
self.station_names = []
|
||||
if _sta_name is not None:
|
||||
self.station_names = [_sta_name]
|
||||
self.localrealm = Realm(lfclient_host=host, lfclient_port=port)
|
||||
self.resource = _resource
|
||||
self.cleanup_on_exit = _cleanup_on_exit
|
||||
self.resulting_stations = {}
|
||||
self.resulting_endpoints = {}
|
||||
self.station_profile = None
|
||||
self.l3_udp_profile = None
|
||||
self.l3_tcp_profile = None
|
||||
|
||||
# def get_realm(self) -> Realm: # py > 3.6
|
||||
def get_realm(self):
|
||||
return self.localrealm
|
||||
|
||||
def get_station_url(self, sta_name_=None):
|
||||
if sta_name_ is None:
|
||||
raise ValueError("get_station_url wants a station name")
|
||||
if self.sta_url_map is None:
|
||||
self.sta_url_map = {}
|
||||
for sta_name in self.station_names:
|
||||
self.sta_url_map[sta_name] = "port/1/%s/%s" % (self.resource, sta_name)
|
||||
return self.sta_url_map[sta_name_]
|
||||
|
||||
def get_upstream_url(self):
|
||||
if self.upstream_url is None:
|
||||
self.upstream_url = "port/1/%s/%s" % (self.upstream_resource, self.upstream_port)
|
||||
return self.upstream_url
|
||||
|
||||
# Compare pre-test values to post-test values
|
||||
def compare_vals(self, name, postVal, print_pass=False, print_fail=True):
|
||||
# print(f"Comparing {name}")
|
||||
if postVal > 0:
|
||||
self._pass("%s %s" % (name, postVal), print_pass)
|
||||
else:
|
||||
self._fail("%s did not report traffic: %s" % (name, postVal), print_fail)
|
||||
|
||||
def remove_stations(self):
|
||||
for name in self.station_names:
|
||||
LFUtils.removePort(self.resource, name, self.lfclient_url)
|
||||
|
||||
def num_associated(self, bssid):
|
||||
counter = 0
|
||||
# print("there are %d results" % len(self.station_results))
|
||||
fields = "_links,port,alias,ip,ap,port+type"
|
||||
self.station_results = self.localrealm.find_ports_like("%s*"%self.sta_prefix, fields, debug_=False)
|
||||
if (self.station_results is None) or (len(self.station_results) < 1):
|
||||
self.get_failed_result_list()
|
||||
for eid,record in self.station_results.items():
|
||||
#print("-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ")
|
||||
#pprint(eid)
|
||||
#pprint(record)
|
||||
if record["ap"] == bssid:
|
||||
counter += 1
|
||||
#print("-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ")
|
||||
return counter
|
||||
|
||||
def clear_test_results(self):
|
||||
self.resulting_stations = {}
|
||||
self.resulting_endpoints = {}
|
||||
super().clear_test_results()
|
||||
#super(StaConnect, self).clear_test_results().test_results.clear()
|
||||
|
||||
def setup(self):
|
||||
self.clear_test_results()
|
||||
self.check_connect()
|
||||
upstream_json = self.json_get("%s?fields=alias,phantom,down,port,ip" % self.get_upstream_url(), debug_=False)
|
||||
|
||||
if upstream_json is None:
|
||||
self._fail(message="Unable to query %s, bye" % self.upstream_port, print_=True)
|
||||
return False
|
||||
|
||||
if upstream_json['interface']['ip'] == "0.0.0.0":
|
||||
if self.debug:
|
||||
pprint.pprint(upstream_json)
|
||||
self._fail("Warning: %s lacks ip address" % self.get_upstream_url(), print_=True)
|
||||
return False
|
||||
|
||||
# remove old stations
|
||||
print("Removing old stations")
|
||||
for sta_name in self.station_names:
|
||||
sta_url = self.get_station_url(sta_name)
|
||||
response = self.json_get(sta_url)
|
||||
if (response is not None) and (response["interface"] is not None):
|
||||
for sta_name in self.station_names:
|
||||
LFUtils.removePort(self.resource, sta_name, self.lfclient_url)
|
||||
LFUtils.wait_until_ports_disappear(self.lfclient_url, self.station_names)
|
||||
|
||||
# Create stations and turn dhcp on
|
||||
self.station_profile = self.localrealm.new_station_profile()
|
||||
|
||||
# Build stations
|
||||
self.station_profile.use_security(self.security, self.ssid, passwd="[BLANK]")
|
||||
self.station_profile.set_number_template(self.number_template)
|
||||
print("Creating stations")
|
||||
self.station_profile.set_command_flag("add_sta", "create_admin_down", 1)
|
||||
self.station_profile.set_command_param("set_port", "report_timer", 1500)
|
||||
self.station_profile.set_command_flag("set_port", "rpt_timer", 1)
|
||||
self.station_profile.set_wifi_extra(key_mgmt=self.key_mgmt, eap=self.eap, identity=self.identity,
|
||||
passwd=self.ttls_passwd,
|
||||
realm=self.ttls_realm, domain=self.domain,
|
||||
hessid=self.hessid)
|
||||
self.station_profile.create(radio=self.radio, sta_names_=self.sta_list, debug=self.debug, use_radius=True, hs20_enable=False)
|
||||
self._pass("PASS: Station build finished")
|
||||
|
||||
# Create UDP endpoints
|
||||
self.l3_udp_profile = self.localrealm.new_l3_cx_profile()
|
||||
self.l3_udp_profile.side_a_min_bps = 128000
|
||||
self.l3_udp_profile.side_b_min_bps = 128000
|
||||
self.l3_udp_profile.side_a_min_pdu = 1200
|
||||
self.l3_udp_profile.side_b_min_pdu = 1500
|
||||
self.l3_udp_profile.report_timer = 1000
|
||||
self.l3_udp_profile.name_prefix = "udp"
|
||||
self.l3_udp_profile.create(endp_type="lf_udp",
|
||||
side_a=list(self.localrealm.find_ports_like("%s*"%self.sta_prefix)),
|
||||
side_b="%d.%s" % (self.resource, self.upstream_port),
|
||||
suppress_related_commands=True)
|
||||
|
||||
# Create TCP endpoints
|
||||
self.l3_tcp_profile = self.localrealm.new_l3_cx_profile()
|
||||
self.l3_tcp_profile.side_a_min_bps = 128000
|
||||
self.l3_tcp_profile.side_b_min_bps = 56000
|
||||
self.l3_tcp_profile.name_prefix = "tcp"
|
||||
self.l3_tcp_profile.report_timer = 1000
|
||||
self.l3_tcp_profile.create(endp_type="lf_tcp",
|
||||
side_a=list(self.localrealm.find_ports_like("%s*"%self.sta_prefix)),
|
||||
side_b="%d.%s" % (self.resource, self.upstream_port),
|
||||
suppress_related_commands=True)
|
||||
|
||||
def start(self):
|
||||
if self.station_profile is None:
|
||||
self._fail("Incorrect setup")
|
||||
pprint.pprint(self.station_profile)
|
||||
if self.station_profile.up is None:
|
||||
self._fail("Incorrect station profile, missing profile.up")
|
||||
if self.station_profile.up == False:
|
||||
print("\nBringing ports up...")
|
||||
data = {"shelf": 1,
|
||||
"resource": self.resource,
|
||||
"port": "ALL",
|
||||
"probe_flags": 1}
|
||||
self.json_post("/cli-json/nc_show_ports", data)
|
||||
self.station_profile.admin_up()
|
||||
LFUtils.waitUntilPortsAdminUp(self.resource, self.lfclient_url, self.station_names)
|
||||
|
||||
# station_info = self.jsonGet(self.mgr_url, "%s?fields=port,ip,ap" % (self.getStaUrl()))
|
||||
duration = 0
|
||||
maxTime = 60
|
||||
ip = "0.0.0.0"
|
||||
ap = ""
|
||||
print("Waiting for %s stations to associate to AP: " % len(self.station_names), end="")
|
||||
connected_stations = {}
|
||||
while (len(connected_stations.keys()) < len(self.station_names)) and (duration < maxTime):
|
||||
duration += 3
|
||||
time.sleep(3)
|
||||
print(".", end="")
|
||||
for sta_name in self.station_names:
|
||||
sta_url = self.get_station_url(sta_name)
|
||||
station_info = self.json_get(sta_url + "?fields=port,ip,ap")
|
||||
|
||||
# LFUtils.debug_printer.pprint(station_info)
|
||||
if (station_info is not None) and ("interface" in station_info):
|
||||
if "ip" in station_info["interface"]:
|
||||
ip = station_info["interface"]["ip"]
|
||||
if "ap" in station_info["interface"]:
|
||||
ap = station_info["interface"]["ap"]
|
||||
|
||||
if (ap == "Not-Associated") or (ap == ""):
|
||||
if self.debug:
|
||||
print(" -%s," % sta_name, end="")
|
||||
else:
|
||||
if ip == "0.0.0.0":
|
||||
if self.debug:
|
||||
print(" %s (0.0.0.0)" % sta_name, end="")
|
||||
else:
|
||||
connected_stations[sta_name] = sta_url
|
||||
data = {
|
||||
"shelf":1,
|
||||
"resource": self.resource,
|
||||
"port": "ALL",
|
||||
"probe_flags": 1
|
||||
}
|
||||
self.json_post("/cli-json/nc_show_ports", data)
|
||||
|
||||
for sta_name in self.station_names:
|
||||
sta_url = self.get_station_url(sta_name)
|
||||
station_info = self.json_get(sta_url) # + "?fields=port,ip,ap")
|
||||
if station_info is None:
|
||||
print("unable to query %s" % sta_url)
|
||||
self.resulting_stations[sta_url] = station_info
|
||||
ap = station_info["interface"]["ap"]
|
||||
ip = station_info["interface"]["ip"]
|
||||
if (ap != "") and (ap != "Not-Associated"):
|
||||
print(" %s +AP %s, " % (sta_name, ap), end="")
|
||||
if self.dut_bssid != "":
|
||||
if self.dut_bssid.lower() == ap.lower():
|
||||
self._pass(sta_name+" connected to BSSID: " + ap)
|
||||
# self.test_results.append("PASSED: )
|
||||
# print("PASSED: Connected to BSSID: "+ap)
|
||||
else:
|
||||
self._fail("%s connected to wrong BSSID, requested: %s Actual: %s" % (sta_name, self.dut_bssid, ap))
|
||||
else:
|
||||
self._fail(sta_name+" did not connect to AP")
|
||||
return False
|
||||
|
||||
if ip == "0.0.0.0":
|
||||
self._fail("%s did not get an ip. Ending test" % sta_name)
|
||||
else:
|
||||
self._pass("%s connected to AP: %s With IP: %s" % (sta_name, ap, ip))
|
||||
|
||||
if self.passes() == False:
|
||||
if self.cleanup_on_exit:
|
||||
print("Cleaning up...")
|
||||
self.remove_stations()
|
||||
return False
|
||||
|
||||
# start cx traffic
|
||||
print("\nStarting CX Traffic")
|
||||
self.l3_udp_profile.start_cx()
|
||||
self.l3_tcp_profile.start_cx()
|
||||
time.sleep(1)
|
||||
# Refresh stats
|
||||
self.l3_udp_profile.refresh_cx()
|
||||
self.l3_tcp_profile.refresh_cx()
|
||||
|
||||
def collect_endp_stats(self, endp_map):
|
||||
print("Collecting Data")
|
||||
fields="?fields=name,tx+bytes,rx+bytes"
|
||||
for (cx_name, endps) in endp_map.items():
|
||||
try:
|
||||
endp_url = "/endp/%s%s" % (endps[0], fields)
|
||||
endp_json = self.json_get(endp_url)
|
||||
self.resulting_endpoints[endp_url] = endp_json
|
||||
ptest_a_tx = endp_json['endpoint']['tx bytes']
|
||||
ptest_a_rx = endp_json['endpoint']['rx bytes']
|
||||
|
||||
#ptest = self.json_get("/endp/%s?fields=tx+bytes,rx+bytes" % cx_names[cx_name]["b"])
|
||||
endp_url = "/endp/%s%s" % (endps[1], fields)
|
||||
endp_json = self.json_get(endp_url)
|
||||
self.resulting_endpoints[endp_url] = endp_json
|
||||
|
||||
ptest_b_tx = endp_json['endpoint']['tx bytes']
|
||||
ptest_b_rx = endp_json['endpoint']['rx bytes']
|
||||
|
||||
self.compare_vals("testTCP-A TX", ptest_a_tx)
|
||||
self.compare_vals("testTCP-A RX", ptest_a_rx)
|
||||
|
||||
self.compare_vals("testTCP-B TX", ptest_b_tx)
|
||||
self.compare_vals("testTCP-B RX", ptest_b_rx)
|
||||
|
||||
except Exception as e:
|
||||
print("Is this the function having the error?")
|
||||
self.error(e)
|
||||
|
||||
|
||||
def stop(self):
|
||||
# stop cx traffic
|
||||
print("Stopping CX Traffic")
|
||||
self.l3_udp_profile.stop_cx()
|
||||
self.l3_tcp_profile.stop_cx()
|
||||
|
||||
# Refresh stats
|
||||
print("\nRefresh CX stats")
|
||||
self.l3_udp_profile.refresh_cx()
|
||||
self.l3_tcp_profile.refresh_cx()
|
||||
|
||||
print("Sleeping for 5 seconds")
|
||||
time.sleep(5)
|
||||
|
||||
# get data for endpoints JSON
|
||||
self.collect_endp_stats(self.l3_udp_profile.created_cx)
|
||||
self.collect_endp_stats(self.l3_tcp_profile.created_cx)
|
||||
# print("\n")
|
||||
|
||||
def cleanup(self):
|
||||
# remove all endpoints and cxs
|
||||
if self.cleanup_on_exit:
|
||||
for sta_name in self.station_names:
|
||||
LFUtils.removePort(self.resource, sta_name, self.lfclient_url)
|
||||
curr_endp_names = []
|
||||
removeCX(self.lfclient_url, self.l3_udp_profile.get_cx_names())
|
||||
removeCX(self.lfclient_url, self.l3_tcp_profile.get_cx_names())
|
||||
for (cx_name, endp_names) in self.l3_udp_profile.created_cx.items():
|
||||
curr_endp_names.append(endp_names[0])
|
||||
curr_endp_names.append(endp_names[1])
|
||||
for (cx_name, endp_names) in self.l3_tcp_profile.created_cx.items():
|
||||
curr_endp_names.append(endp_names[0])
|
||||
curr_endp_names.append(endp_names[1])
|
||||
removeEndps(self.lfclient_url, curr_endp_names, debug= self.debug)
|
||||
|
||||
# ~class
|
||||
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
635
unit_tests/lab_ap_info.py
Executable file
635
unit_tests/lab_ap_info.py
Executable file
@@ -0,0 +1,635 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
##AP Models Under Test
|
||||
ap_models = ["ec420","ea8300","ecw5211","ecw5410"]
|
||||
|
||||
##Cloud Type(cloudSDK = v1, CMAP = cmap)
|
||||
cloud_type = "v1"
|
||||
|
||||
##LANForge Info
|
||||
lanforge_ip = "10.10.10.201"
|
||||
lanforge_2dot4g = "wiphy0"
|
||||
lanforge_5g = "wiphy3"
|
||||
lanforge_prefix = "sdk"
|
||||
|
||||
##RADIUS Info
|
||||
radius_info = {
|
||||
|
||||
"name": "Lab-RADIUS",
|
||||
"subnet_name": "Lab",
|
||||
"subnet": "10.10.0.0",
|
||||
"subnet_mask": 16,
|
||||
"region": "Toronto",
|
||||
"server_name": "Lab-RADIUS",
|
||||
"server_ip": "10.10.10.203",
|
||||
"secret": "testing123",
|
||||
"auth_port": 1812
|
||||
}
|
||||
##AP Models for firmware upload
|
||||
cloud_sdk_models = {
|
||||
"ec420": "EC420-G1",
|
||||
"ea8300": "EA8300-CA",
|
||||
"ecw5211": "ECW5211",
|
||||
"ecw5410": "ECW5410"
|
||||
}
|
||||
|
||||
mimo_5g = {
|
||||
"ec420": "4x4",
|
||||
"ea8300": "2x2",
|
||||
"ecw5211": "2x2",
|
||||
"ecw5410": "4x4"
|
||||
}
|
||||
|
||||
mimo_2dot4g = {
|
||||
"ec420": "2x2",
|
||||
"ea8300": "2x2",
|
||||
"ecw5211": "2x2",
|
||||
"ecw5410": "4x4"
|
||||
}
|
||||
|
||||
sanity_status = {
|
||||
"ea8300": "failed",
|
||||
"ecw5211": 'passed',
|
||||
"ecw5410": 'failed',
|
||||
"ec420": 'failed'
|
||||
}
|
||||
|
||||
##Customer ID for testing
|
||||
customer_id = "2"
|
||||
|
||||
##Equipment IDs for Lab APs under test
|
||||
equipment_id_dict = {
|
||||
"ea8300": "19",
|
||||
"ecw5410": "20",
|
||||
"ecw5211": "21",
|
||||
"ec420": "27"
|
||||
}
|
||||
|
||||
equipment_ip_dict = {
|
||||
"ea8300": "10.10.10.103",
|
||||
"ecw5410": "10.10.10.105",
|
||||
"ec420": "10.10.10.104",
|
||||
"ecw5211": "10.10.10.102"
|
||||
}
|
||||
|
||||
eqiupment_credentials_dict = {
|
||||
"ea8300": "openwifi",
|
||||
"ecw5410": "openwifi",
|
||||
"ec420": "openwifi",
|
||||
"ecw5211": "admin123"
|
||||
}
|
||||
|
||||
##Test Case information - Maps a generic TC name to TestRail TC numbers
|
||||
test_cases = {
|
||||
"ap_upgrade": 2233,
|
||||
"5g_wpa2_bridge": 2236,
|
||||
"2g_wpa2_bridge": 2237,
|
||||
"5g_wpa_bridge": 2419,
|
||||
"2g_wpa_bridge": 2420,
|
||||
"2g_wpa_nat": 4323,
|
||||
"5g_wpa_nat": 4324,
|
||||
"2g_wpa2_nat": 4325,
|
||||
"5g_wpa2_nat": 4326,
|
||||
"2g_eap_bridge": 5214,
|
||||
"5g_eap_bridge": 5215,
|
||||
"2g_eap_nat": 5216,
|
||||
"5g_eap_nat": 5217,
|
||||
"cloud_connection": 5222,
|
||||
"cloud_fw": 5247,
|
||||
"5g_wpa2_vlan": 5248,
|
||||
"5g_wpa_vlan": 5249,
|
||||
"5g_eap_vlan": 5250,
|
||||
"2g_wpa2_vlan": 5251,
|
||||
"2g_wpa_vlan": 5252,
|
||||
"2g_eap_vlan": 5253,
|
||||
"cloud_ver": 5540,
|
||||
"bridge_vifc": 5541,
|
||||
"nat_vifc": 5542,
|
||||
"vlan_vifc": 5543,
|
||||
"bridge_vifs": 5544,
|
||||
"nat_vifs": 5545,
|
||||
"vlan_vifs": 5546,
|
||||
"upgrade_api": 5547,
|
||||
"create_fw": 5548,
|
||||
"ap_bridge": 5641,
|
||||
"ap_nat": 5642,
|
||||
"ap_vlan": 5643,
|
||||
"ssid_2g_eap_bridge": 5644,
|
||||
"ssid_2g_wpa2_bridge": 5645,
|
||||
"ssid_2g_wpa_bridge": 5646,
|
||||
"ssid_5g_eap_bridge": 5647,
|
||||
"ssid_5g_wpa2_bridge": 5648,
|
||||
"ssid_5g_wpa_bridge": 5649,
|
||||
"ssid_2g_eap_nat": 5650,
|
||||
"ssid_2g_wpa2_nat": 5651,
|
||||
"ssid_2g_wpa_nat": 5652,
|
||||
"ssid_5g_eap_nat": 5653,
|
||||
"ssid_5g_wpa2_nat": 5654,
|
||||
"ssid_5g_wpa_nat": 5655,
|
||||
"ssid_2g_eap_vlan": 5656,
|
||||
"ssid_2g_wpa2_vlan": 5657,
|
||||
"ssid_2g_wpa_vlan": 5658,
|
||||
"ssid_5g_eap_vlan": 5659,
|
||||
"ssid_5g_wpa2_vlan": 5660,
|
||||
"ssid_5g_wpa_vlan": 5661,
|
||||
"radius_profile": 5808
|
||||
}
|
||||
|
||||
## Other profiles
|
||||
radius_profile = 129
|
||||
rf_profile = 10
|
||||
|
||||
###Testing AP Profile Information
|
||||
profile_info_dict = {
|
||||
"ecw5410": {
|
||||
"profile_id": "2",
|
||||
"childProfileIds": [
|
||||
129,
|
||||
3,
|
||||
10,
|
||||
11,
|
||||
12,
|
||||
13,
|
||||
190,
|
||||
191
|
||||
],
|
||||
"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",
|
||||
"fiveG_WPA2-EAP_SSID": "ECW5410_5G_WPA2-EAP",
|
||||
"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$",
|
||||
"twoFourG_WPA2-EAP_SSID": "ECW5410_2dot4G_WPA2-EAP",
|
||||
"fiveG_WPA2_profile": 3,
|
||||
"fiveG_WPA_profile": 13,
|
||||
"fiveG_WPA2-EAP_profile": 191,
|
||||
"twoFourG_WPA2_profile": 11,
|
||||
"twoFourG_WPA_profile": 12,
|
||||
"twoFourG_WPA2-EAP_profile": 190,
|
||||
"ssid_list": [
|
||||
"ECW5410_5G_WPA2",
|
||||
"ECW5410_5G_WPA",
|
||||
"ECW5410_5G_WPA2-EAP",
|
||||
"ECW5410_2dot4G_WPA2",
|
||||
"ECW5410_2dot4G_WPA",
|
||||
"ECW5410_2dot4G_WPA2-EAP"
|
||||
]
|
||||
},
|
||||
|
||||
"ea8300": {
|
||||
"profile_id": "153",
|
||||
"childProfileIds": [
|
||||
17,
|
||||
129,
|
||||
18,
|
||||
201,
|
||||
202,
|
||||
10,
|
||||
14,
|
||||
15
|
||||
],
|
||||
"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",
|
||||
"fiveG_WPA2-EAP_SSID": "EA8300_5G_WPA2-EAP",
|
||||
"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$",
|
||||
"twoFourG_WPA2-EAP_SSID": "EA8300_2dot4G_WPA2-EAP",
|
||||
"fiveG_WPA2_profile": 14,
|
||||
"fiveG_WPA_profile": 15,
|
||||
"fiveG_WPA2-EAP_profile": 202,
|
||||
"twoFourG_WPA2_profile": 17,
|
||||
"twoFourG_WPA_profile": 18,
|
||||
"twoFourG_WPA2-EAP_profile": 201,
|
||||
# EA8300 has 2x 5GHz SSIDs because it is a tri-radio AP!
|
||||
"ssid_list": [
|
||||
"EA8300_5G_WPA2",
|
||||
"EA8300_5G_WPA2",
|
||||
"EA8300_5G_WPA",
|
||||
"EA8300_5G_WPA",
|
||||
"EA8300_5G_WPA2-EAP",
|
||||
"EA8300_5G_WPA2-EAP",
|
||||
"EA8300_2dot4G_WPA2",
|
||||
"EA8300_2dot4G_WPA",
|
||||
"EA8300_2dot4G_WPA2-EAP"
|
||||
]
|
||||
},
|
||||
|
||||
"ec420": {
|
||||
"profile_id": "20",
|
||||
"childProfileIds": [
|
||||
129,
|
||||
209,
|
||||
210,
|
||||
21,
|
||||
22,
|
||||
24,
|
||||
25,
|
||||
10
|
||||
],
|
||||
"fiveG_WPA2_SSID": "EC420_5G_WPA2",
|
||||
"fiveG_WPA2_PSK": "Connectus123$",
|
||||
"fiveG_WPA_SSID": "EC420_5G_WPA",
|
||||
"fiveG_WPA_PSK": "Connectus123$",
|
||||
"fiveG_OPEN_SSID": "EC420_5G_OPEN",
|
||||
"fiveG_WPA2-EAP_SSID": "EC420_5G_WPA2-EAP",
|
||||
"twoFourG_OPEN_SSID": "EC420_2dot4G_OPEN",
|
||||
"twoFourG_WPA2_SSID": "EC420_2dot4G_WPA2",
|
||||
"twoFourG_WPA2_PSK": "Connectus123$",
|
||||
"twoFourG_WPA_SSID": "EC420_2dot4G_WPA",
|
||||
"twoFourG_WPA_PSK": "Connectus123$",
|
||||
"twoFourG_WPA2-EAP_SSID": "EC420_2dot4G_WPA2-EAP",
|
||||
"fiveG_WPA2_profile": 21,
|
||||
"fiveG_WPA_profile": 22,
|
||||
"fiveG_WPA2-EAP_profile": 210,
|
||||
"twoFourG_WPA2_profile": 24,
|
||||
"twoFourG_WPA_profile": 25,
|
||||
"twoFourG_WPA2-EAP_profile": 209,
|
||||
"ssid_list": [
|
||||
"EC420_5G_WPA2",
|
||||
"EC420_5G_WPA",
|
||||
"EC420_5G_WPA2-EAP",
|
||||
"EC420_2dot4G_WPA2",
|
||||
"EC420_2dot4G_WPA",
|
||||
"EC420_2dot4G_WPA2-EAP"
|
||||
]
|
||||
},
|
||||
|
||||
"ecw5211": {
|
||||
"profile_id": "27",
|
||||
"childProfileIds": [
|
||||
32,
|
||||
129,
|
||||
10,
|
||||
28,
|
||||
29,
|
||||
205,
|
||||
206,
|
||||
31
|
||||
],
|
||||
"fiveG_WPA2_SSID": "ECW5211_5G_WPA2",
|
||||
"fiveG_WPA2_PSK": "Connectus123$",
|
||||
"fiveG_WPA_SSID": "ECW5211_5G_WPA",
|
||||
"fiveG_WPA_PSK": "Connectus123$",
|
||||
"fiveG_OPEN_SSID": "ECW5211_5G_OPEN",
|
||||
"fiveG_WPA2-EAP_SSID": "ECW5211_5G_WPA2-EAP",
|
||||
"twoFourG_OPEN_SSID": "ECW5211_2dot4G_OPEN",
|
||||
"twoFourG_WPA2_SSID": "ECW5211_2dot4G_WPA2",
|
||||
"twoFourG_WPA2_PSK": "Connectus123$",
|
||||
"twoFourG_WPA_SSID": "ECW5211_2dot4G_WPA",
|
||||
"twoFourG_WPA_PSK": "Connectus123$",
|
||||
"twoFourG_WPA2-EAP_SSID": "ECW5211_2dot4G_WPA2-EAP",
|
||||
"fiveG_WPA2_profile": 28,
|
||||
"fiveG_WPA_profile": 29,
|
||||
"fiveG_WPA2-EAP_profile": 206,
|
||||
"twoFourG_WPA2_profile": 31,
|
||||
"twoFourG_WPA_profile": 32,
|
||||
"twoFourG_WPA2-EAP_profile": 205,
|
||||
"ssid_list": [
|
||||
"ECW5211_5G_WPA2",
|
||||
"ECW5211_5G_WPA",
|
||||
"ECW5211_5G_WPA2-EAP",
|
||||
"ECW5211_2dot4G_WPA2",
|
||||
"ECW5211_2dot4G_WPA",
|
||||
"ECW5211_2dot4G_WPA2-EAP"
|
||||
]
|
||||
},
|
||||
|
||||
"ecw5410_nat": {
|
||||
"profile_id": "68",
|
||||
"childProfileIds": [
|
||||
192,
|
||||
129,
|
||||
81,
|
||||
193,
|
||||
82,
|
||||
10,
|
||||
78,
|
||||
79
|
||||
],
|
||||
"fiveG_WPA2_SSID": "ECW5410_5G_WPA2_NAT",
|
||||
"fiveG_WPA2_PSK": "Connectus123$",
|
||||
"fiveG_WPA_SSID": "ECW5410_5G_WPA_NAT",
|
||||
"fiveG_WPA_PSK": "Connectus123$",
|
||||
"fiveG_OPEN_SSID": "ECW5410_5G_OPEN_NAT",
|
||||
"fiveG_WPA2-EAP_SSID": "ECW5410_5G_WPA2-EAP_NAT",
|
||||
"twoFourG_OPEN_SSID": "ECW5410_2dot4G_OPEN_NAT",
|
||||
"twoFourG_WPA2_SSID": "ECW5410_2dot4G_WPA2_NAT",
|
||||
"twoFourG_WPA2_PSK": "Connectus123$",
|
||||
"twoFourG_WPA_SSID": "ECW5410_2dot4G_WPA_NAT",
|
||||
"twoFourG_WPA_PSK": "Connectus123$",
|
||||
"twoFourG_WPA2-EAP_SSID": "ECW5410_2dot4G_WPA2-EAP_NAT",
|
||||
"fiveG_WPA2_profile": 78,
|
||||
"fiveG_WPA_profile": 79,
|
||||
"fiveG_WPA2-EAP_profile": 192,
|
||||
"twoFourG_WPA2_profile": 81,
|
||||
"twoFourG_WPA_profile": 82,
|
||||
"twoFourG_WPA2-EAP_profile": 193,
|
||||
"ssid_list": [
|
||||
"ECW5410_5G_WPA2_NAT",
|
||||
"ECW5410_5G_WPA_NAT",
|
||||
"ECW5410_5G_WPA2-EAP_NAT",
|
||||
"ECW5410_2dot4G_WPA2_NAT",
|
||||
"ECW5410_2dot4G_WPA_NAT",
|
||||
"ECW5410_2dot4G_WPA2-EAP_NAT"
|
||||
]
|
||||
},
|
||||
|
||||
"ea8300_nat": {
|
||||
"profile_id": "67",
|
||||
"childProfileIds": [
|
||||
129,
|
||||
72,
|
||||
73,
|
||||
10,
|
||||
75,
|
||||
203,
|
||||
76,
|
||||
204
|
||||
],
|
||||
"fiveG_WPA2_SSID": "EA8300_5G_WPA2_NAT",
|
||||
"fiveG_WPA2_PSK": "Connectus123$",
|
||||
"fiveG_WPA_SSID": "EA8300_5G_WPA_NAT",
|
||||
"fiveG_WPA_PSK": "Connectus123$",
|
||||
"fiveG_OPEN_SSID": "EA8300_5G_OPEN_NAT",
|
||||
"fiveG_WPA2-EAP_SSID": "EA8300_5G_WPA2-EAP_NAT",
|
||||
"twoFourG_OPEN_SSID": "EA8300_2dot4G_OPEN_NAT",
|
||||
"twoFourG_WPA2_SSID": "EA8300_2dot4G_WPA2_NAT",
|
||||
"twoFourG_WPA2_PSK": "Connectus123$",
|
||||
"twoFourG_WPA_SSID": "EA8300_2dot4G_WPA_NAT",
|
||||
"twoFourG_WPA_PSK": "Connectus123$",
|
||||
"twoFourG_WPA2-EAP_SSID": "EA8300_2dot4G_WPA2-EAP_NAT",
|
||||
"fiveG_WPA2_profile": 72,
|
||||
"fiveG_WPA_profile": 73,
|
||||
"fiveG_WPA2-EAP_profile": 203,
|
||||
"twoFourG_WPA2_profile": 75,
|
||||
"twoFourG_WPA_profile": 76,
|
||||
"twoFourG_WPA2-EAP_profile": 204,
|
||||
# EA8300 has 2x 5GHz SSIDs because it is a tri-radio AP!
|
||||
"ssid_list": [
|
||||
"EA8300_5G_WPA2_NAT",
|
||||
"EA8300_5G_WPA2_NAT",
|
||||
"EA8300_5G_WPA_NAT",
|
||||
"EA8300_5G_WPA_NAT",
|
||||
"EA8300_5G_WPA2-EAP_NAT",
|
||||
"EA8300_5G_WPA2-EAP_NAT",
|
||||
"EA8300_2dot4G_WPA2_NAT",
|
||||
"EA8300_2dot4G_WPA_NAT",
|
||||
"EA8300_2dot4G_WPA2-EAP_NAT"
|
||||
]
|
||||
},
|
||||
|
||||
"ec420_nat": {
|
||||
"profile_id": "70",
|
||||
"childProfileIds": [
|
||||
129,
|
||||
211,
|
||||
212,
|
||||
90,
|
||||
10,
|
||||
91,
|
||||
93,
|
||||
94
|
||||
],
|
||||
"fiveG_WPA2_SSID": "EC420_5G_WPA2_NAT",
|
||||
"fiveG_WPA2_PSK": "Connectus123$",
|
||||
"fiveG_WPA_SSID": "EC420_5G_WPA_NAT",
|
||||
"fiveG_WPA_PSK": "Connectus123$",
|
||||
"fiveG_OPEN_SSID": "EC420_5G_OPEN_NAT",
|
||||
"fiveG_WPA2-EAP_SSID": "EC420_5G_WPA2-EAP_NAT",
|
||||
"twoFourG_OPEN_SSID": "EC420_2dot4G_OPEN_NAT",
|
||||
"twoFourG_WPA2_SSID": "EC420_2dot4G_WPA2_NAT",
|
||||
"twoFourG_WPA2_PSK": "Connectus123$",
|
||||
"twoFourG_WPA_SSID": "EC420_2dot4G_WPA_NAT",
|
||||
"twoFourG_WPA_PSK": "Connectus123$",
|
||||
"twoFourG_WPA2-EAP_SSID": "EC420_2dot4G_WPA2-EAP_NAT",
|
||||
"fiveG_WPA2_profile": 90,
|
||||
"fiveG_WPA_profile": 91,
|
||||
"fiveG_WPA2-EAP_profile": 211,
|
||||
"twoFourG_WPA2_profile": 93,
|
||||
"twoFourG_WPA_profile": 94,
|
||||
"twoFourG_WPA2-EAP_profile": 212,
|
||||
"ssid_list": [
|
||||
"EC420_5G_WPA2_NAT",
|
||||
"EC420_5G_WPA_NAT",
|
||||
"EC420_5G_WPA2-EAP_NAT",
|
||||
"EC420_2dot4G_WPA2_NAT",
|
||||
"EC420_2dot4G_WPA_NAT",
|
||||
"EC420_2dot4G_WPA2-EAP_NAT"
|
||||
]
|
||||
},
|
||||
|
||||
"ecw5211_nat": {
|
||||
"profile_id": "69",
|
||||
"childProfileIds": [
|
||||
208,
|
||||
129,
|
||||
84,
|
||||
85,
|
||||
87,
|
||||
88,
|
||||
10,
|
||||
207
|
||||
],
|
||||
"fiveG_WPA2_SSID": "ECW5211_5G_WPA2_NAT",
|
||||
"fiveG_WPA2_PSK": "Connectus123$",
|
||||
"fiveG_WPA_SSID": "ECW5211_5G_WPA_NAT",
|
||||
"fiveG_WPA_PSK": "Connectus123$",
|
||||
"fiveG_OPEN_SSID": "ECW5211_5G_OPEN_NAT",
|
||||
"fiveG_WPA2-EAP_SSID": "ECW5211_5G_WPA2-EAP_NAT",
|
||||
"twoFourG_OPEN_SSID": "ECW5211_2dot4G_OPEN_NAT",
|
||||
"twoFourG_WPA2_SSID": "ECW5211_2dot4G_WPA2_NAT",
|
||||
"twoFourG_WPA2_PSK": "Connectus123$",
|
||||
"twoFourG_WPA_SSID": "ECW5211_2dot4G_WPA_NAT",
|
||||
"twoFourG_WPA_PSK": "Connectus123$",
|
||||
"twoFourG_WPA2-EAP_SSID": "ECW5211_2dot4G_WPA2-EAP_NAT",
|
||||
"fiveG_WPA2_profile": 84,
|
||||
"fiveG_WPA_profile": 85,
|
||||
"fiveG_WPA2-EAP_profile": 207,
|
||||
"twoFourG_WPA2_profile": 87,
|
||||
"twoFourG_WPA_profile": 88,
|
||||
"twoFourG_WPA2-EAP_profile": 208,
|
||||
"ssid_list": [
|
||||
"ECW5211_5G_WPA2_NAT",
|
||||
"ECW5211_5G_WPA_NAT",
|
||||
"ECW5211_5G_WPA2-EAP_NAT",
|
||||
"ECW5211_2dot4G_WPA2_NAT",
|
||||
"ECW5211_2dot4G_WPA_NAT",
|
||||
"ECW5211_2dot4G_WPA2-EAP_NAT"
|
||||
]
|
||||
},
|
||||
|
||||
"ecw5410_vlan": {
|
||||
"profile_id": "338",
|
||||
"childProfileIds": [
|
||||
336,
|
||||
320,
|
||||
129,
|
||||
337,
|
||||
10,
|
||||
333,
|
||||
334,
|
||||
335
|
||||
],
|
||||
"fiveG_WPA2_SSID": "ECW5410_5G_WPA2_VLAN",
|
||||
"fiveG_WPA2_PSK": "Connectus123$",
|
||||
"fiveG_WPA_SSID": "ECW5410_5G_WPA_VLAN",
|
||||
"fiveG_WPA_PSK": "Connectus123$",
|
||||
"fiveG_OPEN_SSID": "ECW5410_5G_OPEN_VLAN",
|
||||
"fiveG_WPA2-EAP_SSID": "ECW5410_5G_WPA2-EAP_VLAN",
|
||||
"twoFourG_OPEN_SSID": "ECW5410_2dot4G_OPEN_VLAN",
|
||||
"twoFourG_WPA2_SSID": "ECW5410_2dot4G_WPA2_VLAN",
|
||||
"twoFourG_WPA2_PSK": "Connectus123$",
|
||||
"twoFourG_WPA_SSID": "ECW5410_2dot4G_WPA_VLAN",
|
||||
"twoFourG_WPA_PSK": "Connectus123$",
|
||||
"twoFourG_WPA2-EAP_SSID": "ECW5410_2dot4G_WPA2-EAP_VLAN",
|
||||
"fiveG_WPA2_profile": 320,
|
||||
"fiveG_WPA_profile": 333,
|
||||
"fiveG_WPA2-EAP_profile": 337,
|
||||
"twoFourG_WPA2_profile": 334,
|
||||
"twoFourG_WPA_profile": 335,
|
||||
"twoFourG_WPA2-EAP_profile": 336,
|
||||
"ssid_list": [
|
||||
"ECW5410_5G_WPA2_VLAN",
|
||||
"ECW5410_5G_WPA_VLAN",
|
||||
"ECW5410_5G_WPA2-EAP_VLAN",
|
||||
"ECW5410_2dot4G_WPA2_VLAN",
|
||||
"ECW5410_2dot4G_WPA_VLAN",
|
||||
"ECW5410_2dot4G_WPA2-EAP_VLAN"
|
||||
]
|
||||
},
|
||||
|
||||
"ea8300_vlan": {
|
||||
"profile_id": "319",
|
||||
"childProfileIds": [
|
||||
129,
|
||||
313,
|
||||
10,
|
||||
314,
|
||||
315,
|
||||
316,
|
||||
317,
|
||||
318
|
||||
],
|
||||
"fiveG_WPA2_SSID": "EA8300_5G_WPA2_VLAN",
|
||||
"fiveG_WPA2_PSK": "Connectus123$",
|
||||
"fiveG_WPA_SSID": "EA8300_5G_WPA_VLAN",
|
||||
"fiveG_WPA_PSK": "Connectus123$",
|
||||
"fiveG_OPEN_SSID": "EA8300_5G_OPEN_VLAN",
|
||||
"fiveG_WPA2-EAP_SSID": "EA8300_5G_WPA2-EAP_VLAN",
|
||||
"twoFourG_OPEN_SSID": "EA8300_2dot4G_OPEN_VLAN",
|
||||
"twoFourG_WPA2_SSID": "EA8300_2dot4G_WPA2_VLAN",
|
||||
"twoFourG_WPA2_PSK": "Connectus123$",
|
||||
"twoFourG_WPA_SSID": "EA8300_2dot4G_WPA_VLAN",
|
||||
"twoFourG_WPA_PSK": "Connectus123$",
|
||||
"twoFourG_WPA2-EAP_SSID": "EA8300_2dot4G_WPA2-EAP_VLAN",
|
||||
"fiveG_WPA2_profile": 313,
|
||||
"fiveG_WPA_profile": 314,
|
||||
"fiveG_WPA2-EAP_profile": 318,
|
||||
"twoFourG_WPA2_profile": 315,
|
||||
"twoFourG_WPA_profile": 316,
|
||||
"twoFourG_WPA2-EAP_profile": 317,
|
||||
# EA8300 has 2x 5GHz SSIDs because it is a tri-radio AP!
|
||||
"ssid_list": [
|
||||
"EA8300_5G_WPA2_VLAN",
|
||||
"EA8300_5G_WPA2_VLAN",
|
||||
"EA8300_5G_WPA_VLAN",
|
||||
"EA8300_5G_WPA_VLAN",
|
||||
"EA8300_5G_WPA2-EAP_VLAN",
|
||||
"EA8300_5G_WPA2-EAP_VLAN",
|
||||
"EA8300_2dot4G_WPA2_VLAN",
|
||||
"EA8300_2dot4G_WPA_VLAN",
|
||||
"EA8300_2dot4G_WPA2-EAP_VLAN"
|
||||
]
|
||||
},
|
||||
|
||||
"ec420_vlan": {
|
||||
"profile_id": "357",
|
||||
"childProfileIds": [
|
||||
352,
|
||||
129,
|
||||
353,
|
||||
354,
|
||||
355,
|
||||
356,
|
||||
10,
|
||||
351
|
||||
],
|
||||
"fiveG_WPA2_SSID": "EC420_5G_WPA2_VLAN",
|
||||
"fiveG_WPA2_PSK": "Connectus123$",
|
||||
"fiveG_WPA_SSID": "EC420_5G_WPA_VLAN",
|
||||
"fiveG_WPA_PSK": "Connectus123$",
|
||||
"fiveG_OPEN_SSID": "EC420_5G_OPEN_VLAN",
|
||||
"fiveG_WPA2-EAP_SSID": "EC420_5G_WPA2-EAP_VLAN",
|
||||
"twoFourG_OPEN_SSID": "EC420_2dot4G_OPEN_VLAN",
|
||||
"twoFourG_WPA2_SSID": "EC420_2dot4G_WPA2_VLAN",
|
||||
"twoFourG_WPA2_PSK": "Connectus123$",
|
||||
"twoFourG_WPA_SSID": "EC420_2dot4G_WPA_VLAN",
|
||||
"twoFourG_WPA_PSK": "Connectus123$",
|
||||
"twoFourG_WPA2-EAP_SSID": "EC420_2dot4G_WPA2-EAP_VLAN",
|
||||
"fiveG_WPA2_profile": 351,
|
||||
"fiveG_WPA_profile": 352,
|
||||
"fiveG_WPA2-EAP_profile": 356,
|
||||
"twoFourG_WPA2_profile": 353,
|
||||
"twoFourG_WPA_profile": 354,
|
||||
"twoFourG_WPA2-EAP_profile": 355,
|
||||
"ssid_list": [
|
||||
"EC420_5G_WPA2_VLAN",
|
||||
"EC420_5G_WPA_VLAN",
|
||||
"EC420_5G_WPA2-EAP_VLAN",
|
||||
"EC420_2dot4G_WPA2_VLAN",
|
||||
"EC420_2dot4G_WPA_VLAN",
|
||||
"EC420_2dot4G_WPA2-EAP_VLAN"
|
||||
]
|
||||
},
|
||||
|
||||
"ecw5211_vlan": {
|
||||
"profile_id": "364",
|
||||
"childProfileIds": [
|
||||
129,
|
||||
358,
|
||||
359,
|
||||
360,
|
||||
361,
|
||||
10,
|
||||
362,
|
||||
363
|
||||
],
|
||||
"fiveG_WPA2_SSID": "ECW5211_5G_WPA2_VLAN",
|
||||
"fiveG_WPA2_PSK": "Connectus123$",
|
||||
"fiveG_WPA_SSID": "ECW5211_5G_WPA_VLAN",
|
||||
"fiveG_WPA_PSK": "Connectus123$",
|
||||
"fiveG_OPEN_SSID": "ECW5211_5G_OPEN_VLAN",
|
||||
"fiveG_WPA2-EAP_SSID": "ECW5211_5G_WPA2-EAP_VLAN",
|
||||
"twoFourG_OPEN_SSID": "ECW5211_2dot4G_OPEN_VLAN",
|
||||
"twoFourG_WPA2_SSID": "ECW5211_2dot4G_WPA2_VLAN",
|
||||
"twoFourG_WPA2_PSK": "Connectus123$",
|
||||
"twoFourG_WPA_SSID": "ECW5211_2dot4G_WPA_VLAN",
|
||||
"twoFourG_WPA_PSK": "Connectus123$",
|
||||
"twoFourG_WPA2-EAP_SSID": "ECW5211_2dot4G_WPA2-EAP_VLAN",
|
||||
"fiveG_WPA2_profile": 358,
|
||||
"fiveG_WPA_profile": 359,
|
||||
"fiveG_WPA2-EAP_profile": 363,
|
||||
"twoFourG_WPA2_profile": 360,
|
||||
"twoFourG_WPA_profile": 361,
|
||||
"twoFourG_WPA2-EAP_profile": 362,
|
||||
"ssid_list": [
|
||||
"ECW5211_5G_WPA2_VLAN",
|
||||
"ECW5211_5G_WPA_VLAN",
|
||||
"ECW5211_5G_WPA2-EAP_VLAN",
|
||||
"ECW5211_2dot4G_WPA2_VLAN",
|
||||
"ECW5211_2dot4G_WPA_VLAN",
|
||||
"ECW5211_2dot4G_WPA2-EAP_VLAN"
|
||||
]
|
||||
}
|
||||
}
|
||||
622
unit_tests/reports/report_template.php
Executable file
622
unit_tests/reports/report_template.php
Executable file
@@ -0,0 +1,622 @@
|
||||
<! DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Testing Report</title>
|
||||
<head>
|
||||
|
||||
<?php
|
||||
//error_reporting(E_ALL);
|
||||
//ini_set('display_errors', '1');
|
||||
$results = file_get_contents('report_data.json');
|
||||
$json = json_decode($results, true);
|
||||
?>
|
||||
|
||||
<body bgcolor="grey">
|
||||
|
||||
<style>
|
||||
.tab1 {
|
||||
tab-size: 8;
|
||||
}
|
||||
|
||||
.tab2 {
|
||||
tab-size: 14;
|
||||
}
|
||||
|
||||
.tab4 {
|
||||
margin-left: 188;
|
||||
}
|
||||
|
||||
div.sanity {
|
||||
background-color: lightgray;
|
||||
width: 975px;
|
||||
border-style: ridge;
|
||||
padding: 10px;
|
||||
left: 0;
|
||||
font-size: 15px;
|
||||
line-height: 25px
|
||||
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<header>
|
||||
<h1 style="color:green; font-size:40px; text-align: center">CICD Nightly Sanity Report - <?php echo basename(dirname(__FILE__)) ?></h1>
|
||||
</header>
|
||||
|
||||
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="4" CELLSPACING="3" Style="background-color: lightgray; font-size:16px">
|
||||
<TR>
|
||||
<TH COLSPAN="7"><BR><H3>Test Results</H3>
|
||||
</TH>
|
||||
</TR>
|
||||
<TR>
|
||||
<TH COLSPAN="2" ROWSPAN="7"></TH>
|
||||
<TH></TH>
|
||||
<TH WIDTH="150px">EA8300 Result</TH>
|
||||
<TH WIDTH="150px">ECW5211 Result</TH>
|
||||
<TH WIDTH="150px">ECW5410 Result</TH>
|
||||
<TH WIDTH="150px">EC420 Result</TH>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD ALIGN="LEFT" style="font-weight:bold">New FW Available</TD>
|
||||
<TD style="font-weight:bold"><?php echo print_r($json['fw_available']['ea8300'],true) ?></TD>
|
||||
<TD style="font-weight:bold"><?php echo print_r($json['fw_available']['ecw5211'],true) ?></TD>
|
||||
<TD style="font-weight:bold"><?php echo print_r($json['fw_available']['ecw5410'],true) ?></TD>
|
||||
<TD style="font-weight:bold"><?php echo print_r($json['fw_available']['ec420'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER" style="font-weight:bold">
|
||||
<TD ALIGN="LEFT" >FW Under Test</TD>
|
||||
<TD style="font-size:12px"><?php echo print_r($json['fw_under_test']['ea8300'],true) ?></TD>
|
||||
<TD style="font-size:12px"><?php echo print_r($json['fw_under_test']['ecw5211'],true) ?></TD>
|
||||
<TD style="font-size:12px"><?php echo print_r($json['fw_under_test']['ecw5410'],true) ?></TD>
|
||||
<TD style="font-size:12px"><?php echo print_r($json['fw_under_test']['ec420'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER" style="font-weight:bold">
|
||||
<TD ALIGN="LEFT" >CloudSDK Commit Date</TD>
|
||||
<TD style="font-size:12px"><?php echo print_r($json['cloud_sdk']['ea8300']['date'],true) ?></TD>
|
||||
<TD style="font-size:12px"><?php echo print_r($json['cloud_sdk']['ecw5211']['date'],true) ?></TD>
|
||||
<TD style="font-size:12px"><?php echo print_r($json['cloud_sdk']['ecw5410']['date'],true) ?></TD>
|
||||
<TD style="font-size:12px"><?php echo print_r($json['cloud_sdk']['ec420']['date'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER" style="font-weight:bold">
|
||||
<TD ALIGN="LEFT" >CloudSDK Commit ID</TD>
|
||||
<TD style="font-size:10px"><?php echo print_r($json['cloud_sdk']['ea8300']['commitId'],true) ?></TD>
|
||||
<TD style="font-size:10px"><?php echo print_r($json['cloud_sdk']['ecw5211']['commitId'],true) ?></TD>
|
||||
<TD style="font-size:10px"><?php echo print_r($json['cloud_sdk']['ecw5410']['commitId'],true) ?></TD>
|
||||
<TD style="font-size:10px"><?php echo print_r($json['cloud_sdk']['ec420']['commitId'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER" style="font-weight:bold">
|
||||
<TD ALIGN="LEFT" >CloudSDK Project Version</TD>
|
||||
<TD style="font-size:12px"><?php echo print_r($json['cloud_sdk']['ea8300']['projectVersion'],true) ?></TD>
|
||||
<TD style="font-size:12px"><?php echo print_r($json['cloud_sdk']['ecw5211']['projectVersion'],true) ?></TD>
|
||||
<TD style="font-size:12px"><?php echo print_r($json['cloud_sdk']['ecw5410']['projectVersion'],true) ?></TD>
|
||||
<TD style="font-size:12px"><?php echo print_r($json['cloud_sdk']['ec420']['projectVersion'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER" style="font-weight:bold">
|
||||
<TD ALIGN="LEFT">Test Pass Rate</TD>
|
||||
<TD style="font-size:14px"><?php echo print_r($json['pass_percent']['ea8300'],true) ?></TD>
|
||||
<TD style="font-size:14px"><?php echo print_r($json['pass_percent']['ecw5211'],true) ?></TD>
|
||||
<TD style="font-size:14px"><?php echo print_r($json['pass_percent']['ecw5410'],true) ?></TD>
|
||||
<TD style="font-size:14px"><?php echo print_r($json['pass_percent']['ec420'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TH>Test Case</TH>
|
||||
<TH WIDTH= 7%">Category</TH>
|
||||
<TH>Description</TH>
|
||||
<TH></TH>
|
||||
<TH></TH>
|
||||
<TH></TH>
|
||||
<TH></TH>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5540</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Get CloudSDK Version with API</TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5540'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5540'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5540'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5540'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5548</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Create FW version on CloudSDK using API</TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5548'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5548'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5548'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5548'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5547</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Request AP Upgrade using API</TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5547'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5547'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5547'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5547'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>2233</TD>
|
||||
<TD>AP</TD>
|
||||
<TD ALIGN="LEFT">AP Upgrade Successful</TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['2233'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['2233'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['2233'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['2233'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5247</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">CloudSDK Reports Correct FW</TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5247'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5247'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5247'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5247'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5222</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">AP-CloudSDK Connection Active </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5222'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5222'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5222'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5222'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5808</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Create RADIUS Profile </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5808'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5808'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5808'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5808'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5644</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Create SSID Profile 2.4 GHz WPA2-EAP - Bridge Mode </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5644'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5644'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5644'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5644'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5645</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Create SSID Profile 2.4 GHz WPA2 - Bridge Mode </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5645'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5645'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5645'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5645'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5646</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Create SSID Profile 2.4 GHz WPA - Bridge Mode </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5646'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5646'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5646'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5646'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5647</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Create SSID Profile 5 GHz WPA2-EAP - Bridge Mode </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5646'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5646'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5646'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5646'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5647</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Create SSID Profile 5 GHz WPA2 - Bridge Mode </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5647'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5647'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5647'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5647'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5648</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Create SSID Profile 5 GHz WPA - Bridge Mode </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5648'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5648'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5648'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5648'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5641</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Create AP Profile - Bridge Mode </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5641'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5641'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5641'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5641'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5541</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">CloudSDK Pushes Correct AP Profile - Bridge Mode </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5541'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5541'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5541'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5541'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5544</TD>
|
||||
<TD>AP</TD>
|
||||
<TD ALIGN="LEFT">AP Applies Correct AP Profile - Bridge Mode </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5544'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5544'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5544'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5544'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5214</TD>
|
||||
<TD>AP</TD>
|
||||
<TD ALIGN="LEFT">Client connects to 2.4 GHz WPA2-EAP - Bridge Mode</TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5214'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5214'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5214'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5214'],true) ?></TD>
|
||||
</TR>
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>2237</TD>
|
||||
<TD>AP</TD>
|
||||
<TD ALIGN="LEFT">Client connects to 2.4 GHz WPA2 - Bridge Mode</TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['2237'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['2237'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['2237'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['2237'],true) ?></TD>
|
||||
</TR>
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>2420</TD>
|
||||
<TD>AP</TD>
|
||||
<TD ALIGN="LEFT">Client connects to 2.4 GHz WPA - Bridge Mode</TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['2420'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['2420'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['2420'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['2420'],true) ?></TD>
|
||||
</TR>
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5215</TD>
|
||||
<TD>AP</TD>
|
||||
<TD ALIGN="LEFT">Client connects to 5 GHz WPA2-EAP - Bridge Mode</TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5215'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5215'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5215'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5215'],true) ?></TD>
|
||||
</TR>
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>2236</TD>
|
||||
<TD>AP</TD>
|
||||
<TD ALIGN="LEFT">Client connects to 5 GHz WPA2 - Bridge Mode</TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['2236'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['2236'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['2236'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['2236'],true) ?></TD>
|
||||
</TR>
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>2419</TD>
|
||||
<TD>AP</TD>
|
||||
<TD ALIGN="LEFT">Client connects to 5 GHz WPA - Bridge Mode</TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['2419'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['2419'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['2419'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['2419'],true) ?></TD>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5650</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Create SSID Profile 2.4 GHz WPA2-EAP - NAT Mode </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5650'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5650'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5650'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5650'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5651</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Create SSID Profile 2.4 GHz WPA2 - NAT Mode </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5651'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5651'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5651'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5651'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5652</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Create SSID Profile 2.4 GHz WPA - NAT Mode </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5652'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5652'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5652'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5652'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5653</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Create SSID Profile 5 GHz WPA2-EAP - NAT Mode </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5653'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5653'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5653'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5653'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5654</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Create SSID Profile 5 GHz WPA2 - NAT Mode </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5654'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5654'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5654'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5654'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5655</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Create SSID Profile 5 GHz WPA - NAT Mode </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5655'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5655'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5655'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5655'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5642</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Create AP Profile - NAT Mode </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5642'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5642'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5642'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5642'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5542</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">CloudSDK Pushes Correct AP Profile - NAT Mode </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5542'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5542'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5542'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5542'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5545</TD>
|
||||
<TD>AP</TD>
|
||||
<TD ALIGN="LEFT">AP Applies Correct AP Profile - NAT Mode </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5545'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5545'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5545'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5545'],true) ?></TD>
|
||||
</TR>
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5216</TD>
|
||||
<TD>AP</TD>
|
||||
<TD ALIGN="LEFT">Client connects to 2.4 GHz WPA2-EAP - NAT Mode</TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5216'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5216'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5216'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5216'],true) ?></TD>
|
||||
</TR>
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>4325</TD>
|
||||
<TD>AP</TD>
|
||||
<TD ALIGN="LEFT">Client connects to 2.4 GHz WPA2 - NAT Mode</TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['4325'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['4325'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['4325'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['4325'],true) ?></TD>
|
||||
</TR>
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>4323</TD>
|
||||
<TD>AP</TD>
|
||||
<TD ALIGN="LEFT">Client connects to 2.4 GHz WPA - NAT Mode</TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['4323'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['4323'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['4323'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['4323'],true) ?></TD>
|
||||
</TR>
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5217</TD>
|
||||
<TD>AP</TD>
|
||||
<TD ALIGN="LEFT">Client connects to 5 GHz WPA2-EAP - NAT Mode</TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5217'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5217'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5217'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5217'],true) ?></TD>
|
||||
</TR>
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>4326</TD>
|
||||
<TD>AP</TD>
|
||||
<TD ALIGN="LEFT">Client connects to 5 GHz WPA2 - NAT Mode</TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['4326'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['4326'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['4326'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['4326'],true) ?></TD>
|
||||
</TR>
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>4324</TD>
|
||||
<TD>AP</TD>
|
||||
<TD ALIGN="LEFT">Client connects to 5 GHz WPA - NAT Mode</TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['4324'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['4324'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['4324'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['4324'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5656</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Create SSID Profile 2.4 GHz WPA2-EAP - Custom VLAN </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5656'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5656'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5656'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5656'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5657</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Create SSID Profile 2.4 GHz WPA2 - Custom VLAN </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5657'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5657'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5657'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5657'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5658</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Create SSID Profile 2.4 GHz WPA - Custom VLAN </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5658'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5658'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5658'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5658'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5659</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Create SSID Profile 5 GHz WPA2-EAP - Custom VLAN </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5659'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5659'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5659'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5659'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5660</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Create SSID Profile 5 GHz WPA2 - Custom VLAN </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5660'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5660'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5660'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5660'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5661</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Create SSID Profile 5 GHz WPA - Custom VLAN </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5661'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5661'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5661'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5661'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5643</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">Create AP Profile - Custom VLAN </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5643'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5643'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5643'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5643'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5543</TD>
|
||||
<TD>CloudSDK</TD>
|
||||
<TD ALIGN="LEFT">CloudSDK Pushes Correct AP Profile - Custom VLAN </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5543'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5543'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5543'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5543'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5546</TD>
|
||||
<TD>AP</TD>
|
||||
<TD ALIGN="LEFT">AP Applies Correct AP Profile - Custom VLAN </TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5546'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5546'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5546'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5546'],true) ?></TD>
|
||||
</TR>
|
||||
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5253</TD>
|
||||
<TD>AP</TD>
|
||||
<TD ALIGN="LEFT">Client connects to 2.4 GHz WPA2-EAP - Custom VLAN</TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5253'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5253'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5253'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5253'],true) ?></TD>
|
||||
</TR>
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5251</TD>
|
||||
<TD>AP</TD>
|
||||
<TD ALIGN="LEFT">Client connects to 2.4 GHz WPA2 - Custom VLAN</TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5251'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5251'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5251'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5251'],true) ?></TD>
|
||||
</TR>
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5252</TD>
|
||||
<TD>AP</TD>
|
||||
<TD ALIGN="LEFT">Client connects to 2.4 GHz WPA - Custom VLAN</TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5252'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5252'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5252'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5252'],true) ?></TD>
|
||||
</TR>
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5250</TD>
|
||||
<TD>AP</TD>
|
||||
<TD ALIGN="LEFT">Client connects to 5 GHz WPA2-EAP - Custom VLAN</TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5250'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5250'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5250'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5250'],true) ?></TD>
|
||||
</TR>
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5248</TD>
|
||||
<TD>AP</TD>
|
||||
<TD ALIGN="LEFT">Client connects to 5 GHz WPA2 - Custom VLAN</TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5248'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5248'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5248'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5248'],true) ?></TD>
|
||||
</TR>
|
||||
<TR ALIGN="CENTER">
|
||||
<TD>5249</TD>
|
||||
<TD>AP</TD>
|
||||
<TD ALIGN="LEFT">Client connects to 5 GHz WPA - Custom VLAN</TD>
|
||||
<TD><?php echo print_r($json['tests']['ea8300']['5249'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5211']['5249'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ecw5410']['5249'],true) ?></TD>
|
||||
<TD><?php echo print_r($json['tests']['ec420']['5249'],true) ?></TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
|
||||
</body>
|
||||
1
unit_tests/sanity_status.json
Executable file
1
unit_tests/sanity_status.json
Executable file
@@ -0,0 +1 @@
|
||||
{"sanity_status": {"ea8300": "failed", "ecw5211": "failed", "ecw5410": "failed", "ec420": "failed"}, "sanity_run": {"new_data": "yes"}}
|
||||
1064
unit_tests/single_client_throughput.py
Executable file
1064
unit_tests/single_client_throughput.py
Executable file
File diff suppressed because it is too large
Load Diff
1
unit_tests/templates/ap_profile_template.json
Normal file
1
unit_tests/templates/ap_profile_template.json
Normal file
@@ -0,0 +1 @@
|
||||
{"model_type": "Profile", "id": 2, "customerId": 2, "profileType": "equipment_ap", "name": "Nightly_Sanity_ea8300_2020-12-13_vlan", "details": {"model_type": "ApNetworkConfiguration", "networkConfigVersion": "AP-1", "equipmentType": "AP", "vlanNative": true, "vlan": 0, "ntpServer": {"model_type": "AutoOrManualString", "auto": true, "value": null}, "syslogRelay": {"model_type": "SyslogRelay", "enabled": false, "srvHostIp": null, "srvHostPort": 514, "severity": "NOTICE"}, "rtlsSettings": {"model_type": "RtlsSettings", "enabled": false, "srvHostIp": null, "srvHostPort": 0}, "syntheticClientEnabled": false, "ledControlEnabled": true, "equipmentDiscovery": false, "greTunnelName": null, "greParentIfName": null, "greLocalInetAddr": null, "greRemoteInetAddr": null, "greRemoteMacAddr": null, "radioMap": {"is5GHz": {"model_type": "RadioProfileConfiguration", "bestApEnabled": true, "bestAPSteerType": "both"}, "is2dot4GHz": {"model_type": "RadioProfileConfiguration", "bestApEnabled": true, "bestAPSteerType": "both"}, "is5GHzU": {"model_type": "RadioProfileConfiguration", "bestApEnabled": true, "bestAPSteerType": "both"}, "is5GHzL": {"model_type": "RadioProfileConfiguration", "bestApEnabled": true, "bestAPSteerType": "both"}}, "profileType": "equipment_ap"}, "createdTimestamp": 1598524693438, "lastModifiedTimestamp": 1607377963675, "childProfileIds": [967, 968, 969, 970, 971, 972, 10, 129]}
|
||||
1
unit_tests/templates/radius_profile_template.json
Normal file
1
unit_tests/templates/radius_profile_template.json
Normal file
@@ -0,0 +1 @@
|
||||
{"model_type": "Profile", "id": 718, "customerId": 8, "profileType": "radius", "name": "Lab-RADIUS", "details": {"model_type": "RadiusProfile", "subnetConfiguration": {"Lab": {"model_type": "RadiusSubnetConfiguration", "subnetAddress": "10.10.0.0", "subnetCidrPrefix": 16, "subnetName": "Lab", "proxyConfig": {"model_type": "RadiusProxyConfiguration", "floatingIpAddress": null, "floatingIfCidrPrefix": null, "floatingIfGwAddress": null, "floatingIfVlan": null, "sharedSecret": null}, "probeInterval": null, "serviceRegionName": "Toronto"}}, "serviceRegionMap": {"Toronto": {"model_type": "RadiusServiceRegion", "serverMap": {"Lab-RADIUS": [{"model_type": "RadiusServer", "ipAddress": "10.10.10.203", "secret": "testing123", "authPort": 1812, "timeout": null}]}, "regionName": "Toronto"}}, "profileType": "radius", "serviceRegionName": "Toronto"}, "createdTimestamp": 1610045826067, "lastModifiedTimestamp": 1610045826067, "childProfileIds": []}
|
||||
1
unit_tests/templates/ssid_profile_template.json
Normal file
1
unit_tests/templates/ssid_profile_template.json
Normal file
@@ -0,0 +1 @@
|
||||
{"model_type": "Profile", "id": 28, "customerId": 2, "profileType": "ssid", "name": "ea8300_2G_WPA_VLAN_2020-12-13", "details": {"model_type": "SsidConfiguration", "ssid": "EA8300_2dot4G_WPA_VLAN", "appliedRadios": ["is2dot4GHz"], "ssidAdminState": "enabled", "secureMode": "wpaPSK", "vlanId": 100, "keyStr": "Connectus123$", "broadcastSsid": "enabled", "keyRefresh": 0, "noLocalSubnets": false, "radiusServiceName": "Radius-Accounting-Profile", "radiusAccountingServiceName": null, "radiusAcountingServiceInterval": null, "captivePortalId": null, "bandwidthLimitDown": 0, "bandwidthLimitUp": 0, "clientBandwidthLimitDown": 0, "clientBandwidthLimitUp": 0, "videoTrafficOnly": false, "radioBasedConfigs": {"is2dot4GHz": {"model_type": "RadioBasedSsidConfiguration", "enable80211r": null, "enable80211k": null, "enable80211v": null}, "is5GHz": {"model_type": "RadioBasedSsidConfiguration", "enable80211r": null, "enable80211k": null, "enable80211v": null}, "is5GHzU": {"model_type": "RadioBasedSsidConfiguration", "enable80211r": null, "enable80211k": null, "enable80211v": null}, "is5GHzL": {"model_type": "RadioBasedSsidConfiguration", "enable80211r": null, "enable80211k": null, "enable80211v": null}}, "bonjourGatewayProfileId": null, "enable80211w": null, "wepConfig": null, "forwardMode": "BRIDGE", "profileType": "ssid"}, "createdTimestamp": 1598557809816, "lastModifiedTimestamp": 1598557809816, "childProfileIds": []}
|
||||
187
unit_tests/testrail_api.py
Normal file
187
unit_tests/testrail_api.py
Normal file
@@ -0,0 +1,187 @@
|
||||
"""TestRail API binding for Python 3.x.
|
||||
|
||||
"""
|
||||
|
||||
####################################################################
|
||||
# Custom version of testrail_api module
|
||||
#
|
||||
# Used by Nightly_Sanity ###########################################
|
||||
####################################################################
|
||||
|
||||
import base64
|
||||
import json
|
||||
|
||||
import requests
|
||||
from pprint import pprint
|
||||
import os
|
||||
tr_user=os.getenv('TR_USER')
|
||||
tr_pw=os.getenv('TR_PWD')
|
||||
project = os.getenv('PROJECT_ID')
|
||||
|
||||
|
||||
class APIClient:
|
||||
def __init__(self, base_url):
|
||||
self.user = tr_user
|
||||
self.password = tr_pw
|
||||
if not base_url.endswith('/'):
|
||||
base_url += '/'
|
||||
self.__url = 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
|
||||
|
||||
auth = str(
|
||||
base64.b64encode(
|
||||
bytes('%s:%s' % (self.user, self.password), 'utf-8')
|
||||
),
|
||||
'ascii'
|
||||
).strip()
|
||||
headers = {'Authorization': 'Basic ' + auth}
|
||||
#print("Method =" , method)
|
||||
|
||||
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)
|
||||
files['attachment'].close()
|
||||
else:
|
||||
headers['Content-Type'] = 'application/json'
|
||||
payload = bytes(json.dumps(data), 'utf-8')
|
||||
response = requests.post(url, headers=headers, data=payload)
|
||||
else:
|
||||
headers['Content-Type'] = 'application/json'
|
||||
response = requests.get(url, headers=headers)
|
||||
#print("headers = ", headers)
|
||||
#print("resonse=", response)
|
||||
#print("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)
|
||||
#raise APIError('TestRail API returned HTTP %s (%s)' % (response.status_code, error))
|
||||
print('TestRail API returned HTTP %s (%s)' % (response.status_code, error))
|
||||
return
|
||||
else:
|
||||
print(uri[:15])
|
||||
if uri[:15] == 'get_attachments': # Expecting file, not JSON
|
||||
try:
|
||||
print('opening file')
|
||||
print (str(response.content))
|
||||
open(data, 'wb').write(response.content)
|
||||
print('opened file')
|
||||
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"
|
||||
project_id = None
|
||||
projects = client.send_get('get_projects')
|
||||
##pprint(projects)
|
||||
for project in projects:
|
||||
if project['name']== project_name:
|
||||
project_id = project['id']
|
||||
# project_found_flag=True
|
||||
break
|
||||
print("project Id =",project_id)
|
||||
return project_id
|
||||
|
||||
def get_run_id(self, test_run_name):
|
||||
"Get the run ID using test name and project name"
|
||||
run_id = None
|
||||
project_id = client.get_project_id(project_name=project)
|
||||
|
||||
try:
|
||||
test_runs = client.send_get('get_runs/%s' % (project_id))
|
||||
#print("------------TEST RUNS----------")
|
||||
#pprint(test_runs)
|
||||
|
||||
except Exception:
|
||||
print
|
||||
'Exception in update_testrail() updating TestRail.'
|
||||
return None
|
||||
else:
|
||||
for test_run in test_runs:
|
||||
if test_run['name'] == test_run_name:
|
||||
run_id = test_run['id']
|
||||
#print("run Id in Test Runs=",run_id)
|
||||
break
|
||||
return run_id
|
||||
|
||||
|
||||
def update_testrail(self, case_id, run_id, status_id, msg):
|
||||
"Update TestRail for a given run_id and case_id"
|
||||
update_flag = False
|
||||
# Get the TestRail client account details
|
||||
# Update the result in TestRail using send_post function.
|
||||
# Parameters for add_result_for_case is the combination of runid and case id.
|
||||
# status_id is 1 for Passed, 2 For Blocked, 4 for Retest and 5 for Failed
|
||||
#status_id = 1 if result_flag is True else 5
|
||||
|
||||
print("result status Pass/Fail = ", status_id)
|
||||
print("case id=", case_id)
|
||||
print("run id passed to update is ", run_id, case_id)
|
||||
if run_id is not None:
|
||||
try:
|
||||
result = client.send_post(
|
||||
'add_result_for_case/%s/%s' % (run_id, case_id),
|
||||
{'status_id': status_id, 'comment': msg})
|
||||
print("result in post",result)
|
||||
except Exception:
|
||||
print
|
||||
'Exception in update_testrail() updating TestRail.'
|
||||
|
||||
else:
|
||||
print
|
||||
'Updated test result for case: %s in test run: %s with msg:%s' % (case_id, run_id, msg)
|
||||
|
||||
return update_flag
|
||||
|
||||
def create_testrun(self, name, case_ids, project_id, milestone_id, description):
|
||||
result = client.send_post(
|
||||
'add_run/%s' % (project_id),
|
||||
{'name': name, 'case_ids': case_ids, 'milestone_id': milestone_id, 'description': description, 'include_all': False})
|
||||
print("result in post", result)
|
||||
|
||||
client: APIClient = APIClient(os.getenv('TESTRAIL_URL'))
|
||||
|
||||
|
||||
class APIError(Exception):
|
||||
pass
|
||||
Reference in New Issue
Block a user