| 33 | CPPUNIT_TEST_SUITE_REGISTRATION(MultiFileAllocationIteratorTest); |
| 34 | |
| 35 | void MultiFileAllocationIteratorTest::testMakeDiskWriterEntries() |
| 36 | { |
| 37 | std::string storeDir = |
| 38 | A2_TEST_OUT_DIR "/aria2_MultiFileAllocationIteratorTest" |
| 39 | "_testMakeDiskWriterEntries"; |
| 40 | |
| 41 | auto fs = std::vector<std::shared_ptr<FileEntry>>{ |
| 42 | std::make_shared<FileEntry>(storeDir + "/file1", 1536, 0), |
| 43 | std::make_shared<FileEntry>(storeDir + "/file2", 2048, 1536), // req no |
| 44 | std::make_shared<FileEntry>(storeDir + "/file3", 1024, 3584), |
| 45 | std::make_shared<FileEntry>(storeDir + "/file4", 1024, 4608), // req no |
| 46 | std::make_shared<FileEntry>(storeDir + "/file5", 1024, 5632), // req no |
| 47 | std::make_shared<FileEntry>(storeDir + "/file6", 1024, 6656), // req no |
| 48 | std::make_shared<FileEntry>(storeDir + "/file7", 256, 7680), // req no |
| 49 | std::make_shared<FileEntry>(storeDir + "/file8", 255, 7936), |
| 50 | std::make_shared<FileEntry>(storeDir + "/file9", 1025, 8191), // req no |
| 51 | std::make_shared<FileEntry>(storeDir + "/fileA", 1024, 9216), // req no |
| 52 | std::make_shared<FileEntry>(storeDir + "/fileB", 1024, 10240)}; |
| 53 | fs[1]->setRequested(false); // file2 |
| 54 | fs[3]->setRequested(false); // file4 |
| 55 | fs[4]->setRequested(false); // file5 |
| 56 | fs[5]->setRequested(false); // file6 |
| 57 | fs[6]->setRequested(false); // file7 |
| 58 | fs[8]->setRequested(false); // file9 |
| 59 | fs[9]->setRequested(false); // fileA |
| 60 | |
| 61 | for (auto& fe : fs) { |
| 62 | File{fe->getPath()}.remove(); |
| 63 | } |
| 64 | |
| 65 | // create empty file4 |
| 66 | createFile(storeDir + std::string("/file4"), 0); |
| 67 | |
| 68 | MultiDiskAdaptor diskAdaptor; |
| 69 | diskAdaptor.setFileEntries(std::begin(fs), std::end(fs)); |
| 70 | diskAdaptor.setPieceLength(1_k); |
| 71 | diskAdaptor.openFile(); |
| 72 | |
| 73 | auto allocitr = diskAdaptor.fileAllocationIterator(); |
| 74 | auto itr = dynamic_cast<MultiFileAllocationIterator*>(allocitr.get()); |
| 75 | |
| 76 | auto& entries = itr->getDiskWriterEntries(); |
| 77 | CPPUNIT_ASSERT_EQUAL((size_t)11, entries.size()); |
| 78 | |
| 79 | // file1 |
| 80 | CPPUNIT_ASSERT_EQUAL(storeDir + std::string("/file1"), |
| 81 | entries[0]->getFilePath()); |
| 82 | CPPUNIT_ASSERT(entries[0]->needsFileAllocation()); |
| 83 | CPPUNIT_ASSERT(entries[0]->getDiskWriter()); |
| 84 | // file2 |
| 85 | CPPUNIT_ASSERT_EQUAL(storeDir + std::string("/file2"), |
| 86 | entries[1]->getFilePath()); |
| 87 | CPPUNIT_ASSERT(entries[1]->needsFileAllocation()); |
| 88 | CPPUNIT_ASSERT(entries[1]->getDiskWriter()); |
| 89 | // file3 |
| 90 | CPPUNIT_ASSERT_EQUAL(storeDir + std::string("/file3"), |
| 91 | entries[2]->getFilePath()); |
| 92 | CPPUNIT_ASSERT(entries[2]->needsFileAllocation()); |
nothing calls this directly
no test coverage detected