From a16436d5d737f65d7dca3335a834ef877b0e9c7b Mon Sep 17 00:00:00 2001 From: Daniel Zheng Date: Tue, 26 Sep 2023 17:22:36 -0700 Subject: [PATCH] Adding test for reader compatibility Reader + Parser v3 should be able to read V2 cow format written to disk. This test reads in a small cow file written by basic_v2_cow_writer and parses it to ensure this compatibility checks out. Test: cow_api_test Change-Id: I46ebf4e3f12cdb3e4716ca5b624aab5836086733 --- fs_mgr/libsnapshot/Android.bp | 3 ++ .../libsnapshot/libsnapshot_cow/test_v2.cpp | 31 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/fs_mgr/libsnapshot/Android.bp b/fs_mgr/libsnapshot/Android.bp index 0131f732e..fe47801f3 100644 --- a/fs_mgr/libsnapshot/Android.bp +++ b/fs_mgr/libsnapshot/Android.bp @@ -415,6 +415,9 @@ cc_test { test_options: { min_shipping_api_level: 30, }, + data: [ + "tools/testdata/cow_v2", + ], auto_gen_config: true, require_root: false, host_supported: true, diff --git a/fs_mgr/libsnapshot/libsnapshot_cow/test_v2.cpp b/fs_mgr/libsnapshot/libsnapshot_cow/test_v2.cpp index e59bd927f..9676bf9b2 100644 --- a/fs_mgr/libsnapshot/libsnapshot_cow/test_v2.cpp +++ b/fs_mgr/libsnapshot/libsnapshot_cow/test_v2.cpp @@ -1504,6 +1504,37 @@ TEST_F(CowTest, InvalidMergeOrderTest) { ASSERT_FALSE(reader.VerifyMergeOps()); } +unique_fd OpenTestFile(const std::string& file, int flags) { + std::string path = "tools/testdata/" + file; + + unique_fd fd(open(path.c_str(), flags)); + if (fd >= 0) { + return fd; + } + + path = android::base::GetExecutableDirectory() + "/" + path; + return unique_fd{open(path.c_str(), flags)}; +} + +TEST_F(CowTest, CompatibilityTest) { + std::string filename = "cow_v2"; + auto fd = OpenTestFile(filename, O_RDONLY); + if (fd.get() == -1) { + LOG(ERROR) << filename << " not found"; + GTEST_SKIP(); + } + CowReader reader; + reader.Parse(fd); + + const auto& header = reader.GetHeader(); + ASSERT_EQ(header.prefix.magic, kCowMagicNumber); + ASSERT_EQ(header.prefix.major_version, kCowVersionMajor); + ASSERT_EQ(header.prefix.minor_version, kCowVersionMinor); + + CowFooter footer; + ASSERT_TRUE(reader.GetFooter(&footer)); +} + } // namespace snapshot } // namespace android