wiliot-certificate 1.5.0a1__py3-none-any.whl → 1.5.2a1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. brg_certificate/ag/energous_v0_defines.py +17 -17
  2. brg_certificate/ag/energous_v1_defines.py +17 -17
  3. brg_certificate/ag/energous_v2_defines.py +17 -17
  4. brg_certificate/ag/energous_v3_defines.py +17 -17
  5. brg_certificate/ag/energous_v4_defines.py +17 -17
  6. brg_certificate/ag/fanstel_lan_v0_defines.py +17 -17
  7. brg_certificate/ag/fanstel_lte_v0_defines.py +17 -17
  8. brg_certificate/ag/fanstel_wifi_v0_defines.py +17 -17
  9. brg_certificate/ag/minew_lte_v0_defines.py +17 -17
  10. brg_certificate/ag/wlt_cmd_if.html +3 -2
  11. brg_certificate/ag/wlt_types.html +0 -1
  12. brg_certificate/ag/wlt_types_ag.py +151 -152
  13. brg_certificate/brg_certificate.py +38 -7
  14. brg_certificate/brg_certificate_cli.py +19 -3
  15. brg_certificate/cert_common.py +92 -55
  16. brg_certificate/cert_config.py +6 -4
  17. brg_certificate/cert_data_sim.py +47 -7
  18. brg_certificate/cert_defines.py +20 -6
  19. brg_certificate/cert_gw_sim.py +10 -6
  20. brg_certificate/cert_mqtt.py +9 -6
  21. brg_certificate/cert_prints.py +14 -1
  22. brg_certificate/cert_protobuf.py +7 -7
  23. brg_certificate/cert_results.py +131 -84
  24. brg_certificate/cert_utils.py +13 -7
  25. brg_certificate/certificate_bcc_sanity_test_list.txt +40 -0
  26. brg_certificate/certificate_bcc_test_list.txt +50 -0
  27. brg_certificate/certificate_sanity_test_list.txt +12 -5
  28. brg_certificate/certificate_test_list.txt +16 -6
  29. brg_certificate/tests/calibration/interval_test/interval_test.json +4 -3
  30. brg_certificate/tests/calibration/output_power_test/output_power_test.json +8 -5
  31. brg_certificate/tests/calibration/pattern_test/pattern_test.json +7 -4
  32. brg_certificate/tests/calibration/pattern_test/pattern_test.py +25 -26
  33. brg_certificate/tests/datapath/aging_test/aging_test.json +19 -0
  34. brg_certificate/tests/datapath/aging_test/aging_test.py +142 -0
  35. brg_certificate/tests/datapath/num_of_tags_test/num_of_tags_test.json +10 -5
  36. brg_certificate/tests/datapath/num_of_tags_test/num_of_tags_test.py +12 -11
  37. brg_certificate/tests/datapath/output_power_test/output_power_test.json +7 -4
  38. brg_certificate/tests/datapath/output_power_test/output_power_test.py +2 -1
  39. brg_certificate/tests/datapath/pacer_interval_ble5_test/pacer_interval_ble5_test.json +8 -5
  40. brg_certificate/tests/datapath/pacer_interval_ble5_test/pacer_interval_ble5_test.py +6 -3
  41. brg_certificate/tests/datapath/pacer_interval_tags_count_test/pacer_interval_tags_count_test.json +7 -4
  42. brg_certificate/tests/datapath/pacer_interval_tags_count_test/pacer_interval_tags_count_test.py +6 -3
  43. brg_certificate/tests/datapath/pacer_interval_test/pacer_interval_test.json +7 -4
  44. brg_certificate/tests/datapath/pacer_interval_test/pacer_interval_test.py +4 -2
  45. brg_certificate/tests/datapath/pattern_test/pattern_test.json +8 -5
  46. brg_certificate/tests/datapath/pattern_test/pattern_test.py +2 -1
  47. brg_certificate/tests/datapath/pkt_filter_ble5_test/pkt_filter_ble5_test.json +11 -5
  48. brg_certificate/tests/datapath/pkt_filter_ble5_test/pkt_filter_ble5_test.py +12 -5
  49. brg_certificate/tests/datapath/pkt_filter_gen3_test/pkt_filter_gen3_test.json +10 -4
  50. brg_certificate/tests/datapath/pkt_filter_gen3_test/pkt_filter_gen3_test.py +11 -6
  51. brg_certificate/tests/datapath/pkt_filter_test/pkt_filter_test.json +10 -4
  52. brg_certificate/tests/datapath/pkt_filter_test/pkt_filter_test.py +11 -7
  53. brg_certificate/tests/datapath/rssi_threshold_test/rssi_threshold_test.json +8 -4
  54. brg_certificate/tests/datapath/rssi_threshold_test/rssi_threshold_test.py +7 -5
  55. brg_certificate/tests/datapath/rx_channel_test/rx_channel_test.json +7 -4
  56. brg_certificate/tests/datapath/rx_channel_test/rx_channel_test.py +7 -3
  57. brg_certificate/tests/datapath/rx_rate_gen2_test/rx_rate_gen2_test.json +4 -5
  58. brg_certificate/tests/datapath/rx_rate_gen2_test/rx_rate_gen2_test.py +107 -73
  59. brg_certificate/tests/datapath/rx_rate_gen3_test/rx_rate_gen3_test.json +4 -5
  60. brg_certificate/tests/datapath/rx_rate_gen3_test/rx_rate_gen3_test.py +128 -118
  61. brg_certificate/tests/datapath/stress_gen3_test/stress_gen3_test.json +15 -23
  62. brg_certificate/tests/datapath/stress_gen3_test/stress_gen3_test.py +104 -103
  63. brg_certificate/tests/datapath/stress_test/stress_test.json +15 -23
  64. brg_certificate/tests/datapath/stress_test/stress_test.py +104 -110
  65. brg_certificate/tests/datapath/tx_repetition_algo_test/tx_repetition_algo_test.json +8 -4
  66. brg_certificate/tests/datapath/tx_repetition_algo_test/tx_repetition_algo_test.py +7 -2
  67. brg_certificate/tests/datapath/tx_repetition_test/tx_repetition_test.json +8 -4
  68. brg_certificate/tests/datapath/tx_repetition_test/tx_repetition_test.py +8 -6
  69. brg_certificate/tests/edge_mgmt/actions_test/actions_test.json +4 -3
  70. brg_certificate/tests/edge_mgmt/actions_test/actions_test.py +2 -38
  71. brg_certificate/tests/edge_mgmt/brg2brg_ota_ble5_test/brg2brg_ota_ble5_test.json +15 -8
  72. brg_certificate/tests/edge_mgmt/brg2brg_ota_test/brg2brg_ota_test.json +14 -8
  73. brg_certificate/tests/edge_mgmt/leds_test/leds_test.json +11 -7
  74. brg_certificate/tests/edge_mgmt/leds_test/leds_test.py +25 -12
  75. brg_certificate/tests/edge_mgmt/ota_test/ota_test.json +11 -7
  76. brg_certificate/tests/edge_mgmt/ota_test/ota_test.py +48 -3
  77. brg_certificate/tests/edge_mgmt/{stat_test/stat_test.json → periodic_msgs_test/periodic_msgs_test.json} +5 -4
  78. brg_certificate/tests/edge_mgmt/{stat_test/stat_test.py → periodic_msgs_test/periodic_msgs_test.py} +4 -4
  79. brg_certificate/tests/energy2400/duty_cycle_test/duty_cycle_test.json +8 -5
  80. brg_certificate/tests/energy2400/duty_cycle_test/duty_cycle_test.py +2 -1
  81. brg_certificate/tests/energy2400/output_power_test/output_power_test.json +9 -6
  82. brg_certificate/tests/energy2400/output_power_test/output_power_test.py +2 -1
  83. brg_certificate/tests/energy2400/pattern_test/pattern_test.json +8 -5
  84. brg_certificate/tests/energy2400/pattern_test/pattern_test.py +2 -1
  85. brg_certificate/tests/energy2400/signal_indicator_ble5_10_250k_test/signal_indicator_ble5_10_250k_test.json +20 -0
  86. brg_certificate/tests/energy2400/signal_indicator_ble5_10_250k_test/signal_indicator_ble5_10_250k_test.py +343 -0
  87. brg_certificate/tests/energy2400/signal_indicator_ble5_10_500k_test/signal_indicator_ble5_10_500k_test.json +20 -0
  88. brg_certificate/tests/energy2400/signal_indicator_ble5_10_500k_test/signal_indicator_ble5_10_500k_test.py +343 -0
  89. brg_certificate/tests/energy2400/signal_indicator_sub1g_2_4_test/signal_indicator_sub1g_2_4_test.json +14 -7
  90. brg_certificate/tests/energy2400/signal_indicator_sub1g_2_4_test/signal_indicator_sub1g_2_4_test.py +45 -57
  91. brg_certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.json +14 -7
  92. brg_certificate/tests/energy2400/signal_indicator_test/signal_indicator_test.py +198 -125
  93. brg_certificate/tests/energy_sub1g/duty_cycle_test/duty_cycle_test.json +7 -4
  94. brg_certificate/tests/energy_sub1g/duty_cycle_test/duty_cycle_test.py +2 -1
  95. brg_certificate/tests/energy_sub1g/pattern_test/pattern_test.json +13 -6
  96. brg_certificate/tests/energy_sub1g/pattern_test/pattern_test.py +2 -1
  97. brg_certificate/tests/energy_sub1g/signal_indicator_functionality_test/signal_indicator_functionality_test.json +14 -7
  98. brg_certificate/tests/energy_sub1g/signal_indicator_functionality_test/signal_indicator_functionality_test.py +117 -124
  99. brg_certificate/tests/energy_sub1g/signal_indicator_test/signal_indicator_test.json +7 -4
  100. brg_certificate/tests/energy_sub1g/signal_indicator_test/signal_indicator_test.py +2 -1
  101. brg_certificate/tests/pwr_mgmt/pwr_mgmt_test/pwr_mgmt_test.json +18 -0
  102. brg_certificate/tests/pwr_mgmt/pwr_mgmt_test/pwr_mgmt_test.py +84 -0
  103. brg_certificate/tests/sensors/ext_sensor_test/ext_sensor_test.json +21 -0
  104. brg_certificate/tests/sensors/ext_sensor_test/ext_sensor_test.py +306 -0
  105. brg_certificate/wltPb_pb2.py +15 -15
  106. brg_certificate/wltPb_pb2.pyi +8 -2
  107. brg_certificate/wlt_types.py +2 -1
  108. gw_certificate/cert_results.py +11 -4
  109. gw_certificate/gw_certificate.py +0 -2
  110. gw_certificate/gw_certificate_cli.py +3 -3
  111. gw_certificate/interface/uart_if.py +1 -1
  112. gw_certificate/tests/actions.py +7 -1
  113. gw_certificate/tests/registration.py +2 -1
  114. gw_certificate/tests/uplink.py +26 -35
  115. {wiliot_certificate-1.5.0a1.dist-info → wiliot_certificate-1.5.2a1.dist-info}/METADATA +46 -42
  116. {wiliot_certificate-1.5.0a1.dist-info → wiliot_certificate-1.5.2a1.dist-info}/RECORD +120 -112
  117. {wiliot_certificate-1.5.0a1.dist-info → wiliot_certificate-1.5.2a1.dist-info}/WHEEL +1 -1
  118. brg_certificate/tests/datapath/adaptive_pacer_algo_test/adaptive_pacer_algo_test.json +0 -13
  119. brg_certificate/tests/datapath/adaptive_pacer_algo_test/adaptive_pacer_algo_test.py +0 -76
  120. brg_certificate/tests/energy2400/signal_indicator_ble5_test/signal_indicator_ble5_test.json +0 -13
  121. brg_certificate/tests/energy2400/signal_indicator_ble5_test/signal_indicator_ble5_test.py +0 -398
  122. {wiliot_certificate-1.5.0a1.dist-info → wiliot_certificate-1.5.2a1.dist-info}/entry_points.txt +0 -0
  123. {wiliot_certificate-1.5.0a1.dist-info → wiliot_certificate-1.5.2a1.dist-info/licenses}/LICENSE +0 -0
  124. {wiliot_certificate-1.5.0a1.dist-info → wiliot_certificate-1.5.2a1.dist-info}/top_level.txt +0 -0
@@ -8,192 +8,186 @@ from brg_certificate.cert_gw_sim import DEDUPLICATION_PKTS
8
8
  import statistics
9
9
  import time
10
10
 
11
- def configure_pacer_n_times(test, num_of_times, pacer_interval, datapath_module):
12
- test = cert_config.brg_configure(test, fields=[BRG_PACER_INTERVAL], values=[pacer_interval], module=datapath_module)[0]
13
- if test.rc == TEST_FAILED:
14
- for i in range(num_of_times):
15
- if test.rc == TEST_PASSED:
16
- return test
17
- print(f"sleeping for 10 seconds before trying to configure pacer again\n")
18
- time.sleep(10)
19
- test = cert_config.brg_configure(test, fields=[BRG_PACER_INTERVAL], values=[pacer_interval], module=datapath_module)[0]
20
- test.add_reason("Didn't succeed to configure after two attempts - No pkt was found!")
21
- return test
22
11
 
23
- def metric_checking_HB(test, mgmt_type_list, tx_queue_expected, pacer_increment_expected):
12
+ def metric_checking_HB(test, check, mgmt_type_list, tx_queue_expected, pacer_increment_expected):
24
13
  if not mgmt_type_list:
25
- test.add_reason("\nDidn't find HB pkt, therefore will not check tx_queue and pacer increment\n")
26
- print(f"Didn't find HB pkt, therefore will not check tx_queue and pacer increment")
14
+ test.add_reason("\nDidn't find HB pkt, therefore skip all checks\n")
15
+ print("Didn't find HB pkt, therefore will not check tx_queue and pacer increment")
27
16
  else:
28
- #check tx queue
17
+ # check tx queue
29
18
  watermarks = [pkt.tx_queue_watermark for pkt in mgmt_type_list]
30
19
  half_index = len(watermarks) // 2
31
20
  tx_queue_HB = statistics.mean(watermarks[half_index:])
32
21
  if not (tx_queue_expected[0] <= tx_queue_HB <= tx_queue_expected[1]):
33
- test.add_reason(f"tx_queue: {tx_queue_HB}")
34
- print(f"\ntx_queue value is wrong!\nexpected: {tx_queue_expected}, got: {tx_queue_HB}")
22
+ print(f"\ntx_queue: {tx_queue_HB} expected: {tx_queue_expected},")
35
23
  else:
36
- test.add_reason(f"tx_queue: {tx_queue_HB}")
37
- print(f"\ntx_queue from HB : {tx_queue_HB}\n")
38
-
24
+ print(f"\ntx_queue from HB: {tx_queue_HB}\n")
25
+
39
26
  # check pacer increment
40
27
  pacer_increment_HB = [pkt.effective_pacer_increment for pkt in mgmt_type_list]
41
28
  average_pacer_increment_HB = statistics.mean(pacer_increment_HB)
42
29
  if not (pacer_increment_expected[0] <= average_pacer_increment_HB <= pacer_increment_expected[1]):
43
- test.add_reason(f"pacer_increment:{average_pacer_increment_HB}")
44
30
  print(f"\npacer_increment value is wrong\nexpected: {pacer_increment_expected}\ngot: {average_pacer_increment_HB}")
31
+ if check:
32
+ test.rc = TEST_FAILED
33
+ test.add_reason(f"pacer_increment:{average_pacer_increment_HB}")
45
34
  else:
46
- test.add_reason(f"pacer_increment: {average_pacer_increment_HB}")
47
35
  print(f"\naverage pacer_increment from HB: {average_pacer_increment_HB}\n")
36
+ if check:
37
+ test.add_reason(f"pacer_increment: {average_pacer_increment_HB}")
48
38
  return test
49
39
 
50
- def metric_checking_df(test, check, pacer_interval, df, repetition_value_expected, brg_latency_expected, num_of_pixels_expected):
40
+
41
+ def metric_checking_df(test, check, pacer_interval, df, repetition_value_expected, brg_latency_expected, num_of_pixels_expected):
51
42
  if df.empty:
52
- print(f" df is empty, therefore will not check repetitions, brg latency and num of tags")
43
+ print("Df is empty, therefore will not check repetitions, brg latency and num of tags")
53
44
  test.rc = TEST_FAILED
54
- test.add_reason(f"df is empty, therefore will not check repetitions, brg latency and num of tags")
45
+ test.add_reason("Df is empty, therefore skip all checks")
55
46
  else:
56
47
  print(f"result of pacer interval: {pacer_interval}\n")
57
48
  # check repetition value
58
49
  payload_counts_per_tag = df.groupby(TAG_ID)[PAYLOAD].value_counts()
59
50
  average_payload_count = round(payload_counts_per_tag.mean(), 2)
60
51
  if not repetition_value_expected[0] <= average_payload_count <= repetition_value_expected[1]:
52
+ print(f"Repetition value is wrong! \nexpected:{repetition_value_expected}\ngot: {average_payload_count}")
61
53
  if check:
62
54
  test.rc = TEST_FAILED
63
- test.add_reason(f"Repetition:{average_payload_count}, expected: {repetition_value_expected},")
64
- print(f"Repetition value is wrong! \nexpected:{repetition_value_expected}\ngot: {average_payload_count}")
65
- else:
66
- test.add_reason(f"Repetition:{average_payload_count}, expected: {repetition_value_expected},")
67
- print(f"Repetition value is wrong! \nexpected:{repetition_value_expected}\ngot: {average_payload_count}")
55
+ test.add_reason(f"Repetition:{average_payload_count}, expected: {repetition_value_expected}")
68
56
  else:
69
- test.add_reason(f"Repetition value: {average_payload_count}")
70
57
  print(f"Repetition value is correct! got: {average_payload_count}")
71
-
58
+ if check:
59
+ test.add_reason(f"Repetition value: {average_payload_count}")
60
+
72
61
  # check num of tags, with tolerance of 5%
73
- num_of_tags = len(df[TAG_ID].unique())
74
- if not num_of_pixels_expected*0.95 <= num_of_tags <= num_of_pixels_expected*1.05:
75
- test.add_reason(f"num of tags: {num_of_tags}")
76
- print(f"\n num of tags is not as expected\nexpected: {num_of_pixels_expected}, got: {num_of_tags}")
62
+ num_of_tags = len(df[TAG_ID].unique())
63
+ if not num_of_pixels_expected * 0.95 <= num_of_tags <= num_of_pixels_expected * 1.05:
64
+ print(f"\nnum of tags is not as expected\nexpected: {num_of_pixels_expected}, got: {num_of_tags}")
65
+ if check:
66
+ test.add_reason(f"num of tags: {num_of_tags}")
77
67
  else:
78
- test.add_reason(f"num of tags: {num_of_tags}")
79
68
  print(f"\nnum of tags from df: {num_of_tags}\n")
80
-
81
- #check brg_latency
82
- if check:
83
- brg_latency_avg = round(df[BRG_LATENCY].mean(),2)
84
- if not (brg_latency_expected[0] <= brg_latency_avg <= brg_latency_expected[1]):
85
- test.add_reason(f"brg_latency:{brg_latency_avg}")
86
- print(f"Average brg_latency: {brg_latency_avg}")
87
- else:
88
- test.add_reason(f"brg_latency: {brg_latency_avg}")
89
- print(f"Average brg_latency: {brg_latency_avg}")
69
+
70
+ # check brg_latency
71
+ brg_latency_avg = round(df[BRG_LATENCY].mean(), 2)
72
+ if not (brg_latency_expected[0] <= brg_latency_avg <= brg_latency_expected[1]):
73
+ print(f"Average brg_latency: {brg_latency_avg} , expected: {brg_latency_expected}")
90
74
  else:
91
- brg_latency_avg = round(df[BRG_LATENCY].mean(),2)
92
75
  print(f"Average brg_latency: {brg_latency_avg}")
93
- return test
76
+ return test
77
+
78
+
79
+ def combination_func(test, param, datapath_module, pacer_interval, num_of_sim_tags, repetition_value_expected,
80
+ tx_queue_expected, pacer_increment_expected, brg_latency_expected):
81
+ test = cert_config.brg_configure(test, fields=[BRG_PACER_INTERVAL], values=[pacer_interval], module=datapath_module)[0]
82
+ if test.rc == TEST_FAILED:
83
+ print("Failed to configure pacer interval")
84
+ test.add_reason("Failed to configure pacer interval")
85
+ return test
86
+ if param.name == "rep1_adaptive_pacer":
87
+ print(f"run phase: {param.name}")
88
+ df = cert_common.data_scan(test, scan_time=30, brg_data=(not test.internal_brg), gw_data=test.internal_brg)
89
+ cert_common.display_data(df, nfpkt=True, tbc=True, name_prefix=f"stress_{pacer_interval}_", dir=test.dir)
90
+ test, hbs = cert_common.scan_for_mgmt_pkts(test, [eval_pkt(f'Brg2GwHbV{test.active_brg.api_version}')])
91
+ hbs = [p[MGMT_PKT].pkt for p in hbs]
92
+
93
+ check = True
94
+ test = metric_checking_df(test, check, pacer_interval, df, repetition_value_expected, brg_latency_expected, num_of_sim_tags)
95
+ if not test.rc == TEST_FAILED:
96
+ test = metric_checking_HB(test, check, hbs, tx_queue_expected, pacer_increment_expected)
97
+ return test
98
+ else:
99
+ # in case it failed because the repetition value.
100
+ return test
94
101
 
95
- def combination_func(test, datapath_module, pacer_interval, num_of_sim_tags, repetition_value_expected, tx_queue_expected, pacer_increment_expected, brg_latency_expected):
96
- test = configure_pacer_n_times(test, 2, pacer_interval, datapath_module)
97
102
  time.sleep(30)
98
- # first df
103
+ # first df
99
104
  df = cert_common.data_scan(test, scan_time=30, brg_data=(not test.internal_brg), gw_data=test.internal_brg)
100
105
  cert_common.display_data(df, nfpkt=True, tbc=True, name_prefix=f"stress_{pacer_interval}_", dir=test.dir)
101
106
  test, hbs = cert_common.scan_for_mgmt_pkts(test, [eval_pkt(f'Brg2GwHbV{test.active_brg.api_version}')])
102
- print(f"number of HB packets: {len(hbs)}") # TODO remove
103
- for p in hbs: # TODO remove
104
- print(f"WATERMARK:{p[MGMT_PKT].pkt.tx_queue_watermark}, pacer increment:{p[MGMT_PKT].pkt.effective_pacer_increment} ") # TODO remove
105
- hbs = [p[MGMT_PKT].pkt for p in hbs]
106
- print(f"result of first df\n")
107
+ hbs = [p[MGMT_PKT].pkt for p in hbs]
108
+ print("result of first df\n")
107
109
  check = False
110
+ test = metric_checking_HB(test, check, hbs, tx_queue_expected, pacer_increment_expected)
108
111
  test = metric_checking_df(test, check, pacer_interval, df, repetition_value_expected, brg_latency_expected, num_of_sim_tags)
109
112
  time.sleep(30)
110
- # second df
113
+ # second df
111
114
  df = cert_common.data_scan(test, scan_time=60, brg_data=(not test.internal_brg), gw_data=test.internal_brg)
112
115
  cert_common.display_data(df, nfpkt=True, tbc=True, name_prefix=f"stress_{pacer_interval}_", dir=test.dir)
113
116
  test, hbs = cert_common.scan_for_mgmt_pkts(test, [eval_pkt(f'Brg2GwHbV{test.active_brg.api_version}')])
114
- hbs = [p[MGMT_PKT].pkt for p in hbs]
115
- print(f"result of second df\n")
117
+ hbs = [p[MGMT_PKT].pkt for p in hbs]
118
+ print("result of second df\n")
116
119
  check = True
120
+ test = metric_checking_HB(test, check, hbs, tx_queue_expected, pacer_increment_expected)
117
121
  test = metric_checking_df(test, check, pacer_interval, df, repetition_value_expected, brg_latency_expected, num_of_sim_tags)
118
- test = metric_checking_HB(test, hbs, tx_queue_expected, pacer_increment_expected)
119
122
  return test
120
123
 
121
- def rep3(test, datapath_module, num_of_sim_tags, pixel_sim_thread):
122
- # step 1 - config pacer interval=15 , then check repetition value = 3, tx_queue ~ 0, pacer increment ~ 0, brg latency ~ 0 , num of tags = all tags.
123
- pacer_interval = 20
124
- test = combination_func(test, datapath_module, pacer_interval=pacer_interval, num_of_sim_tags=num_of_sim_tags, repetition_value_expected=[2,3], tx_queue_expected=[20,40], pacer_increment_expected=[0,2], brg_latency_expected=[0,10])
124
+
125
+ def rep3(test, param, datapath_module, num_of_sim_tags):
126
+ # step 1 - config pacer interval=15 , then check repetition value = 3, tx_queue ~ 0, pacer increment ~ 0, brg latency ~ 0
127
+ pacer_interval = 22
128
+ test = combination_func(test, param, datapath_module, pacer_interval=pacer_interval, num_of_sim_tags=num_of_sim_tags,
129
+ repetition_value_expected=[2, 3], tx_queue_expected=[20, 40],
130
+ pacer_increment_expected=[0, 2], brg_latency_expected=[0, 10])
125
131
  time.sleep(5)
126
132
  return test
127
133
 
128
- def rep2(test, datapath_module, num_of_sim_tags, pixel_sim_thread):
129
- #"step 2 - config pacer interval 9, then check repetition value = 2, tx_queue = 20-40, pacer increment = 0, brg latency = 0-200, num of tags = all tags"
130
- pacer_interval = 15
131
- test = combination_func(test, datapath_module, pacer_interval=pacer_interval, num_of_sim_tags=num_of_sim_tags, repetition_value_expected=[1.5,2.5], tx_queue_expected=[20,40], pacer_increment_expected=[0,2], brg_latency_expected=[10,200])
132
- # for checking if it's affect of the running that df is empty.
134
+
135
+ def rep2(test, param, datapath_module, num_of_sim_tags):
136
+ # step 2 - config pacer interval 9, then check repetition value = 2, tx_queue = 20-40, pacer increment = 0, brg latency = 0-200
137
+ pacer_interval = 12
138
+ test = combination_func(test, param, datapath_module, pacer_interval=pacer_interval, num_of_sim_tags=num_of_sim_tags,
139
+ repetition_value_expected=[1.5, 2.5], tx_queue_expected=[20, 40],
140
+ pacer_increment_expected=[0, 2], brg_latency_expected=[10, 200])
133
141
  time.sleep(5)
134
142
  return test
135
143
 
136
- def rep1(test, datapath_module, num_of_sim_tags, pixel_sim_thread):
137
- # "step 3 - config pacer interval 6 , then check repetition value = 1, tx_queue 40-60, pacer increment ~ 0, brg latency 200-300 , num of tags = all tags"
138
- pacer_interval = 9
139
- test = combination_func(test, datapath_module, pacer_interval=pacer_interval, num_of_sim_tags=num_of_sim_tags, repetition_value_expected=[1,2], tx_queue_expected=[20,40], pacer_increment_expected=[0,2], brg_latency_expected=[200,300])
144
+
145
+ def rep1(test, param, datapath_module, num_of_sim_tags):
146
+ # "step 3 - config pacer interval 6 , then check repetition value = 1, tx_queue 40-60, pacer increment ~ 0, brg latency 200-300
147
+ pacer_interval = 7
148
+ test = combination_func(test, param, datapath_module, pacer_interval=pacer_interval, num_of_sim_tags=num_of_sim_tags,
149
+ repetition_value_expected=[1, 2], tx_queue_expected=[20, 40],
150
+ pacer_increment_expected=[0, 2], brg_latency_expected=[200, 300])
140
151
  time.sleep(5)
141
152
  return test
142
153
 
143
- def rep1_adaptive_pacer(test, datapath_module, num_of_sim_tags, pixel_sim_thread):
144
- # "step 4 - config pacer interval 1 , then check repetition value = 1, tx_queue > 60, pacer increment = 3 , brg latency > 300 , num of tags = all tags"
145
- pacer_interval = 1
146
- test = combination_func(test, datapath_module, pacer_interval=pacer_interval, num_of_sim_tags=num_of_sim_tags, repetition_value_expected=[1,2], tx_queue_expected=[20,40], pacer_increment_expected=[2,20], brg_latency_expected=[300,1000])
154
+
155
+ def rep1_adaptive_pacer(test, param, datapath_module, num_of_sim_tags):
156
+ # step 4 - config pacer interval 1, then check repetition value = 1, tx_queue > 60, pacer increment = 3, brg latency > 300
157
+ pacer_interval = 1
158
+
159
+ test = combination_func(test, param, datapath_module, pacer_interval=pacer_interval, num_of_sim_tags=num_of_sim_tags,
160
+ repetition_value_expected=[1, 2], tx_queue_expected=[20, 40],
161
+ pacer_increment_expected=[2, 50], brg_latency_expected=[300, 1000])
147
162
  time.sleep(5)
148
163
  return test
149
164
 
150
- def pixels_burst(test, datapath_module, num_of_sim_tags, pixel_sim_thread):
151
- #NOTE: I had to change the pattern because there isn't option to increase the the pixels number in the same thread it will cause error "index out of bound"
152
- # "step 5- config pacer interval 15 , then add more 200 packets with 0 delay(0.02 sec) , then check repetition value = 1 and not 2 "
153
- pixel_sim_thread.stop()
154
- pacer_interval = 15
155
- test = configure_pacer_n_times(test, 2, pacer_interval, datapath_module)
156
- pixel_sim_thread = cert_data_sim.DataSimThread(test=test, num_of_pixels=num_of_sim_tags, duplicates=1, delay=0, pkt_types=[0],pixels_type=GEN2)
157
- pixel_sim_thread.start()
158
- df = cert_common.data_scan(test, scan_time=180 , brg_data=(not test.internal_brg), gw_data=test.internal_brg)
159
- check = True
160
- test = metric_checking_df(test, check, pacer_interval, df, [2,3], [0,10], 200)
161
- # we must have df, so we will try twice again to get it
162
- if test.rc == TEST_FAILED:
163
- for i in range(2):
164
- if test.rc == TEST_PASSED:
165
- break
166
- df = cert_common.data_scan(test, scan_time=30 , brg_data=(not test.internal_brg), gw_data=test.internal_brg)
167
- test =metric_checking_df(test, check, pacer_interval, df, [2,3], [0,10], 200)
168
- pixel_sim_thread.stop()
169
- #change the number of pixels to 400, and check that the repetition value is 1 in short time
170
- pixel_sim_thread = cert_data_sim.DataSimThread(test=test, num_of_pixels=400, duplicates=1, delay=0, pkt_types=[0],pixels_type=GEN2)
171
- pixel_sim_thread.start()
172
- df = cert_common.data_scan(test, scan_time=30 , brg_data=(not test.internal_brg), gw_data=test.internal_brg)
173
- test = metric_checking_df(test, check, pacer_interval, df, [1,2], [0,10], 400)
174
- pixel_sim_thread.stop()
175
- return test
176
165
 
177
166
  def run(test):
178
167
  # Test prolog
179
168
  datapath_module = eval_pkt(f'ModuleDatapathV{test.active_brg.api_version}')
180
169
  test = cert_common.test_prolog(test)
181
170
  if test.rc == TEST_FAILED:
182
- return cert_common.test_epilog(test)
183
- #config GW deduplication pkts = 0 "
171
+ return cert_common.test_epilog(test, revert_brgs=True, modules=[datapath_module])
172
+ # config GW deduplication pkts = 0
184
173
  print("Configuring GW with !deduplication_pkts 0")
185
174
  cert_config.gw_action(test, f"{DEDUPLICATION_PKTS} 0")
186
175
  if test.rc == TEST_FAILED and test.exit_on_param_failure:
187
176
  return cert_common.test_epilog(test, revert_gws=True)
188
177
 
189
- STRESS_TEST_MAP = {"rep3":rep3, "rep2": rep2 ,"rep1": rep1, "rep1_adaptive_pacer":rep1_adaptive_pacer, "pixels_burst":pixels_burst}
178
+ STRESS_TEST_MAP = {"rep3": rep3, "rep2": rep2, "rep1": rep1, "rep1_adaptive_pacer": rep1_adaptive_pacer}
190
179
  num_of_pixels = 300
191
- pixel_sim_thread = cert_data_sim.DataSimThread(test=test, num_of_pixels=num_of_pixels, duplicates=1, delay=0, pkt_types=[0],pixels_type=GEN2)
180
+ pixel_sim_thread = cert_data_sim.DataSimThread(test=test,
181
+ num_of_pixels=num_of_pixels,
182
+ duplicates=1,
183
+ delay=0,
184
+ pkt_types=[0],
185
+ pixels_type=GEN2)
192
186
  pixel_sim_thread.start()
193
187
  time.sleep(30)
194
188
  for param in test.params:
195
189
  functionality_run_print(param.name)
196
- test = STRESS_TEST_MAP[param.value](test, datapath_module, num_of_pixels, pixel_sim_thread)
190
+ test = STRESS_TEST_MAP[param.value](test, param, datapath_module, num_of_pixels)
197
191
  generate_log_file(test, param.name)
198
192
  field_functionality_pass_fail_print(test, param.name)
199
193
  test.set_phase_rc(param.name, test.rc)
@@ -207,4 +201,4 @@ def run(test):
207
201
  # Re-enable unified packets deduplication
208
202
  cert_config.gw_action(test, f"{DEDUPLICATION_PKTS} 1")
209
203
 
210
- return cert_common.test_epilog(test, revert_brgs=True, revert_gws=True, modules=[datapath_module])
204
+ return cert_common.test_epilog(test, revert_brgs=True, modules=[datapath_module])
@@ -1,13 +1,17 @@
1
1
  {
2
- "name": "tx_repetition_algo_test",
3
- "module": "datapath",
2
+ "name": "Tx Repetition Algorithm",
3
+ "module": "Datapath",
4
4
  "purpose": "Test the tx repetition adjustment algorithm",
5
- "documentaion": "<TEST_DOCUMENTATION_LINK>",
5
+ "documentation": "<TEST_DOCUMENTATION_LINK>",
6
6
  "initialCondition": "Bridge configured to defaults",
7
- "procedure": ["Test prolog", "Configure bridge tx repetition to 0 to activate tx repetition adjustment algorithm, and packets de-dupliction to 0 to enable analysis", "Scan for packets and examine tx repetitions auto adjustment over time", "Test epilog and revert to defaults"],
7
+ "procedure": ["Test prolog",
8
+ "Configure bridge tx repetition to 0 to activate tx repetition adjustment algorithm, and packets de-dupliction to 0 to enable analysis",
9
+ "Scan for packets and examine tx repetitions auto adjustment over time",
10
+ "Test epilog and revert to defaults"],
8
11
  "expectedOutcome": "All configurations completed successfully and tx repetition algorithm works as expected",
9
12
  "mandatory": 0,
10
13
  "multiBridgeTest": 0,
11
14
  "gwOnlyTest": 0,
15
+ "internalBridge": 1,
12
16
  "allSupportedValues": []
13
17
  }
@@ -6,13 +6,16 @@ from brg_certificate.cert_defines import *
6
6
  from brg_certificate.wlt_types import *
7
7
  import brg_certificate.cert_common as cert_common
8
8
  import brg_certificate.cert_config as cert_config
9
- import os, statistics, math
9
+ import os
10
+ import statistics
11
+ import math
10
12
  import matplotlib.pyplot as plt
11
13
  import plotly.graph_objects as go
12
14
  from brg_certificate.cert_gw_sim import DEDUPLICATION_PKTS
13
15
 
14
16
  SCAN_TIME = 60 * 30
15
17
 
18
+
16
19
  def track_tx_rep(test, sorted_database):
17
20
  tx_reps = []
18
21
  times = []
@@ -49,6 +52,7 @@ def track_tx_rep(test, sorted_database):
49
52
 
50
53
  return test, tx_reps
51
54
 
55
+
52
56
  def tx_rep_analysis(test):
53
57
  # Clear data path
54
58
  cert_common.wait_time_n_print(CLEAR_DATA_PATH_TIMEOUT)
@@ -60,7 +64,7 @@ def tx_rep_analysis(test):
60
64
  print("Found {} unified packets".format(len(pkts)))
61
65
 
62
66
  # Count payloads
63
- pkt_payload_counter = {} # idx 0 - payload, idx 1 - payload ts
67
+ pkt_payload_counter = {} # idx 0 - payload, idx 1 - payload ts
64
68
  for p in pkts:
65
69
  cur_pkt = p[PAYLOAD]
66
70
  if cur_pkt in pkt_payload_counter:
@@ -89,6 +93,7 @@ def tx_rep_analysis(test):
89
93
  print(f"total counted tx_reps[{tx_reps}]")
90
94
  return test
91
95
 
96
+
92
97
  def run(test):
93
98
 
94
99
  test = cert_common.test_prolog(test)
@@ -1,13 +1,17 @@
1
1
  {
2
- "name": "tx_repetition_test",
3
- "module": "datapath",
2
+ "name": "Tx Repetition",
3
+ "module": "Datapath",
4
4
  "purpose": "Test tx repetition feature configuration and functionality in the bridge for different tx repetition values",
5
- "documentaion": "<TEST_DOCUMENTATION_LINK>",
5
+ "documentation": "https://community.wiliot.com/customers/s/article/Wiliot-Network-Data-Path-Module-Configuration",
6
6
  "initialCondition": "Bridge & data simulator configured to defaults",
7
- "procedure": ["Test prolog", "Tx repetition configuration", "Generate pixels packets & scan for packets in the bridge", "Compare repetitions mean per packet to the configured value", "Repeat for all given tx repetition values", "Test epilog and revert to defaults"],
7
+ "procedure": ["Test prolog",
8
+ "Disabling GW deduplication",
9
+ "For each supported value - Configure TX repetitions, Generate pixels packets & scan for packets in the bridge, Compare repetitions mean per packet to the configured value",
10
+ "Test epilog and revert to defaults"],
8
11
  "expectedOutcome": "All values configured successfully and actual repetitions found matching to the configured values",
9
12
  "mandatory": 1,
10
13
  "multiBridgeTest": 0,
11
14
  "gwOnlyTest": 0,
15
+ "internalBridge": 0,
12
16
  "allSupportedValues": [1, 2, 3, 4, 5, 6]
13
17
  }
@@ -10,7 +10,8 @@ import brg_certificate.cert_data_sim as cert_data_sim
10
10
  from brg_certificate.cert_gw_sim import DEDUPLICATION_PKTS
11
11
  import statistics
12
12
 
13
- TX_REPETITION_THRESHOLD = 0.5
13
+ TX_REPETITION_THRESHOLD = 0.5
14
+
14
15
 
15
16
  def tx_repetitions_analysis(test, repetitions):
16
17
  cert_common.wait_time_n_print(CLEAR_DATA_PATH_TIMEOUT)
@@ -20,8 +21,8 @@ def tx_repetitions_analysis(test, repetitions):
20
21
  pixel_sim_thread.start()
21
22
  mqtt_scan_wait(test, 60)
22
23
  if test.data == DATA_SIMULATION:
23
- pixel_sim_thread.stop() # stop generating pkts on data simulator
24
- cert_common.wait_time_n_print(CLEAR_DATA_PATH_TIMEOUT) # Wait for sim queue to free
24
+ pixel_sim_thread.stop() # stop generating pkts on data simulator
25
+ cert_common.wait_time_n_print(CLEAR_DATA_PATH_TIMEOUT) # Wait for sim queue to free
25
26
  pkts = cert_mqtt.get_unified_data_pkts(test)
26
27
  print(f"Found {len(pkts)} packets")
27
28
  if len(pkts) == 0:
@@ -45,10 +46,10 @@ def tx_repetitions_analysis(test, repetitions):
45
46
  test.add_reason(txt)
46
47
  return test
47
48
 
49
+
48
50
  def run(test):
49
51
 
50
52
  fields = [BRG_TX_REPETITION, BRG_PKT_FILTER, BRG_RX_CHANNEL]
51
-
52
53
  datapath_module = eval_pkt(f'ModuleDatapathV{test.active_brg.api_version}')
53
54
 
54
55
  test = cert_common.test_prolog(test)
@@ -61,7 +62,9 @@ def run(test):
61
62
  return cert_common.test_epilog(test, revert_gws=True)
62
63
 
63
64
  for param in test.params:
64
- test = cert_config.brg_configure(test, fields=fields, values=[param.value, ag.PKT_FILTER_RANDOM_FIRST_ARRIVING_PKT, ag.RX_CHANNEL_37], module=datapath_module)[0]
65
+ test = cert_config.brg_configure(test, fields=fields,
66
+ values=[param.value, ag.PKT_FILTER_RANDOM_FIRST_ARRIVING_PKT, ag.RX_CHANNEL_37],
67
+ module=datapath_module)[0]
65
68
  if test.rc == TEST_FAILED and test.exit_on_param_failure:
66
69
  break
67
70
  tx_repetitions_analysis(test, param.name)
@@ -73,7 +76,6 @@ def run(test):
73
76
  else:
74
77
  test.reset_result()
75
78
 
76
-
77
79
  # Re-enable unified packets deduplication
78
80
  cert_config.gw_action(test, f"{DEDUPLICATION_PKTS} 1")
79
81
  return cert_common.test_epilog(test, revert_brgs=True, revert_gws=True, modules=[datapath_module])
@@ -1,13 +1,14 @@
1
1
  {
2
- "name": "actions_test",
3
- "module": "edge_mgmt",
2
+ "name": "Bridge Actions",
3
+ "module": "Edge Management",
4
4
  "purpose": "Test bridge actions functionality",
5
- "documentaion": "<TEST_DOCUMENTATION_LINK>",
5
+ "documentation": "<TEST_DOCUMENTATION_LINK>",
6
6
  "initialCondition": "Bridge configured to defaults",
7
7
  "procedure": ["Test prolog", "Run all actions and test bridge's response accordingly", "Test epilog"],
8
8
  "expectedOutcome": "Bridge responded as expected to all sent actions",
9
9
  "mandatory": 1,
10
10
  "multiBridgeTest": 0,
11
11
  "gwOnlyTest": 0,
12
+ "internalBridge": 1,
12
13
  "allSupportedValues": ["ACTION_GW_HB", "ACTION_BLINK", "ACTION_SEND_HB", "ACTION_GET_BATTERY_SENSOR" , "ACTION_GET_POF_DATA", "ACTION_PL_STATUS", "ACTION_GET_MODULE", "ACTION_REBOOT", "ACTION_RESTORE_DEFAULTS"]
13
14
  }
@@ -5,8 +5,6 @@ import brg_certificate.cert_common as cert_common
5
5
  import brg_certificate.cert_config as cert_config
6
6
  import random
7
7
 
8
- WATERMARK = "watermark"
9
- PACER_INC = "pacer_inc"
10
8
  BATTERY_SENSOR_SUPPORTING_BOARD_TYPES = [ag.BOARD_TYPE_MINEW_DUAL_BAND_V0, ag.BOARD_TYPE_ERM_V0,
11
9
  ag.BOARD_TYPE_ERM_V1, ag.BOARD_TYPE_KOAMTAC_V0]
12
10
  POF_NOT_SUPPORTING_BOARD_TYPES = [ag.BOARD_TYPE_FANSTEL_WIFI_V0, ag.BOARD_TYPE_FANSTEL_LAN_V0]
@@ -165,17 +163,7 @@ def test_action_blink(test):
165
163
 
166
164
 
167
165
  def test_action_send_hb(test):
168
- datapath_module = eval_pkt(f'ModuleDatapathV{test.active_brg.api_version}')
169
- # config brg to get a non zero value in the tx_queue_watermark parameter
170
- test = cert_config.brg_configure(test, fields=[BRG_PACER_INTERVAL, BRG_TX_REPETITION], values=[1, 6], module=datapath_module)[0]
171
- if test.rc == TEST_FAILED:
172
- return cert_config.config_brg_defaults(test=test, modules=[datapath_module])[0]
173
166
 
174
- if not test.internal_brg:
175
- # sleep to let some pkts wait in queue
176
- wait = 10
177
- print(f"waiting for {wait} secs to fill up the brg queue")
178
- cert_common.wait_time_n_print(wait)
179
167
  # send action
180
168
  cert_config.send_brg_action(test, ag.ACTION_SEND_HB)
181
169
  # analysis
@@ -183,30 +171,6 @@ def test_action_send_hb(test):
183
171
  if not mgmt_pkts:
184
172
  test.add_reason("Didn't find ACTION HB pkt")
185
173
  test.rc = TEST_FAILED
186
- else:
187
- for p in mgmt_pkts:
188
- found = {WATERMARK: False, PACER_INC: False}
189
- # effective_pacer_increment should be 0 when the default value for adaptice_pacer is set (OFF)
190
- if not p[MGMT_PKT].pkt.effective_pacer_increment:
191
- found[PACER_INC] = True
192
- # Skip check for internal brg
193
- if test.internal_brg:
194
- found[WATERMARK] = True
195
- break
196
- # tx_queue_watermark should not be 0 when brg queue is under stress
197
- elif p[MGMT_PKT].pkt.tx_queue_watermark:
198
- found[WATERMARK] = True
199
- break
200
- if not found[WATERMARK]:
201
- test.rc = TEST_FAILED
202
- test.add_reason(f"tx_queue_watermark ({p[MGMT_PKT].pkt.tx_queue_watermark}) at the BRG HB pkt is zero")
203
- if not found[PACER_INC]:
204
- test.rc = TEST_FAILED
205
- test.add_reason(f"effective_pacer_increment ({p[MGMT_PKT].pkt.effective_pacer_increment}) at the BRG HB pkt is not zero")
206
- test = cert_config.config_brg_defaults(test=test, modules=[datapath_module])[0]
207
- # queue can be full so need to wait a few seconds
208
- if not test.internal_brg:
209
- cert_common.wait_time_n_print(5)
210
174
  return test
211
175
 
212
176
 
@@ -228,7 +192,7 @@ def test_action_get_battery_sensor(test):
228
192
  scan_time = ACTION_SI_PKT_TIMEOUT
229
193
  found_packet = False
230
194
  while ((datetime.datetime.now() - start_time).seconds <= scan_time):
231
- custom_pkts = cert_mqtt.get_all_custom_pkts(test.mqttc, test)
195
+ custom_pkts = cert_mqtt.get_all_custom_pkts(test)
232
196
  for p in custom_pkts:
233
197
  if p[SENSOR_UUID] == f"{ag.SENSOR_SERVICE_ID_BATTERY_SENSOR:06X}":
234
198
  print_pkt(p)
@@ -259,7 +223,7 @@ def test_action_get_pof_data(test):
259
223
  scan_time = ACTION_SI_PKT_TIMEOUT
260
224
  found_packet = False
261
225
  while ((datetime.datetime.now() - start_time).seconds <= scan_time):
262
- custom_pkts = cert_mqtt.get_all_custom_pkts(test.mqttc, test)
226
+ custom_pkts = cert_mqtt.get_all_custom_pkts(test)
263
227
  for p in custom_pkts:
264
228
  if p[SENSOR_UUID] == f"{ag.SENSOR_SERVICE_ID_POF_DATA:06X}":
265
229
  print_pkt(p)
@@ -1,13 +1,20 @@
1
1
  {
2
- "name": "brg2brg_ota_test",
3
- "module": "edge_mgmt",
4
- "purpose": "TODO",
5
- "documentaion": "<TEST_DOCUMENTATION_LINK>",
6
- "initialCondition": "TODO",
7
- "procedure": ["Test prolog", "TODO", "Test epilog"],
8
- "expectedOutcome": "TODO",
2
+ "name": "Bridge to Bridge OTA BLE5",
3
+ "module": "Edge Management",
4
+ "purpose": "Verify BRG2BRG OTA firmware/bootloader version upgrade functionality using BLE_5.0.",
5
+ "documentation": "<TEST_DOCUMENTATION_LINK>",
6
+ "initialCondition": "1 GW and 2 BRG's (source, destination) from the same type connected to the GW - the source BRG posses the newer firmware/bootloader version, and the destination BRG posses older firmware/bootloader version.",
7
+ "procedure": ["Test prolog",
8
+ "Verify initial conditions - same board type, different firmware/bootloader versions",
9
+ "Determine the source & destination BRG according to version",
10
+ "Configure destination BRG rx channel to BLE_5.0 channel (channel 10)",
11
+ "Send brg2brg ota message to the source BRG - initiate brg2brg ota",
12
+ "Verify destination BRG firmware/bootloader version upgrade through module IF packet",
13
+ "Test epilog"],
14
+ "expectedOutcome": "Destination BRG firmware/bootloader version is upgraded to the source BRG firmware/bootloader version.",
9
15
  "mandatory": 0,
10
- "multiBridgeTest": 0,
16
+ "multiBridgeTest": 1,
11
17
  "gwOnlyTest": 0,
18
+ "internalBridge": 0,
12
19
  "allSupportedValues": ["BOOTLOADER", "APP"]
13
20
  }
@@ -1,13 +1,19 @@
1
1
  {
2
- "name": "brg2brg_ota_test",
3
- "module": "edge_mgmt",
4
- "purpose": "TODO",
5
- "documentaion": "<TEST_DOCUMENTATION_LINK>",
6
- "initialCondition": "TODO",
7
- "procedure": ["Test prolog", "TODO", "Test epilog"],
8
- "expectedOutcome": "TODO",
2
+ "name": "Bridge to Bridge OTA",
3
+ "module": "Edge Management",
4
+ "purpose": "Verify BRG2BRG OTA firmware/bootloader version upgrade functionality",
5
+ "documentation": "<TEST_DOCUMENTATION_LINK>",
6
+ "initialCondition": "1 GW and 2 BRG's (source, destination) from the same type connected to the GW - the source BRG posses the newer firmware/bootloader version, and the destination BRG posses older firmware/bootloader version.",
7
+ "procedure": ["Test prolog",
8
+ "Verify initial conditions - same board type, different firmware/bootloader versions",
9
+ "Determine the source & destination BRG according to version",
10
+ "Send brg2brg ota message to the source BRG - initiate brg2brg ota",
11
+ "Verify destination BRG firmware/bootloader version upgrade through module IF packet",
12
+ "Test epilog"],
13
+ "expectedOutcome": "Destination BRG firmware/bootloader version is upgraded to the source BRG firmware/bootloader version.",
9
14
  "mandatory": 0,
10
- "multiBridgeTest": 0,
15
+ "multiBridgeTest": 1,
11
16
  "gwOnlyTest": 0,
17
+ "internalBridge": 0,
12
18
  "allSupportedValues": ["BOOTLOADER", "APP"]
13
19
  }
@@ -1,13 +1,17 @@
1
1
  {
2
- "name": "leds_test",
3
- "module": "edge_mgmt",
4
- "purpose": "TODO",
5
- "documentaion": "<TEST_DOCUMENTATION_LINK>",
6
- "initialCondition": "TODO",
7
- "procedure": ["Test prolog", "TODO", "Test epilog"],
8
- "expectedOutcome": "TODO",
2
+ "name": "LEDs Behaviour",
3
+ "module": "Edge Management",
4
+ "purpose": "Test the behavior and indications of LEDs during different operational states.",
5
+ "documentation": "<TEST_DOCUMENTATION_LINK>",
6
+ "initialCondition": "Bridge configured to defaults",
7
+ "procedure": ["Test prolog",
8
+ "pre-stage to verify connection to a GW and associate LED color with capability",
9
+ "Test LED behavior during different operational states and behaviors - Advertising, Energizing, Echoing, KEEP_ALIVE, blink action & power management",
10
+ "Test epilog"],
11
+ "expectedOutcome": "LEDs behave as expected during all operational states and behaviors",
9
12
  "mandatory": 0,
10
13
  "multiBridgeTest": 0,
11
14
  "gwOnlyTest": 0,
15
+ "internalBridge": 1,
12
16
  "allSupportedValues": []
13
17
  }