You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: ProjectAnalysisReport.md
+132-6
Original file line number
Diff line number
Diff line change
@@ -191,14 +191,140 @@ Dakle, ima smisla udubiti se u kod i razmisljati na drugi nacin, odnosno ne samo
191
191
192
192
Kao sto smo vec spomenuli, mozemo se fokusirati na nekoliko funkcija za koje smo vec napisali testove. Za ovo cemo napraviti novi folder channel_sounding_behavior u koji cemo smestiti spomenuta prosirenja. Pogledajmo prvo `bt_le_cs_security_enable` funkciju i njeno ocekivano ponasanje. Funkcija pravi bafer HCI komande, popunjava ga sa pokazivacem na konekciju i salje komandu sinhrono. Vec smo pokrili tzv. happy path, odnosno slucaj u kome je sve kao sto ocekujemo. Uz to, testirali smo i slucaj u kome `bt_hci_cmd_create` funkcija vrati nepravilan bafer (NULL). Slucajevi koje bismo jos mogli pokriti jesu kada se kao pokazivac na konekciju prosledi NULL vrednost kao i slucaj kada `bt_hci_cmd_send_sync` funkcija pukne. Ova dva slucaja su pokrivena testovima `test_sec_enable_hci_cmd_fail_null_conn` i `test_sec_enable_cmd_send_fail`. Na slican nacun su dodati i sledeci testovi:
193
193
194
-
TODO(avra): pobrojati testove i dodati kratak opis
195
-
*
196
-
*
197
-
*
194
+
TODO(avra): pobrojati testove i dodati kratak opis (mozda tabela)
195
+
*`test_read_remote_supported_capabilities_complete_null_buf` - Provera ponasanja funkcije sa prosledjenim nevalidnim baferom (Ocekivano ponasanje - vraca gresku)
196
+
*`test_read_remote_supported_capabilities_complete_invalid_buf_len` - Provera ponasanja funkcije sa pogresnom velicinom ulaznog bafera (Ocekivano ponasanje - funkcija se zavrsava ranim izlaskom)
197
+
*`test_read_remote_supported_capabilities_complete_evt_status_fail` - Provera ponasanja funkcije kada `bt_conn_lookup_handle` vrati dogadjaj sa statusom greske (Ocekivano ponasanje - funkcija se zavrsava ranim izlaskom)
198
+
*`test_read_remote_supported_capabilities_complete_conn_lookup_handle_fail` - Provera ponasanja funkcije kada `bt_conn_lookup_handle` vrati NULL pokazivac (Ocekivano ponasanje - funkcija se zavrsava ranim izlaskom)
199
+
*`test_read_remote_fae_table_hci_cmd_fail` - Provera ponasanja funkcije kada
200
+
*`test_read_remote_fae_table_send_sync_failed` -
198
201
199
-
Pokrenimo najpre skriptu sa opcijom no-coverage posto ocekujemo da ovog puta nece svi testovi proci.
200
202
201
-
Kao sto je i bilo ocekivano vidimo da je dosta testova palo (izvestaj)
203
+
_Napomena_: kod funkcija koje se zavrsavaju ranije ocekujemo da neke podfunkcije nikada nece biti pozvane. Ovaj uslov eksplicitno ukljucujemo u ocekivanja testa pomocu `zasser_` funkcija.
204
+
205
+
Navedeni testovi su implementirani u novom izvornom fajlu `error_handling.c`.
206
+
207
+
Pokrenimo najpre skriptu sa opcijom no-coverage posto ocekujemo da ovog puta nece svi testovi proci:
Vec pri pokretanju skripte, vidimo da se javlja segmentation fault:
214
+
215
+
```bash
216
+
...
217
+
INFO - 1/1 unit_testing/unit_testing tests/bluetooth/host/cs/channel_sounding_behavior/bluetooth.host.cs.channel_sounding_behavior FAILED Failed (rc=-11) (unit 0.334s)
218
+
ERROR - see: path_to_test_results/build.log
219
+
...
220
+
INFO - The following issues were found (showing the top 10 items):
221
+
INFO - 1) tests/bluetooth/host/cs/channel_sounding_behavior/bluetooth.host.cs.channel_sounding_behavior on unit_testing/unit_testing failed (Failed (rc=-11))
222
+
...
223
+
```
224
+
225
+
Mozemo pokrenuti `gdb` debager sa putanjom `path_to_test_results` koju dobijemo pokretanjem skripte i potraziti razlog za ovo ponasanje:
226
+
227
+
```bash
228
+
gdb path_to_test_results/testbinary
229
+
...
230
+
(gdb) run
231
+
Starting program: path_to_test_results/testbinary
232
+
[Thread debugging using libthread_db enabled]
233
+
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Program received signal SIGSEGV, Segmentation fault.
250
+
0x56559e2e in bt_hci_le_cs_read_remote_supported_capabilities_complete (buf=0x0) at /home/aleksandar/2023_Analysis_zephyr/zephyr/subsys/bluetooth/host/cs.c:300
251
+
300 if (buf->len < sizeof(*evt)) {
252
+
```
253
+
254
+
Jasno je da se segmentation fault javlja zbog pristupa `NULL` memoriji u navedenom mestu u source kodu. Pre nego sto pristupimo popravci ovog propusta, napisacemo druge testove koji testiraju ponasanje funkcija u radu sa greskama, odnosno test`test_read_remote_supported_capabilities_complete_null_buf` cemo zakomentarisati i ponovo pokrenuti skriptu. Isto cemo uraditi i za test`test_read_remote_fae_table_null_conn`. Rezultat pokretanja dat je ispod:
Assertion failed at /home/aleksandar/2023_Analysis_zephyr/zephyr/tests/bluetooth/host/cs/channel_sounding_behavior/src/error_handling.c:60: channel_sounding_tests_error_handling_test_sec_enable_hci_cmd_fail_null_conn: bt_hci_cmd_create_fake.call_count not equal to 0
299
+
300
+
at test function
301
+
FAIL - test_sec_enable_hci_cmd_fail_null_conn in 0.000 seconds
Ovog puta nismo dobili veliki broj palih testova, ali dobijamo indikaciju da mozda treba obratiti paznju na baratanje neispravnim ulaznim vrednostima u funkcije.
202
328
203
329
Vidimo da nije svuda rigorozno proveravano da li se prosledjuju ispravne vrednosti, tako da cemo tu proveru dodati u izvorni kod i ponovo pokrenuti testove. Izmene koje su dodate ticu se uglavnom provere ulaznih argumenata funkcija (TODO dodati ako je jos nesto nadjeno) i mogu se pogledati u <patch_name.patch>. Nakon primene izmena, ponovo je pokrenuta skripta i vidimo da sada svi testovi prolaze. Mozemo nastaviti sa generisanjem izvestaja pokrivenosti za ispravljene testove. Krajnji rezultati su prikazani na slici ispod:
0 commit comments