manifest.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #include <furi.c>
  2. #include "../minunit.h"
  3. #include <update_util/resources/manifest.h>
  4. #define TAG "Manifest"
  5. MU_TEST(manifest_type_test) {
  6. mu_assert(ResourceManifestEntryTypeUnknown == 0, "ResourceManifestEntryTypeUnknown != 0\r\n");
  7. mu_assert(ResourceManifestEntryTypeVersion == 1, "ResourceManifestEntryTypeVersion != 1\r\n");
  8. mu_assert(
  9. ResourceManifestEntryTypeTimestamp == 2, "ResourceManifestEntryTypeTimestamp != 2\r\n");
  10. mu_assert(
  11. ResourceManifestEntryTypeDirectory == 3, "ResourceManifestEntryTypeDirectory != 3\r\n");
  12. mu_assert(ResourceManifestEntryTypeFile == 4, "ResourceManifestEntryTypeFile != 4\r\n");
  13. }
  14. MU_TEST(manifest_iteration_test) {
  15. bool result = true;
  16. size_t counters[5] = {0};
  17. Storage* storage = furi_record_open(RECORD_STORAGE);
  18. ResourceManifestReader* manifest_reader = resource_manifest_reader_alloc(storage);
  19. do {
  20. // Open manifest file
  21. if(!resource_manifest_reader_open(manifest_reader, EXT_PATH("unit_tests/Manifest"))) {
  22. result = false;
  23. break;
  24. }
  25. // Iterate forward
  26. ResourceManifestEntry* entry_ptr = NULL;
  27. while((entry_ptr = resource_manifest_reader_next(manifest_reader))) {
  28. FURI_LOG_D(TAG, "F:%u:%s", entry_ptr->type, furi_string_get_cstr(entry_ptr->name));
  29. if(entry_ptr->type > 4) {
  30. mu_fail("entry_ptr->type > 4\r\n");
  31. result = false;
  32. break;
  33. }
  34. counters[entry_ptr->type]++;
  35. }
  36. if(!result) break;
  37. // Iterate backward
  38. while((entry_ptr = resource_manifest_reader_previous(manifest_reader))) {
  39. FURI_LOG_D(TAG, "B:%u:%s", entry_ptr->type, furi_string_get_cstr(entry_ptr->name));
  40. if(entry_ptr->type > 4) {
  41. mu_fail("entry_ptr->type > 4\r\n");
  42. result = false;
  43. break;
  44. }
  45. counters[entry_ptr->type]--;
  46. }
  47. } while(false);
  48. resource_manifest_reader_free(manifest_reader);
  49. furi_record_close(RECORD_STORAGE);
  50. mu_assert(counters[ResourceManifestEntryTypeUnknown] == 0, "Unknown counter != 0\r\n");
  51. mu_assert(counters[ResourceManifestEntryTypeVersion] == 0, "Version counter != 0\r\n");
  52. mu_assert(counters[ResourceManifestEntryTypeTimestamp] == 0, "Timestamp counter != 0\r\n");
  53. mu_assert(counters[ResourceManifestEntryTypeDirectory] == 0, "Directory counter != 0\r\n");
  54. mu_assert(counters[ResourceManifestEntryTypeFile] == 0, "File counter != 0\r\n");
  55. mu_assert(result, "Manifest forward iterate failed\r\n");
  56. }
  57. MU_TEST_SUITE(manifest_suite) {
  58. MU_RUN_TEST(manifest_type_test);
  59. MU_RUN_TEST(manifest_iteration_test);
  60. }
  61. int run_minunit_test_manifest() {
  62. MU_RUN_SUITE(manifest_suite);
  63. return MU_EXIT_CODE;
  64. }