mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-13 06:16:55 -04:00
feat: make tools_test work without WITH_TOOLS
This commit is contained in:
parent
d010ba2322
commit
414fadb357
@ -464,11 +464,6 @@ if(WITH_TESTS)
|
|||||||
list(APPEND TEST_TARGETS ${test})
|
list(APPEND TEST_TARGETS ${test})
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
set_source_files_properties(test/tools_test.cpp PROPERTIES
|
|
||||||
COMPILE_DEFINITIONS
|
|
||||||
$<$<BOOL:${WITH_UNIVERSAL_BINARY}>:DWARFS_HAVE_UNIVERSAL_BINARY>
|
|
||||||
)
|
|
||||||
|
|
||||||
if(TARGET tool_main_test)
|
if(TARGET tool_main_test)
|
||||||
target_link_libraries(tool_main_test PRIVATE mkdwarfs_main dwarfsck_main dwarfsextract_main)
|
target_link_libraries(tool_main_test PRIVATE mkdwarfs_main dwarfsck_main dwarfsextract_main)
|
||||||
endif()
|
endif()
|
||||||
@ -484,6 +479,22 @@ if(WITH_TESTS)
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(TARGET tools_test)
|
||||||
|
if(NOT WITH_TOOLS)
|
||||||
|
find_program(MKDWARFS_EXE mkdwarfs mkdwarfs.exe)
|
||||||
|
find_program(DWARFSCK_EXE dwarfsck dwarfsck.exe)
|
||||||
|
find_program(DWARFSEXTRACT_EXE dwarfsextract dwarfsextract.exe)
|
||||||
|
endif()
|
||||||
|
target_compile_definitions(tools_test PRIVATE
|
||||||
|
$<$<AND:$<BOOL:${WITH_UNIVERSAL_BINARY}>,$<BOOL:${WITH_TOOLS}>>:DWARFS_HAVE_UNIVERSAL_BINARY>
|
||||||
|
$<$<BOOL:${WITH_TOOLS}>:DWARFS_WITH_TOOLS>
|
||||||
|
$<$<BOOL:${WITH_FUSE_DRIVER}>:DWARFS_WITH_FUSE_DRIVER>
|
||||||
|
$<$<BOOL:${MKDWARFS_EXE}>:MKDWARFS_BINARY=\"${MKDWARFS_EXE}\">
|
||||||
|
$<$<BOOL:${DWARFSCK_EXE}>:DWARFSCK_BINARY=\"${DWARFSCK_EXE}\">
|
||||||
|
$<$<BOOL:${DWARFSEXTRACT_EXE}>:DWARFSEXTRACT_BINARY=\"${DWARFSEXTRACT_EXE}\">
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(TARGET block_cache_test)
|
if(TARGET block_cache_test)
|
||||||
target_link_libraries(block_cache_test PRIVATE mkdwarfs_main)
|
target_link_libraries(block_cache_test PRIVATE mkdwarfs_main)
|
||||||
endif()
|
endif()
|
||||||
|
@ -79,12 +79,24 @@ auto test_catdata_dwarfs = test_dir / "catdata.dwarfs";
|
|||||||
#define EXE_EXT ""
|
#define EXE_EXT ""
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef MKDWARFS_BINARY
|
||||||
|
#define MKDWARFS_BINARY tools_dir / "mkdwarfs" EXE_EXT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef DWARFSCK_BINARY
|
||||||
|
#define DWARFSCK_BINARY tools_dir / "dwarfsck" EXE_EXT
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef DWARFSEXTRACT_BINARY
|
||||||
|
#define DWARFSEXTRACT_BINARY tools_dir / "dwarfsextract" EXE_EXT
|
||||||
|
#endif
|
||||||
|
|
||||||
auto tools_dir = fs::path(TOOLS_BIN_DIR).make_preferred();
|
auto tools_dir = fs::path(TOOLS_BIN_DIR).make_preferred();
|
||||||
auto mkdwarfs_bin = tools_dir / "mkdwarfs" EXE_EXT;
|
auto mkdwarfs_bin = fs::path{MKDWARFS_BINARY};
|
||||||
auto fuse3_bin = tools_dir / "dwarfs" EXE_EXT;
|
auto fuse3_bin = tools_dir / "dwarfs" EXE_EXT;
|
||||||
auto fuse2_bin = tools_dir / "dwarfs2" EXE_EXT;
|
auto fuse2_bin = tools_dir / "dwarfs2" EXE_EXT;
|
||||||
auto dwarfsextract_bin = tools_dir / "dwarfsextract" EXE_EXT;
|
auto dwarfsextract_bin = fs::path{DWARFSEXTRACT_BINARY};
|
||||||
auto dwarfsck_bin = tools_dir / "dwarfsck" EXE_EXT;
|
auto dwarfsck_bin = fs::path{DWARFSCK_BINARY};
|
||||||
auto universal_bin = tools_dir / "universal" / "dwarfs-universal" EXE_EXT;
|
auto universal_bin = tools_dir / "universal" / "dwarfs-universal" EXE_EXT;
|
||||||
|
|
||||||
class scoped_no_leak_check {
|
class scoped_no_leak_check {
|
||||||
@ -125,6 +137,12 @@ class scoped_no_leak_check {
|
|||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef DWARFS_WITH_FUSE_DRIVER
|
||||||
|
|
||||||
|
bool skip_fuse_tests() {
|
||||||
|
return dwarfs::getenv_is_enabled("DWARFS_SKIP_FUSE_TESTS");
|
||||||
|
}
|
||||||
|
|
||||||
#if !(defined(_WIN32) || defined(__APPLE__))
|
#if !(defined(_WIN32) || defined(__APPLE__))
|
||||||
pid_t get_dwarfs_pid(fs::path const& path) {
|
pid_t get_dwarfs_pid(fs::path const& path) {
|
||||||
return dwarfs::to<pid_t>(dwarfs::getxattr(path, "user.dwarfs.driver.pid"));
|
return dwarfs::to<pid_t>(dwarfs::getxattr(path, "user.dwarfs.driver.pid"));
|
||||||
@ -151,6 +169,8 @@ bool wait_until_file_ready(fs::path const& path,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
bool read_file(fs::path const& path, std::string& out) {
|
bool read_file(fs::path const& path, std::string& out) {
|
||||||
std::ifstream ifs(path, std::ios::binary);
|
std::ifstream ifs(path, std::ios::binary);
|
||||||
if (!ifs.is_open()) {
|
if (!ifs.is_open()) {
|
||||||
@ -300,10 +320,6 @@ bool compare_directories(fs::path const& p1, fs::path const& p2,
|
|||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool skip_fuse_tests() {
|
|
||||||
return dwarfs::getenv_is_enabled("DWARFS_SKIP_FUSE_TESTS");
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
struct new_process_group : public ::boost::process::detail::handler_base {
|
struct new_process_group : public ::boost::process::detail::handler_base {
|
||||||
template <class WindowsExecutor>
|
template <class WindowsExecutor>
|
||||||
@ -525,6 +541,8 @@ class process_guard {
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef DWARFS_WITH_FUSE_DRIVER
|
||||||
|
|
||||||
class driver_runner {
|
class driver_runner {
|
||||||
public:
|
public:
|
||||||
struct foreground_t {};
|
struct foreground_t {};
|
||||||
@ -742,6 +760,8 @@ bool check_readonly(fs::path const& p, bool readonly) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
size_t num_hardlinks(fs::path const& p) {
|
size_t num_hardlinks(fs::path const& p) {
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
dwarfs::file_stat stat(p);
|
dwarfs::file_stat stat(p);
|
||||||
@ -787,7 +807,9 @@ class tools_test : public ::testing::TestWithParam<binary_mode> {};
|
|||||||
TEST_P(tools_test, end_to_end) {
|
TEST_P(tools_test, end_to_end) {
|
||||||
auto mode = GetParam();
|
auto mode = GetParam();
|
||||||
|
|
||||||
|
#ifdef DWARFS_WITH_FUSE_DRIVER
|
||||||
std::chrono::seconds const timeout{5};
|
std::chrono::seconds const timeout{5};
|
||||||
|
#endif
|
||||||
dwarfs::temporary_directory tempdir("dwarfs");
|
dwarfs::temporary_directory tempdir("dwarfs");
|
||||||
auto td = fs::path(tempdir.path().string());
|
auto td = fs::path(tempdir.path().string());
|
||||||
auto image = td / "test.dwarfs";
|
auto image = td / "test.dwarfs";
|
||||||
@ -889,6 +911,7 @@ TEST_P(tools_test, end_to_end) {
|
|||||||
auto extracted = td / "extracted";
|
auto extracted = td / "extracted";
|
||||||
auto untared = td / "untared";
|
auto untared = td / "untared";
|
||||||
|
|
||||||
|
#ifdef DWARFS_WITH_FUSE_DRIVER
|
||||||
std::vector<fs::path> drivers;
|
std::vector<fs::path> drivers;
|
||||||
|
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
@ -1133,6 +1156,7 @@ TEST_P(tools_test, end_to_end) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
auto meta_export = td / "test.meta";
|
auto meta_export = td / "test.meta";
|
||||||
|
|
||||||
@ -1173,6 +1197,8 @@ TEST_P(tools_test, end_to_end) {
|
|||||||
EXPECT_EQ(cdr.symlinks.size(), 2) << cdr;
|
EXPECT_EQ(cdr.symlinks.size(), 2) << cdr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DWARFS_WITH_FUSE_DRIVER
|
||||||
|
|
||||||
#define EXPECT_EC_IMPL(ec, cat, val) \
|
#define EXPECT_EC_IMPL(ec, cat, val) \
|
||||||
EXPECT_TRUE(ec) << runner.cmdline(); \
|
EXPECT_TRUE(ec) << runner.cmdline(); \
|
||||||
EXPECT_EQ(cat, (ec).category()) << runner.cmdline(); \
|
EXPECT_EQ(cat, (ec).category()) << runner.cmdline(); \
|
||||||
@ -1199,7 +1225,9 @@ TEST_P(tools_test, mutating_and_error_ops) {
|
|||||||
GTEST_SKIP() << "skipping FUSE tests";
|
GTEST_SKIP() << "skipping FUSE tests";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DWARFS_WITH_FUSE_DRIVER
|
||||||
std::chrono::seconds const timeout{5};
|
std::chrono::seconds const timeout{5};
|
||||||
|
#endif
|
||||||
dwarfs::temporary_directory tempdir("dwarfs");
|
dwarfs::temporary_directory tempdir("dwarfs");
|
||||||
auto td = fs::path(tempdir.path().string());
|
auto td = fs::path(tempdir.path().string());
|
||||||
auto mountpoint = td / "mnt";
|
auto mountpoint = td / "mnt";
|
||||||
@ -1403,6 +1431,8 @@ TEST_P(tools_test, mutating_and_error_ops) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
TEST_P(tools_test, categorize) {
|
TEST_P(tools_test, categorize) {
|
||||||
auto mode = GetParam();
|
auto mode = GetParam();
|
||||||
|
|
||||||
@ -1492,6 +1522,8 @@ TEST_P(tools_test, categorize) {
|
|||||||
EXPECT_LT(image_size_recompressed, image_size);
|
EXPECT_LT(image_size_recompressed, image_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DWARFS_WITH_FUSE_DRIVER
|
||||||
|
|
||||||
if (!skip_fuse_tests()) {
|
if (!skip_fuse_tests()) {
|
||||||
auto mountpoint = td / "mnt";
|
auto mountpoint = td / "mnt";
|
||||||
fs::path driver;
|
fs::path driver;
|
||||||
@ -1526,6 +1558,8 @@ TEST_P(tools_test, categorize) {
|
|||||||
EXPECT_TRUE(runner.unmount()) << runner.cmdline();
|
EXPECT_TRUE(runner.unmount()) << runner.cmdline();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#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,
|
||||||
image_recompressed, "--json");
|
image_recompressed, "--json");
|
||||||
ASSERT_TRUE(json_info);
|
ASSERT_TRUE(json_info);
|
||||||
@ -1601,6 +1635,13 @@ INSTANTIATE_TEST_SUITE_P(dwarfs, tools_test,
|
|||||||
class manpage_test
|
class manpage_test
|
||||||
: public ::testing::TestWithParam<std::tuple<binary_mode, std::string>> {};
|
: public ::testing::TestWithParam<std::tuple<binary_mode, std::string>> {};
|
||||||
|
|
||||||
|
std::vector<std::string> const manpage_test_tools{
|
||||||
|
"mkdwarfs", "dwarfsck", "dwarfsextract",
|
||||||
|
#ifdef DWARFS_WITH_FUSE_DRIVER
|
||||||
|
"dwarfs",
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
TEST_P(manpage_test, manpage) {
|
TEST_P(manpage_test, manpage) {
|
||||||
auto [mode, tool] = GetParam();
|
auto [mode, tool] = GetParam();
|
||||||
|
|
||||||
@ -1648,8 +1689,7 @@ std::vector<binary_mode> manpage_test_modes{
|
|||||||
INSTANTIATE_TEST_SUITE_P(
|
INSTANTIATE_TEST_SUITE_P(
|
||||||
dwarfs, manpage_test,
|
dwarfs, manpage_test,
|
||||||
::testing::Combine(::testing::ValuesIn(manpage_test_modes),
|
::testing::Combine(::testing::ValuesIn(manpage_test_modes),
|
||||||
::testing::Values("dwarfs", "mkdwarfs", "dwarfsck",
|
::testing::ValuesIn(manpage_test_tools)));
|
||||||
"dwarfsextract")));
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
TEST(tools_test, dwarfsextract_progress) {
|
TEST(tools_test, dwarfsextract_progress) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user