]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
tests/bl: verify the carriage handling in bufferlist::c_str().
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 20 Jul 2021 10:32:36 +0000 (10:32 +0000)
committerIlya Dryomov <idryomov@gmail.com>
Mon, 13 Sep 2021 19:16:32 +0000 (21:16 +0200)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/test/bufferlist.cc

index 4d830f6e97e1c7364b2a0c8597520dbc06530a53..4f9ebd44b92d37e03ad0154a41f2911fe01e9581 100644 (file)
@@ -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);