]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/seastar/tests/unit/log_buf_test.cc
import quincy beta 17.1.0
[ceph.git] / ceph / src / seastar / tests / unit / log_buf_test.cc
index fbb11a7b164c8bbc20a26800ead1a4579ddeceb2..7a0aea1b63da2e8da0e45a333b267a52ec621918 100644 (file)
@@ -35,8 +35,6 @@ SEASTAR_TEST_CASE(log_buf_realloc) {
 
     auto it = b.back_insert_begin();
 
-    BOOST_REQUIRE_EQUAL(reinterpret_cast<uintptr_t>(&*it), external_buf_ptr);
-
     for (auto i = 0; i < 128; ++i) {
         *it++ = 'a';
     }
@@ -44,7 +42,6 @@ SEASTAR_TEST_CASE(log_buf_realloc) {
     *it = 'a'; // should trigger realloc
 
     BOOST_REQUIRE_NE(reinterpret_cast<uintptr_t>(b.data()), reinterpret_cast<uintptr_t>(external_buf.data()));
-    BOOST_REQUIRE_NE(reinterpret_cast<uintptr_t>(&*it), reinterpret_cast<uintptr_t>(external_buf.data() + 128));
 
     const char* p = b.data();
     for (auto i = 0; i < 129; ++i) {
@@ -53,3 +50,49 @@ SEASTAR_TEST_CASE(log_buf_realloc) {
 
     return make_ready_future<>();
 }
+
+SEASTAR_TEST_CASE(log_buf_insert_iterator_format_to) {
+    constexpr size_t size = 128;
+    auto external_buf = std::make_unique<char[]>(size);
+    auto external_buf_ptr = external_buf.get();
+    char str[size + 1];
+
+    internal::log_buf b(external_buf_ptr, size);
+
+    BOOST_REQUIRE_EQUAL(reinterpret_cast<uintptr_t>(b.data()), reinterpret_cast<uintptr_t>(external_buf_ptr));
+
+    auto it = b.back_insert_begin();
+
+    memset(str, 'a', size);
+    str[size] = '\0';
+
+#if FMT_VERSION >= 80000
+    it = fmt::format_to(it, fmt::runtime(str), size);
+#else
+    it = fmt::format_to(it, str, size);
+#endif
+    BOOST_REQUIRE_EQUAL(reinterpret_cast<uintptr_t>(b.data()), reinterpret_cast<uintptr_t>(external_buf_ptr));
+
+    *it++ = '\n';
+    BOOST_REQUIRE_NE(reinterpret_cast<uintptr_t>(b.data()), reinterpret_cast<uintptr_t>(external_buf_ptr));
+
+    memset(str, 'b', size);
+#if FMT_VERSION >= 80000
+    it = fmt::format_to(it, fmt::runtime(str), size);
+#else
+    it = fmt::format_to(it, str, size);
+#endif
+    *it++ = '\n';
+
+    const char* p = b.data();
+    size_t pos = 0;
+    for (size_t i = 0; i < size; i++) {
+        BOOST_REQUIRE_EQUAL(p[pos++], 'a');
+    }
+    BOOST_REQUIRE_EQUAL(p[pos++], '\n');
+    for (size_t i = 0; i < size; i++) {
+        BOOST_REQUIRE_EQUAL(p[pos++], 'b');
+    }
+    BOOST_REQUIRE_EQUAL(p[pos++], '\n');
+    return make_ready_future<>();
+}