From 13162f6ecc8ddfcb2d2827d5cb61df75ea008684 Mon Sep 17 00:00:00 2001 From: "Frank S. Filz" Date: Mon, 8 Aug 2022 16:48:37 -0700 Subject: [PATCH] client test: Add fsync to ll_preadv_pwritev test Signed-off-by: Frank S. Filz --- src/test/client/nonblocking.cc | 69 +++++++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 2 deletions(-) diff --git a/src/test/client/nonblocking.cc b/src/test/client/nonblocking.cc index dafff45d50a44..d5d5e7a5626ee 100644 --- a/src/test/client/nonblocking.cc +++ b/src/test/client/nonblocking.cc @@ -56,16 +56,43 @@ TEST_F(TestClient, LlreadvLlwritev) { {in1, sizeof(in1)}, }; + char out_a_0[] = "hello "; + char out_a_1[] = "world a is longer\n"; + struct iovec iov_out_a[2] = { + {out_a_0, sizeof(out_a_0)}, + {out_a_1, sizeof(out_a_1)}, + }; + char in_a_0[sizeof(out_a_0)]; + char in_a_1[sizeof(out_a_1)]; + struct iovec iov_in_a[2] = { + {in_a_0, sizeof(in_a_0)}, + {in_a_1, sizeof(in_a_1)}, + }; + + char out_b_0[] = "hello "; + char out_b_1[] = "world b is much longer\n"; + struct iovec iov_out_b[2] = { + {out_b_0, sizeof(out_b_0)}, + {out_b_1, sizeof(out_b_1)}, + }; + char in_b_0[sizeof(out_b_0)]; + char in_b_1[sizeof(out_b_1)]; + struct iovec iov_in_b[2] = { + {in_b_0, sizeof(in_b_0)}, + {in_b_1, sizeof(in_b_1)}, + }; + ssize_t nwritten = iov_out[0].iov_len + iov_out[1].iov_len; std::unique_ptr writefinish = nullptr; std::unique_ptr readfinish = nullptr; - writefinish.reset(new C_SaferCond("test-nonblocking")); - readfinish.reset(new C_SaferCond("test-nonblocking")); + writefinish.reset(new C_SaferCond("test-nonblocking-writefinish")); + readfinish.reset(new C_SaferCond("test-nonblocking-readfinish")); int64_t rc; bufferlist bl; + rc = client->ll_preadv_pwritev(fh, iov_out, 2, 0, true, writefinish.get(), nullptr); ASSERT_EQ(0, rc); rc = writefinish->wait(); @@ -80,6 +107,44 @@ TEST_F(TestClient, LlreadvLlwritev) { ASSERT_EQ(0, strncmp((const char*)iov_in[0].iov_base, (const char*)iov_out[0].iov_base, iov_out[0].iov_len)); ASSERT_EQ(0, strncmp((const char*)iov_in[1].iov_base, (const char*)iov_out[1].iov_base, iov_out[1].iov_len)); + // need new condition variables... + writefinish.reset(new C_SaferCond("test-nonblocking-writefinish")); + readfinish.reset(new C_SaferCond("test-nonblocking-readfinish")); + ssize_t nwritten_a = iov_out_a[0].iov_len + iov_out_a[1].iov_len; + + rc = client->ll_preadv_pwritev(fh, iov_out_a, 2, 100, true, writefinish.get(), nullptr); + ASSERT_EQ(0, rc); + rc = writefinish->wait(); + ASSERT_EQ(nwritten_a, rc); + + rc = client->ll_preadv_pwritev(fh, iov_in_a, 2, 100, false, readfinish.get(), &bl); + ASSERT_EQ(0, rc); + rc = readfinish.get()->wait(); + ASSERT_EQ(nwritten_a, rc); + copy_bufferlist_to_iovec(iov_in_a, 2, &bl, rc); + + ASSERT_EQ(0, strncmp((const char*)iov_in_a[0].iov_base, (const char*)iov_out_a[0].iov_base, iov_out_a[0].iov_len)); + ASSERT_EQ(0, strncmp((const char*)iov_in_a[1].iov_base, (const char*)iov_out_a[1].iov_base, iov_out_a[1].iov_len)); + + // need new condition variables... + writefinish.reset(new C_SaferCond("test-nonblocking-writefinish")); + readfinish.reset(new C_SaferCond("test-nonblocking-readfinish")); + ssize_t nwritten_b = iov_out_b[0].iov_len + iov_out_b[1].iov_len; + + rc = client->ll_preadv_pwritev(fh, iov_out_b, 2, 1000, true, writefinish.get(), nullptr, true, false); + ASSERT_EQ(0, rc); + rc = writefinish->wait(); + ASSERT_EQ(nwritten_b, rc); + + rc = client->ll_preadv_pwritev(fh, iov_in_b, 2, 1000, false, readfinish.get(), &bl); + ASSERT_EQ(0, rc); + rc = readfinish.get()->wait(); + ASSERT_EQ(nwritten_b, rc); + copy_bufferlist_to_iovec(iov_in_b, 2, &bl, rc); + + ASSERT_EQ(0, strncmp((const char*)iov_in_b[0].iov_base, (const char*)iov_out_b[0].iov_base, iov_out_b[0].iov_len)); + ASSERT_EQ(0, strncmp((const char*)iov_in_b[1].iov_base, (const char*)iov_out_b[1].iov_base, iov_out_b[1].iov_len)); + client->ll_release(fh); ASSERT_EQ(0, client->ll_unlink(root, filename, myperm)); } -- 2.39.5