From c323b8401249c91aeaa451591487481aaead1680 Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Sat, 20 Jan 2024 00:25:05 +0100 Subject: [PATCH] test: exercise script and entry interfaces --- test/dwarfs_test.cpp | 4 ++++ test/test_helpers.h | 32 +++++++++++++++++++++++++++++--- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/test/dwarfs_test.cpp b/test/dwarfs_test.cpp index 37681085..81953468 100644 --- a/test/dwarfs_test.cpp +++ b/test/dwarfs_test.cpp @@ -166,6 +166,10 @@ void basic_end_to_end_test(std::string const& compressor, auto scr = std::make_shared(); auto fsimage = build_dwarfs(lgr, input, compressor, cfg, options, &prog, scr); + + EXPECT_EQ(14, scr->filter_calls.size()); + EXPECT_EQ(15, scr->transform_calls.size()); + auto image_size = fsimage.size(); auto mm = std::make_shared(std::move(fsimage)); diff --git a/test/test_helpers.h b/test/test_helpers.h index 7a880175..d31c89f1 100644 --- a/test/test_helpers.h +++ b/test/test_helpers.h @@ -37,6 +37,7 @@ #include #include +#include "dwarfs/entry_interface.h" #include "dwarfs/file_access.h" #include "dwarfs/file_stat.h" #include "dwarfs/iolayer.h" @@ -179,15 +180,40 @@ class script_mock : public script { void configure(options_interface const& /*oi*/) override {} - bool filter(entry_interface const& /*ei*/) override { return true; } + bool filter(entry_interface const& ei) override { + filter_calls.push_back({ei.unix_dpath(), ei.name(), ei.size(), + ei.is_directory(), ei.get_permissions(), + ei.get_uid(), ei.get_gid(), ei.get_atime(), + ei.get_mtime(), ei.get_ctime()}); + return true; + } - void transform(entry_interface& /*ei*/) override { - // do nothing + void transform(entry_interface& ei) override { + transform_calls.push_back({ei.unix_dpath(), ei.name(), ei.size(), + ei.is_directory(), ei.get_permissions(), + ei.get_uid(), ei.get_gid(), ei.get_atime(), + ei.get_mtime(), ei.get_ctime()}); } void order(inode_vector& /*iv*/) override { // do nothing } + + struct entry_data { + std::string path; + std::string name; + size_t size; + bool is_directory; + file_stat::mode_type mode; + file_stat::uid_type uid; + file_stat::gid_type gid; + uint64_t atime; + uint64_t mtime; + uint64_t ctime; + }; + + std::vector filter_calls; + std::vector transform_calls; }; class test_terminal : public terminal {