wiliot-certificate 4.5.0a1__tar.gz → 4.5.0a2__tar.gz

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 (189) hide show
  1. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/PKG-INFO +33 -29
  2. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/README.md +32 -28
  3. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/pyproject.toml +1 -1
  4. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/cert_common.py +12 -13
  5. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/cert_defines.py +1 -0
  6. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/cert_gw_sim.py +3 -0
  7. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/cert_results.py +8 -0
  8. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/cert_utils.py +3 -0
  9. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/certificate_eth_test_list.txt +2 -1
  10. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/certificate_test_list.txt +1 -0
  11. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/acl_ext_adv_test/acl_ext_adv_test.json +1 -1
  12. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/acl_test/acl_test.json +1 -1
  13. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/channel_scan_behaviour_test/channel_scan_behaviour_test.json +1 -1
  14. wiliot_certificate-4.5.0a2/src/certificate/tests/cloud_connectivity/deduplication_test/deduplication_test.json +14 -0
  15. wiliot_certificate-4.5.0a2/src/certificate/tests/cloud_connectivity/deduplication_test/deduplication_test.py +85 -0
  16. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/ext_adv_stress_test/ext_adv_stress_test.json +1 -1
  17. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/ext_adv_stress_test/ext_adv_stress_test.py +10 -9
  18. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/stress_test/stress_test.json +1 -1
  19. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/stress_test/stress_test.py +10 -10
  20. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/uplink_test/uplink_test.py +1 -0
  21. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/num_of_tags_test/num_of_tags_test.json +1 -1
  22. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/rssi_threshold_test/rssi_threshold_test.json +1 -1
  23. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/api_if/api_validation.py +2 -2
  24. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/wiliot_certificate.egg-info/PKG-INFO +33 -29
  25. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/wiliot_certificate.egg-info/SOURCES.txt +2 -0
  26. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/LICENSE +0 -0
  27. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/setup.cfg +0 -0
  28. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/__init__.py +0 -0
  29. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/ag/wlt_cmd_if.html +0 -0
  30. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/ag/wlt_types_ag.py +0 -0
  31. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/ag/wlt_types_ag_jsons/brg2brg_ota.json +0 -0
  32. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/ag/wlt_types_ag_jsons/brg2gw_hb.json +0 -0
  33. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/ag/wlt_types_ag_jsons/brg2gw_hb_sleep.json +0 -0
  34. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/ag/wlt_types_ag_jsons/calibration.json +0 -0
  35. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/ag/wlt_types_ag_jsons/custom.json +0 -0
  36. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/ag/wlt_types_ag_jsons/datapath.json +0 -0
  37. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/ag/wlt_types_ag_jsons/energy2400.json +0 -0
  38. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/ag/wlt_types_ag_jsons/energySub1g.json +0 -0
  39. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/ag/wlt_types_ag_jsons/externalSensor.json +0 -0
  40. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/ag/wlt_types_ag_jsons/interface.json +0 -0
  41. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/ag/wlt_types_ag_jsons/powerManagement.json +0 -0
  42. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/ag/wlt_types_ag_jsons/side_info_sensor.json +0 -0
  43. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/ag/wlt_types_ag_jsons/signal_indicator_data.json +0 -0
  44. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/ag/wlt_types_ag_jsons/unified_echo_ext_pkt.json +0 -0
  45. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/ag/wlt_types_ag_jsons/unified_echo_pkt.json +0 -0
  46. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/ag/wlt_types_ag_jsons/unified_sensor_pkt.json +0 -0
  47. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/cert_config.py +0 -0
  48. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/cert_data_sim.py +0 -0
  49. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/cert_mqtt.py +0 -0
  50. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/cert_prints.py +0 -0
  51. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/cert_protobuf.py +0 -0
  52. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/certificate.py +0 -0
  53. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/certificate_cli.py +0 -0
  54. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/certificate_sanity_test_list.txt +0 -0
  55. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/calibration/interval_test/interval_test.json +0 -0
  56. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/calibration/interval_test/interval_test.py +0 -0
  57. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/calibration/output_power_test/output_power_test.json +0 -0
  58. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/calibration/output_power_test/output_power_test.py +0 -0
  59. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/calibration/pattern_test/pattern_test.json +0 -0
  60. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/calibration/pattern_test/pattern_test.py +0 -0
  61. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/acl_ext_adv_test/acl_ext_adv_test.py +0 -0
  62. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/acl_test/acl_test.py +0 -0
  63. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/brg_ota_test/brg_ota_test.json +0 -0
  64. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/brg_ota_test/brg_ota_test.py +0 -0
  65. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/channel_scan_behaviour_test/channel_scan_behaviour_test.py +0 -0
  66. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/connection_test/connection_test.json +0 -0
  67. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/connection_test/connection_test.py +0 -0
  68. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/downlink_test/downlink_test.json +0 -0
  69. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/downlink_test/downlink_test.py +0 -0
  70. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/reboot_test/reboot_test.json +0 -0
  71. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/reboot_test/reboot_test.py +0 -0
  72. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/registration_test/registration_test.json +0 -0
  73. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/registration_test/registration_test.py +0 -0
  74. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/registration_test/registration_test_cli.py +0 -0
  75. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/uplink_ext_adv_test/uplink_ext_adv_test.json +0 -0
  76. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/uplink_ext_adv_test/uplink_ext_adv_test.py +0 -0
  77. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/cloud_connectivity/uplink_test/uplink_test.json +0 -0
  78. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/aging_test/aging_test.json +0 -0
  79. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/aging_test/aging_test.py +0 -0
  80. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/event_ble5_test/event_ble5_test.json +0 -0
  81. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/event_ble5_test/event_ble5_test.py +0 -0
  82. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/event_test/event_test.json +0 -0
  83. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/event_test/event_test.py +0 -0
  84. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/num_of_tags_test/num_of_tags_test.py +0 -0
  85. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/output_power_test/output_power_test.json +0 -0
  86. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/output_power_test/output_power_test.py +0 -0
  87. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/pacer_interval_ble5_test/pacer_interval_ble5_test.json +0 -0
  88. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/pacer_interval_ble5_test/pacer_interval_ble5_test.py +0 -0
  89. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/pacer_interval_test/pacer_interval_test.json +0 -0
  90. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/pacer_interval_test/pacer_interval_test.py +0 -0
  91. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/pattern_test/pattern_test.json +0 -0
  92. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/pattern_test/pattern_test.py +0 -0
  93. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/pkt_filter_ble5_chl21_test/pkt_filter_ble5_chl21_test.json +0 -0
  94. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/pkt_filter_ble5_chl21_test/pkt_filter_ble5_chl21_test.py +0 -0
  95. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/pkt_filter_ble5_test/pkt_filter_ble5_test.json +0 -0
  96. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/pkt_filter_ble5_test/pkt_filter_ble5_test.py +0 -0
  97. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/pkt_filter_brg2gw_ext_adv_test/pkt_filter_brg2gw_ext_adv_test.json +0 -0
  98. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/pkt_filter_brg2gw_ext_adv_test/pkt_filter_brg2gw_ext_adv_test.py +0 -0
  99. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/pkt_filter_gen3_test/pkt_filter_gen3_test.json +0 -0
  100. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/pkt_filter_gen3_test/pkt_filter_gen3_test.py +0 -0
  101. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/pkt_filter_test/pkt_filter_test.json +0 -0
  102. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/pkt_filter_test/pkt_filter_test.py +0 -0
  103. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/rssi_threshold_test/rssi_threshold_test.py +0 -0
  104. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/rx_channel_hopping_test/rx_channel_hopping_test.json +0 -0
  105. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/rx_channel_hopping_test/rx_channel_hopping_test.py +0 -0
  106. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/rx_channel_test/rx_channel_test.json +0 -0
  107. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/rx_channel_test/rx_channel_test.py +0 -0
  108. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/rx_rate_gen2_test/rx_rate_gen2_test.json +0 -0
  109. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/rx_rate_gen2_test/rx_rate_gen2_test.py +0 -0
  110. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/rx_rate_gen3_test/rx_rate_gen3_test.json +0 -0
  111. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/rx_rate_gen3_test/rx_rate_gen3_test.py +0 -0
  112. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/stress_gen3_test/stress_gen3_test.json +0 -0
  113. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/stress_gen3_test/stress_gen3_test.py +0 -0
  114. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/stress_test/stress_test.json +0 -0
  115. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/stress_test/stress_test.py +0 -0
  116. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/tx_repetition_test/tx_repetition_test.json +0 -0
  117. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/datapath/tx_repetition_test/tx_repetition_test.py +0 -0
  118. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/edge_mgmt/action_blink_test/action_blink_test.json +0 -0
  119. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/edge_mgmt/action_blink_test/action_blink_test.py +0 -0
  120. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/edge_mgmt/action_get_battery_sensor_test/action_get_battery_sensor_test.json +0 -0
  121. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/edge_mgmt/action_get_battery_sensor_test/action_get_battery_sensor_test.py +0 -0
  122. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/edge_mgmt/action_get_module_test/action_get_module_test.json +0 -0
  123. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/edge_mgmt/action_get_module_test/action_get_module_test.py +0 -0
  124. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/edge_mgmt/action_get_pof_data_test/action_get_pof_data_test.json +0 -0
  125. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/edge_mgmt/action_get_pof_data_test/action_get_pof_data_test.py +0 -0
  126. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/edge_mgmt/action_gw_hb_test/action_gw_hb_test.json +0 -0
  127. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/edge_mgmt/action_gw_hb_test/action_gw_hb_test.py +0 -0
  128. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/edge_mgmt/action_reboot_test/action_reboot_test.json +0 -0
  129. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/edge_mgmt/action_reboot_test/action_reboot_test.py +0 -0
  130. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/edge_mgmt/action_restore_defaults_test/action_restore_defaults_test.json +0 -0
  131. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/edge_mgmt/action_restore_defaults_test/action_restore_defaults_test.py +0 -0
  132. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/edge_mgmt/action_send_hb_test/action_send_hb_test.json +0 -0
  133. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/edge_mgmt/action_send_hb_test/action_send_hb_test.py +0 -0
  134. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/edge_mgmt/periodic_msgs_test/periodic_msgs_test.json +0 -0
  135. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/edge_mgmt/periodic_msgs_test/periodic_msgs_test.py +0 -0
  136. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/energy2400/duty_cycle_test/duty_cycle_test.json +0 -0
  137. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/energy2400/duty_cycle_test/duty_cycle_test.py +0 -0
  138. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/energy2400/output_power_test/output_power_test.json +0 -0
  139. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/energy2400/output_power_test/output_power_test.py +0 -0
  140. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/energy2400/pattern_test/pattern_test.json +0 -0
  141. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/energy2400/pattern_test/pattern_test.py +0 -0
  142. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/energy2400/signal_indicator_ble5_test/signal_indicator_ble5_test.json +0 -0
  143. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/energy2400/signal_indicator_ble5_test/signal_indicator_ble5_test.py +0 -0
  144. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/energy2400/signal_indicator_ext_adv_test/signal_indicator_ext_adv_test.json +0 -0
  145. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/energy2400/signal_indicator_ext_adv_test/signal_indicator_ext_adv_test.py +0 -0
  146. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.json +0 -0
  147. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.py +0 -0
  148. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/energy_sub1g/duty_cycle_test/duty_cycle_test.json +0 -0
  149. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/energy_sub1g/duty_cycle_test/duty_cycle_test.py +0 -0
  150. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/energy_sub1g/pattern_test/pattern_test.json +0 -0
  151. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/energy_sub1g/pattern_test/pattern_test.py +0 -0
  152. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/pwr_mgmt/pwr_mgmt_test/pwr_mgmt_test.json +0 -0
  153. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/pwr_mgmt/pwr_mgmt_test/pwr_mgmt_test.py +0 -0
  154. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/sensors/ext_sensor_test/ext_sensor_test.json +0 -0
  155. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/tests/sensors/ext_sensor_test/ext_sensor_test.py +0 -0
  156. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/certificate/wlt_types.py +0 -0
  157. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/api_if/202/data.json +0 -0
  158. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/api_if/202/logs.json +0 -0
  159. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/api_if/202/status.json +0 -0
  160. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/api_if/203/data.json +0 -0
  161. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/api_if/203/logs.json +0 -0
  162. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/api_if/203/status.json +0 -0
  163. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/api_if/204/data.json +0 -0
  164. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/api_if/204/logs.json +0 -0
  165. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/api_if/204/status.json +0 -0
  166. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/api_if/205/data.json +0 -0
  167. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/api_if/205/logs.json +0 -0
  168. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/api_if/205/status.json +0 -0
  169. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/api_if/206/data.json +0 -0
  170. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/api_if/206/logs.json +0 -0
  171. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/api_if/206/status.json +0 -0
  172. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/api_if/__init__.py +0 -0
  173. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/web/templates/generator.html +0 -0
  174. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/web/templates/index.html +0 -0
  175. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/web/templates/menu.html +0 -0
  176. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/web/templates/parser.html +0 -0
  177. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/web/templates/wlt_types.html +0 -0
  178. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/web/web_utils.py +0 -0
  179. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/wltPb_pb2.py +0 -0
  180. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/wltPb_pb2.pyi +0 -0
  181. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/common/wlt_logo.png +0 -0
  182. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/gui_certificate/__init__.py +0 -0
  183. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/gui_certificate/gui_certificate_cli.py +0 -0
  184. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/gui_certificate/server.py +0 -0
  185. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/gui_certificate/templates/cert_run.html +0 -0
  186. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/wiliot_certificate.egg-info/dependency_links.txt +0 -0
  187. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/wiliot_certificate.egg-info/entry_points.txt +0 -0
  188. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/wiliot_certificate.egg-info/requires.txt +0 -0
  189. {wiliot_certificate-4.5.0a1 → wiliot_certificate-4.5.0a2}/src/wiliot_certificate.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wiliot_certificate
3
- Version: 4.5.0a1
3
+ Version: 4.5.0a2
4
4
  Summary: A library for certifying Wiliot-compliant boards
5
5
  Author-email: Wiliot <support@wiliot.com>
6
6
  License-Expression: MIT
@@ -34,7 +34,7 @@ Dynamic: license-file
34
34
 
35
35
  <!-- Description -->
36
36
  wiliot-certificate is a Python library that provides tools for testing and certifying boards for compatibility with Wiliot’s ecosystem.
37
- This python package includes the following CLI utilities:
37
+ This python package includes the following tools:
38
38
  - Certification Wizard (`wlt-cert`)
39
39
  - Certificate CLI (`wlt-cert-cli`)
40
40
  - Tester Upgrade (`wlt-cert-tester-upgrade`)
@@ -55,33 +55,11 @@ In terminal, run:
55
55
  ````commandline
56
56
  wlt-cert
57
57
  ````
58
- <!-- This tool walks you through... TODO -->
59
- <!-- You need to have a json validation schema <LINK>, certification tester & custom broker file <LINK> -->
58
+ This tool is the default to test and certify your device.
59
+ It runs a setup wizard that walks you through the initialization steps before running the tests.
60
+ You'll need a [validation schema](https://community.wiliot.com/customers/s/article/Validation-Schema), tester device and custom broker json file ([more info here](https://community.wiliot.com/customers/s/article/Wiliot-Gateway-Certification)).
61
+ Once set up it opens a terminal and tests your device.
60
62
 
61
- #### The following capabilities are not tested in this version
62
- ##### Cloud Connectivity & Misc
63
- - Board type registered within the Board Type Management system
64
- - Bridge OTA progress reporting
65
- ##### Power management
66
- - Functionality of energize and transmit in sleep mode
67
- ##### Edge management
68
- - Timing of heartbeat and interface packets
69
- ##### Module Energy 2400
70
- - Functionality of energy pattern, output power and duty cycle
71
- ##### Module Energy SUB1G
72
- - Functionality of energy pattern and duty cycle
73
- ##### Module Datapath
74
- - RSSI edge cases: -127 and 0
75
- - Functionality of transmission pattern, output power
76
- - Pacer interval with channel 10 and 500k modulation
77
- - Pacer interval using GEN3 Pixels
78
- - Packet filter: the following configuration - DEBUG, TEMP & DEBUG, TEMPS & DEBUG & ADVANCE
79
- - Rx rate feature with extended advertising
80
- - Functionality of adaptive pacer algorithm
81
- - Supported Pixels for extended advertising and GEN3
82
- ##### Calibration
83
- - Functionality of output power and interval calibration
84
- - Functionality of calibration transmission patterns for the configuration STANDARD & EU & DISABLE
85
63
 
86
64
 
87
65
  ### Certificate CLI
@@ -107,4 +85,30 @@ wlt-cert-reg
107
85
  ````
108
86
  Certify the gateway registration process to Wiliot platform.
109
87
  The gateway must use Wiliot production MQTT broker, and mustn't be registered to any account on Wiliot platform.
110
- Use -h for details on the arguments. <!-- More info can be found in TODO link-->
88
+ Use -h for details on the arguments. [More info here](https://community.wiliot.com/customers/s/article/Wiliot-Gateway-Certification)
89
+
90
+
91
+ ## The following capabilities are not tested in this version
92
+ ##### Cloud Connectivity & Misc
93
+ - Board type registered within the Board Type Management system
94
+ - Bridge OTA progress reporting
95
+ ##### Power management
96
+ - Functionality of energize and transmit in sleep mode
97
+ ##### Edge management
98
+ - Timing of heartbeat and interface packets
99
+ ##### Module Energy 2400
100
+ - Functionality of energy pattern, output power and duty cycle
101
+ ##### Module Energy SUB1G
102
+ - Functionality of energy pattern and duty cycle
103
+ ##### Module Datapath
104
+ - RSSI edge cases: -127 and 0
105
+ - Functionality of transmission pattern, output power
106
+ - Pacer interval with channel 10 and 500k modulation
107
+ - Pacer interval using GEN3 Pixels
108
+ - Packet filter: the following configuration - DEBUG, TEMP & DEBUG, TEMPS & DEBUG & ADVANCE
109
+ - Rx rate feature with extended advertising
110
+ - Functionality of adaptive pacer algorithm
111
+ - Supported Pixels for extended advertising and GEN3
112
+ ##### Calibration
113
+ - Functionality of output power and interval calibration
114
+ - Functionality of calibration transmission patterns for the configuration STANDARD & EU & DISABLE
@@ -2,7 +2,7 @@
2
2
 
3
3
  <!-- Description -->
4
4
  wiliot-certificate is a Python library that provides tools for testing and certifying boards for compatibility with Wiliot’s ecosystem.
5
- This python package includes the following CLI utilities:
5
+ This python package includes the following tools:
6
6
  - Certification Wizard (`wlt-cert`)
7
7
  - Certificate CLI (`wlt-cert-cli`)
8
8
  - Tester Upgrade (`wlt-cert-tester-upgrade`)
@@ -23,33 +23,11 @@ In terminal, run:
23
23
  ````commandline
24
24
  wlt-cert
25
25
  ````
26
- <!-- This tool walks you through... TODO -->
27
- <!-- You need to have a json validation schema <LINK>, certification tester & custom broker file <LINK> -->
26
+ This tool is the default to test and certify your device.
27
+ It runs a setup wizard that walks you through the initialization steps before running the tests.
28
+ You'll need a [validation schema](https://community.wiliot.com/customers/s/article/Validation-Schema), tester device and custom broker json file ([more info here](https://community.wiliot.com/customers/s/article/Wiliot-Gateway-Certification)).
29
+ Once set up it opens a terminal and tests your device.
28
30
 
29
- #### The following capabilities are not tested in this version
30
- ##### Cloud Connectivity & Misc
31
- - Board type registered within the Board Type Management system
32
- - Bridge OTA progress reporting
33
- ##### Power management
34
- - Functionality of energize and transmit in sleep mode
35
- ##### Edge management
36
- - Timing of heartbeat and interface packets
37
- ##### Module Energy 2400
38
- - Functionality of energy pattern, output power and duty cycle
39
- ##### Module Energy SUB1G
40
- - Functionality of energy pattern and duty cycle
41
- ##### Module Datapath
42
- - RSSI edge cases: -127 and 0
43
- - Functionality of transmission pattern, output power
44
- - Pacer interval with channel 10 and 500k modulation
45
- - Pacer interval using GEN3 Pixels
46
- - Packet filter: the following configuration - DEBUG, TEMP & DEBUG, TEMPS & DEBUG & ADVANCE
47
- - Rx rate feature with extended advertising
48
- - Functionality of adaptive pacer algorithm
49
- - Supported Pixels for extended advertising and GEN3
50
- ##### Calibration
51
- - Functionality of output power and interval calibration
52
- - Functionality of calibration transmission patterns for the configuration STANDARD & EU & DISABLE
53
31
 
54
32
 
55
33
  ### Certificate CLI
@@ -75,4 +53,30 @@ wlt-cert-reg
75
53
  ````
76
54
  Certify the gateway registration process to Wiliot platform.
77
55
  The gateway must use Wiliot production MQTT broker, and mustn't be registered to any account on Wiliot platform.
78
- Use -h for details on the arguments. <!-- More info can be found in TODO link-->
56
+ Use -h for details on the arguments. [More info here](https://community.wiliot.com/customers/s/article/Wiliot-Gateway-Certification)
57
+
58
+
59
+ ## The following capabilities are not tested in this version
60
+ ##### Cloud Connectivity & Misc
61
+ - Board type registered within the Board Type Management system
62
+ - Bridge OTA progress reporting
63
+ ##### Power management
64
+ - Functionality of energize and transmit in sleep mode
65
+ ##### Edge management
66
+ - Timing of heartbeat and interface packets
67
+ ##### Module Energy 2400
68
+ - Functionality of energy pattern, output power and duty cycle
69
+ ##### Module Energy SUB1G
70
+ - Functionality of energy pattern and duty cycle
71
+ ##### Module Datapath
72
+ - RSSI edge cases: -127 and 0
73
+ - Functionality of transmission pattern, output power
74
+ - Pacer interval with channel 10 and 500k modulation
75
+ - Pacer interval using GEN3 Pixels
76
+ - Packet filter: the following configuration - DEBUG, TEMP & DEBUG, TEMPS & DEBUG & ADVANCE
77
+ - Rx rate feature with extended advertising
78
+ - Functionality of adaptive pacer algorithm
79
+ - Supported Pixels for extended advertising and GEN3
80
+ ##### Calibration
81
+ - Functionality of output power and interval calibration
82
+ - Functionality of calibration transmission patterns for the configuration STANDARD & EU & DISABLE
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "wiliot_certificate"
7
- version = "4.5.0a1"
7
+ version = "4.5.0a2"
8
8
  authors = [
9
9
  { name="Wiliot", email="support@wiliot.com" }
10
10
  ]
@@ -1273,7 +1273,6 @@ def output_power_supported(board_type, output_power):
1273
1273
  else:
1274
1274
  return output_power in ag.OUTPUT_POWER_2_4_SUPPORTED_VALUES
1275
1275
 
1276
-
1277
1276
  def wiliot_pkts_validation(test, all_messages_in_test, all_data_pkts):
1278
1277
  PHASE_NAME = "Wiliot packets validation"
1279
1278
  phase_run_print(PHASE_NAME)
@@ -1290,7 +1289,7 @@ def wiliot_pkts_validation(test, all_messages_in_test, all_data_pkts):
1290
1289
  wiliot_pkts_validation_phase = seq_id_validation(wiliot_pkts_validation_phase, all_data_pkts)
1291
1290
 
1292
1291
  field_functionality_pass_fail_print(wiliot_pkts_validation_phase, PHASE_NAME)
1293
- test.phases[-1:-1] = [wiliot_pkts_validation_phase]
1292
+ test.add_phase(wiliot_pkts_validation_phase)
1294
1293
  return test
1295
1294
 
1296
1295
 
@@ -1373,19 +1372,19 @@ def generate_graph_stress_test(test, results, test_pkts_received):
1373
1372
  graph_data = []
1374
1373
  for i in range(0, len(results), 2):
1375
1374
  if i + 1 < len(results):
1376
- graph_data.append({'pkts_per_sec': results[i], 'percent_received': results[i + 1]})
1375
+ graph_data.append({'pkts_per_sec': results[i], 'received_pps': results[i + 1]})
1377
1376
 
1378
1377
  graph_df = pd.DataFrame(graph_data)
1379
1378
  html_file_path = os.path.join(ARTIFACTS_DIR, test.dir, 'stress_graph.html')
1380
1379
 
1381
1380
  # First graph: percentage received vs packets per second
1382
- fig1 = px.line(graph_df, x='pkts_per_sec', y='percent_received',
1383
- title='Percentage of packets uploaded by packets per second advertised',
1384
- labels={'pkts_per_sec': 'Packets Sent Per Second', 'percent_received': 'Percentage of packets received'},
1385
- markers=True, text='percent_received')
1381
+ fig1 = px.line(graph_df, x='pkts_per_sec', y='received_pps',
1382
+ title='Packets Per Second Uploaded vs Packets Per Second Advertised',
1383
+ labels={'pkts_per_sec': 'Advertised PPS', 'received_pps': 'Uploaded PPS'},
1384
+ markers=True, text='received_pps')
1386
1385
 
1387
- # Set y-axis to 1-100 scale
1388
- fig1.update_yaxes(range=[1, 100])
1386
+ # Set y-axis to [0 - highest_pps] scale
1387
+ fig1.update_yaxes(range=[0, results[-2]])
1389
1388
 
1390
1389
  # Position text labels next to the markers
1391
1390
  fig1.update_traces(textposition="top right")
@@ -1435,16 +1434,16 @@ def stress_analysis(test, pps, sent_pkts, received_pkts):
1435
1434
  print(f'Number of packets sent: {pkts_sent_count}')
1436
1435
  print(f'Number of packets received: {pkts_received_count}')
1437
1436
  percentage_received = round(pkts_received_count * 100 / pkts_sent_count)
1437
+ received_pps = pps * percentage_received / 100
1438
1438
 
1439
1439
  # PASS/FAIL logic
1440
- stage_pass = pkts_received_count / pkts_sent_count * 100
1441
- if stage_pass < 1: # If less than 1% of the packets were received, fail the test
1440
+ if percentage_received < 1: # If less than 1% of the packets were received, fail the test
1442
1441
  test.rc = TEST_FAILED
1443
1442
  test.reason = "Insufficient amount of packets were scanned & uploaded by the gateway"
1444
1443
  else:
1445
- test.reason = f'{percentage_received}% of packets received, average pps: {pps * percentage_received / 100}'
1444
+ test.reason = f'received pps: {received_pps} ({percentage_received}% of packets)'
1446
1445
 
1447
- return test, percentage_received
1446
+ return test, received_pps
1448
1447
 
1449
1448
 
1450
1449
  def generate_adv_payload(test_indicator, unique_pkt=False):
@@ -14,6 +14,7 @@ except importlib.metadata.PackageNotFoundError:
14
14
  CERT_VERSION = LOCAL_DEV
15
15
  CERT_MQTT_LOG_FILE = "cert_mqtt_log.json"
16
16
  DATA_SIM_LOG_FILE = "data_sim_log.txt"
17
+ RESULT_NOTES_FILE = "results_notes.txt"
17
18
  UT_RESULT_FILE_HTML = "results.html"
18
19
  UT_RESULT_FILE_PDF = "results.pdf"
19
20
  UTILS_BASE_REL_PATH = "../../../utils"
@@ -255,6 +255,9 @@ def interference_analysis(ble_serial):
255
255
  for key in CNTRS_KEYS:
256
256
  diff_dict[key] = handle_wrap_around(end_cntrs[key] - start_cntrs[key])
257
257
  bad_crc_percentage = round((diff_dict[BAD_CRC] / (diff_dict[WLT_RX] + diff_dict[NON_WLT_RX])) * 100)
258
+ notes_file_path = os.path.join(ARTIFACTS_DIR, RESULT_NOTES_FILE)
259
+ with open(notes_file_path, "a") as f:
260
+ f.write(f'Channel {channel[0]} ({channel[1]} MHz) Ambient Interference (bad CRC percentage): {bad_crc_percentage}%\n')
258
261
  print(color('WARNING', f'Channel {channel[0]} ({channel[1]} MHz) Ambient Interference (bad CRC percentage) is: {bad_crc_percentage}%'))
259
262
  print(f'Good CRC packets = {diff_dict[NON_WLT_RX] + diff_dict[WLT_RX] - diff_dict[BAD_CRC]}, bad CRC packets: {diff_dict[BAD_CRC]}')
260
263
 
@@ -36,6 +36,7 @@ BLE_MAC_ADDRESS = "BLE MAC Address"
36
36
  BOARD_TYPE = "Board Type"
37
37
  BLE_VER = "BLE Version"
38
38
  SUP_API_VER = "Supported API Version"
39
+ ADD_INFO = "Additional information"
39
40
  # TODO: This is a temporary list of all schema module names - remove this when auto generated
40
41
  MODULE_SCHEMA_NAMES_LIST = ["Cloud Connectivity", "Edge Management", "Calibration", "Datapath", "Energizer 2.4GHz",
41
42
  "Energizer Sub-1GHz", "Power Management", "BLE Sensor", "Custom"]
@@ -256,6 +257,13 @@ def generate_results_files(dut=None, tester=None, html=True, pdf=True, failures=
256
257
  hdr_page.append(Paragraph(f"{SIM} {BOARD_TYPE}: {ag.BOARD_TYPES_LIST[internal_brg.board_type]}", bold_text_style))
257
258
  hdr_page.append(Paragraph(f"{SIM} {BLE_VER}: {internal_brg.version}", bold_text_style))
258
259
  hdr_page.append(Paragraph(f"{SIM} {SUP_API_VER}: {internal_brg.api_version}", bold_text_style))
260
+ notes_file_path = os.path.join(ARTIFACTS_DIR, RESULT_NOTES_FILE)
261
+ if os.path.exists(notes_file_path):
262
+ hdr_page.append(Paragraph(f"<u>{ADD_INFO}:</u>", bold_text_style))
263
+ with open(notes_file_path, 'r') as f:
264
+ for line in f.readlines():
265
+ hdr_page.append(Paragraph(f"{line}", bold_text_style))
266
+
259
267
  hdr_page.append(Spacer(1, 20))
260
268
 
261
269
  # Analyze results per module and generate results per module for PDF
@@ -220,6 +220,9 @@ class WltTest:
220
220
  return phase
221
221
  return None
222
222
 
223
+ def add_phase(self, phase):
224
+ self.phases[-1:-1] = [phase]
225
+
223
226
  def update_overall_rc(self):
224
227
  if any([phase.rc == TEST_FAILED for phase in self.phases]):
225
228
  self.rc = TEST_FAILED
@@ -71,4 +71,5 @@ cloud_connectivity/stress_test 20 40 60 80 100 120 140 160 180 200 222 250 285 3
71
71
  cloud_connectivity/ext_adv_stress_test 20 40 60 80 100 120 140 160 180 200
72
72
  cloud_connectivity/channel_scan_behaviour_test
73
73
  cloud_connectivity/acl_test deny allow
74
- cloud_connectivity/acl_ext_adv_test deny allow
74
+ cloud_connectivity/acl_ext_adv_test deny allow
75
+ cloud_connectivity/deduplication_test
@@ -73,3 +73,4 @@ cloud_connectivity/channel_scan_behaviour_test
73
73
  cloud_connectivity/acl_test deny allow
74
74
  cloud_connectivity/acl_ext_adv_test deny allow
75
75
  cloud_connectivity/brg_ota_test
76
+ cloud_connectivity/deduplication_test
@@ -2,7 +2,7 @@
2
2
  "name": "Access Control List using Extended Advertising",
3
3
  "module": "Cloud Connectivity",
4
4
  "purpose": "Test the access control list (ACL) functionality, configure allow list and deny list and test the behavior, while the Bridge is transmitting in extended advertising",
5
- "documentation": "<TEST_DOCUMENTATION_LINK>",
5
+ "documentation": "https://community.wiliot.com/customers/s/article/Wiliot-Network---Gateway-Extended-Advertising-Implementation",
6
6
  "initialCondition": "Gateway configured to defaults",
7
7
  "procedure": ["Test prolog", "configure the brg to be on the deny list", "configure the brg to be on the allow list", "Test epilog"],
8
8
  "expectedOutcome": "For the deny list - no unified packets are found, for the allow list - unified packets are found",
@@ -2,7 +2,7 @@
2
2
  "name": "Access Control List",
3
3
  "module": "Cloud Connectivity",
4
4
  "purpose": "Test the access control list (ACL) functionality, configure allow list and deny list and test the behavior",
5
- "documentation": "<TEST_DOCUMENTATION_LINK>",
5
+ "documentation": "https://community.wiliot.com/customers/s/article/Access-Control-List",
6
6
  "initialCondition": "Gateway configured to defaults",
7
7
  "procedure": ["Test prolog", "configure the brg to be on the deny list", "configure the brg to be on the allow list", "Test epilog"],
8
8
  "expectedOutcome": "For the deny list - no unified packets are found, for the allow list - unified packets are found",
@@ -2,7 +2,7 @@
2
2
  "name": "Gateway Channel behavior",
3
3
  "module": "Cloud Connectivity",
4
4
  "purpose": "Test gateway's channel scanning time cycles on all main channels",
5
- "documentation": "<TEST_DOCUMENTATION_LINK>",
5
+ "documentation": "",
6
6
  "initialCondition": "Gateway configured with default settings",
7
7
  "procedure": ["Test prolog",
8
8
  "Send packets as close as possible to continuously on all 3 channels, with a unique channel identifier",
@@ -0,0 +1,14 @@
1
+ {
2
+ "name": "Gateway Deduplication",
3
+ "module": "Cloud Connectivity",
4
+ "purpose": "Test gateway's packet deduplication capability when receiving identical BLE packets",
5
+ "documentation": "",
6
+ "initialCondition": "Gateway configured to defaults",
7
+ "procedure": ["Test prolog", "Send mixed packet types (pixels, mgmt, sensor, side_info_sensor) via data simulator", "Collect received packets from MQTT", "Analyze duplicate packets and calculate duplicate percentage", "Test epilog"],
8
+ "expectedOutcome": "Duplicate percentage should be <= 5% of total received packets",
9
+ "mandatory": 0,
10
+ "multiBridgeTest": 0,
11
+ "gwOnlyTest": 1,
12
+ "dataSimOnlyTest": 1,
13
+ "allSupportedValues": []
14
+ }
@@ -0,0 +1,85 @@
1
+ # This test meant to show the GW performance when is put in a pkt stress generated from the BLE via the UART
2
+ from certificate.cert_prints import *
3
+ from certificate.cert_defines import *
4
+ from certificate.wlt_types import *
5
+ import certificate.cert_common as cert_common
6
+ import certificate.cert_utils as cert_utils
7
+ import certificate.cert_mqtt as cert_mqtt
8
+ import certificate.cert_data_sim as cert_data_sim
9
+ import pandas as pd
10
+
11
+
12
+ # DEFINES
13
+ UPLINK_TEST_INDICATOR = cert_utils.get_random_hex_str(len=6)
14
+ NUM_OF_BRGS = 3
15
+
16
+
17
+ # HELPER FUNCTIONS
18
+ def duplication_analysis(test, pkts, received_pkts):
19
+ if len(received_pkts) == 0:
20
+ test.rc = TEST_FAILED
21
+ test.reason = "No packets were received!"
22
+ return test
23
+
24
+ _sent_pkts = []
25
+ for pkt in pkts:
26
+ pkt_str = pkt.get_pkt()
27
+ adva_endianness_change = cert_common.change_endianness(pkt_str[:12]) + pkt_str[12:] # Switch to big endian adva
28
+ _sent_pkts.append(adva_endianness_change)
29
+
30
+ sent_df = pd.DataFrame(_sent_pkts, columns=[PACKETS])
31
+ received_df = pd.DataFrame(received_pkts, columns=[PACKETS])
32
+
33
+ merged_df = pd.merge(sent_df, received_df, on=PACKETS, how='inner')
34
+ # Count total received packets (including duplicates) and unique packets
35
+ pkts_received_total = len(merged_df)
36
+ merged_df_unique = merged_df.drop_duplicates(subset=[PACKETS])
37
+ pkts_duplicates = pkts_received_total - len(merged_df_unique)
38
+
39
+ # Prints
40
+ print(f'Number of packets sent: {len(sent_df)}')
41
+ print(f'Number of packets received in total: {pkts_received_total}, out of them {pkts_duplicates} are duplicates')
42
+
43
+ duplicate_percentage = (pkts_duplicates / pkts_received_total) * 100
44
+ print(f'{duplicate_percentage:.2f}% of the received packets are duplicates')
45
+
46
+ if duplicate_percentage > 5.0:
47
+ test.rc = TEST_FAILED
48
+ test.reason = f"{duplicate_percentage:.2f}% of the received packets are duplicates"
49
+ return test
50
+
51
+ return test
52
+
53
+
54
+ def run(test):
55
+ test = cert_common.test_prolog(test)
56
+ if test.rc == TEST_FAILED:
57
+ return cert_common.test_epilog(test)
58
+
59
+ dut_mqttc = test.get_mqttc_by_target(DUT)
60
+ dut_mqttc.flush_pkts()
61
+ pkts = []
62
+
63
+ # generate pkts and send them using data simulator
64
+ data_pkts, _ = cert_data_sim.brg_pkt_gen(num_of_pkts_per_brg=10, num_of_brgs=NUM_OF_BRGS,
65
+ pkt_type=PIXELS_PKT, indicator=UPLINK_TEST_INDICATOR)
66
+
67
+ mgmt_pkts, _ = cert_data_sim.brg_pkt_gen(num_of_pkts_per_brg=10, num_of_brgs=NUM_OF_BRGS,
68
+ pkt_type=MGMT_PKT, indicator=UPLINK_TEST_INDICATOR)
69
+ sensor_pkts, _ = cert_data_sim.brg_pkt_gen(num_of_pkts_per_brg=10, num_of_brgs=NUM_OF_BRGS,
70
+ pkt_type=SENSOR_PKT, indicator=UPLINK_TEST_INDICATOR)
71
+ si_pkts, _ = cert_data_sim.brg_pkt_gen(num_of_pkts_per_brg=10, num_of_brgs=NUM_OF_BRGS,
72
+ pkt_type=SIDE_INFO_SENSOR_PKT, indicator=UPLINK_TEST_INDICATOR)
73
+ pkts = data_pkts + mgmt_pkts + sensor_pkts + si_pkts
74
+
75
+ pixel_sim_thread = cert_data_sim.GenericSimThread(test=test, pkts=pkts, send_single_cycle=True)
76
+ pixel_sim_thread.start()
77
+
78
+ mqtt_scan_wait(test, 10 + test.dut.upload_wait_time)
79
+ cert_mqtt.dump_pkts(test, log="deduplication_test")
80
+ recieved_pkts = cert_mqtt.get_all_data_pkts(dut_mqttc, indicator=UPLINK_TEST_INDICATOR)
81
+ pixel_sim_thread.stop()
82
+
83
+ test = duplication_analysis(test, pkts, [p[ALIAS_BRIDGE_ID] + p[PAYLOAD] for p in recieved_pkts])
84
+
85
+ return cert_common.test_epilog(test)
@@ -12,5 +12,5 @@
12
12
  "multiBridgeTest": 0,
13
13
  "gwOnlyTest": 1,
14
14
  "dataSimOnlyTest": 1,
15
- "allSupportedValues": [20, 40, 60, 80, 100, 120, 140, 160, 180, 200]
15
+ "allSupportedValues": []
16
16
  }
@@ -51,13 +51,13 @@ def run(test):
51
51
 
52
52
  cert_config.gw_action(test, f'{cert_gw_sim.BLE_SIM_INIT} 1', TESTER)
53
53
 
54
+ ppses = [20, 40, 60, 80, 100, 120, 140, 160, 180, 200]
54
55
  test_pkts_received = []
55
56
  data_pkts_received = []
56
57
  results = []
57
- for param in test.params:
58
- phase_run_print(f"PPS = {param}")
58
+ for pps in ppses:
59
+ phase_run_print(f"PPS = {pps}")
59
60
  test.flush_all_mqtt_packets()
60
- pps = param.value
61
61
  # adv_duration is increased only for lowest pps to increase packets sample for reliable results
62
62
  adv_duration = ADV_DURATION_LOWEST_PPS if pps == LOWEST_PPS else ADV_DURATION_DEFAULT
63
63
  delay = math.floor(1000 / pps) # This should be bigger than 2ms
@@ -74,17 +74,18 @@ def run(test):
74
74
  cert_config.gw_action(test, gw_action_cmd, TESTER)
75
75
  mqtt_scan_wait(test, adv_duration + upload_wait_time)
76
76
 
77
- cert_mqtt.dump_pkts(test, log=param.name)
77
+ cert_mqtt.dump_pkts(test, log=str(pps))
78
78
  phase_pkts_received = cert_mqtt.get_all_aggregated_data_pkts(test.get_mqttc_by_target(DUT), indicator=STRESS_TEST_INDICATOR)
79
79
 
80
- test, percentage_received = cert_common.stress_analysis(
80
+ test, received_pps = cert_common.stress_analysis(
81
81
  test, pps, generated_payloads,
82
82
  [(p[ALIAS_BRIDGE_ID] + p[AGGREGATED_PAYLOAD]) for p in phase_pkts_received])
83
- results.extend([pps, percentage_received])
84
- cert_mqtt.generate_log_file(test, param.name)
83
+ results.extend([pps, received_pps])
84
+ cert_mqtt.generate_log_file(test, str(pps))
85
85
 
86
- test.set_phase_rc(param.name, test.rc)
87
- test.add_phase_reason(param.name, test.reason)
86
+ test.add_phase(cert_utils.Phase(pps))
87
+ test.set_phase_rc(str(pps), test.rc)
88
+ test.add_phase_reason(str(pps), test.reason)
88
89
  if test.rc == TEST_FAILED and test.exit_on_param_failure:
89
90
  break # break the whole for loop and keep the test as failed
90
91
  test.reset_result() # reset result and continue to next param
@@ -12,5 +12,5 @@
12
12
  "multiBridgeTest": 0,
13
13
  "gwOnlyTest": 1,
14
14
  "dataSimOnlyTest": 1,
15
- "allSupportedValues": [20, 40, 60, 80, 100, 120, 140, 160, 180, 200, 222, 250, 285, 333]
15
+ "allSupportedValues": []
16
16
  }
@@ -50,14 +50,13 @@ def run(test):
50
50
  return cert_common.test_epilog(test)
51
51
 
52
52
  cert_config.gw_action(test, f'{cert_gw_sim.BLE_SIM_INIT} 1', TESTER)
53
-
53
+ ppses = [20, 40, 60, 80, 100, 120, 140, 160, 180, 200, 222, 250, 285, 333]
54
54
  test_pkts_received = []
55
55
  data_pkts_received = []
56
56
  results = []
57
- for param in test.params:
58
- phase_run_print(f"PPS = {param}")
57
+ for pps in ppses:
58
+ phase_run_print(f"PPS = {pps}")
59
59
  test.flush_all_mqtt_packets()
60
- pps = param.value
61
60
  # adv_duration is increased only for lowest pps to increase packets sample for reliable results
62
61
  adv_duration = ADV_DURATION_LOWEST_PPS if pps == LOWEST_PPS else ADV_DURATION_DEFAULT
63
62
  delay = math.floor(1000 / pps)
@@ -73,17 +72,18 @@ def run(test):
73
72
  f'{BLE_SIM_ADV_37_38_39} {delay} {BLE_SIM_RADIO_1MBPS} {adv_duration * pps}', TESTER)
74
73
  mqtt_scan_wait(test, adv_duration + upload_wait_time)
75
74
 
76
- cert_mqtt.dump_pkts(test, log=param.name)
75
+ cert_mqtt.dump_pkts(test, log=str(pps))
77
76
  phase_pkts_received = cert_mqtt.get_all_data_pkts(test.get_mqttc_by_target(DUT), indicator=STRESS_TEST_INDICATOR)
78
77
 
79
- test, percentage_received = cert_common.stress_analysis(
78
+ test, received_pps = cert_common.stress_analysis(
80
79
  test, pps, generated_payloads,
81
80
  [(p[ALIAS_BRIDGE_ID] + p[PAYLOAD]) for p in phase_pkts_received])
82
- results.extend([pps, percentage_received])
83
- cert_mqtt.generate_log_file(test, param.name)
81
+ results.extend([pps, received_pps])
82
+ cert_mqtt.generate_log_file(test, str(pps))
84
83
 
85
- test.set_phase_rc(param.name, test.rc)
86
- test.add_phase_reason(param.name, test.reason)
84
+ test.add_phase(cert_utils.Phase(pps))
85
+ test.set_phase_rc(str(pps), test.rc)
86
+ test.add_phase_reason(str(pps), test.reason)
87
87
  if test.rc == TEST_FAILED and test.exit_on_param_failure:
88
88
  break # break the whole for loop and keep the test as failed
89
89
  test.reset_result() # reset result and continue to next param
@@ -130,6 +130,7 @@ def run(test):
130
130
 
131
131
  mqtt_scan_wait(test, 10 + test.dut.upload_wait_time)
132
132
  cert_mqtt.dump_pkts(test, log=param.name)
133
+ pixel_sim_thread.stop()
133
134
  all_data_messages_in_test.extend(dut_mqttc._userdata[PKTS].data)
134
135
  all_data_pkts.extend(cert_mqtt.get_all_data_pkts(dut_mqttc))
135
136
  recieved_pkts = cert_mqtt.get_all_data_pkts(dut_mqttc, indicator=UPLINK_TEST_INDICATOR)
@@ -2,7 +2,7 @@
2
2
  "name": "Supported Pixels",
3
3
  "module": "Datapath",
4
4
  "purpose": "Test pixels handling in the bridge for different amount of pixels",
5
- "documentation": "<TEST_DOCUMENTATION_LINK>",
5
+ "documentation": "",
6
6
  "initialCondition": "Bridge & data simulator configured to defaults",
7
7
  "procedure": ["Test prolog",
8
8
  "Generate packets from the given amount of pixels & scan for packets in the bridge",
@@ -2,7 +2,7 @@
2
2
  "name": "RSSI Threshold",
3
3
  "module": "Datapath",
4
4
  "purpose": "Test RSSI threshold configuration and functionality in the bridge",
5
- "documentation": "<TEST_DOCUMENTATION_LINK>",
5
+ "documentation": "",
6
6
  "initialCondition": "Bridge configured to defaults",
7
7
  "procedure": ["Test prolog",
8
8
  "RSSI Threshold configuration",
@@ -23,7 +23,7 @@ def api_validation(test):
23
23
  utPrint("API validation is skipped for protobuf messages", "WARNING")
24
24
  api_validation_phase.rc = TEST_SKIPPED
25
25
  api_validation_phase.reason = "API validation is skipped for protobuf messages"
26
- test.phases[-1:-1] = [api_validation_phase]
26
+ test.add_phase(api_validation_phase)
27
27
  return test
28
28
  else:
29
29
  def validate_message(message: dict, msg_type=MESSAGE_TYPES.DATA.value) -> tuple[bool, str]:
@@ -81,5 +81,5 @@ def api_validation(test):
81
81
  api_validation_phase.rc = TEST_FAILED
82
82
  api_validation_phase.reason = "API (JSON strcture) is invalid"
83
83
  field_functionality_pass_fail_print(api_validation_phase, API_VALIDATION)
84
- test.phases[-1:-1] = [api_validation_phase]
84
+ test.add_phase(api_validation_phase)
85
85
  return test