Add support for bsdiff of file system metadata blocks
BUG=chromium-os:10188
TEST=Unit test, build delta update, apply to Mario and make sure it
boots with new version
Change-Id: I37b3fcc3c0e65e063cd95b0b3c9a5cd2261c98c9
Review URL: http://codereview.chromium.org/5684002
diff --git a/test_utils.cc b/test_utils.cc
index c1bdb48..9d1b5d0 100644
--- a/test_utils.cc
+++ b/test_utils.cc
@@ -178,6 +178,16 @@
}
}
+void CreateEmptyExtImageAtPath(const string& path,
+ size_t size,
+ int block_size) {
+ EXPECT_EQ(0, System(StringPrintf("dd if=/dev/zero of=%s"
+ " seek=%zu bs=1 count=1",
+ path.c_str(), size)));
+ EXPECT_EQ(0, System(StringPrintf("mkfs.ext3 -b %d -F %s",
+ block_size, path.c_str())));
+}
+
void CreateExtImageAtPath(const string& path, vector<string>* out_paths) {
// create 10MiB sparse file
EXPECT_EQ(0, System(StringPrintf("dd if=/dev/zero of=%s"
@@ -199,7 +209,7 @@
EXPECT_EQ(0, System(StringPrintf("ln %s/some_dir/test %s/testlink",
kMountPath, kMountPath)));
EXPECT_EQ(0, System(StringPrintf("umount -d %s", kMountPath)));
-
+
if (out_paths) {
out_paths->clear();
out_paths->push_back("");
@@ -263,4 +273,19 @@
}
}
+ScopedLoopMounter::ScopedLoopMounter(const std::string& file_path,
+ std::string* mnt_path,
+ unsigned long flags) {
+ EXPECT_TRUE(utils::MakeTempDirectory("/tmp/mnt.XXXXXX", mnt_path));
+ dir_remover_.reset(new ScopedDirRemover(*mnt_path));
+
+ std::string loop_dev = GetUnusedLoopDevice();
+ EXPECT_EQ(0, system(StringPrintf("losetup %s %s", loop_dev.c_str(),
+ file_path.c_str()).c_str()));
+ loop_releaser_.reset(new ScopedLoopbackDeviceReleaser(loop_dev));
+
+ EXPECT_TRUE(utils::MountFilesystem(loop_dev, *mnt_path, flags));
+ unmounter_.reset(new ScopedFilesystemUnmounter(*mnt_path));
+}
+
} // namespace chromeos_update_engine