wiliot-certificate 1.5.0a1__py3-none-any.whl → 1.5.2a1__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.
- brg_certificate/ag/energous_v0_defines.py +17 -17
- brg_certificate/ag/energous_v1_defines.py +17 -17
- brg_certificate/ag/energous_v2_defines.py +17 -17
- brg_certificate/ag/energous_v3_defines.py +17 -17
- brg_certificate/ag/energous_v4_defines.py +17 -17
- brg_certificate/ag/fanstel_lan_v0_defines.py +17 -17
- brg_certificate/ag/fanstel_lte_v0_defines.py +17 -17
- brg_certificate/ag/fanstel_wifi_v0_defines.py +17 -17
- brg_certificate/ag/minew_lte_v0_defines.py +17 -17
- brg_certificate/ag/wlt_cmd_if.html +3 -2
- brg_certificate/ag/wlt_types.html +0 -1
- brg_certificate/ag/wlt_types_ag.py +151 -152
- brg_certificate/brg_certificate.py +38 -7
- brg_certificate/brg_certificate_cli.py +19 -3
- brg_certificate/cert_common.py +92 -55
- brg_certificate/cert_config.py +6 -4
- brg_certificate/cert_data_sim.py +47 -7
- brg_certificate/cert_defines.py +20 -6
- brg_certificate/cert_gw_sim.py +10 -6
- brg_certificate/cert_mqtt.py +9 -6
- brg_certificate/cert_prints.py +14 -1
- brg_certificate/cert_protobuf.py +7 -7
- brg_certificate/cert_results.py +131 -84
- brg_certificate/cert_utils.py +13 -7
- brg_certificate/certificate_bcc_sanity_test_list.txt +40 -0
- brg_certificate/certificate_bcc_test_list.txt +50 -0
- brg_certificate/certificate_sanity_test_list.txt +12 -5
- brg_certificate/certificate_test_list.txt +16 -6
- brg_certificate/tests/calibration/interval_test/interval_test.json +4 -3
- brg_certificate/tests/calibration/output_power_test/output_power_test.json +8 -5
- brg_certificate/tests/calibration/pattern_test/pattern_test.json +7 -4
- brg_certificate/tests/calibration/pattern_test/pattern_test.py +25 -26
- brg_certificate/tests/datapath/aging_test/aging_test.json +19 -0
- brg_certificate/tests/datapath/aging_test/aging_test.py +142 -0
- brg_certificate/tests/datapath/num_of_tags_test/num_of_tags_test.json +10 -5
- brg_certificate/tests/datapath/num_of_tags_test/num_of_tags_test.py +12 -11
- brg_certificate/tests/datapath/output_power_test/output_power_test.json +7 -4
- brg_certificate/tests/datapath/output_power_test/output_power_test.py +2 -1
- brg_certificate/tests/datapath/pacer_interval_ble5_test/pacer_interval_ble5_test.json +8 -5
- brg_certificate/tests/datapath/pacer_interval_ble5_test/pacer_interval_ble5_test.py +6 -3
- brg_certificate/tests/datapath/pacer_interval_tags_count_test/pacer_interval_tags_count_test.json +7 -4
- brg_certificate/tests/datapath/pacer_interval_tags_count_test/pacer_interval_tags_count_test.py +6 -3
- brg_certificate/tests/datapath/pacer_interval_test/pacer_interval_test.json +7 -4
- brg_certificate/tests/datapath/pacer_interval_test/pacer_interval_test.py +4 -2
- brg_certificate/tests/datapath/pattern_test/pattern_test.json +8 -5
- brg_certificate/tests/datapath/pattern_test/pattern_test.py +2 -1
- brg_certificate/tests/datapath/pkt_filter_ble5_test/pkt_filter_ble5_test.json +11 -5
- brg_certificate/tests/datapath/pkt_filter_ble5_test/pkt_filter_ble5_test.py +12 -5
- brg_certificate/tests/datapath/pkt_filter_gen3_test/pkt_filter_gen3_test.json +10 -4
- brg_certificate/tests/datapath/pkt_filter_gen3_test/pkt_filter_gen3_test.py +11 -6
- brg_certificate/tests/datapath/pkt_filter_test/pkt_filter_test.json +10 -4
- brg_certificate/tests/datapath/pkt_filter_test/pkt_filter_test.py +11 -7
- brg_certificate/tests/datapath/rssi_threshold_test/rssi_threshold_test.json +8 -4
- brg_certificate/tests/datapath/rssi_threshold_test/rssi_threshold_test.py +7 -5
- brg_certificate/tests/datapath/rx_channel_test/rx_channel_test.json +7 -4
- brg_certificate/tests/datapath/rx_channel_test/rx_channel_test.py +7 -3
- brg_certificate/tests/datapath/rx_rate_gen2_test/rx_rate_gen2_test.json +4 -5
- brg_certificate/tests/datapath/rx_rate_gen2_test/rx_rate_gen2_test.py +107 -73
- brg_certificate/tests/datapath/rx_rate_gen3_test/rx_rate_gen3_test.json +4 -5
- brg_certificate/tests/datapath/rx_rate_gen3_test/rx_rate_gen3_test.py +128 -118
- brg_certificate/tests/datapath/stress_gen3_test/stress_gen3_test.json +15 -23
- brg_certificate/tests/datapath/stress_gen3_test/stress_gen3_test.py +104 -103
- brg_certificate/tests/datapath/stress_test/stress_test.json +15 -23
- brg_certificate/tests/datapath/stress_test/stress_test.py +104 -110
- brg_certificate/tests/datapath/tx_repetition_algo_test/tx_repetition_algo_test.json +8 -4
- brg_certificate/tests/datapath/tx_repetition_algo_test/tx_repetition_algo_test.py +7 -2
- brg_certificate/tests/datapath/tx_repetition_test/tx_repetition_test.json +8 -4
- brg_certificate/tests/datapath/tx_repetition_test/tx_repetition_test.py +8 -6
- brg_certificate/tests/edge_mgmt/actions_test/actions_test.json +4 -3
- brg_certificate/tests/edge_mgmt/actions_test/actions_test.py +2 -38
- brg_certificate/tests/edge_mgmt/brg2brg_ota_ble5_test/brg2brg_ota_ble5_test.json +15 -8
- brg_certificate/tests/edge_mgmt/brg2brg_ota_test/brg2brg_ota_test.json +14 -8
- brg_certificate/tests/edge_mgmt/leds_test/leds_test.json +11 -7
- brg_certificate/tests/edge_mgmt/leds_test/leds_test.py +25 -12
- brg_certificate/tests/edge_mgmt/ota_test/ota_test.json +11 -7
- brg_certificate/tests/edge_mgmt/ota_test/ota_test.py +48 -3
- brg_certificate/tests/edge_mgmt/{stat_test/stat_test.json → periodic_msgs_test/periodic_msgs_test.json} +5 -4
- brg_certificate/tests/edge_mgmt/{stat_test/stat_test.py → periodic_msgs_test/periodic_msgs_test.py} +4 -4
- brg_certificate/tests/energy2400/duty_cycle_test/duty_cycle_test.json +8 -5
- brg_certificate/tests/energy2400/duty_cycle_test/duty_cycle_test.py +2 -1
- brg_certificate/tests/energy2400/output_power_test/output_power_test.json +9 -6
- brg_certificate/tests/energy2400/output_power_test/output_power_test.py +2 -1
- brg_certificate/tests/energy2400/pattern_test/pattern_test.json +8 -5
- brg_certificate/tests/energy2400/pattern_test/pattern_test.py +2 -1
- brg_certificate/tests/energy2400/signal_indicator_ble5_10_250k_test/signal_indicator_ble5_10_250k_test.json +20 -0
- brg_certificate/tests/energy2400/signal_indicator_ble5_10_250k_test/signal_indicator_ble5_10_250k_test.py +343 -0
- brg_certificate/tests/energy2400/signal_indicator_ble5_10_500k_test/signal_indicator_ble5_10_500k_test.json +20 -0
- brg_certificate/tests/energy2400/signal_indicator_ble5_10_500k_test/signal_indicator_ble5_10_500k_test.py +343 -0
- brg_certificate/tests/energy2400/signal_indicator_sub1g_2_4_test/signal_indicator_sub1g_2_4_test.json +14 -7
- brg_certificate/tests/energy2400/signal_indicator_sub1g_2_4_test/signal_indicator_sub1g_2_4_test.py +45 -57
- brg_certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.json +14 -7
- brg_certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.py +198 -125
- brg_certificate/tests/energy_sub1g/duty_cycle_test/duty_cycle_test.json +7 -4
- brg_certificate/tests/energy_sub1g/duty_cycle_test/duty_cycle_test.py +2 -1
- brg_certificate/tests/energy_sub1g/pattern_test/pattern_test.json +13 -6
- brg_certificate/tests/energy_sub1g/pattern_test/pattern_test.py +2 -1
- brg_certificate/tests/energy_sub1g/signal_indicator_functionality_test/signal_indicator_functionality_test.json +14 -7
- brg_certificate/tests/energy_sub1g/signal_indicator_functionality_test/signal_indicator_functionality_test.py +117 -124
- brg_certificate/tests/energy_sub1g/signal_indicator_test/signal_indicator_test.json +7 -4
- brg_certificate/tests/energy_sub1g/signal_indicator_test/signal_indicator_test.py +2 -1
- brg_certificate/tests/pwr_mgmt/pwr_mgmt_test/pwr_mgmt_test.json +18 -0
- brg_certificate/tests/pwr_mgmt/pwr_mgmt_test/pwr_mgmt_test.py +84 -0
- brg_certificate/tests/sensors/ext_sensor_test/ext_sensor_test.json +21 -0
- brg_certificate/tests/sensors/ext_sensor_test/ext_sensor_test.py +306 -0
- brg_certificate/wltPb_pb2.py +15 -15
- brg_certificate/wltPb_pb2.pyi +8 -2
- brg_certificate/wlt_types.py +2 -1
- gw_certificate/cert_results.py +11 -4
- gw_certificate/gw_certificate.py +0 -2
- gw_certificate/gw_certificate_cli.py +3 -3
- gw_certificate/interface/uart_if.py +1 -1
- gw_certificate/tests/actions.py +7 -1
- gw_certificate/tests/registration.py +2 -1
- gw_certificate/tests/uplink.py +26 -35
- {wiliot_certificate-1.5.0a1.dist-info → wiliot_certificate-1.5.2a1.dist-info}/METADATA +46 -42
- {wiliot_certificate-1.5.0a1.dist-info → wiliot_certificate-1.5.2a1.dist-info}/RECORD +120 -112
- {wiliot_certificate-1.5.0a1.dist-info → wiliot_certificate-1.5.2a1.dist-info}/WHEEL +1 -1
- brg_certificate/tests/datapath/adaptive_pacer_algo_test/adaptive_pacer_algo_test.json +0 -13
- brg_certificate/tests/datapath/adaptive_pacer_algo_test/adaptive_pacer_algo_test.py +0 -76
- brg_certificate/tests/energy2400/signal_indicator_ble5_test/signal_indicator_ble5_test.json +0 -13
- brg_certificate/tests/energy2400/signal_indicator_ble5_test/signal_indicator_ble5_test.py +0 -398
- {wiliot_certificate-1.5.0a1.dist-info → wiliot_certificate-1.5.2a1.dist-info}/entry_points.txt +0 -0
- {wiliot_certificate-1.5.0a1.dist-info → wiliot_certificate-1.5.2a1.dist-info/licenses}/LICENSE +0 -0
- {wiliot_certificate-1.5.0a1.dist-info → wiliot_certificate-1.5.2a1.dist-info}/top_level.txt +0 -0
|
@@ -8,192 +8,186 @@ from brg_certificate.cert_gw_sim import DEDUPLICATION_PKTS
|
|
|
8
8
|
import statistics
|
|
9
9
|
import time
|
|
10
10
|
|
|
11
|
-
def configure_pacer_n_times(test, num_of_times, pacer_interval, datapath_module):
|
|
12
|
-
test = cert_config.brg_configure(test, fields=[BRG_PACER_INTERVAL], values=[pacer_interval], module=datapath_module)[0]
|
|
13
|
-
if test.rc == TEST_FAILED:
|
|
14
|
-
for i in range(num_of_times):
|
|
15
|
-
if test.rc == TEST_PASSED:
|
|
16
|
-
return test
|
|
17
|
-
print(f"sleeping for 10 seconds before trying to configure pacer again\n")
|
|
18
|
-
time.sleep(10)
|
|
19
|
-
test = cert_config.brg_configure(test, fields=[BRG_PACER_INTERVAL], values=[pacer_interval], module=datapath_module)[0]
|
|
20
|
-
test.add_reason("Didn't succeed to configure after two attempts - No pkt was found!")
|
|
21
|
-
return test
|
|
22
11
|
|
|
23
|
-
def metric_checking_HB(test, mgmt_type_list, tx_queue_expected, pacer_increment_expected):
|
|
12
|
+
def metric_checking_HB(test, check, mgmt_type_list, tx_queue_expected, pacer_increment_expected):
|
|
24
13
|
if not mgmt_type_list:
|
|
25
|
-
test.add_reason("\nDidn't find HB pkt, therefore
|
|
26
|
-
print(
|
|
14
|
+
test.add_reason("\nDidn't find HB pkt, therefore skip all checks\n")
|
|
15
|
+
print("Didn't find HB pkt, therefore will not check tx_queue and pacer increment")
|
|
27
16
|
else:
|
|
28
|
-
#check tx queue
|
|
17
|
+
# check tx queue
|
|
29
18
|
watermarks = [pkt.tx_queue_watermark for pkt in mgmt_type_list]
|
|
30
19
|
half_index = len(watermarks) // 2
|
|
31
20
|
tx_queue_HB = statistics.mean(watermarks[half_index:])
|
|
32
21
|
if not (tx_queue_expected[0] <= tx_queue_HB <= tx_queue_expected[1]):
|
|
33
|
-
|
|
34
|
-
print(f"\ntx_queue value is wrong!\nexpected: {tx_queue_expected}, got: {tx_queue_HB}")
|
|
22
|
+
print(f"\ntx_queue: {tx_queue_HB} expected: {tx_queue_expected},")
|
|
35
23
|
else:
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
24
|
+
print(f"\ntx_queue from HB: {tx_queue_HB}\n")
|
|
25
|
+
|
|
39
26
|
# check pacer increment
|
|
40
27
|
pacer_increment_HB = [pkt.effective_pacer_increment for pkt in mgmt_type_list]
|
|
41
28
|
average_pacer_increment_HB = statistics.mean(pacer_increment_HB)
|
|
42
29
|
if not (pacer_increment_expected[0] <= average_pacer_increment_HB <= pacer_increment_expected[1]):
|
|
43
|
-
test.add_reason(f"pacer_increment:{average_pacer_increment_HB}")
|
|
44
30
|
print(f"\npacer_increment value is wrong\nexpected: {pacer_increment_expected}\ngot: {average_pacer_increment_HB}")
|
|
31
|
+
if check:
|
|
32
|
+
test.rc = TEST_FAILED
|
|
33
|
+
test.add_reason(f"pacer_increment:{average_pacer_increment_HB}")
|
|
45
34
|
else:
|
|
46
|
-
test.add_reason(f"pacer_increment: {average_pacer_increment_HB}")
|
|
47
35
|
print(f"\naverage pacer_increment from HB: {average_pacer_increment_HB}\n")
|
|
36
|
+
if check:
|
|
37
|
+
test.add_reason(f"pacer_increment: {average_pacer_increment_HB}")
|
|
48
38
|
return test
|
|
49
39
|
|
|
50
|
-
|
|
40
|
+
|
|
41
|
+
def metric_checking_df(test, check, pacer_interval, df, repetition_value_expected, brg_latency_expected, num_of_pixels_expected):
|
|
51
42
|
if df.empty:
|
|
52
|
-
print(
|
|
43
|
+
print("Df is empty, therefore will not check repetitions, brg latency and num of tags")
|
|
53
44
|
test.rc = TEST_FAILED
|
|
54
|
-
test.add_reason(
|
|
45
|
+
test.add_reason("Df is empty, therefore skip all checks")
|
|
55
46
|
else:
|
|
56
47
|
print(f"result of pacer interval: {pacer_interval}\n")
|
|
57
48
|
# check repetition value
|
|
58
49
|
payload_counts_per_tag = df.groupby(TAG_ID)[PAYLOAD].value_counts()
|
|
59
50
|
average_payload_count = round(payload_counts_per_tag.mean(), 2)
|
|
60
51
|
if not repetition_value_expected[0] <= average_payload_count <= repetition_value_expected[1]:
|
|
52
|
+
print(f"Repetition value is wrong! \nexpected:{repetition_value_expected}\ngot: {average_payload_count}")
|
|
61
53
|
if check:
|
|
62
54
|
test.rc = TEST_FAILED
|
|
63
|
-
test.add_reason(f"Repetition:{average_payload_count}, expected: {repetition_value_expected}
|
|
64
|
-
print(f"Repetition value is wrong! \nexpected:{repetition_value_expected}\ngot: {average_payload_count}")
|
|
65
|
-
else:
|
|
66
|
-
test.add_reason(f"Repetition:{average_payload_count}, expected: {repetition_value_expected},")
|
|
67
|
-
print(f"Repetition value is wrong! \nexpected:{repetition_value_expected}\ngot: {average_payload_count}")
|
|
55
|
+
test.add_reason(f"Repetition:{average_payload_count}, expected: {repetition_value_expected}")
|
|
68
56
|
else:
|
|
69
|
-
test.add_reason(f"Repetition value: {average_payload_count}")
|
|
70
57
|
print(f"Repetition value is correct! got: {average_payload_count}")
|
|
71
|
-
|
|
58
|
+
if check:
|
|
59
|
+
test.add_reason(f"Repetition value: {average_payload_count}")
|
|
60
|
+
|
|
72
61
|
# check num of tags, with tolerance of 5%
|
|
73
|
-
num_of_tags = len(df[TAG_ID].unique())
|
|
74
|
-
if not num_of_pixels_expected*0.95 <= num_of_tags <= num_of_pixels_expected*1.05:
|
|
75
|
-
|
|
76
|
-
|
|
62
|
+
num_of_tags = len(df[TAG_ID].unique())
|
|
63
|
+
if not num_of_pixels_expected * 0.95 <= num_of_tags <= num_of_pixels_expected * 1.05:
|
|
64
|
+
print(f"\nnum of tags is not as expected\nexpected: {num_of_pixels_expected}, got: {num_of_tags}")
|
|
65
|
+
if check:
|
|
66
|
+
test.add_reason(f"num of tags: {num_of_tags}")
|
|
77
67
|
else:
|
|
78
|
-
test.add_reason(f"num of tags: {num_of_tags}")
|
|
79
68
|
print(f"\nnum of tags from df: {num_of_tags}\n")
|
|
80
|
-
|
|
81
|
-
#check brg_latency
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
test.add_reason(f"brg_latency:{brg_latency_avg}")
|
|
86
|
-
print(f"Average brg_latency: {brg_latency_avg}")
|
|
87
|
-
else:
|
|
88
|
-
test.add_reason(f"brg_latency: {brg_latency_avg}")
|
|
89
|
-
print(f"Average brg_latency: {brg_latency_avg}")
|
|
69
|
+
|
|
70
|
+
# check brg_latency
|
|
71
|
+
brg_latency_avg = round(df[BRG_LATENCY].mean(), 2)
|
|
72
|
+
if not (brg_latency_expected[0] <= brg_latency_avg <= brg_latency_expected[1]):
|
|
73
|
+
print(f"Average brg_latency: {brg_latency_avg} , expected: {brg_latency_expected}")
|
|
90
74
|
else:
|
|
91
|
-
brg_latency_avg = round(df[BRG_LATENCY].mean(),2)
|
|
92
75
|
print(f"Average brg_latency: {brg_latency_avg}")
|
|
93
|
-
return test
|
|
76
|
+
return test
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def combination_func(test, param, datapath_module, pacer_interval, num_of_sim_tags, repetition_value_expected,
|
|
80
|
+
tx_queue_expected, pacer_increment_expected, brg_latency_expected):
|
|
81
|
+
test = cert_config.brg_configure(test, fields=[BRG_PACER_INTERVAL], values=[pacer_interval], module=datapath_module)[0]
|
|
82
|
+
if test.rc == TEST_FAILED:
|
|
83
|
+
print("Failed to configure pacer interval")
|
|
84
|
+
test.add_reason("Failed to configure pacer interval")
|
|
85
|
+
return test
|
|
86
|
+
if param.name == "rep1_adaptive_pacer":
|
|
87
|
+
print(f"run phase: {param.name}")
|
|
88
|
+
df = cert_common.data_scan(test, scan_time=30, brg_data=(not test.internal_brg), gw_data=test.internal_brg)
|
|
89
|
+
cert_common.display_data(df, nfpkt=True, tbc=True, name_prefix=f"stress_{pacer_interval}_", dir=test.dir)
|
|
90
|
+
test, hbs = cert_common.scan_for_mgmt_pkts(test, [eval_pkt(f'Brg2GwHbV{test.active_brg.api_version}')])
|
|
91
|
+
hbs = [p[MGMT_PKT].pkt for p in hbs]
|
|
92
|
+
|
|
93
|
+
check = True
|
|
94
|
+
test = metric_checking_df(test, check, pacer_interval, df, repetition_value_expected, brg_latency_expected, num_of_sim_tags)
|
|
95
|
+
if not test.rc == TEST_FAILED:
|
|
96
|
+
test = metric_checking_HB(test, check, hbs, tx_queue_expected, pacer_increment_expected)
|
|
97
|
+
return test
|
|
98
|
+
else:
|
|
99
|
+
# in case it failed because the repetition value.
|
|
100
|
+
return test
|
|
94
101
|
|
|
95
|
-
def combination_func(test, datapath_module, pacer_interval, num_of_sim_tags, repetition_value_expected, tx_queue_expected, pacer_increment_expected, brg_latency_expected):
|
|
96
|
-
test = configure_pacer_n_times(test, 2, pacer_interval, datapath_module)
|
|
97
102
|
time.sleep(30)
|
|
98
|
-
# first df
|
|
103
|
+
# first df
|
|
99
104
|
df = cert_common.data_scan(test, scan_time=30, brg_data=(not test.internal_brg), gw_data=test.internal_brg)
|
|
100
105
|
cert_common.display_data(df, nfpkt=True, tbc=True, name_prefix=f"stress_{pacer_interval}_", dir=test.dir)
|
|
101
106
|
test, hbs = cert_common.scan_for_mgmt_pkts(test, [eval_pkt(f'Brg2GwHbV{test.active_brg.api_version}')])
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
print(f"WATERMARK:{p[MGMT_PKT].pkt.tx_queue_watermark}, pacer increment:{p[MGMT_PKT].pkt.effective_pacer_increment} ") # TODO remove
|
|
105
|
-
hbs = [p[MGMT_PKT].pkt for p in hbs]
|
|
106
|
-
print(f"result of first df\n")
|
|
107
|
+
hbs = [p[MGMT_PKT].pkt for p in hbs]
|
|
108
|
+
print("result of first df\n")
|
|
107
109
|
check = False
|
|
110
|
+
test = metric_checking_HB(test, check, hbs, tx_queue_expected, pacer_increment_expected)
|
|
108
111
|
test = metric_checking_df(test, check, pacer_interval, df, repetition_value_expected, brg_latency_expected, num_of_sim_tags)
|
|
109
112
|
time.sleep(30)
|
|
110
|
-
# second df
|
|
113
|
+
# second df
|
|
111
114
|
df = cert_common.data_scan(test, scan_time=60, brg_data=(not test.internal_brg), gw_data=test.internal_brg)
|
|
112
115
|
cert_common.display_data(df, nfpkt=True, tbc=True, name_prefix=f"stress_{pacer_interval}_", dir=test.dir)
|
|
113
116
|
test, hbs = cert_common.scan_for_mgmt_pkts(test, [eval_pkt(f'Brg2GwHbV{test.active_brg.api_version}')])
|
|
114
|
-
hbs = [p[MGMT_PKT].pkt for p in hbs]
|
|
115
|
-
print(
|
|
117
|
+
hbs = [p[MGMT_PKT].pkt for p in hbs]
|
|
118
|
+
print("result of second df\n")
|
|
116
119
|
check = True
|
|
120
|
+
test = metric_checking_HB(test, check, hbs, tx_queue_expected, pacer_increment_expected)
|
|
117
121
|
test = metric_checking_df(test, check, pacer_interval, df, repetition_value_expected, brg_latency_expected, num_of_sim_tags)
|
|
118
|
-
test = metric_checking_HB(test, hbs, tx_queue_expected, pacer_increment_expected)
|
|
119
122
|
return test
|
|
120
123
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
124
|
+
|
|
125
|
+
def rep3(test, param, datapath_module, num_of_sim_tags):
|
|
126
|
+
# step 1 - config pacer interval=15 , then check repetition value = 3, tx_queue ~ 0, pacer increment ~ 0, brg latency ~ 0
|
|
127
|
+
pacer_interval = 22
|
|
128
|
+
test = combination_func(test, param, datapath_module, pacer_interval=pacer_interval, num_of_sim_tags=num_of_sim_tags,
|
|
129
|
+
repetition_value_expected=[2, 3], tx_queue_expected=[20, 40],
|
|
130
|
+
pacer_increment_expected=[0, 2], brg_latency_expected=[0, 10])
|
|
125
131
|
time.sleep(5)
|
|
126
132
|
return test
|
|
127
133
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
134
|
+
|
|
135
|
+
def rep2(test, param, datapath_module, num_of_sim_tags):
|
|
136
|
+
# step 2 - config pacer interval 9, then check repetition value = 2, tx_queue = 20-40, pacer increment = 0, brg latency = 0-200
|
|
137
|
+
pacer_interval = 12
|
|
138
|
+
test = combination_func(test, param, datapath_module, pacer_interval=pacer_interval, num_of_sim_tags=num_of_sim_tags,
|
|
139
|
+
repetition_value_expected=[1.5, 2.5], tx_queue_expected=[20, 40],
|
|
140
|
+
pacer_increment_expected=[0, 2], brg_latency_expected=[10, 200])
|
|
133
141
|
time.sleep(5)
|
|
134
142
|
return test
|
|
135
143
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
144
|
+
|
|
145
|
+
def rep1(test, param, datapath_module, num_of_sim_tags):
|
|
146
|
+
# "step 3 - config pacer interval 6 , then check repetition value = 1, tx_queue 40-60, pacer increment ~ 0, brg latency 200-300
|
|
147
|
+
pacer_interval = 7
|
|
148
|
+
test = combination_func(test, param, datapath_module, pacer_interval=pacer_interval, num_of_sim_tags=num_of_sim_tags,
|
|
149
|
+
repetition_value_expected=[1, 2], tx_queue_expected=[20, 40],
|
|
150
|
+
pacer_increment_expected=[0, 2], brg_latency_expected=[200, 300])
|
|
140
151
|
time.sleep(5)
|
|
141
152
|
return test
|
|
142
153
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
154
|
+
|
|
155
|
+
def rep1_adaptive_pacer(test, param, datapath_module, num_of_sim_tags):
|
|
156
|
+
# step 4 - config pacer interval 1, then check repetition value = 1, tx_queue > 60, pacer increment = 3, brg latency > 300
|
|
157
|
+
pacer_interval = 1
|
|
158
|
+
|
|
159
|
+
test = combination_func(test, param, datapath_module, pacer_interval=pacer_interval, num_of_sim_tags=num_of_sim_tags,
|
|
160
|
+
repetition_value_expected=[1, 2], tx_queue_expected=[20, 40],
|
|
161
|
+
pacer_increment_expected=[2, 50], brg_latency_expected=[300, 1000])
|
|
147
162
|
time.sleep(5)
|
|
148
163
|
return test
|
|
149
164
|
|
|
150
|
-
def pixels_burst(test, datapath_module, num_of_sim_tags, pixel_sim_thread):
|
|
151
|
-
#NOTE: I had to change the pattern because there isn't option to increase the the pixels number in the same thread it will cause error "index out of bound"
|
|
152
|
-
# "step 5- config pacer interval 15 , then add more 200 packets with 0 delay(0.02 sec) , then check repetition value = 1 and not 2 "
|
|
153
|
-
pixel_sim_thread.stop()
|
|
154
|
-
pacer_interval = 15
|
|
155
|
-
test = configure_pacer_n_times(test, 2, pacer_interval, datapath_module)
|
|
156
|
-
pixel_sim_thread = cert_data_sim.DataSimThread(test=test, num_of_pixels=num_of_sim_tags, duplicates=1, delay=0, pkt_types=[0],pixels_type=GEN2)
|
|
157
|
-
pixel_sim_thread.start()
|
|
158
|
-
df = cert_common.data_scan(test, scan_time=180 , brg_data=(not test.internal_brg), gw_data=test.internal_brg)
|
|
159
|
-
check = True
|
|
160
|
-
test = metric_checking_df(test, check, pacer_interval, df, [2,3], [0,10], 200)
|
|
161
|
-
# we must have df, so we will try twice again to get it
|
|
162
|
-
if test.rc == TEST_FAILED:
|
|
163
|
-
for i in range(2):
|
|
164
|
-
if test.rc == TEST_PASSED:
|
|
165
|
-
break
|
|
166
|
-
df = cert_common.data_scan(test, scan_time=30 , brg_data=(not test.internal_brg), gw_data=test.internal_brg)
|
|
167
|
-
test =metric_checking_df(test, check, pacer_interval, df, [2,3], [0,10], 200)
|
|
168
|
-
pixel_sim_thread.stop()
|
|
169
|
-
#change the number of pixels to 400, and check that the repetition value is 1 in short time
|
|
170
|
-
pixel_sim_thread = cert_data_sim.DataSimThread(test=test, num_of_pixels=400, duplicates=1, delay=0, pkt_types=[0],pixels_type=GEN2)
|
|
171
|
-
pixel_sim_thread.start()
|
|
172
|
-
df = cert_common.data_scan(test, scan_time=30 , brg_data=(not test.internal_brg), gw_data=test.internal_brg)
|
|
173
|
-
test = metric_checking_df(test, check, pacer_interval, df, [1,2], [0,10], 400)
|
|
174
|
-
pixel_sim_thread.stop()
|
|
175
|
-
return test
|
|
176
165
|
|
|
177
166
|
def run(test):
|
|
178
167
|
# Test prolog
|
|
179
168
|
datapath_module = eval_pkt(f'ModuleDatapathV{test.active_brg.api_version}')
|
|
180
169
|
test = cert_common.test_prolog(test)
|
|
181
170
|
if test.rc == TEST_FAILED:
|
|
182
|
-
return cert_common.test_epilog(test)
|
|
183
|
-
#config GW deduplication pkts = 0
|
|
171
|
+
return cert_common.test_epilog(test, revert_brgs=True, modules=[datapath_module])
|
|
172
|
+
# config GW deduplication pkts = 0
|
|
184
173
|
print("Configuring GW with !deduplication_pkts 0")
|
|
185
174
|
cert_config.gw_action(test, f"{DEDUPLICATION_PKTS} 0")
|
|
186
175
|
if test.rc == TEST_FAILED and test.exit_on_param_failure:
|
|
187
176
|
return cert_common.test_epilog(test, revert_gws=True)
|
|
188
177
|
|
|
189
|
-
STRESS_TEST_MAP = {"rep3":rep3, "rep2": rep2
|
|
178
|
+
STRESS_TEST_MAP = {"rep3": rep3, "rep2": rep2, "rep1": rep1, "rep1_adaptive_pacer": rep1_adaptive_pacer}
|
|
190
179
|
num_of_pixels = 300
|
|
191
|
-
pixel_sim_thread = cert_data_sim.DataSimThread(test=test,
|
|
180
|
+
pixel_sim_thread = cert_data_sim.DataSimThread(test=test,
|
|
181
|
+
num_of_pixels=num_of_pixels,
|
|
182
|
+
duplicates=1,
|
|
183
|
+
delay=0,
|
|
184
|
+
pkt_types=[0],
|
|
185
|
+
pixels_type=GEN2)
|
|
192
186
|
pixel_sim_thread.start()
|
|
193
187
|
time.sleep(30)
|
|
194
188
|
for param in test.params:
|
|
195
189
|
functionality_run_print(param.name)
|
|
196
|
-
test = STRESS_TEST_MAP[param.value](test, datapath_module, num_of_pixels
|
|
190
|
+
test = STRESS_TEST_MAP[param.value](test, param, datapath_module, num_of_pixels)
|
|
197
191
|
generate_log_file(test, param.name)
|
|
198
192
|
field_functionality_pass_fail_print(test, param.name)
|
|
199
193
|
test.set_phase_rc(param.name, test.rc)
|
|
@@ -207,4 +201,4 @@ def run(test):
|
|
|
207
201
|
# Re-enable unified packets deduplication
|
|
208
202
|
cert_config.gw_action(test, f"{DEDUPLICATION_PKTS} 1")
|
|
209
203
|
|
|
210
|
-
return cert_common.test_epilog(test, revert_brgs=True,
|
|
204
|
+
return cert_common.test_epilog(test, revert_brgs=True, modules=[datapath_module])
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "
|
|
3
|
-
"module": "
|
|
2
|
+
"name": "Tx Repetition Algorithm",
|
|
3
|
+
"module": "Datapath",
|
|
4
4
|
"purpose": "Test the tx repetition adjustment algorithm",
|
|
5
|
-
"
|
|
5
|
+
"documentation": "<TEST_DOCUMENTATION_LINK>",
|
|
6
6
|
"initialCondition": "Bridge configured to defaults",
|
|
7
|
-
"procedure": ["Test prolog",
|
|
7
|
+
"procedure": ["Test prolog",
|
|
8
|
+
"Configure bridge tx repetition to 0 to activate tx repetition adjustment algorithm, and packets de-dupliction to 0 to enable analysis",
|
|
9
|
+
"Scan for packets and examine tx repetitions auto adjustment over time",
|
|
10
|
+
"Test epilog and revert to defaults"],
|
|
8
11
|
"expectedOutcome": "All configurations completed successfully and tx repetition algorithm works as expected",
|
|
9
12
|
"mandatory": 0,
|
|
10
13
|
"multiBridgeTest": 0,
|
|
11
14
|
"gwOnlyTest": 0,
|
|
15
|
+
"internalBridge": 1,
|
|
12
16
|
"allSupportedValues": []
|
|
13
17
|
}
|
|
@@ -6,13 +6,16 @@ from brg_certificate.cert_defines import *
|
|
|
6
6
|
from brg_certificate.wlt_types import *
|
|
7
7
|
import brg_certificate.cert_common as cert_common
|
|
8
8
|
import brg_certificate.cert_config as cert_config
|
|
9
|
-
import os
|
|
9
|
+
import os
|
|
10
|
+
import statistics
|
|
11
|
+
import math
|
|
10
12
|
import matplotlib.pyplot as plt
|
|
11
13
|
import plotly.graph_objects as go
|
|
12
14
|
from brg_certificate.cert_gw_sim import DEDUPLICATION_PKTS
|
|
13
15
|
|
|
14
16
|
SCAN_TIME = 60 * 30
|
|
15
17
|
|
|
18
|
+
|
|
16
19
|
def track_tx_rep(test, sorted_database):
|
|
17
20
|
tx_reps = []
|
|
18
21
|
times = []
|
|
@@ -49,6 +52,7 @@ def track_tx_rep(test, sorted_database):
|
|
|
49
52
|
|
|
50
53
|
return test, tx_reps
|
|
51
54
|
|
|
55
|
+
|
|
52
56
|
def tx_rep_analysis(test):
|
|
53
57
|
# Clear data path
|
|
54
58
|
cert_common.wait_time_n_print(CLEAR_DATA_PATH_TIMEOUT)
|
|
@@ -60,7 +64,7 @@ def tx_rep_analysis(test):
|
|
|
60
64
|
print("Found {} unified packets".format(len(pkts)))
|
|
61
65
|
|
|
62
66
|
# Count payloads
|
|
63
|
-
pkt_payload_counter = {}
|
|
67
|
+
pkt_payload_counter = {} # idx 0 - payload, idx 1 - payload ts
|
|
64
68
|
for p in pkts:
|
|
65
69
|
cur_pkt = p[PAYLOAD]
|
|
66
70
|
if cur_pkt in pkt_payload_counter:
|
|
@@ -89,6 +93,7 @@ def tx_rep_analysis(test):
|
|
|
89
93
|
print(f"total counted tx_reps[{tx_reps}]")
|
|
90
94
|
return test
|
|
91
95
|
|
|
96
|
+
|
|
92
97
|
def run(test):
|
|
93
98
|
|
|
94
99
|
test = cert_common.test_prolog(test)
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "
|
|
3
|
-
"module": "
|
|
2
|
+
"name": "Tx Repetition",
|
|
3
|
+
"module": "Datapath",
|
|
4
4
|
"purpose": "Test tx repetition feature configuration and functionality in the bridge for different tx repetition values",
|
|
5
|
-
"
|
|
5
|
+
"documentation": "https://community.wiliot.com/customers/s/article/Wiliot-Network-Data-Path-Module-Configuration",
|
|
6
6
|
"initialCondition": "Bridge & data simulator configured to defaults",
|
|
7
|
-
"procedure": ["Test prolog",
|
|
7
|
+
"procedure": ["Test prolog",
|
|
8
|
+
"Disabling GW deduplication",
|
|
9
|
+
"For each supported value - Configure TX repetitions, Generate pixels packets & scan for packets in the bridge, Compare repetitions mean per packet to the configured value",
|
|
10
|
+
"Test epilog and revert to defaults"],
|
|
8
11
|
"expectedOutcome": "All values configured successfully and actual repetitions found matching to the configured values",
|
|
9
12
|
"mandatory": 1,
|
|
10
13
|
"multiBridgeTest": 0,
|
|
11
14
|
"gwOnlyTest": 0,
|
|
15
|
+
"internalBridge": 0,
|
|
12
16
|
"allSupportedValues": [1, 2, 3, 4, 5, 6]
|
|
13
17
|
}
|
|
@@ -10,7 +10,8 @@ import brg_certificate.cert_data_sim as cert_data_sim
|
|
|
10
10
|
from brg_certificate.cert_gw_sim import DEDUPLICATION_PKTS
|
|
11
11
|
import statistics
|
|
12
12
|
|
|
13
|
-
TX_REPETITION_THRESHOLD =
|
|
13
|
+
TX_REPETITION_THRESHOLD = 0.5
|
|
14
|
+
|
|
14
15
|
|
|
15
16
|
def tx_repetitions_analysis(test, repetitions):
|
|
16
17
|
cert_common.wait_time_n_print(CLEAR_DATA_PATH_TIMEOUT)
|
|
@@ -20,8 +21,8 @@ def tx_repetitions_analysis(test, repetitions):
|
|
|
20
21
|
pixel_sim_thread.start()
|
|
21
22
|
mqtt_scan_wait(test, 60)
|
|
22
23
|
if test.data == DATA_SIMULATION:
|
|
23
|
-
pixel_sim_thread.stop()
|
|
24
|
-
cert_common.wait_time_n_print(CLEAR_DATA_PATH_TIMEOUT)
|
|
24
|
+
pixel_sim_thread.stop() # stop generating pkts on data simulator
|
|
25
|
+
cert_common.wait_time_n_print(CLEAR_DATA_PATH_TIMEOUT) # Wait for sim queue to free
|
|
25
26
|
pkts = cert_mqtt.get_unified_data_pkts(test)
|
|
26
27
|
print(f"Found {len(pkts)} packets")
|
|
27
28
|
if len(pkts) == 0:
|
|
@@ -45,10 +46,10 @@ def tx_repetitions_analysis(test, repetitions):
|
|
|
45
46
|
test.add_reason(txt)
|
|
46
47
|
return test
|
|
47
48
|
|
|
49
|
+
|
|
48
50
|
def run(test):
|
|
49
51
|
|
|
50
52
|
fields = [BRG_TX_REPETITION, BRG_PKT_FILTER, BRG_RX_CHANNEL]
|
|
51
|
-
|
|
52
53
|
datapath_module = eval_pkt(f'ModuleDatapathV{test.active_brg.api_version}')
|
|
53
54
|
|
|
54
55
|
test = cert_common.test_prolog(test)
|
|
@@ -61,7 +62,9 @@ def run(test):
|
|
|
61
62
|
return cert_common.test_epilog(test, revert_gws=True)
|
|
62
63
|
|
|
63
64
|
for param in test.params:
|
|
64
|
-
test = cert_config.brg_configure(test, fields=fields,
|
|
65
|
+
test = cert_config.brg_configure(test, fields=fields,
|
|
66
|
+
values=[param.value, ag.PKT_FILTER_RANDOM_FIRST_ARRIVING_PKT, ag.RX_CHANNEL_37],
|
|
67
|
+
module=datapath_module)[0]
|
|
65
68
|
if test.rc == TEST_FAILED and test.exit_on_param_failure:
|
|
66
69
|
break
|
|
67
70
|
tx_repetitions_analysis(test, param.name)
|
|
@@ -73,7 +76,6 @@ def run(test):
|
|
|
73
76
|
else:
|
|
74
77
|
test.reset_result()
|
|
75
78
|
|
|
76
|
-
|
|
77
79
|
# Re-enable unified packets deduplication
|
|
78
80
|
cert_config.gw_action(test, f"{DEDUPLICATION_PKTS} 1")
|
|
79
81
|
return cert_common.test_epilog(test, revert_brgs=True, revert_gws=True, modules=[datapath_module])
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "
|
|
3
|
-
"module": "
|
|
2
|
+
"name": "Bridge Actions",
|
|
3
|
+
"module": "Edge Management",
|
|
4
4
|
"purpose": "Test bridge actions functionality",
|
|
5
|
-
"
|
|
5
|
+
"documentation": "<TEST_DOCUMENTATION_LINK>",
|
|
6
6
|
"initialCondition": "Bridge configured to defaults",
|
|
7
7
|
"procedure": ["Test prolog", "Run all actions and test bridge's response accordingly", "Test epilog"],
|
|
8
8
|
"expectedOutcome": "Bridge responded as expected to all sent actions",
|
|
9
9
|
"mandatory": 1,
|
|
10
10
|
"multiBridgeTest": 0,
|
|
11
11
|
"gwOnlyTest": 0,
|
|
12
|
+
"internalBridge": 1,
|
|
12
13
|
"allSupportedValues": ["ACTION_GW_HB", "ACTION_BLINK", "ACTION_SEND_HB", "ACTION_GET_BATTERY_SENSOR" , "ACTION_GET_POF_DATA", "ACTION_PL_STATUS", "ACTION_GET_MODULE", "ACTION_REBOOT", "ACTION_RESTORE_DEFAULTS"]
|
|
13
14
|
}
|
|
@@ -5,8 +5,6 @@ import brg_certificate.cert_common as cert_common
|
|
|
5
5
|
import brg_certificate.cert_config as cert_config
|
|
6
6
|
import random
|
|
7
7
|
|
|
8
|
-
WATERMARK = "watermark"
|
|
9
|
-
PACER_INC = "pacer_inc"
|
|
10
8
|
BATTERY_SENSOR_SUPPORTING_BOARD_TYPES = [ag.BOARD_TYPE_MINEW_DUAL_BAND_V0, ag.BOARD_TYPE_ERM_V0,
|
|
11
9
|
ag.BOARD_TYPE_ERM_V1, ag.BOARD_TYPE_KOAMTAC_V0]
|
|
12
10
|
POF_NOT_SUPPORTING_BOARD_TYPES = [ag.BOARD_TYPE_FANSTEL_WIFI_V0, ag.BOARD_TYPE_FANSTEL_LAN_V0]
|
|
@@ -165,17 +163,7 @@ def test_action_blink(test):
|
|
|
165
163
|
|
|
166
164
|
|
|
167
165
|
def test_action_send_hb(test):
|
|
168
|
-
datapath_module = eval_pkt(f'ModuleDatapathV{test.active_brg.api_version}')
|
|
169
|
-
# config brg to get a non zero value in the tx_queue_watermark parameter
|
|
170
|
-
test = cert_config.brg_configure(test, fields=[BRG_PACER_INTERVAL, BRG_TX_REPETITION], values=[1, 6], module=datapath_module)[0]
|
|
171
|
-
if test.rc == TEST_FAILED:
|
|
172
|
-
return cert_config.config_brg_defaults(test=test, modules=[datapath_module])[0]
|
|
173
166
|
|
|
174
|
-
if not test.internal_brg:
|
|
175
|
-
# sleep to let some pkts wait in queue
|
|
176
|
-
wait = 10
|
|
177
|
-
print(f"waiting for {wait} secs to fill up the brg queue")
|
|
178
|
-
cert_common.wait_time_n_print(wait)
|
|
179
167
|
# send action
|
|
180
168
|
cert_config.send_brg_action(test, ag.ACTION_SEND_HB)
|
|
181
169
|
# analysis
|
|
@@ -183,30 +171,6 @@ def test_action_send_hb(test):
|
|
|
183
171
|
if not mgmt_pkts:
|
|
184
172
|
test.add_reason("Didn't find ACTION HB pkt")
|
|
185
173
|
test.rc = TEST_FAILED
|
|
186
|
-
else:
|
|
187
|
-
for p in mgmt_pkts:
|
|
188
|
-
found = {WATERMARK: False, PACER_INC: False}
|
|
189
|
-
# effective_pacer_increment should be 0 when the default value for adaptice_pacer is set (OFF)
|
|
190
|
-
if not p[MGMT_PKT].pkt.effective_pacer_increment:
|
|
191
|
-
found[PACER_INC] = True
|
|
192
|
-
# Skip check for internal brg
|
|
193
|
-
if test.internal_brg:
|
|
194
|
-
found[WATERMARK] = True
|
|
195
|
-
break
|
|
196
|
-
# tx_queue_watermark should not be 0 when brg queue is under stress
|
|
197
|
-
elif p[MGMT_PKT].pkt.tx_queue_watermark:
|
|
198
|
-
found[WATERMARK] = True
|
|
199
|
-
break
|
|
200
|
-
if not found[WATERMARK]:
|
|
201
|
-
test.rc = TEST_FAILED
|
|
202
|
-
test.add_reason(f"tx_queue_watermark ({p[MGMT_PKT].pkt.tx_queue_watermark}) at the BRG HB pkt is zero")
|
|
203
|
-
if not found[PACER_INC]:
|
|
204
|
-
test.rc = TEST_FAILED
|
|
205
|
-
test.add_reason(f"effective_pacer_increment ({p[MGMT_PKT].pkt.effective_pacer_increment}) at the BRG HB pkt is not zero")
|
|
206
|
-
test = cert_config.config_brg_defaults(test=test, modules=[datapath_module])[0]
|
|
207
|
-
# queue can be full so need to wait a few seconds
|
|
208
|
-
if not test.internal_brg:
|
|
209
|
-
cert_common.wait_time_n_print(5)
|
|
210
174
|
return test
|
|
211
175
|
|
|
212
176
|
|
|
@@ -228,7 +192,7 @@ def test_action_get_battery_sensor(test):
|
|
|
228
192
|
scan_time = ACTION_SI_PKT_TIMEOUT
|
|
229
193
|
found_packet = False
|
|
230
194
|
while ((datetime.datetime.now() - start_time).seconds <= scan_time):
|
|
231
|
-
custom_pkts = cert_mqtt.get_all_custom_pkts(test
|
|
195
|
+
custom_pkts = cert_mqtt.get_all_custom_pkts(test)
|
|
232
196
|
for p in custom_pkts:
|
|
233
197
|
if p[SENSOR_UUID] == f"{ag.SENSOR_SERVICE_ID_BATTERY_SENSOR:06X}":
|
|
234
198
|
print_pkt(p)
|
|
@@ -259,7 +223,7 @@ def test_action_get_pof_data(test):
|
|
|
259
223
|
scan_time = ACTION_SI_PKT_TIMEOUT
|
|
260
224
|
found_packet = False
|
|
261
225
|
while ((datetime.datetime.now() - start_time).seconds <= scan_time):
|
|
262
|
-
custom_pkts = cert_mqtt.get_all_custom_pkts(test
|
|
226
|
+
custom_pkts = cert_mqtt.get_all_custom_pkts(test)
|
|
263
227
|
for p in custom_pkts:
|
|
264
228
|
if p[SENSOR_UUID] == f"{ag.SENSOR_SERVICE_ID_POF_DATA:06X}":
|
|
265
229
|
print_pkt(p)
|
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "
|
|
3
|
-
"module": "
|
|
4
|
-
"purpose": "
|
|
5
|
-
"
|
|
6
|
-
"initialCondition": "
|
|
7
|
-
"procedure": ["Test prolog",
|
|
8
|
-
|
|
2
|
+
"name": "Bridge to Bridge OTA BLE5",
|
|
3
|
+
"module": "Edge Management",
|
|
4
|
+
"purpose": "Verify BRG2BRG OTA firmware/bootloader version upgrade functionality using BLE_5.0.",
|
|
5
|
+
"documentation": "<TEST_DOCUMENTATION_LINK>",
|
|
6
|
+
"initialCondition": "1 GW and 2 BRG's (source, destination) from the same type connected to the GW - the source BRG posses the newer firmware/bootloader version, and the destination BRG posses older firmware/bootloader version.",
|
|
7
|
+
"procedure": ["Test prolog",
|
|
8
|
+
"Verify initial conditions - same board type, different firmware/bootloader versions",
|
|
9
|
+
"Determine the source & destination BRG according to version",
|
|
10
|
+
"Configure destination BRG rx channel to BLE_5.0 channel (channel 10)",
|
|
11
|
+
"Send brg2brg ota message to the source BRG - initiate brg2brg ota",
|
|
12
|
+
"Verify destination BRG firmware/bootloader version upgrade through module IF packet",
|
|
13
|
+
"Test epilog"],
|
|
14
|
+
"expectedOutcome": "Destination BRG firmware/bootloader version is upgraded to the source BRG firmware/bootloader version.",
|
|
9
15
|
"mandatory": 0,
|
|
10
|
-
"multiBridgeTest":
|
|
16
|
+
"multiBridgeTest": 1,
|
|
11
17
|
"gwOnlyTest": 0,
|
|
18
|
+
"internalBridge": 0,
|
|
12
19
|
"allSupportedValues": ["BOOTLOADER", "APP"]
|
|
13
20
|
}
|
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "
|
|
3
|
-
"module": "
|
|
4
|
-
"purpose": "
|
|
5
|
-
"
|
|
6
|
-
"initialCondition": "
|
|
7
|
-
"procedure": ["Test prolog",
|
|
8
|
-
|
|
2
|
+
"name": "Bridge to Bridge OTA",
|
|
3
|
+
"module": "Edge Management",
|
|
4
|
+
"purpose": "Verify BRG2BRG OTA firmware/bootloader version upgrade functionality",
|
|
5
|
+
"documentation": "<TEST_DOCUMENTATION_LINK>",
|
|
6
|
+
"initialCondition": "1 GW and 2 BRG's (source, destination) from the same type connected to the GW - the source BRG posses the newer firmware/bootloader version, and the destination BRG posses older firmware/bootloader version.",
|
|
7
|
+
"procedure": ["Test prolog",
|
|
8
|
+
"Verify initial conditions - same board type, different firmware/bootloader versions",
|
|
9
|
+
"Determine the source & destination BRG according to version",
|
|
10
|
+
"Send brg2brg ota message to the source BRG - initiate brg2brg ota",
|
|
11
|
+
"Verify destination BRG firmware/bootloader version upgrade through module IF packet",
|
|
12
|
+
"Test epilog"],
|
|
13
|
+
"expectedOutcome": "Destination BRG firmware/bootloader version is upgraded to the source BRG firmware/bootloader version.",
|
|
9
14
|
"mandatory": 0,
|
|
10
|
-
"multiBridgeTest":
|
|
15
|
+
"multiBridgeTest": 1,
|
|
11
16
|
"gwOnlyTest": 0,
|
|
17
|
+
"internalBridge": 0,
|
|
12
18
|
"allSupportedValues": ["BOOTLOADER", "APP"]
|
|
13
19
|
}
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "
|
|
3
|
-
"module": "
|
|
4
|
-
"purpose": "
|
|
5
|
-
"
|
|
6
|
-
"initialCondition": "
|
|
7
|
-
"procedure": ["Test prolog",
|
|
8
|
-
|
|
2
|
+
"name": "LEDs Behaviour",
|
|
3
|
+
"module": "Edge Management",
|
|
4
|
+
"purpose": "Test the behavior and indications of LEDs during different operational states.",
|
|
5
|
+
"documentation": "<TEST_DOCUMENTATION_LINK>",
|
|
6
|
+
"initialCondition": "Bridge configured to defaults",
|
|
7
|
+
"procedure": ["Test prolog",
|
|
8
|
+
"pre-stage to verify connection to a GW and associate LED color with capability",
|
|
9
|
+
"Test LED behavior during different operational states and behaviors - Advertising, Energizing, Echoing, KEEP_ALIVE, blink action & power management",
|
|
10
|
+
"Test epilog"],
|
|
11
|
+
"expectedOutcome": "LEDs behave as expected during all operational states and behaviors",
|
|
9
12
|
"mandatory": 0,
|
|
10
13
|
"multiBridgeTest": 0,
|
|
11
14
|
"gwOnlyTest": 0,
|
|
15
|
+
"internalBridge": 1,
|
|
12
16
|
"allSupportedValues": []
|
|
13
17
|
}
|