Index: test_utils.cc |
diff --git a/test_utils.cc b/test_utils.cc |
index c1bdb48063f43bab01aef4852aa4ed4b262edb42..9d1b5d00dce2f04308f5d3e95298fe03e3ad6503 100644 |
--- a/test_utils.cc |
+++ b/test_utils.cc |
@@ -178,6 +178,16 @@ void FillWithData(vector<char>* buffer) { |
} |
} |
+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 @@ void CreateExtImageAtPath(const string& path, vector<string>* out_paths) { |
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 @@ void VerifyAllPaths(const string& parent, set<string> expected_paths) { |
} |
} |
+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 |