From a42e4fb1591b4f582df772c20ff8a76e850c5201 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 28 Jan 2014 10:09:17 -0800 Subject: [PATCH] osdc/Striper: test zero-length add_partial_result If we add a partial result that is 0-length, we used to hit an assert in buffer::list::splice(). Add a unit test to verify the fix. Signed-off-by: Sage Weil Reviewed-by: Greg Farnum (cherry picked from commit 28c7388d320a47657c2e12c46907f1bf40672b08) --- src/test/test_striper.cc | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/test/test_striper.cc b/src/test/test_striper.cc index 262fba326aa7a..2e6b0bc47622d 100644 --- a/src/test/test_striper.cc +++ b/src/test/test_striper.cc @@ -26,6 +26,37 @@ TEST(Striper, Stripe1) ASSERT_EQ(94208u, ex[2].truncate_size); } +TEST(Striper, EmptyPartialResult) +{ + ceph_file_layout l; + memset(&l, 0, sizeof(l)); + + l.fl_object_size = 4194304; + l.fl_stripe_unit = 4194304; + l.fl_stripe_count = 1; + + vector ex; + Striper::file_to_extents(g_ceph_context, 1, &l, 725549056, 131072, 72554905600, ex); + cout << "ex " << ex << std::endl; + ASSERT_EQ(2u, ex.size()); + + Striper::StripedReadResult r; + + bufferlist bl; + r.add_partial_result(g_ceph_context, bl, ex[1].buffer_extents); + + bufferptr bp(65536); + bp.zero(); + bl.append(bp); + + r.add_partial_result(g_ceph_context, bl, ex[0].buffer_extents); + + bufferlist outbl; + r.assemble_result(g_ceph_context, outbl, false); + + ASSERT_EQ(65536, outbl.length()); +} + int main(int argc, char **argv) -- 2.39.5