wiliot-certificate 1.5.1a1__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.
Files changed (98) hide show
  1. brg_certificate/ag/wlt_cmd_if.html +3 -2
  2. brg_certificate/brg_certificate_cli.py +18 -3
  3. brg_certificate/cert_common.py +82 -26
  4. brg_certificate/cert_data_sim.py +22 -4
  5. brg_certificate/cert_defines.py +10 -5
  6. brg_certificate/cert_gw_sim.py +4 -2
  7. brg_certificate/cert_mqtt.py +7 -6
  8. brg_certificate/cert_prints.py +14 -1
  9. brg_certificate/cert_protobuf.py +7 -7
  10. brg_certificate/cert_results.py +91 -64
  11. brg_certificate/cert_utils.py +9 -4
  12. brg_certificate/certificate_bcc_sanity_test_list.txt +10 -5
  13. brg_certificate/certificate_bcc_test_list.txt +14 -9
  14. brg_certificate/certificate_sanity_test_list.txt +10 -4
  15. brg_certificate/certificate_test_list.txt +13 -9
  16. brg_certificate/tests/calibration/interval_test/interval_test.json +2 -2
  17. brg_certificate/tests/calibration/output_power_test/output_power_test.json +3 -2
  18. brg_certificate/tests/calibration/pattern_test/pattern_test.json +2 -2
  19. brg_certificate/tests/calibration/pattern_test/pattern_test.py +25 -26
  20. brg_certificate/tests/datapath/aging_test/aging_test.json +4 -5
  21. brg_certificate/tests/datapath/aging_test/aging_test.py +39 -32
  22. brg_certificate/tests/datapath/num_of_tags_test/num_of_tags_test.json +2 -2
  23. brg_certificate/tests/datapath/num_of_tags_test/num_of_tags_test.py +12 -11
  24. brg_certificate/tests/datapath/output_power_test/output_power_test.json +2 -2
  25. brg_certificate/tests/datapath/output_power_test/output_power_test.py +2 -1
  26. brg_certificate/tests/datapath/pacer_interval_ble5_test/pacer_interval_ble5_test.json +3 -3
  27. brg_certificate/tests/datapath/pacer_interval_ble5_test/pacer_interval_ble5_test.py +6 -3
  28. brg_certificate/tests/datapath/pacer_interval_tags_count_test/pacer_interval_tags_count_test.json +2 -2
  29. brg_certificate/tests/datapath/pacer_interval_tags_count_test/pacer_interval_tags_count_test.py +6 -3
  30. brg_certificate/tests/datapath/pacer_interval_test/pacer_interval_test.json +2 -2
  31. brg_certificate/tests/datapath/pacer_interval_test/pacer_interval_test.py +4 -2
  32. brg_certificate/tests/datapath/pattern_test/pattern_test.json +2 -2
  33. brg_certificate/tests/datapath/pattern_test/pattern_test.py +2 -1
  34. brg_certificate/tests/datapath/pkt_filter_ble5_test/pkt_filter_ble5_test.json +3 -3
  35. brg_certificate/tests/datapath/pkt_filter_ble5_test/pkt_filter_ble5_test.py +12 -5
  36. brg_certificate/tests/datapath/pkt_filter_gen3_test/pkt_filter_gen3_test.json +2 -2
  37. brg_certificate/tests/datapath/pkt_filter_gen3_test/pkt_filter_gen3_test.py +11 -6
  38. brg_certificate/tests/datapath/pkt_filter_test/pkt_filter_test.json +2 -2
  39. brg_certificate/tests/datapath/pkt_filter_test/pkt_filter_test.py +11 -7
  40. brg_certificate/tests/datapath/rssi_threshold_test/rssi_threshold_test.json +3 -3
  41. brg_certificate/tests/datapath/rssi_threshold_test/rssi_threshold_test.py +7 -5
  42. brg_certificate/tests/datapath/rx_channel_test/rx_channel_test.json +2 -2
  43. brg_certificate/tests/datapath/rx_channel_test/rx_channel_test.py +7 -3
  44. brg_certificate/tests/datapath/rx_rate_gen2_test/rx_rate_gen2_test.json +3 -3
  45. brg_certificate/tests/datapath/rx_rate_gen2_test/rx_rate_gen2_test.py +107 -73
  46. brg_certificate/tests/datapath/rx_rate_gen3_test/rx_rate_gen3_test.json +3 -3
  47. brg_certificate/tests/datapath/rx_rate_gen3_test/rx_rate_gen3_test.py +128 -118
  48. brg_certificate/tests/datapath/stress_gen3_test/stress_gen3_test.json +8 -8
  49. brg_certificate/tests/datapath/stress_gen3_test/stress_gen3_test.py +102 -101
  50. brg_certificate/tests/datapath/stress_test/stress_test.json +14 -15
  51. brg_certificate/tests/datapath/stress_test/stress_test.py +102 -101
  52. brg_certificate/tests/datapath/tx_repetition_algo_test/tx_repetition_algo_test.json +2 -2
  53. brg_certificate/tests/datapath/tx_repetition_algo_test/tx_repetition_algo_test.py +7 -2
  54. brg_certificate/tests/datapath/tx_repetition_test/tx_repetition_test.json +2 -2
  55. brg_certificate/tests/datapath/tx_repetition_test/tx_repetition_test.py +8 -6
  56. brg_certificate/tests/edge_mgmt/actions_test/actions_test.json +2 -2
  57. brg_certificate/tests/edge_mgmt/actions_test/actions_test.py +2 -18
  58. brg_certificate/tests/edge_mgmt/brg2brg_ota_ble5_test/brg2brg_ota_ble5_test.json +14 -8
  59. brg_certificate/tests/edge_mgmt/brg2brg_ota_test/brg2brg_ota_test.json +13 -8
  60. brg_certificate/tests/edge_mgmt/leds_test/leds_test.json +2 -2
  61. brg_certificate/tests/edge_mgmt/leds_test/leds_test.py +22 -9
  62. brg_certificate/tests/edge_mgmt/ota_test/ota_test.json +2 -2
  63. brg_certificate/tests/edge_mgmt/ota_test/ota_test.py +6 -5
  64. brg_certificate/tests/edge_mgmt/{stat_test/stat_test.json → periodic_msgs_test/periodic_msgs_test.json} +3 -3
  65. brg_certificate/tests/edge_mgmt/{stat_test/stat_test.py → periodic_msgs_test/periodic_msgs_test.py} +4 -4
  66. brg_certificate/tests/energy2400/duty_cycle_test/duty_cycle_test.json +3 -3
  67. brg_certificate/tests/energy2400/duty_cycle_test/duty_cycle_test.py +2 -1
  68. brg_certificate/tests/energy2400/output_power_test/output_power_test.json +4 -3
  69. brg_certificate/tests/energy2400/output_power_test/output_power_test.py +2 -1
  70. brg_certificate/tests/energy2400/pattern_test/pattern_test.json +3 -3
  71. brg_certificate/tests/energy2400/pattern_test/pattern_test.py +2 -1
  72. brg_certificate/tests/energy2400/signal_indicator_ble5_10_250k_test/signal_indicator_ble5_10_250k_test.json +5 -5
  73. brg_certificate/tests/energy2400/signal_indicator_ble5_10_250k_test/signal_indicator_ble5_10_250k_test.py +109 -112
  74. brg_certificate/tests/energy2400/signal_indicator_ble5_10_500k_test/signal_indicator_ble5_10_500k_test.json +5 -5
  75. brg_certificate/tests/energy2400/signal_indicator_ble5_10_500k_test/signal_indicator_ble5_10_500k_test.py +111 -114
  76. brg_certificate/tests/energy2400/signal_indicator_sub1g_2_4_test/signal_indicator_sub1g_2_4_test.json +12 -6
  77. brg_certificate/tests/energy2400/signal_indicator_sub1g_2_4_test/signal_indicator_sub1g_2_4_test.py +45 -57
  78. brg_certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.json +4 -4
  79. brg_certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.py +158 -172
  80. brg_certificate/tests/energy_sub1g/duty_cycle_test/duty_cycle_test.json +2 -2
  81. brg_certificate/tests/energy_sub1g/duty_cycle_test/duty_cycle_test.py +2 -1
  82. brg_certificate/tests/energy_sub1g/pattern_test/pattern_test.json +4 -3
  83. brg_certificate/tests/energy_sub1g/pattern_test/pattern_test.py +2 -1
  84. brg_certificate/tests/energy_sub1g/signal_indicator_functionality_test/signal_indicator_functionality_test.json +13 -7
  85. brg_certificate/tests/energy_sub1g/signal_indicator_functionality_test/signal_indicator_functionality_test.py +117 -124
  86. brg_certificate/tests/energy_sub1g/signal_indicator_test/signal_indicator_test.json +2 -2
  87. brg_certificate/tests/energy_sub1g/signal_indicator_test/signal_indicator_test.py +2 -1
  88. brg_certificate/tests/pwr_mgmt/pwr_mgmt_test/pwr_mgmt_test.json +18 -0
  89. brg_certificate/tests/pwr_mgmt/pwr_mgmt_test/pwr_mgmt_test.py +84 -0
  90. brg_certificate/tests/sensors/ext_sensor_test/ext_sensor_test.json +21 -0
  91. brg_certificate/tests/sensors/ext_sensor_test/ext_sensor_test.py +306 -0
  92. brg_certificate/wlt_types.py +2 -1
  93. {wiliot_certificate-1.5.1a1.dist-info → wiliot_certificate-1.5.2a1.dist-info}/METADATA +40 -40
  94. {wiliot_certificate-1.5.1a1.dist-info → wiliot_certificate-1.5.2a1.dist-info}/RECORD +98 -94
  95. {wiliot_certificate-1.5.1a1.dist-info → wiliot_certificate-1.5.2a1.dist-info}/WHEEL +1 -1
  96. {wiliot_certificate-1.5.1a1.dist-info → wiliot_certificate-1.5.2a1.dist-info}/entry_points.txt +0 -0
  97. {wiliot_certificate-1.5.1a1.dist-info → wiliot_certificate-1.5.2a1.dist-info}/licenses/LICENSE +0 -0
  98. {wiliot_certificate-1.5.1a1.dist-info → wiliot_certificate-1.5.2a1.dist-info}/top_level.txt +0 -0
@@ -1,11 +1,12 @@
1
1
  import os
2
2
  import tabulate
3
3
  import subprocess
4
+ import datetime
4
5
  from reportlab.lib import colors
5
6
  from reportlab.lib.pagesizes import letter
6
7
  from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer, PageBreak, KeepTogether, Image
7
8
  from reportlab.lib.styles import ParagraphStyle
8
- from reportlab.lib.enums import TA_CENTER, TA_LEFT
9
+ from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_RIGHT
9
10
 
10
11
  # Local imports
11
12
  import brg_certificate.cert_utils as cert_utils
@@ -17,9 +18,30 @@ from brg_certificate.cert_defines import *
17
18
  ##################################
18
19
  # GENERIC
19
20
  ##################################
21
+ # Defines
22
+ WLT_CERT_HEADLINE = "Wiliot Certificate Results"
23
+ WLT_CERT_PASS_HEADLINE = "Wiliot Certificate Passed!"
24
+ WLT_CERT_FAIL_HEADLINE = "Wiliot Certificate Failed!"
25
+ WLT_CERT_ERROR_HEADLINE = "Wiliot Certificate Error!"
26
+ SUMMARY_HEADLINE = "Summary"
27
+ RUN_INFO = "Run Information"
28
+ RUN_DATETIME = "Run Time & Date"
29
+ RUN_DUR = "Run Duration"
30
+ CERT_VER = "Certificate Version"
31
+ TESTING_DEVICE_INFO = "Testing Device Information"
32
+ TESTED_DEVICE_INFO = "Tested Device Information"
33
+ SIM = "Simulator"
34
+ BRG = "Bridge"
35
+ BLE_MAC_ADDRESS = "BLE MAC Address"
36
+ BOARD_TYPE = "Board Type"
37
+ BLE_VER = "BLE Version"
38
+ SUP_API_VER = "Supported API Version"
39
+
20
40
  result_map = {TEST_FAILED: cert_prints.color("RED", "FAIL"), TEST_SKIPPED: cert_prints.color("WARNING", "SKIPPED"),
21
41
  TEST_PASSED: cert_prints.color("GREEN", "PASS"), TEST_INIT: cert_prints.color("CYAN", "INIT")}
22
42
  pass_or_fail = lambda obj : result_map[obj.rc]
43
+ param_name_to_title = lambda s : ' '.join(word.lower().capitalize() for word in s.split('_')).replace('2 4', '2.4') if '_' in s else s
44
+
23
45
  class TestResult:
24
46
  def __init__(self, name="", devices_to_print="", test_table=None, result=None, duration=0, purpose="", kb_link="", compliance="", test_skipped=False):
25
47
  self.name = name
@@ -78,7 +100,7 @@ def get_update_status_from_log_file(log_file="update_log.txt"):
78
100
  break
79
101
  return update_status
80
102
 
81
- def generate_results_files(html=True, pdf=True, failures=0, skipped=0, start_time=0, duration=0, brg=None, internal_brg=None, tests=[], error=None, pipeline=False):
103
+ def generate_results_files(html=True, pdf=True, failures=0, skipped=0, start_time=datetime.datetime.now(), duration=0, brg=None, internal_brg=None, tests=[], error=None, pipeline=False):
82
104
  # Generate HTML file
83
105
  if html:
84
106
  f = open(os.path.join(BASE_DIR, UT_RESULT_FILE_HTML), "w", encoding="utf-8")
@@ -89,38 +111,38 @@ def generate_results_files(html=True, pdf=True, failures=0, skipped=0, start_tim
89
111
  stdout=subprocess.PIPE, shell=True, cwd=os.environ['BITBUCKET_CLONE_DIR'])
90
112
  output, err = p.communicate()
91
113
  if error:
92
- f.write("<br><h1 style='color:#ab0000'>Wiliot Certificate Error!</h1><br>")
114
+ f.write(f"<br><h1 style='color:#ab0000'>{WLT_CERT_ERROR_HEADLINE}</h1><br>")
93
115
  if pipeline:
94
116
  f.write("<hr>" + output.decode("utf-8") + "<br>")
95
117
  f.write("<p><a href='https://bitbucket.org/wiliot/wiliot-nordic-firmware/commits/{}'>Commit page on bitbucket</a><hr>".format(os.environ['BITBUCKET_COMMIT']))
96
118
  f.write(update_status + "<br><br>")
97
119
  f.write(error + "<br><br>")
98
- f.write("Run duration: {} <br><br>".format(str(duration).split(".")[0]))
120
+ f.write(f"{RUN_DUR}: {str(duration).split(".")[0]} <br><br>")
99
121
  if brg:
100
- f.write("Bridge version: {} <br><br>".format(brg.version))
122
+ f.write(f"{BRG} {BLE_VER}: {brg.version} <br><br>")
101
123
  elif tests:
102
124
  if not failures and ("successfully!" in update_status or "skipped!" in update_status or not pipeline):
103
- f.write("<br><h1 style='color:#00AB83'>Wiliot Certificate Passed!</h1>")
125
+ f.write(f"<br><h1 style='color:#00AB83'>{WLT_CERT_PASS_HEADLINE}</h1>")
104
126
  else:
105
- f.write("<br><h1 style='color:#ab0000'>Wiliot Certificate Failed!</h1>")
127
+ f.write(f"<br><h1 style='color:#ab0000'>{WLT_CERT_FAIL_HEADLINE}</h1>")
106
128
  if pipeline:
107
129
  f.write("<hr>" + output.decode("utf-8") + "<br>")
108
130
  f.write("<p><a href='https://bitbucket.org/wiliot/wiliot-nordic-firmware/commits/{}'>Commit page on bitbucket</a><hr>".format(os.environ['BITBUCKET_COMMIT']))
109
131
  f.write(update_status + "<br><br>")
110
- f.write("Run date: {} <br><br>".format(start_time.strftime('%d/%m/%Y, %H:%M:%S')))
111
- f.write("Tests duration: {} <br><br>".format(str(duration).split(".")[0]))
112
- f.write("Certificate version: {} <br><br>".format(CERT_VERSION))
132
+ f.write(f"{RUN_DATETIME}: {start_time.strftime('%d/%m/%Y, %H:%M:%S')} <br><br>")
133
+ f.write(f"{RUN_DUR}: {str(duration).split(".")[0]} <br><br>")
134
+ f.write(f"{CERT_VER}: {CERT_VERSION} <br><br>")
113
135
  if internal_brg:
114
- f.write("BLE simulator mac: {} <br><br>".format(internal_brg.id_str))
115
- f.write("BLE simulator version: {} <br><br>".format(internal_brg.version))
116
- f.write("Tested bridge ID: {} <br><br>".format(brg.id_str))
136
+ f.write(f"{SIM} {BLE_MAC_ADDRESS}: {internal_brg.id_str} <br><br>")
137
+ f.write(f"{SIM} {BLE_VER}: {internal_brg.version} <br><br>")
117
138
  if brg:
118
- f.write("Bridge version: {} <br><br>".format(brg.version))
139
+ f.write(f"{BRG} {BLE_MAC_ADDRESS}: {brg.id_str} <br><br>")
140
+ f.write(f"{BRG} {BLE_VER}: {brg.version} <br><br>")
119
141
  f.write(tabulate.tabulate([[len(tests)-(failures+skipped), skipped, failures, len(tests)]], headers=["PASSED", "SKIPPED", "FAILED", "TOTAL"], tablefmt="html"))
120
142
  f.write(generate_tests_table(tests, html=True))
121
143
  f.write("<br><br>")
122
144
  if pipeline:
123
- f.write("<p><a href='https://bitbucket.org/wiliot/wiliot-nordic-firmware/pipelines/results/{}'>Build's page and artifacts on bitbucket</a></p><br><br>".format(os.environ['BITBUCKET_BUILD_NUMBER']))
145
+ f.write(f"<p><a href='https://bitbucket.org/wiliot/wiliot-nordic-firmware/pipelines/results/{os.environ['BITBUCKET_BUILD_NUMBER']}'>Build's page and artifacts on bitbucket</a></p><br><br>")
124
146
  f.write("<img src='https://www.wiliot.com/src/img/svg/logo.svg' width='100' height='40' alt='Wiliot logo'>")
125
147
  f.write(HTML_END)
126
148
  f.close()
@@ -138,40 +160,42 @@ def generate_results_files(html=True, pdf=True, failures=0, skipped=0, start_tim
138
160
 
139
161
  # Title and Summary
140
162
  red_header = STYLES_PDF.get("RED_HEADER", ParagraphStyle("Default"))
141
- green_header = STYLES_PDF.get("GREEN_HEADER", ParagraphStyle("Default"))
163
+ black_header = STYLES_PDF.get("BLACK_HEADER", ParagraphStyle("Default"))
142
164
  module_header = STYLES_PDF.get("MODULE_HEADER", ParagraphStyle("Default"))
143
165
  test_header = STYLES_PDF.get("TEST_LINK_HEADER", ParagraphStyle("Default"))
144
166
  test_purpose = STYLES_PDF.get("TEST_HEADER", ParagraphStyle("Default"))
145
167
  bold_text_style = STYLES_PDF.get("BLACK_BOLD", ParagraphStyle("Default"))
168
+ bold_right_text_style = STYLES_PDF.get("BLUE_BOLD_RIGHT", ParagraphStyle("Default"))
146
169
  centered_text_style = STYLES_PDF.get("BLACK", ParagraphStyle("Default"))
147
170
  if error:
148
- title = Paragraph("<b>Wiliot Certificate Error!</b>", red_header)
171
+ title = Paragraph(f"<b>{WLT_CERT_ERROR_HEADLINE}</b>", red_header)
149
172
  hdr_page.append(title)
150
173
  hdr_page.append(Spacer(1, 20))
151
174
  hdr_page.append(Paragraph(f"{error}", bold_text_style))
152
175
  else:
153
- title = Paragraph("<b>Wiliot Certificate Passed!</b>", green_header) if not failures else Paragraph("<b>Wiliot Certificate Failed!</b>", red_header)
176
+ title = Paragraph(f"<b>{WLT_CERT_HEADLINE}</b>", black_header)
154
177
  hdr_page.append(title)
155
178
  hdr_page.append(Spacer(1, 20))
156
- hdr_page.append(Paragraph(f"<b>Summary</b>", module_header))
179
+ hdr_page.append(Paragraph(f"<a name='{SUMMARY_HEADLINE}'/><b>{SUMMARY_HEADLINE}</b>", module_header))
157
180
  hdr_page.append(Spacer(1, 20))
158
- hdr_page.append(Paragraph("<u>Run Info:</u>", bold_text_style))
159
- hdr_page.append(Paragraph(f"Run date: {start_time.strftime('%d/%m/%Y, %H:%M:%S')}", bold_text_style))
160
- hdr_page.append(Paragraph(f"Tests duration: {str(duration).split('.')[0]}", bold_text_style))
161
- hdr_page.append(Paragraph(f"Certificate version: {CERT_VERSION}", bold_text_style))
181
+ hdr_page.append(Paragraph(f"<u>{RUN_INFO}:</u>", bold_text_style))
182
+ hdr_page.append(Paragraph(f"{RUN_DATETIME}: {start_time.strftime('%d/%m/%Y, %H:%M:%S')}", bold_text_style))
183
+ hdr_page.append(Paragraph(f"{RUN_DUR}: {str(duration).split('.')[0]}", bold_text_style))
184
+ hdr_page.append(Paragraph(f"{CERT_VER}: {CERT_VERSION}", bold_text_style))
162
185
  hdr_page.append(Spacer(1, 10))
163
- hdr_page.append(Paragraph("<u>Testing Device Info:</u>", bold_text_style))
164
- if internal_brg:
165
- hdr_page.append(Paragraph(f"BLE simulator mac: {internal_brg.id_str}", bold_text_style))
166
- hdr_page.append(Paragraph(f"BLE simulator version: {internal_brg.version}", bold_text_style))
167
- hdr_page.append(Paragraph(f"BLE simulator supported API version: {internal_brg.api_version}", bold_text_style))
168
- hdr_page.append(Spacer(1, 10))
169
- hdr_page.append(Paragraph("<u>Tested Device Info:</u>", bold_text_style))
170
186
  if brg:
171
- hdr_page.append(Paragraph(f"Tested bridge ID: {brg.id_str}", bold_text_style))
172
- hdr_page.append(Paragraph(f"Tested bridge board type: {ag.BOARD_TYPES_LIST[brg.board_type]}", bold_text_style))
173
- hdr_page.append(Paragraph(f"Tested bridge BLE version: {brg.version}", bold_text_style))
174
- hdr_page.append(Paragraph(f"Tested bridge supported API version: {brg.api_version}", bold_text_style))
187
+ hdr_page.append(Paragraph(f"<u>{TESTED_DEVICE_INFO}:</u>", bold_text_style))
188
+ hdr_page.append(Paragraph(f"{BRG} {BLE_MAC_ADDRESS}: {brg.id_str}", bold_text_style))
189
+ hdr_page.append(Paragraph(f"{BRG} {BOARD_TYPE}: {ag.BOARD_TYPES_LIST[brg.board_type]}", bold_text_style))
190
+ hdr_page.append(Paragraph(f"{BRG} {BLE_VER}: {brg.version}", bold_text_style))
191
+ hdr_page.append(Paragraph(f"{BRG} {SUP_API_VER}: {brg.api_version}", bold_text_style))
192
+ hdr_page.append(Spacer(1, 10))
193
+ if internal_brg:
194
+ hdr_page.append(Paragraph(f"<u>{TESTING_DEVICE_INFO}:</u>", bold_text_style))
195
+ hdr_page.append(Paragraph(f"{SIM} {BLE_MAC_ADDRESS}: {internal_brg.id_str}", bold_text_style))
196
+ hdr_page.append(Paragraph(f"{SIM} {BOARD_TYPE}: {ag.BOARD_TYPES_LIST[internal_brg.board_type]}", bold_text_style))
197
+ hdr_page.append(Paragraph(f"{SIM} {BLE_VER}: {internal_brg.version}", bold_text_style))
198
+ hdr_page.append(Paragraph(f"{SIM} {SUP_API_VER}: {internal_brg.api_version}", bold_text_style))
175
199
  hdr_page.append(Spacer(1, 20))
176
200
 
177
201
  # Count Table
@@ -180,7 +204,7 @@ def generate_results_files(html=True, pdf=True, failures=0, skipped=0, start_tim
180
204
  [len(tests)-(failures+skipped), skipped, failures, len(tests)]
181
205
  ]
182
206
  count_table = Table(count_data)
183
- count_table.setStyle(INNER_TABLE_STYLE)
207
+ count_table.setStyle(inner_table_style('CENTER'))
184
208
  hdr_page.append(count_table)
185
209
  hdr_page.append(Spacer(1, 20))
186
210
 
@@ -190,31 +214,33 @@ def generate_results_files(html=True, pdf=True, failures=0, skipped=0, start_tim
190
214
  for module, test_results in results_per_module.items():
191
215
  module_objects = []
192
216
  module_skipped = True # Remains True if all tests are skipped
193
- module_objects.append(Paragraph(f"<b>{module + ' Module' if module else 'Edge Management'}</b>", module_header))
217
+ module_objects.append(Paragraph(f"<b>{module + ' Module' if not 'Edge' in module else module}</b>", module_header))
194
218
  module_objects.append(Spacer(1, 20))
195
219
  for test_result in test_results:
196
220
  test_objects = []
197
- name = Paragraph(f'<a href="#{test_result.name}">{test_result.name}</a>', centered_text_style) if not test_result.test_skipped else test_result.name
221
+ name = Paragraph(f'<a href="#{module}_{test_result.name}">{test_result.name}</a>', centered_text_style) if not test_result.test_skipped else test_result.name
198
222
  summary_data += [[module, name, test_result.result, test_result.compliance]]
199
- test_objects.append(Paragraph(f'<a name="{test_result.name}"/><a href="{test_result.kb_link}">{test_result.name}</a>', test_header))
200
- test_objects.append(Spacer(1, 10))
201
- test_objects.append(Paragraph(test_result.purpose, test_purpose))
223
+ test_objects.append(Paragraph(f'<a name="{module}_{test_result.name}"/><a href="{test_result.kb_link}">{test_result.name}</a>', test_header))
202
224
  test_objects.append(Spacer(1, 10))
203
225
  test_objects.append(test_result.result)
204
226
  test_objects.append(Spacer(1, 10))
227
+ test_objects.append(Paragraph(test_result.purpose, test_purpose))
228
+ test_objects.append(Spacer(1, 10))
205
229
  if not test_result.test_skipped:
206
230
  module_skipped = False # Set to False if at least one test isn't skipped
207
231
  test_objects.append(Paragraph(f"Tested devices: {test_result.devices}", bold_text_style))
208
232
  test_objects.append(Paragraph(f"Test duration: {test_result.duration}", bold_text_style))
209
233
  test_objects.append(Spacer(1, 10))
210
234
  test_objects.append(test_result.test_table)
235
+ test_objects.append(Spacer(1, 10))
236
+ test_objects.append(Paragraph(f"<a href='#{SUMMARY_HEADLINE}'>Back to {SUMMARY_HEADLINE}</a>", bold_right_text_style))
211
237
  test_objects.append(Spacer(1, 20))
212
238
  module_objects.append(KeepTogether(test_objects))
213
239
  if not module_skipped:
214
240
  elements += module_objects
215
241
  elements.append(PageBreak())
216
242
  summary_table = Table([["Module", "Name", "Result", "Compliance"]] + summary_data)
217
- summary_table.setStyle(INNER_TABLE_STYLE)
243
+ summary_table.setStyle(inner_table_style('LEFT'))
218
244
  elements = hdr_page + [summary_table, PageBreak()] + elements
219
245
 
220
246
  doc.build(elements)
@@ -297,18 +323,19 @@ HTML_END = """
297
323
  # PDF
298
324
  ##################################
299
325
  STYLES_PDF = {
300
- "GREEN_HEADER": ParagraphStyle("Green Header", fontName="Helvetica-Bold", fontSize=20, textColor=colors.green, alignment=TA_CENTER),
326
+ "BLACK_HEADER": ParagraphStyle("Black Header", fontName="Helvetica-Bold", fontSize=20, textColor=colors.black, alignment=TA_CENTER),
301
327
  "RED_HEADER": ParagraphStyle("Red Header", fontName="Helvetica-Bold", fontSize=20, textColor=colors.red, alignment=TA_CENTER),
302
328
  "MODULE_HEADER": ParagraphStyle("Module Header", fontName="Helvetica-Bold", fontSize=16, textColor=colors.navy, alignment=TA_CENTER),
303
- "TEST_HEADER": ParagraphStyle("Test Header", fontName="Helvetica-Bold", fontSize=12, textColor=colors.black, alignment=TA_CENTER),
304
- "TEST_LINK_HEADER": ParagraphStyle('Test Link Header', fontName="Helvetica-Bold", fontSize=14, textColor=colors.blue, underline=True, alignment=TA_CENTER),
305
- "BLACK": ParagraphStyle("Black", fontName="Helvetica", fontSize=9, textColor=colors.black, splitLongWords=False, alignment=TA_CENTER, wordWrap = 'CJK'),
329
+ "TEST_HEADER": ParagraphStyle("Test Header", fontName="Helvetica-Bold", fontSize=12, textColor=colors.black, alignment=TA_LEFT),
330
+ "TEST_LINK_HEADER": ParagraphStyle('Test Link Header', fontName="Helvetica-Bold", fontSize=14, textColor=colors.blue, alignment=TA_LEFT),
331
+ "BLACK": ParagraphStyle("Black", fontName="Helvetica", fontSize=9, textColor=colors.black, splitLongWords=False, alignment=TA_LEFT, wordWrap = 'CJK'),
306
332
  "BLACK_BOLD": ParagraphStyle("Black Bold", fontName="Helvetica-Bold", fontSize=9, textColor=colors.black, splitLongWords=False, alignment=TA_LEFT, wordWrap = 'CJK'),
333
+ "BLUE_BOLD_RIGHT": ParagraphStyle("Black Bold", fontName="Helvetica-Bold", fontSize=9, textColor=colors.blue, splitLongWords=False, alignment=TA_RIGHT, wordWrap = 'CJK'),
307
334
  "BLUE": ParagraphStyle("Blue", fontName="Helvetica-Bold", fontSize=9, textColor=colors.navy, splitLongWords=False, alignment=TA_CENTER),
308
- "CYAN": ParagraphStyle("Cyan", fontName="Helvetica-Bold", fontSize=9, textColor=colors.cyan, splitLongWords=False, alignment=TA_CENTER),
309
- "GREEN": ParagraphStyle("Green", fontName="Helvetica-Bold", fontSize=9, textColor=colors.green, splitLongWords=False, alignment=TA_CENTER),
310
- "WARNING": ParagraphStyle("Warning", fontName="Helvetica-Bold", fontSize=9, textColor=colors.gold, splitLongWords=False, alignment=TA_CENTER),
311
- "RED": ParagraphStyle("Red", fontName="Helvetica-Bold", fontSize=9, textColor=colors.red, splitLongWords=False, alignment=TA_CENTER),
335
+ "CYAN": ParagraphStyle("Cyan", fontName="Helvetica-Bold", fontSize=9, textColor=colors.cyan, splitLongWords=False, alignment=TA_LEFT),
336
+ "GREEN": ParagraphStyle("Green", fontName="Helvetica-Bold", fontSize=9, textColor=colors.green, splitLongWords=False, alignment=TA_LEFT),
337
+ "WARNING": ParagraphStyle("Warning", fontName="Helvetica-Bold", fontSize=9, textColor=colors.gold, splitLongWords=False, alignment=TA_LEFT),
338
+ "RED": ParagraphStyle("Red", fontName="Helvetica-Bold", fontSize=9, textColor=colors.red, splitLongWords=False, alignment=TA_LEFT),
312
339
  }
313
340
  def color_pdf(c, t):
314
341
  style = STYLES_PDF.get(c, ParagraphStyle("Default"))
@@ -317,17 +344,17 @@ pdf_result_map = {TEST_FAILED: color_pdf("RED", "FAILED"), TEST_SKIPPED: color_p
317
344
  TEST_PASSED: color_pdf("GREEN", "PASSED"), TEST_INIT: color_pdf("CYAN", "INIT")}
318
345
  pass_or_fail_pdf = lambda obj : pdf_result_map[obj.rc]
319
346
 
320
- INNER_TABLE_STYLE = TableStyle([
321
- ('BACKGROUND', (0, 0), (-1, 0), colors.grey),
322
- ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
323
- ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
324
- ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
325
- ('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),
326
- ('FONTSIZE', (0, 0), (-1, 0), 9),
327
- ('BOTTOMPADDING', (0, 0), (-1, 0), 12),
328
- ('BACKGROUND', (0, 1), (-1, -1), colors.whitesmoke),
329
- ('WORDWRAP', (0, 0), (-1, -1), False),
330
- ])
347
+ inner_table_style = lambda align : TableStyle([
348
+ ('BACKGROUND', (0, 0), (-1, 0), colors.grey),
349
+ ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
350
+ ('ALIGN', (0, 0), (-1, -1), f'{align}'),
351
+ ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'),
352
+ ('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),
353
+ ('FONTSIZE', (0, 0), (-1, 0), 9),
354
+ ('BOTTOMPADDING', (0, 0), (-1, 0), 12),
355
+ ('BACKGROUND', (0, 1), (-1, -1), colors.whitesmoke),
356
+ ('WORDWRAP', (0, 0), (-1, -1), False),
357
+ ])
331
358
 
332
359
  def generate_results_per_module_for_pdf(tests=[]):
333
360
  text_style = STYLES_PDF.get("BLACK", ParagraphStyle("Default"))
@@ -335,14 +362,14 @@ def generate_results_per_module_for_pdf(tests=[]):
335
362
  for test in tests:
336
363
  devices_to_print = (test.gw if not test.brg0 or test.gw_only else
337
364
  (f"{test.brg0.id_str}\n{test.brg1.id_str}" if test.brg1 and test.multi_brg else test.brg0.id_str))
338
- inner_table = [[Paragraph(phase.name, text_style), pass_or_fail_pdf(phase), Paragraph(phase.reason, text_style)] for phase in test.phases]
365
+ inner_table = [[Paragraph(param_name_to_title(phase.name), text_style), pass_or_fail_pdf(phase), Paragraph(phase.reason, text_style)] for phase in test.phases]
339
366
  test_table = Table([["Phase", "Result", "Notes"]] + inner_table)
340
- test_table.setStyle(INNER_TABLE_STYLE)
367
+ test_table.setStyle(inner_table_style('LEFT'))
341
368
  compliance = "Mandatory" if test.test_json[MANDATORY] else "Optional"
342
- test_result = TestResult(name=test.module_name, devices_to_print=devices_to_print, test_table=test_table, result=pass_or_fail_pdf(test),
369
+ test_result = TestResult(name=test.test_json[NAME], devices_to_print=devices_to_print, test_table=test_table, result=pass_or_fail_pdf(test),
343
370
  duration=test.duration, purpose=str(test.test_json[PURPOSE]), compliance=compliance,
344
371
  kb_link=test.test_json[DOCUMENTATION], test_skipped=(test.rc == TEST_SKIPPED))
345
- module_name = cert_utils.module2name(test.test_module)
372
+ module_name = test.test_json[MODULE]
346
373
  if module_name not in results_per_module:
347
374
  results_per_module[module_name] = [test_result]
348
375
  else:
@@ -43,7 +43,7 @@ def load_module(module_name, module_path, rel_path="."):
43
43
  def handle_error(error, start_time):
44
44
  utPrint(error, "red")
45
45
  duration = (datetime.datetime.now()-start_time)
46
- cert_results.generate_results_files(html=True, pdf=True, start_time=start_time, duration=duration, error=error, pipeline=cert_common.pipeline_running())
46
+ cert_results.generate_results_files(html=True, pdf=False, start_time=start_time, duration=duration, error=error, pipeline=cert_common.pipeline_running())
47
47
  sys.exit(-1)
48
48
 
49
49
  ##################################
@@ -56,7 +56,12 @@ class WltTest:
56
56
  if line:
57
57
  test_list_line = line.strip().split()
58
58
  self.name = test_list_line[0]
59
- self.test_module = TEST_MODULES_MAP[self.name.split('/')[0]] if self.name.split('/')[0] in TEST_MODULES_MAP else ag.MODULE_EMPTY
59
+ self.test_module = ag.MODULE_EMPTY # Default test module
60
+ # Determine test's module
61
+ for s in self.name.split('/'):
62
+ if s in TEST_MODULES_MAP:
63
+ self.test_module = TEST_MODULES_MAP[s]
64
+ break
60
65
  line_params = test_list_line[1:]
61
66
  self.dir = os.path.join("tests", self.name)
62
67
  self.module_name = os.path.join(os.path.basename(self.name))
@@ -269,9 +274,9 @@ def handle_prep_brg_for_latest(test, interface, start_time):
269
274
  def ut_prep_brg(args, mqttc, start_time, gw, brg, gw_server, protobuf):
270
275
  brg = Bridge(brg)
271
276
  utPrint(SEP)
272
- if not args.port:
277
+ if not cert_common.is_cert_running:
273
278
  versions_mgmt = load_module('versions_mgmt.py', f'{UTILS_BASE_REL_PATH}/versions_mgmt.py')
274
- brg_owner = versions_mgmt.gw_brg_owner(env="aws", server="prod", brg=brg.id_str)
279
+ brg_owner = versions_mgmt.gw_brg_owner(env=AWS, server=PROD, brg=brg.id_str)
275
280
  if brg_owner and not brg_owner in r_codes:
276
281
  print_warn(f"BRG {brg.id_str} owned by account {brg_owner}")
277
282
  test = WltTest("", gw, mqttc, brg0=brg, gw_lan=args.lan, server=gw_server, exit_on_param_failure=args.exit_on_param_failure,
@@ -1,9 +1,12 @@
1
1
  # The certificate should run for every bridge change
2
- # The setup will include 1 tested BRG + 1 GW connected with UART
3
- # python ut.py --gw SIM --brg <XXXXXXXXXXXX> --tl certificate_sanity_test_list.txt --data sim --port <COM_PORT>
2
+ # The setup will include 1 tested BRG with cloud connectivity + 1 GW connected with UART or remotely
3
+ # Run command example with COM PORT connection:
4
+ # python brg_certificate_cli.py --gw SIM --brg_cloud_connectivity <XXXXXXXXXXXX> --tl certificate_bcc_sanity_test_list.txt --data sim --port <COM_PORT>
5
+ # Run command example with remote GW connection:
6
+ # python brg_certificate_cli.py --gw <GWYYYYYYYYYYYY> --brg_cloud_connectivity <XXXXXXXXXXXX> --tl certificate_bcc_sanity_test_list.txt --data sim
4
7
 
5
8
  # ------------- edge_mgmt -------------
6
- edge_mgmt/stat_test
9
+ edge_mgmt/periodic_msgs_test
7
10
  edge_mgmt/actions_test 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
8
11
 
9
12
  # ------------- energy2400 -------------
@@ -28,8 +31,10 @@ datapath/rx_channel_test RX_CHANNEL_37 RX_CHANNEL_38 RX_CHANNEL_10_250K RX_CHANN
28
31
  datapath/aging_test low_pacer
29
32
  datapath/num_of_tags_test 500
30
33
 
31
-
32
34
  # ------------- calibration -------------
33
35
  calibration/output_power_test -12 0 3
34
36
  calibration/interval_test 1 25 50
35
- calibration/pattern_test CALIBRATION_PATTERN_38_38_39 CALIBRATION_PATTERN_DISABLE_BEACON
37
+ calibration/pattern_test CALIBRATION_PATTERN_38_38_39 CALIBRATION_PATTERN_DISABLE_BEACON
38
+
39
+ # ------------- sensors -------------
40
+ sensors/ext_sensor_test tag_data_only rssi_threshold snsr0_scrmbl_snsr1_no_scrmbl
@@ -1,13 +1,12 @@
1
1
  # The certificate should run for every bridge change
2
- # The setup will include 1 tested BRG + 1 GW connected with UART
3
- # Run command example:
4
- # python ut.py --gw SIM --brg <XXXXXXXXXXXX> --tl certificate_test_list.txt --data sim --port <COM_PORT>
5
-
6
- # ------------- pwr_mgmt -------------
7
- ut/pwr_mgmt/pwr_mgmt_test
2
+ # The setup will include 1 tested BRG with cloud connectivity + 1 GW connected with UART or remotely
3
+ # Run command example with COM PORT connection:
4
+ # python brg_certificate_cli.py --gw SIM --brg_cloud_connectivity <XXXXXXXXXXXX> --tl certificate_bcc_test_list.txt --data sim --port <COM_PORT>
5
+ # Run command example with remote GW connection:
6
+ # python brg_certificate_cli.py --gw <GWYYYYYYYYYYYY> --brg_cloud_connectivity <XXXXXXXXXXXX> --tl certificate_bcc_test_list.txt --data sim
8
7
 
9
8
  # ------------- edge_mgmt -------------
10
- edge_mgmt/stat_test
9
+ edge_mgmt/periodic_msgs_test
11
10
  edge_mgmt/actions_test 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
12
11
 
13
12
  # ------------- energy2400 -------------
@@ -32,14 +31,20 @@ datapath/pacer_interval_ble5_test 5 15 30 60
32
31
  datapath/pkt_filter_test PKT_FILTER_RANDOM_FIRST_ARRIVING_PKT PKT_FILTER_DISABLE_FORWARDING PKT_FILTER_TEMP_PKT PKT_FILTER_ADVANCED_PKT PKT_FILTER_TEMP_AND_ADVANCED_PKTS PKT_FILTER_TEMP_ADVANCED_AND_DEBUG_PKTS
33
32
  datapath/pkt_filter_gen3_test PKT_FILTER_RANDOM_FIRST_ARRIVING_PKT PKT_FILTER_DISABLE_FORWARDING PKT_FILTER_TEMP_PKT PKT_FILTER_ADVANCED_PKT PKT_FILTER_TEMP_AND_ADVANCED_PKTS
34
33
  datapath/pkt_filter_ble5_test PKT_FILTER_RANDOM_FIRST_ARRIVING_PKT PKT_FILTER_DISABLE_FORWARDING PKT_FILTER_TEMP_PKT PKT_FILTER_ADVANCED_PKT PKT_FILTER_TEMP_AND_ADVANCED_PKTS
35
- #datapath/rx_channel_test RX_CHANNEL_37 RX_CHANNEL_38 RX_CHANNEL_39 RX_CHANNEL_10_250K RX_CHANNEL_10_500K
34
+ datapath/rx_channel_test RX_CHANNEL_37 RX_CHANNEL_38 RX_CHANNEL_39 RX_CHANNEL_10_250K RX_CHANNEL_10_500K
36
35
  datapath/rx_rate_gen2_test mid_values diff_pacer min_value max_value diff_rate
37
36
  datapath/rx_rate_gen3_test mid_values diff_pacer min_value max_value diff_rate
38
- datapath/aging_test low_pacer high_pacer
39
37
  datapath/pacer_interval_tags_count_test 1 10 15 30
38
+ datapath/aging_test low_pacer high_pacer
40
39
  datapath/num_of_tags_test 5000
41
40
 
41
+ # ------------- pwr_mgmt -------------
42
+ pwr_mgmt/pwr_mgmt_test
43
+
42
44
  # ------------- calibration -------------
43
45
  calibration/output_power_test -12 -8 -4 0 2 3
44
46
  calibration/interval_test 1 25 50
45
47
  calibration/pattern_test CALIBRATION_PATTERN_38_38_39 CALIBRATION_PATTERN_STANDARD CALIBRATION_PATTERN_EU_PATTERN CALIBRATION_PATTERN_DISABLE_BEACON
48
+
49
+ # ------------- sensors -------------
50
+ sensors/ext_sensor_test tag_data_only rssi_threshold snsr0_no_scrmbl snsr1_scrmbl snsr0_scrmbl_snsr1_no_scrmbl snsr0_scrmbl_snsr1_scrmbl
@@ -1,9 +1,12 @@
1
1
  # The certificate should run for every bridge change
2
- # The setup will include 1 tested BRG + 1 GW connected with UART
3
- # python ut.py --gw SIM --brg <XXXXXXXXXXXX> --tl certificate_sanity_test_list.txt --data sim --port <COM_PORT>
2
+ # The setup will include 1 tested BRG + 1 GW connected with UART or remotely
3
+ # Run command example with COM PORT connection:
4
+ # python brg_certificate_cli.py --gw SIM --brg <XXXXXXXXXXXX> --tl certificate_sanity_test_list.txt --data sim --port <COM_PORT>
5
+ # Run command example with remote GW connection:
6
+ # python brg_certificate_cli.py --gw <GWYYYYYYYYYYYY> --brg <XXXXXXXXXXXX> --tl certificate_sanity_test_list.txt --data sim
4
7
 
5
8
  # ------------- edge_mgmt -------------
6
- edge_mgmt/stat_test
9
+ edge_mgmt/periodic_msgs_test
7
10
  edge_mgmt/actions_test 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
8
11
 
9
12
  # ------------- energy2400 -------------
@@ -34,4 +37,7 @@ datapath/num_of_tags_test 500
34
37
  # ------------- calibration -------------
35
38
  calibration/output_power_test -12 0 3
36
39
  calibration/interval_test 1 25 50
37
- calibration/pattern_test CALIBRATION_PATTERN_38_38_39 CALIBRATION_PATTERN_DISABLE_BEACON
40
+ calibration/pattern_test CALIBRATION_PATTERN_38_38_39 CALIBRATION_PATTERN_DISABLE_BEACON
41
+
42
+ # ------------- sensors -------------
43
+ sensors/ext_sensor_test tag_data_only rssi_threshold snsr0_scrmbl_snsr1_no_scrmbl
@@ -1,13 +1,12 @@
1
1
  # The certificate should run for every bridge change
2
- # The setup will include 1 tested BRG + 1 GW connected with UART
3
- # Run command example:
4
- # python ut.py --gw SIM --brg <XXXXXXXXXXXX> --tl certificate_test_list.txt --data sim --port <COM_PORT>
5
-
6
- # ------------- pwr_mgmt -------------
7
- ut/pwr_mgmt/pwr_mgmt_test
2
+ # The setup will include 1 tested BRG + 1 GW connected with UART or remotely
3
+ # Run command example with COM PORT connection:
4
+ # python brg_certificate_cli.py --gw SIM --brg <XXXXXXXXXXXX> --tl certificate_test_list.txt --data sim --port <COM_PORT>
5
+ # Run command example with remote GW connection:
6
+ # python brg_certificate_cli.py --gw <GWYYYYYYYYYYYY> --brg <XXXXXXXXXXXX> --tl certificate_test_list.txt --data sim
8
7
 
9
8
  # ------------- edge_mgmt -------------
10
- edge_mgmt/stat_test
9
+ edge_mgmt/periodic_msgs_test
11
10
  edge_mgmt/actions_test 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
12
11
 
13
12
  # ------------- energy2400 -------------
@@ -16,7 +15,7 @@ energy2400/output_power_test -12 -8 -4 0 2 3
16
15
  energy2400/duty_cycle_test 1 25 50 75
17
16
  energy2400/signal_indicator_test internal_brg rssi_threshold brg0_rx_brg1_tx brg0_none_brg1_rx brg0_rxtx_brg1_rxtx brg0_tx_brg1_none
18
17
  energy2400/signal_indicator_ble5_10_500k_test internal_brg rssi_threshold brg0_rx_brg1_tx brg0_none_brg1_rx brg0_rxtx_brg1_rxtx brg0_tx_brg1_none
19
- energy2400/signal_indicator_ble5_10_250k_test internal_brg rssi_threshold brg0_rx_brg1_tx brg0_none_brg1_rx brg0_rxtx_brg1_rxtx brg0_tx_brg1_none
18
+ energy2400/signal_indicator_ble5_10_250k_test internal_brg rssi_threshold brg0_rx_brg1_tx brg0_none_brg1_rx brg0_rxtx_brg1_rxtx brg0_tx_brg1_none
20
19
 
21
20
  # ------------- energy_sub1g -------------
22
21
  energy_sub1g/pattern_test SUB1G_ENERGY_PATTERN_NO_ENERGIZING SUB1G_ENERGY_PATTERN_SINGLE_TONE_915000 SUB1G_ENERGY_PATTERN_FCC_HOPPING SUB1G_ENERGY_PATTERN_SINGLE_TONE_917500 SUB1G_ENERGY_PATTERN_NZ_HOPPING
@@ -33,7 +32,7 @@ datapath/pacer_interval_ble5_test 5 15 30 60
33
32
  datapath/pkt_filter_test PKT_FILTER_RANDOM_FIRST_ARRIVING_PKT PKT_FILTER_DISABLE_FORWARDING PKT_FILTER_TEMP_PKT PKT_FILTER_ADVANCED_PKT PKT_FILTER_TEMP_AND_ADVANCED_PKTS PKT_FILTER_TEMP_ADVANCED_AND_DEBUG_PKTS
34
33
  datapath/pkt_filter_gen3_test PKT_FILTER_RANDOM_FIRST_ARRIVING_PKT PKT_FILTER_DISABLE_FORWARDING PKT_FILTER_TEMP_PKT PKT_FILTER_ADVANCED_PKT PKT_FILTER_TEMP_AND_ADVANCED_PKTS
35
34
  datapath/pkt_filter_ble5_test PKT_FILTER_RANDOM_FIRST_ARRIVING_PKT PKT_FILTER_DISABLE_FORWARDING PKT_FILTER_TEMP_PKT PKT_FILTER_ADVANCED_PKT PKT_FILTER_TEMP_AND_ADVANCED_PKTS
36
- #datapath/rx_channel_test RX_CHANNEL_37 RX_CHANNEL_38 RX_CHANNEL_39 RX_CHANNEL_10_250K RX_CHANNEL_10_500K
35
+ datapath/rx_channel_test RX_CHANNEL_37 RX_CHANNEL_38 RX_CHANNEL_39 RX_CHANNEL_10_250K RX_CHANNEL_10_500K
37
36
  datapath/rx_rate_gen2_test mid_values diff_pacer min_value max_value diff_rate
38
37
  datapath/rx_rate_gen3_test mid_values diff_pacer min_value max_value diff_rate
39
38
  datapath/pacer_interval_tags_count_test 1 10 15 30
@@ -42,8 +41,13 @@ datapath/stress_gen3_test rep3 rep2 rep1 rep1_adaptive_pacer pixel_burst
42
41
  datapath/aging_test low_pacer high_pacer
43
42
  datapath/num_of_tags_test 5000
44
43
 
44
+ # ------------- pwr_mgmt -------------
45
+ pwr_mgmt/pwr_mgmt_test
45
46
 
46
47
  # ------------- calibration -------------
47
48
  calibration/output_power_test -12 -8 -4 0 2 3
48
49
  calibration/interval_test 1 25 50
49
50
  calibration/pattern_test CALIBRATION_PATTERN_38_38_39 CALIBRATION_PATTERN_STANDARD CALIBRATION_PATTERN_EU_PATTERN CALIBRATION_PATTERN_DISABLE_BEACON
51
+
52
+ # ------------- sensors -------------
53
+ sensors/ext_sensor_test tag_data_only rssi_threshold snsr0_no_scrmbl snsr1_scrmbl snsr0_scrmbl_snsr1_no_scrmbl snsr0_scrmbl_snsr1_scrmbl
@@ -1,6 +1,6 @@
1
1
  {
2
- "name": "interval_test",
3
- "module": "calibration",
2
+ "name": "Interval",
3
+ "module": "Calibration",
4
4
  "purpose": "Test configuration for all supported calibration interval values",
5
5
  "documentation": "https://community.wiliot.com/customers/s/article/Wiliot-Network-Calibration-Module",
6
6
  "initialCondition": "Bridge configured to defaults",
@@ -1,6 +1,6 @@
1
1
  {
2
- "name": "output_power_test",
3
- "module": "calibration",
2
+ "name": "Output Power",
3
+ "module": "Calibration",
4
4
  "purpose": "Test configuration for all supported calibration output power values",
5
5
  "documentation": "https://community.wiliot.com/customers/s/article/Wiliot-Network-Calibration-Module",
6
6
  "initialCondition": "Bridge configured to defaults",
@@ -11,5 +11,6 @@
11
11
  "mandatory": 1,
12
12
  "multiBridgeTest": 0,
13
13
  "gwOnlyTest": 0,
14
+ "internalBridge": 1,
14
15
  "allSupportedValues": [-12, -8, -4, 0, 2, 3]
15
16
  }
@@ -1,6 +1,6 @@
1
1
  {
2
- "name": "pattern_test",
3
- "module": "calibration",
2
+ "name": "Pattern",
3
+ "module": "Calibration",
4
4
  "purpose": "Test configuration for all supported calibration pattern values",
5
5
  "documentation": "https://community.wiliot.com/customers/s/article/Wiliot-Network-Calibration-Module",
6
6
  "initialCondition": "Bridge configured to defaults",
@@ -16,36 +16,35 @@ def run(test):
16
16
  return cert_common.test_epilog(test)
17
17
 
18
18
  for param in test.params:
19
- if param.value == ag.CALIBRATION_PATTERN_38_38_39:
19
+ # A special verification for 38_38_39, which is irrelevant for bridge with cloud connectivity
20
+ if param.value == ag.CALIBRATION_PATTERN_38_38_39 and not cert_common.is_bcc_running(test):
20
21
  utPrint("\nCALIBRATION_PATTERN_38_38_39 was configured - checking the GW doesn't receive tag packets", "BLUE")
21
22
  # Config internal_brg's rx_channel to CHANNEL_37
22
23
  test = cert_config.internal_brg_configure(test, fields=[BRG_RX_CHANNEL], values=[ag.RX_CHANNEL_37], module=datapath_module)[0]
23
- if test.rc == TEST_FAILED and test.exit_on_param_failure:
24
- break
25
- # Configure the BRG, wait=False
26
- test = cert_config.brg_configure(test, fields=[BRG_PATTERN, BRG_CALIB_INTERVAL],
27
- values=[param.value, 1], module=calib_module, wait=False)[0]
28
- cert_common.wait_time_n_print(CLEAR_DATA_PATH_TIMEOUT)
29
- # MQTT scan
30
- if test.data == DATA_SIMULATION:
31
- # start generating pkts and send them using data simulator
32
- pixel_sim_thread = cert_data_sim.DataSimThread(test=test, num_of_pixels=10, duplicates=1, delay=100, pkt_types=[0])
33
- pixel_sim_thread.start()
34
- df = cert_common.data_scan(test, gw_data=True, brg_data=True, scan_time=(40))
35
- if test.data == DATA_SIMULATION:
36
- # stop generating pkts with data simulator and wait a few seconds for full flush
37
- pixel_sim_thread.stop()
38
- time.sleep(5)
24
+ if test.rc != TEST_FAILED:
25
+ # Configure the BRG, wait=False
26
+ test = cert_config.brg_configure(test, fields=[BRG_PATTERN, BRG_CALIB_INTERVAL],
27
+ values=[param.value, 1], module=calib_module, wait=False)[0]
28
+ cert_common.wait_time_n_print(CLEAR_DATA_PATH_TIMEOUT)
29
+ # MQTT scan
30
+ if test.data == DATA_SIMULATION:
31
+ # start generating pkts and send them using data simulator
32
+ pixel_sim_thread = cert_data_sim.DataSimThread(test=test, num_of_pixels=10, duplicates=1, delay=100, pkt_types=[0])
33
+ pixel_sim_thread.start()
34
+ df = cert_common.data_scan(test, gw_data=True, brg_data=True, scan_time=(40))
35
+ if test.data == DATA_SIMULATION:
36
+ # stop generating pkts with data simulator and wait a few seconds for full flush
37
+ pixel_sim_thread.stop()
38
+ time.sleep(5)
39
39
 
40
- # Analyze pass/fail
41
- gw_tags_pkts = len(df.query('src_id == gw_id'))
42
- brg_tags_pkts = len(df.query('src_id != gw_id'))
43
- print(f"Found gw_tags_pkts={gw_tags_pkts}, brg_tags_pkts={brg_tags_pkts}")
44
- if (gw_tags_pkts == 0 and test.data == DATA_REAL_TAGS) or brg_tags_pkts != 0:
45
- test.rc = TEST_FAILED
46
- test.add_reason(f"gw_tags_pkts={gw_tags_pkts} brg_tags_pkts={brg_tags_pkts} for BRG 38,38,39 calibration, "
47
- "and GW scanning on ch 37")
48
- break
40
+ # Analyze pass/fail
41
+ gw_tags_pkts = len(df.query('src_id == gw_id'))
42
+ brg_tags_pkts = len(df.query('src_id != gw_id'))
43
+ print(f"Found gw_tags_pkts={gw_tags_pkts}, brg_tags_pkts={brg_tags_pkts}")
44
+ if (gw_tags_pkts == 0 and test.data == DATA_REAL_TAGS) or brg_tags_pkts != 0:
45
+ test.rc = TEST_FAILED
46
+ test.add_reason(f"gw_tags_pkts={gw_tags_pkts} brg_tags_pkts={brg_tags_pkts} for BRG 38,38,39 calibration, "
47
+ "and GW scanning on ch 37")
49
48
  # Revert internal_brg
50
49
  test = cert_config.internal_brg_configure(test, module=datapath_module)[0]
51
50
  generate_log_file(test, param.name)
@@ -1,8 +1,7 @@
1
1
  {
2
- "name": "aging test",
3
- "module": "datapath",
4
- "purpose": ["verify the functionality of the aging process - Max (60, effective pacer interval)",
5
- "verify an edge case - pi = 300"],
2
+ "name": "Pixels Aging",
3
+ "module": "Datapath",
4
+ "purpose": "verify the functionality of the aging mechanism in the bridge for low and high pacer intervals",
6
5
  "documentation": [],
7
6
  "initialCondition": "Bridge configured to defaults",
8
7
  "procedure": ["Test prolog",
@@ -10,7 +9,7 @@
10
9
  "Low pacer - config pacer interval < 60, pi = 15, check ctr tags ,wait aging time, then expect to tags ctr = 0",
11
10
  "High pacer - config pacer interval > 60, pi = 300, check ctr tags ,wait aging time, then expect to tags ctr = 0",
12
11
  "Test epilog"],
13
- "expectedOutcome": "",
12
+ "expectedOutcome": "Aging mechanism works as expected for low and high pacer intervals",
14
13
  "mandatory": 1,
15
14
  "multiBridgeTest": 0,
16
15
  "gwOnlyTest": 0,