131-controller-indexupdate.cpp 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. #include "catch.hpp"
  2. #include "fixture.h"
  3. #include "ui/messages.hpp"
  4. #include "utils/error_code.h"
  5. #include "test-utils.h"
  6. using namespace syncspirit;
  7. using namespace syncspirit::test;
  8. using namespace syncspirit::utils;
  9. void test_indexupdate_new_dirs() {
  10. struct F : Fixture {
  11. model::folder_ptr_t folder;
  12. void setup() override {
  13. auto config = proto::ClusterConfig();
  14. auto p_folder = proto::Folder();
  15. p_folder.set_label("my-folder");
  16. p_folder.set_id("123");
  17. auto d_my = proto::Device();
  18. d_my.set_id(device_my->device_id.get_sha256());
  19. d_my.set_index_id(21);
  20. d_my.set_max_sequence(0);
  21. auto d_peer = proto::Device();
  22. d_my.set_id(device_peer->device_id.get_sha256());
  23. d_my.set_index_id(22);
  24. d_my.set_max_sequence(1);
  25. *p_folder.add_devices() = d_my;
  26. *p_folder.add_devices() = d_peer;
  27. *config.add_folders() = p_folder;
  28. peer_cluster_config = payload::cluster_config_ptr_t(new proto::ClusterConfig(config));
  29. auto db_folder = db::Folder();
  30. db_folder.set_id(p_folder.id());
  31. db_folder.set_label(p_folder.label());
  32. db_folder.set_path(root_path.string());
  33. folder = new model::folder_t(db_folder);
  34. folder->assign_device(device_my);
  35. auto db_fi_my = db::FolderInfo();
  36. db_fi_my.set_index_id(23);
  37. db_fi_my.set_max_sequence(0);
  38. auto fi_my =
  39. model::folder_info_ptr_t(new model::folder_info_t(db_fi_my, device_my.get(), folder.get(), 24));
  40. folder->add(fi_my);
  41. auto db_fi_peer = db::FolderInfo();
  42. db_fi_peer.set_index_id(25);
  43. db_fi_peer.set_max_sequence(1);
  44. auto fi_peer =
  45. model::folder_info_ptr_t(new model::folder_info_t(db_fi_peer, device_peer.get(), folder.get(), 26));
  46. folder->add(fi_peer);
  47. cluster->add_folder(folder);
  48. }
  49. void main() override {
  50. CHECK(peer->start_reading == 1);
  51. proto::IndexUpdate iu;
  52. iu.set_folder(folder->id());
  53. auto fi = proto::FileInfo();
  54. SECTION("send a folder") {
  55. fi.set_name("some_dir");
  56. fi.set_type(proto::FileInfoType::DIRECTORY);
  57. fi.set_sequence(3);
  58. *iu.add_files() = fi;
  59. auto iu_ptr = proto::message::IndexUpdate(std::make_unique<proto::IndexUpdate>(std::move(iu)));
  60. peer->send<payload::forwarded_message_t>(controller->get_address(), std::move(iu_ptr));
  61. sup->do_process();
  62. auto path = bfs::path(root_path / "some_dir");
  63. CHECK(bfs::exists(path));
  64. CHECK(bfs::is_directory(path));
  65. }
  66. SECTION("send a symlink") {
  67. fi.set_name("link");
  68. fi.set_type(proto::FileInfoType::SYMLINK);
  69. fi.set_sequence(4);
  70. bfs::path target = root_path / "not-existing";
  71. fi.set_symlink_target(target.string());
  72. *iu.add_files() = fi;
  73. auto iu_ptr = proto::message::IndexUpdate(std::make_unique<proto::IndexUpdate>(std::move(iu)));
  74. peer->send<payload::forwarded_message_t>(controller->get_address(), std::move(iu_ptr));
  75. sup->do_process();
  76. auto path = bfs::path(root_path / "link");
  77. CHECK(bfs::is_symlink(path));
  78. CHECK(bfs::read_symlink(path) == target);
  79. }
  80. }
  81. };
  82. F().run();
  83. }
  84. REGISTER_TEST_CASE(test_indexupdate_new_dirs, "test_indexupdate_new_dirs", "[controller]");