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
diff --git a/fs_mgr/libsnapshot/Android.bp b/fs_mgr/libsnapshot/Android.bp
index 0131f73..fe47801 100644
--- a/fs_mgr/libsnapshot/Android.bp
+++ b/fs_mgr/libsnapshot/Android.bp
@@ -415,6 +415,9 @@
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 e59bd92..9676bf9 100644
--- a/fs_mgr/libsnapshot/libsnapshot_cow/test_v2.cpp
+++ b/fs_mgr/libsnapshot/libsnapshot_cow/test_v2.cpp
@@ -1504,6 +1504,37 @@
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