mirror of
https://github.com/mhx/dwarfs.git
synced 2025-08-04 02:06:22 -04:00
test: exercise preload_category
and test analysis_file
option
This commit is contained in:
parent
8f4d400ced
commit
5529c54acf
@ -32,6 +32,7 @@
|
|||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <future>
|
#include <future>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <regex>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
#include <string_view>
|
#include <string_view>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
@ -195,6 +196,18 @@ bool read_file(fs::path const& path, std::string& out) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool read_lines(fs::path const& path, std::vector<std::string>& out) {
|
||||||
|
std::ifstream ifs(path);
|
||||||
|
if (!ifs.is_open()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
std::string line;
|
||||||
|
while (std::getline(ifs, line)) {
|
||||||
|
out.push_back(line);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
struct compare_directories_result {
|
struct compare_directories_result {
|
||||||
std::set<fs::path> mismatched;
|
std::set<fs::path> mismatched;
|
||||||
std::set<fs::path> directories;
|
std::set<fs::path> directories;
|
||||||
@ -1585,6 +1598,82 @@ TEST_P(tools_test, categorize) {
|
|||||||
EXPECT_TRUE(runner.unmount()) << runner.cmdline();
|
EXPECT_TRUE(runner.unmount()) << runner.cmdline();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!skip_fuse_tests()) {
|
||||||
|
auto mountpoint = td / "mnt";
|
||||||
|
fs::path driver;
|
||||||
|
|
||||||
|
switch (mode) {
|
||||||
|
case binary_mode::standalone:
|
||||||
|
driver = fuse3_bin;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case binary_mode::universal_tool:
|
||||||
|
driver = universal_bin;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case binary_mode::universal_symlink:
|
||||||
|
driver = universal_symlink_dwarfs_bin;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto analysis_file = td / "analysis.dat";
|
||||||
|
|
||||||
|
{
|
||||||
|
scoped_no_leak_check no_leak_check;
|
||||||
|
|
||||||
|
// TODO: WinFSP seems to mangle backslashes in driver options
|
||||||
|
auto analysis_file_str = std::regex_replace(analysis_file.string(),
|
||||||
|
std::regex(R"(\\)"), R"(\\)");
|
||||||
|
|
||||||
|
driver_runner runner(driver_runner::foreground, driver,
|
||||||
|
mode == binary_mode::universal_tool, image,
|
||||||
|
mountpoint, "-opreload_category=pcmaudio/waveform",
|
||||||
|
"-oanalysis_file=" + analysis_file_str);
|
||||||
|
|
||||||
|
ASSERT_TRUE(wait_until_file_ready(mountpoint / "random", timeout))
|
||||||
|
<< runner.cmdline();
|
||||||
|
|
||||||
|
std::array const files_to_read{
|
||||||
|
fs::path{"random"},
|
||||||
|
fs::path{"audio"} / "test24-4.w64",
|
||||||
|
fs::path{"pcmaudio"} / "test16.aiff",
|
||||||
|
fs::path{"dwarfsextract.md"},
|
||||||
|
fs::path{"audio"} / "test8-3.caf",
|
||||||
|
fs::path{"random"},
|
||||||
|
fs::path{"dwarfsextract.md"},
|
||||||
|
fs::path{"audio"} / "test16-1.wav",
|
||||||
|
};
|
||||||
|
|
||||||
|
for (auto const& file : files_to_read) {
|
||||||
|
std::string contents;
|
||||||
|
EXPECT_TRUE(read_file(mountpoint / file, contents)) << runner.cmdline();
|
||||||
|
EXPECT_GT(contents.size(), 0) << runner.cmdline();
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPECT_TRUE(runner.unmount()) << runner.cmdline();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::array const expected_files_accessed{
|
||||||
|
fs::path{"random"},
|
||||||
|
fs::path{"audio"} / "test24-4.w64",
|
||||||
|
fs::path{"pcmaudio"} / "test16.aiff",
|
||||||
|
fs::path{"dwarfsextract.md"},
|
||||||
|
fs::path{"audio"} / "test8-3.caf",
|
||||||
|
fs::path{"audio"} / "test16-1.wav",
|
||||||
|
};
|
||||||
|
|
||||||
|
ASSERT_TRUE(fs::exists(analysis_file));
|
||||||
|
std::vector<std::string> analysis_results;
|
||||||
|
ASSERT_TRUE(read_lines(analysis_file, analysis_results));
|
||||||
|
std::vector<fs::path> files_accessed;
|
||||||
|
for (auto const& line : analysis_results) {
|
||||||
|
files_accessed.push_back(line);
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPECT_THAT(files_accessed,
|
||||||
|
::testing::ElementsAreArray(expected_files_accessed));
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
auto json_info = subprocess::check_run(*dwarfsck_test_bin, dwarfsck_tool_arg,
|
auto json_info = subprocess::check_run(*dwarfsck_test_bin, dwarfsck_tool_arg,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user