@@ -218,6 +218,39 @@ TEST_F(LibRadosIoPP, SparseReadOpPP) {
218218 }
219219}
220220
221+ TEST_F (LibRadosIoPP, SparseReadExtentArrayOpPP) {
222+ int buf_len = 32 ;
223+ char buf[buf_len], zbuf[buf_len];
224+ memset (buf, 0xcc , buf_len);
225+ memset (zbuf, 0 , buf_len);
226+ bufferlist bl;
227+ int i, len = 1024 , skip = 5 ;
228+ bl.append (buf, buf_len);
229+ for (i = 0 ; i < len; i++) {
230+ if (!(i % skip) || i == (len - 1 )) {
231+ ASSERT_EQ (0 , ioctx.write (" sparse-read" , bl, bl.length (), i * buf_len));
232+ }
233+ }
234+
235+ bufferlist expect_bl;
236+ for (i = 0 ; i < len; i++) {
237+ if (!(i % skip) || i == (len - 1 )) {
238+ expect_bl.append (buf, buf_len);
239+ } else {
240+ expect_bl.append (zbuf, buf_len);
241+ }
242+ }
243+
244+ std::map<uint64_t , uint64_t > extents;
245+ bufferlist read_bl;
246+ int rval = -1 ;
247+ ObjectReadOperation op;
248+ op.sparse_read (0 , len * buf_len, &extents, &read_bl, &rval);
249+ ASSERT_EQ (0 , ioctx.operate (" sparse-read" , &op, nullptr ));
250+ ASSERT_EQ (0 , rval);
251+ assert_eq_sparse (expect_bl, extents, read_bl);
252+ }
253+
221254TEST_F (LibRadosIoPP, RoundTripPP) {
222255 char buf[128 ];
223256 Rados cluster;
0 commit comments