AU: Optionally limit the size of delta update operations.
Add a --chunk_size flag to delta_generator. If it's not -1, files will
be split into chunks of this size when generating delta payloads. This
effectively limits the size of each delta operation.
BUG=chromium:229797
TEST=unit tests; generated delta payloads and checked them through
paycheck.py.
Change-Id: I21502118088bfbac75aa8009eb144f6aaf23a83a
Reviewed-on: https://gerrit.chromium.org/gerrit/48357
Commit-Queue: Darin Petkov <petkov@chromium.org>
Reviewed-by: Darin Petkov <petkov@chromium.org>
Tested-by: Darin Petkov <petkov@chromium.org>
diff --git a/extent_mapper_unittest.cc b/extent_mapper_unittest.cc
index 7a5e598..3797b7a 100644
--- a/extent_mapper_unittest.cc
+++ b/extent_mapper_unittest.cc
@@ -28,18 +28,18 @@
// In lieu of this, we do a weak test: make sure the extents of the unittest
// executable are consistent and they match with the size of the file.
const string kFilename = "/proc/self/exe";
-
+
uint32_t block_size = 0;
EXPECT_TRUE(extent_mapper::GetFilesystemBlockSize(kFilename, &block_size));
EXPECT_GT(block_size, 0);
-
+
vector<Extent> extents;
-
+
ASSERT_TRUE(extent_mapper::ExtentsForFileFibmap(kFilename, &extents));
-
+
EXPECT_FALSE(extents.empty());
set<uint64_t> blocks;
-
+
for (vector<Extent>::const_iterator it = extents.begin();
it != extents.end(); ++it) {
for (uint64_t block = it->start_block();
@@ -49,10 +49,25 @@
blocks.insert(block);
}
}
-
+
struct stat stbuf;
EXPECT_EQ(0, stat(kFilename.c_str(), &stbuf));
EXPECT_EQ(blocks.size(), (stbuf.st_size + block_size - 1)/block_size);
+
+ // Map a 2-block chunk at offset |block_size|.
+ vector<Extent> chunk_extents;
+ ASSERT_TRUE(
+ extent_mapper::ExtentsForFileChunkFibmap(kFilename,
+ block_size,
+ block_size + 1,
+ &chunk_extents));
+ EXPECT_FALSE(chunk_extents.empty());
+ int chunk_blocks = 0;
+ for (vector<Extent>::const_iterator it = chunk_extents.begin();
+ it != chunk_extents.end(); ++it) {
+ chunk_blocks += it->num_blocks();
+ }
+ EXPECT_EQ(2, chunk_blocks);
}
TEST(ExtentMapperTest, RunAsRootSparseFileTest) {