}
}
+TEST_F(LibRadosIoPP, SparseReadExtentArrayOpPP) {
+ int buf_len = 32;
+ char buf[buf_len], zbuf[buf_len];
+ memset(buf, 0xcc, buf_len);
+ memset(zbuf, 0, buf_len);
+ bufferlist bl;
+ int i, len = 1024, skip = 5;
+ bl.append(buf, buf_len);
+ for (i = 0; i < len; i++) {
+ if (!(i % skip) || i == (len - 1)) {
+ ASSERT_EQ(0, ioctx.write("sparse-read", bl, bl.length(), i * buf_len));
+ }
+ }
+
+ bufferlist expect_bl;
+ for (i = 0; i < len; i++) {
+ if (!(i % skip) || i == (len - 1)) {
+ expect_bl.append(buf, buf_len);
+ } else {
+ expect_bl.append(zbuf, buf_len);
+ }
+ }
+
+ std::map<uint64_t, uint64_t> extents;
+ bufferlist read_bl;
+ int rval = -1;
+ ObjectReadOperation op;
+ op.sparse_read(0, len * buf_len, &extents, &read_bl, &rval);
+ ASSERT_EQ(0, ioctx.operate("sparse-read", &op, nullptr));
+ ASSERT_EQ(0, rval);
+ assert_eq_sparse(expect_bl, extents, read_bl);
+}
+
TEST_F(LibRadosIoPP, RoundTripPP) {
char buf[128];
Rados cluster;