055-model-cluster.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #include "catch.hpp"
  2. #include "test-utils.h"
  3. #include "access.h"
  4. #include "model/cluster.h"
  5. using namespace syncspirit;
  6. using namespace syncspirit::model;
  7. using namespace syncspirit::proto;
  8. using namespace syncspirit::test;
  9. namespace bfs = boost::filesystem;
  10. TEST_CASE("iterate_files", "[model]") {
  11. std::uint64_t key = 0;
  12. db::Device db_d1;
  13. db_d1.set_id(test::device_id2sha256("KHQNO2S-5QSILRK-YX4JZZ4-7L77APM-QNVGZJT-EKU7IFI-PNEPBMY-4MXFMQD"));
  14. db_d1.set_name("d1");
  15. db_d1.set_cert_name("d1_cert_name");
  16. auto d1 = model::device_ptr_t(new model::device_t(db_d1, ++key));
  17. db::Device db_d2;
  18. db_d2.set_id(test::device_id2sha256("KUEQE66-JJ7P6AD-BEHD4ZW-GPBNW6Q-Y4C3K4Y-X44WJWZ-DVPIDXS-UDRJMA7"));
  19. db_d2.set_name("d2");
  20. db_d2.set_cert_name("d2_cert_name");
  21. auto d2 = model::device_ptr_t(new model::device_t(db_d2, ++key));
  22. db::Folder db_f1;
  23. db_f1.set_id("f1");
  24. db_f1.set_label("f1-l");
  25. db_f1.set_path("/some/path/d1");
  26. auto f1 = model::folder_ptr_t(new model::folder_t(db_f1, ++key));
  27. db::Folder db_f2;
  28. db_f2.set_id("f2");
  29. db_f2.set_label("f2-l");
  30. db_f2.set_path("/some/path/d2");
  31. auto f2 = model::folder_ptr_t(new model::folder_t(db_f2, ++key));
  32. auto folders = model::folders_map_t();
  33. folders.put(f1);
  34. folders.put(f2);
  35. cluster_ptr_t cluster = new cluster_t(d1);
  36. cluster->assign_folders(std::move(folders));
  37. bfs::path root("some/root");
  38. bfs::path path("some/path");
  39. auto add_file = [&key](std::int64_t seq, model::device_ptr_t device, model::folder_ptr_t folder,
  40. size_t size = 0) mutable {
  41. db::FolderInfo db_folder_info;
  42. db_folder_info.set_max_sequence(seq);
  43. auto folder_info =
  44. model::folder_info_ptr_t(new model::folder_info_t(db_folder_info, device.get(), folder.get(), ++key));
  45. folder->add(folder_info);
  46. db::FileInfo db_file_info;
  47. db_file_info.set_sequence(seq);
  48. db_file_info.set_size(size);
  49. auto file_info = model::file_info_ptr_t(new model::file_info_t(db_file_info, folder.get()));
  50. folder->add(file_info);
  51. return std::tuple(folder_info, file_info);
  52. };
  53. SECTION("no files at all") {
  54. auto it = cluster->iterate_files(d2);
  55. CHECK(!it);
  56. }
  57. SECTION("no files at peer") {
  58. auto it = cluster->iterate_files(d2);
  59. add_file(4, d1, f1);
  60. CHECK(!it);
  61. }
  62. SECTION("one file") {
  63. auto [folder_info, file_info] = add_file(4, d1, f1);
  64. add_file(5, d2, f1);
  65. auto it = cluster->iterate_files(d2);
  66. CHECK((bool)it);
  67. CHECK(*it.next() == *file_info);
  68. CHECK(!it);
  69. }
  70. SECTION("when file is in sync, it is not returned") {
  71. auto [folder_info, file_info] = add_file(4, d1, f1);
  72. file_info->mark_sync();
  73. add_file(5, d2, f1);
  74. auto it = cluster->iterate_files(d2);
  75. CHECK(!it);
  76. }
  77. }