wiliot-certificate 4.5.0a5__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_mqtt.py +8 -0
- certificate/cert_prints.py +1 -0
- 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.0a5.dist-info → wiliot_certificate-4.5.0a6.dist-info}/METADATA +1 -1
- {wiliot_certificate-4.5.0a5.dist-info → wiliot_certificate-4.5.0a6.dist-info}/RECORD +26 -26
- {wiliot_certificate-4.5.0a5.dist-info → wiliot_certificate-4.5.0a6.dist-info}/WHEEL +0 -0
- {wiliot_certificate-4.5.0a5.dist-info → wiliot_certificate-4.5.0a6.dist-info}/entry_points.txt +0 -0
- {wiliot_certificate-4.5.0a5.dist-info → wiliot_certificate-4.5.0a6.dist-info}/licenses/LICENSE +0 -0
- {wiliot_certificate-4.5.0a5.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_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'
|
|
@@ -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,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=
|
|
5
|
+
certificate/cert_defines.py,sha256=jmyAVA1ypy2VW9JNooiO7scQGSUPwpThfVcfTi3FXII,17496
|
|
6
6
|
certificate/cert_gw_sim.py,sha256=mxa591grg-JhcSKXiqgBwjTm6xuqekVFEpwBaqD1lyU,17568
|
|
7
|
-
certificate/cert_mqtt.py,sha256=
|
|
8
|
-
certificate/cert_prints.py,sha256=
|
|
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
13
|
certificate/certificate_cli.py,sha256=wd4X-ih6gPVGUWKLIXluIW40wYPJnMGfP_rD-dwPWk8,5030
|
|
14
|
-
certificate/certificate_eth_test_list.txt,sha256=
|
|
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.0a5.dist-info → wiliot_certificate-4.5.0a6.dist-info}/entry_points.txt
RENAMED
|
File without changes
|
{wiliot_certificate-4.5.0a5.dist-info → wiliot_certificate-4.5.0a6.dist-info}/licenses/LICENSE
RENAMED
|
File without changes
|
|
File without changes
|