FileEntryTest.cc 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. #include "FileEntry.h"
  2. #include <cppunit/extensions/HelperMacros.h>
  3. #include "InOrderURISelector.h"
  4. namespace aria2 {
  5. class FileEntryTest : public CppUnit::TestFixture {
  6. CPPUNIT_TEST_SUITE(FileEntryTest);
  7. CPPUNIT_TEST(testSetupDir);
  8. CPPUNIT_TEST(testRemoveURIWhoseHostnameIs);
  9. CPPUNIT_TEST(testExtractURIResult);
  10. CPPUNIT_TEST(testGetRequest);
  11. CPPUNIT_TEST(testGetRequest_disableSingleHostMultiConnection);
  12. CPPUNIT_TEST_SUITE_END();
  13. public:
  14. void setUp() {}
  15. void testSetupDir();
  16. void testRemoveURIWhoseHostnameIs();
  17. void testExtractURIResult();
  18. void testGetRequest();
  19. void testGetRequest_disableSingleHostMultiConnection();
  20. };
  21. CPPUNIT_TEST_SUITE_REGISTRATION( FileEntryTest );
  22. static SharedHandle<FileEntry> createFileEntry()
  23. {
  24. const char* uris[] = { "http://localhost/aria2.zip",
  25. "ftp://localhost/aria2.zip",
  26. "http://mirror/aria2.zip" };
  27. SharedHandle<FileEntry> fileEntry(new FileEntry());
  28. fileEntry->setUris(std::deque<std::string>(&uris[0], &uris[3]));
  29. return fileEntry;
  30. }
  31. void FileEntryTest::testSetupDir()
  32. {
  33. std::string dir = "/tmp/aria2-FileEntryTest-testSetupDir";
  34. std::string filename = "filename";
  35. std::string path = dir+"/"+filename;
  36. File d(dir);
  37. if(d.exists()) {
  38. CPPUNIT_ASSERT(d.remove());
  39. }
  40. CPPUNIT_ASSERT(!d.exists());
  41. FileEntry fileEntry(path, 0, 0);
  42. fileEntry.setupDir();
  43. CPPUNIT_ASSERT(d.isDir());
  44. File f(path);
  45. CPPUNIT_ASSERT(!f.exists());
  46. }
  47. void FileEntryTest::testRemoveURIWhoseHostnameIs()
  48. {
  49. SharedHandle<FileEntry> fileEntry = createFileEntry();
  50. fileEntry->removeURIWhoseHostnameIs("localhost");
  51. CPPUNIT_ASSERT_EQUAL((size_t)1, fileEntry->getRemainingUris().size());
  52. CPPUNIT_ASSERT_EQUAL(std::string("http://mirror/aria2.zip"),
  53. fileEntry->getRemainingUris()[0]);
  54. }
  55. void FileEntryTest::testExtractURIResult()
  56. {
  57. FileEntry fileEntry;
  58. fileEntry.addURIResult("http://timeout/file", downloadresultcode::TIME_OUT);
  59. fileEntry.addURIResult("http://finished/file", downloadresultcode::FINISHED);
  60. fileEntry.addURIResult("http://timeout/file2", downloadresultcode::TIME_OUT);
  61. fileEntry.addURIResult("http://unknownerror/file", downloadresultcode::UNKNOWN_ERROR);
  62. std::deque<URIResult> res;
  63. fileEntry.extractURIResult(res, downloadresultcode::TIME_OUT);
  64. CPPUNIT_ASSERT_EQUAL((size_t)2, res.size());
  65. CPPUNIT_ASSERT_EQUAL(std::string("http://timeout/file"), res[0].getURI());
  66. CPPUNIT_ASSERT_EQUAL(std::string("http://timeout/file2"), res[1].getURI());
  67. CPPUNIT_ASSERT_EQUAL((size_t)2, fileEntry.getURIResults().size());
  68. CPPUNIT_ASSERT_EQUAL(std::string("http://finished/file"),
  69. fileEntry.getURIResults()[0].getURI());
  70. CPPUNIT_ASSERT_EQUAL(std::string("http://unknownerror/file"),
  71. fileEntry.getURIResults()[1].getURI());
  72. res.clear();
  73. fileEntry.extractURIResult(res, downloadresultcode::TIME_OUT);
  74. CPPUNIT_ASSERT(res.empty());
  75. CPPUNIT_ASSERT_EQUAL((size_t)2, fileEntry.getURIResults().size());
  76. }
  77. void FileEntryTest::testGetRequest()
  78. {
  79. SharedHandle<FileEntry> fileEntry = createFileEntry();
  80. SharedHandle<InOrderURISelector> selector(new InOrderURISelector());
  81. SharedHandle<Request> req = fileEntry->getRequest(selector);
  82. CPPUNIT_ASSERT_EQUAL(std::string("localhost"), req->getHost());
  83. CPPUNIT_ASSERT_EQUAL(std::string("http"), req->getProtocol());
  84. fileEntry->poolRequest(req);
  85. SharedHandle<Request> req2nd = fileEntry->getRequest(selector);
  86. CPPUNIT_ASSERT_EQUAL(std::string("localhost"), req2nd->getHost());
  87. CPPUNIT_ASSERT_EQUAL(std::string("http"), req2nd->getProtocol());
  88. SharedHandle<Request> req3rd = fileEntry->getRequest(selector);
  89. CPPUNIT_ASSERT_EQUAL(std::string("localhost"), req3rd->getHost());
  90. CPPUNIT_ASSERT_EQUAL(std::string("ftp"), req3rd->getProtocol());
  91. }
  92. void FileEntryTest::testGetRequest_disableSingleHostMultiConnection()
  93. {
  94. SharedHandle<FileEntry> fileEntry = createFileEntry();
  95. fileEntry->disableSingleHostMultiConnection();
  96. SharedHandle<InOrderURISelector> selector(new InOrderURISelector());
  97. SharedHandle<Request> req = fileEntry->getRequest(selector);
  98. CPPUNIT_ASSERT_EQUAL(std::string("localhost"), req->getHost());
  99. CPPUNIT_ASSERT_EQUAL(std::string("http"), req->getProtocol());
  100. SharedHandle<Request> req2nd = fileEntry->getRequest(selector);
  101. CPPUNIT_ASSERT_EQUAL(std::string("mirror"), req2nd->getHost());
  102. CPPUNIT_ASSERT_EQUAL(std::string("http"), req2nd->getProtocol());
  103. SharedHandle<Request> req3rd = fileEntry->getRequest(selector);
  104. CPPUNIT_ASSERT(req3rd.isNull());
  105. }
  106. } // namespace aria2