diff --git a/src/proto/proto-helpers-bep.h b/src/proto/proto-helpers-bep.h index 8e3ecaf6..d1ea5f1d 100644 --- a/src/proto/proto-helpers-bep.h +++ b/src/proto/proto-helpers-bep.h @@ -441,6 +441,12 @@ inline void add_blocks(FileInfo& msg, BlockInfo block) { using namespace pp; msg["blocks"_f].emplace_back(std::move(block)); } +inline BlockInfo& add_blocks(FileInfo& msg) { + using namespace pp; + auto& opt = msg["blocks"_f]; + opt.emplace_back(BlockInfo()); + return opt.back(); +} inline std::string_view get_symlink_target(const FileInfo& msg) { using namespace pp; auto& opt = msg["symlink_target"_f]; @@ -453,6 +459,7 @@ inline void set_symlink_target(FileInfo& msg, std::string_view value) { using namespace pp; msg["symlink_target"_f] = std::string(value); } +template inline void set_symlink_target(FileInfo& msg, std::string value) { using namespace pp; msg["symlink_target"_f] = std::move(value); diff --git a/tests/032-diff-modify.cpp b/tests/032-diff-modify.cpp index e772ee2f..96080c6c 100644 --- a/tests/032-diff-modify.cpp +++ b/tests/032-diff-modify.cpp @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-3.0-or-later -// SPDX-FileCopyrightText: 2019-2024 Ivan Baidakou +// SPDX-FileCopyrightText: 2019-2025 Ivan Baidakou #include "test-utils.h" #include "diff-builder.h" @@ -60,23 +60,22 @@ TEST_CASE("cluster modifications from ui", "[model]") { } SECTION("with unknown folder, then unshare") { - db::Folder db_folder; - db_folder.set_id(id); - db_folder.set_label(label); - db_folder.set_path(path); - auto db_pf = db::PendingFolder(); - *db_pf.mutable_folder() = db_folder; - auto db_fi = db_pf.mutable_folder_info(); - db_fi->set_index_id(2345); - db_fi->set_max_sequence(12); + auto& db_folder = db::get_folder(db_pf); + db::set_id(db_folder, id); + db::set_label(db_folder, label); + db::set_path(db_folder, path); + + auto& db_fi = db::get_folder_info(db_pf); + db::set_max_sequence(db_fi, 2345); + db::set_index_id(db_fi, 12); auto uf = pending_folder_t::create(sequencer->next_uuid(), db_pf, peer_device->device_id()).value(); cluster->get_pending_folders().put(uf); REQUIRE(builder.share_folder(peer_id.get_sha256(), id).apply()); - auto folder = folders.by_id(db_folder.id()); + auto folder = folders.by_id(id); REQUIRE(folder); REQUIRE(folder->is_shared_with(*peer_device)); auto fi_peer = folder->get_folder_infos().by_device(*peer_device); @@ -86,23 +85,25 @@ TEST_CASE("cluster modifications from ui", "[model]") { CHECK(fi_peer->get_device() == peer_device); CHECK(fi_peer->get_max_sequence() == 0); - CHECK(fi_peer->get_index() == db_fi->index_id()); + CHECK(fi_peer->get_index() == db::get_index_id(db_fi)); CHECK(cluster->get_pending_folders().size() == 0); auto pr_file_1 = proto::FileInfo(); - pr_file_1.set_name("a.txt"); - pr_file_1.set_sequence(1); - pr_file_1.set_size(10); - pr_file_1.mutable_version()->add_counters()->set_id(peer_device->device_id().get_uint()); + proto::set_name(pr_file_1, "a.txt"); + proto::set_sequence(pr_file_1, 1l); + proto::set_size(pr_file_1, 10); + auto& pr_version = proto::get_version(pr_file_1); + proto::add_counters(pr_version, proto::Counter(peer_device->device_id().get_uint(), 0)); - auto b1 = pr_file_1.add_blocks(); - b1->set_hash("12345"); - b1->set_size(5); - auto b2 = pr_file_1.add_blocks(); - b2->set_hash("567890"); - b2->set_size(5); - auto bi_1 = block_info_t::create(*b1).value(); - auto bi_2 = block_info_t::create(*b2).value(); + auto& b1 = proto::add_blocks(pr_file_1); + proto::set_size(b1, 5); + proto::set_hash(b1, utils::sha256_digest(as_bytes("12345")).value()); + auto bi_1 = block_info_t::create(b1).value(); + + auto& b2 = proto::add_blocks(pr_file_1); + proto::set_size(b2, 5); + proto::set_hash(b2, utils::sha256_digest(as_bytes("567890")).value()); + auto bi_2 = block_info_t::create(b2).value(); auto &blocks = cluster->get_blocks(); blocks.put(bi_1); diff --git a/tests/033-diffs-trivial.cpp b/tests/033-diffs-trivial.cpp index b827481b..80c41273 100644 --- a/tests/033-diffs-trivial.cpp +++ b/tests/033-diffs-trivial.cpp @@ -49,30 +49,34 @@ TEST_CASE("with file", "[model]") { auto folder = cluster->get_folders().by_id("1234-5678"); auto folder_info = folder->get_folder_infos().by_device(*my_device); - proto::FileInfo pr_file_info; - pr_file_info.set_name("a.txt"); - pr_file_info.set_type(proto::FileInfoType::SYMLINK); - pr_file_info.set_symlink_target("/some/where"); - pr_file_info.set_block_size(5); - pr_file_info.set_size(5); - auto b1_hash = utils::sha256_digest("12345").value(); - auto b1 = pr_file_info.add_blocks(); - b1->set_hash(b1_hash); - b1->set_offset(0); - b1->set_size(5); + auto pr_file = []() -> proto::FileInfo { + auto f = proto::FileInfo(); + proto::set_name(f, "a.txt"); + proto::set_type(f, proto::FileInfoType::SYMLINK); + proto::set_symlink_target(f, "/some/where"); + proto::set_block_size(f, 5); + proto::set_size(f, 5); + return f; + }(); + auto b1_hash = utils::sha256_digest(as_bytes("12345")).value(); + auto& b1 = proto::add_blocks(pr_file); + proto::set_hash(b1, b1_hash); + proto::set_offset(b1, 0); + proto::set_size(b1, 5); - REQUIRE(builder.local_update(folder->get_id(), pr_file_info).apply()); + REQUIRE(builder.local_update(folder->get_id(), pr_file).apply()); auto file = folder_info->get_file_infos().by_name("a.txt"); REQUIRE(file); auto v = file->get_version(); REQUIRE(v->counters_size() == 1); - REQUIRE(v->get_counter(0).id() == my_device->device_id().get_uint()); + REQUIRE(proto::get_id(v->get_counter(0)) == my_device->device_id().get_uint()); SECTION("lock/unlock") { auto diff = diff::cluster_diff_ptr_t(new diff::modify::lock_file_t(*file, true)); REQUIRE(diff->apply(*cluster, get_apply_controller())); - auto file = folder_info->get_file_infos().by_name(pr_file_info.name()); + auto name = proto::get_name(pr_file); + auto file = folder_info->get_file_infos().by_name(name); REQUIRE(file->is_locked()); diff = diff::cluster_diff_ptr_t(new diff::modify::lock_file_t(*file, false)); @@ -81,7 +85,7 @@ TEST_CASE("with file", "[model]") { } SECTION("file_availability") { - auto block = cluster->get_blocks().get(b1_hash); + auto block = cluster->get_blocks().by_hash(b1_hash); file->remove_blocks(); file->assign_block(block, 0); REQUIRE(!file->is_locally_available());