test: support adding files with random contents

This commit is contained in:
Marcus Holland-Moritz 2023-11-29 17:32:54 +01:00
parent 46bd4dd11d
commit f5e97a3212
2 changed files with 27 additions and 2 deletions

View File

@ -24,6 +24,7 @@
#include <cstring>
#include <functional>
#include <iostream>
#include <random>
#include <fmt/format.h>
@ -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); });
}

View File

@ -80,7 +80,8 @@ class os_access_mock : public os_access {
std::function<std::string()> 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);