wiliot-certificate 1.4.0a2__py3-none-any.whl → 1.5.1a1__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 (130) hide show
  1. brg_certificate/ag/energous_v0_defines.py +28 -28
  2. brg_certificate/ag/energous_v1_defines.py +28 -28
  3. brg_certificate/ag/energous_v2_defines.py +28 -28
  4. brg_certificate/ag/energous_v3_defines.py +28 -28
  5. brg_certificate/ag/energous_v4_defines.py +28 -28
  6. brg_certificate/ag/fanstel_lan_v0_defines.py +28 -28
  7. brg_certificate/ag/fanstel_lte_v0_defines.py +28 -28
  8. brg_certificate/ag/fanstel_wifi_v0_defines.py +28 -28
  9. brg_certificate/ag/minew_lte_v0_defines.py +28 -28
  10. brg_certificate/ag/wlt_cmd_if.html +1 -1
  11. brg_certificate/ag/wlt_types.html +3 -4
  12. brg_certificate/ag/wlt_types_ag.py +162 -163
  13. brg_certificate/brg_certificate.py +46 -12
  14. brg_certificate/brg_certificate_cli.py +1 -0
  15. brg_certificate/cert_common.py +31 -42
  16. brg_certificate/cert_config.py +7 -5
  17. brg_certificate/cert_data_sim.py +26 -4
  18. brg_certificate/cert_defines.py +30 -3
  19. brg_certificate/cert_gw_sim.py +12 -8
  20. brg_certificate/cert_mqtt.py +10 -2
  21. brg_certificate/cert_prints.py +7 -5
  22. brg_certificate/cert_protobuf.py +5 -1
  23. brg_certificate/cert_results.py +134 -84
  24. brg_certificate/cert_utils.py +14 -17
  25. brg_certificate/certificate_bcc_sanity_test_list.txt +35 -0
  26. brg_certificate/certificate_bcc_test_list.txt +45 -0
  27. brg_certificate/certificate_sanity_test_list.txt +2 -1
  28. brg_certificate/certificate_test_list.txt +10 -4
  29. brg_certificate/restore_brg.py +2 -0
  30. brg_certificate/tests/calibration/interval_test/interval_test.json +2 -1
  31. brg_certificate/tests/calibration/interval_test/interval_test.py +1 -1
  32. brg_certificate/tests/calibration/output_power_test/output_power_test.json +5 -3
  33. brg_certificate/tests/calibration/output_power_test/output_power_test.py +1 -1
  34. brg_certificate/tests/calibration/pattern_test/pattern_test.json +5 -2
  35. brg_certificate/tests/calibration/pattern_test/pattern_test.py +1 -1
  36. brg_certificate/tests/datapath/aging_test/aging_test.json +20 -0
  37. brg_certificate/tests/datapath/aging_test/aging_test.py +135 -0
  38. brg_certificate/tests/datapath/num_of_tags_test/num_of_tags_test.json +8 -3
  39. brg_certificate/tests/datapath/num_of_tags_test/num_of_tags_test.py +2 -2
  40. brg_certificate/tests/datapath/output_power_test/output_power_test.json +5 -2
  41. brg_certificate/tests/datapath/output_power_test/output_power_test.py +1 -1
  42. brg_certificate/tests/datapath/pacer_interval_ble5_test/pacer_interval_ble5_test.json +5 -2
  43. brg_certificate/tests/datapath/pacer_interval_ble5_test/pacer_interval_ble5_test.py +1 -1
  44. brg_certificate/tests/datapath/pacer_interval_tags_count_test/pacer_interval_tags_count_test.json +5 -2
  45. brg_certificate/tests/datapath/pacer_interval_tags_count_test/pacer_interval_tags_count_test.py +2 -2
  46. brg_certificate/tests/datapath/pacer_interval_test/pacer_interval_test.json +5 -2
  47. brg_certificate/tests/datapath/pacer_interval_test/pacer_interval_test.py +1 -1
  48. brg_certificate/tests/datapath/pattern_test/pattern_test.json +6 -3
  49. brg_certificate/tests/datapath/pattern_test/pattern_test.py +1 -1
  50. brg_certificate/tests/datapath/pkt_filter_ble5_test/pkt_filter_ble5_test.json +8 -2
  51. brg_certificate/tests/datapath/pkt_filter_ble5_test/pkt_filter_ble5_test.py +1 -1
  52. brg_certificate/tests/datapath/pkt_filter_gen3_test/pkt_filter_gen3_test.json +8 -2
  53. brg_certificate/tests/datapath/pkt_filter_gen3_test/pkt_filter_gen3_test.py +1 -1
  54. brg_certificate/tests/datapath/pkt_filter_test/pkt_filter_test.json +8 -2
  55. brg_certificate/tests/datapath/pkt_filter_test/pkt_filter_test.py +1 -1
  56. brg_certificate/tests/datapath/rssi_threshold_test/rssi_threshold_test.json +6 -2
  57. brg_certificate/tests/datapath/rssi_threshold_test/rssi_threshold_test.py +1 -1
  58. brg_certificate/tests/datapath/rx_channel_test/rx_channel_test.json +5 -2
  59. brg_certificate/tests/datapath/rx_channel_test/rx_channel_test.py +1 -1
  60. brg_certificate/tests/datapath/rx_rate_gen2_test/rx_rate_gen2_test.json +3 -4
  61. brg_certificate/tests/datapath/rx_rate_gen2_test/rx_rate_gen2_test.py +1 -1
  62. brg_certificate/tests/datapath/rx_rate_gen3_test/rx_rate_gen3_test.json +3 -4
  63. brg_certificate/tests/datapath/rx_rate_gen3_test/rx_rate_gen3_test.py +1 -1
  64. brg_certificate/tests/datapath/stress_gen3_test/stress_gen3_test.json +14 -22
  65. brg_certificate/tests/datapath/stress_gen3_test/stress_gen3_test.py +24 -24
  66. brg_certificate/tests/datapath/stress_test/stress_test.json +11 -18
  67. brg_certificate/tests/datapath/stress_test/stress_test.py +20 -27
  68. brg_certificate/tests/datapath/tx_repetition_algo_test/tx_repetition_algo_test.json +6 -2
  69. brg_certificate/tests/datapath/tx_repetition_algo_test/tx_repetition_algo_test.py +1 -1
  70. brg_certificate/tests/datapath/tx_repetition_test/tx_repetition_test.json +6 -2
  71. brg_certificate/tests/datapath/tx_repetition_test/tx_repetition_test.py +1 -1
  72. brg_certificate/tests/edge_mgmt/actions_test/actions_test.json +2 -1
  73. brg_certificate/tests/edge_mgmt/actions_test/actions_test.py +4 -24
  74. brg_certificate/tests/edge_mgmt/brg2brg_ota_ble5_test/brg2brg_ota_ble5_test.json +2 -1
  75. brg_certificate/tests/edge_mgmt/brg2brg_ota_ble5_test/brg2brg_ota_ble5_test.py +1 -1
  76. brg_certificate/tests/edge_mgmt/brg2brg_ota_test/brg2brg_ota_test.json +2 -1
  77. brg_certificate/tests/edge_mgmt/brg2brg_ota_test/brg2brg_ota_test.py +1 -1
  78. brg_certificate/tests/edge_mgmt/leds_test/leds_test.json +9 -5
  79. brg_certificate/tests/edge_mgmt/leds_test/leds_test.py +4 -4
  80. brg_certificate/tests/edge_mgmt/ota_test/ota_test.json +9 -5
  81. brg_certificate/tests/edge_mgmt/ota_test/ota_test.py +45 -1
  82. brg_certificate/tests/edge_mgmt/stat_test/stat_test.json +2 -1
  83. brg_certificate/tests/edge_mgmt/stat_test/stat_test.py +1 -1
  84. brg_certificate/tests/energy2400/duty_cycle_test/duty_cycle_test.json +5 -2
  85. brg_certificate/tests/energy2400/duty_cycle_test/duty_cycle_test.py +1 -1
  86. brg_certificate/tests/energy2400/output_power_test/output_power_test.json +5 -3
  87. brg_certificate/tests/energy2400/output_power_test/output_power_test.py +1 -1
  88. brg_certificate/tests/energy2400/pattern_test/pattern_test.json +5 -2
  89. brg_certificate/tests/energy2400/pattern_test/pattern_test.py +1 -1
  90. brg_certificate/tests/energy2400/signal_indicator_ble5_10_250k_test/signal_indicator_ble5_10_250k_test.json +20 -0
  91. brg_certificate/tests/energy2400/signal_indicator_ble5_10_250k_test/signal_indicator_ble5_10_250k_test.py +346 -0
  92. brg_certificate/tests/energy2400/signal_indicator_ble5_10_500k_test/signal_indicator_ble5_10_500k_test.json +20 -0
  93. brg_certificate/tests/energy2400/signal_indicator_ble5_10_500k_test/signal_indicator_ble5_10_500k_test.py +346 -0
  94. brg_certificate/tests/energy2400/signal_indicator_sub1g_2_4_test/signal_indicator_sub1g_2_4_test.json +2 -1
  95. brg_certificate/tests/energy2400/signal_indicator_sub1g_2_4_test/signal_indicator_sub1g_2_4_test.py +1 -1
  96. brg_certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.json +12 -5
  97. brg_certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.py +130 -43
  98. brg_certificate/tests/energy_sub1g/duty_cycle_test/duty_cycle_test.json +5 -2
  99. brg_certificate/tests/energy_sub1g/duty_cycle_test/duty_cycle_test.py +1 -1
  100. brg_certificate/tests/energy_sub1g/pattern_test/pattern_test.json +9 -3
  101. brg_certificate/tests/energy_sub1g/pattern_test/pattern_test.py +1 -1
  102. brg_certificate/tests/energy_sub1g/signal_indicator_functionality_test/signal_indicator_functionality_test.json +2 -1
  103. brg_certificate/tests/energy_sub1g/signal_indicator_functionality_test/signal_indicator_functionality_test.py +1 -1
  104. brg_certificate/tests/energy_sub1g/signal_indicator_test/signal_indicator_test.json +5 -2
  105. brg_certificate/tests/energy_sub1g/signal_indicator_test/signal_indicator_test.py +1 -1
  106. brg_certificate/wltPb_pb2.py +50 -38
  107. brg_certificate/wltPb_pb2.pyi +40 -34
  108. brg_certificate/wlt_types.py +4 -6
  109. common/wlt_logo.png +0 -0
  110. gw_certificate/ag/ut_defines.py +4 -1
  111. gw_certificate/cert_results.py +145 -0
  112. gw_certificate/gw_certificate.py +18 -6
  113. gw_certificate/gw_certificate_cli.py +3 -3
  114. gw_certificate/interface/mqtt.py +1 -0
  115. gw_certificate/interface/uart_if.py +1 -1
  116. gw_certificate/tests/actions.py +7 -2
  117. gw_certificate/tests/connection.py +1 -1
  118. gw_certificate/tests/generic.py +43 -17
  119. gw_certificate/tests/registration.py +2 -1
  120. gw_certificate/tests/uplink.py +26 -35
  121. {wiliot_certificate-1.4.0a2.dist-info → wiliot_certificate-1.5.1a1.dist-info}/METADATA +16 -10
  122. {wiliot_certificate-1.4.0a2.dist-info → wiliot_certificate-1.5.1a1.dist-info}/RECORD +126 -120
  123. {wiliot_certificate-1.4.0a2.dist-info → wiliot_certificate-1.5.1a1.dist-info}/WHEEL +1 -1
  124. {wiliot_certificate-1.4.0a2.dist-info → wiliot_certificate-1.5.1a1.dist-info}/top_level.txt +1 -0
  125. brg_certificate/tests/datapath/adaptive_pacer_algo_test/adaptive_pacer_algo_test.json +0 -13
  126. brg_certificate/tests/datapath/adaptive_pacer_algo_test/adaptive_pacer_algo_test.py +0 -76
  127. brg_certificate/tests/energy2400/signal_indicator_ble5_test/signal_indicator_ble5_test.json +0 -13
  128. brg_certificate/tests/energy2400/signal_indicator_ble5_test/signal_indicator_ble5_test.py +0 -398
  129. {wiliot_certificate-1.4.0a2.dist-info → wiliot_certificate-1.5.1a1.dist-info}/entry_points.txt +0 -0
  130. {wiliot_certificate-1.4.0a2.dist-info → wiliot_certificate-1.5.1a1.dist-info/licenses}/LICENSE +0 -0
@@ -3,15 +3,15 @@ import tabulate
3
3
  import subprocess
4
4
  from reportlab.lib import colors
5
5
  from reportlab.lib.pagesizes import letter
6
- from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer
7
- from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
6
+ from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer, PageBreak, KeepTogether, Image
7
+ from reportlab.lib.styles import ParagraphStyle
8
8
  from reportlab.lib.enums import TA_CENTER, TA_LEFT
9
9
 
10
10
  # Local imports
11
11
  import brg_certificate.cert_utils as cert_utils
12
12
  import brg_certificate.cert_prints as cert_prints
13
- from brg_certificate.cert_defines import BASE_DIR
14
- from brg_certificate.cert_defines import TEST_FAILED, TEST_SKIPPED, TEST_PASSED, TEST_INIT, UT_RESULT_FILE_HTML, UT_RESULT_FILE_PDF
13
+ from brg_certificate.wlt_types import *
14
+ from brg_certificate.cert_defines import *
15
15
 
16
16
 
17
17
  ##################################
@@ -21,18 +21,22 @@ result_map = {TEST_FAILED: cert_prints.color("RED", "FAIL"), TEST_SKIPPED: cert_
21
21
  TEST_PASSED: cert_prints.color("GREEN", "PASS"), TEST_INIT: cert_prints.color("CYAN", "INIT")}
22
22
  pass_or_fail = lambda obj : result_map[obj.rc]
23
23
  class TestResult:
24
- def __init__(self, name="", devices_to_print="", test_table=None, result=None, duration=0):
24
+ def __init__(self, name="", devices_to_print="", test_table=None, result=None, duration=0, purpose="", kb_link="", compliance="", test_skipped=False):
25
25
  self.name = name
26
26
  self.devices = devices_to_print
27
27
  self.result = result
28
28
  self.test_table = test_table
29
29
  self.duration = duration
30
+ self.purpose = purpose
31
+ self.kb_link = kb_link
32
+ self.compliance = compliance
33
+ self.test_skipped = test_skipped
30
34
 
31
35
  def __repr__(self):
32
36
  return self.name
33
37
 
34
38
  def generate_tests_table(tests=[], html=False):
35
- headers = ["Module", "Test Name", "Device", "Result & Reason Breakdown", "Result", "Run Time"]
39
+ headers = ["Module", "Test Name", "Device", "Result Breakdown", "Result", "Run Time"]
36
40
  inner_format = "unsafehtml" if html else "simple"
37
41
  _pass_or_fail = pass_or_fail_html if html else pass_or_fail
38
42
  tests_results = []
@@ -40,7 +44,7 @@ def generate_tests_table(tests=[], html=False):
40
44
  brgs_to_print = (test.gw if not test.brg0 or test.gw_only else
41
45
  (f"{test.brg0.id_str}\n{test.brg1.id_str}" if test.brg1 and test.multi_brg else test.brg0.id_str))
42
46
  inner_table = [[phase.name, _pass_or_fail(phase), phase.reason] for phase in test.phases]
43
- result_breakdown_table = tabulate.tabulate(inner_table, headers=["Phase", "Result", "Reason"], tablefmt=inner_format)
47
+ result_breakdown_table = tabulate.tabulate(inner_table, headers=["Phase", "Result", "Notes"], tablefmt=inner_format)
44
48
  tests_results.append([cert_utils.module2name(test.test_module),
45
49
  test.module_name if (not test.internal_brg or "gw" in test.module_name) else f"{test.module_name} (internal brg)",
46
50
  brgs_to_print,
@@ -66,15 +70,15 @@ def get_update_status_from_log_file(log_file="update_log.txt"):
66
70
  elif "ota_test failed!" in l:
67
71
  update_status = "BRG OTA failed!"
68
72
  break
69
- elif "Wiliot UT PASSED!" in l:
73
+ elif "PASSED!" in l:
70
74
  update_status = "GW and BRG versions were updated to latest successfully!"
71
75
  break
72
- elif "Update skipped!" in l:
76
+ elif "SKIPPED!" in l:
73
77
  update_status = "GW and BRG versions update skipped!"
74
78
  break
75
79
  return update_status
76
80
 
77
- def generate_results_files(html=True, pdf=True, failures=0, skipped=0, duration=0, brg_version='', tests=[], error=None, pipeline=False):
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):
78
82
  # Generate HTML file
79
83
  if html:
80
84
  f = open(os.path.join(BASE_DIR, UT_RESULT_FILE_HTML), "w", encoding="utf-8")
@@ -85,30 +89,36 @@ def generate_results_files(html=True, pdf=True, failures=0, skipped=0, duration=
85
89
  stdout=subprocess.PIPE, shell=True, cwd=os.environ['BITBUCKET_CLONE_DIR'])
86
90
  output, err = p.communicate()
87
91
  if error:
88
- f.write("<br><h1 style='color:#ab0000'>Wiliot UT Failed!</h1><br>")
92
+ f.write("<br><h1 style='color:#ab0000'>Wiliot Certificate Error!</h1><br>")
89
93
  if pipeline:
90
94
  f.write("<hr>" + output.decode("utf-8") + "<br>")
91
95
  f.write("<p><a href='https://bitbucket.org/wiliot/wiliot-nordic-firmware/commits/{}'>Commit page on bitbucket</a><hr>".format(os.environ['BITBUCKET_COMMIT']))
92
96
  f.write(update_status + "<br><br>")
93
97
  f.write(error + "<br><br>")
94
98
  f.write("Run duration: {} <br><br>".format(str(duration).split(".")[0]))
95
- if brg_version:
96
- f.write("Bridge version: {} <br><br>".format(brg_version))
99
+ if brg:
100
+ f.write("Bridge version: {} <br><br>".format(brg.version))
97
101
  elif tests:
98
102
  if not failures and ("successfully!" in update_status or "skipped!" in update_status or not pipeline):
99
- f.write("<br><h1 style='color:#00AB83'>Wiliot UT Passed!</h1>")
103
+ f.write("<br><h1 style='color:#00AB83'>Wiliot Certificate Passed!</h1>")
100
104
  else:
101
- f.write("<br><h1 style='color:#ab0000'>Wiliot UT Failed!</h1>")
105
+ f.write("<br><h1 style='color:#ab0000'>Wiliot Certificate Failed!</h1>")
102
106
  if pipeline:
103
107
  f.write("<hr>" + output.decode("utf-8") + "<br>")
104
108
  f.write("<p><a href='https://bitbucket.org/wiliot/wiliot-nordic-firmware/commits/{}'>Commit page on bitbucket</a><hr>".format(os.environ['BITBUCKET_COMMIT']))
105
109
  f.write(update_status + "<br><br>")
110
+ f.write("Run date: {} <br><br>".format(start_time.strftime('%d/%m/%Y, %H:%M:%S')))
106
111
  f.write("Tests duration: {} <br><br>".format(str(duration).split(".")[0]))
107
- if brg_version:
108
- f.write("Bridge version: {} <br><br>".format(brg_version))
109
- f.write(tabulate.tabulate([[len(tests)-(failures+skipped), skipped, failures, len(tests)]], headers=["PASSED", "SKIPPED", "FAILED", "TOTAL"], tablefmt="html"))
110
- f.write(generate_tests_table(tests, html=True))
111
- f.write("<br><br>")
112
+ f.write("Certificate version: {} <br><br>".format(CERT_VERSION))
113
+ 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))
117
+ if brg:
118
+ f.write("Bridge version: {} <br><br>".format(brg.version))
119
+ f.write(tabulate.tabulate([[len(tests)-(failures+skipped), skipped, failures, len(tests)]], headers=["PASSED", "SKIPPED", "FAILED", "TOTAL"], tablefmt="html"))
120
+ f.write(generate_tests_table(tests, html=True))
121
+ f.write("<br><br>")
112
122
  if pipeline:
113
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']))
114
124
  f.write("<img src='https://www.wiliot.com/src/img/svg/logo.svg' width='100' height='40' alt='Wiliot logo'>")
@@ -118,59 +128,94 @@ def generate_results_files(html=True, pdf=True, failures=0, skipped=0, duration=
118
128
  # Generate PDF file
119
129
  if pdf:
120
130
  doc = SimpleDocTemplate(os.path.join(BASE_DIR, UT_RESULT_FILE_PDF), pagesize=letter)
121
- styles = getSampleStyleSheet()
122
- elements = []
123
- update_status = get_update_status_from_log_file()
131
+ doc.title = "Wiliot Certificate Results"
132
+ elements, hdr_page = [], []
133
+
134
+ # Add Wiliot Logo
135
+ img = Image(os.path.join(BASE_DIR, "../common", "wlt_logo.png"), width=100, height=40) # Adjust size as needed
136
+ hdr_page.append(img)
137
+ hdr_page.append(Spacer(1, 20))
124
138
 
125
139
  # Title and Summary
126
140
  red_header = STYLES_PDF.get("RED_HEADER", ParagraphStyle("Default"))
127
141
  green_header = STYLES_PDF.get("GREEN_HEADER", ParagraphStyle("Default"))
128
142
  module_header = STYLES_PDF.get("MODULE_HEADER", ParagraphStyle("Default"))
129
- test_header = STYLES_PDF.get("TEST_HEADER", ParagraphStyle("Default"))
143
+ test_header = STYLES_PDF.get("TEST_LINK_HEADER", ParagraphStyle("Default"))
144
+ test_purpose = STYLES_PDF.get("TEST_HEADER", ParagraphStyle("Default"))
145
+ bold_text_style = STYLES_PDF.get("BLACK_BOLD", ParagraphStyle("Default"))
146
+ centered_text_style = STYLES_PDF.get("BLACK", ParagraphStyle("Default"))
130
147
  if error:
131
- title = Paragraph("<b>Wiliot UT Failed!</b>", red_header)
132
- elements.append(title)
133
- elements.append(Paragraph(f"Error: {error}", styles['BodyText']))
148
+ title = Paragraph("<b>Wiliot Certificate Error!</b>", red_header)
149
+ hdr_page.append(title)
150
+ hdr_page.append(Spacer(1, 20))
151
+ hdr_page.append(Paragraph(f"{error}", bold_text_style))
134
152
  else:
135
- title = Paragraph("<b>Wiliot UT Passed!</b>", green_header) if not failures else Paragraph("<b>Wiliot UT Failed!</b>", red_header)
136
- elements.append(title)
137
- elements.append(Spacer(1, 50))
153
+ title = Paragraph("<b>Wiliot Certificate Passed!</b>", green_header) if not failures else Paragraph("<b>Wiliot Certificate Failed!</b>", red_header)
154
+ hdr_page.append(title)
155
+ hdr_page.append(Spacer(1, 20))
156
+ hdr_page.append(Paragraph(f"<b>Summary</b>", module_header))
157
+ 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))
162
+ 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
+ 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))
175
+ hdr_page.append(Spacer(1, 20))
138
176
 
139
- elements.append(Paragraph(f"Tests duration: {str(duration).split('.')[0]}", styles['BodyText']))
140
- if brg_version:
141
- elements.append(Paragraph(f"Bridge version: {brg_version}", styles['BodyText']))
142
- elements.append(Paragraph(f"Update status: {update_status}", styles['BodyText']))
143
- elements.append(Spacer(1, 20))
144
-
145
- # Summary Table
146
- summary_data = [
177
+ # Count Table
178
+ count_data = [
147
179
  ["PASSED", "SKIPPED", "FAILED", "TOTAL"],
148
180
  [len(tests)-(failures+skipped), skipped, failures, len(tests)]
149
181
  ]
150
- summary_table = Table(summary_data)
151
- summary_table.setStyle(INNER_TABLE_STYLE)
152
- elements.append(summary_table)
153
- elements.append(Spacer(1, 20))
182
+ count_table = Table(count_data)
183
+ count_table.setStyle(INNER_TABLE_STYLE)
184
+ hdr_page.append(count_table)
185
+ hdr_page.append(Spacer(1, 20))
154
186
 
155
187
  # Test Results
156
188
  results_per_module = generate_results_per_module_for_pdf(tests=tests)
189
+ summary_data = []
157
190
  for module, test_results in results_per_module.items():
158
- elements.append(Paragraph(f"<b>{module} Module</b>", module_header))
159
- elements.append(Spacer(1, 20))
191
+ module_objects = []
192
+ 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))
194
+ module_objects.append(Spacer(1, 20))
160
195
  for test_result in test_results:
161
- elements.append(Paragraph(f"<b>{test_result.name}</b>", test_header))
162
- elements.append(Spacer(1, 10))
163
-
164
- elements.append(test_result.result)
165
- elements.append(Spacer(1, 10))
166
-
167
- elements.append(Paragraph(f"Tested Devices: {test_result.devices}", styles['BodyText']))
168
- elements.append(Paragraph(f"Duration: {test_result.duration}", styles['BodyText']))
169
- elements.append(Spacer(1, 10))
170
-
171
- elements.append(test_result.test_table)
172
- elements.append(Spacer(1, 20))
173
- elements.append(Spacer(1, 50))
196
+ 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
198
+ 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))
202
+ test_objects.append(Spacer(1, 10))
203
+ test_objects.append(test_result.result)
204
+ test_objects.append(Spacer(1, 10))
205
+ if not test_result.test_skipped:
206
+ module_skipped = False # Set to False if at least one test isn't skipped
207
+ test_objects.append(Paragraph(f"Tested devices: {test_result.devices}", bold_text_style))
208
+ test_objects.append(Paragraph(f"Test duration: {test_result.duration}", bold_text_style))
209
+ test_objects.append(Spacer(1, 10))
210
+ test_objects.append(test_result.test_table)
211
+ test_objects.append(Spacer(1, 20))
212
+ module_objects.append(KeepTogether(test_objects))
213
+ if not module_skipped:
214
+ elements += module_objects
215
+ elements.append(PageBreak())
216
+ summary_table = Table([["Module", "Name", "Result", "Compliance"]] + summary_data)
217
+ summary_table.setStyle(INNER_TABLE_STYLE)
218
+ elements = hdr_page + [summary_table, PageBreak()] + elements
174
219
 
175
220
  doc.build(elements)
176
221
 
@@ -199,46 +244,46 @@ HTML_START = """
199
244
  <head>
200
245
  <meta charset='utf-8'>
201
246
  <meta http-equiv='X-UA-Compatible' content='IE=edge'>
202
- <title>UT RESULTS</title>
247
+ <title>Wiliot Certificate Results</title>
203
248
  <meta name='viewport' content='width=device-width, initial-scale=1'>
204
249
  <style>
205
- html, body {
250
+ html, body {{
206
251
  height: 100%;
207
- }
252
+ }}
208
253
 
209
- html {
254
+ html {{
210
255
  display: table;
211
256
  margin: auto;
212
- }
257
+ }}
213
258
 
214
- body {
259
+ body {{
215
260
  display: table-cell;
216
261
  vertical-align: middle;
217
- }
218
- table {
262
+ }}
263
+ table {{
219
264
  border-collapse: collapse;
220
265
  font-family: Tahoma, Geneva, sans-serif;
221
- }
222
- table td {
266
+ }}
267
+ table td {{
223
268
  padding: 15px;
224
- }
225
- table thead td {
269
+ }}
270
+ table thead td {{
226
271
  background-color: #54585d;
227
272
  color: #ffffff;
228
273
  font-weight: bold;
229
274
  font-size: 13px;
230
275
  border: 1px solid #54585d;
231
- }
232
- table tbody td {
276
+ }}
277
+ table tbody td {{
233
278
  color: #636363;
234
279
  border: 1px solid #dddfe1;
235
- }
236
- table tbody tr {
280
+ }}
281
+ table tbody tr {{
237
282
  background-color: #f9fafb;
238
- }
239
- table tbody tr:nth-child(odd) {
283
+ }}
284
+ table tbody tr:nth-child(odd) {{
240
285
  background-color: #ffffff;
241
- }
286
+ }}
242
287
  </style>
243
288
  </head>
244
289
  <body>
@@ -254,9 +299,12 @@ HTML_END = """
254
299
  STYLES_PDF = {
255
300
  "GREEN_HEADER": ParagraphStyle("Green Header", fontName="Helvetica-Bold", fontSize=20, textColor=colors.green, alignment=TA_CENTER),
256
301
  "RED_HEADER": ParagraphStyle("Red Header", fontName="Helvetica-Bold", fontSize=20, textColor=colors.red, alignment=TA_CENTER),
257
- "MODULE_HEADER": ParagraphStyle("Module Header", fontName="Helvetica-Bold", fontSize=16, textColor=colors.blue, alignment=TA_CENTER),
302
+ "MODULE_HEADER": ParagraphStyle("Module Header", fontName="Helvetica-Bold", fontSize=16, textColor=colors.navy, alignment=TA_CENTER),
258
303
  "TEST_HEADER": ParagraphStyle("Test Header", fontName="Helvetica-Bold", fontSize=12, textColor=colors.black, alignment=TA_CENTER),
259
- "BLUE": ParagraphStyle("Blue", fontName="Helvetica-Bold", fontSize=9, textColor=colors.blue, splitLongWords=False, 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'),
306
+ "BLACK_BOLD": ParagraphStyle("Black Bold", fontName="Helvetica-Bold", fontSize=9, textColor=colors.black, splitLongWords=False, alignment=TA_LEFT, wordWrap = 'CJK'),
307
+ "BLUE": ParagraphStyle("Blue", fontName="Helvetica-Bold", fontSize=9, textColor=colors.navy, splitLongWords=False, alignment=TA_CENTER),
260
308
  "CYAN": ParagraphStyle("Cyan", fontName="Helvetica-Bold", fontSize=9, textColor=colors.cyan, splitLongWords=False, alignment=TA_CENTER),
261
309
  "GREEN": ParagraphStyle("Green", fontName="Helvetica-Bold", fontSize=9, textColor=colors.green, splitLongWords=False, alignment=TA_CENTER),
262
310
  "WARNING": ParagraphStyle("Warning", fontName="Helvetica-Bold", fontSize=9, textColor=colors.gold, splitLongWords=False, alignment=TA_CENTER),
@@ -277,21 +325,23 @@ INNER_TABLE_STYLE = TableStyle([
277
325
  ('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),
278
326
  ('FONTSIZE', (0, 0), (-1, 0), 9),
279
327
  ('BOTTOMPADDING', (0, 0), (-1, 0), 12),
280
- ('BACKGROUND', (0, 1), (-1, -1), colors.beige),
328
+ ('BACKGROUND', (0, 1), (-1, -1), colors.whitesmoke),
281
329
  ('WORDWRAP', (0, 0), (-1, -1), False),
282
330
  ])
283
331
 
284
332
  def generate_results_per_module_for_pdf(tests=[]):
333
+ text_style = STYLES_PDF.get("BLACK", ParagraphStyle("Default"))
285
334
  results_per_module = {}
286
335
  for test in tests:
287
- name=test.module_name if (not test.internal_brg or "gw" in test.module_name) else f"{test.module_name} (internal brg)"
288
336
  devices_to_print = (test.gw if not test.brg0 or test.gw_only else
289
337
  (f"{test.brg0.id_str}\n{test.brg1.id_str}" if test.brg1 and test.multi_brg else test.brg0.id_str))
290
- inner_table = [[phase.name, pass_or_fail_pdf(phase), phase.reason] for phase in test.phases]
291
- test_table = Table([["Phase", "Result", "Reason"]] + inner_table)
338
+ inner_table = [[Paragraph(phase.name, text_style), pass_or_fail_pdf(phase), Paragraph(phase.reason, text_style)] for phase in test.phases]
339
+ test_table = Table([["Phase", "Result", "Notes"]] + inner_table)
292
340
  test_table.setStyle(INNER_TABLE_STYLE)
293
- test_result = TestResult(name=name, devices_to_print=devices_to_print,
294
- test_table=test_table, result=pass_or_fail_pdf(test), duration=test.duration)
341
+ 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),
343
+ duration=test.duration, purpose=str(test.test_json[PURPOSE]), compliance=compliance,
344
+ kb_link=test.test_json[DOCUMENTATION], test_skipped=(test.rc == TEST_SKIPPED))
295
345
  module_name = cert_utils.module2name(test.test_module)
296
346
  if module_name not in results_per_module:
297
347
  results_per_module[module_name] = [test_result]
@@ -43,14 +43,14 @@ 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, duration=duration, error=error, pipeline=cert_common.pipeline_running())
46
+ cert_results.generate_results_files(html=True, pdf=True, start_time=start_time, duration=duration, error=error, pipeline=cert_common.pipeline_running())
47
47
  sys.exit(-1)
48
48
 
49
49
  ##################################
50
50
  # Test
51
51
  ##################################
52
52
  class WltTest:
53
- def __init__(self, line, gw, mqttc, brg0=None, brg1=None, exit_on_param_failure=False, gw_lan=False,
53
+ def __init__(self, line, gw, mqttc, sim_mqttc=None, brg0=None, brg1=None, exit_on_param_failure=False, gw_lan=False,
54
54
  gw_orig_versions={}, server=PROD, latest=False, release_candidate=False, private_setup=False,
55
55
  internal_brg_obj=None, gw_sim='', data='', port='', protobuf=False):
56
56
  if line:
@@ -73,7 +73,7 @@ class WltTest:
73
73
  self.test_json = {}
74
74
  self.internal_brg = False
75
75
  self.multi_brg = False
76
- self.phases = [Phase(PROLOG), Phase(TEST_BODY), Phase(EPILOG)]
76
+ self.phases = [Phase(PRE_CONFIG), Phase(TEST_BODY), Phase(RESTORE_CONFIG)]
77
77
  self.params = []
78
78
 
79
79
  self.gw = gw
@@ -83,11 +83,12 @@ class WltTest:
83
83
  self.brg0 = brg0
84
84
  self.brg1 = brg1
85
85
  self.rc = TEST_PASSED
86
- self.reason = TEST_SUCCESS
86
+ self.reason = ""
87
87
  self.start_time = None
88
88
  self.end_time = None
89
89
  self.duration = None
90
90
  self.mqttc = mqttc
91
+ self.sim_mqttc = sim_mqttc
91
92
  self.rtsa = ""
92
93
  self.exit_on_param_failure = exit_on_param_failure
93
94
  self.rand = random.randrange(255)
@@ -105,7 +106,7 @@ class WltTest:
105
106
  def create_test_phases_and_params(self, line_params):
106
107
  self.params = []
107
108
  if len(self.test_json[ALL_SUPPORTED_VALUES]) > 0:
108
- self.phases = [Phase(PROLOG)] + [Phase(param) for param in self.test_json[ALL_SUPPORTED_VALUES]] + [Phase(EPILOG)]
109
+ self.phases = [Phase(PRE_CONFIG)] + [Phase(param) for param in self.test_json[ALL_SUPPORTED_VALUES]] + [Phase(RESTORE_CONFIG)]
109
110
  for param_phase in self.phases:
110
111
  param = Param(param_phase.name)
111
112
  if (param.name in line_params or param.value in [eval_param(p) for p in line_params]):
@@ -120,7 +121,7 @@ class WltTest:
120
121
  if line_params:
121
122
  error = f"ERROR: For {self.name} params exist in test_list but not in test_json!\nline_params:{line_params}"
122
123
  handle_error(error, datetime.datetime.now())
123
- self.phases = [Phase(PROLOG), Phase(TEST_BODY), Phase(EPILOG)]
124
+ self.phases = [Phase(PRE_CONFIG), Phase(TEST_BODY), Phase(RESTORE_CONFIG)]
124
125
 
125
126
  # Phase rc
126
127
  def set_phase_rc(self, phase_name, rc):
@@ -134,9 +135,7 @@ class WltTest:
134
135
  # Phase reason
135
136
  def add_phase_reason(self, phase_name, reason):
136
137
  phase = self.get_phase_by_name(phase_name)
137
- if TEST_SUCCESS in phase.reason:
138
- phase.reason = phase.reason.replace(TEST_SUCCESS, "")
139
- else:
138
+ if phase.reason:
140
139
  phase.reason += "\n"
141
140
  if reason not in phase.reason:
142
141
  phase.reason += reason
@@ -158,7 +157,7 @@ class WltTest:
158
157
 
159
158
  def reset_result(self):
160
159
  self.rc = TEST_PASSED
161
- self.reason = TEST_SUCCESS
160
+ self.reason = ""
162
161
 
163
162
  def get_seq_id(self):
164
163
  self.rand = (self.rand + 1) % 256
@@ -166,9 +165,7 @@ class WltTest:
166
165
 
167
166
  # TODO - remove when test reason is re-designed
168
167
  def add_reason(self, reason):
169
- if TEST_SUCCESS in self.reason:
170
- self.reason = self.reason.replace(TEST_SUCCESS, "")
171
- else:
168
+ if self.reason:
172
169
  self.reason += "\n"
173
170
  if reason not in self.reason:
174
171
  self.reason += reason
@@ -180,7 +177,7 @@ class WltTest:
180
177
  # Phases
181
178
  ##################################
182
179
  class Phase:
183
- def __init__(self, input=None, tested=True, rc=TEST_INIT, reason=TEST_SUCCESS):
180
+ def __init__(self, input=None, tested=True, rc=TEST_INIT, reason=""):
184
181
  self.name = str(input)
185
182
  self.tested = tested
186
183
  self.rc = rc
@@ -257,7 +254,7 @@ def cfg_brg_defaults_ret_after_fail(test):
257
254
  def handle_prep_brg_for_latest(test, interface, start_time):
258
255
  if test.rc == TEST_FAILED:
259
256
  utPrint(f"No ModuleIf pkts found, try again", "BLUE")
260
- test.rc = TEST_SUCCESS
257
+ test.rc = ""
261
258
  test, interface = cert_common.get_module_if_pkt(test)
262
259
  if test.rc == TEST_FAILED:
263
260
  error = f"ERROR: No ModuleIf pkts found for 2 tries, couldn't perform OTA for bridge"
@@ -324,10 +321,10 @@ def get_gw_id(gw):
324
321
  else:
325
322
  return gw
326
323
 
327
- def ut_prep_gw(args, mqttc, start_time):
324
+ def ut_prep_gw(args, mqttc, start_time, tester_gw=False):
328
325
  # Check GW is online and configure to defaults
329
326
  utPrint(SEP)
330
- gw = args.gw
327
+ gw = args.brg_cloud_connectivity if args.brg_cloud_connectivity and not tester_gw else args.gw
331
328
  test = WltTest("", gw, mqttc, gw_lan=args.lan)
332
329
  utPrint(f"Getting GW {gw} Information", "BLUE")
333
330
  response = cert_common.get_gw_info(test)
@@ -0,0 +1,35 @@
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>
4
+
5
+ # ------------- edge_mgmt -------------
6
+ edge_mgmt/stat_test
7
+ 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
+
9
+ # ------------- energy2400 -------------
10
+ energy2400/pattern_test ENERGY_PATTERN_2_4_CHANNEL_37 ENERGY_PATTERN_2_4_CHANNEL_39 ENERGY_PATTERN_2_4_FREQ_2454
11
+ energy2400/output_power_test -12 0 3
12
+ energy2400/duty_cycle_test 1 50 75
13
+ energy2400/signal_indicator_test internal_brg brg0_rxtx_brg1_rxtx
14
+
15
+ # ------------- energy_sub1g -------------
16
+ energy_sub1g/pattern_test SUB1G_ENERGY_PATTERN_NO_ENERGIZING SUB1G_ENERGY_PATTERN_FCC_HOPPING SUB1G_ENERGY_PATTERN_SINGLE_TONE_917500 SUB1G_ENERGY_PATTERN_NZ_HOPPING
17
+ energy_sub1g/duty_cycle_test 15 20 40 0
18
+ energy_sub1g/signal_indicator_test 60,4
19
+
20
+ # ------------- datapath -------------
21
+ datapath/rssi_threshold_test -80
22
+ datapath/pattern_test DATAPATH_PATTERN_38_38_39 DATAPATH_PATTERN_EU_PATTERN
23
+ datapath/output_power_test -12 0 3
24
+ datapath/pkt_filter_test PKT_FILTER_DISABLE_FORWARDING PKT_FILTER_TEMP_PKT
25
+ datapath/pkt_filter_gen3_test PKT_FILTER_DISABLE_FORWARDING PKT_FILTER_TEMP_PKT
26
+ datapath/pkt_filter_ble5_test PKT_FILTER_DISABLE_FORWARDING PKT_FILTER_TEMP_PKT
27
+ datapath/rx_channel_test RX_CHANNEL_37 RX_CHANNEL_38 RX_CHANNEL_10_250K RX_CHANNEL_10_500K
28
+ datapath/aging_test low_pacer
29
+ datapath/num_of_tags_test 500
30
+
31
+
32
+ # ------------- calibration -------------
33
+ calibration/output_power_test -12 0 3
34
+ calibration/interval_test 1 25 50
35
+ calibration/pattern_test CALIBRATION_PATTERN_38_38_39 CALIBRATION_PATTERN_DISABLE_BEACON
@@ -0,0 +1,45 @@
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
8
+
9
+ # ------------- edge_mgmt -------------
10
+ edge_mgmt/stat_test
11
+ 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
+
13
+ # ------------- energy2400 -------------
14
+ energy2400/pattern_test ENERGY_PATTERN_2_4_NO_ENERGIZING ENERGY_PATTERN_2_4_CHANNEL_37 ENERGY_PATTERN_2_4_CHANNEL_38 ENERGY_PATTERN_2_4_CHANNEL_39 ENERGY_PATTERN_2_4_FREQ_2450 ENERGY_PATTERN_2_4_FREQ_2454
15
+ energy2400/output_power_test -12 -8 -4 0 2 3
16
+ energy2400/duty_cycle_test 1 25 50 75
17
+ 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
+ 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
20
+
21
+ # ------------- energy_sub1g -------------
22
+ 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
23
+ energy_sub1g/duty_cycle_test 15 20 40 0
24
+ energy_sub1g/signal_indicator_test 60,4 100,3
25
+
26
+ # ------------- datapath -------------
27
+ datapath/rssi_threshold_test -80 -65 -10
28
+ datapath/pattern_test DATAPATH_PATTERN_38_38_39 DATAPATH_PATTERN_EU_PATTERN
29
+ datapath/output_power_test -12 -8 -4 0 2 3
30
+ datapath/pacer_interval_test 5 15 30 60
31
+ datapath/pacer_interval_ble5_test 5 15 30 60
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
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
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
35
+ #datapath/rx_channel_test RX_CHANNEL_37 RX_CHANNEL_38 RX_CHANNEL_39 RX_CHANNEL_10_250K RX_CHANNEL_10_500K
36
+ datapath/rx_rate_gen2_test mid_values diff_pacer min_value max_value diff_rate
37
+ datapath/rx_rate_gen3_test mid_values diff_pacer min_value max_value diff_rate
38
+ datapath/aging_test low_pacer high_pacer
39
+ datapath/pacer_interval_tags_count_test 1 10 15 30
40
+ datapath/num_of_tags_test 5000
41
+
42
+ # ------------- calibration -------------
43
+ calibration/output_power_test -12 -8 -4 0 2 3
44
+ calibration/interval_test 1 25 50
45
+ calibration/pattern_test CALIBRATION_PATTERN_38_38_39 CALIBRATION_PATTERN_STANDARD CALIBRATION_PATTERN_EU_PATTERN CALIBRATION_PATTERN_DISABLE_BEACON
@@ -26,8 +26,9 @@ datapath/pkt_filter_test PKT_FILTER_DISABLE_FORWARDING PKT_FILTER_TEMP_PKT
26
26
  datapath/pkt_filter_gen3_test PKT_FILTER_DISABLE_FORWARDING PKT_FILTER_TEMP_PKT
27
27
  datapath/pkt_filter_ble5_test PKT_FILTER_DISABLE_FORWARDING PKT_FILTER_TEMP_PKT
28
28
  datapath/rx_channel_test RX_CHANNEL_37 RX_CHANNEL_38 RX_CHANNEL_10_250K RX_CHANNEL_10_500K
29
- datapath/num_of_tags_test 500
29
+ datapath/aging_test low_pacer
30
30
  datapath/stress_gen3_test rep1_adaptive_pacer
31
+ datapath/num_of_tags_test 500
31
32
 
32
33
 
33
34
  # ------------- calibration -------------
@@ -3,6 +3,9 @@
3
3
  # Run command example:
4
4
  # python ut.py --gw SIM --brg <XXXXXXXXXXXX> --tl certificate_test_list.txt --data sim --port <COM_PORT>
5
5
 
6
+ # ------------- pwr_mgmt -------------
7
+ ut/pwr_mgmt/pwr_mgmt_test
8
+
6
9
  # ------------- edge_mgmt -------------
7
10
  edge_mgmt/stat_test
8
11
  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,6 +15,8 @@ energy2400/pattern_test ENERGY_PATTERN_2_4_NO_ENERGIZING ENERGY_PATTERN_2_4_CHAN
12
15
  energy2400/output_power_test -12 -8 -4 0 2 3
13
16
  energy2400/duty_cycle_test 1 25 50 75
14
17
  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
+ 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
15
20
 
16
21
  # ------------- energy_sub1g -------------
17
22
  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
@@ -21,23 +26,24 @@ energy_sub1g/signal_indicator_test 60,4 100,3
21
26
  # ------------- datapath -------------
22
27
  datapath/rssi_threshold_test -80 -65 -10
23
28
  datapath/pattern_test DATAPATH_PATTERN_38_38_39 DATAPATH_PATTERN_EU_PATTERN
24
- datapath/tx_repetition_test 2 4
29
+ datapath/tx_repetition_test 2 4
25
30
  datapath/output_power_test -12 -8 -4 0 2 3
26
31
  datapath/pacer_interval_test 5 15 30 60
27
32
  datapath/pacer_interval_ble5_test 5 15 30 60
28
33
  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
29
34
  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
30
35
  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
31
- datapath/rx_channel_test RX_CHANNEL_37 RX_CHANNEL_38 RX_CHANNEL_39 RX_CHANNEL_10_250K RX_CHANNEL_10_500K
36
+ #datapath/rx_channel_test RX_CHANNEL_37 RX_CHANNEL_38 RX_CHANNEL_39 RX_CHANNEL_10_250K RX_CHANNEL_10_500K
32
37
  datapath/rx_rate_gen2_test mid_values diff_pacer min_value max_value diff_rate
33
38
  datapath/rx_rate_gen3_test mid_values diff_pacer min_value max_value diff_rate
34
- datapath/num_of_tags_test 2500
35
39
  datapath/pacer_interval_tags_count_test 1 10 15 30
36
40
  datapath/stress_test rep3 rep2 rep1 rep1_adaptive_pacer pixel_burst
37
41
  datapath/stress_gen3_test rep3 rep2 rep1 rep1_adaptive_pacer pixel_burst
42
+ datapath/aging_test low_pacer high_pacer
43
+ datapath/num_of_tags_test 5000
44
+
38
45
 
39
46
  # ------------- calibration -------------
40
47
  calibration/output_power_test -12 -8 -4 0 2 3
41
48
  calibration/interval_test 1 25 50
42
49
  calibration/pattern_test CALIBRATION_PATTERN_38_38_39 CALIBRATION_PATTERN_STANDARD CALIBRATION_PATTERN_EU_PATTERN CALIBRATION_PATTERN_DISABLE_BEACON
43
-
@@ -1,4 +1,6 @@
1
+ import sys
1
2
  import os
3
+ sys.path.insert(0, os.path.abspath(".."))
2
4
  import argparse
3
5
  import brg_certificate.cert_common as cert_common
4
6
  from brg_certificate.cert_utils import *