026-file_info.cpp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. // SPDX-License-Identifier: GPL-3.0-or-later
  2. // SPDX-FileCopyrightText: 2025 Ivan Baidakou
  3. #include <catch2/catch_all.hpp>
  4. #include "test-utils.h"
  5. #include "model/cluster.h"
  6. #include "model/file_info.h"
  7. #include "model/misc/sequencer.h"
  8. using namespace syncspirit;
  9. using namespace syncspirit::model;
  10. using Catch::Matchers::Matches;
  11. TEST_CASE("file-info", "[model]") {
  12. auto sequencer = make_sequencer(4);
  13. auto my_id = device_id_t::from_string("KHQNO2S-5QSILRK-YX4JZZ4-7L77APM-QNVGZJT-EKU7IFI-PNEPBMY-4MXFMQD").value();
  14. auto my_device = device_t::create(my_id, "my-device").value();
  15. db::Folder db_folder;
  16. db_folder.set_id("1234-5678");
  17. db_folder.set_label("my-label");
  18. db_folder.set_path("/my/path");
  19. auto folder = folder_t::create(sequencer->next_uuid(), db_folder).value();
  20. db::FolderInfo db_folder_info;
  21. db_folder_info.set_index_id(2);
  22. db_folder_info.set_max_sequence(3);
  23. auto folder_info = folder_info_t::create(sequencer->next_uuid(), db_folder_info, my_device, folder).value();
  24. proto::FileInfo pr_fi;
  25. pr_fi.set_name("a/b.txt");
  26. pr_fi.set_size(55ul);
  27. pr_fi.set_block_size(5ul);
  28. pr_fi.set_sequence(6);
  29. pr_fi.set_modified_s(1734680712);
  30. auto &c = *pr_fi.mutable_version()->add_counters();
  31. c.set_id(my_device->device_id().get_uint());
  32. c.set_value(0);
  33. auto fi = file_info_t::create(sequencer->next_uuid(), pr_fi, folder_info).value();
  34. auto map = file_infos_map_t{};
  35. map.put(fi);
  36. CHECK(map.by_name(pr_fi.name()) == fi);
  37. CHECK(map.by_sequence(pr_fi.sequence()) == fi);
  38. auto [begin, end] = map.range(0, 10);
  39. CHECK(std::distance(begin, end) == 1);
  40. CHECK(begin->item == fi);
  41. map.remove(fi);
  42. fi->set_sequence(10);
  43. map.put(fi);
  44. CHECK(map.by_name(pr_fi.name()) == fi);
  45. CHECK(map.by_sequence(10) == fi);
  46. CHECK(!map.by_sequence(pr_fi.sequence()));
  47. auto conflict_name = fi->make_conflicting_name();
  48. REQUIRE_THAT(conflict_name, Matches("a.b.sync-conflict-202412(\\d){2}-(\\d){6}-KHQNO2S.txt"));
  49. }