FileEntryTest.cc 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  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(testReuseUri);
  13. CPPUNIT_TEST_SUITE_END();
  14. public:
  15. void setUp() {}
  16. void testSetupDir();
  17. void testRemoveURIWhoseHostnameIs();
  18. void testExtractURIResult();
  19. void testGetRequest();
  20. void testGetRequest_disableSingleHostMultiConnection();
  21. void testReuseUri();
  22. };
  23. CPPUNIT_TEST_SUITE_REGISTRATION( FileEntryTest );
  24. static SharedHandle<FileEntry> createFileEntry()
  25. {
  26. const char* uris[] = { "http://localhost/aria2.zip",
  27. "ftp://localhost/aria2.zip",
  28. "http://mirror/aria2.zip" };
  29. SharedHandle<FileEntry> fileEntry(new FileEntry());
  30. fileEntry->setUris(std::deque<std::string>(&uris[0], &uris[3]));
  31. return fileEntry;
  32. }
  33. void FileEntryTest::testSetupDir()
  34. {
  35. std::string dir = "/tmp/aria2-FileEntryTest-testSetupDir";
  36. std::string filename = "filename";
  37. std::string path = dir+"/"+filename;
  38. File d(dir);
  39. if(d.exists()) {
  40. CPPUNIT_ASSERT(d.remove());
  41. }
  42. CPPUNIT_ASSERT(!d.exists());
  43. FileEntry fileEntry(path, 0, 0);
  44. fileEntry.setupDir();
  45. CPPUNIT_ASSERT(d.isDir());
  46. File f(path);
  47. CPPUNIT_ASSERT(!f.exists());
  48. }
  49. void FileEntryTest::testRemoveURIWhoseHostnameIs()
  50. {
  51. SharedHandle<FileEntry> fileEntry = createFileEntry();
  52. fileEntry->removeURIWhoseHostnameIs("localhost");
  53. CPPUNIT_ASSERT_EQUAL((size_t)1, fileEntry->getRemainingUris().size());
  54. CPPUNIT_ASSERT_EQUAL(std::string("http://mirror/aria2.zip"),
  55. fileEntry->getRemainingUris()[0]);
  56. }
  57. void FileEntryTest::testExtractURIResult()
  58. {
  59. FileEntry fileEntry;
  60. fileEntry.addURIResult("http://timeout/file", downloadresultcode::TIME_OUT);
  61. fileEntry.addURIResult("http://finished/file", downloadresultcode::FINISHED);
  62. fileEntry.addURIResult("http://timeout/file2", downloadresultcode::TIME_OUT);
  63. fileEntry.addURIResult("http://unknownerror/file", downloadresultcode::UNKNOWN_ERROR);
  64. std::deque<URIResult> res;
  65. fileEntry.extractURIResult(res, downloadresultcode::TIME_OUT);
  66. CPPUNIT_ASSERT_EQUAL((size_t)2, res.size());
  67. CPPUNIT_ASSERT_EQUAL(std::string("http://timeout/file"), res[0].getURI());
  68. CPPUNIT_ASSERT_EQUAL(std::string("http://timeout/file2"), res[1].getURI());
  69. CPPUNIT_ASSERT_EQUAL((size_t)2, fileEntry.getURIResults().size());
  70. CPPUNIT_ASSERT_EQUAL(std::string("http://finished/file"),
  71. fileEntry.getURIResults()[0].getURI());
  72. CPPUNIT_ASSERT_EQUAL(std::string("http://unknownerror/file"),
  73. fileEntry.getURIResults()[1].getURI());
  74. res.clear();
  75. fileEntry.extractURIResult(res, downloadresultcode::TIME_OUT);
  76. CPPUNIT_ASSERT(res.empty());
  77. CPPUNIT_ASSERT_EQUAL((size_t)2, fileEntry.getURIResults().size());
  78. }
  79. void FileEntryTest::testGetRequest()
  80. {
  81. SharedHandle<FileEntry> fileEntry = createFileEntry();
  82. SharedHandle<InOrderURISelector> selector(new InOrderURISelector());
  83. SharedHandle<Request> req = fileEntry->getRequest(selector);
  84. CPPUNIT_ASSERT_EQUAL(std::string("localhost"), req->getHost());
  85. CPPUNIT_ASSERT_EQUAL(std::string("http"), req->getProtocol());
  86. fileEntry->poolRequest(req);
  87. SharedHandle<Request> req2nd = fileEntry->getRequest(selector);
  88. CPPUNIT_ASSERT_EQUAL(std::string("localhost"), req2nd->getHost());
  89. CPPUNIT_ASSERT_EQUAL(std::string("http"), req2nd->getProtocol());
  90. SharedHandle<Request> req3rd = fileEntry->getRequest(selector);
  91. CPPUNIT_ASSERT_EQUAL(std::string("localhost"), req3rd->getHost());
  92. CPPUNIT_ASSERT_EQUAL(std::string("ftp"), req3rd->getProtocol());
  93. }
  94. void FileEntryTest::testGetRequest_disableSingleHostMultiConnection()
  95. {
  96. SharedHandle<FileEntry> fileEntry = createFileEntry();
  97. fileEntry->disableSingleHostMultiConnection();
  98. SharedHandle<InOrderURISelector> selector(new InOrderURISelector());
  99. SharedHandle<Request> req = fileEntry->getRequest(selector);
  100. CPPUNIT_ASSERT_EQUAL(std::string("localhost"), req->getHost());
  101. CPPUNIT_ASSERT_EQUAL(std::string("http"), req->getProtocol());
  102. SharedHandle<Request> req2nd = fileEntry->getRequest(selector);
  103. CPPUNIT_ASSERT_EQUAL(std::string("mirror"), req2nd->getHost());
  104. CPPUNIT_ASSERT_EQUAL(std::string("http"), req2nd->getProtocol());
  105. SharedHandle<Request> req3rd = fileEntry->getRequest(selector);
  106. CPPUNIT_ASSERT(req3rd.isNull());
  107. }
  108. void FileEntryTest::testReuseUri()
  109. {
  110. SharedHandle<InOrderURISelector> selector(new InOrderURISelector());
  111. SharedHandle<FileEntry> fileEntry = createFileEntry();
  112. size_t numUris = fileEntry->getRemainingUris().size();
  113. for(size_t i = 0; i < numUris; ++i) {
  114. fileEntry->getRequest(selector);
  115. }
  116. CPPUNIT_ASSERT_EQUAL((size_t)0, fileEntry->getRemainingUris().size());
  117. fileEntry->addURIResult("http://localhost/aria2.zip",
  118. downloadresultcode::UNKNOWN_ERROR);
  119. fileEntry->reuseUri(3);
  120. CPPUNIT_ASSERT_EQUAL((size_t)3, fileEntry->getRemainingUris().size());
  121. const std::deque<std::string>& uris = fileEntry->getRemainingUris();
  122. CPPUNIT_ASSERT_EQUAL(std::string("ftp://localhost/aria2.zip"), uris[0]);
  123. CPPUNIT_ASSERT_EQUAL(std::string("http://mirror/aria2.zip"), uris[1]);
  124. CPPUNIT_ASSERT_EQUAL(std::string("ftp://localhost/aria2.zip"), uris[2]);
  125. }
  126. } // namespace aria2