summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRadoslaw Zarzynski <rzarzyns@redhat.com>2022-01-21 01:50:22 +0000
committerRadoslaw Zarzynski <rzarzyns@redhat.com>2022-01-21 02:13:52 +0000
commit88176acd27b0d495abf9396c7ae2c6ec3fa46b1b (patch)
tree25a1cdfd8dd37b78190dc420001724e48b646b6d
parent2de5f17647437d8f67adfe79becbb0e280f7f26f (diff)
downloadceph-88176acd27b0d495abf9396c7ae2c6ec3fa46b1b.tar.gz
test/bufferlist: ensure rebuild_aligned_size_and_memory() always rebuilds.
Before the patch the test case was showing an unreliable behaviour dependent on the underlying memory allocator. It was because the bufferlist rebuild can be skipped, resulting in unchanged number of buffers, if all of them begin at aligned addresses. The commit fixes that by allocating a 4 KiB-aligned buffer and offsetting it by a small constant (42) to ensure the memory added to the bufferlist begins at non-4 KiB address. Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
-rw-r--r--src/test/bufferlist.cc11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/test/bufferlist.cc b/src/test/bufferlist.cc
index 99e954ff597..1b604f7bde4 100644
--- a/src/test/bufferlist.cc
+++ b/src/test/bufferlist.cc
@@ -1853,13 +1853,14 @@ TEST(BufferList, rebuild_aligned_size_and_memory) {
* scenario where the first bptr is both size and memory aligned and
* the second is 0-length */
bl.clear();
- bufferptr ptr1(buffer::create_aligned(4096, 4096));
- bl.append(ptr1);
- bufferptr ptr(10);
- /* bl.back().length() must be 0 */
- bl.append(ptr, 0, 0);
+ bl.append(bufferptr{buffer::create_aligned(4096, 4096)});
+ bufferptr ptr(buffer::create_aligned(42, 4096));
+ /* bl.back().length() must be 0. offset set to 42 guarantees
+ * the entire list is unaligned. */
+ bl.append(ptr, 42, 0);
EXPECT_EQ(bl.get_num_buffers(), 2);
EXPECT_EQ(bl.back().length(), 0);
+ EXPECT_FALSE(bl.is_aligned(4096));
/* rebuild_aligned() calls rebuild_aligned_size_and_memory().
* we assume the rebuild always happens. */
EXPECT_TRUE(bl.rebuild_aligned(4096));