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.
- brg_certificate/ag/energous_v0_defines.py +28 -28
- brg_certificate/ag/energous_v1_defines.py +28 -28
- brg_certificate/ag/energous_v2_defines.py +28 -28
- brg_certificate/ag/energous_v3_defines.py +28 -28
- brg_certificate/ag/energous_v4_defines.py +28 -28
- brg_certificate/ag/fanstel_lan_v0_defines.py +28 -28
- brg_certificate/ag/fanstel_lte_v0_defines.py +28 -28
- brg_certificate/ag/fanstel_wifi_v0_defines.py +28 -28
- brg_certificate/ag/minew_lte_v0_defines.py +28 -28
- brg_certificate/ag/wlt_cmd_if.html +1 -1
- brg_certificate/ag/wlt_types.html +3 -4
- brg_certificate/ag/wlt_types_ag.py +162 -163
- brg_certificate/brg_certificate.py +46 -12
- brg_certificate/brg_certificate_cli.py +1 -0
- brg_certificate/cert_common.py +31 -42
- brg_certificate/cert_config.py +7 -5
- brg_certificate/cert_data_sim.py +26 -4
- brg_certificate/cert_defines.py +30 -3
- brg_certificate/cert_gw_sim.py +12 -8
- brg_certificate/cert_mqtt.py +10 -2
- brg_certificate/cert_prints.py +7 -5
- brg_certificate/cert_protobuf.py +5 -1
- brg_certificate/cert_results.py +134 -84
- brg_certificate/cert_utils.py +14 -17
- brg_certificate/certificate_bcc_sanity_test_list.txt +35 -0
- brg_certificate/certificate_bcc_test_list.txt +45 -0
- brg_certificate/certificate_sanity_test_list.txt +2 -1
- brg_certificate/certificate_test_list.txt +10 -4
- brg_certificate/restore_brg.py +2 -0
- brg_certificate/tests/calibration/interval_test/interval_test.json +2 -1
- brg_certificate/tests/calibration/interval_test/interval_test.py +1 -1
- brg_certificate/tests/calibration/output_power_test/output_power_test.json +5 -3
- brg_certificate/tests/calibration/output_power_test/output_power_test.py +1 -1
- brg_certificate/tests/calibration/pattern_test/pattern_test.json +5 -2
- brg_certificate/tests/calibration/pattern_test/pattern_test.py +1 -1
- brg_certificate/tests/datapath/aging_test/aging_test.json +20 -0
- brg_certificate/tests/datapath/aging_test/aging_test.py +135 -0
- brg_certificate/tests/datapath/num_of_tags_test/num_of_tags_test.json +8 -3
- brg_certificate/tests/datapath/num_of_tags_test/num_of_tags_test.py +2 -2
- brg_certificate/tests/datapath/output_power_test/output_power_test.json +5 -2
- brg_certificate/tests/datapath/output_power_test/output_power_test.py +1 -1
- brg_certificate/tests/datapath/pacer_interval_ble5_test/pacer_interval_ble5_test.json +5 -2
- brg_certificate/tests/datapath/pacer_interval_ble5_test/pacer_interval_ble5_test.py +1 -1
- brg_certificate/tests/datapath/pacer_interval_tags_count_test/pacer_interval_tags_count_test.json +5 -2
- brg_certificate/tests/datapath/pacer_interval_tags_count_test/pacer_interval_tags_count_test.py +2 -2
- brg_certificate/tests/datapath/pacer_interval_test/pacer_interval_test.json +5 -2
- brg_certificate/tests/datapath/pacer_interval_test/pacer_interval_test.py +1 -1
- brg_certificate/tests/datapath/pattern_test/pattern_test.json +6 -3
- brg_certificate/tests/datapath/pattern_test/pattern_test.py +1 -1
- brg_certificate/tests/datapath/pkt_filter_ble5_test/pkt_filter_ble5_test.json +8 -2
- brg_certificate/tests/datapath/pkt_filter_ble5_test/pkt_filter_ble5_test.py +1 -1
- brg_certificate/tests/datapath/pkt_filter_gen3_test/pkt_filter_gen3_test.json +8 -2
- brg_certificate/tests/datapath/pkt_filter_gen3_test/pkt_filter_gen3_test.py +1 -1
- brg_certificate/tests/datapath/pkt_filter_test/pkt_filter_test.json +8 -2
- brg_certificate/tests/datapath/pkt_filter_test/pkt_filter_test.py +1 -1
- brg_certificate/tests/datapath/rssi_threshold_test/rssi_threshold_test.json +6 -2
- brg_certificate/tests/datapath/rssi_threshold_test/rssi_threshold_test.py +1 -1
- brg_certificate/tests/datapath/rx_channel_test/rx_channel_test.json +5 -2
- brg_certificate/tests/datapath/rx_channel_test/rx_channel_test.py +1 -1
- brg_certificate/tests/datapath/rx_rate_gen2_test/rx_rate_gen2_test.json +3 -4
- brg_certificate/tests/datapath/rx_rate_gen2_test/rx_rate_gen2_test.py +1 -1
- brg_certificate/tests/datapath/rx_rate_gen3_test/rx_rate_gen3_test.json +3 -4
- brg_certificate/tests/datapath/rx_rate_gen3_test/rx_rate_gen3_test.py +1 -1
- brg_certificate/tests/datapath/stress_gen3_test/stress_gen3_test.json +14 -22
- brg_certificate/tests/datapath/stress_gen3_test/stress_gen3_test.py +24 -24
- brg_certificate/tests/datapath/stress_test/stress_test.json +11 -18
- brg_certificate/tests/datapath/stress_test/stress_test.py +20 -27
- brg_certificate/tests/datapath/tx_repetition_algo_test/tx_repetition_algo_test.json +6 -2
- brg_certificate/tests/datapath/tx_repetition_algo_test/tx_repetition_algo_test.py +1 -1
- brg_certificate/tests/datapath/tx_repetition_test/tx_repetition_test.json +6 -2
- brg_certificate/tests/datapath/tx_repetition_test/tx_repetition_test.py +1 -1
- brg_certificate/tests/edge_mgmt/actions_test/actions_test.json +2 -1
- brg_certificate/tests/edge_mgmt/actions_test/actions_test.py +4 -24
- brg_certificate/tests/edge_mgmt/brg2brg_ota_ble5_test/brg2brg_ota_ble5_test.json +2 -1
- brg_certificate/tests/edge_mgmt/brg2brg_ota_ble5_test/brg2brg_ota_ble5_test.py +1 -1
- brg_certificate/tests/edge_mgmt/brg2brg_ota_test/brg2brg_ota_test.json +2 -1
- brg_certificate/tests/edge_mgmt/brg2brg_ota_test/brg2brg_ota_test.py +1 -1
- brg_certificate/tests/edge_mgmt/leds_test/leds_test.json +9 -5
- brg_certificate/tests/edge_mgmt/leds_test/leds_test.py +4 -4
- brg_certificate/tests/edge_mgmt/ota_test/ota_test.json +9 -5
- brg_certificate/tests/edge_mgmt/ota_test/ota_test.py +45 -1
- brg_certificate/tests/edge_mgmt/stat_test/stat_test.json +2 -1
- brg_certificate/tests/edge_mgmt/stat_test/stat_test.py +1 -1
- brg_certificate/tests/energy2400/duty_cycle_test/duty_cycle_test.json +5 -2
- brg_certificate/tests/energy2400/duty_cycle_test/duty_cycle_test.py +1 -1
- brg_certificate/tests/energy2400/output_power_test/output_power_test.json +5 -3
- brg_certificate/tests/energy2400/output_power_test/output_power_test.py +1 -1
- brg_certificate/tests/energy2400/pattern_test/pattern_test.json +5 -2
- brg_certificate/tests/energy2400/pattern_test/pattern_test.py +1 -1
- brg_certificate/tests/energy2400/signal_indicator_ble5_10_250k_test/signal_indicator_ble5_10_250k_test.json +20 -0
- brg_certificate/tests/energy2400/signal_indicator_ble5_10_250k_test/signal_indicator_ble5_10_250k_test.py +346 -0
- brg_certificate/tests/energy2400/signal_indicator_ble5_10_500k_test/signal_indicator_ble5_10_500k_test.json +20 -0
- brg_certificate/tests/energy2400/signal_indicator_ble5_10_500k_test/signal_indicator_ble5_10_500k_test.py +346 -0
- brg_certificate/tests/energy2400/signal_indicator_sub1g_2_4_test/signal_indicator_sub1g_2_4_test.json +2 -1
- brg_certificate/tests/energy2400/signal_indicator_sub1g_2_4_test/signal_indicator_sub1g_2_4_test.py +1 -1
- brg_certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.json +12 -5
- brg_certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.py +130 -43
- brg_certificate/tests/energy_sub1g/duty_cycle_test/duty_cycle_test.json +5 -2
- brg_certificate/tests/energy_sub1g/duty_cycle_test/duty_cycle_test.py +1 -1
- brg_certificate/tests/energy_sub1g/pattern_test/pattern_test.json +9 -3
- brg_certificate/tests/energy_sub1g/pattern_test/pattern_test.py +1 -1
- brg_certificate/tests/energy_sub1g/signal_indicator_functionality_test/signal_indicator_functionality_test.json +2 -1
- brg_certificate/tests/energy_sub1g/signal_indicator_functionality_test/signal_indicator_functionality_test.py +1 -1
- brg_certificate/tests/energy_sub1g/signal_indicator_test/signal_indicator_test.json +5 -2
- brg_certificate/tests/energy_sub1g/signal_indicator_test/signal_indicator_test.py +1 -1
- brg_certificate/wltPb_pb2.py +50 -38
- brg_certificate/wltPb_pb2.pyi +40 -34
- brg_certificate/wlt_types.py +4 -6
- common/wlt_logo.png +0 -0
- gw_certificate/ag/ut_defines.py +4 -1
- gw_certificate/cert_results.py +145 -0
- gw_certificate/gw_certificate.py +18 -6
- gw_certificate/gw_certificate_cli.py +3 -3
- gw_certificate/interface/mqtt.py +1 -0
- gw_certificate/interface/uart_if.py +1 -1
- gw_certificate/tests/actions.py +7 -2
- gw_certificate/tests/connection.py +1 -1
- gw_certificate/tests/generic.py +43 -17
- gw_certificate/tests/registration.py +2 -1
- gw_certificate/tests/uplink.py +26 -35
- {wiliot_certificate-1.4.0a2.dist-info → wiliot_certificate-1.5.1a1.dist-info}/METADATA +16 -10
- {wiliot_certificate-1.4.0a2.dist-info → wiliot_certificate-1.5.1a1.dist-info}/RECORD +126 -120
- {wiliot_certificate-1.4.0a2.dist-info → wiliot_certificate-1.5.1a1.dist-info}/WHEEL +1 -1
- {wiliot_certificate-1.4.0a2.dist-info → wiliot_certificate-1.5.1a1.dist-info}/top_level.txt +1 -0
- brg_certificate/tests/datapath/adaptive_pacer_algo_test/adaptive_pacer_algo_test.json +0 -13
- brg_certificate/tests/datapath/adaptive_pacer_algo_test/adaptive_pacer_algo_test.py +0 -76
- brg_certificate/tests/energy2400/signal_indicator_ble5_test/signal_indicator_ble5_test.json +0 -13
- brg_certificate/tests/energy2400/signal_indicator_ble5_test/signal_indicator_ble5_test.py +0 -398
- {wiliot_certificate-1.4.0a2.dist-info → wiliot_certificate-1.5.1a1.dist-info}/entry_points.txt +0 -0
- {wiliot_certificate-1.4.0a2.dist-info → wiliot_certificate-1.5.1a1.dist-info/licenses}/LICENSE +0 -0
brg_certificate/cert_results.py
CHANGED
|
@@ -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
|
|
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.
|
|
14
|
-
from brg_certificate.cert_defines import
|
|
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
|
|
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", "
|
|
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 "
|
|
73
|
+
elif "PASSED!" in l:
|
|
70
74
|
update_status = "GW and BRG versions were updated to latest successfully!"
|
|
71
75
|
break
|
|
72
|
-
elif "
|
|
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,
|
|
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
|
|
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
|
|
96
|
-
f.write("Bridge version: {} <br><br>".format(
|
|
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
|
|
103
|
+
f.write("<br><h1 style='color:#00AB83'>Wiliot Certificate Passed!</h1>")
|
|
100
104
|
else:
|
|
101
|
-
f.write("<br><h1 style='color:#ab0000'>Wiliot
|
|
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
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
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
|
-
|
|
122
|
-
elements = []
|
|
123
|
-
|
|
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("
|
|
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
|
|
132
|
-
|
|
133
|
-
|
|
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
|
|
136
|
-
|
|
137
|
-
|
|
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
|
-
|
|
140
|
-
|
|
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
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
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
|
-
|
|
159
|
-
|
|
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
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
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>
|
|
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.
|
|
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
|
-
"
|
|
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.
|
|
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", "
|
|
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
|
-
|
|
294
|
-
|
|
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]
|
brg_certificate/cert_utils.py
CHANGED
|
@@ -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(
|
|
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 =
|
|
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(
|
|
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(
|
|
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
|
|
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 =
|
|
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
|
|
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=
|
|
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 =
|
|
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/
|
|
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
|
-
|