From ea3745fd82f10afd5b0a3789713539a23d4d5110 Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Sat, 24 Aug 2024 22:53:49 +0200 Subject: [PATCH] test: move compat images, clean up and extend compat tests --- src/reader/internal/metadata_v2.cpp | 2 +- test/{ => compat}/compat-v0.2.0.dwarfs | Bin test/{ => compat}/compat-v0.2.3.dwarfs | Bin test/{ => compat}/compat-v0.3.0.dwarfs | Bin test/{ => compat}/compat-v0.4.0.dwarfs | Bin test/{ => compat}/compat-v0.4.1.dwarfs | Bin test/compat/compat-v0.5.6.dwarfs | Bin 0 -> 3843 bytes test/compat/compat-v0.6.2.dwarfs | Bin 0 -> 3913 bytes test/compat/compat-v0.7.5.dwarfs | Bin 0 -> 3944 bytes test/compat/compat-v0.8.0.dwarfs | Bin 0 -> 4317 bytes test/compat/compat-v0.9.10.dwarfs | Bin 0 -> 4467 bytes test/{ => compat}/setuidgid-v0.4.1.dwarfs | Bin test/{ => compat}/setuidgid-v0.5.6.dwarfs | Bin test/compat_test.cpp | 71 +++++++++++++++++----- 14 files changed, 58 insertions(+), 15 deletions(-) rename test/{ => compat}/compat-v0.2.0.dwarfs (100%) rename test/{ => compat}/compat-v0.2.3.dwarfs (100%) rename test/{ => compat}/compat-v0.3.0.dwarfs (100%) rename test/{ => compat}/compat-v0.4.0.dwarfs (100%) rename test/{ => compat}/compat-v0.4.1.dwarfs (100%) create mode 100644 test/compat/compat-v0.5.6.dwarfs create mode 100644 test/compat/compat-v0.6.2.dwarfs create mode 100644 test/compat/compat-v0.7.5.dwarfs create mode 100644 test/compat/compat-v0.8.0.dwarfs create mode 100644 test/compat/compat-v0.9.10.dwarfs rename test/{ => compat}/setuidgid-v0.4.1.dwarfs (100%) rename test/{ => compat}/setuidgid-v0.5.6.dwarfs (100%) diff --git a/src/reader/internal/metadata_v2.cpp b/src/reader/internal/metadata_v2.cpp index ecffab154..468a6b36d 100644 --- a/src/reader/internal/metadata_v2.cpp +++ b/src/reader/internal/metadata_v2.cpp @@ -1147,7 +1147,7 @@ template nlohmann::json metadata_::info_as_json(fsinfo_options const& opts, filesystem_info const* fsinfo) const { - auto info = nlohmann::json::object(); + nlohmann::json info; vfs_stat stbuf; statvfs(&stbuf); diff --git a/test/compat-v0.2.0.dwarfs b/test/compat/compat-v0.2.0.dwarfs similarity index 100% rename from test/compat-v0.2.0.dwarfs rename to test/compat/compat-v0.2.0.dwarfs diff --git a/test/compat-v0.2.3.dwarfs b/test/compat/compat-v0.2.3.dwarfs similarity index 100% rename from test/compat-v0.2.3.dwarfs rename to test/compat/compat-v0.2.3.dwarfs diff --git a/test/compat-v0.3.0.dwarfs b/test/compat/compat-v0.3.0.dwarfs similarity index 100% rename from test/compat-v0.3.0.dwarfs rename to test/compat/compat-v0.3.0.dwarfs diff --git a/test/compat-v0.4.0.dwarfs b/test/compat/compat-v0.4.0.dwarfs similarity index 100% rename from test/compat-v0.4.0.dwarfs rename to test/compat/compat-v0.4.0.dwarfs diff --git a/test/compat-v0.4.1.dwarfs b/test/compat/compat-v0.4.1.dwarfs similarity index 100% rename from test/compat-v0.4.1.dwarfs rename to test/compat/compat-v0.4.1.dwarfs diff --git a/test/compat/compat-v0.5.6.dwarfs b/test/compat/compat-v0.5.6.dwarfs new file mode 100644 index 0000000000000000000000000000000000000000..874f26efff964f0639345c0ae0658844f95ec894 GIT binary patch literal 3843 zcmb7Hdu$ZP8J~M_wikz(V{9D1GIkv9YN>vp#Qqm9+8ff!JrJ|y$MJP#=CQYiQRhkwlrQgh) z?FG{)S?{jD{e8dro-=d1yDkY^+DJ7}WZfTFCNq5wSW2zpGDOO5K zs(OOh)Uw0GGUH*Q>TxZbpkWfSa~VpKB%~{8N&=1Y&Uk9LF+lDo6N))%kx+uv2ZrR2 z>5QF=CREc34w_l&7!8RlSp~=?#ii_FDnT}W>F`~lifRhcozDPIpic_FfsysLG zqA6HytYaLVWX)otNt1CStK0DCaK?(y9A>yf-fS!Ah;*hoH~57?FonT!Mi}eO?;j7o zdu*$`@5$tXU4K6?eCI#xwXfg$;U_xhZEz9nH1ZGoR`CPIumC5 zNLbY^ThTNUGDuvBr>Lb)((aZ~_B?Kwdmygv6(p1-%Op#qG(%b>Xoz)=MkGYD zl9f#uWR{kKbz{OFNJ%J80$i6(vxbm)-UB3*A%Xv=?IPFZ5E3DG&3J;rIuUt=CM`Qb z>NMCwTjqNSH^Lv=omt{-jq|tLklsQ%9t|Bsn@VP9W7U))v_8c9L55 zqcqPA6ozlSWVnmiDXM>dqq^7{a+ZVv&h9bgm+&?_JfGjpn(XC2X|0Ppe*4wia{#m z(jt%~E|q{(R_O-2i@05ci`XDPz`~-03&3JAw^$-9f>Z3{qsu^Q=TbRHkxK7?7h@n5 zLX-=T1or~82$u<)6+o%tQA&;|%Z1G%m5=8UpR3~lE$R(sLY70^={(+RM<(v^n+SP6ia_ek(M1@G?J;jB2U>kHZN z9)N4|g_)ZScMF#hP!fl!9${)Vz!f}+UXZFBgw=x3Hw&}aSyL7>U;O~rIM{uHy$;}r z1C|9m0B{|Lg%L>@*$6P<0ec!u|M=2g!IHKITEqcnkis2eslI_ysSE9}l6K z9q4a?W zRs_cn|MT!W&)=_Z+E?+rHSaH<_$B(|#h&ivpA0|K`r*gVX&e9W=+;wDefD%y$yD{j z1(92%!dG3ca)Mmm$TT`obhNqyfAHk^rRJB5^*j4qZ}*qp_TJg&syl{GPp?0}cWd=q z>tF5C-Y^PI`{U=9dlx^{d(WedtsARRp?7Ku)t4Zbd+=?k7{YOlTvpuUyzvu#|HQ=l1;f8>|Jv5EwL`z(Q1dVK+0xaT8q2>l zjWx?{a(hebS5~yOcXZyRz-B@t817}et`*-FJUh2OKWSUhfIa`2FVHwenP z$z<9FAZZwI!XWW+2gqnj-MvR+ZyD_MBt$1@9MFuKq3jb<&g3TG03=a0j2I=EyC4roruh D!3fyA literal 0 HcmV?d00001 diff --git a/test/compat/compat-v0.6.2.dwarfs b/test/compat/compat-v0.6.2.dwarfs new file mode 100644 index 0000000000000000000000000000000000000000..5d582b1c21e6e9c5912f3752858a4d1a2a7db643 GIT binary patch literal 3913 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 RkIR+_#H6UA zMu?evEj;A8jPrPP2NlBD=RXIV4yVAEY9P6)ilW&q?SsyTnH$uwYeX5&; z7^cXZA&G4Bl zt_=)O-KVHg%~NK^6obGwnKomZT3T9GAx#+wYid*(Na>VYs3PLtVo5N3RFy+<8Z?xI z5|?$wOnWN04dyHZF{l~T^a#~GQ3ar!3?{S)^%-GZNt#uJAvi-DqPng`=xuH2Gy(D; zO(e~9Frw&&r&~`^i#8-Kr{bn13vg(HUsi-FLRC{wTQbPhB0@u{0Z+6{V4KK89Op~Q zX3SHuoovk9vu444KNN}O#ttPaZ2E+ZG&d7B#08zu^t7AE(05^rHP}-jzKizPG#za=G01|mFGewe0&Vi=018lFr6ESw6m zlvHcW>g(&Lv(JRc!P7B{MvH#yZBiBdl4B)M+%VrBoAcEzVf+nZqP^$eV3=ERjw&=N7-91S1TNlfqbQX8(Bf z(xLUf?R%ryo38Hc|MEZ0d(X}N`;8NOmgKxu`;X(!j~6T-&wt_Zc_$yWW%iHmEI|l2 znM&#urr)3uPo{3uMK#P+Gqdt?kP>g0xVbEqU=1NNyt|1vN!4G9Wl%Z zDT~7vS~Js&zY;!dcV>y#SI*pSy=o2dcGlDqBgSLyE3YQrA+pjRp+kN(6_2~i?kLds zNJ74Cm`w1w1pzHqOHnSbNsPf1%y_1WnF7RpQ`{K^z1ge4Ns^@_+X$rk#o7X!-9}Q% z9!fLZKwgk~mcWRAI3l?B;X32che1`4@ zw&;|@G8AlhLD&PrI&P|qd*~J`s~6Y}77snb!v=H4&Xo7kq0;8%XUw)x-J`&ZSLTzsZl7C!^22^V^J!ZkWN;o7`o!bQ^X3n%HDJ~ziET)%r_rOnY} zBHO-p#NLAL`pApM>i=syGd$svL4GIa2>Acx+52sD%@!Lf$a&3bZo~ipU*Gc!GBVH^Bgv1?3kR?8$Ubo z*b6s~{`BH~@5-yM1Y6I#y!)3tymq|svFmSs5PNpP{$T#a5C8SSdiIFSh10{7Ek_{p W?0lU)Na1PPlgEBxrsuNXT=YL00{vwG literal 0 HcmV?d00001 diff --git a/test/compat/compat-v0.8.0.dwarfs b/test/compat/compat-v0.8.0.dwarfs new file mode 100644 index 0000000000000000000000000000000000000000..e5ff0574f3c5e88cccbd811428d3f630b730ee5d GIT binary patch literal 4317 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 Z&Qfroy0)DCmZFyF>{mdZ8SJ+V{SQ+Pn2P`a literal 0 HcmV?d00001 diff --git a/test/setuidgid-v0.4.1.dwarfs b/test/compat/setuidgid-v0.4.1.dwarfs similarity index 100% rename from test/setuidgid-v0.4.1.dwarfs rename to test/compat/setuidgid-v0.4.1.dwarfs diff --git a/test/setuidgid-v0.5.6.dwarfs b/test/compat/setuidgid-v0.5.6.dwarfs similarity index 100% rename from test/setuidgid-v0.5.6.dwarfs rename to test/compat/setuidgid-v0.5.6.dwarfs diff --git a/test/compat_test.cpp b/test/compat_test.cpp index daa759f40..fa345f66c 100644 --- a/test/compat_test.cpp +++ b/test/compat_test.cpp @@ -61,10 +61,38 @@ using namespace dwarfs; namespace fs = std::filesystem; +/*------------------------------------------------------------------------------ + +Command line options used to create the 0.4.1 and later images: + +$ mkdwarfs -i @compat -o compat-vx.y.z.dwarfs --with-devices --with-specials \ + -S10 -l0 -W5 --order=similarity + +------------------------------------------------------------------------------*/ + namespace { auto test_dir = fs::path(TEST_DATA_DIR).make_preferred(); +template +void walk_json(nlohmann::json& j, F f) { + for (auto& [k, v] : j.items()) { + f(v); + + if (v.is_structured()) { + walk_json(v, f); + } + } +} + +void remove_inode_numbers(nlohmann::json& j) { + walk_json(j, [](nlohmann::json& j) { + if (j.contains("inode")) { + j.erase("inode"); + } + }); +} + char const* reference_v0_2 = R"( { "root": { @@ -414,7 +442,7 @@ char const* reference_v0_2 = R"( } )"; -char const* reference = R"( +char const* reference_v0_4 = R"( { "root": { "inode": 0, @@ -789,6 +817,7 @@ char const* reference = R"( std::vector versions{ "0.2.0", "0.2.3", "0.3.0", "0.4.0", "0.4.1", + "0.5.6", "0.6.2", "0.7.5", "0.8.0", "0.9.10", }; std::string format_sh = R"(#!/bin/bash @@ -839,16 +868,22 @@ void walk_tree(reader::filesystem_v2 const& fs, T& cb, } void check_compat(logger& lgr, reader::filesystem_v2 const& fs, - std::string const& version) { + std::string const& version, bool enable_nlink) { bool has_devices = not(version == "0.2.0" or version == "0.2.3"); bool has_ac_time = version == "0.2.0" or version == "0.2.3"; + bool nlink_affects_blocks = + not(version.starts_with("0.2.") or version.starts_with("0.3.") or + version.starts_with("0.4.")); + + auto const expected_blocks = + nlink_affects_blocks and enable_nlink ? 2747 : 10614; vfs_stat vfsbuf; fs.statvfs(&vfsbuf); EXPECT_EQ(1, vfsbuf.bsize); EXPECT_EQ(1, vfsbuf.frsize); - EXPECT_EQ(10614, vfsbuf.blocks); + EXPECT_EQ(expected_blocks, vfsbuf.blocks); EXPECT_EQ(33 + 3 * has_devices, vfsbuf.files); EXPECT_TRUE(vfsbuf.readonly); EXPECT_GT(vfsbuf.namemax, 0); @@ -1149,6 +1184,10 @@ void check_compat(logger& lgr, reader::filesystem_v2 const& fs, } } +auto get_image_path(std::string const& version) { + return test_dir / "compat" / fmt::format("compat-v{}.dwarfs", version); +} + } // namespace class compat_metadata : public testing::TestWithParam {}; @@ -1157,17 +1196,21 @@ void check_dynamic(std::string const& version, reader::filesystem_v2 const& fs) { auto meta = fs.metadata_as_json(); nlohmann::json ref; - if (version == "0.2.0" or version == "0.2.3") { + if (version.starts_with("0.2.")) { ref = nlohmann::json::parse(reference_v0_2); } else { - ref = nlohmann::json::parse(reference); + ref = nlohmann::json::parse(reference_v0_4); } - EXPECT_EQ(ref, meta); + + remove_inode_numbers(ref); + remove_inode_numbers(meta); + + EXPECT_EQ(ref, meta) << nlohmann::json::diff(ref, meta).dump(2); } TEST_P(compat_metadata, backwards_compat) { auto version = GetParam(); - auto filename = std::string(TEST_DATA_DIR "/compat-v") + version + ".dwarfs"; + auto filename = get_image_path(version); test::test_logger lgr; test::os_access_mock os; reader::filesystem_v2 fs(lgr, os, std::make_shared(filename)); @@ -1185,7 +1228,7 @@ TEST_P(compat_filesystem, backwards_compat) { test::test_logger lgr; test::os_access_mock os; - auto filename = std::string(TEST_DATA_DIR "/compat-v") + version + ".dwarfs"; + auto filename = get_image_path(version); reader::filesystem_options opts; opts.metadata.enable_nlink = enable_nlink; @@ -1193,25 +1236,25 @@ TEST_P(compat_filesystem, backwards_compat) { { reader::filesystem_v2 fs(lgr, os, std::make_shared(filename), opts); - check_compat(lgr, fs, version); + check_compat(lgr, fs, version, enable_nlink); } opts.image_offset = reader::filesystem_options::IMAGE_OFFSET_AUTO; std::string fsdata; - ASSERT_TRUE(folly::readFile(filename.c_str(), fsdata)); + ASSERT_TRUE(folly::readFile(filename.string().c_str(), fsdata)); for (auto const& hdr : headers) { reader::filesystem_v2 fs( lgr, os, std::make_shared(hdr + fsdata), opts); - check_compat(lgr, fs, version); + check_compat(lgr, fs, version, enable_nlink); } if (version != "0.2.0" and version != "0.2.3") { for (auto const& hdr : headers_v2) { reader::filesystem_v2 fs( lgr, os, std::make_shared(hdr + fsdata), opts); - check_compat(lgr, fs, version); + check_compat(lgr, fs, version, enable_nlink); } } } @@ -1228,7 +1271,7 @@ TEST_P(rewrite, filesystem_rewrite) { test::test_logger lgr; test::os_access_mock os; - auto filename = std::string(TEST_DATA_DIR "/compat-v") + version + ".dwarfs"; + auto filename = get_image_path(version); utility::rewrite_options opts; opts.recompress_block = recompress_block; @@ -1377,7 +1420,7 @@ INSTANTIATE_TEST_SUITE_P(dwarfs_compat, rewrite, class set_uidgid_test : public testing::TestWithParam {}; TEST_P(set_uidgid_test, read_legacy_image) { - auto image = test_dir / GetParam(); + auto image = test_dir / "compat" / GetParam(); test::test_logger lgr; test::os_access_mock os;