From f5e97a321276182d007a2601698a8803b693c3f7 Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Wed, 29 Nov 2023 17:32:54 +0100 Subject: [PATCH] test: support adding files with random contents --- test/test_helpers.cpp | 26 +++++++++++++++++++++++++- test/test_helpers.h | 3 ++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/test/test_helpers.cpp b/test/test_helpers.cpp index 9cd91fb4..3771be47 100644 --- a/test/test_helpers.cpp +++ b/test/test_helpers.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include @@ -258,7 +259,7 @@ void os_access_mock::add_dir(fs::path const& path) { add(path, st); } -void os_access_mock::add_file(fs::path const& path, size_t size) { +void os_access_mock::add_file(fs::path const& path, size_t size, bool random) { simplestat st; std::memset(&st, 0, sizeof(st)); st.ino = ino_++; @@ -266,6 +267,29 @@ void os_access_mock::add_file(fs::path const& path, size_t size) { st.uid = 1000; st.gid = 100; st.size = size; + + if (random) { + thread_local std::mt19937_64 rng{42}; + + std::uniform_int_distribution<> choice_dist{0, 3}; + + switch (choice_dist(rng)) { + default: + break; + + case 0: + add(path, st, [size, seed = rng()] { + std::mt19937_64 tmprng{seed}; + std::string rv; + rv.resize(size); + std::uniform_int_distribution<> byte_dist{0, 255}; + std::generate(rv.begin(), rv.end(), [&] { return byte_dist(tmprng); }); + return rv; + }); + return; + } + } + add(path, st, [size] { return loremipsum(size); }); } diff --git a/test/test_helpers.h b/test/test_helpers.h index 5a0a2977..6b89278d 100644 --- a/test/test_helpers.h +++ b/test/test_helpers.h @@ -80,7 +80,8 @@ class os_access_mock : public os_access { std::function generator); void add_dir(std::filesystem::path const& path); - void add_file(std::filesystem::path const& path, size_t size); + void + add_file(std::filesystem::path const& path, size_t size, bool random = false); void add_file(std::filesystem::path const& path, std::string const& contents); void set_access_fail(std::filesystem::path const& path);