Make sure ExtentRanges don't merge extents
When querying for XOR merge ops, we want the unmerged extents. E.g.
[5-9] and [10-14] should not be merged into 1 extent, because they could
correspond to different merge ops.
Test: th
Change-Id: I14c4c9fd6bf6361af6cd1e31264bdf860127a75b
diff --git a/payload_consumer/extent_map.h b/payload_consumer/extent_map.h
index 953eed0..b275e2d 100644
--- a/payload_consumer/extent_map.h
+++ b/payload_consumer/extent_map.h
@@ -89,7 +89,7 @@
private:
// Get a range of exents that potentially intersect with parameter |extent|
std::map<Extent, T, Comparator> map_;
- ExtentRanges set_;
+ ExtentRanges set_{false};
};
} // namespace chromeos_update_engine
diff --git a/payload_consumer/extent_map_unittest.cc b/payload_consumer/extent_map_unittest.cc
index 867038b..88a587b 100644
--- a/payload_consumer/extent_map_unittest.cc
+++ b/payload_consumer/extent_map_unittest.cc
@@ -132,4 +132,19 @@
}
}
+TEST_F(ExtentMapTest, GetTouchingExtents) {
+ ASSERT_TRUE(map_.AddExtent(ExtentForRange(5, 5), 7));
+ ASSERT_TRUE(map_.AddExtent(ExtentForRange(10, 5), 12));
+ const auto ret = map_.Get(ExtentForRange(5, 10));
+ if (ret.has_value()) {
+ ASSERT_FALSE(ret.has_value()) << ret.value();
+ }
+ const auto extents = map_.GetIntersectingExtents(ExtentForRange(0, 20));
+ ASSERT_GT(extents.size(), 0UL);
+ ASSERT_EQ(extents.size(), 2UL)
+ << "Expecting unmerged extents [5-9] and [10-14], actual: " << extents;
+ ASSERT_EQ(extents[0], ExtentForRange(5, 5));
+ ASSERT_EQ(extents[1], ExtentForRange(10, 5));
+}
+
} // namespace chromeos_update_engine