Files
syncspirit/tests/043-diffs-scan.cpp

96 lines
3.2 KiB
C++

// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: 2019-2026 Ivan Baidakou
#include "model/diff/load/interrupt.h"
#include "test-utils.h"
#include "diff-builder.h"
#include "model/cluster.h"
#include "model/misc/sequencer.h"
#include "diff-builder.h"
using namespace syncspirit;
using namespace syncspirit::test;
using namespace syncspirit::model;
auto my_id = device_id_t::from_string("KHQNO2S-5QSILRK-YX4JZZ4-7L77APM-QNVGZJT-EKU7IFI-PNEPBMY-4MXFMQD").value();
auto my_device = device_ptr_t(new model::local_device_t(my_id, "my-device", "my-device"));
TEST_CASE("scan_start, full", "[model]") {
auto cluster = cluster_ptr_t(new cluster_t(my_device, 1));
auto sequencer = make_sequencer(4);
auto &devices = cluster->get_devices();
devices.put(my_device);
auto &blocks_map = cluster->get_blocks();
auto builder = diff_builder_t(*cluster);
REQUIRE(builder.upsert_folder("f1", "some/path-1", "my-label-1").apply());
auto folder = cluster->get_folders().by_id("f1");
auto folder_my = folder->get_folder_infos().by_device(*my_device);
proto::FileInfo pr_fi_1;
proto::set_name(pr_fi_1, "a.bin");
proto::set_block_size(pr_fi_1, 5ul);
auto &v_1 = proto::get_version(pr_fi_1);
proto::add_counters(v_1, proto::Counter(my_id.get_uint(), 0));
proto::FileInfo pr_fi_2;
proto::set_name(pr_fi_2, "b.bin");
auto &v_2 = proto::get_version(pr_fi_1);
proto::add_counters(v_2, proto::Counter(my_id.get_uint(), 0));
REQUIRE(builder.local_update("f1", pr_fi_1).local_update("f1", pr_fi_2).apply());
auto &file_infos = folder_my->get_file_infos();
auto f1 = file_infos.by_name("a.bin");
auto f2 = file_infos.by_name("b.bin");
REQUIRE(f1->is_local());
REQUIRE(f2->is_local());
REQUIRE(builder.scan_start("f1").apply());
CHECK(!f1->is_local());
CHECK(!f2->is_local());
}
TEST_CASE("scan_start, partial", "[model]") {
auto cluster = cluster_ptr_t(new cluster_t(my_device, 1));
auto sequencer = make_sequencer(4);
auto &devices = cluster->get_devices();
devices.put(my_device);
auto &blocks_map = cluster->get_blocks();
auto builder = diff_builder_t(*cluster);
REQUIRE(builder.upsert_folder("f1", "some/path-1", "my-label-1").apply());
auto folder = cluster->get_folders().by_id("f1");
auto folder_my = folder->get_folder_infos().by_device(*my_device);
auto &file_infos = folder_my->get_file_infos();
auto names = {"dir", "dir_x", "dir/sub_dir"};
for (auto &name : names) {
proto::FileInfo pr_fi;
proto::set_name(pr_fi, name);
proto::set_type(pr_fi, proto::FileInfoType::DIRECTORY);
auto &v_1 = proto::get_version(pr_fi);
proto::add_counters(v_1, proto::Counter(my_id.get_uint(), 0));
REQUIRE(builder.local_update("f1", pr_fi).apply());
auto f = file_infos.by_name(name);
REQUIRE(f);
REQUIRE(f->is_local());
}
REQUIRE(builder.scan_start("f1", "dir").apply());
CHECK(!file_infos.by_name("dir")->is_local());
CHECK(!file_infos.by_name("dir/sub_dir")->is_local());
CHECK(file_infos.by_name("dir_x")->is_local());
}
int _init() {
test::init_logging();
return 1;
}
static int v = _init();