|
6 | 6 |
|
7 | 7 | ### Dynamic analysis
|
8 | 8 |
|
| 9 | +Dinamička analiza podrazumeva ispitivanje programa tokom njegovog izvršavanja. Za razliku od statičke analize koja radi sa izvornim kodom, dinamička analiza nam omogućava da: |
| 10 | + |
| 11 | +* Proverimo stvarno ponašanje sistema u različitim scenarijima |
| 12 | +* Identifikujemo greške koje se manifestuju samo tokom izvršavanja |
| 13 | +* Izmerimo pokrivenost koda testovima |
| 14 | + |
| 15 | +U kontekstu Zephyr projekta, fokusiramo se na jedinično testiranje modula za Bluetooth Channel Sounding funkcionalnost. |
| 16 | + |
9 | 17 | #### Unit tests
|
10 | 18 |
|
11 | 19 | Jedinicno testiranje je jedan od nacina dinamickog testiranja koji se fokusira na ispitivanje ispravnosti najjednostavnijih celina koda. Kad govorimo o testiranju ispravnosti, bitno je napomenuti da se testiranjem mogu pronaci greske u implementaciji, ali uspesno izvrsavanje testova ne garantuje ispravnost jedinice u celini. Naravno, cilj je da imamo sto vecu moc otkrivanja gresaka, i jedan od alata koji nam u tome moze pomoci jeste i pracenje pokrivenosti koda testovima. Alat za pokrivenost koda bice podrobnije opisan u narednim odeljcima. Jedna od razlika u odnosu na integracione testove u kontekstu ZephyrOS projekta je cinjenica da se za testiranje jedne funkcije ne ukljucuje citav projekat, odnosno samo jedan modul se kompajlira sto znacajno ubrzava proces testiranja.
|
@@ -189,84 +197,7 @@ Dakle, ima smisla udubiti se u kod i razmisljati na drugi nacin, odnosno ne samo
|
189 | 197 |
|
190 | 198 | #### Pisanje testova - otkrivanje gresaka
|
191 | 199 |
|
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 |
| - |
194 |
| -### Testovi za `bt_le_cs_security_enable` |
195 |
| - |
196 |
| -1. **`test_sec_enable_hci_cmd_fail`** |
197 |
| - * Provera ponašanja kada `bt_hci_cmd_create` ne uspe (vrati NULL) |
198 |
| - * Očekivano: Vraća `-ENOBUFS` |
199 |
| - * ✅ **NAPOMENA**: Test je prolazio i pre izmena |
200 |
| - |
201 |
| -2. **`test_sec_enable_hci_cmd_fail_null_conn`** |
202 |
| - * Provera ponašanja sa NULL parametrom za konekciju |
203 |
| - * Očekivano: Vraća `-ENOBUFS` |
204 |
| - * ✅ **NAPOMENA**: Test je prolazio i pre izmena |
205 |
| - |
206 |
| -3. **`test_sec_enable_cmd_send_fail`** |
207 |
| - * Provera ponašanja kada `bt_hci_cmd_send_sync` ne uspe |
208 |
| - * Očekivano: Vraća grešku sa sinhronizacije |
209 |
| - * ✅ **NAPOMENA**: Test je prolazio i pre izmena |
210 |
| - |
211 |
| -### Testovi za `bt_hci_le_cs_read_remote_supported_capabilities_complete` |
212 |
| - |
213 |
| -4. **`test_read_remote_supported_capabilities_complete_null_buf`** |
214 |
| - * Provera ponašanja sa NULL baferom |
215 |
| - * Očekivano: Prekid bez operacija |
216 |
| - * ✅ **NAPOMENA**: Test je prolazio i pre izmena |
217 |
| - |
218 |
| -5. **`test_read_remote_supported_capabilities_complete_invalid_buf_len`** |
219 |
| - * Provera ponašanja sa nevalidnom dužinom bafera |
220 |
| - * Očekivano: Prekid izvršavanja |
221 |
| - * :warning: **NAPOMENA**: Test nije prolazio pre izmena (nedostajala je provera dužine) |
222 |
| - |
223 |
| -6. **`test_read_remote_supported_capabilities_complete_evt_status_fail`** |
224 |
| - * Provera ponašanja kada status događaja pokazuje grešku |
225 |
| - * Očekivano: Prekid izvršavanja |
226 |
| - * ✅ **NAPOMENA**: Test je prolazio i pre izmena |
227 |
| - |
228 |
| -7. **`test_read_remote_supported_capabilities_complete_conn_lookup_handle_fail`** |
229 |
| - * Provera ponašanja kada pretraga konekcije ne uspe |
230 |
| - * Očekivano: Prekid izvršavanja |
231 |
| - * :warning: **NAPOMENA**: Test nije prolazio pre izmena (nedostajala je provera za NULL) |
232 |
| - |
233 |
| -### Testovi za `bt_le_cs_read_remote_fae_table` |
234 |
| - |
235 |
| -8. **`test_read_remote_fae_table_hci_cmd_fail`** |
236 |
| - * Provera ponašanja kada kreiranje HCI komande ne uspe |
237 |
| - * Očekivano: Vraća `-ENOBUFS` |
238 |
| - * ✅ **NAPOMENA**: Test je prolazio i pre izmena |
239 |
| - |
240 |
| -9. **`test_read_remote_fae_table_null_conn`** |
241 |
| - * Provera ponašanja sa NULL parametrom za konekciju |
242 |
| - * Očekivano: Vraća `-EFAULT` |
243 |
| - * ✅ **NAPOMENA**: Test je prolazio i pre izmena |
244 |
| - |
245 |
| -10. **`test_read_remote_fae_table_send_sync_failed`** |
246 |
| - * Provera ponašanja kada sinhronizacija komande ne uspe |
247 |
| - * Očekivano: Vraća grešku sa sinhronizacije |
248 |
| - * ✅ **NAPOMENA**: Test je prolazio i pre izmena |
249 |
| - |
250 |
| -### Testovi za `bt_hci_le_cs_read_remote_fae_table_complete` |
251 |
| - |
252 |
| -11. **`test_bt_hci_le_cs_read_remote_fae_table_complete_invalid_buf_size_fail`** |
253 |
| - * Provera ponašanja sa nevalidnom veličinom bafera |
254 |
| - * Očekivano: Prekid izvršavanja |
255 |
| - * :warning: **NAPOMENA**: Test nije prolazio pre izmena (nedostajala provera dužine) |
256 |
| - |
257 |
| -12. **`test_bt_hci_le_cs_read_remote_fae_table_complete_evt_status_fail`** |
258 |
| - * Provera ponašanja kada status događaja pokazuje grešku |
259 |
| - * Očekivano: Prekid izvršavanja |
260 |
| - * ✅ **NAPOMENA**: Test je prolazio i pre izmena |
261 |
| - |
262 |
| -13. **`test_bt_hci_le_cs_read_remote_fae_table_complete_conn_lookup_fail`** |
263 |
| - * Provera ponašanja kada pretraga konekcije ne uspe |
264 |
| - * Očekivano: Prekid izvršavanja |
265 |
| - * :warning: **NAPOMENA**: Test nije prolazio pre izmena (nedostajala provera za NULL) |
266 |
| - |
267 |
| -_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. |
268 |
| - |
269 |
| -Navedeni testovi su implementirani u novom izvornom fajlu `error_handling.c`. |
| 200 | +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`. Kompletna lista testova moze se videti u sekciji [implementirani testovi](#implementirani-testovi) |
270 | 201 |
|
271 | 202 | Pokrenimo najpre skriptu sa opcijom no-coverage posto ocekujemo da ovog puta nece svi testovi proci:
|
272 | 203 |
|
@@ -394,6 +325,86 @@ Vidimo da nije svuda rigorozno proveravano da li se prosledjuju ispravne vrednos
|
394 | 325 |
|
395 | 326 | 
|
396 | 327 |
|
| 328 | +## Implementirani testovi |
| 329 | +
|
| 330 | +### Testovi za `bt_le_cs_security_enable` |
| 331 | +
|
| 332 | +1. **`test_sec_enable_hci_cmd_fail`** |
| 333 | + * Provera ponašanja kada `bt_hci_cmd_create` ne uspe (vrati NULL) |
| 334 | + * Očekivano: Vraća `-ENOBUFS` |
| 335 | + * ✅ **NAPOMENA**: Test je prolazio i pre izmena |
| 336 | +
|
| 337 | +2. **`test_sec_enable_hci_cmd_fail_null_conn`** |
| 338 | + * Provera ponašanja sa NULL parametrom za konekciju |
| 339 | + * Očekivano: Vraća `-ENOBUFS` |
| 340 | + * ✅ **NAPOMENA**: Test je prolazio i pre izmena |
| 341 | +
|
| 342 | +3. **`test_sec_enable_cmd_send_fail`** |
| 343 | + * Provera ponašanja kada `bt_hci_cmd_send_sync` ne uspe |
| 344 | + * Očekivano: Vraća grešku sa sinhronizacije |
| 345 | + * ✅ **NAPOMENA**: Test je prolazio i pre izmena |
| 346 | +
|
| 347 | +### Testovi za `bt_hci_le_cs_read_remote_supported_capabilities_complete` |
| 348 | +
|
| 349 | +4. **`test_read_remote_supported_capabilities_complete_null_buf`** |
| 350 | + * Provera ponašanja sa NULL baferom |
| 351 | + * Očekivano: Prekid bez operacija |
| 352 | + * ✅ **NAPOMENA**: Test je prolazio i pre izmena |
| 353 | +
|
| 354 | +5. **`test_read_remote_supported_capabilities_complete_invalid_buf_len`** |
| 355 | + * Provera ponašanja sa nevalidnom dužinom bafera |
| 356 | + * Očekivano: Prekid izvršavanja |
| 357 | + * :warning: **NAPOMENA**: Test nije prolazio pre izmena (nedostajala je provera dužine) |
| 358 | +
|
| 359 | +6. **`test_read_remote_supported_capabilities_complete_evt_status_fail`** |
| 360 | + * Provera ponašanja kada status događaja pokazuje grešku |
| 361 | + * Očekivano: Prekid izvršavanja |
| 362 | + * ✅ **NAPOMENA**: Test je prolazio i pre izmena |
| 363 | +
|
| 364 | +7. **`test_read_remote_supported_capabilities_complete_conn_lookup_handle_fail`** |
| 365 | + * Provera ponašanja kada pretraga konekcije ne uspe |
| 366 | + * Očekivano: Prekid izvršavanja |
| 367 | + * :warning: **NAPOMENA**: Test nije prolazio pre izmena (nedostajala je provera za NULL) |
| 368 | +
|
| 369 | +### Testovi za `bt_le_cs_read_remote_fae_table` |
| 370 | +
|
| 371 | +8. **`test_read_remote_fae_table_hci_cmd_fail`** |
| 372 | + * Provera ponašanja kada kreiranje HCI komande ne uspe |
| 373 | + * Očekivano: Vraća `-ENOBUFS` |
| 374 | + * ✅ **NAPOMENA**: Test je prolazio i pre izmena |
| 375 | +
|
| 376 | +9. **`test_read_remote_fae_table_null_conn`** |
| 377 | + * Provera ponašanja sa NULL parametrom za konekciju |
| 378 | + * Očekivano: Vraća `-EFAULT` |
| 379 | + * ✅ **NAPOMENA**: Test je prolazio i pre izmena |
| 380 | +
|
| 381 | +10. **`test_read_remote_fae_table_send_sync_failed`** |
| 382 | + * Provera ponašanja kada sinhronizacija komande ne uspe |
| 383 | + * Očekivano: Vraća grešku sa sinhronizacije |
| 384 | + * ✅ **NAPOMENA**: Test je prolazio i pre izmena |
| 385 | +
|
| 386 | +### Testovi za `bt_hci_le_cs_read_remote_fae_table_complete` |
| 387 | +
|
| 388 | +11. **`test_bt_hci_le_cs_read_remote_fae_table_complete_invalid_buf_size_fail`** |
| 389 | + * Provera ponašanja sa nevalidnom veličinom bafera |
| 390 | + * Očekivano: Prekid izvršavanja |
| 391 | + * :warning: **NAPOMENA**: Test nije prolazio pre izmena (nedostajala provera dužine) |
| 392 | +
|
| 393 | +12. **`test_bt_hci_le_cs_read_remote_fae_table_complete_evt_status_fail`** |
| 394 | + * Provera ponašanja kada status događaja pokazuje grešku |
| 395 | + * Očekivano: Prekid izvršavanja |
| 396 | + * ✅ **NAPOMENA**: Test je prolazio i pre izmena |
| 397 | +
|
| 398 | +13. **`test_bt_hci_le_cs_read_remote_fae_table_complete_conn_lookup_fail`** |
| 399 | + * Provera ponašanja kada pretraga konekcije ne uspe |
| 400 | + * Očekivano: Prekid izvršavanja |
| 401 | + * :warning: **NAPOMENA**: Test nije prolazio pre izmena (nedostajala provera za NULL) |
| 402 | +
|
| 403 | +_Napomena_: kod funkcija koje se zavrsavaju ranije ocekujemo da neke podfunkcije nikada nece biti pozvane. Ovaj uslov eksplicitno ukljucujemo u ocekivanja testa pomocu `zassert_` funkcija. |
| 404 | +
|
| 405 | +Navedeni testovi su implementirani u novom izvornom fajlu `error_handling.c`. |
| 406 | +
|
| 407 | +
|
397 | 408 | #### Integration tests
|
398 | 409 |
|
399 | 410 | Limitations
|
|
0 commit comments