From: Dhairya Parmar Date: Mon, 20 May 2024 19:04:54 +0000 (+0530) Subject: src/test: add testcase file for low level sync io code paths X-Git-Tag: v18.2.5~288^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=16a7bf00a1a42bd9702d104772fe2165c42f8e0d;p=ceph.git src/test: add testcase file for low level sync io code paths and test that providing null or invalid file handle returns an error as expected Fixes: https://tracker.ceph.com/issues/66156 Signed-off-by: Dhairya Parmar (cherry picked from commit bc4bb1e43e5674734a3d2f4a6051b26091c7f4e0) --- diff --git a/src/test/client/CMakeLists.txt b/src/test/client/CMakeLists.txt index 3d3e327f3f8f..9cbfb6309f6b 100644 --- a/src/test/client/CMakeLists.txt +++ b/src/test/client/CMakeLists.txt @@ -4,6 +4,7 @@ if(${WITH_CEPHFS}) alternate_name.cc ops.cc commands.cc + syncio.cc ) target_link_libraries(ceph_test_client client diff --git a/src/test/client/syncio.cc b/src/test/client/syncio.cc new file mode 100644 index 000000000000..f40503a3909f --- /dev/null +++ b/src/test/client/syncio.cc @@ -0,0 +1,79 @@ +// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- +// vim: ts=8 sw=2 smarttab +/* + * Ceph - scalable distributed file system + * + * Copyright (C) 2024 Red Hat + * + * This is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software + * Foundation. See file COPYING. + * + */ + +#include + +#include +#include + +#include + +#include "test/client/TestClient.h" + +TEST_F(TestClient, LlreadvLlwritevInvalidFileHandleSync) { + /* Test provding null or invalid file handle returns an error + as expected*/ + Fh *fh_null = NULL; + char out_buf_0[] = "hello "; + char out_buf_1[] = "world\n"; + struct iovec iov_out[2] = { + {out_buf_0, sizeof(out_buf_0)}, + {out_buf_1, sizeof(out_buf_1)}, + }; + + char in_buf_0[sizeof(out_buf_0)]; + char in_buf_1[sizeof(out_buf_1)]; + struct iovec iov_in[2] = { + {in_buf_0, sizeof(in_buf_0)}, + {in_buf_1, sizeof(in_buf_1)}, + }; + + int64_t rc; + + rc = client->ll_writev(fh_null, iov_out, 2, 0); + ASSERT_EQ(rc, -CEPHFS_EBADF); + + rc = client->ll_readv(fh_null, iov_in, 2, 0); + ASSERT_EQ(rc, -CEPHFS_EBADF); + + // test after closing the file handle + int mypid = getpid(); + char filename[256]; + + client->unmount(); + TearDown(); + SetUp(); + + sprintf(filename, "test_llreadvllwritevinvalidfhfile%u", mypid); + + Inode *root, *file; + root = client->get_root(); + ASSERT_NE(root, (Inode *)NULL); + + Fh *fh; + struct ceph_statx stx; + + ASSERT_EQ(0, client->ll_createx(root, filename, 0666, + O_RDWR | O_CREAT | O_TRUNC, + &file, &fh, &stx, 0, 0, myperm)); + + client->ll_release(fh); + ASSERT_EQ(0, client->ll_unlink(root, filename, myperm)); + + rc = client->ll_writev(fh, iov_out, 2, 0); + ASSERT_EQ(rc, -CEPHFS_EBADF); + + rc = client->ll_readv(fh, iov_in, 2, 0); + ASSERT_EQ(rc, -CEPHFS_EBADF); +}