}
}
+TEST(BufferListIterator, iterate_with_empties) {
+ ceph::bufferlist bl;
+ EXPECT_EQ(bl.get_num_buffers(), 0u);
+
+ bl.push_back(ceph::buffer::create(0));
+ EXPECT_EQ(bl.length(), 0u);
+ EXPECT_EQ(bl.get_num_buffers(), 1u);
+
+ encode(42l, bl);
+ EXPECT_EQ(bl.get_num_buffers(), 2u);
+
+ bl.push_back(ceph::buffer::create(0));
+ EXPECT_EQ(bl.get_num_buffers(), 3u);
+
+ // append bufferlist with single, 0-sized ptr inside
+ {
+ ceph::bufferlist bl_with_empty_ptr;
+ bl_with_empty_ptr.push_back(ceph::buffer::create(0));
+ EXPECT_EQ(bl_with_empty_ptr.length(), 0u);
+ EXPECT_EQ(bl_with_empty_ptr.get_num_buffers(), 1u);
+
+ bl.append(bl_with_empty_ptr);
+ }
+
+ encode(24l, bl);
+ EXPECT_EQ(bl.get_num_buffers(), 5u);
+
+ auto i = bl.cbegin();
+ long val;
+ decode(val, i);
+ EXPECT_EQ(val, 42l);
+
+ decode(val, i);
+ EXPECT_EQ(val, 24l);
+
+ val = 0;
+ i.seek(sizeof(long));
+ decode(val, i);
+ EXPECT_EQ(val, 24l);
+ EXPECT_TRUE(i == bl.end());
+
+ i.seek(0);
+ decode(val, i);
+ EXPECT_EQ(val, 42);
+ EXPECT_FALSE(i == bl.end());
+}
+
TEST(BufferListIterator, get_ptr_and_advance)
{
bufferptr a("one", 3);