From: Radoslaw Zarzynski Date: Tue, 20 Jul 2021 10:32:36 +0000 (+0000) Subject: tests/bl: verify the carriage handling in bufferlist::c_str(). X-Git-Tag: v17.1.0~891^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F42417%2Fhead;p=ceph.git tests/bl: verify the carriage handling in bufferlist::c_str(). Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/test/bufferlist.cc b/src/test/bufferlist.cc index 4d830f6e97e1..4f9ebd44b92d 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);