wiliot-certificate 4.5.0a4__py3-none-any.whl → 4.5.0a6__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- certificate/cert_common.py +30 -19
- certificate/cert_config.py +10 -7
- certificate/cert_defines.py +1 -0
- certificate/cert_gw_sim.py +23 -4
- certificate/cert_mqtt.py +8 -0
- certificate/cert_prints.py +1 -0
- certificate/certificate_cli.py +1 -1
- certificate/certificate_eth_test_list.txt +1 -1
- certificate/certificate_test_list.txt +1 -1
- certificate/tests/cloud_connectivity/channel_scan_behaviour_test/channel_scan_behaviour_test.py +1 -1
- certificate/tests/cloud_connectivity/connection_test/connection_test.py +2 -0
- certificate/tests/cloud_connectivity/deduplication_test/deduplication_test.py +5 -9
- certificate/tests/cloud_connectivity/ext_adv_stress_test/ext_adv_stress_test.py +2 -3
- certificate/tests/cloud_connectivity/reboot_test/reboot_test.py +2 -0
- certificate/tests/cloud_connectivity/stress_test/stress_test.py +2 -3
- certificate/tests/cloud_connectivity/uplink_test/uplink_test.py +4 -3
- certificate/tests/datapath/aging_test/aging_test.py +7 -3
- certificate/tests/datapath/num_of_tags_test/num_of_tags_test.json +1 -1
- certificate/tests/datapath/num_of_tags_test/num_of_tags_test.py +9 -5
- certificate/tests/datapath/stress_gen3_test/stress_gen3_test.py +3 -0
- certificate/tests/datapath/stress_test/stress_test.py +3 -0
- gui_certificate/server.py +7 -4
- {wiliot_certificate-4.5.0a4.dist-info → wiliot_certificate-4.5.0a6.dist-info}/METADATA +4 -14
- {wiliot_certificate-4.5.0a4.dist-info → wiliot_certificate-4.5.0a6.dist-info}/RECORD +28 -28
- {wiliot_certificate-4.5.0a4.dist-info → wiliot_certificate-4.5.0a6.dist-info}/WHEEL +0 -0
- {wiliot_certificate-4.5.0a4.dist-info → wiliot_certificate-4.5.0a6.dist-info}/entry_points.txt +0 -0
- {wiliot_certificate-4.5.0a4.dist-info → wiliot_certificate-4.5.0a6.dist-info}/licenses/LICENSE +0 -0
- {wiliot_certificate-4.5.0a4.dist-info → wiliot_certificate-4.5.0a6.dist-info}/top_level.txt +0 -0
certificate/cert_common.py
CHANGED
|
@@ -479,8 +479,8 @@ def pacing_analysis(test, pacer_interval, df, pkt_filter_cfg=ag.PKT_FILTER_RANDO
|
|
|
479
479
|
# In non-sterile runs - rssi is less stable and can trigger more events
|
|
480
480
|
max_count_threshold = float('inf')
|
|
481
481
|
else:
|
|
482
|
-
# In rssi movement events the alpha filter takes about
|
|
483
|
-
max_count_threshold = 1 + (
|
|
482
|
+
# In rssi movement events the alpha filter takes about 13 packets to stabilize
|
|
483
|
+
max_count_threshold = 1 + (RSSI_EVENT_PKTS_TO_STABILIZE / expected_event_pkt_count)
|
|
484
484
|
else:
|
|
485
485
|
max_count_threshold = PACER_INTERVAL_CEIL_THRESHOLD
|
|
486
486
|
|
|
@@ -490,12 +490,14 @@ def pacing_analysis(test, pacer_interval, df, pkt_filter_cfg=ag.PKT_FILTER_RANDO
|
|
|
490
490
|
|
|
491
491
|
if not (PACER_INTERVAL_THRESHOLD <= len(event_pkts) / expected_event_pkt_count <= max_count_threshold):
|
|
492
492
|
test.rc = TEST_FAILED
|
|
493
|
-
|
|
494
|
-
|
|
493
|
+
msg = f"Packet count for dynamic tag {tag} is wrong! expected_event_pkt_count = {expected_event_pkt_count}, received pkt count = {len(event_pkts)}"
|
|
494
|
+
test.add_reason(msg)
|
|
495
|
+
utPrint(msg, "RED")
|
|
495
496
|
if not (PACER_INTERVAL_THRESHOLD <= avg_event_pacer / event_pacing <= PACER_INTERVAL_CEIL_THRESHOLD):
|
|
496
497
|
test.rc = TEST_FAILED
|
|
497
|
-
|
|
498
|
-
test.add_reason(
|
|
498
|
+
msg = f"Tag {tag} has a wrong avg time diff. diff_time {list(event_pkts.timestamp.diff().div(1000))}, avg_event_pacer={avg_event_pacer} exceeds threshold!"
|
|
499
|
+
test.add_reason(msg)
|
|
500
|
+
utPrint(msg, "RED")
|
|
499
501
|
|
|
500
502
|
# Verify the tags pacer interval (without event)
|
|
501
503
|
failed_tags = 0
|
|
@@ -510,8 +512,9 @@ def pacing_analysis(test, pacer_interval, df, pkt_filter_cfg=ag.PKT_FILTER_RANDO
|
|
|
510
512
|
if ((avg_pacer / pacer_interval) < PACER_INTERVAL_THRESHOLD_HIGH and (pacer_interval - avg_pacer) > 1):
|
|
511
513
|
failed_tags += 1
|
|
512
514
|
test.rc = TEST_FAILED
|
|
513
|
-
|
|
514
|
-
|
|
515
|
+
msg = f"Tag {tag} with diff_time {list(pkts.timestamp.diff().div(1000))}, avg_pacer={avg_pacer} exceeds {PACER_INTERVAL_THRESHOLD_HIGH} minimum threshold!"
|
|
516
|
+
utPrint(msg, "RED")
|
|
517
|
+
test.add_reason(msg)
|
|
515
518
|
# Pass the test with real tags when less than 5% tag failed
|
|
516
519
|
if test.data != DATA_SIMULATION and failed_tags / tags_count < 0.05:
|
|
517
520
|
test.rc = TEST_PASSED
|
|
@@ -520,7 +523,9 @@ def pacing_analysis(test, pacer_interval, df, pkt_filter_cfg=ag.PKT_FILTER_RANDO
|
|
|
520
523
|
if max_received_pkts == len(pkts):
|
|
521
524
|
# we fail the tag only if it received all expected pkts and pacer caluculation is valid
|
|
522
525
|
failed_tags += 1
|
|
523
|
-
|
|
526
|
+
msg = f"Tag {tag} with diff_time {list(pkts.timestamp.diff().div(1000))}, avg_pacer={avg_pacer} exceeds {PACER_INTERVAL_CEIL_THRESHOLD} maximum threshold!"
|
|
527
|
+
utPrint(msg, "RED")
|
|
528
|
+
test.add_reason(msg)
|
|
524
529
|
else:
|
|
525
530
|
print(f"Tag {tag} received only {len(pkts)} pkts out of {max_received_pkts}, avg_pacer failed but skipping pacer ceil validation")
|
|
526
531
|
if failed_tags / tags_count > 0.2: # Fail the test on ceil threshold only when more than 20% tag failed
|
|
@@ -600,6 +605,7 @@ def run_event_test_phase(test, phase, datapath_module, values, scan_time, event_
|
|
|
600
605
|
scan_time_multiplier = 1
|
|
601
606
|
delay = DATA_SIM_EVENT_TESTING_DELAY_MS
|
|
602
607
|
if "rssi" in phase:
|
|
608
|
+
test.sterile_run = is_quiet_setup_running()
|
|
603
609
|
delay = DATA_SIM_RSSI_EVENT_TESTING_DELAY_MS
|
|
604
610
|
scan_time_multiplier = (1 / 3)
|
|
605
611
|
fields += [BRG_RSSI_MOVEMENT_THRESHOLD]
|
|
@@ -1057,6 +1063,15 @@ def get_module_if_pkt(test):
|
|
|
1057
1063
|
print(pkts[-1][MGMT_PKT].pkt)
|
|
1058
1064
|
return test, pkts[-1][MGMT_PKT].pkt
|
|
1059
1065
|
|
|
1066
|
+
def get_gw_api_version(mqttc):
|
|
1067
|
+
messages = cert_mqtt.get_all_status_pkts(mqttc)
|
|
1068
|
+
for msg in messages:
|
|
1069
|
+
if GW_CONF in msg: # JSON
|
|
1070
|
+
return msg[GW_CONF][GW_API_VERSION]
|
|
1071
|
+
if GW_STATUS in msg: # protobuf
|
|
1072
|
+
return msg[GW_STATUS][GW_API_VERSION]
|
|
1073
|
+
return None
|
|
1074
|
+
|
|
1060
1075
|
def get_cfg_hash(test):
|
|
1061
1076
|
utPrint(f"Fetching BRG cfg hash for BRG {test.active_brg.id_str}", "BLUE")
|
|
1062
1077
|
test, module_if_pkt = get_module_if_pkt(test)
|
|
@@ -1374,7 +1389,7 @@ def timestamps_validation(wiliot_pkts_validation_phase, all_messages_in_test, up
|
|
|
1374
1389
|
return wiliot_pkts_validation_phase
|
|
1375
1390
|
previous_ts = inner_pkt[TIMESTAMP]
|
|
1376
1391
|
else:
|
|
1377
|
-
if inner_pkt[TIMESTAMP]
|
|
1392
|
+
if inner_pkt[TIMESTAMP] < previous_ts:
|
|
1378
1393
|
wiliot_pkts_validation_phase.rc = TEST_FAILED
|
|
1379
1394
|
wiliot_pkts_validation_phase.reason = f'Timestamp is not incremental for inner packet {inner_pkt[PAYLOAD]}'
|
|
1380
1395
|
return wiliot_pkts_validation_phase
|
|
@@ -1433,11 +1448,8 @@ def generate_graph_stress_test(test, results, test_pkts_received):
|
|
|
1433
1448
|
|
|
1434
1449
|
|
|
1435
1450
|
def stress_analysis(test, pps, sent_pkts, received_pkts):
|
|
1436
|
-
|
|
1437
|
-
for
|
|
1438
|
-
adva_endianness_change = change_endianness(pkt[:12]) + pkt[12:] # Switch to big endian adva
|
|
1439
|
-
_sent_pkts.append(adva_endianness_change)
|
|
1440
|
-
|
|
1451
|
+
|
|
1452
|
+
_sent_pkts = [p[12:] for p in sent_pkts]
|
|
1441
1453
|
sent_df = pd.DataFrame(_sent_pkts, columns=[PACKETS])
|
|
1442
1454
|
received_df = pd.DataFrame(received_pkts, columns=[PACKETS])
|
|
1443
1455
|
|
|
@@ -1446,16 +1458,15 @@ def stress_analysis(test, pps, sent_pkts, received_pkts):
|
|
|
1446
1458
|
pkts_sent_count = len(sent_df)
|
|
1447
1459
|
pkts_received_count = len(merged_df)
|
|
1448
1460
|
|
|
1449
|
-
# Prints
|
|
1450
|
-
print(f'Number of packets sent: {pkts_sent_count}')
|
|
1451
|
-
print(f'Number of packets received: {pkts_received_count}')
|
|
1461
|
+
# Prints and calculations
|
|
1452
1462
|
percentage_received = round(pkts_received_count * 100 / pkts_sent_count)
|
|
1463
|
+
utPrint(f'Sent: {pkts_sent_count}, Received: {pkts_received_count} ({percentage_received}%)', "BLUE")
|
|
1453
1464
|
received_pps = pps * percentage_received / 100
|
|
1454
1465
|
|
|
1455
1466
|
# PASS/FAIL logic
|
|
1456
1467
|
if percentage_received < 1: # If less than 1% of the packets were received, fail the test
|
|
1457
1468
|
test.set_phase_rc(str(pps), TEST_FAILED)
|
|
1458
|
-
test.add_phase_reason(str(pps), "
|
|
1469
|
+
test.add_phase_reason(str(pps), f"{percentage_received}% of the packets were scanned & uploaded by the gateway")
|
|
1459
1470
|
else:
|
|
1460
1471
|
test.set_phase_rc(str(pps), TEST_PASSED)
|
|
1461
1472
|
test.add_phase_reason(str(pps), f"received pps: {received_pps} ({percentage_received}% of packets)")
|
certificate/cert_config.py
CHANGED
|
@@ -40,7 +40,7 @@ def gw_configure(test, cfg={}, version="", extended_cfg={}, ret_pkt=False, wait=
|
|
|
40
40
|
while (datetime.datetime.now() - start_time).seconds < DEFAULT_GW_FIELD_UPDATE_TIMEOUT:
|
|
41
41
|
for p in cert_mqtt.get_all_status_pkts(mqttc):
|
|
42
42
|
if GW_CONF in p or GW_STATUS in p:
|
|
43
|
-
test.gw_api_version = p
|
|
43
|
+
test.gw_api_version = (p.get(GW_CONF, {}).get(GW_API_VERSION) or p.get(GW_STATUS, {}).get(GW_API_VERSION))
|
|
44
44
|
if target == DUT and is_gw(test.dut):
|
|
45
45
|
test.dut.gw_api_version = test.gw_api_version
|
|
46
46
|
print_pkt(p)
|
|
@@ -79,15 +79,18 @@ def gw_fw_upgrade(test, version, board_type, target=DUT):
|
|
|
79
79
|
def create_gw_config(test, cfg, target=DUT, version=""):
|
|
80
80
|
gw = test.dut if is_gw(test.dut) and target == DUT else test.tester
|
|
81
81
|
if version:
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
conf = {LAT: GW_LATITUDE_DEFAULT, LNG: GW_LONGITUDE_DEFAULT, WIFI_VERSION: version[WIFI_VERSION],
|
|
83
|
+
BLE_VERSION: version[BLE_VERSION], ADDITIONAL: dict(cfg)}
|
|
84
84
|
elif gw.gw_orig_versions:
|
|
85
|
-
|
|
86
|
-
|
|
85
|
+
conf = {LAT: GW_LATITUDE_DEFAULT, LNG: GW_LONGITUDE_DEFAULT, WIFI_VERSION: gw.gw_orig_versions[WIFI_VERSION],
|
|
86
|
+
BLE_VERSION: gw.gw_orig_versions[BLE_VERSION], ADDITIONAL: dict(cfg)}
|
|
87
87
|
# Protection for FDM gw config
|
|
88
88
|
else:
|
|
89
|
-
|
|
90
|
-
|
|
89
|
+
conf = {LAT: GW_LATITUDE_DEFAULT, LNG: GW_LONGITUDE_DEFAULT, ADDITIONAL: dict(cfg)}
|
|
90
|
+
# If api version was not sent in gw info then the gw_api_version is None, we don't want to set it in the config
|
|
91
|
+
if gw.gw_api_version is not None:
|
|
92
|
+
conf[GW_API_VERSION] = gw.gw_api_version
|
|
93
|
+
return dict({GW_CONF: conf})
|
|
91
94
|
|
|
92
95
|
def gw_downlink(test, raw_tx_data="", is_ota=False, version="", max_duration=100, max_retries=8, target=DUT):
|
|
93
96
|
mqttc = test.get_mqttc_by_target(target)
|
certificate/cert_defines.py
CHANGED
|
@@ -307,6 +307,7 @@ BLE5_MAX_DURATION_SEC = BLE5_MAX_DURATION_MS // 1000
|
|
|
307
307
|
DATA_SIM_EVENT_TESTING_DELAY_SEC = DATA_SIM_EVENT_TESTING_DELAY_MS / 1000
|
|
308
308
|
DATA_SIM_RSSI_EVENT_TESTING_DELAY_SEC = DATA_SIM_RSSI_EVENT_TESTING_DELAY_MS / 1000
|
|
309
309
|
DATA_SIM_EVENT_PACER_INTERVAL_TESTING = 10
|
|
310
|
+
RSSI_EVENT_PKTS_TO_STABILIZE = 13 # The alpha filter takes about 13 packets to stabilize
|
|
310
311
|
PACKETS_ECHO_OFF = 16
|
|
311
312
|
TEST_PASSED = 0
|
|
312
313
|
TEST_FAILED = -1
|
certificate/cert_gw_sim.py
CHANGED
|
@@ -198,7 +198,7 @@ def gw_app_reponse(ble_serial):
|
|
|
198
198
|
start_time = datetime.datetime.now()
|
|
199
199
|
while (datetime.datetime.now() - start_time).seconds < 2:
|
|
200
200
|
input = read_from_ble(ble_serial)
|
|
201
|
-
if GW_APP_VERSION_HEADER in input:
|
|
201
|
+
if input is not None and GW_APP_VERSION_HEADER in input:
|
|
202
202
|
print(input)
|
|
203
203
|
ble_chip_sw_ver = re.search(r'WILIOT_GW_BLE_CHIP_SW_VER=(\d+\.\d+\.\d+)', input).group(1)
|
|
204
204
|
ble_mac_address = re.search(r'WILIOT_GW_BLE_CHIP_MAC_ADDRESS=([0-9A-F]{12})', input).group(1)
|
|
@@ -333,6 +333,22 @@ def handle_cmds(input, ble_serial):
|
|
|
333
333
|
utPrint(f"COM tester recovered", "CYAN")
|
|
334
334
|
write_to_ble(ble_serial, f"{CONNECTIVITY_STATUS} 1 1")
|
|
335
335
|
|
|
336
|
+
def validate_port(port):
|
|
337
|
+
try:
|
|
338
|
+
with serial.serial_for_url(url=port, baudrate=921600, timeout=SERIAL_TIMEOUT) as ser:
|
|
339
|
+
ser.flushInput()
|
|
340
|
+
write_to_ble(ser, txt=VERSION, print_enable=True)
|
|
341
|
+
start_time = datetime.datetime.now()
|
|
342
|
+
while (datetime.datetime.now() - start_time).seconds < 2:
|
|
343
|
+
input = read_from_ble(ser)
|
|
344
|
+
if input is not None and GW_APP_VERSION_HEADER in input:
|
|
345
|
+
return True
|
|
346
|
+
return False
|
|
347
|
+
except Exception as e:
|
|
348
|
+
utPrint(f"Failed to open serial: {e}", "RED")
|
|
349
|
+
return False
|
|
350
|
+
|
|
351
|
+
|
|
336
352
|
def gw_sim_run(port, gw_id, custom_broker, disable_interference_analyzer=False):
|
|
337
353
|
|
|
338
354
|
# Init serial side
|
|
@@ -340,8 +356,11 @@ def gw_sim_run(port, gw_id, custom_broker, disable_interference_analyzer=False):
|
|
|
340
356
|
print("\nNo COM port given. Scanning for available ports:")
|
|
341
357
|
for port, desc, hwid in sorted(serial.tools.list_ports.comports()):
|
|
342
358
|
print("{}: {} [{}]".format(port, desc, hwid))
|
|
359
|
+
if validate_port(port):
|
|
360
|
+
utPrint(f"Found the tester's port ({port})", "GREEN")
|
|
361
|
+
break
|
|
343
362
|
if not port:
|
|
344
|
-
print("\nNo available COM port found!")
|
|
363
|
+
print("\nNo available COM port found! Please verify a tester is connected and set the correct --port parameter.")
|
|
345
364
|
sys.exit(-1)
|
|
346
365
|
print(f"###>>> GW SIM STARTED WITH PORT {port}")
|
|
347
366
|
ble_serial = serial.serial_for_url(url=port, baudrate=921600, timeout=SERIAL_TIMEOUT)
|
|
@@ -370,8 +389,8 @@ def gw_sim_run(port, gw_id, custom_broker, disable_interference_analyzer=False):
|
|
|
370
389
|
write_to_ble(ble_serial, RESET_GW, sleep=5)
|
|
371
390
|
gw_app_res = gw_app_reponse(ble_serial)
|
|
372
391
|
if gw_app_res[0] == TEST_FAILED:
|
|
373
|
-
|
|
374
|
-
|
|
392
|
+
utPrint("ERROR: didn't get version response! Please verify a tester is connected and set the correct --port parameter.", "RED")
|
|
393
|
+
sys.exit(1)
|
|
375
394
|
os.environ[GW_SIM_BLE_MAC_ADDRESS] = gw_app_res[1]
|
|
376
395
|
os.environ[GW_APP_VERSION_HEADER] = gw_app_res[2]
|
|
377
396
|
write_to_ble(ble_serial, STOP_ADVERTISING, sleep=2)
|
certificate/cert_mqtt.py
CHANGED
|
@@ -299,6 +299,14 @@ def mqttc_init(gw_id, custom_broker, data=DATA_REAL_TAGS):
|
|
|
299
299
|
mqttc.subscribe(mqttc.status_topic)
|
|
300
300
|
print(f"Subscribed to status topic: {mqttc.status_topic}")
|
|
301
301
|
|
|
302
|
+
# v2 protobuf topics
|
|
303
|
+
mqttc.data_topic_pb = re.sub(r'^([^/]+)', r'\1-v2', custom_broker[CUSTOM_BROKER_DATA_TOPIC])
|
|
304
|
+
mqttc.subscribe(mqttc.data_topic_pb)
|
|
305
|
+
print(f"Subscribed to data topic: {mqttc.data_topic_pb}")
|
|
306
|
+
mqttc.status_topic_pb = re.sub(r'^([^/]+)', r'\1-v2', custom_broker[CUSTOM_BROKER_STATUS_TOPIC])
|
|
307
|
+
mqttc.subscribe(mqttc.status_topic_pb)
|
|
308
|
+
print(f"Subscribed to status topic: {mqttc.status_topic_pb}")
|
|
309
|
+
|
|
302
310
|
mqttc.flush_pkts = mqttc._userdata[PKTS].flush
|
|
303
311
|
mqttc.flush_data_pkts = mqttc._userdata[PKTS].flush_data
|
|
304
312
|
mqttc.flush_status_pkts = mqttc._userdata[PKTS].flush_status
|
certificate/cert_prints.py
CHANGED
|
@@ -18,6 +18,7 @@ COLORS = {
|
|
|
18
18
|
}
|
|
19
19
|
color = lambda c, t : COLORS["BOLD"]+COLORS[c]+t+COLORS["ENDC"]
|
|
20
20
|
pipeline_running = lambda : True if 'BITBUCKET_BUILD_NUMBER' in os.environ else False
|
|
21
|
+
is_quiet_setup_running = lambda : True if 'CI_GW' in os.environ else False
|
|
21
22
|
camelcase_to_title = lambda s: ' '.join(word.capitalize() for word in re.split('(?=[A-Z])', s))
|
|
22
23
|
SEP = '\n' + '#'*100 + '\n'
|
|
23
24
|
SEP2 = '\n' + '#'*100 + '\n' + '#'*100 + '\n'
|
certificate/certificate_cli.py
CHANGED
|
@@ -40,7 +40,7 @@ class CertificateCLI:
|
|
|
40
40
|
self.parser.add_argument('--dut', required=True, help="Tested device ID. When DUT is a combo device, use <Gateway_ID>:<BLE_MAC>")
|
|
41
41
|
self.parser.add_argument('--combo_ble_addr', default="", help="Combo device BLE MAC address" + argparse.SUPPRESS)
|
|
42
42
|
self.parser.add_argument('--tester', default=GW_SIM_PREFIX, help='Tester id to run on the test, SIM prefix is default and used for COM tester')
|
|
43
|
-
self.parser.add_argument('--port', '-p', default='', help='UART PORT connection to use for the run, if not provided
|
|
43
|
+
self.parser.add_argument('--port', '-p', default='', help='UART PORT connection to use for the run, if not provided tries to scan for tester port')
|
|
44
44
|
self.parser.add_argument('--custom_broker', '-cb', required=True, help='Choose custom MQTT broker configuration json file to use for the run,' \
|
|
45
45
|
' for explanation of the format see https://community.wiliot.com/customers/s/article/Wiliot-Gateway-Certification')
|
|
46
46
|
self.parser.add_argument('--clean', default=False, action='store_true', help='Clean old logs before running the tests')
|
|
@@ -49,7 +49,7 @@ datapath/rx_rate_gen2_test mid_values diff_pacer min_value max_value diff_rate
|
|
|
49
49
|
datapath/rx_rate_gen3_test mid_values diff_pacer min_value max_value diff_rate
|
|
50
50
|
datapath/stress_test rep3 rep2 rep1
|
|
51
51
|
datapath/stress_gen3_test rep3 rep2 rep1
|
|
52
|
-
datapath/num_of_tags_test
|
|
52
|
+
datapath/num_of_tags_test 2500
|
|
53
53
|
|
|
54
54
|
# ------------- pwr_mgmt -------------
|
|
55
55
|
pwr_mgmt/pwr_mgmt_test
|
|
@@ -49,7 +49,7 @@ datapath/rx_rate_gen2_test mid_values diff_pacer min_value max_value diff_rate
|
|
|
49
49
|
datapath/rx_rate_gen3_test mid_values diff_pacer min_value max_value diff_rate
|
|
50
50
|
datapath/stress_test rep3 rep2 rep1
|
|
51
51
|
datapath/stress_gen3_test rep3 rep2 rep1
|
|
52
|
-
datapath/num_of_tags_test
|
|
52
|
+
datapath/num_of_tags_test 4500
|
|
53
53
|
|
|
54
54
|
# ------------- pwr_mgmt -------------
|
|
55
55
|
pwr_mgmt/pwr_mgmt_test
|
certificate/tests/cloud_connectivity/channel_scan_behaviour_test/channel_scan_behaviour_test.py
CHANGED
|
@@ -188,7 +188,7 @@ def run(test):
|
|
|
188
188
|
payload = cert_common.generate_adv_payload(SCAN_TEST_INDICATOR, unique_pkt=True)
|
|
189
189
|
|
|
190
190
|
# Transmitting packets on all channels
|
|
191
|
-
utPrint(f"Transmitting in parallel on all 3 main
|
|
191
|
+
utPrint(f"Transmitting in parallel on all 3 main channels for {ADV_DURATION} seconds", "WARNING")
|
|
192
192
|
num_of_sent_pkts = ADV_DURATION * PPS
|
|
193
193
|
strat_trans_time_ms = time.time() * 1000
|
|
194
194
|
|
|
@@ -41,9 +41,11 @@ def run(test):
|
|
|
41
41
|
timeout = datetime.datetime.now() + datetime.timedelta(minutes=TIMEOUT_IN_MINUTES)
|
|
42
42
|
while datetime.datetime.now() < timeout:
|
|
43
43
|
gw_type, msg = cert_common.get_gw_type(dut_mqttc)
|
|
44
|
+
gw_api_version = cert_common.get_gw_api_version(dut_mqttc)
|
|
44
45
|
if gw_type is not None:
|
|
45
46
|
break
|
|
46
47
|
print_update_wait(5)
|
|
48
|
+
test.dut.gw_api_version = gw_api_version
|
|
47
49
|
|
|
48
50
|
# generate logs
|
|
49
51
|
cert_mqtt.generate_log_file(test, "connection")
|
|
@@ -14,19 +14,15 @@ NUM_OF_BRGS = 3
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
# HELPER FUNCTIONS
|
|
17
|
-
def duplication_analysis(test,
|
|
17
|
+
def duplication_analysis(test, sent_pkts, received_pkts):
|
|
18
18
|
if len(received_pkts) == 0:
|
|
19
19
|
test.rc = TEST_FAILED
|
|
20
20
|
test.reason = "No packets were received!"
|
|
21
21
|
return test
|
|
22
22
|
|
|
23
|
-
_sent_pkts = []
|
|
24
|
-
for pkt in pkts:
|
|
25
|
-
pkt_str = pkt.get_pkt()
|
|
26
|
-
adva_endianness_change = cert_common.change_endianness(pkt_str[:12]) + pkt_str[12:] # Switch to big endian adva
|
|
27
|
-
_sent_pkts.append(adva_endianness_change)
|
|
28
|
-
|
|
23
|
+
_sent_pkts = [p.get_pkt()[12:] for p in sent_pkts]
|
|
29
24
|
sent_df = pd.DataFrame(_sent_pkts, columns=[PACKETS])
|
|
25
|
+
received_pkts = [p[PAYLOAD] for p in received_pkts]
|
|
30
26
|
received_df = pd.DataFrame(received_pkts, columns=[PACKETS])
|
|
31
27
|
|
|
32
28
|
merged_df = pd.merge(sent_df, received_df, on=PACKETS, how='inner')
|
|
@@ -74,11 +70,11 @@ def run(test):
|
|
|
74
70
|
pixel_sim_thread = cert_data_sim.GenericSimThread(test=test, pkts=pkts, send_single_cycle=True)
|
|
75
71
|
pixel_sim_thread.start()
|
|
76
72
|
|
|
77
|
-
mqtt_scan_wait(test,
|
|
73
|
+
mqtt_scan_wait(test, 12 + test.dut.upload_wait_time)
|
|
78
74
|
cert_mqtt.dump_pkts(test, log="deduplication_test")
|
|
79
75
|
recieved_pkts = cert_mqtt.get_all_data_pkts(dut_mqttc, indicator=UPLINK_TEST_INDICATOR)
|
|
80
76
|
pixel_sim_thread.stop()
|
|
81
77
|
|
|
82
|
-
test = duplication_analysis(test, pkts,
|
|
78
|
+
test = duplication_analysis(test, pkts, recieved_pkts)
|
|
83
79
|
|
|
84
80
|
return cert_common.test_epilog(test)
|
|
@@ -83,9 +83,8 @@ def run(test):
|
|
|
83
83
|
test.add_phase_reason(str(pps), reason)
|
|
84
84
|
utPrint(f"Phase {pps} failed validation: {reason}", "RED")
|
|
85
85
|
continue
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
[(p[ALIAS_BRIDGE_ID] + p[AGGREGATED_PAYLOAD]) for p in phase_pkts_received])
|
|
86
|
+
phase_pkts_received = [p[AGGREGATED_PAYLOAD] for p in phase_pkts_received]
|
|
87
|
+
test, received_pps = cert_common.stress_analysis(test, pps, generated_payloads, phase_pkts_received)
|
|
89
88
|
results.extend([pps, received_pps])
|
|
90
89
|
cert_mqtt.generate_log_file(test, str(pps))
|
|
91
90
|
|
|
@@ -33,9 +33,11 @@ def run(test):
|
|
|
33
33
|
timeout = datetime.datetime.now() + datetime.timedelta(minutes=TIMEOUT_IN_MINUTES)
|
|
34
34
|
while datetime.datetime.now() < timeout:
|
|
35
35
|
gw_type, msg = cert_common.get_gw_type(dut_mqttc)
|
|
36
|
+
gw_api_version = cert_common.get_gw_api_version(dut_mqttc)
|
|
36
37
|
if gw_type is not None:
|
|
37
38
|
break
|
|
38
39
|
print_update_wait(5)
|
|
40
|
+
test.dut.gw_api_version = gw_api_version
|
|
39
41
|
|
|
40
42
|
# generate logs
|
|
41
43
|
cert_mqtt.generate_log_file(test, "reboot")
|
|
@@ -81,9 +81,8 @@ def run(test):
|
|
|
81
81
|
test.add_phase_reason(str(pps), reason)
|
|
82
82
|
utPrint(f"Phase {pps} failed validation: {reason}", "RED")
|
|
83
83
|
continue
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
[(p[ALIAS_BRIDGE_ID] + p[PAYLOAD]) for p in phase_pkts_received])
|
|
84
|
+
phase_pkts_received = [p[PAYLOAD] for p in phase_pkts_received]
|
|
85
|
+
test, received_pps = cert_common.stress_analysis(test, pps, generated_payloads, phase_pkts_received)
|
|
87
86
|
results.extend([pps, received_pps])
|
|
88
87
|
cert_mqtt.generate_log_file(test, str(pps))
|
|
89
88
|
|
|
@@ -24,10 +24,11 @@ def uplink_analysis(test, sent_pkts, received_pkts, pkt_type):
|
|
|
24
24
|
return test
|
|
25
25
|
|
|
26
26
|
# Verify packets were received from NUM_OF_BRGS bridges
|
|
27
|
-
received_brgs =
|
|
28
|
-
if received_brgs != NUM_OF_BRGS:
|
|
27
|
+
received_brgs = set([p[ALIAS_BRIDGE_ID] for p in received_pkts])
|
|
28
|
+
if len(received_brgs) != NUM_OF_BRGS:
|
|
29
29
|
test.set_phase_rc(pkt_type, TEST_FAILED)
|
|
30
|
-
test.add_phase_reason(pkt_type, f"Received packets from {received_brgs} bridges instead of {NUM_OF_BRGS} bridges!")
|
|
30
|
+
test.add_phase_reason(pkt_type, f"Received packets from {len(received_brgs)} bridges instead of {NUM_OF_BRGS} bridges!")
|
|
31
|
+
utPrint(f"Received packets from {received_brgs} bridges instead of {NUM_OF_BRGS} bridges!", "RED")
|
|
31
32
|
return test
|
|
32
33
|
|
|
33
34
|
_sent_pkts = [p.get_pkt()[12:] for p in sent_pkts]
|
|
@@ -105,11 +105,15 @@ def aging_analysis(test, datapath_module, pacer_interval, num_of_sim_tags):
|
|
|
105
105
|
if test.rc == TEST_FAILED:
|
|
106
106
|
return test
|
|
107
107
|
utPrint(f"\nEnd of aging time pixels count: {second_floor_tags_ctr}\n", "BLUE")
|
|
108
|
-
if
|
|
109
|
-
(not test.sterile_run and second_floor_tags_ctr > TAGS_CTR_OVER_THRESHOLD * first_floor_tags_ctr)):
|
|
108
|
+
if test.sterile_run and second_floor_tags_ctr != 0:
|
|
110
109
|
test.rc = TEST_FAILED
|
|
111
110
|
test.add_reason("Pixel count is higher than expected. Looks like aging time is too long.\n"
|
|
112
|
-
f"
|
|
111
|
+
f"Number of pixels after aging time: {second_floor_tags_ctr}")
|
|
112
|
+
elif not test.sterile_run and (second_floor_tags_ctr > TAGS_CTR_OVER_THRESHOLD * first_floor_tags_ctr):
|
|
113
|
+
test.rc = TEST_FAILED
|
|
114
|
+
test.add_reason("Pixel count is higher than expected. Looks like aging time is too long.\n"
|
|
115
|
+
f"Number of pixels after aging time: {second_floor_tags_ctr},"
|
|
116
|
+
f" before tags simulation was: {second_peak_tags_ctr}\n")
|
|
113
117
|
return test
|
|
114
118
|
|
|
115
119
|
|
|
@@ -51,9 +51,11 @@ def run(test):
|
|
|
51
51
|
cert_config.send_brg_action(test, ag.ACTION_SEND_HB)
|
|
52
52
|
test, mgmt_pkts = cert_common.scan_for_mgmt_pkts(test, [eval_pkt(f'Brg2GwHbV{test.active_brg.api_version}')])
|
|
53
53
|
if not mgmt_pkts:
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
54
|
+
reason = "Didn't find ACTION HB pkt"
|
|
55
|
+
utPrint(reason, "RED")
|
|
56
|
+
test.set_phase_rc(param.name, TEST_FAILED)
|
|
57
|
+
test.add_phase_reason(param.name, "Didn't find ACTION HB pkt")
|
|
58
|
+
continue
|
|
57
59
|
|
|
58
60
|
num_of_tags_HB = mgmt_pkts[0][MGMT_PKT].pkt.tags_ctr
|
|
59
61
|
print(f"Tags from HB: {num_of_tags_HB}\n ")
|
|
@@ -62,11 +64,13 @@ def run(test):
|
|
|
62
64
|
|
|
63
65
|
# compare the numbers of tags that come from the brg, success in 95% from number of tags (value) or more.
|
|
64
66
|
if num_of_tags < (param.value * 0.95):
|
|
65
|
-
test.add_reason(f"Received {num_of_tags} pixels, expected: {param.name} pixels!")
|
|
67
|
+
test.add_reason(f"Received {num_of_tags} different pixels, expected: {param.name} pixels!")
|
|
68
|
+
test.rc = TEST_FAILED
|
|
66
69
|
|
|
67
70
|
# compare the counter tags in the HB packet
|
|
68
71
|
if num_of_tags_HB < 0.95 * param.value or num_of_tags_HB > (param.value + 100):
|
|
69
|
-
test.add_reason(f"HB counter: {num_of_tags_HB}, expected: {param.name}!")
|
|
72
|
+
test.add_reason(f"HB counter num_of_tags: {num_of_tags_HB}, expected: {param.name}!")
|
|
73
|
+
test.rc = TEST_FAILED
|
|
70
74
|
# param epilog
|
|
71
75
|
time.sleep(10)
|
|
72
76
|
cert_mqtt.generate_log_file(test, param.name)
|
|
@@ -206,4 +206,7 @@ def run(test):
|
|
|
206
206
|
# Re-enable unified packets deduplication
|
|
207
207
|
cert_config.gw_action(test, f"{DEDUPLICATION_PKTS} 1")
|
|
208
208
|
|
|
209
|
+
# wait a few seconds to ensure bridge relaxed before next test
|
|
210
|
+
wait_time_n_print(60)
|
|
211
|
+
|
|
209
212
|
return cert_common.test_epilog(test, revert_brgs=True, modules=[datapath_module])
|
|
@@ -205,4 +205,7 @@ def run(test):
|
|
|
205
205
|
# Re-enable unified packets deduplication
|
|
206
206
|
cert_config.gw_action(test, f"{DEDUPLICATION_PKTS} 1")
|
|
207
207
|
|
|
208
|
+
# wait a few seconds to ensure bridge relaxed before next test
|
|
209
|
+
wait_time_n_print(60)
|
|
210
|
+
|
|
208
211
|
return cert_common.test_epilog(test, revert_brgs=True, modules=[datapath_module])
|
gui_certificate/server.py
CHANGED
|
@@ -42,9 +42,7 @@ DEFAULT_CUSTOM_BROKER = {
|
|
|
42
42
|
"brokerUrl": "mqtts://broker.hivemq.com",
|
|
43
43
|
"username": "",
|
|
44
44
|
"password": "",
|
|
45
|
-
"
|
|
46
|
-
"statusTopic": "status/wiliot/<gatewayId>",
|
|
47
|
-
"dataTopic": "data/wiliot/<gatewayId>"
|
|
45
|
+
"ownerId": ""
|
|
48
46
|
}
|
|
49
47
|
|
|
50
48
|
app = Flask(__name__)
|
|
@@ -496,12 +494,17 @@ def _write_custom_broker_config(form_data, cert_schema_title="cert_run") -> str:
|
|
|
496
494
|
field_name = f"{field_prefix}{field}"
|
|
497
495
|
value = form_data.get(field_name, "")
|
|
498
496
|
|
|
499
|
-
# Convert port to int if it's a number
|
|
500
497
|
if field == "port":
|
|
498
|
+
# Convert port to int if it's a number
|
|
501
499
|
try:
|
|
502
500
|
broker_config[field] = int(value) if value else DEFAULT_CUSTOM_BROKER[field]
|
|
503
501
|
except (ValueError, TypeError):
|
|
504
502
|
broker_config[field] = DEFAULT_CUSTOM_BROKER[field]
|
|
503
|
+
elif field == "ownerId":
|
|
504
|
+
# Convert ownerId to topics
|
|
505
|
+
broker_config[CUSTOM_BROKER_UPDATE_TOPIC] = f'update/{value}/<{GW_ID}>'
|
|
506
|
+
broker_config[CUSTOM_BROKER_DATA_TOPIC] = f'data/{value}/<{GW_ID}>'
|
|
507
|
+
broker_config[CUSTOM_BROKER_STATUS_TOPIC] = f'status/{value}/<{GW_ID}>'
|
|
505
508
|
else:
|
|
506
509
|
broker_config[field] = value
|
|
507
510
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wiliot_certificate
|
|
3
|
-
Version: 4.5.
|
|
3
|
+
Version: 4.5.0a6
|
|
4
4
|
Summary: A library for certifying Wiliot-compliant boards
|
|
5
5
|
Author-email: Wiliot <support@wiliot.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -38,10 +38,10 @@ This python package includes the following tools:
|
|
|
38
38
|
- Certification Wizard (`wlt-cert`)
|
|
39
39
|
- Certificate CLI (`wlt-cert-cli`)
|
|
40
40
|
- Tester Upgrade (`wlt-cert-tester-upgrade`)
|
|
41
|
-
- Registration Certificate (`wlt-cert-reg`)
|
|
41
|
+
- Registration Certificate Test (`wlt-cert-reg`)
|
|
42
42
|
|
|
43
43
|
# Versioning:
|
|
44
|
-
wiliot-certificate versions 4.5.x are compatible with firmware version >=4.
|
|
44
|
+
wiliot-certificate versions 4.5.x are compatible with firmware version >=4.4.0 (API VERSION: 12)
|
|
45
45
|
|
|
46
46
|
## Installing wiliot-certificate
|
|
47
47
|
````commandline
|
|
@@ -55,7 +55,7 @@ wlt-cert
|
|
|
55
55
|
````
|
|
56
56
|
This tool is the default to test and certify your device.
|
|
57
57
|
It runs a setup wizard that walks you through the initialization steps before running the tests.
|
|
58
|
-
You'll need a [validation schema](https://community.wiliot.com/customers/s/article/Validation-Schema)
|
|
58
|
+
You'll need a [validation schema](https://community.wiliot.com/customers/s/article/Validation-Schema) and a [tester device](https://community.wiliot.com/customers/s/article/Wiliot-Certification).
|
|
59
59
|
Once set up it opens a terminal and tests your device.
|
|
60
60
|
|
|
61
61
|
|
|
@@ -87,10 +87,6 @@ Use -h for details on the arguments (see [Registration](https://community.wiliot
|
|
|
87
87
|
##### Cloud Connectivity & Misc
|
|
88
88
|
- Board type registered within the Board Type Management system
|
|
89
89
|
- Bridge OTA progress reporting
|
|
90
|
-
##### Power management
|
|
91
|
-
- Functionality of energize and transmit in sleep mode
|
|
92
|
-
##### Edge management
|
|
93
|
-
- Timing of heartbeat and interface packets
|
|
94
90
|
##### Module Energy 2400
|
|
95
91
|
- Functionality of energy pattern, output power and duty cycle
|
|
96
92
|
##### Module Energy SUB1G
|
|
@@ -98,12 +94,6 @@ Use -h for details on the arguments (see [Registration](https://community.wiliot
|
|
|
98
94
|
##### Module Datapath
|
|
99
95
|
- RSSI edge cases: -127 and 0
|
|
100
96
|
- Functionality of transmission pattern, output power
|
|
101
|
-
- Pacer interval with channel 10 and 500k modulation
|
|
102
|
-
- Pacer interval using GEN3 Pixels
|
|
103
|
-
- Packet filter: the following configuration - DEBUG, TEMP & DEBUG, TEMPS & DEBUG & ADVANCE
|
|
104
|
-
- Rx rate feature with extended advertising
|
|
105
|
-
- Functionality of adaptive pacer algorithm
|
|
106
|
-
- Supported Pixels for extended advertising and GEN3
|
|
107
97
|
##### Calibration
|
|
108
98
|
- Functionality of output power and interval calibration
|
|
109
99
|
- Functionality of calibration transmission patterns for the configuration STANDARD & EU & DISABLE
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
certificate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
certificate/cert_common.py,sha256=
|
|
3
|
-
certificate/cert_config.py,sha256=
|
|
2
|
+
certificate/cert_common.py,sha256=rY1Y2nvGu-AtYvyJUrMiJ9LHrkNhI0nmVcV3ZCrNiM4,72462
|
|
3
|
+
certificate/cert_config.py,sha256=Z2F2EV6Ow0nVBrlBRkAM7H7dcyZtFU0eq8hNKPob4ss,22380
|
|
4
4
|
certificate/cert_data_sim.py,sha256=Oe8sUaIh-NqLFr3QUkhcyUu8ZH0osy1VoOY3fRx-mmk,13785
|
|
5
|
-
certificate/cert_defines.py,sha256=
|
|
6
|
-
certificate/cert_gw_sim.py,sha256=
|
|
7
|
-
certificate/cert_mqtt.py,sha256=
|
|
8
|
-
certificate/cert_prints.py,sha256=
|
|
5
|
+
certificate/cert_defines.py,sha256=jmyAVA1ypy2VW9JNooiO7scQGSUPwpThfVcfTi3FXII,17496
|
|
6
|
+
certificate/cert_gw_sim.py,sha256=mxa591grg-JhcSKXiqgBwjTm6xuqekVFEpwBaqD1lyU,17568
|
|
7
|
+
certificate/cert_mqtt.py,sha256=kUYVoyMonbcos7s8BHulA54eX7z6WYU9hR3wsYz0UMg,22881
|
|
8
|
+
certificate/cert_prints.py,sha256=uuaLjleRmbPVh-k0KDjyfIjQd0VtVIAe401UODBLLv8,7100
|
|
9
9
|
certificate/cert_protobuf.py,sha256=j8Tmm86VXONMvSTBl4Tmwt5G1jJRcJg05nJj7YHbpoM,3824
|
|
10
10
|
certificate/cert_results.py,sha256=Lux5UQGSZG_0wq1uSO7ETri-JrYT4nXNOHdriZUmcCg,30051
|
|
11
11
|
certificate/cert_utils.py,sha256=ADPFJXLOZFzKtJoql3j1OKpkB9JgnJiv8VwEJW7kYJk,29038
|
|
12
12
|
certificate/certificate.py,sha256=KYOtROsBIZE9vYZKtPMnU9LyvQQ60fXodi3WZqRMluA,9310
|
|
13
|
-
certificate/certificate_cli.py,sha256=
|
|
14
|
-
certificate/certificate_eth_test_list.txt,sha256=
|
|
13
|
+
certificate/certificate_cli.py,sha256=wd4X-ih6gPVGUWKLIXluIW40wYPJnMGfP_rD-dwPWk8,5030
|
|
14
|
+
certificate/certificate_eth_test_list.txt,sha256=KxG08Ry2SuwHnq3ovGWEo4utxIIPkQoEzHdbksOQcuU,6216
|
|
15
15
|
certificate/certificate_sanity_test_list.txt,sha256=JjpFxyxjWbylxnH8FyjPFgO2w-WaT3Nm0bcYhD0shhk,3487
|
|
16
|
-
certificate/certificate_test_list.txt,sha256=
|
|
16
|
+
certificate/certificate_test_list.txt,sha256=7hA9hrhhy0oLC1EPgpP7IvCkMdrQkdr0osmiJkYwKZ4,6156
|
|
17
17
|
certificate/wlt_types.py,sha256=7RbsW-OudiHhNAay6nFGKtF4FrlAq91pm9yeIQRxddM,6047
|
|
18
18
|
certificate/ag/wlt_cmd_if.html,sha256=eO-FYVrxVs5JdCblGaQLG9-0dZKt6YjbE9Ggz8bXRq4,16831
|
|
19
19
|
certificate/ag/wlt_types_ag.py,sha256=cTYysTSdEh2IWY8tD3pipRhwKo1b194VSX64ctvgGQY,536839
|
|
@@ -30,34 +30,34 @@ certificate/tests/cloud_connectivity/acl_test/acl_test.py,sha256=NBC9E1h2agpKYEs
|
|
|
30
30
|
certificate/tests/cloud_connectivity/brg_ota_test/brg_ota_test.json,sha256=0U1RIjBFsfGtl_nTabNzRRPQYJs3F4JIivKIImuR1Y8,850
|
|
31
31
|
certificate/tests/cloud_connectivity/brg_ota_test/brg_ota_test.py,sha256=xqB65yWM754UfWF1N_h4bI4kuEajAqMvcdFjRu0OFfI,1873
|
|
32
32
|
certificate/tests/cloud_connectivity/channel_scan_behaviour_test/channel_scan_behaviour_test.json,sha256=Sc4Xp3VPY9GjNKsQFcjAr9fyD9_MZMBfxsgpo31Jk-Y,755
|
|
33
|
-
certificate/tests/cloud_connectivity/channel_scan_behaviour_test/channel_scan_behaviour_test.py,sha256=
|
|
33
|
+
certificate/tests/cloud_connectivity/channel_scan_behaviour_test/channel_scan_behaviour_test.py,sha256=K6G1j4XKEbFWgPl_DWlbYUJw07I78EenJxFS60uQLek,10179
|
|
34
34
|
certificate/tests/cloud_connectivity/connection_test/connection_test.json,sha256=xr-d-DnzbItkXE8oBTZ31Fr0huhILdxXTQFJyqd6FYc,939
|
|
35
|
-
certificate/tests/cloud_connectivity/connection_test/connection_test.py,sha256=
|
|
35
|
+
certificate/tests/cloud_connectivity/connection_test/connection_test.py,sha256=Gl8VWlbOQxdnvqPEUbAe4Wakk7CLE3byRFhJoxObqi4,2568
|
|
36
36
|
certificate/tests/cloud_connectivity/deduplication_test/deduplication_test.json,sha256=-6va5_YT-IDdEJZjJUlV3L6CcGODPcLWgcZUE5Dv01k,710
|
|
37
|
-
certificate/tests/cloud_connectivity/deduplication_test/deduplication_test.py,sha256=
|
|
37
|
+
certificate/tests/cloud_connectivity/deduplication_test/deduplication_test.py,sha256=Dbnah1fhaidnwLbPj9qz1H_lKr4-3jg8BvN7dsNg3oQ,3342
|
|
38
38
|
certificate/tests/cloud_connectivity/downlink_test/downlink_test.json,sha256=VR2EHtOLHuh0ETSbgRGOuorHcuJPKBkk1hwM_7g_Dj4,878
|
|
39
39
|
certificate/tests/cloud_connectivity/downlink_test/downlink_test.py,sha256=73uszwCvY2Rkg71Rqmco-meYLNBuh0vBIPxAeDo7zoU,8508
|
|
40
40
|
certificate/tests/cloud_connectivity/ext_adv_stress_test/ext_adv_stress_test.json,sha256=W0kAvLyzxUsaEKiuGu2Eq-Al5g-ov2zapFF3FXlgdq0,954
|
|
41
|
-
certificate/tests/cloud_connectivity/ext_adv_stress_test/ext_adv_stress_test.py,sha256
|
|
41
|
+
certificate/tests/cloud_connectivity/ext_adv_stress_test/ext_adv_stress_test.py,sha256=q68BmQtOtauiUgZAC2TK7XXjRLyDkeT9IkfQ5Q8ZewI,4293
|
|
42
42
|
certificate/tests/cloud_connectivity/reboot_test/reboot_test.json,sha256=QZMqxrUul_jEvoQJKdWjzXxa_m49a3rVyDTDbREYhik,781
|
|
43
|
-
certificate/tests/cloud_connectivity/reboot_test/reboot_test.py,sha256=
|
|
43
|
+
certificate/tests/cloud_connectivity/reboot_test/reboot_test.py,sha256=BWZU8NCWhkRor8tXe-crp25bN0aWcWqYL17qjkKU1Pg,2036
|
|
44
44
|
certificate/tests/cloud_connectivity/registration_test/registration_test.json,sha256=fT-IHk0CRid8EDgo9bDtO7jl_1JDcVK0bQSHBz8CpZw,1039
|
|
45
45
|
certificate/tests/cloud_connectivity/registration_test/registration_test.py,sha256=uzLwNQFffLJQhzuUx0l1-xsk7r0X1z4xBk7zjkzlTlE,15115
|
|
46
46
|
certificate/tests/cloud_connectivity/registration_test/registration_test_cli.py,sha256=PA43jADoqfnkEwOzeggl6mmo5nIQT6M_8j32IIxhQb0,3141
|
|
47
47
|
certificate/tests/cloud_connectivity/stress_test/stress_test.json,sha256=rXDA1AgdSgMdBZhDvKHyO4p1KoqJxDfKJzvwSVLcONA,804
|
|
48
|
-
certificate/tests/cloud_connectivity/stress_test/stress_test.py,sha256=
|
|
48
|
+
certificate/tests/cloud_connectivity/stress_test/stress_test.py,sha256=rl63dFNFBb-9o6wqdQrLFAzCLAbDt29b_IliZMhHbp8,4177
|
|
49
49
|
certificate/tests/cloud_connectivity/uplink_ext_adv_test/uplink_ext_adv_test.json,sha256=4yiEHa1sxz6-xnQDtaBU4JHNDsPZ_p9Jpgqpy8s9QJY,1326
|
|
50
50
|
certificate/tests/cloud_connectivity/uplink_ext_adv_test/uplink_ext_adv_test.py,sha256=R6EvyRbBzfy3XjHrnR0HFSZHL7xM-ccDYZuBmrncIGU,4368
|
|
51
51
|
certificate/tests/cloud_connectivity/uplink_test/uplink_test.json,sha256=F28h9EjUxLYOiYH1mk_o8hUqHyer4Mc7BhvfU4VnhYQ,955
|
|
52
|
-
certificate/tests/cloud_connectivity/uplink_test/uplink_test.py,sha256=
|
|
52
|
+
certificate/tests/cloud_connectivity/uplink_test/uplink_test.py,sha256=AuOnFAkowDtU2Wdkg4c2cCldazzTG05o4XUz8agHoOw,7339
|
|
53
53
|
certificate/tests/datapath/aging_test/aging_test.json,sha256=n1LmPKJWzfSOmjNFMVMeIdFS59kteUDce6a55gEM4Zk,901
|
|
54
|
-
certificate/tests/datapath/aging_test/aging_test.py,sha256=
|
|
54
|
+
certificate/tests/datapath/aging_test/aging_test.py,sha256=oBNdp0GMPSILEqEwPuv7nNOOCswyamn91BJIV2JCYDc,6943
|
|
55
55
|
certificate/tests/datapath/event_ble5_test/event_ble5_test.json,sha256=oK-HyLS8Re_D4MYppi6ZehhJTMVZ2-iW4gwlGaRu4bg,944
|
|
56
56
|
certificate/tests/datapath/event_ble5_test/event_ble5_test.py,sha256=BsCuVFFjL5U3s2cBxjeGygw5j9MmUWF51s_afmvyEII,4601
|
|
57
57
|
certificate/tests/datapath/event_test/event_test.json,sha256=moxR8vxvTX5p2PyP4d1P9f-wFjJbERhFn0nJAZw8AgA,949
|
|
58
58
|
certificate/tests/datapath/event_test/event_test.py,sha256=IigGoxk4rNM9CVRSnT0KWdEWg1CT2NZXyHd2SIIzqeA,3783
|
|
59
|
-
certificate/tests/datapath/num_of_tags_test/num_of_tags_test.json,sha256=
|
|
60
|
-
certificate/tests/datapath/num_of_tags_test/num_of_tags_test.py,sha256=
|
|
59
|
+
certificate/tests/datapath/num_of_tags_test/num_of_tags_test.json,sha256=THXxkPXB27P7KEWk8us-kkTIs7kCuBixVcra-edPiFg,805
|
|
60
|
+
certificate/tests/datapath/num_of_tags_test/num_of_tags_test.py,sha256=in7NrVYRF7l08INHf6w-_hRbIaJnqqyaqQtJpM698BA,3697
|
|
61
61
|
certificate/tests/datapath/output_power_test/output_power_test.json,sha256=1B_glQf7GUgjdqnAwnKE2_iyinNGuW3mtiglp2XlLvQ,1449
|
|
62
62
|
certificate/tests/datapath/output_power_test/output_power_test.py,sha256=09Ug3nhLm3SFTdfZnoKSN1wR5Dc9yRKbRlaNn7Gt9Rw,1704
|
|
63
63
|
certificate/tests/datapath/pacer_interval_ble5_test/pacer_interval_ble5_test.json,sha256=5TIAiLQ5RRzRzYImh4Hk5iv0-skqdpuJALff3Z75j_s,948
|
|
@@ -87,9 +87,9 @@ certificate/tests/datapath/rx_rate_gen2_test/rx_rate_gen2_test.py,sha256=mNXskD7
|
|
|
87
87
|
certificate/tests/datapath/rx_rate_gen3_test/rx_rate_gen3_test.json,sha256=vz2DOmPwgpBBNuFMKHm26zz_UX8eYK4vMF0zmm8TpXU,1423
|
|
88
88
|
certificate/tests/datapath/rx_rate_gen3_test/rx_rate_gen3_test.py,sha256=MPztd0r9R36rnkx1EYRhK4xqELeqsqkduyohQQTukho,12016
|
|
89
89
|
certificate/tests/datapath/stress_gen3_test/stress_gen3_test.json,sha256=hliFx-0HCLudJwzjkVIsLxeTRGxDE8nsnnEBxgOjeZE,1315
|
|
90
|
-
certificate/tests/datapath/stress_gen3_test/stress_gen3_test.py,sha256=
|
|
90
|
+
certificate/tests/datapath/stress_gen3_test/stress_gen3_test.py,sha256=ZV7Rw5uRohzUeaQsosuI9UsjpSChZ-qHd43NTOZZV64,11090
|
|
91
91
|
certificate/tests/datapath/stress_test/stress_test.json,sha256=oOrNKTZ1pObnQJuZfSCxORk_o9SVbg4_uEWghp7rQUA,1315
|
|
92
|
-
certificate/tests/datapath/stress_test/stress_test.py,sha256=
|
|
92
|
+
certificate/tests/datapath/stress_test/stress_test.py,sha256=XiwBVHe3rMtvWHaBfBYStdDgvJs0zy6MNsxoaRL7YnM,11089
|
|
93
93
|
certificate/tests/datapath/tx_repetition_test/tx_repetition_test.json,sha256=5WfRTpR0HBs_7zr8YNxSWAe9Njk8WV5NTtqloDajtII,994
|
|
94
94
|
certificate/tests/datapath/tx_repetition_test/tx_repetition_test.py,sha256=nb1o8mge5QDSyw731fZbKyhmaSlvGjO1fnsYb-9jVfk,3642
|
|
95
95
|
certificate/tests/edge_mgmt/action_blink_test/action_blink_test.json,sha256=tZJAxmSuYQg8KIPBytzB7QLh24SCkHycn5sLPAR1SX8,587
|
|
@@ -158,11 +158,11 @@ common/web/templates/parser.html,sha256=0J2WX5QTD_EZJUtmNq6--wrnpP0-I09iE3rB02eu
|
|
|
158
158
|
common/web/templates/wlt_types.html,sha256=FKxlJ08H7IgNPdsT36RbpMKRw29t-tuwqGaQ4HHhBEM,432230
|
|
159
159
|
gui_certificate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
160
160
|
gui_certificate/gui_certificate_cli.py,sha256=371nNCVmRtUePYKp_w-DVTr3C8hLAzKR2q5ZAMsaxt0,448
|
|
161
|
-
gui_certificate/server.py,sha256
|
|
161
|
+
gui_certificate/server.py,sha256=-4YETUzq_aDz-l4qreuF5mH0uBwKtFU7kUAncGuG_tM,60363
|
|
162
162
|
gui_certificate/templates/cert_run.html,sha256=nnfolVZ2u1bsiH-u3vbKt1HCcP7CvAzWRZnJe-g3yyo,68803
|
|
163
|
-
wiliot_certificate-4.5.
|
|
164
|
-
wiliot_certificate-4.5.
|
|
165
|
-
wiliot_certificate-4.5.
|
|
166
|
-
wiliot_certificate-4.5.
|
|
167
|
-
wiliot_certificate-4.5.
|
|
168
|
-
wiliot_certificate-4.5.
|
|
163
|
+
wiliot_certificate-4.5.0a6.dist-info/licenses/LICENSE,sha256=OL5ajUNVx888yC2ogol0BKwPRLdQAF1noGuQ7WrYiAA,1068
|
|
164
|
+
wiliot_certificate-4.5.0a6.dist-info/METADATA,sha256=q_ZhlDMTu5JkI4COHfkK-2-4WhLN2nQnTxc8YtvC5d8,3496
|
|
165
|
+
wiliot_certificate-4.5.0a6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
166
|
+
wiliot_certificate-4.5.0a6.dist-info/entry_points.txt,sha256=_wnYk2F4bFn9H7ZGRwYV6WcpK8a3WNon8K7Y5xusFz4,274
|
|
167
|
+
wiliot_certificate-4.5.0a6.dist-info/top_level.txt,sha256=WF6PUfxJ5n2-DxcXTA4oFrTlV6PX_pOYkYaQDk4Mk3g,35
|
|
168
|
+
wiliot_certificate-4.5.0a6.dist-info/RECORD,,
|
|
File without changes
|
{wiliot_certificate-4.5.0a4.dist-info → wiliot_certificate-4.5.0a6.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{wiliot_certificate-4.5.0a4.dist-info → wiliot_certificate-4.5.0a6.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
|
File without changes
|