@@ -2070,6 +2070,97 @@ TEST_F(TestMockIoObjectRequest, ListSnapsNoSnapsInSnapSet) {
20702070 EXPECT_EQ (expected_snapshot_delta, snapshot_delta);
20712071}
20722072
2073+ TEST (SparseExtents, Split) {
2074+ SparseExtents extents;
2075+ extents.insert (50 , 100 , {SPARSE_EXTENT_STATE_DATA, 100 });
2076+ extents.erase (80 , 30 );
2077+ extents.insert (45 , 10 , {SPARSE_EXTENT_STATE_ZEROED, 10 });
2078+ extents.insert (140 , 20 , {SPARSE_EXTENT_STATE_DNE, 20 });
2079+ extents.insert (125 , 5 , {SPARSE_EXTENT_STATE_ZEROED, 5 });
2080+
2081+ SparseExtents expected_extents = {
2082+ {45 , {10 , {SPARSE_EXTENT_STATE_ZEROED, 10 }}},
2083+ {55 , {25 , {SPARSE_EXTENT_STATE_DATA, 25 }}},
2084+ {110 , {15 , {SPARSE_EXTENT_STATE_DATA, 15 }}},
2085+ {125 , {5 , {SPARSE_EXTENT_STATE_ZEROED, 5 }}},
2086+ {130 , {10 , {SPARSE_EXTENT_STATE_DATA, 10 }}},
2087+ {140 , {20 , {SPARSE_EXTENT_STATE_DNE, 20 }}}
2088+ };
2089+ EXPECT_EQ (expected_extents, extents);
2090+ }
2091+
2092+ TEST (SparseBufferlist, Split) {
2093+ bufferlist bl;
2094+ bl.append (std::string (5 , ' 1' ));
2095+ bl.append (std::string (25 , ' 2' ));
2096+ bl.append (std::string (30 , ' 3' ));
2097+ bl.append (std::string (15 , ' 4' ));
2098+ bl.append (std::string (5 , ' 5' ));
2099+ bl.append (std::string (10 , ' 6' ));
2100+ bl.append (std::string (10 , ' 7' ));
2101+ bufferlist expected_bl1;
2102+ expected_bl1.append (std::string (25 , ' 2' ));
2103+ bufferlist expected_bl2;
2104+ expected_bl2.append (std::string (15 , ' 4' ));
2105+ bufferlist expected_bl3;
2106+ expected_bl3.append (std::string (10 , ' 6' ));
2107+
2108+ SparseBufferlist extents;
2109+ extents.insert (50 , 100 , {SPARSE_EXTENT_STATE_DATA, 100 , std::move (bl)});
2110+ extents.erase (80 , 30 );
2111+ extents.insert (45 , 10 , {SPARSE_EXTENT_STATE_ZEROED, 10 });
2112+ extents.insert (140 , 20 , {SPARSE_EXTENT_STATE_DNE, 20 });
2113+ extents.insert (125 , 5 , {SPARSE_EXTENT_STATE_ZEROED, 5 });
2114+
2115+ SparseBufferlist expected_extents = {
2116+ {45 , {10 , {SPARSE_EXTENT_STATE_ZEROED, 10 }}},
2117+ {55 , {25 , {SPARSE_EXTENT_STATE_DATA, 25 , std::move (expected_bl1)}}},
2118+ {110 , {15 , {SPARSE_EXTENT_STATE_DATA, 15 , std::move (expected_bl2)}}},
2119+ {125 , {5 , {SPARSE_EXTENT_STATE_ZEROED, 5 }}},
2120+ {130 , {10 , {SPARSE_EXTENT_STATE_DATA, 10 , std::move (expected_bl3)}}},
2121+ {140 , {20 , {SPARSE_EXTENT_STATE_DNE, 20 }}}
2122+ };
2123+ EXPECT_EQ (expected_extents, extents);
2124+ }
2125+
2126+ TEST (SparseBufferlist, SplitData) {
2127+ bufferlist bl1;
2128+ bl1.append (std::string (100 , ' 1' ));
2129+ bufferlist bl2;
2130+ bl2.append (std::string (15 , ' 2' ));
2131+ bufferlist bl3;
2132+ bl3.append (std::string (40 , ' 3' ));
2133+ bufferlist bl4;
2134+ bl4.append (std::string (10 , ' 4' ));
2135+ bufferlist expected_bl1 = bl2;
2136+ bufferlist expected_bl2;
2137+ expected_bl2.append (std::string (35 , ' 1' ));
2138+ bufferlist expected_bl3 = bl4;
2139+ bufferlist expected_bl4;
2140+ expected_bl4.append (std::string (30 , ' 1' ));
2141+ bufferlist expected_bl5;
2142+ expected_bl5.append (std::string (5 , ' 3' ));
2143+ bufferlist expected_bl6;
2144+ expected_bl6.append (std::string (15 , ' 3' ));
2145+
2146+ SparseBufferlist extents;
2147+ extents.insert (50 , 100 , {SPARSE_EXTENT_STATE_DATA, 100 , std::move (bl1)});
2148+ extents.insert (40 , 15 , {SPARSE_EXTENT_STATE_DATA, 15 , std::move (bl2)});
2149+ extents.insert (130 , 40 , {SPARSE_EXTENT_STATE_DATA, 40 , std::move (bl3)});
2150+ extents.erase (135 , 20 );
2151+ extents.insert (90 , 10 , {SPARSE_EXTENT_STATE_DATA, 10 , std::move (bl4)});
2152+
2153+ SparseBufferlist expected_extents = {
2154+ {40 , {15 , {SPARSE_EXTENT_STATE_DATA, 15 , std::move (expected_bl1)}}},
2155+ {55 , {35 , {SPARSE_EXTENT_STATE_DATA, 35 , std::move (expected_bl2)}}},
2156+ {90 , {10 , {SPARSE_EXTENT_STATE_DATA, 10 , std::move (expected_bl3)}}},
2157+ {100 , {30 , {SPARSE_EXTENT_STATE_DATA, 30 , std::move (expected_bl4)}}},
2158+ {130 , {5 , {SPARSE_EXTENT_STATE_DATA, 5 , std::move (expected_bl5)}}},
2159+ {155 , {15 , {SPARSE_EXTENT_STATE_DATA, 15 , std::move (expected_bl6)}}}
2160+ };
2161+ EXPECT_EQ (expected_extents, extents);
2162+ }
2163+
20732164} // namespace io
20742165} // namespace librbd
20752166
0 commit comments