From 304188082a42b093823ccec50598365995fe5024 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Tue, 20 Jul 2021 10:32:36 +0000 Subject: [PATCH] tests/bl: verify the carriage handling in bufferlist::c_str(). Signed-off-by: Radoslaw Zarzynski --- src/test/bufferlist.cc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/test/bufferlist.cc b/src/test/bufferlist.cc index 4d830f6e97e..4f9ebd44b92 100644 --- a/src/test/bufferlist.cc +++ b/src/test/bufferlist.cc @@ -2320,6 +2320,25 @@ TEST(BufferList, c_str) { EXPECT_EQ(0, ::memcmp("AB", bl.c_str(), 2)); } +TEST(BufferList, c_str_carriage) { + // verify the c_str() optimization for carriage handling + buffer::ptr bp("A", 1); + bufferlist bl; + bl.append(bp); + bl.append('B'); + EXPECT_EQ(2U, bl.get_num_buffers()); + EXPECT_EQ(2U, bl.length()); + + // this should leave an empty bptr for carriage at the end of the bl + bl.splice(1, 1); + EXPECT_EQ(2U, bl.get_num_buffers()); + EXPECT_EQ(1U, bl.length()); + + std::ignore = bl.c_str(); + // if we have an empty bptr at the end, we don't need to rebuild + EXPECT_EQ(2U, bl.get_num_buffers()); +} + TEST(BufferList, substr_of) { bufferlist bl; EXPECT_THROW(bl.substr_of(bl, 1, 1), buffer::end_of_buffer); -- 2.39.5