| 827 | } |
| 828 | |
| 829 | void GenericFileSystemTest::TestGetFileInfoGenerator(FileSystem* fs) { |
| 830 | #if defined(ADDRESS_SANITIZER) || defined(ARROW_VALGRIND) |
| 831 | if (have_false_positive_memory_leak_with_generator()) { |
| 832 | GTEST_SKIP() << "Filesystem have false positive memory leak with generator"; |
| 833 | } |
| 834 | #endif |
| 835 | |
| 836 | ASSERT_OK(fs->CreateDir("AB/CD")); |
| 837 | CreateFile(fs, "abc", "data"); |
| 838 | CreateFile(fs, "AB/def", "some data"); |
| 839 | CreateFile(fs, "AB/CD/ghi", "some other data"); |
| 840 | CreateFile(fs, "AB/CD/jkl", "yet other data"); |
| 841 | |
| 842 | FileSelector s; |
| 843 | s.base_dir = ""; |
| 844 | std::vector<FileInfo> infos; |
| 845 | std::vector<std::vector<FileInfo>> nested_infos; |
| 846 | |
| 847 | // Non-recursive |
| 848 | auto gen = fs->GetFileInfoGenerator(s); |
| 849 | CollectFileInfoGenerator(std::move(gen), &infos); |
| 850 | SortInfos(&infos); |
| 851 | ASSERT_EQ(infos.size(), 2); |
| 852 | AssertFileInfo(infos[0], "AB", FileType::Directory); |
| 853 | AssertFileInfo(infos[1], "abc", FileType::File, 4); |
| 854 | |
| 855 | // Recursive |
| 856 | s.base_dir = "AB"; |
| 857 | s.recursive = true; |
| 858 | CollectFileInfoGenerator(fs->GetFileInfoGenerator(s), &infos); |
| 859 | SortInfos(&infos); |
| 860 | ASSERT_EQ(infos.size(), 4); |
| 861 | AssertFileInfo(infos[0], "AB/CD", FileType::Directory); |
| 862 | AssertFileInfo(infos[1], "AB/CD/ghi", FileType::File, 15); |
| 863 | AssertFileInfo(infos[2], "AB/CD/jkl", FileType::File, 14); |
| 864 | AssertFileInfo(infos[3], "AB/def", FileType::File, 9); |
| 865 | |
| 866 | // Doesn't exist |
| 867 | s.base_dir = "XX"; |
| 868 | auto fut = CollectAsyncGenerator(fs->GetFileInfoGenerator(s)); |
| 869 | ASSERT_FINISHES_AND_RAISES(IOError, fut); |
| 870 | s.allow_not_found = true; |
| 871 | CollectFileInfoGenerator(fs->GetFileInfoGenerator(s), &infos); |
| 872 | ASSERT_EQ(infos.size(), 0); |
| 873 | } |
| 874 | |
| 875 | void GenericFileSystemTest::TestGetFileInfoSelectorWithRecursion(FileSystem* fs) { |
| 876 | ASSERT_OK(fs->CreateDir("01/02/03/04")); |
nothing calls this directly
no test coverage detected