mirror of
https://github.com/mhx/dwarfs.git
synced 2025-09-10 13:04:15 -04:00
test: add recompression test
This commit is contained in:
parent
d2bb917df6
commit
3575bfbc0e
@ -95,7 +95,8 @@ class mkdwarfs_tester {
|
|||||||
mkdwarfs_tester(std::shared_ptr<test::os_access_mock> pos)
|
mkdwarfs_tester(std::shared_ptr<test::os_access_mock> pos)
|
||||||
: fa{std::make_shared<test::test_file_access>()}
|
: fa{std::make_shared<test::test_file_access>()}
|
||||||
, os{std::move(pos)}
|
, os{std::move(pos)}
|
||||||
, iol{os, fa} {
|
, iol{std::make_unique<test::test_iolayer>(os, fa)}
|
||||||
|
, lgr{std::make_unique<test::test_logger>()} {
|
||||||
setup_locale();
|
setup_locale();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,9 +107,11 @@ class mkdwarfs_tester {
|
|||||||
return mkdwarfs_tester(std::make_shared<test::os_access_mock>());
|
return mkdwarfs_tester(std::make_shared<test::os_access_mock>());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void add_root_dir() { os->add("", {1, 040755, 1, 0, 0, 10, 42, 0, 0, 0}); }
|
||||||
|
|
||||||
int run(std::vector<std::string> args) {
|
int run(std::vector<std::string> args) {
|
||||||
args.insert(args.begin(), "mkdwarfs");
|
args.insert(args.begin(), "mkdwarfs");
|
||||||
return mkdwarfs_main(args, iol.get());
|
return mkdwarfs_main(args, iol->get());
|
||||||
}
|
}
|
||||||
|
|
||||||
int run(std::initializer_list<std::string> args) {
|
int run(std::initializer_list<std::string> args) {
|
||||||
@ -119,7 +122,7 @@ class mkdwarfs_tester {
|
|||||||
|
|
||||||
filesystem_v2 fs_from_data(std::string data) {
|
filesystem_v2 fs_from_data(std::string data) {
|
||||||
auto mm = std::make_shared<test::mmap_mock>(std::move(data));
|
auto mm = std::make_shared<test::mmap_mock>(std::move(data));
|
||||||
return filesystem_v2(lgr, mm);
|
return filesystem_v2(*lgr, mm);
|
||||||
}
|
}
|
||||||
|
|
||||||
filesystem_v2 fs_from_file(std::string path) {
|
filesystem_v2 fs_from_file(std::string path) {
|
||||||
@ -130,13 +133,15 @@ class mkdwarfs_tester {
|
|||||||
return fs_from_data(std::move(fsimage.value()));
|
return fs_from_data(std::move(fsimage.value()));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string out() const { return iol.out(); }
|
filesystem_v2 fs_from_stdout() { return fs_from_data(out()); }
|
||||||
std::string err() const { return iol.err(); }
|
|
||||||
|
std::string out() const { return iol->out(); }
|
||||||
|
std::string err() const { return iol->err(); }
|
||||||
|
|
||||||
std::shared_ptr<test::test_file_access> fa;
|
std::shared_ptr<test::test_file_access> fa;
|
||||||
std::shared_ptr<test::os_access_mock> os;
|
std::shared_ptr<test::os_access_mock> os;
|
||||||
test::test_iolayer iol;
|
std::unique_ptr<test::test_iolayer> iol;
|
||||||
test::test_logger lgr;
|
std::unique_ptr<test::test_logger> lgr;
|
||||||
};
|
};
|
||||||
|
|
||||||
std::optional<filesystem_v2>
|
std::optional<filesystem_v2>
|
||||||
@ -331,7 +336,7 @@ TEST_P(mkdwarfs_input_list_test, basic) {
|
|||||||
t.fa->set_file(input_file, input_list);
|
t.fa->set_file(input_file, input_list);
|
||||||
} else {
|
} else {
|
||||||
input_file = "-";
|
input_file = "-";
|
||||||
t.iol.set_in(input_list);
|
t.iol->set_in(input_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPECT_EQ(0, t.run({"--input-list", input_file, "-o", image_file}));
|
EXPECT_EQ(0, t.run({"--input-list", input_file, "-o", image_file}));
|
||||||
@ -371,7 +376,7 @@ TEST_P(categorizer_test, end_to_end) {
|
|||||||
|
|
||||||
auto t = mkdwarfs_tester::create_empty();
|
auto t = mkdwarfs_tester::create_empty();
|
||||||
|
|
||||||
t.os->add("", {1, 040755, 1, 0, 0, 10, 42, 0, 0, 0});
|
t.add_root_dir();
|
||||||
t.os->add_local_files(audio_data_dir);
|
t.os->add_local_files(audio_data_dir);
|
||||||
t.os->add_file("random", 4096, true);
|
t.os->add_file("random", 4096, true);
|
||||||
|
|
||||||
@ -558,3 +563,58 @@ TEST(mkdwarfs_test, cannot_open_input_list_file) {
|
|||||||
EXPECT_NE(0, t.run({"--input-list", "missing.list", "-o", "-"}));
|
EXPECT_NE(0, t.run({"--input-list", "missing.list", "-o", "-"}));
|
||||||
EXPECT_THAT(t.err(), ::testing::HasSubstr("cannot open input list file"));
|
EXPECT_THAT(t.err(), ::testing::HasSubstr("cannot open input list file"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(mkdwarfs_test, recompress) {
|
||||||
|
std::string const image_file = "test.dwarfs";
|
||||||
|
std::string image;
|
||||||
|
|
||||||
|
{
|
||||||
|
mkdwarfs_tester t;
|
||||||
|
t.os->add_local_files(audio_data_dir);
|
||||||
|
t.os->add_file("random", 4096, true);
|
||||||
|
ASSERT_EQ(0, t.run({"-i", "/", "-o", image_file, "--categorize"}))
|
||||||
|
<< t.err();
|
||||||
|
auto img = t.fa->get_file(image_file);
|
||||||
|
EXPECT_TRUE(img);
|
||||||
|
image = std::move(img.value());
|
||||||
|
}
|
||||||
|
|
||||||
|
auto tester = [&] {
|
||||||
|
auto t = mkdwarfs_tester::create_empty();
|
||||||
|
t.add_root_dir();
|
||||||
|
t.os->add_file(image_file, image);
|
||||||
|
return t;
|
||||||
|
};
|
||||||
|
|
||||||
|
{
|
||||||
|
auto t = tester();
|
||||||
|
ASSERT_EQ(0, t.run({"-i", image_file, "-o", "-", "--recompress", "-l0"}))
|
||||||
|
<< t.err();
|
||||||
|
auto fs = t.fs_from_stdout();
|
||||||
|
EXPECT_TRUE(fs.find("/random"));
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
auto t = tester();
|
||||||
|
EXPECT_NE(0, t.run({"-i", image_file, "-o", "-", "--recompress=foo"}));
|
||||||
|
EXPECT_THAT(t.err(), ::testing::HasSubstr("invalid recompress mode"));
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
auto t = tester();
|
||||||
|
ASSERT_EQ(0, t.run({"-i", image_file, "-o", "-", "--recompress=metadata"}))
|
||||||
|
<< t.err();
|
||||||
|
auto fs = t.fs_from_stdout();
|
||||||
|
EXPECT_TRUE(fs.find("/random"));
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
auto t = tester();
|
||||||
|
ASSERT_EQ(0, t.run({"-i", image_file, "-o", "-", "--recompress=block",
|
||||||
|
"--recompress-categories=!pcmaudio/waveform", "-C",
|
||||||
|
"pcmaudio/metadata::null"}))
|
||||||
|
<< t.err();
|
||||||
|
auto fs = t.fs_from_stdout();
|
||||||
|
EXPECT_TRUE(fs.find("/random"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user