wiliot-certificate 1.5.2a1__py3-none-any.whl → 4.4.0a1__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.
Files changed (85) hide show
  1. brg_certificate/ag/energous_v0_defines.py +3 -3
  2. brg_certificate/ag/energous_v1_defines.py +3 -3
  3. brg_certificate/ag/energous_v2_defines.py +3 -3
  4. brg_certificate/ag/energous_v3_defines.py +3 -3
  5. brg_certificate/ag/energous_v4_defines.py +3 -3
  6. brg_certificate/ag/fanstel_lan_v0_defines.py +3 -3
  7. brg_certificate/ag/fanstel_lte_v0_defines.py +3 -3
  8. brg_certificate/ag/fanstel_wifi_v0_defines.py +3 -3
  9. brg_certificate/ag/minew_lte_v0_defines.py +3 -3
  10. brg_certificate/ag/wlt_types.html +3 -3
  11. brg_certificate/ag/wlt_types_ag.py +8 -8
  12. brg_certificate/cert_common.py +61 -11
  13. brg_certificate/cert_config.py +12 -7
  14. brg_certificate/cert_utils.py +3 -1
  15. brg_certificate/certificate_bcc_test_list.txt +2 -2
  16. brg_certificate/certificate_test_list.txt +4 -4
  17. brg_certificate/tests/calibration/interval_test/interval_test.py +7 -6
  18. brg_certificate/tests/calibration/output_power_test/output_power_test.py +7 -6
  19. brg_certificate/tests/calibration/pattern_test/pattern_test.py +20 -10
  20. brg_certificate/tests/datapath/aging_test/aging_test.py +11 -9
  21. brg_certificate/tests/datapath/num_of_tags_test/num_of_tags_test.py +11 -13
  22. brg_certificate/tests/datapath/output_power_test/output_power_test.py +7 -5
  23. brg_certificate/tests/datapath/pacer_interval_ble5_test/pacer_interval_ble5_test.py +13 -8
  24. brg_certificate/tests/datapath/pacer_interval_tags_count_test/pacer_interval_tags_count_test.py +11 -4
  25. brg_certificate/tests/datapath/pacer_interval_test/pacer_interval_test.py +12 -10
  26. brg_certificate/tests/datapath/pattern_test/pattern_test.py +7 -6
  27. brg_certificate/tests/datapath/pkt_filter_ble5_test/pkt_filter_ble5_test.py +12 -9
  28. brg_certificate/tests/datapath/pkt_filter_gen3_test/pkt_filter_gen3_test.py +13 -10
  29. brg_certificate/tests/datapath/pkt_filter_test/pkt_filter_test.py +13 -11
  30. brg_certificate/tests/datapath/rssi_threshold_test/rssi_threshold_test.py +13 -11
  31. brg_certificate/tests/datapath/rx_channel_test/rx_channel_test.py +7 -7
  32. brg_certificate/tests/datapath/rx_rate_gen2_test/rx_rate_gen2_test.py +34 -35
  33. brg_certificate/tests/datapath/rx_rate_gen3_test/rx_rate_gen3_test.py +41 -44
  34. brg_certificate/tests/datapath/stress_gen3_test/stress_gen3_test.json +1 -2
  35. brg_certificate/tests/datapath/stress_gen3_test/stress_gen3_test.py +7 -9
  36. brg_certificate/tests/datapath/stress_test/stress_test.json +1 -2
  37. brg_certificate/tests/datapath/stress_test/stress_test.py +8 -10
  38. brg_certificate/tests/datapath/tx_repetition_algo_test/tx_repetition_algo_test.py +1 -1
  39. brg_certificate/tests/datapath/tx_repetition_test/tx_repetition_test.py +14 -11
  40. brg_certificate/tests/edge_mgmt/actions_test/actions_test.py +15 -13
  41. brg_certificate/tests/edge_mgmt/brg2brg_ota_ble5_test/brg2brg_ota_ble5_test.py +1 -1
  42. brg_certificate/tests/edge_mgmt/leds_test/leds_test.py +2 -2
  43. brg_certificate/tests/energy2400/duty_cycle_test/duty_cycle_test.py +7 -5
  44. brg_certificate/tests/energy2400/output_power_test/output_power_test.py +7 -5
  45. brg_certificate/tests/energy2400/pattern_test/pattern_test.py +7 -5
  46. brg_certificate/tests/energy2400/signal_indicator_ble5_10_250k_test/signal_indicator_ble5_10_250k_test.json +2 -2
  47. brg_certificate/tests/energy2400/signal_indicator_ble5_10_250k_test/signal_indicator_ble5_10_250k_test.py +256 -278
  48. brg_certificate/tests/energy2400/signal_indicator_ble5_10_500k_test/signal_indicator_ble5_10_500k_test.json +2 -2
  49. brg_certificate/tests/energy2400/signal_indicator_ble5_10_500k_test/signal_indicator_ble5_10_500k_test.py +256 -278
  50. brg_certificate/tests/energy2400/signal_indicator_sub1g_2_4_test/signal_indicator_sub1g_2_4_test.py +3 -3
  51. brg_certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.py +30 -91
  52. brg_certificate/tests/energy_sub1g/duty_cycle_test/duty_cycle_test.py +7 -6
  53. brg_certificate/tests/energy_sub1g/pattern_test/pattern_test.py +7 -5
  54. brg_certificate/tests/energy_sub1g/signal_indicator_functionality_test/signal_indicator_functionality_test.py +2 -2
  55. brg_certificate/tests/energy_sub1g/signal_indicator_test/signal_indicator_test.py +7 -6
  56. brg_certificate/tests/pwr_mgmt/pwr_mgmt_test/pwr_mgmt_test.py +2 -2
  57. brg_certificate/tests/sensors/ext_sensor_test/ext_sensor_test.py +8 -7
  58. gw_certificate/api_if/gw_capabilities.py +37 -1
  59. gw_certificate/common/serialization_formatter.py +80 -0
  60. gw_certificate/common/wltPb_pb2.py +50 -38
  61. gw_certificate/common/wltPb_pb2.pyi +42 -35
  62. gw_certificate/gw_certificate.py +4 -2
  63. gw_certificate/gw_certificate_cli.py +5 -4
  64. gw_certificate/interface/4.4.88_app.zip +0 -0
  65. gw_certificate/interface/{4.4.52_sd_bl_app.zip → 4.4.88_sd_bl_app.zip} +0 -0
  66. gw_certificate/interface/ble_simulator.py +5 -3
  67. gw_certificate/interface/mqtt.py +39 -23
  68. gw_certificate/interface/pkt_generator.py +0 -44
  69. gw_certificate/interface/uart_if.py +25 -12
  70. gw_certificate/tests/actions.py +33 -5
  71. gw_certificate/tests/connection.py +3 -1
  72. gw_certificate/tests/generic.py +1 -1
  73. gw_certificate/tests/registration.py +4 -4
  74. gw_certificate/tests/static/generated_packet_table.py +47 -25
  75. gw_certificate/tests/static/packet_table.csv +10067 -10051
  76. gw_certificate/tests/static/uplink_defines.py +1 -0
  77. gw_certificate/tests/throughput.py +2 -1
  78. gw_certificate/tests/uplink.py +142 -22
  79. {wiliot_certificate-1.5.2a1.dist-info → wiliot_certificate-4.4.0a1.dist-info}/METADATA +1 -1
  80. {wiliot_certificate-1.5.2a1.dist-info → wiliot_certificate-4.4.0a1.dist-info}/RECORD +84 -83
  81. gw_certificate/interface/4.4.52_app.zip +0 -0
  82. {wiliot_certificate-1.5.2a1.dist-info → wiliot_certificate-4.4.0a1.dist-info}/WHEEL +0 -0
  83. {wiliot_certificate-1.5.2a1.dist-info → wiliot_certificate-4.4.0a1.dist-info}/entry_points.txt +0 -0
  84. {wiliot_certificate-1.5.2a1.dist-info → wiliot_certificate-4.4.0a1.dist-info}/licenses/LICENSE +0 -0
  85. {wiliot_certificate-1.5.2a1.dist-info → wiliot_certificate-4.4.0a1.dist-info}/top_level.txt +0 -0
@@ -30,7 +30,7 @@ def rssi_threshold_analysis(test, df, threshold):
30
30
  def run(test):
31
31
 
32
32
  fields = [BRG_RSSI_THRESHOLD]
33
- datapath_module = eval_pkt(f'ModuleDatapathV{test.active_brg.api_version}')
33
+ datapath_module = test.active_brg.datapath
34
34
 
35
35
  test = cert_common.test_prolog(test)
36
36
  if test.rc == TEST_FAILED:
@@ -39,14 +39,15 @@ def run(test):
39
39
  # Configure the BRG with RSSI threshold and check for packets violating the threshold
40
40
  for param in test.params:
41
41
  functionality_run_print(f"test for RSSI threshold of {param.value}")
42
-
43
42
  test = cert_config.brg_configure(test, fields=fields, values=[param.value], module=datapath_module)[0]
44
43
  test.set_phase_rc(param.name, test.rc)
45
44
  test.add_phase_reason(param.name, test.reason)
46
- if test.rc == TEST_FAILED and test.exit_on_param_failure:
47
- break
48
- else:
49
- test.reset_result()
45
+ if test.rc == TEST_FAILED:
46
+ if test.exit_on_param_failure:
47
+ break # break the whole for loop and keep the test as failed
48
+ else:
49
+ test.reset_result() # reset result and continue to next param
50
+ continue
50
51
  print("waiting 5 seconds for datapath to clear")
51
52
  print_update_wait(5)
52
53
 
@@ -67,9 +68,10 @@ def run(test):
67
68
  field_functionality_pass_fail_print(test, fields[0], value=param.name)
68
69
  test.set_phase_rc(param.name, test.rc)
69
70
  test.add_phase_reason(param.name, test.reason)
70
- if test.rc == TEST_FAILED and test.exit_on_param_failure:
71
- break
72
- else:
73
- test.reset_result()
74
-
71
+ if test.rc == TEST_FAILED:
72
+ if test.exit_on_param_failure:
73
+ break # break the whole for loop and keep the test as failed
74
+ else:
75
+ test.reset_result() # reset result and continue to next param
76
+ continue
75
77
  return cert_common.test_epilog(test, revert_brgs=True, revert_gws=test.internal_brg, modules=[datapath_module])
@@ -16,7 +16,7 @@ def run(test):
16
16
 
17
17
  fields = [BRG_RX_CHANNEL]
18
18
  print(test.params)
19
- datapath_module = cert_common.get_module_by_name(test.active_brg.modules, "Datapath")
19
+ datapath_module = test.active_brg.datapath
20
20
 
21
21
  # We use this flag to know whether the BRG is currently in BLE5 mode and needs special configuration next time it is configured
22
22
  ble5_state = False
@@ -30,16 +30,16 @@ def run(test):
30
30
  test = cert_config.brg_configure_ble5(test, fields=fields, values=[param.value], module=datapath_module)[0]
31
31
  else:
32
32
  test = cert_config.brg_configure(test, fields=fields, values=[param.value], module=datapath_module)[0]
33
-
34
33
  # param epilog
35
34
  ble5_state = not is_primary_channel(param.value)
36
35
  generate_log_file(test, param.name)
37
36
  field_functionality_pass_fail_print(test, fields[0], value=param.name)
38
37
  test.set_phase_rc(param.name, test.rc)
39
38
  test.add_phase_reason(param.name, test.reason)
40
- if test.rc == TEST_FAILED and test.exit_on_param_failure:
41
- break
42
- else:
43
- test.reset_result()
44
-
39
+ if test.rc == TEST_FAILED:
40
+ if test.exit_on_param_failure:
41
+ break # break the whole for loop and keep the test as failed
42
+ else:
43
+ test.reset_result() # reset result and continue to next param
44
+ continue
45
45
  return cert_common.test_epilog(test, revert_brgs=True, modules=[datapath_module], ble5=ble5_state)
@@ -34,8 +34,8 @@ def scan_and_compare(test, pacer_interval, delay, expected_address_value):
34
34
  pixel_sim_thread.stop()
35
35
  cert_mqtt.dump_pkts(test, log="rx_rate")
36
36
  cert_common.display_data(df, tbc=True, nfpkt=True, rssi=True, dir=test.dir)
37
-
38
- if df.empty:
37
+ # check if the dataframe is empty or not
38
+ if len(df) <= 1:
39
39
  print("Df is empty")
40
40
  test.rc = TEST_FAILED
41
41
  test.add_reason("Df is empty")
@@ -48,11 +48,16 @@ def scan_and_compare(test, pacer_interval, delay, expected_address_value):
48
48
  print(f"Most common tag: {most_common_tag}")
49
49
  df = df[df[TAG_ID] == most_common_tag]
50
50
  df = df[[TAG_ID, TBC, PACKET_TYPE, DATETIME]]
51
+ length = len(df)
52
+ mid_index = int(length // 2)
53
+ if mid_index == 0:
54
+ mid_index = 1
55
+ print(f"Length of df: {length}, mid index: {mid_index}")
51
56
  print(f"df:\n {df}")
52
57
 
53
58
  tag = df.iloc[0][TAG_ID]
54
59
  # iloc [1:] to skip the first value of tbc_values which could be 0 sometimes.
55
- actual_address_value = round(df.iloc[1:][TBC].mean(), 2) # extract the tbc value from df
60
+ actual_address_value = round(df.iloc[mid_index:][TBC].mean(), 2) # extract the tbc value from df
56
61
  print(f"\nactual address value: {actual_address_value}\nexpected address value: {expected_address_value}")
57
62
  THRESHOLD_ADDRESS_VALUE = 5
58
63
  # check if the actual address value is in the range of -+5 of the expected address value
@@ -147,8 +152,9 @@ def diff_rate(test, datapath_module):
147
152
  df = cert_common.data_scan(test, scan_time=scan_time, brg_data=(not test.internal_brg), gw_data=test.internal_brg)
148
153
  pixel_sim_thread.stop()
149
154
  df = df[[TAG_ID, TBC]]
155
+ lenght = len(df)
150
156
 
151
- if df.empty:
157
+ if len(df) <= 1:
152
158
  test.add_reason("Df is empty")
153
159
  test.rc = TEST_FAILED
154
160
  return test
@@ -156,41 +162,33 @@ def diff_rate(test, datapath_module):
156
162
  print(f"Df:\n {df}")
157
163
  # NOTE: all next rows are specific for the values: delay 0.5 and 3, and in relation address values 128 and 235
158
164
  # check if the last tbc value is as we expected for delay 3 sec we need to get 235 according to LUT table
159
- # we define tolerance of +-2 units for address value
165
+ # we define tolerance of +-10 units for address value
166
+
167
+ # Most important check, verify it converges to the correct value
160
168
  if df.iloc[-1][TBC] not in range(232, 237):
161
169
  test.rc = TEST_FAILED
162
170
  test.add_reason(f"TBC value: {df.iloc[-1][TBC]}, expected value [232,236]")
163
171
  print(f"TBC value: {df.iloc[-1][TBC]}, expected value [232,236] according to delay:{second_delay / 1000} sec")
164
- # skip the first packet in case the second one is still from the last delay value
165
- index = 0
166
- if df.iloc[1][TBC] in range(232, 237):
167
- index = 1
168
-
169
- # verify the first tbc value
170
- first_tbc = df.iloc[index][TBC]
171
- if first_tbc not in range(120, 145):
172
- test.rc = TEST_FAILED
173
- test.add_reason(f"TBC value: {first_tbc}, expected value [120,144]")
174
- print(f"TBC value of last packet before the delay change is wrong\n"
175
- f"TBC value: {first_tbc}, expected value [120,144] according to delay:{first_delay / 1000} sec")
176
-
177
- # check the first change of tbc value after delay changing which is verify the calculation of alpha filter
178
- second_tbc = df.iloc[index + 1][TBC]
179
- expected_address_value = 200
180
- # 4 is equal to 0.09 sec error
181
- threshold = 4 # 2 equal to 0.04 sec error
182
- if not expected_address_value - threshold <= second_tbc <= expected_address_value + threshold:
172
+ return test
173
+ # for loop that skip the first row and check if somewhere there is the expected gap 130 to 200
174
+ result = False
175
+ for i in range(0, lenght - 1):
176
+ prev = df.iloc[i][TBC]
177
+ current = df.iloc[i + 1][TBC]
178
+ if prev in range(120, 140) and current in range(190, 210):
179
+ print(f"Found the gap between {prev} and {current}")
180
+ print(f"row {i}: {df.iloc[i][TBC]}")
181
+ print(f"row {i + 1}: {df.iloc[i + 1][TBC]}")
182
+ result = True
183
+ if not result:
183
184
  test.rc = TEST_FAILED
184
- test.add_reason(f"TBC value: {second_tbc}, expected value [196,204]")
185
- print(f"first change of address value is wrong.\n"
186
- f"alpha filter probably is not define well\n"
187
- f"TBC value: {second_tbc}, expected value [196,204]")
185
+ test.add_reason("Didn't find the correct gap according to alpha filter calculation")
188
186
  return test
189
187
 
190
188
 
191
189
  def run(test):
192
190
  # "Test prolog"
193
- datapath_module = eval_pkt(f'ModuleDatapathV{test.active_brg.api_version}')
191
+ datapath_module = test.active_brg.datapath
194
192
  test = cert_common.test_prolog(test)
195
193
  if test.rc == TEST_FAILED:
196
194
  return cert_common.test_epilog(test)
@@ -199,7 +197,7 @@ def run(test):
199
197
  test = cert_config.brg_configure(test, fields=[BRG_PACER_INTERVAL], values=[pacer_interval], module=datapath_module)[0]
200
198
  if test.rc == TEST_FAILED:
201
199
  test.add_reason(f"Didn't succeed to config pacer interval {pacer_interval}")
202
- return test
200
+ return cert_common.test_epilog(test)
203
201
 
204
202
  RX_RATE_TEST_MAP = {"mid_values": mid_values, "diff_pacer": diff_pacer, "min_value": min_value,
205
203
  "max_value": max_value, "diff_rate": diff_rate}
@@ -210,9 +208,10 @@ def run(test):
210
208
  field_functionality_pass_fail_print(test, param.name)
211
209
  test.set_phase_rc(param.name, test.rc)
212
210
  test.add_phase_reason(param.name, test.reason)
213
- if test.rc == TEST_FAILED and test.exit_on_param_failure:
214
- break
215
- else:
216
- test.reset_result()
217
-
211
+ if test.rc == TEST_FAILED:
212
+ if test.exit_on_param_failure:
213
+ break # break the whole for loop and keep the test as failed
214
+ else:
215
+ test.reset_result() # reset result and continue to next param
216
+ continue
218
217
  return cert_common.test_epilog(test)
@@ -11,7 +11,7 @@ import time
11
11
  def cal_scan_time(test, delay, pacer_interval):
12
12
  # Calculate the scan time to ensure at least 5 packets are captured in data scan
13
13
  # define the num of packet that you want to get
14
- num_of_sending_pkt = 3 # actually it will be 3 because the first one always send
14
+ num_of_sending_pkt = 2 # actually it will be 3 because the first one always send
15
15
  delay = delay / 1000
16
16
  if delay < pacer_interval:
17
17
  scan_time = (pacer_interval * num_of_sending_pkt) + 10
@@ -34,8 +34,8 @@ def scan_and_compare(test, pacer_interval, delay, expected_address_value):
34
34
  pixel_sim_thread.stop()
35
35
  cert_mqtt.dump_pkts(test, log="rx_rate")
36
36
  cert_common.display_data(df, tbc=True, nfpkt=True, rssi=True, dir=test.dir)
37
-
38
- if df.empty:
37
+ # check if the dataframe is empty or not
38
+ if len(df) <= 1:
39
39
  print("Df is empty")
40
40
  test.rc = TEST_FAILED
41
41
  test.add_reason("Df is empty")
@@ -48,11 +48,16 @@ def scan_and_compare(test, pacer_interval, delay, expected_address_value):
48
48
  print(f"Most common tag: {most_common_tag}")
49
49
  df = df[df[TAG_ID] == most_common_tag]
50
50
  df = df[[TAG_ID, TBC, PACKET_TYPE, DATETIME]]
51
+ length = len(df)
52
+ mid_index = int(length // 2)
53
+ if mid_index == 0:
54
+ mid_index = 1
55
+ print(f"Length of df: {length}, mid index: {mid_index}")
51
56
  print(f"df:\n {df}")
52
57
 
53
58
  tag = df.iloc[0][TAG_ID]
54
59
  # iloc [1:] to skip the first value of tbc_values which could be 0 sometimes.
55
- actual_address_value = round(df.iloc[1:][TBC].mean(), 2) # extract the tbc value from df
60
+ actual_address_value = round(df.iloc[mid_index:][TBC].mean(), 2) # extract the tbc value from df
56
61
  print(f"\nactual address value: {actual_address_value}\nexpected address value: {expected_address_value}")
57
62
  THRESHOLD_ADDRESS_VALUE = 5
58
63
  # check if the actual address value is in the range of -+5 of the expected address value
@@ -128,29 +133,28 @@ def max_value(test, datapath_module):
128
133
  def diff_rate(test, datapath_module):
129
134
  # diff rate - a filter: Generate packets with delay 1 and change to 5, according the delay change test the tolerance address value
130
135
  pacer_interval = 1
131
- delay = {500: 5, 3000: 30} # key=delay and value = the duration it will be activated
132
- first_delay = list(delay.keys())[0]
133
- first_duration = list(delay.values())[0]
134
- second_delay = list(delay.keys())[1]
135
-
136
+ delay_duration = [[500, 5], [3000, 3]]
137
+ first_delay = delay_duration[0][0]
138
+ first_duration = delay_duration[0][1]
139
+ second_delay = delay_duration[1][0]
136
140
  test = cert_config.brg_configure(test, fields=[BRG_PACER_INTERVAL], values=[pacer_interval], module=datapath_module)[0]
137
141
  if test.rc == TEST_FAILED:
138
142
  test.add_reason(f"Didn't succeed to config pacer interval {pacer_interval}")
139
143
  return test
140
- pixel_sim_thread = cert_data_sim.DataSimThread(test=test, num_of_pixels=1, duplicates=3,
144
+ pixel_sim_thread = cert_data_sim.DataSimThread(test=test, num_of_pixels=1, duplicates=2,
141
145
  delay=first_delay, pkt_types=[0], pixels_type=GEN3)
142
146
  pixel_sim_thread.start()
143
147
  time_sleep = first_duration - ((first_delay / 1000) / 2)
144
148
  print(f"sleep for {time_sleep} sec\n")
145
149
  time.sleep(time_sleep)
146
150
  pixel_sim_thread.delay = second_delay
147
- print(f"changing delay value to {second_delay}\n")
148
- scan_time = sum(delay.values()) + 20
151
+ scan_time = sum(duration for _, duration in delay_duration) + 20
149
152
  df = cert_common.data_scan(test, scan_time=scan_time, brg_data=(not test.internal_brg), gw_data=test.internal_brg)
150
153
  pixel_sim_thread.stop()
151
154
  df = df[[TAG_ID, TBC]]
155
+ lenght = len(df)
152
156
 
153
- if df.empty:
157
+ if len(df) <= 1:
154
158
  test.add_reason("Df is empty")
155
159
  test.rc = TEST_FAILED
156
160
  return test
@@ -158,41 +162,33 @@ def diff_rate(test, datapath_module):
158
162
  print(f"Df:\n {df}")
159
163
  # NOTE: all next rows are specific for the values: delay 0.5 and 3, and in relation address values 128 and 235
160
164
  # check if the last tbc value is as we expected for delay 3 sec we need to get 235 according to LUT table
161
- # we define tolerance of +-2 units for address value
165
+ # we define tolerance of +-10 units for address value
166
+
167
+ # Most important check, verify it converges to the correct value
162
168
  if df.iloc[-1][TBC] not in range(232, 237):
163
169
  test.rc = TEST_FAILED
164
170
  test.add_reason(f"TBC value: {df.iloc[-1][TBC]}, expected value [232,236]")
165
171
  print(f"TBC value: {df.iloc[-1][TBC]}, expected value [232,236] according to delay:{second_delay / 1000} sec")
166
- # skip the first packet in case the second one is still from the last delay value
167
- index = 0
168
- if df.iloc[1][TBC] in range(232, 237):
169
- index = 1
170
-
171
- # verify the first tbc value
172
- first_tbc = df.iloc[index][TBC]
173
- if first_tbc not in range(120, 145):
174
- test.rc = TEST_FAILED
175
- test.add_reason(f"TBC value: {first_tbc}, expected value [120,144]")
176
- print(f"TBC value of last packet before the delay change is wrong\n"
177
- f"TBC value: {first_tbc}, expected value [120,144] according to delay:{first_delay / 1000} sec")
178
-
179
- # check the first change of tbc value after delay changing which is verify the calculation of alpha filter
180
- second_tbc = df.iloc[index + 1][TBC]
181
- expected_address_value = 200
182
- # 4 is equal to 0.09 sec error
183
- threshold = 4 # 2 equal to 0.04 sec error
184
- if not expected_address_value - threshold <= second_tbc <= expected_address_value + threshold:
172
+ return test
173
+ # for loop that skip the first row and check if somewhere there is the expected gap 130 to 200
174
+ result = False
175
+ for i in range(0, lenght - 1):
176
+ prev = df.iloc[i][TBC]
177
+ current = df.iloc[i + 1][TBC]
178
+ if prev in range(120, 140) and current in range(190, 210):
179
+ print(f"Found the gap between {prev} and {current}")
180
+ print(f"row {i}: {df.iloc[i][TBC]}")
181
+ print(f"row {i + 1}: {df.iloc[i + 1][TBC]}")
182
+ result = True
183
+ if not result:
185
184
  test.rc = TEST_FAILED
186
- test.add_reason(f"TBC value: {second_tbc}, expected value [196,204]")
187
- print(f"first change of address value is wrong.\n"
188
- f"alpha filter probably is not define well\n"
189
- f"TBC value: {second_tbc}, expected value [196,204]")
185
+ test.add_reason("Didn't find the correct gap according to alpha filter calculation")
190
186
  return test
191
187
 
192
188
 
193
189
  def run(test):
194
190
  # "Test prolog"
195
- datapath_module = eval_pkt(f'ModuleDatapathV{test.active_brg.api_version}')
191
+ datapath_module = test.active_brg.datapath
196
192
  test = cert_common.test_prolog(test)
197
193
  if test.rc == TEST_FAILED:
198
194
  return cert_common.test_epilog(test)
@@ -201,7 +197,7 @@ def run(test):
201
197
  test = cert_config.brg_configure(test, fields=[BRG_PACER_INTERVAL], values=[pacer_interval], module=datapath_module)[0]
202
198
  if test.rc == TEST_FAILED:
203
199
  test.add_reason(f"Didn't succeed to config pacer interval {pacer_interval}")
204
- return test
200
+ return cert_common.test_epilog(test)
205
201
 
206
202
  RX_RATE_TEST_MAP = {"mid_values": mid_values, "diff_pacer": diff_pacer, "min_value": min_value,
207
203
  "max_value": max_value, "diff_rate": diff_rate}
@@ -212,9 +208,10 @@ def run(test):
212
208
  field_functionality_pass_fail_print(test, param.name)
213
209
  test.set_phase_rc(param.name, test.rc)
214
210
  test.add_phase_reason(param.name, test.reason)
215
- if test.rc == TEST_FAILED and test.exit_on_param_failure:
216
- break
217
- else:
218
- test.reset_result()
219
-
211
+ if test.rc == TEST_FAILED:
212
+ if test.exit_on_param_failure:
213
+ break # break the whole for loop and keep the test as failed
214
+ else:
215
+ test.reset_result() # reset result and continue to next param
216
+ continue
220
217
  return cert_common.test_epilog(test)
@@ -11,12 +11,11 @@
11
11
  "rep 3 - config pacer interval 22, then check repetition value = 3, pacer increment = 0, num of tags = all tags",
12
12
  "rep 2 - config pacer interval 12, then check repetition value = 2, pacer increment = 0, num of tags = all tags",
13
13
  "rep 1 - config pacer interval 7, then check repetition value = 1, pacer increment = 0, num of tags = all tags",
14
- "rep 1 adaptive pacer - config pacer interval 1, then check repetition value = 1, pacer increment = 3 , num of tags = all tags",
15
14
  "Test epilog"],
16
15
  "expectedOutcome": "all metrics values will be as expected then the bridge is working correctly and the algorithms are working correctly",
17
16
  "mandatory": 1,
18
17
  "multiBridgeTest": 0,
19
18
  "gwOnlyTest": 0,
20
19
  "internalBridge": 0,
21
- "allSupportedValues": ["rep3", "rep2", "rep1", "rep1_adaptive_pacer"]
20
+ "allSupportedValues": ["rep3", "rep2", "rep1"]
22
21
  }
@@ -165,17 +165,14 @@ def rep1_adaptive_pacer(test, param, datapath_module, num_of_sim_tags):
165
165
 
166
166
  def run(test):
167
167
  # Test prolog
168
- datapath_module = eval_pkt(f'ModuleDatapathV{test.active_brg.api_version}')
168
+ datapath_module = test.active_brg.datapath
169
169
  test = cert_common.test_prolog(test)
170
170
  if test.rc == TEST_FAILED:
171
171
  return cert_common.test_epilog(test, revert_brgs=True, modules=[datapath_module])
172
172
  # config GW deduplication pkts = 0
173
173
  print("Configuring GW with !deduplication_pkts 0")
174
174
  cert_config.gw_action(test, f"{DEDUPLICATION_PKTS} 0")
175
- if test.rc == TEST_FAILED and test.exit_on_param_failure:
176
- return cert_common.test_epilog(test, revert_gws=True)
177
-
178
- STRESS_TEST_MAP = {"rep3": rep3, "rep2": rep2, "rep1": rep1, "rep1_adaptive_pacer": rep1_adaptive_pacer}
175
+ STRESS_TEST_MAP = {"rep3": rep3, "rep2": rep2, "rep1": rep1}
179
176
  num_of_pixels = 300
180
177
  pixel_sim_thread = cert_data_sim.DataSimThread(test=test,
181
178
  num_of_pixels=num_of_pixels,
@@ -192,10 +189,11 @@ def run(test):
192
189
  field_functionality_pass_fail_print(test, param.name)
193
190
  test.set_phase_rc(param.name, test.rc)
194
191
  test.add_phase_reason(param.name, test.reason)
195
- if test.rc == TEST_FAILED and test.exit_on_param_failure:
196
- break
197
- else:
198
- test.reset_result()
192
+ if test.rc == TEST_FAILED:
193
+ if test.exit_on_param_failure:
194
+ break
195
+ else:
196
+ test.reset_result()
199
197
  time.sleep(5)
200
198
  pixel_sim_thread.stop()
201
199
  # Re-enable unified packets deduplication
@@ -11,12 +11,11 @@
11
11
  "rep 3 - config pacer interval 22, then check repetition value = 3, pacer increment = 0, num of tags = all tags",
12
12
  "rep 2 - config pacer interval 12, then check repetition value = 2, pacer increment = 0, num of tags = all tags",
13
13
  "rep 1 - config pacer interval 7, then check repetition value = 1, pacer increment = 0, num of tags = all tags",
14
- "rep 1 adaptive pacer - config pacer interval 1, then check repetition value = 1, pacer increment = 3 , num of tags = all tags",
15
14
  "Test epilog"],
16
15
  "expectedOutcome": "all metrics values will be as expected then the bridge is working correctly and the algorithms are working correctly",
17
16
  "mandatory": 1,
18
17
  "multiBridgeTest": 0,
19
18
  "gwOnlyTest": 0,
20
19
  "internalBridge": 0,
21
- "allSupportedValues": ["rep3", "rep2", "rep1", "rep1_adaptive_pacer"]
20
+ "allSupportedValues": ["rep3", "rep2", "rep1"]
22
21
  }
@@ -96,7 +96,7 @@ def combination_func(test, param, datapath_module, pacer_interval, num_of_sim_ta
96
96
  test = metric_checking_HB(test, check, hbs, tx_queue_expected, pacer_increment_expected)
97
97
  return test
98
98
  else:
99
- # in case it failed because the repetition value.
99
+ # in case it failed because the repetition value. the reason has been added in the metric_checking_df function
100
100
  return test
101
101
 
102
102
  time.sleep(30)
@@ -165,17 +165,14 @@ def rep1_adaptive_pacer(test, param, datapath_module, num_of_sim_tags):
165
165
 
166
166
  def run(test):
167
167
  # Test prolog
168
- datapath_module = eval_pkt(f'ModuleDatapathV{test.active_brg.api_version}')
168
+ datapath_module = test.active_brg.datapath
169
169
  test = cert_common.test_prolog(test)
170
170
  if test.rc == TEST_FAILED:
171
171
  return cert_common.test_epilog(test, revert_brgs=True, modules=[datapath_module])
172
172
  # config GW deduplication pkts = 0
173
173
  print("Configuring GW with !deduplication_pkts 0")
174
174
  cert_config.gw_action(test, f"{DEDUPLICATION_PKTS} 0")
175
- if test.rc == TEST_FAILED and test.exit_on_param_failure:
176
- return cert_common.test_epilog(test, revert_gws=True)
177
-
178
- STRESS_TEST_MAP = {"rep3": rep3, "rep2": rep2, "rep1": rep1, "rep1_adaptive_pacer": rep1_adaptive_pacer}
175
+ STRESS_TEST_MAP = {"rep3": rep3, "rep2": rep2, "rep1": rep1}
179
176
  num_of_pixels = 300
180
177
  pixel_sim_thread = cert_data_sim.DataSimThread(test=test,
181
178
  num_of_pixels=num_of_pixels,
@@ -192,10 +189,11 @@ def run(test):
192
189
  field_functionality_pass_fail_print(test, param.name)
193
190
  test.set_phase_rc(param.name, test.rc)
194
191
  test.add_phase_reason(param.name, test.reason)
195
- if test.rc == TEST_FAILED and test.exit_on_param_failure:
196
- break
197
- else:
198
- test.reset_result()
192
+ if test.rc == TEST_FAILED:
193
+ if test.exit_on_param_failure:
194
+ break
195
+ else:
196
+ test.reset_result()
199
197
  time.sleep(5)
200
198
  pixel_sim_thread.stop()
201
199
  # Re-enable unified packets deduplication
@@ -100,7 +100,7 @@ def run(test):
100
100
  if test.rc == TEST_FAILED:
101
101
  return cert_common.test_epilog(test)
102
102
 
103
- datapath_module = eval_pkt(f'ModuleDatapathV{test.active_brg.api_version}')
103
+ datapath_module = test.active_brg.datapath
104
104
 
105
105
  print("Configuring GW")
106
106
  # Set packets deduplication off to count the number of pkts from the BRG
@@ -50,7 +50,7 @@ def tx_repetitions_analysis(test, repetitions):
50
50
  def run(test):
51
51
 
52
52
  fields = [BRG_TX_REPETITION, BRG_PKT_FILTER, BRG_RX_CHANNEL]
53
- datapath_module = eval_pkt(f'ModuleDatapathV{test.active_brg.api_version}')
53
+ datapath_module = test.active_brg.datapath
54
54
 
55
55
  test = cert_common.test_prolog(test)
56
56
  if test.rc == TEST_FAILED:
@@ -58,24 +58,27 @@ def run(test):
58
58
 
59
59
  print("Configuring GW with !deduplication_pkts 0")
60
60
  cert_config.gw_action(test, f"{DEDUPLICATION_PKTS} 0")
61
- if test.rc == TEST_FAILED and test.exit_on_param_failure:
62
- return cert_common.test_epilog(test, revert_gws=True)
63
61
 
64
62
  for param in test.params:
65
63
  test = cert_config.brg_configure(test, fields=fields,
66
64
  values=[param.value, ag.PKT_FILTER_RANDOM_FIRST_ARRIVING_PKT, ag.RX_CHANNEL_37],
67
65
  module=datapath_module)[0]
68
- if test.rc == TEST_FAILED and test.exit_on_param_failure:
69
- break
66
+ if test.rc == TEST_FAILED:
67
+ if test.exit_on_param_failure:
68
+ break # break the whole for loop and keep the test as failed
69
+ else:
70
+ test.reset_result() # reset result and continue to next param
71
+ continue
70
72
  tx_repetitions_analysis(test, param.name)
71
73
  field_functionality_pass_fail_print(test, fields[0], value=param.name)
72
74
  test.set_phase_rc(param.name, test.rc)
73
75
  test.add_phase_reason(param.name, test.reason)
74
- if test.rc == TEST_FAILED and test.exit_on_param_failure:
75
- break
76
- else:
77
- test.reset_result()
78
-
76
+ if test.rc == TEST_FAILED:
77
+ if test.exit_on_param_failure:
78
+ break # break the whole for loop and keep the test as failed
79
+ else:
80
+ test.reset_result() # reset result and continue to next param
81
+ continue
79
82
  # Re-enable unified packets deduplication
80
83
  cert_config.gw_action(test, f"{DEDUPLICATION_PKTS} 1")
81
- return cert_common.test_epilog(test, revert_brgs=True, revert_gws=True, modules=[datapath_module])
84
+ return cert_common.test_epilog(test, revert_brgs=True, modules=[datapath_module])
@@ -34,26 +34,26 @@ LIS2DW12_NON_DEFAULT_SLEEP_DURATION = 35
34
34
 
35
35
  def get_brg_non_default_module_pkt(test, module):
36
36
  if 'Energy2400' in module.__name__:
37
- return cert_config.get_default_brg_pkt(test, pkt_type=eval_pkt(f'ModuleEnergy2400V{test.active_brg.api_version}'),
37
+ return cert_config.get_default_brg_pkt(test, pkt_type=test.active_brg.energy2400,
38
38
  duty_cycle=BRG_NON_DEFAULT_DUTY_CYCLE,
39
39
  output_power=BRG_NON_DEFAULT_OP_2_4, pattern=BRG_NON_DEFAULT_EP_2_4,
40
40
  signal_indicator_cycle=BRG_NON_DEFAULT_SIGNAL_INDICATOR_CYCLE_2_4,
41
41
  signal_indicator_rep=BRG_NON_DEFAULT_SIGNAL_INDICATOR_REP_2_4)
42
42
  elif 'EnergySub1G' in module.__name__:
43
- return cert_config.get_default_brg_pkt(test, pkt_type=eval_pkt(f'ModuleEnergySub1GV{test.active_brg.api_version}'),
43
+ return cert_config.get_default_brg_pkt(test, pkt_type=test.active_brg.energy_sub1g,
44
44
  duty_cycle=BRG_NON_DEFAULT_DUTY_CYCLE,
45
45
  signal_indicator_cycle=BRG_NON_DEFAULT_SIGNAL_INDICATOR_CYCLE_SUB1G,
46
46
  signal_indicator_rep=BRG_NON_DEFAULT_SIGNAL_INDICATOR_REP_SUB1G)
47
47
  elif 'PwrMgmt' in module.__name__:
48
- return cert_config.get_default_brg_pkt(test, pkt_type=eval_pkt(f'ModulePwrMgmtV{test.active_brg.api_version}'),
48
+ return cert_config.get_default_brg_pkt(test, pkt_type=test.active_brg.pwr_mgmt,
49
49
  dynamic_keep_alive_scan=BRG_NON_DEFAULT_PWR_MGMT_KEEP_ALIVE_SCAN)
50
50
  elif 'Custom' in module.__name__:
51
- return cert_config.get_default_brg_pkt(test, pkt_type=eval_pkt(f'ModuleCustomV{test.active_brg.api_version}'),
51
+ return cert_config.get_default_brg_pkt(test, pkt_type=test.active_brg.custom,
52
52
  motion_sensitivity_threshold=LIS2DW12_NON_DEFAULT_STATE_THRESHOLD,
53
53
  s2d_transition_time=LIS2DW12_NON_DEFAULT_WAKE_UP_DURATION,
54
54
  d2s_transition_time=LIS2DW12_NON_DEFAULT_SLEEP_DURATION)
55
55
  elif 'Datapath' in module.__name__:
56
- return cert_config.get_default_brg_pkt(test, pkt_type=eval_pkt(f'ModuleDatapathV{test.active_brg.api_version}'),
56
+ return cert_config.get_default_brg_pkt(test, pkt_type=test.active_brg.datapath,
57
57
  tx_repetition=BRG_NON_DEFAULT_TX_REPETITION,
58
58
  pkt_filter=BRG_NON_DEFAULT_PKT_FILTER,
59
59
  output_power=BRG_NON_DEFAULT_OP_2_4,
@@ -61,12 +61,12 @@ def get_brg_non_default_module_pkt(test, module):
61
61
  pacer_interval=BRG_NON_DEFAULT_PACER_INTERVAL,
62
62
  rssi_threshold=BRG_NON_DEFAULT_RSSI_THRESHOLD)
63
63
  elif 'Calibration' in module.__name__:
64
- return cert_config.get_default_brg_pkt(test, pkt_type=eval_pkt(f'ModuleCalibrationV{test.active_brg.api_version}'),
64
+ return cert_config.get_default_brg_pkt(test, pkt_type=test.active_brg.calibration,
65
65
  output_power=BRG_NON_DEFAULT_CALIB_OUTPUT_POWER,
66
66
  interval=BRG_NON_DEFAULT_CALIB_INTERVAL,
67
67
  pattern=BRG_NON_DEFAULT_CALIB_PATTERN)
68
68
  elif 'ExtSensors' in module.__name__:
69
- return cert_config.get_default_brg_pkt(test, pkt_type=eval_pkt(f'ModuleExtSensorsV{test.active_brg.api_version}'),
69
+ return cert_config.get_default_brg_pkt(test, pkt_type=test.active_brg.sensors,
70
70
  sensor0=ag.EXTERNAL_SENSORS_MINEWS1,
71
71
  sensor1=ag.EXTERNAL_SENSORS_VOLTAIC_BATT_LEVEL_DONGLE,
72
72
  rssi_threshold=BRG_NON_DEFAULT_RSSI_THRESHOLD,
@@ -253,7 +253,7 @@ def test_action_get_module(test):
253
253
  cert_config.send_brg_action(test, ag.ACTION_GET_MODULE, datapath=1)
254
254
  # analysis
255
255
  test = search_action_ack(test, ag.ACTION_GET_MODULE, datapath=1)
256
- test = scan_for_modules(test, [eval_pkt(f'ModuleDatapathV{test.active_brg.api_version}')])
256
+ test = scan_for_modules(test, [test.active_brg.datapath])
257
257
  if test.rc == TEST_FAILED:
258
258
  return test
259
259
 
@@ -349,7 +349,7 @@ def test_action_restore_defaults(test):
349
349
  if ag.MODULE_ENERGY_SUB1G in test.active_brg.sup_caps and cfg_once:
350
350
  cfg_once = False
351
351
  cfg_pkt = cert_config.get_default_brg_pkt(test,
352
- eval_pkt(f'ModuleEnergySub1GV{test.active_brg.api_version}'),
352
+ test.active_brg.energy_sub1g,
353
353
  **{BRG_PATTERN: ag.SUB1G_ENERGY_PATTERN_ISRAEL})
354
354
  test = cert_config.brg_configure(test, cfg_pkt=cfg_pkt)[0]
355
355
  if test.rc == TEST_FAILED:
@@ -388,9 +388,11 @@ def run(test):
388
388
  field_functionality_pass_fail_print(test, param.name)
389
389
  test.set_phase_rc(param.name, test.rc)
390
390
  test.add_phase_reason(param.name, test.reason)
391
- if test.rc == TEST_FAILED and test.exit_on_param_failure:
392
- break
393
- else:
394
- test.reset_result()
391
+ if test.rc == TEST_FAILED:
392
+ if test.exit_on_param_failure:
393
+ break # break the whole for loop and keep the test as failed
394
+ else:
395
+ test.reset_result() # reset result and continue to next param
396
+ continue
395
397
 
396
398
  return cert_common.test_epilog(test)
@@ -65,7 +65,7 @@ def run(test):
65
65
  utPrint(f"Configuring destination BRG {dest_brg.id_str} to RX Channel 10!")
66
66
  test.active_brg = dest_brg
67
67
  test = cert_config.brg_configure_ble5(test, fields=[BRG_RX_CHANNEL], values=[ag.RX_CHANNEL_10_250K],
68
- module=eval_pkt(f'ModuleDatapathV{test.active_brg.api_version}'))[0]
68
+ module=test.active_brg.datapath)[0]
69
69
  test.active_brg = src_brg
70
70
  time.sleep(5)
71
71
 
@@ -114,7 +114,7 @@ def run(test):
114
114
  # Energizing is OFF
115
115
  # Default cfg for 2400 is 0 == no energizing so we only eliminating sub1g energizing
116
116
  utPrint("Configuring the BRG to no energizing in sub1g", "WARNING")
117
- sub1g_module = eval_pkt(f'ModuleEnergySub1GV{test.active_brg.api_version}')
117
+ sub1g_module = test.active_brg.energy_sub1g
118
118
  test = cert_config.brg_configure(test, fields=[BRG_PATTERN], values=[ag.SUB1G_ENERGY_PATTERN_NO_ENERGIZING], module=sub1g_module)[0]
119
119
  if test.rc == TEST_FAILED and test.exit_on_param_failure:
120
120
  return cert_common.test_epilog(test, revert_brgs=True, modules=[sub1g_module])
@@ -190,7 +190,7 @@ def run(test):
190
190
  # ------------- Power management sleep & Keep Alive Mode ------------- #
191
191
  utPrint("Power management Sleep state & Keep Alive Mode check!", "HEADER")
192
192
  utPrint("Sending the BRG power management configuration in order to enter sleep state", "WARNING")
193
- pwr_mgmt_module = eval_pkt(f'ModulePwrMgmtV{test.active_brg.api_version}')
193
+ pwr_mgmt_module = test.active_brg.pwr_mgmt
194
194
  test, wltpkt = cert_common.brg_pwr_mgmt_turn_on(test)
195
195
  if test.rc == TEST_FAILED and test.exit_on_param_failure:
196
196
  # Preventing leaving brg in pwr mgmt, protection for on that worked yet no ack was received