From: Xiubo Li Date: Wed, 28 Apr 2021 01:32:24 +0000 (+0800) Subject: test: add test case for MDS privated inos accessing X-Git-Tag: v16.2.5~33^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F40856%2Fhead;p=ceph.git test: add test case for MDS privated inos accessing Fixes: https://tracker.ceph.com/issues/50216 Signed-off-by: Xiubo Li (cherry picked from commit 0ec4d781787df777bbfdeb742b394c73a0d76e08) Conflicts: src/test/libcephfs/test.cc: trivial conflict of mixed tests --- diff --git a/src/test/libcephfs/test.cc b/src/test/libcephfs/test.cc index cf673de1245a..1c28bb051b2e 100644 --- a/src/test/libcephfs/test.cc +++ b/src/test/libcephfs/test.cc @@ -3508,6 +3508,30 @@ TEST(LibCephFS, SetMountTimeout) { ASSERT_EQ(0, ceph_conf_parse_env(cmount, NULL)); ASSERT_EQ(0, ceph_set_mount_timeout(cmount, 5)); ASSERT_EQ(ceph_mount(cmount, NULL), 0); - ceph_shutdown(cmount); } + +TEST(LibCephFS, LookupMdsPrivateInos) { + struct ceph_mount_info *cmount; + ASSERT_EQ(ceph_create(&cmount, NULL), 0); + ASSERT_EQ(ceph_conf_read_file(cmount, NULL), 0); + ASSERT_EQ(0, ceph_conf_parse_env(cmount, NULL)); + ASSERT_EQ(ceph_mount(cmount, NULL), 0); + + Inode *inode; + for (int ino = 0; ino < MDS_INO_SYSTEM_BASE; ino++) { + if (MDS_IS_PRIVATE_INO(ino)) { + ASSERT_EQ(-ESTALE, ceph_ll_lookup_inode(cmount, ino, &inode)); + } else if (ino == CEPH_INO_ROOT || ino == CEPH_INO_GLOBAL_SNAPREALM) { + ASSERT_EQ(0, ceph_ll_lookup_inode(cmount, ino, &inode)); + } else if (ino == CEPH_INO_LOST_AND_FOUND) { + // the ino 3 will only exists after the recovery tool ran, so + // it may return -ESTALE with a fresh fs cluster + int r = ceph_ll_lookup_inode(cmount, ino, &inode); + ASSERT_TRUE(r == -ESTALE || r == 0); + } else { + // currently the ino 0 and 4~99 is not useded yet. + ASSERT_EQ(-ESTALE, ceph_ll_lookup_inode(cmount, ino, &inode)); + } + } +}