bt_test.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. #include <furi.h>
  2. #include <furi_hal.h>
  3. #include "../minunit.h"
  4. #include <bt/bt_service/bt_keys_storage.h>
  5. #include <storage/storage.h>
  6. #define BT_TEST_KEY_STORAGE_FILE_PATH EXT_PATH("unit_tests/bt_test.keys")
  7. #define BT_TEST_NVM_RAM_BUFF_SIZE (507 * 4) // The same as in ble NVM storage
  8. typedef struct {
  9. Storage* storage;
  10. BtKeysStorage* bt_keys_storage;
  11. uint8_t* nvm_ram_buff_dut;
  12. uint8_t* nvm_ram_buff_ref;
  13. } BtTest;
  14. BtTest* bt_test = NULL;
  15. void bt_test_alloc() {
  16. bt_test = malloc(sizeof(BtTest));
  17. bt_test->storage = furi_record_open(RECORD_STORAGE);
  18. bt_test->nvm_ram_buff_dut = malloc(BT_TEST_NVM_RAM_BUFF_SIZE);
  19. bt_test->nvm_ram_buff_ref = malloc(BT_TEST_NVM_RAM_BUFF_SIZE);
  20. bt_test->bt_keys_storage = bt_keys_storage_alloc(BT_TEST_KEY_STORAGE_FILE_PATH);
  21. bt_keys_storage_set_ram_params(
  22. bt_test->bt_keys_storage, bt_test->nvm_ram_buff_dut, BT_TEST_NVM_RAM_BUFF_SIZE);
  23. }
  24. void bt_test_free() {
  25. furi_assert(bt_test);
  26. free(bt_test->nvm_ram_buff_ref);
  27. free(bt_test->nvm_ram_buff_dut);
  28. bt_keys_storage_free(bt_test->bt_keys_storage);
  29. furi_record_close(RECORD_STORAGE);
  30. free(bt_test);
  31. bt_test = NULL;
  32. }
  33. static void bt_test_keys_storage_profile() {
  34. // Emulate nvm change on initial connection
  35. const int nvm_change_size_on_connection = 88;
  36. for(size_t i = 0; i < nvm_change_size_on_connection; i++) {
  37. bt_test->nvm_ram_buff_dut[i] = rand();
  38. bt_test->nvm_ram_buff_ref[i] = bt_test->nvm_ram_buff_dut[i];
  39. }
  40. // Emulate update storage on initial connect
  41. mu_assert(
  42. bt_keys_storage_update(
  43. bt_test->bt_keys_storage, bt_test->nvm_ram_buff_dut, nvm_change_size_on_connection),
  44. "Failed to update key storage on initial connect");
  45. memset(bt_test->nvm_ram_buff_dut, 0, BT_TEST_NVM_RAM_BUFF_SIZE);
  46. mu_assert(bt_keys_storage_load(bt_test->bt_keys_storage), "Failed to load NVM");
  47. mu_assert(
  48. memcmp(
  49. bt_test->nvm_ram_buff_ref, bt_test->nvm_ram_buff_dut, nvm_change_size_on_connection) ==
  50. 0,
  51. "Wrong buffer loaded");
  52. const int nvm_disconnect_update_offset = 84;
  53. const int nvm_disconnect_update_size = 324;
  54. const int nvm_total_size = nvm_change_size_on_connection -
  55. (nvm_change_size_on_connection - nvm_disconnect_update_offset) +
  56. nvm_disconnect_update_size;
  57. // Emulate update storage on initial disconnect
  58. for(size_t i = nvm_disconnect_update_offset;
  59. i < nvm_disconnect_update_offset + nvm_disconnect_update_size;
  60. i++) {
  61. bt_test->nvm_ram_buff_dut[i] = rand();
  62. bt_test->nvm_ram_buff_ref[i] = bt_test->nvm_ram_buff_dut[i];
  63. }
  64. mu_assert(
  65. bt_keys_storage_update(
  66. bt_test->bt_keys_storage,
  67. &bt_test->nvm_ram_buff_dut[nvm_disconnect_update_offset],
  68. nvm_disconnect_update_size),
  69. "Failed to update key storage on initial disconnect");
  70. memset(bt_test->nvm_ram_buff_dut, 0, BT_TEST_NVM_RAM_BUFF_SIZE);
  71. mu_assert(bt_keys_storage_load(bt_test->bt_keys_storage), "Failed to load NVM");
  72. mu_assert(
  73. memcmp(bt_test->nvm_ram_buff_ref, bt_test->nvm_ram_buff_dut, nvm_total_size) == 0,
  74. "Wrong buffer loaded");
  75. }
  76. static void bt_test_keys_remove_test_file() {
  77. mu_assert(
  78. storage_simply_remove(bt_test->storage, BT_TEST_KEY_STORAGE_FILE_PATH),
  79. "Can't remove test file");
  80. }
  81. MU_TEST(bt_test_keys_storage_serial_profile) {
  82. furi_assert(bt_test);
  83. bt_test_keys_remove_test_file();
  84. bt_test_keys_storage_profile();
  85. bt_test_keys_remove_test_file();
  86. }
  87. MU_TEST_SUITE(test_bt) {
  88. bt_test_alloc();
  89. MU_RUN_TEST(bt_test_keys_storage_serial_profile);
  90. bt_test_free();
  91. }
  92. int run_minunit_test_bt() {
  93. MU_RUN_SUITE(test_bt);
  94. return MU_EXIT_CODE;
  95. }