| 104 | } |
| 105 | |
| 106 | void TestBucket(int argc, char** argv) { |
| 107 | ASSERT_OK_AND_ASSIGN(auto fs, MakeFileSystem()); |
| 108 | std::vector<FileInfo> infos; |
| 109 | FileSelector select; |
| 110 | std::shared_ptr<io::InputStream> is; |
| 111 | std::shared_ptr<io::RandomAccessFile> file; |
| 112 | std::shared_ptr<Buffer> buf; |
| 113 | Status status; |
| 114 | |
| 115 | // Check bucket exists and is empty |
| 116 | select.base_dir = ""; |
| 117 | select.allow_not_found = false; |
| 118 | select.recursive = false; |
| 119 | ASSERT_OK_AND_ASSIGN(infos, fs->GetFileInfo(select)); |
| 120 | ASSERT_EQ(infos.size(), 0) << "Bucket should be empty, perhaps use --clear?"; |
| 121 | |
| 122 | // Create directory structure |
| 123 | ASSERT_OK(fs->CreateDir("EmptyDir", /*recursive=*/false)); |
| 124 | ASSERT_OK(fs->CreateDir("Dir1", /*recursive=*/false)); |
| 125 | ASSERT_OK(fs->CreateDir("Dir1/Subdir", /*recursive=*/false)); |
| 126 | ASSERT_RAISES_PRINT("CreateDir in nonexistent parent", IOError, |
| 127 | fs->CreateDir("Dir2/Subdir", /*recursive=*/false)); |
| 128 | ASSERT_OK(fs->CreateDir("Dir2/Subdir", /*recursive=*/true)); |
| 129 | ASSERT_OK(fs->CreateDir("Nested/1/2/3/4", /*recursive=*/true)); |
| 130 | CreateFile(fs.get(), "File1", "first data"); |
| 131 | CreateFile(fs.get(), "Dir1/File2", "second data"); |
| 132 | CreateFile(fs.get(), "Dir2/Subdir/File3", "third data"); |
| 133 | CreateFile(fs.get(), "Nested/1/2/3/4/File4", "fourth data"); |
| 134 | |
| 135 | // GetFileInfo(Selector) |
| 136 | select.base_dir = ""; |
| 137 | ASSERT_OK_AND_ASSIGN(infos, fs->GetFileInfo(select)); |
| 138 | ASSERT_EQ(infos.size(), 5); |
| 139 | SortInfos(&infos); |
| 140 | AssertFileInfo(infos[0], "Dir1", FileType::Directory); |
| 141 | AssertFileInfo(infos[1], "Dir2", FileType::Directory); |
| 142 | AssertFileInfo(infos[2], "EmptyDir", FileType::Directory); |
| 143 | AssertFileInfo(infos[3], "File1", FileType::File, 10); |
| 144 | AssertFileInfo(infos[4], "Nested", FileType::Directory); |
| 145 | |
| 146 | select.base_dir = "zzzz"; |
| 147 | ASSERT_RAISES_PRINT("GetFileInfo(Selector) with nonexisting base_dir", IOError, |
| 148 | fs->GetFileInfo(select)); |
| 149 | select.allow_not_found = true; |
| 150 | ASSERT_OK_AND_ASSIGN(infos, fs->GetFileInfo(select)); |
| 151 | ASSERT_EQ(infos.size(), 0); |
| 152 | |
| 153 | select.base_dir = "Dir1"; |
| 154 | select.allow_not_found = false; |
| 155 | ASSERT_OK_AND_ASSIGN(infos, fs->GetFileInfo(select)); |
| 156 | ASSERT_EQ(infos.size(), 2); |
| 157 | SortInfos(&infos); |
| 158 | AssertFileInfo(infos[0], "Dir1/File2", FileType::File, 11); |
| 159 | AssertFileInfo(infos[1], "Dir1/Subdir", FileType::Directory); |
| 160 | |
| 161 | select.base_dir = "Dir2"; |
| 162 | select.recursive = true; |
| 163 | ASSERT_OK_AND_ASSIGN(infos, fs->GetFileInfo(select)); |
no test coverage detected