wiliot-certificate 4.4.3__py3-none-any.whl → 4.5.0a1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. {brg_certificate → certificate}/ag/wlt_cmd_if.html +10 -4
  2. {brg_certificate → certificate}/ag/wlt_types_ag.py +1878 -519
  3. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/brg2brg_ota.json +69 -0
  4. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/brg2gw_hb.json +109 -0
  5. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/brg2gw_hb_sleep.json +45 -0
  6. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/calibration.json +96 -0
  7. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/custom.json +99 -0
  8. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/datapath.json +241 -13
  9. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/energy2400.json +120 -0
  10. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/energySub1g.json +96 -0
  11. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/externalSensor.json +135 -6
  12. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/interface.json +157 -0
  13. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/powerManagement.json +205 -0
  14. brg_certificate/ag/wlt_types_ag_jsons/unified_echo_pkt.json → certificate/ag/wlt_types_ag_jsons/unified_echo_ext_pkt.json +27 -11
  15. certificate/ag/wlt_types_ag_jsons/unified_echo_pkt.json +175 -0
  16. certificate/ag/wlt_types_ag_jsons/unified_sensor_pkt.json +65 -0
  17. certificate/cert_common.py +1459 -0
  18. certificate/cert_config.py +455 -0
  19. {brg_certificate → certificate}/cert_data_sim.py +131 -46
  20. {brg_certificate → certificate}/cert_defines.py +120 -128
  21. {brg_certificate → certificate}/cert_gw_sim.py +151 -49
  22. {brg_certificate → certificate}/cert_mqtt.py +164 -59
  23. {brg_certificate → certificate}/cert_prints.py +34 -33
  24. {brg_certificate → certificate}/cert_protobuf.py +15 -6
  25. {brg_certificate → certificate}/cert_results.py +205 -48
  26. certificate/cert_utils.py +622 -0
  27. certificate/certificate.py +198 -0
  28. certificate/certificate_cli.py +79 -0
  29. certificate/certificate_eth_test_list.txt +74 -0
  30. certificate/certificate_sanity_test_list.txt +65 -0
  31. certificate/certificate_test_list.txt +75 -0
  32. {brg_certificate → certificate}/tests/calibration/interval_test/interval_test.json +2 -2
  33. {brg_certificate → certificate}/tests/calibration/interval_test/interval_test.py +7 -6
  34. certificate/tests/calibration/output_power_test/output_power_test.json +22 -0
  35. certificate/tests/calibration/output_power_test/output_power_test.py +39 -0
  36. {brg_certificate → certificate}/tests/calibration/pattern_test/pattern_test.json +1 -1
  37. {brg_certificate → certificate}/tests/calibration/pattern_test/pattern_test.py +20 -15
  38. certificate/tests/cloud_connectivity/acl_ext_adv_test/acl_ext_adv_test.json +14 -0
  39. certificate/tests/cloud_connectivity/acl_ext_adv_test/acl_ext_adv_test.py +140 -0
  40. certificate/tests/cloud_connectivity/acl_test/acl_test.json +14 -0
  41. certificate/tests/cloud_connectivity/acl_test/acl_test.py +98 -0
  42. certificate/tests/cloud_connectivity/brg_ota_test/brg_ota_test.json +18 -0
  43. certificate/tests/cloud_connectivity/brg_ota_test/brg_ota_test.py +39 -0
  44. certificate/tests/cloud_connectivity/channel_scan_behaviour_test/channel_scan_behaviour_test.json +18 -0
  45. certificate/tests/cloud_connectivity/channel_scan_behaviour_test/channel_scan_behaviour_test.py +215 -0
  46. certificate/tests/cloud_connectivity/connection_test/connection_test.json +17 -0
  47. certificate/tests/cloud_connectivity/connection_test/connection_test.py +74 -0
  48. certificate/tests/cloud_connectivity/downlink_test/downlink_test.json +20 -0
  49. certificate/tests/cloud_connectivity/downlink_test/downlink_test.py +204 -0
  50. certificate/tests/cloud_connectivity/ext_adv_stress_test/ext_adv_stress_test.json +16 -0
  51. certificate/tests/cloud_connectivity/ext_adv_stress_test/ext_adv_stress_test.py +98 -0
  52. certificate/tests/cloud_connectivity/reboot_test/reboot_test.json +17 -0
  53. certificate/tests/cloud_connectivity/reboot_test/reboot_test.py +57 -0
  54. certificate/tests/cloud_connectivity/registration_test/registration_test.json +19 -0
  55. certificate/tests/cloud_connectivity/registration_test/registration_test.py +384 -0
  56. certificate/tests/cloud_connectivity/registration_test/registration_test_cli.py +90 -0
  57. certificate/tests/cloud_connectivity/stress_test/stress_test.json +16 -0
  58. certificate/tests/cloud_connectivity/stress_test/stress_test.py +97 -0
  59. certificate/tests/cloud_connectivity/uplink_ext_adv_test/uplink_ext_adv_test.json +24 -0
  60. certificate/tests/cloud_connectivity/uplink_ext_adv_test/uplink_ext_adv_test.py +93 -0
  61. certificate/tests/cloud_connectivity/uplink_test/uplink_test.json +19 -0
  62. certificate/tests/cloud_connectivity/uplink_test/uplink_test.py +161 -0
  63. {brg_certificate → certificate}/tests/datapath/aging_test/aging_test.json +1 -1
  64. certificate/tests/datapath/aging_test/aging_test.py +138 -0
  65. certificate/tests/datapath/event_ble5_test/event_ble5_test.json +16 -0
  66. certificate/tests/datapath/event_ble5_test/event_ble5_test.py +95 -0
  67. certificate/tests/datapath/event_test/event_test.json +16 -0
  68. certificate/tests/datapath/event_test/event_test.py +85 -0
  69. {brg_certificate → certificate}/tests/datapath/num_of_tags_test/num_of_tags_test.json +1 -1
  70. {brg_certificate → certificate}/tests/datapath/num_of_tags_test/num_of_tags_test.py +10 -8
  71. certificate/tests/datapath/output_power_test/output_power_test.json +22 -0
  72. {brg_certificate → certificate}/tests/datapath/output_power_test/output_power_test.py +17 -6
  73. {brg_certificate → certificate}/tests/datapath/pacer_interval_ble5_test/pacer_interval_ble5_test.json +1 -1
  74. {brg_certificate → certificate}/tests/datapath/pacer_interval_ble5_test/pacer_interval_ble5_test.py +10 -8
  75. {brg_certificate → certificate}/tests/datapath/pacer_interval_test/pacer_interval_test.json +1 -1
  76. {brg_certificate → certificate}/tests/datapath/pacer_interval_test/pacer_interval_test.py +9 -7
  77. {brg_certificate → certificate}/tests/datapath/pattern_test/pattern_test.json +2 -2
  78. {brg_certificate → certificate}/tests/datapath/pattern_test/pattern_test.py +18 -6
  79. certificate/tests/datapath/pkt_filter_ble5_chl21_test/pkt_filter_ble5_chl21_test.json +19 -0
  80. certificate/tests/datapath/pkt_filter_ble5_chl21_test/pkt_filter_ble5_chl21_test.py +61 -0
  81. {brg_certificate → certificate}/tests/datapath/pkt_filter_ble5_test/pkt_filter_ble5_test.json +1 -1
  82. {brg_certificate → certificate}/tests/datapath/pkt_filter_ble5_test/pkt_filter_ble5_test.py +11 -10
  83. certificate/tests/datapath/pkt_filter_brg2gw_ext_adv_test/pkt_filter_brg2gw_ext_adv_test.json +18 -0
  84. certificate/tests/datapath/pkt_filter_brg2gw_ext_adv_test/pkt_filter_brg2gw_ext_adv_test.py +83 -0
  85. {brg_certificate → certificate}/tests/datapath/pkt_filter_gen3_test/pkt_filter_gen3_test.json +1 -1
  86. {brg_certificate → certificate}/tests/datapath/pkt_filter_gen3_test/pkt_filter_gen3_test.py +10 -9
  87. {brg_certificate → certificate}/tests/datapath/pkt_filter_test/pkt_filter_test.json +1 -1
  88. {brg_certificate → certificate}/tests/datapath/pkt_filter_test/pkt_filter_test.py +10 -9
  89. {brg_certificate → certificate}/tests/datapath/rssi_threshold_test/rssi_threshold_test.json +1 -1
  90. {brg_certificate → certificate}/tests/datapath/rssi_threshold_test/rssi_threshold_test.py +9 -8
  91. brg_certificate/tests/datapath/output_power_test/output_power_test.json → certificate/tests/datapath/rx_channel_hopping_test/rx_channel_hopping_test.json +5 -4
  92. certificate/tests/datapath/rx_channel_hopping_test/rx_channel_hopping_test.py +77 -0
  93. {brg_certificate → certificate}/tests/datapath/rx_channel_test/rx_channel_test.json +2 -2
  94. {brg_certificate → certificate}/tests/datapath/rx_channel_test/rx_channel_test.py +7 -6
  95. {brg_certificate → certificate}/tests/datapath/rx_rate_gen2_test/rx_rate_gen2_test.json +7 -7
  96. {brg_certificate → certificate}/tests/datapath/rx_rate_gen2_test/rx_rate_gen2_test.py +112 -72
  97. {brg_certificate → certificate}/tests/datapath/rx_rate_gen3_test/rx_rate_gen3_test.json +7 -7
  98. {brg_certificate → certificate}/tests/datapath/rx_rate_gen3_test/rx_rate_gen3_test.py +112 -72
  99. {brg_certificate → certificate}/tests/datapath/stress_gen3_test/stress_gen3_test.json +3 -3
  100. {brg_certificate → certificate}/tests/datapath/stress_gen3_test/stress_gen3_test.py +12 -11
  101. {brg_certificate → certificate}/tests/datapath/stress_test/stress_test.json +3 -3
  102. {brg_certificate → certificate}/tests/datapath/stress_test/stress_test.py +12 -11
  103. {brg_certificate → certificate}/tests/datapath/tx_repetition_test/tx_repetition_test.json +2 -1
  104. {brg_certificate → certificate}/tests/datapath/tx_repetition_test/tx_repetition_test.py +14 -13
  105. certificate/tests/edge_mgmt/action_blink_test/action_blink_test.json +14 -0
  106. certificate/tests/edge_mgmt/action_blink_test/action_blink_test.py +24 -0
  107. certificate/tests/edge_mgmt/action_get_battery_sensor_test/action_get_battery_sensor_test.json +14 -0
  108. certificate/tests/edge_mgmt/action_get_battery_sensor_test/action_get_battery_sensor_test.py +43 -0
  109. certificate/tests/edge_mgmt/action_get_module_test/action_get_module_test.json +14 -0
  110. certificate/tests/edge_mgmt/action_get_module_test/action_get_module_test.py +42 -0
  111. certificate/tests/edge_mgmt/action_get_pof_data_test/action_get_pof_data_test.json +14 -0
  112. certificate/tests/edge_mgmt/action_get_pof_data_test/action_get_pof_data_test.py +44 -0
  113. certificate/tests/edge_mgmt/action_gw_hb_test/action_gw_hb_test.json +15 -0
  114. certificate/tests/edge_mgmt/action_gw_hb_test/action_gw_hb_test.py +42 -0
  115. certificate/tests/edge_mgmt/action_reboot_test/action_reboot_test.json +14 -0
  116. certificate/tests/edge_mgmt/action_reboot_test/action_reboot_test.py +49 -0
  117. certificate/tests/edge_mgmt/action_restore_defaults_test/action_restore_defaults_test.json +14 -0
  118. certificate/tests/edge_mgmt/action_restore_defaults_test/action_restore_defaults_test.py +102 -0
  119. certificate/tests/edge_mgmt/action_send_hb_test/action_send_hb_test.json +14 -0
  120. certificate/tests/edge_mgmt/action_send_hb_test/action_send_hb_test.py +41 -0
  121. {brg_certificate → certificate}/tests/edge_mgmt/periodic_msgs_test/periodic_msgs_test.json +2 -2
  122. {brg_certificate → certificate}/tests/edge_mgmt/periodic_msgs_test/periodic_msgs_test.py +22 -11
  123. {brg_certificate → certificate}/tests/energy2400/duty_cycle_test/duty_cycle_test.json +1 -1
  124. {brg_certificate → certificate}/tests/energy2400/duty_cycle_test/duty_cycle_test.py +7 -6
  125. certificate/tests/energy2400/output_power_test/output_power_test.json +22 -0
  126. {brg_certificate → certificate}/tests/energy2400/output_power_test/output_power_test.py +17 -6
  127. {brg_certificate → certificate}/tests/energy2400/pattern_test/pattern_test.json +1 -1
  128. {brg_certificate → certificate}/tests/energy2400/pattern_test/pattern_test.py +7 -6
  129. certificate/tests/energy2400/signal_indicator_ble5_test/signal_indicator_ble5_test.json +25 -0
  130. certificate/tests/energy2400/signal_indicator_ble5_test/signal_indicator_ble5_test.py +378 -0
  131. brg_certificate/tests/energy2400/signal_indicator_ble5_10_500k_test/signal_indicator_ble5_10_500k_test.json → certificate/tests/energy2400/signal_indicator_ext_adv_test/signal_indicator_ext_adv_test.json +3 -3
  132. brg_certificate/tests/energy2400/signal_indicator_ble5_10_500k_test/signal_indicator_ble5_10_500k_test.py → certificate/tests/energy2400/signal_indicator_ext_adv_test/signal_indicator_ext_adv_test.py +97 -87
  133. certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.json +23 -0
  134. certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.py +350 -0
  135. {brg_certificate → certificate}/tests/energy_sub1g/duty_cycle_test/duty_cycle_test.json +1 -1
  136. {brg_certificate → certificate}/tests/energy_sub1g/duty_cycle_test/duty_cycle_test.py +7 -6
  137. {brg_certificate → certificate}/tests/energy_sub1g/pattern_test/pattern_test.json +1 -1
  138. {brg_certificate → certificate}/tests/energy_sub1g/pattern_test/pattern_test.py +7 -6
  139. {brg_certificate → certificate}/tests/pwr_mgmt/pwr_mgmt_test/pwr_mgmt_test.json +1 -1
  140. {brg_certificate → certificate}/tests/pwr_mgmt/pwr_mgmt_test/pwr_mgmt_test.py +10 -10
  141. {brg_certificate → certificate}/tests/sensors/ext_sensor_test/ext_sensor_test.json +4 -4
  142. certificate/tests/sensors/ext_sensor_test/ext_sensor_test.py +455 -0
  143. certificate/wlt_types.py +122 -0
  144. {gw_certificate → common}/api_if/202/status.json +6 -0
  145. {gw_certificate → common}/api_if/203/status.json +6 -0
  146. {gw_certificate → common}/api_if/204/status.json +6 -0
  147. common/api_if/206/data.json +85 -0
  148. common/api_if/206/status.json +69 -0
  149. common/api_if/api_validation.py +85 -0
  150. common/web/templates/generator.html +148 -0
  151. common/web/templates/index.html +20 -0
  152. common/web/templates/menu.html +54 -0
  153. common/web/templates/parser.html +53 -0
  154. {brg_certificate/ag → common/web/templates}/wlt_types.html +1216 -191
  155. common/web/web_utils.py +377 -0
  156. {brg_certificate → common}/wltPb_pb2.py +14 -12
  157. {gw_certificate/common → common}/wltPb_pb2.pyi +16 -2
  158. gui_certificate/gui_certificate_cli.py +14 -0
  159. gui_certificate/server.py +1062 -0
  160. gui_certificate/templates/cert_run.html +1207 -0
  161. wiliot_certificate-4.5.0a1.dist-info/METADATA +110 -0
  162. wiliot_certificate-4.5.0a1.dist-info/RECORD +182 -0
  163. {wiliot_certificate-4.4.3.dist-info → wiliot_certificate-4.5.0a1.dist-info}/WHEEL +1 -1
  164. wiliot_certificate-4.5.0a1.dist-info/entry_points.txt +5 -0
  165. wiliot_certificate-4.5.0a1.dist-info/top_level.txt +3 -0
  166. brg_certificate/ag/energous_v0_defines.py +0 -925
  167. brg_certificate/ag/energous_v1_defines.py +0 -931
  168. brg_certificate/ag/energous_v2_defines.py +0 -925
  169. brg_certificate/ag/energous_v3_defines.py +0 -925
  170. brg_certificate/ag/energous_v4_defines.py +0 -925
  171. brg_certificate/ag/fanstel_lan_v0_defines.py +0 -925
  172. brg_certificate/ag/fanstel_lte_v0_defines.py +0 -925
  173. brg_certificate/ag/fanstel_wifi_v0_defines.py +0 -925
  174. brg_certificate/ag/minew_lte_v0_defines.py +0 -925
  175. brg_certificate/ag/wlt_types_ag_jsons/unified_echo_ext_pkt.json +0 -61
  176. brg_certificate/brg_certificate.py +0 -225
  177. brg_certificate/brg_certificate_cli.py +0 -63
  178. brg_certificate/cert_common.py +0 -923
  179. brg_certificate/cert_config.py +0 -402
  180. brg_certificate/cert_utils.py +0 -362
  181. brg_certificate/certificate_bcc_sanity_test_list.txt +0 -40
  182. brg_certificate/certificate_bcc_test_list.txt +0 -48
  183. brg_certificate/certificate_sanity_test_list.txt +0 -43
  184. brg_certificate/certificate_test_list.txt +0 -53
  185. brg_certificate/config/eclipse.json +0 -10
  186. brg_certificate/config/hivemq.json +0 -10
  187. brg_certificate/config/mosquitto.json +0 -10
  188. brg_certificate/config/mosquitto.md +0 -95
  189. brg_certificate/config/wiliot-dev.json +0 -10
  190. brg_certificate/restore_brg.py +0 -61
  191. brg_certificate/tests/calibration/output_power_test/output_power_test.json +0 -16
  192. brg_certificate/tests/calibration/output_power_test/output_power_test.py +0 -28
  193. brg_certificate/tests/datapath/aging_test/aging_test.py +0 -143
  194. brg_certificate/tests/datapath/pacer_interval_tags_count_test/pacer_interval_tags_count_test.json +0 -16
  195. brg_certificate/tests/datapath/pacer_interval_tags_count_test/pacer_interval_tags_count_test.py +0 -73
  196. brg_certificate/tests/datapath/tx_repetition_algo_test/tx_repetition_algo_test.json +0 -17
  197. brg_certificate/tests/datapath/tx_repetition_algo_test/tx_repetition_algo_test.py +0 -118
  198. brg_certificate/tests/edge_mgmt/actions_test/actions_test.json +0 -14
  199. brg_certificate/tests/edge_mgmt/actions_test/actions_test.py +0 -396
  200. brg_certificate/tests/edge_mgmt/brg2brg_ota_ble5_test/brg2brg_ota_ble5_test.json +0 -20
  201. brg_certificate/tests/edge_mgmt/brg2brg_ota_ble5_test/brg2brg_ota_ble5_test.py +0 -94
  202. brg_certificate/tests/edge_mgmt/brg2brg_ota_test/brg2brg_ota_test.json +0 -19
  203. brg_certificate/tests/edge_mgmt/brg2brg_ota_test/brg2brg_ota_test.py +0 -87
  204. brg_certificate/tests/edge_mgmt/leds_test/leds_test.json +0 -17
  205. brg_certificate/tests/edge_mgmt/leds_test/leds_test.py +0 -223
  206. brg_certificate/tests/edge_mgmt/ota_test/ota_test.json +0 -17
  207. brg_certificate/tests/edge_mgmt/ota_test/ota_test.py +0 -128
  208. brg_certificate/tests/energy2400/output_power_test/output_power_test.json +0 -16
  209. brg_certificate/tests/energy2400/signal_indicator_ble5_10_250k_test/signal_indicator_ble5_10_250k_test.json +0 -20
  210. brg_certificate/tests/energy2400/signal_indicator_ble5_10_250k_test/signal_indicator_ble5_10_250k_test.py +0 -321
  211. brg_certificate/tests/energy2400/signal_indicator_sub1g_2_4_test/signal_indicator_sub1g_2_4_test.json +0 -20
  212. brg_certificate/tests/energy2400/signal_indicator_sub1g_2_4_test/signal_indicator_sub1g_2_4_test.py +0 -141
  213. brg_certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.json +0 -20
  214. brg_certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.py +0 -276
  215. brg_certificate/tests/energy_sub1g/signal_indicator_functionality_test/signal_indicator_functionality_test.json +0 -20
  216. brg_certificate/tests/energy_sub1g/signal_indicator_functionality_test/signal_indicator_functionality_test.py +0 -390
  217. brg_certificate/tests/energy_sub1g/signal_indicator_test/signal_indicator_test.json +0 -16
  218. brg_certificate/tests/energy_sub1g/signal_indicator_test/signal_indicator_test.py +0 -28
  219. brg_certificate/tests/sensors/ext_sensor_test/ext_sensor_test.py +0 -305
  220. brg_certificate/wltPb_pb2.pyi +0 -234
  221. brg_certificate/wlt_types.py +0 -113
  222. gw_certificate/ag/ut_defines.py +0 -364
  223. gw_certificate/ag/wlt_types.py +0 -85
  224. gw_certificate/ag/wlt_types_ag.py +0 -5310
  225. gw_certificate/ag/wlt_types_data.py +0 -64
  226. gw_certificate/api/extended_api.py +0 -23
  227. gw_certificate/api_if/200/data.json +0 -106
  228. gw_certificate/api_if/200/status.json +0 -47
  229. gw_certificate/api_if/201/data.json +0 -98
  230. gw_certificate/api_if/201/status.json +0 -53
  231. gw_certificate/api_if/205/logs.json +0 -12
  232. gw_certificate/api_if/api_validation.py +0 -38
  233. gw_certificate/api_if/gw_capabilities.py +0 -54
  234. gw_certificate/cert_results.py +0 -145
  235. gw_certificate/common/analysis_data_bricks.py +0 -60
  236. gw_certificate/common/debug.py +0 -42
  237. gw_certificate/common/serialization_formatter.py +0 -93
  238. gw_certificate/common/utils.py +0 -8
  239. gw_certificate/common/utils_defines.py +0 -15
  240. gw_certificate/common/wltPb_pb2.py +0 -84
  241. gw_certificate/gw_certificate.py +0 -154
  242. gw_certificate/gw_certificate_cli.py +0 -87
  243. gw_certificate/interface/4.4.93_app.zip +0 -0
  244. gw_certificate/interface/4.4.93_sd_bl_app.zip +0 -0
  245. gw_certificate/interface/ble_simulator.py +0 -61
  246. gw_certificate/interface/ble_sniffer.py +0 -189
  247. gw_certificate/interface/flash_fw.py +0 -90
  248. gw_certificate/interface/if_defines.py +0 -36
  249. gw_certificate/interface/mqtt.py +0 -563
  250. gw_certificate/interface/nrfutil-linux +0 -0
  251. gw_certificate/interface/nrfutil-mac +0 -0
  252. gw_certificate/interface/nrfutil.exe +0 -0
  253. gw_certificate/interface/pkt_generator.py +0 -594
  254. gw_certificate/interface/uart_if.py +0 -236
  255. gw_certificate/interface/uart_ports.py +0 -20
  256. gw_certificate/templates/results.html +0 -241
  257. gw_certificate/templates/stage.html +0 -22
  258. gw_certificate/templates/table.html +0 -6
  259. gw_certificate/templates/test.html +0 -38
  260. gw_certificate/tests/__init__.py +0 -10
  261. gw_certificate/tests/actions.py +0 -289
  262. gw_certificate/tests/bad_crc_to_PER_quantization.csv +0 -51
  263. gw_certificate/tests/connection.py +0 -188
  264. gw_certificate/tests/downlink.py +0 -172
  265. gw_certificate/tests/generic.py +0 -238
  266. gw_certificate/tests/registration.py +0 -340
  267. gw_certificate/tests/static/__init__.py +0 -0
  268. gw_certificate/tests/static/connection_defines.py +0 -9
  269. gw_certificate/tests/static/downlink_defines.py +0 -9
  270. gw_certificate/tests/static/generated_packet_table.py +0 -195
  271. gw_certificate/tests/static/packet_table.csv +0 -10067
  272. gw_certificate/tests/static/references.py +0 -5
  273. gw_certificate/tests/static/uplink_defines.py +0 -14
  274. gw_certificate/tests/throughput.py +0 -240
  275. gw_certificate/tests/uplink.py +0 -853
  276. wiliot_certificate-4.4.3.dist-info/METADATA +0 -211
  277. wiliot_certificate-4.4.3.dist-info/RECORD +0 -210
  278. wiliot_certificate-4.4.3.dist-info/entry_points.txt +0 -3
  279. wiliot_certificate-4.4.3.dist-info/top_level.txt +0 -3
  280. {brg_certificate → certificate}/__init__.py +0 -0
  281. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/side_info_sensor.json +0 -0
  282. {brg_certificate → certificate}/ag/wlt_types_ag_jsons/signal_indicator_data.json +0 -0
  283. {gw_certificate → common}/api_if/202/data.json +0 -0
  284. {gw_certificate/api_if/200 → common/api_if/202}/logs.json +0 -0
  285. {gw_certificate → common}/api_if/203/data.json +0 -0
  286. {gw_certificate/api_if/201 → common/api_if/203}/logs.json +0 -0
  287. {gw_certificate → common}/api_if/204/data.json +0 -0
  288. {gw_certificate/api_if/202 → common/api_if/204}/logs.json +0 -0
  289. {gw_certificate → common}/api_if/205/data.json +0 -0
  290. {gw_certificate/api_if/203 → common/api_if/205}/logs.json +0 -0
  291. {gw_certificate → common}/api_if/205/status.json +0 -0
  292. {gw_certificate/api_if/204 → common/api_if/206}/logs.json +0 -0
  293. {gw_certificate → common/api_if}/__init__.py +0 -0
  294. {gw_certificate/api_if → gui_certificate}/__init__.py +0 -0
  295. {wiliot_certificate-4.4.3.dist-info → wiliot_certificate-4.5.0a1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,455 @@
1
+ from certificate.cert_defines import *
2
+ from certificate.cert_prints import *
3
+ from certificate.wlt_types import *
4
+ import certificate.cert_common as cert_common
5
+ import certificate.cert_protobuf as cert_protobuf
6
+ import certificate.cert_mqtt as cert_mqtt
7
+ import datetime, string, json, random
8
+
9
+ BLE5_MAX_RETRIES = BLE5_MAX_DURATION_MS//20
10
+
11
+ #################################
12
+ # GW
13
+ #################################
14
+
15
+ def is_gw(obj):
16
+ return hasattr(obj, 'mqttc') and hasattr(obj, 'id_str')
17
+
18
+ def get_protobuf_by_target(test, target):
19
+ return test.dut.protobuf if is_gw(test.dut) and target == DUT else test.tester.protobuf
20
+
21
+ def gw_configure(test, cfg={}, version="", extended_cfg={}, ret_pkt=False, wait=False, serialization_change=False, target=DUT):
22
+ mqttc = test.get_mqttc_by_target(target)
23
+ cfg = cfg if cfg else get_default_gw_dict(test, target=target)
24
+ gw_config = create_gw_config(test, cfg, target=target, version=version)
25
+ gw_config[GW_CONF][ADDITIONAL].update(extended_cfg)
26
+ gw_config[GW_CONF].update(extended_cfg)
27
+ if get_protobuf_by_target(test, target):
28
+ payload = cert_protobuf.downlink_to_pb(gw_config)
29
+ utPrint(f"Configuring GW with cfg pkt:\n{payload}", "BLUE")
30
+ else:
31
+ if not serialization_change:
32
+ gw_config[GW_CONF][ADDITIONAL][SERIALIZATION_FORMAT] = JSON
33
+ payload = json.dumps(gw_config)
34
+ utPrint(f"Configuring GW with cfg pkt:\n{payload}", "BLUE")
35
+ mqttc.flush_pkts()
36
+ mqttc.publish(mqttc.update_topic, payload=payload, qos=1)
37
+ if wait:
38
+ # Search for update packet
39
+ start_time = datetime.datetime.now()
40
+ while (datetime.datetime.now() - start_time).seconds < DEFAULT_GW_FIELD_UPDATE_TIMEOUT:
41
+ for p in cert_mqtt.get_all_status_pkts(mqttc):
42
+ if GW_CONF in p or GW_STATUS in p:
43
+ test.gw_api_version = p[GW_CONF][GW_API_VERSION] if GW_CONF in p else p[GW_STATUS][GW_API_VERSION]
44
+ print_pkt(p)
45
+ utPrint("SUCCESS: Found GW cfg", "GREEN")
46
+ wait_time_n_print(2)
47
+ if ret_pkt:
48
+ return test, p
49
+ else:
50
+ return test, DONE
51
+ print_update_wait()
52
+ test.rc = TEST_FAILED
53
+ test.add_reason(f"FAILURE: GW cfg not found after {DEFAULT_GW_FIELD_UPDATE_TIMEOUT} seconds!")
54
+ return test, NO_RESPONSE
55
+ else:
56
+ utPrint("Sent GW cfg, Wait is set to False", "BLUE")
57
+ return test, DONE
58
+
59
+ def gw_fw_upgrade(test, version, board_type, target=DUT):
60
+
61
+ # GW FW upgrade by action
62
+ gw_config = dict({ACTION: ACTION_GW_OTA,
63
+ # The URL here is for testing. The cloud using the BTM urls
64
+ IMG_DIR_URL: f"https://api.us-east-2.prod.wiliot.cloud/v1/bridge/type/{board_type}/version/{version[BLE_VERSION]}/binary/",
65
+ WIFI_VERSION: version[WIFI_VERSION],
66
+ BLE_VERSION: version[BLE_VERSION]})
67
+ if test.tester.protobuf:
68
+ payload = cert_protobuf.downlink_to_pb(gw_config)
69
+ else:
70
+ payload = json.dumps(gw_config)
71
+ utPrint(f"Upgrading GW with action pkt:\n{payload}", "BLUE")
72
+
73
+ mqttc = test.get_mqttc_by_target(target)
74
+ mqttc.flush_pkts()
75
+ mqttc.publish(mqttc.update_topic, payload=payload, qos=1)
76
+
77
+ def create_gw_config(test, cfg, target=DUT, version=""):
78
+ gw = test.dut if is_gw(test.dut) and target == DUT else test.tester
79
+ if version:
80
+ return dict({GW_CONF:{LAT: GW_LATITUDE_DEFAULT, LNG: GW_LONGITUDE_DEFAULT, WIFI_VERSION: version[WIFI_VERSION],
81
+ BLE_VERSION: version[BLE_VERSION], GW_API_VERSION: gw.gw_api_version, ADDITIONAL:dict(cfg)}})
82
+ elif gw.gw_orig_versions:
83
+ return dict({GW_CONF:{LAT: GW_LATITUDE_DEFAULT, LNG: GW_LONGITUDE_DEFAULT, WIFI_VERSION: gw.gw_orig_versions[WIFI_VERSION],
84
+ BLE_VERSION: gw.gw_orig_versions[BLE_VERSION], GW_API_VERSION: gw.gw_api_version, ADDITIONAL:dict(cfg)}})
85
+ # Protection for FDM gw config
86
+ else:
87
+ return dict({GW_CONF:{LAT: GW_LATITUDE_DEFAULT, LNG: GW_LONGITUDE_DEFAULT, GW_API_VERSION: gw.gw_api_version,
88
+ ADDITIONAL:dict(cfg)}})
89
+
90
+ def gw_downlink(test, raw_tx_data="", is_ota=False, version="", max_duration=100, max_retries=8, target=DUT):
91
+ mqttc = test.get_mqttc_by_target(target)
92
+ pkt = create_gw_downlink_pkt(test, raw_tx_data, is_ota, version=version, max_duration=max_duration, max_retries=max_retries, target=target)
93
+ payload = cert_protobuf.downlink_to_pb(pkt) if get_protobuf_by_target(test, target) else json.dumps(pkt)
94
+ mqttc.publish(mqttc.update_topic, payload=payload, qos=1)
95
+
96
+ def create_gw_downlink_pkt(test, raw_tx_data="", is_ota=False, version="", max_duration=100, max_retries=8, target=DUT):
97
+ ret = dict({TX_PKT: raw_tx_data,
98
+ TX_MAX_DURATION_MS: max_duration,
99
+ TX_MAX_RETRIES: max_retries})
100
+ if is_ota == False:
101
+ ret[ACTION] = ACTION_ADVERTISING
102
+ else:
103
+ ret[ACTION] = ACTION_BRG_OTA
104
+ ret[GW_ID] = test.dut.id_str if target == DUT and is_gw(test.dut) else test.tester.id_str
105
+ # Determine destination bridge
106
+ brg = get_brg_by_target(test, DUT if test.dut_is_bridge() else TESTER)
107
+ ret[BRIDGE_ID] = brg.id_str
108
+ ret[IMG_DIR_URL] = f"https://api.us-east-2.prod.wiliot.cloud/v1/bridge/type/{brg.board_type}/version/{version}/binary/"
109
+ # Using a random uuid to force file download on the GW side
110
+ ret[VER_UUID_STR] = ''.join(random.choices(string.digits, k=VER_MAX_LEN))
111
+ ret[UPGRADE_BLSD] = False
112
+ ret[TX_MAX_DURATION_MS] = 150
113
+ utPrint(f"Publishing ACTION_BRG_OTA:\n{ret}", "BLUE")
114
+ return ret
115
+
116
+ def get_default_gw_dict(test=None, target=DUT):
117
+ if test:
118
+ validation_schema = test.dut.validation_schema if target == DUT and is_gw(test.dut) else test.tester.validation_schema
119
+ else:
120
+ validation_schema = None
121
+ gw_dict = {}
122
+
123
+ def parse_properties(props):
124
+ d = {}
125
+ for prop_name, prop_desc in props.items():
126
+ # If 'properties' key exists, recurse
127
+ if "properties" in prop_desc:
128
+ d[prop_name] = parse_properties(prop_desc["properties"])
129
+ elif "default" in prop_desc:
130
+ d[prop_name] = prop_desc["default"]
131
+ else:
132
+ # Set default values for known types if 'default' not specified
133
+ prop_type = prop_desc.get("type")
134
+ if prop_type == "string":
135
+ d[prop_name] = ""
136
+ elif prop_type == "integer" or prop_type == "number":
137
+ d[prop_name] = 0
138
+ elif prop_type == "boolean":
139
+ d[prop_name] = False
140
+ elif prop_type == "array":
141
+ d[prop_name] = []
142
+ elif prop_type == "object":
143
+ d[prop_name] = {}
144
+ return d
145
+
146
+ if validation_schema:
147
+ gw_dict = parse_properties(validation_schema)
148
+ else:
149
+ gw_dict = dict({WLT_SERVER: PROD, USE_STAT_LOC: False,
150
+ SERIALIZATION_FORMAT: PROTOBUF, ACL: dict({ACL_MODE: ACL_DENY, ACL_BRIDGE_IDS: []})})
151
+ return gw_dict
152
+
153
+ def config_gw_defaults(test, version="", target=DUT):
154
+ gw = test.dut if target == DUT and is_gw(test.dut) else test.tester
155
+ utPrint(f"Configuring gateway {gw.id_str} to defaults", "BLUE")
156
+ return gw_configure(test, get_default_gw_dict(test, target=target), wait=True, version=version)
157
+
158
+ def config_gw_version(test, version, board_type=None, target=DUT):
159
+
160
+ utPrint(f"Updating GW versions to {version[WIFI_VERSION]} , {version[BLE_VERSION]}", "BLUE")
161
+ # Search for current api version
162
+ response = cert_common.get_gw_info(test, target=target)
163
+ if response == NO_RESPONSE:
164
+ print("Didn't get GW_INFO response from GW!")
165
+ return
166
+
167
+ cur_api_version = 0
168
+ if ENTRIES in response[GW_INFO]:
169
+ if GW_API_VERSION in response[GW_INFO][ENTRIES]:
170
+ cur_api_version = int(response[GW_INFO][ENTRIES][GW_API_VERSION][STR_VAL])
171
+ else:
172
+ if GW_API_VERSION in response[GW_INFO]:
173
+ cur_api_version = int(response[GW_INFO][GW_API_VERSION])
174
+
175
+ # Support for legacy esp api version below 206 where the upgrade was done by configuration and not action
176
+ print(f'ESP api version: {cur_api_version}')
177
+ if cur_api_version < 206:
178
+ print("Legacy ESP - using old version configuration approach")
179
+ gw_configure(test, get_default_gw_dict(test, target=target), version)
180
+ return
181
+
182
+ if not board_type:
183
+ board_type = get_brg_by_target(test, target).board_type
184
+
185
+ gw_fw_upgrade(test, version, board_type)
186
+
187
+ def gw_info_action(test, target=DUT):
188
+ pkt = {ACTION: GET_INFO_ACTION}
189
+ mqttc = test.get_mqttc_by_target(target)
190
+ payload = cert_protobuf.downlink_to_pb(pkt) if get_protobuf_by_target(test, target) else json.dumps(pkt)
191
+ mqttc.publish(mqttc.update_topic, payload=payload, qos=1)
192
+
193
+ def gw_reboot_action(test, target=DUT):
194
+ pkt = {ACTION: REBOOT_GW_ACTION}
195
+ payload = cert_protobuf.downlink_to_pb(pkt) if get_protobuf_by_target(test, target) else json.dumps(pkt)
196
+ test.get_mqttc_by_target(target).publish(test.get_mqttc_by_target(target).update_topic, payload=payload, qos=1)
197
+
198
+ def gw_action(test, action, target=DUT):
199
+ mqttc = test.get_mqttc_by_target(target)
200
+ pkt = {ACTION: action}
201
+ payload = cert_protobuf.downlink_to_pb(pkt) if get_protobuf_by_target(test, target) else json.dumps(pkt)
202
+ mqttc.publish(mqttc.update_topic, payload=payload, qos=1)
203
+
204
+ def gw_log_period_action(test, period, target=DUT):
205
+ pkt = {ACTION: f"{LOG_PERIOD_ACTION} {period}"}
206
+ payload = cert_protobuf.downlink_to_pb(pkt) if get_protobuf_by_target(test, target) else json.dumps(pkt)
207
+ test.get_mqttc_by_target(target).publish(test.get_mqttc_by_target(target).update_topic, payload=payload, qos=1)
208
+
209
+ def gw_logs_action(test, target=DUT):
210
+ pkt = {ACTION: GET_LOGS}
211
+ payload = cert_protobuf.downlink_to_pb(pkt) if get_protobuf_by_target(test, target) else json.dumps(pkt)
212
+ test.get_mqttc_by_target(target).publish(test.get_mqttc_by_target(target).update_topic, payload=payload, qos=1)
213
+
214
+ def gw_status_wait(test, cond, str, time_limit, target=DUT): #cond gatewayLogs str test type
215
+ mqttc = test.get_mqttc_by_target(target)
216
+ mqttc.flush_pkts()
217
+ start_time = datetime.datetime.now()
218
+ while (datetime.datetime.now() - start_time).seconds < time_limit:
219
+ for p in cert_mqtt.get_all_status_pkts(mqttc):
220
+ if cond in p:
221
+ if str in p[cond]:
222
+ print_pkt(p)
223
+ return
224
+ print_update_wait()
225
+
226
+ #################################
227
+ # BRG
228
+ #################################
229
+
230
+ def get_brg_by_target(test, target):
231
+ if target == DUT:
232
+ return test.dut.internal_brg if is_gw(test.dut) else test.dut
233
+ elif target == BRG1:
234
+ return test.brg1
235
+ elif target == TESTER:
236
+ return test.tester.internal_brg
237
+ return None
238
+
239
+ def fields_n_vals_dict_get(fields, values):
240
+ # initiate fields and values
241
+ fields_and_values = {}
242
+ for field, value in zip(fields, values):
243
+ fields_and_values[field] = int(value)
244
+ # functionality run print
245
+ print_string = generate_print_string(fields_and_values)
246
+ functionality_run_print(print_string)
247
+ return fields_and_values
248
+
249
+ def brg_configure(test, cfg_pkt=None, module=None, fields=[], values=[], wait=True, ret_cfg_pkt=False, ble5=False, target=DUT):
250
+ brg = get_brg_by_target(test, target)
251
+ mqttc = test.get_mqttc_by_target(target)
252
+ if ble5:
253
+ return brg_configure_ble5(test, cfg_pkt=cfg_pkt, module=module, fields=fields,
254
+ values=values, ret_cfg_pkt=ret_cfg_pkt, wait=wait, target=target)
255
+ retries = 3
256
+ if not cfg_pkt:
257
+ fields_n_vals = fields_n_vals_dict_get(fields, values)
258
+ cfg_pkt = get_default_brg_pkt(test, pkt_type=module, target=target, **fields_n_vals)
259
+
260
+ if not wait:
261
+ gw_downlink(test=test, raw_tx_data=cfg_pkt.dump(), target=target)
262
+ utPrint("Wait is set to False, not waiting for Bridge cfg ACK", "CYAN")
263
+ return test, DONE
264
+ else:
265
+ mqttc.flush_pkts()
266
+
267
+ # Search for update packet
268
+ for retry in range(retries):
269
+ gw_downlink(test=test, raw_tx_data=cfg_pkt.dump(), target=target)
270
+ pkts_found = False
271
+ seq_ids = []
272
+ wlt_pkt = WltPkt()
273
+ start_time = datetime.datetime.now()
274
+ while (datetime.datetime.now() - start_time).seconds < DEFAULT_BRG_FIELD_UPDATE_TIMEOUT:
275
+ pkts = cert_common.get_brg_cfg_pkts(test=test, target=target)
276
+ if pkts:
277
+ pkts_found = True
278
+ for p in pkts:
279
+ wlt_pkt = WltPkt(p)
280
+ if seq_ids == [] or wlt_pkt.pkt.seq_id not in seq_ids:
281
+ print(wlt_pkt.pkt)
282
+ if cfg_pkt.pkt == wlt_pkt.pkt:
283
+ utPrint("SUCCESS: Bridge cfg", "GREEN")
284
+ return (test, DONE) if not ret_cfg_pkt else (test, wlt_pkt)
285
+ seq_ids.append(wlt_pkt.pkt.seq_id)
286
+ print_update_wait()
287
+ utPrint(f"brg_configure: No pkts found retry={retry}!", "WARNING")
288
+ if not pkts_found:
289
+ utPrint(f"brg_configure: No pkts found retry={retry}!", "RED")
290
+ test.add_reason(f"brg_configure: No pkts found. retry={retry}")
291
+ test.rc = TEST_FAILED
292
+ if wlt_pkt.pkt:
293
+ # In case of failure, we want to see if it's api version issue
294
+ brg.api_version = wlt_pkt.pkt.api_version
295
+ print(f"-->> api_version:{brg.api_version}\nFailed brg_configure with pkt ({cfg_pkt.pkt.__dict__})")
296
+ test.add_reason(f"Failed brg_configure")
297
+ return test, NO_RESPONSE
298
+
299
+ def brg_configure_ble5(test, cfg_pkt=None, module=None, fields=None, values=None, ret_cfg_pkt=False, wait=True, target=DUT):
300
+ mqttc = test.get_mqttc_by_target(target)
301
+ if not cfg_pkt:
302
+ fields_n_vals = fields_n_vals_dict_get(fields, values)
303
+ cfg_pkt = get_default_brg_pkt(test, pkt_type=module, target=target, **fields_n_vals)
304
+ # Search for update packet
305
+ mqttc.flush_pkts()
306
+
307
+ num_of_tries = 0
308
+ pkts_found = False
309
+ seq_ids = []
310
+ wlt_pkt = WltPkt()
311
+ start_time = datetime.datetime.now()
312
+ gw_downlink(test=test, raw_tx_data=cfg_pkt.dump(), max_duration=BLE5_MAX_DURATION_MS, max_retries=BLE5_MAX_RETRIES, target=target)
313
+ if wait is False:
314
+ return test, DONE
315
+ while not pkts_found:
316
+ if ((datetime.datetime.now() - start_time).seconds > ((ag.BLE5_PARAM_PRIMARY_CHANNEL_SCAN_CYCLE/1000)+1)):
317
+ if num_of_tries < 3:
318
+ num_of_tries += 1
319
+ start_time = datetime.datetime.now()
320
+ gw_downlink(test=test, raw_tx_data=cfg_pkt.dump(), max_duration=BLE5_MAX_DURATION_MS, max_retries=BLE5_MAX_RETRIES, target=target)
321
+ print(f"Brg configure - BLE5 mode : No pkts found after {(ag.BLE5_PARAM_PRIMARY_CHANNEL_SCAN_CYCLE/1000)+1} seconds, in try number {num_of_tries}")
322
+ else:
323
+ test.add_reason(f"Brg configure - BLE5 mode : No pkts found after {BLE5_MAX_DURATION_MS} seconds, in 3 tries")
324
+ test.rc = TEST_FAILED
325
+ time.sleep(1)
326
+ mqttc.flush_pkts()
327
+ return test, NO_RESPONSE
328
+ pkts = cert_common.get_brg_cfg_pkts(test=test, target=target)
329
+ if pkts:
330
+ for p in pkts:
331
+ wlt_pkt = WltPkt(p)
332
+ if seq_ids == [] or wlt_pkt.pkt.seq_id not in seq_ids:
333
+ print(wlt_pkt.pkt)
334
+ if cfg_pkt.pkt == wlt_pkt.pkt:
335
+ utPrint("SUCCESS: Bridge cfg", "GREEN")
336
+ time.sleep(15)
337
+ mqttc.flush_pkts()
338
+ return (test, DONE) if not ret_cfg_pkt else (test, wlt_pkt)
339
+ seq_ids.append(wlt_pkt.pkt.seq_id)
340
+ print_update_wait()
341
+
342
+ def send_brg_action(test, action_id, target=DUT, **kwargs):
343
+ brg = get_brg_by_target(test, target)
344
+ mqttc = test.get_mqttc_by_target(target)
345
+ mqttc.flush_pkts()
346
+ action_pkt = get_default_brg_pkt(test, pkt_type=eval_pkt(f'{ag.ACTIONS_DICT[action_id]}{brg.api_version}'), **kwargs)
347
+ gw_downlink(test, raw_tx_data=action_pkt.dump(), target=target)
348
+
349
+ def get_default_brg_pkt(test, pkt_type, group_id=ag.GROUP_ID_GW2BRG, seq_id=0, target=DUT, **kwargs):
350
+ brg = get_brg_by_target(test, target)
351
+ seq_id = test.get_seq_id() if seq_id == 0 else seq_id
352
+ # Bypass from default sub1g ep cfg of 0 (no energizing) ONLY if not using data simulation
353
+ if "ModuleEnergySub1G" in pkt_type.__name__ and BRG_PATTERN not in kwargs and test.data != DATA_SIMULATION:
354
+ # TODO - Remove on next api_version update - this is a patch for parameter name change from api version 11 to 12
355
+ brg_pattern = "sub1g_energy_" + BRG_PATTERN if brg.api_version < ag.API_VERSION_V12 else BRG_PATTERN
356
+ kwargs.update({brg_pattern: ag.SUB1G_ENERGY_PATTERN_ISRAEL})
357
+ brg_pkt = WltPkt(hdr=ag.Hdr(group_id=group_id), pkt=pkt_type(brg_mac=brg.id_int if brg else 0, seq_id=seq_id, **kwargs))
358
+ return brg_pkt
359
+
360
+ def config_brg_defaults(test, modules=[], ble5=False, wait=True, target=DUT):
361
+ failed_cfg = False
362
+ brg = get_brg_by_target(test, target)
363
+ modules = brg.modules if not modules else modules
364
+ for module in modules:
365
+ utPrint(f"Configuring {module.__name__} to defaults. board type[{brg.board_type}] api version[{brg.api_version}]", "BLUE")
366
+ cfg_pkt = get_default_brg_pkt(test, module, target=target)
367
+ if ble5:
368
+ test, res = brg_configure_ble5(test=test, cfg_pkt=cfg_pkt, wait=wait, target=target)
369
+ else:
370
+ test, res = brg_configure(test=test, cfg_pkt=cfg_pkt, wait=wait, target=target)
371
+ if res == NO_RESPONSE:
372
+ utPrint(f"FAILURE: {module.__name__} not configured to defaults", "RED")
373
+ failed_cfg = True
374
+ else:
375
+ utPrint(f"SUCCESS: {module.__name__} configured to defaults", "GREEN")
376
+ return (test, DONE) if not failed_cfg else (test, NO_RESPONSE)
377
+
378
+ def brg_ota(test, ble_version, search_ack=True, ble5=False, target=DUT, upgrader=TESTER):
379
+ brg = get_brg_by_target(test, target)
380
+ mqttc = test.get_mqttc_by_target(upgrader)
381
+
382
+ if ble_version != brg.version:
383
+ utPrint(f"Updating BRG version to {ble_version}", "BLUE")
384
+ functionality_run_print(f"OTA for brg: {brg.id_str}")
385
+ action_pkt = get_default_brg_pkt(test=test, pkt_type=eval_pkt(f'ActionGenericV{brg.api_version}'), action_id=ag.ACTION_REBOOT,
386
+ target=target)
387
+ # BRG OTA - Flush pkts ONLY before starting to avoid deletion of needed GW Logs which are in the status topic
388
+ mqttc.flush_status_pkts()
389
+ # If the bridge is configured to ble5 then we need to broadcast the reboot packet for 15 seconds
390
+ if not ble5:
391
+ gw_downlink(test, raw_tx_data=action_pkt.dump(), is_ota=True, version=ble_version, target=upgrader)
392
+ else:
393
+ gw_downlink(test=test, raw_tx_data=action_pkt.dump(), is_ota=True, version=ble_version, max_duration=BLE5_MAX_DURATION_MS, max_retries=BLE5_MAX_RETRIES, target=upgrader)
394
+
395
+ # expected_hash=1 due to different cfgs and versions between builds
396
+ test = cert_common.reboot_config_analysis(test=test, expected_hash=1, ble_version=ble_version, timeout=VER_UPDATE_TIMEOUT)
397
+ # for debug - print all logs to see failure reason
398
+ cert_common.get_gw_logs_packets(test, print_log=True)
399
+ if test.rc == TEST_FAILED and test.exit_on_param_failure:
400
+ return test
401
+ elif search_ack:
402
+ test = cert_common.gw_action_status_search(test, ag.BRG_MGMT_MSG_TYPE_OTA_UPDATE, 0, target=upgrader)
403
+ if test.rc == TEST_FAILED and test.exit_on_param_failure:
404
+ return test
405
+ else:
406
+ test.add_reason(WANTED_VER_SAME)
407
+ if test.rc == TEST_PASSED:
408
+ brg.version = ble_version
409
+ brg.update_modules()
410
+ return test
411
+
412
+ def update_versions(test, versions, update_gw=True, update_brg=True, target=DUT):
413
+ mqttc = test.get_mqttc_by_target(target)
414
+ #update gw versions
415
+ if update_gw:
416
+ config_gw_version(test, versions, target=TESTER)
417
+ # Search for update packet
418
+ start_time = datetime.datetime.now()
419
+ found = {BLE_VERSION: False, WIFI_VERSION: False}
420
+ while not all([found[version] for version in found]):
421
+ duration = (datetime.datetime.now() - start_time).seconds
422
+ for p in cert_mqtt.get_all_status_pkts(mqttc):
423
+ if GW_CONF in p or GW_STATUS in p:
424
+ print("\nConfig pkts:")
425
+ print_pkt(p)
426
+ bkv = BLE_VERSION.replace('Chip', '') if test.tester.protobuf else BLE_VERSION
427
+ wkv = WIFI_VERSION.replace('Chip', '') if test.tester.protobuf else WIFI_VERSION
428
+ ckv = GW_STATUS if test.tester.protobuf else GW_CONF
429
+ if p[ckv][bkv] == versions[BLE_VERSION]:
430
+ found[BLE_VERSION] = True
431
+ if p[ckv][wkv] == versions[WIFI_VERSION]:
432
+ found[WIFI_VERSION] = True
433
+ if not all([found[version] for version in found]):
434
+ # WIFI configured, need to configure again for BLE
435
+ if duration > 5:
436
+ # First pkt may be received is GW "cfg ack" so skip it
437
+ print(f"\nVersions Update Status:\n{found}\nUpdate Time: {duration} seconds")
438
+ config_gw_version(test, versions, target=TESTER)
439
+ mqttc.flush_pkts()
440
+ print_update_wait()
441
+ if duration > VER_UPDATE_TIMEOUT:
442
+ test.rc = TEST_FAILED
443
+ failed_versions = " & ".join([f"{k}={v}" for k,v in versions.items() if not found[k]])
444
+ test.add_reason(f"{failed_versions} not found after {VER_UPDATE_TIMEOUT} seconds!")
445
+ print(f"\n{test.reason}")
446
+ break
447
+ wait_time_n_print(10)
448
+ if not test.rc:
449
+ if update_gw:
450
+ print(f"\nGW versions updated successfully!\n")
451
+ # update brg version if test is not an internal_brg test
452
+ if update_brg and not test.internal_brg:
453
+ test = brg_ota(test, ble_version=versions[BLE_VERSION], search_ack=False)
454
+
455
+ return test