mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-09 20:41:04 -04:00
Remove dependency on unreliable tar archive
This commit is contained in:
parent
480092a8da
commit
05f4ea0bb9
@ -290,7 +290,6 @@ endif()
|
|||||||
|
|
||||||
if(WITH_TESTS)
|
if(WITH_TESTS)
|
||||||
find_program(DIFF_BIN diff DOC "compare files line by line" REQUIRED)
|
find_program(DIFF_BIN diff DOC "compare files line by line" REQUIRED)
|
||||||
find_program(TAR_BIN tar DOC "an archiving utility" REQUIRED)
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(USE_JEMALLOC)
|
if(USE_JEMALLOC)
|
||||||
@ -628,7 +627,7 @@ if(WITH_TESTS)
|
|||||||
dwarfs_tools_test
|
dwarfs_tools_test
|
||||||
PRIVATE TEST_DATA_DIR=\"${CMAKE_SOURCE_DIR}/test\"
|
PRIVATE TEST_DATA_DIR=\"${CMAKE_SOURCE_DIR}/test\"
|
||||||
TOOLS_BIN_DIR=\"${CMAKE_CURRENT_BINARY_DIR}\"
|
TOOLS_BIN_DIR=\"${CMAKE_CURRENT_BINARY_DIR}\"
|
||||||
DIFF_BIN=\"${DIFF_BIN}\" TAR_BIN=\"${TAR_BIN}\")
|
DIFF_BIN=\"${DIFF_BIN}\")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WITH_BENCHMARKS)
|
if(WITH_BENCHMARKS)
|
||||||
|
@ -23,8 +23,10 @@
|
|||||||
|
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
|
#include <fstream>
|
||||||
#include <future>
|
#include <future>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <sstream>
|
||||||
#include <thread>
|
#include <thread>
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
|
|
||||||
@ -43,7 +45,6 @@
|
|||||||
#include <boost/process.hpp>
|
#include <boost/process.hpp>
|
||||||
|
|
||||||
#include <folly/Conv.h>
|
#include <folly/Conv.h>
|
||||||
#include <folly/FileUtil.h>
|
|
||||||
#include <folly/String.h>
|
#include <folly/String.h>
|
||||||
#include <folly/experimental/TestUtil.h>
|
#include <folly/experimental/TestUtil.h>
|
||||||
|
|
||||||
@ -76,7 +77,6 @@ auto dwarfsextract_bin = tools_dir / "dwarfsextract" EXE_EXT;
|
|||||||
auto dwarfsck_bin = tools_dir / "dwarfsck" EXE_EXT;
|
auto dwarfsck_bin = tools_dir / "dwarfsck" EXE_EXT;
|
||||||
|
|
||||||
auto diff_bin = fs::path(DIFF_BIN).make_preferred();
|
auto diff_bin = fs::path(DIFF_BIN).make_preferred();
|
||||||
auto tar_bin = fs::path(TAR_BIN).make_preferred();
|
|
||||||
|
|
||||||
#ifndef _WIN32
|
#ifndef _WIN32
|
||||||
pid_t get_dwarfs_pid(fs::path const& path) {
|
pid_t get_dwarfs_pid(fs::path const& path) {
|
||||||
@ -106,6 +106,17 @@ bool wait_until_file_ready(fs::path const& path,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool read_file(fs::path const& path, std::string& out) {
|
||||||
|
std::ifstream ifs(path, std::ios::binary);
|
||||||
|
if (!ifs.is_open()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
std::stringstream tmp;
|
||||||
|
tmp << ifs.rdbuf();
|
||||||
|
out = tmp.str();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
#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>
|
||||||
@ -409,9 +420,9 @@ TEST(tools, everything) {
|
|||||||
auto td = fs::path(tempdir.path().string());
|
auto td = fs::path(tempdir.path().string());
|
||||||
auto image = td / "test.dwarfs";
|
auto image = td / "test.dwarfs";
|
||||||
auto image_hdr = td / "test_hdr.dwarfs";
|
auto image_hdr = td / "test_hdr.dwarfs";
|
||||||
auto data_dir = td / "data";
|
// auto data_dir = td / "data";
|
||||||
auto fsdata_dir = td / "fsdata";
|
auto fsdata_dir = td / "fsdata";
|
||||||
auto header_data = data_dir / "format.sh";
|
auto header_data = fsdata_dir / "format.sh";
|
||||||
|
|
||||||
ASSERT_TRUE(fs::create_directory(fsdata_dir));
|
ASSERT_TRUE(fs::create_directory(fsdata_dir));
|
||||||
ASSERT_TRUE(subprocess::check_run(dwarfsextract_bin, "-i", test_data_dwarfs,
|
ASSERT_TRUE(subprocess::check_run(dwarfsextract_bin, "-i", test_data_dwarfs,
|
||||||
@ -421,8 +432,19 @@ TEST(tools, everything) {
|
|||||||
EXPECT_TRUE(fs::is_symlink(fsdata_dir / "foobar"));
|
EXPECT_TRUE(fs::is_symlink(fsdata_dir / "foobar"));
|
||||||
EXPECT_EQ(fs::read_symlink(fsdata_dir / "foobar"), fs::path("foo") / "bar");
|
EXPECT_EQ(fs::read_symlink(fsdata_dir / "foobar"), fs::path("foo") / "bar");
|
||||||
|
|
||||||
ASSERT_TRUE(subprocess::check_run(tar_bin, "xf", test_data_tar, "-C", td));
|
auto unicode_symlink = fsdata_dir / u8"יוניקוד";
|
||||||
ASSERT_TRUE(subprocess::check_run(diff_bin, "-qruN", data_dir, fsdata_dir));
|
auto unicode_symlink_target = fs::path("unicode") / u8"我爱你"/u8"☀️ Sun"/u8"Γειά σας"/u8"مرحبًا"/u8"⚽️"/u8"Карибського";
|
||||||
|
std::string unicode_file_contents;
|
||||||
|
|
||||||
|
EXPECT_TRUE(fs::is_symlink(unicode_symlink));
|
||||||
|
EXPECT_EQ(fs::read_symlink(unicode_symlink), unicode_symlink_target);
|
||||||
|
EXPECT_TRUE(read_file(unicode_symlink, unicode_file_contents));
|
||||||
|
EXPECT_EQ(unicode_file_contents, "unicode\n");
|
||||||
|
EXPECT_TRUE(read_file(fsdata_dir / unicode_symlink_target, unicode_file_contents));
|
||||||
|
EXPECT_EQ(unicode_file_contents, "unicode\n");
|
||||||
|
|
||||||
|
// ASSERT_TRUE(subprocess::check_run(tar_bin, "xf", test_data_tar, "-C", td));
|
||||||
|
// ASSERT_TRUE(subprocess::check_run(diff_bin, "-qruN", data_dir, fsdata_dir));
|
||||||
|
|
||||||
ASSERT_TRUE(subprocess::check_run(mkdwarfs_bin, "-i", fsdata_dir, "-o", image,
|
ASSERT_TRUE(subprocess::check_run(mkdwarfs_bin, "-i", fsdata_dir, "-o", image,
|
||||||
"--no-progress"));
|
"--no-progress"));
|
||||||
@ -547,7 +569,7 @@ TEST(tools, everything) {
|
|||||||
{
|
{
|
||||||
std::string header;
|
std::string header;
|
||||||
|
|
||||||
EXPECT_TRUE(folly::readFile(header_data.string().c_str(), header));
|
EXPECT_TRUE(read_file(header_data, header));
|
||||||
|
|
||||||
auto output = subprocess::check_run(dwarfsck_bin, image_hdr, "-H");
|
auto output = subprocess::check_run(dwarfsck_bin, image_hdr, "-H");
|
||||||
|
|
||||||
@ -567,12 +589,14 @@ TEST(tools, everything) {
|
|||||||
EXPECT_EQ(fs::read_symlink(extracted / "foobar"), fs::path("foo") / "bar");
|
EXPECT_EQ(fs::read_symlink(extracted / "foobar"), fs::path("foo") / "bar");
|
||||||
ASSERT_TRUE(subprocess::check_run(diff_bin, "-qruN", fsdata_dir, extracted));
|
ASSERT_TRUE(subprocess::check_run(diff_bin, "-qruN", fsdata_dir, extracted));
|
||||||
|
|
||||||
auto tarfile = td / "test.tar";
|
// TODO: use only a non-unicode subset?
|
||||||
|
|
||||||
ASSERT_TRUE(subprocess::check_run(dwarfsextract_bin, "-i", image, "-f",
|
// auto tarfile = td / "test.tar";
|
||||||
"gnutar", "-o", tarfile));
|
|
||||||
|
|
||||||
ASSERT_TRUE(fs::create_directory(untared));
|
// ASSERT_TRUE(subprocess::check_run(dwarfsextract_bin, "-i", image, "-f",
|
||||||
ASSERT_TRUE(subprocess::check_run(tar_bin, "xf", tarfile, "-C", untared));
|
// "gnutar", "-o", tarfile));
|
||||||
ASSERT_TRUE(subprocess::check_run(diff_bin, "-qruN", fsdata_dir, untared));
|
|
||||||
|
// ASSERT_TRUE(fs::create_directory(untared));
|
||||||
|
// ASSERT_TRUE(subprocess::check_run(tar_bin, "xf", tarfile, "-C", untared));
|
||||||
|
// ASSERT_TRUE(subprocess::check_run(diff_bin, "-qruN", fsdata_dir, untared));
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user