| From 139a165ac72ef8294f0945025d885b1044ca6eba Mon Sep 17 00:00:00 2001 |
| From: Dongjin Kim <dongjin_.kim@samsung.com> |
| Date: Tue, 25 May 2021 20:54:50 +0900 |
| Subject: [PATCH] [f2fs] Handle unordered readdir for f2fs in |
| TestDirectoryReaddirRmAll |
| |
| For TestDirectoryReaddirRmAll of DirectoryTest, |
| since results of readdir are not ordered by creation sequence in f2fs, |
| check whether each readdir result is correct in an alternative way. |
| |
| Now it checks whether each name is 5-digit and located inside expected range |
| |
| Change-Id: I5f9e640157194337bacd6f25340a9facf72b2530 |
| --- |
| src/storage/fs_test/directory.cc | 26 ++++++++++++++++++++++---- |
| 1 file changed, 22 insertions(+), 4 deletions(-) |
| |
| diff --git a/src/storage/fs_test/directory.cc b/src/storage/fs_test/directory.cc |
| index bf249c2e260..6b0f15ae828 100644 |
| --- a/src/storage/fs_test/directory.cc |
| +++ b/src/storage/fs_test/directory.cc |
| @@ -278,10 +278,28 @@ TEST_P(DirectoryTest, TestDirectoryReaddirRmAll) { |
| // Ignore these entries |
| continue; |
| } |
| - char dirname[100]; |
| - snprintf(dirname, 100, "%05lu", i++); |
| - ASSERT_EQ(strcmp(de->d_name, dirname), 0) << "Unexpected dirent"; |
| - ASSERT_EQ(unlinkat(dirfd(dir), dirname, AT_REMOVEDIR), 0); |
| + |
| + // Results of readdir are not ordered by creation sequence in f2fs. |
| + // Therefore, check whether each name is 5-digit and located inside expected range |
| + if (fs().GetTraits().name == std::string_view("f2fs")) { |
| + ASSERT_EQ(strlen(de->d_name), 5UL); |
| + |
| + size_t curname_num = static_cast<size_t>(atoi(de->d_name)); |
| + if (curname_num == 0) { |
| + // If conversion by atoi() is failed, it returns 0. |
| + // Therefore, check whether the result is converted from "00000" |
| + ASSERT_EQ(strcmp(de->d_name, "00000"), 0); |
| + } |
| + |
| + ASSERT_GE(curname_num, 0UL); |
| + ASSERT_LT(curname_num, kNumEntries); |
| + ASSERT_EQ(unlinkat(dirfd(dir), de->d_name, AT_REMOVEDIR), 0); |
| + } else { |
| + char dirname[100]; |
| + snprintf(dirname, 100, "%05lu", i++); |
| + ASSERT_EQ(strcmp(de->d_name, dirname), 0) << "Unexpected dirent"; |
| + ASSERT_EQ(unlinkat(dirfd(dir), dirname, AT_REMOVEDIR), 0); |
| + } |
| num_seen++; |
| } |
| |
| -- |
| 2.25.1 |
| |