BtDependencyTest.cc 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #include "BtDependency.h"
  2. #include <iostream>
  3. #include <cppunit/extensions/HelperMacros.h>
  4. #include "DefaultPieceStorage.h"
  5. #include "DownloadContext.h"
  6. #include "RequestGroup.h"
  7. #include "Option.h"
  8. #include "Exception.h"
  9. #include "SegmentMan.h"
  10. #include "FileEntry.h"
  11. #include "PieceSelector.h"
  12. #include "bittorrent_helper.h"
  13. namespace aria2 {
  14. class BtDependencyTest:public CppUnit::TestFixture {
  15. CPPUNIT_TEST_SUITE(BtDependencyTest);
  16. CPPUNIT_TEST(testResolve);
  17. CPPUNIT_TEST(testResolve_loadError);
  18. CPPUNIT_TEST(testResolve_dependeeFailure);
  19. CPPUNIT_TEST(testResolve_dependeeInProgress);
  20. CPPUNIT_TEST_SUITE_END();
  21. SharedHandle<RequestGroup> createDependant(const SharedHandle<Option>& option)
  22. {
  23. SharedHandle<RequestGroup> dependant(new RequestGroup(option));
  24. SharedHandle<DownloadContext> dctx
  25. (new DownloadContext(0, 0, "/tmp/outfile.path"));
  26. dctx->setDir("/tmp");
  27. dependant->setDownloadContext(dctx);
  28. return dependant;
  29. }
  30. SharedHandle<RequestGroup>
  31. createDependee
  32. (const SharedHandle<Option>& option,
  33. const std::string& torrentFile,
  34. int64_t length)
  35. {
  36. SharedHandle<RequestGroup> dependee(new RequestGroup(option));
  37. SharedHandle<DownloadContext> dctx
  38. (new DownloadContext(1024*1024, length, torrentFile));
  39. dctx->setDir(".");
  40. dependee->setDownloadContext(dctx);
  41. DefaultPieceStorageHandle ps(new DefaultPieceStorage(dctx, option.get()));
  42. dependee->setPieceStorage(ps);
  43. ps->initStorage();
  44. dependee->initSegmentMan();
  45. return dependee;
  46. }
  47. SharedHandle<Option> _option;
  48. public:
  49. void setUp()
  50. {
  51. _option.reset(new Option());
  52. }
  53. void testResolve();
  54. void testResolve_loadError();
  55. void testResolve_dependeeFailure();
  56. void testResolve_dependeeInProgress();
  57. };
  58. CPPUNIT_TEST_SUITE_REGISTRATION( BtDependencyTest );
  59. void BtDependencyTest::testResolve()
  60. {
  61. std::string filename = "single.torrent";
  62. SharedHandle<RequestGroup> dependant = createDependant(_option);
  63. SharedHandle<RequestGroup> dependee =
  64. createDependee(_option, filename, File(filename).size());
  65. dependee->getPieceStorage()->markAllPiecesDone();
  66. BtDependency dep(dependant, dependee);
  67. CPPUNIT_ASSERT(dep.resolve());
  68. CPPUNIT_ASSERT_EQUAL
  69. (std::string("cd41c7fdddfd034a15a04d7ff881216e01c4ceaf"),
  70. bittorrent::getInfoHashString(dependant->getDownloadContext()));
  71. CPPUNIT_ASSERT_EQUAL(std::string("/tmp/outfile.path"),
  72. dependant->getFirstFilePath());
  73. }
  74. void BtDependencyTest::testResolve_loadError()
  75. {
  76. SharedHandle<RequestGroup> dependant = createDependant(_option);
  77. SharedHandle<RequestGroup> dependee =
  78. createDependee(_option, "notExist", 40);
  79. dependee->getPieceStorage()->markAllPiecesDone();
  80. BtDependency dep(dependant, dependee);
  81. CPPUNIT_ASSERT(dep.resolve());
  82. CPPUNIT_ASSERT
  83. (!dependant->getDownloadContext()->hasAttribute(bittorrent::BITTORRENT));
  84. CPPUNIT_ASSERT_EQUAL(std::string("/tmp/outfile.path"),
  85. dependant->getFirstFilePath());
  86. }
  87. void BtDependencyTest::testResolve_dependeeFailure()
  88. {
  89. SharedHandle<RequestGroup> dependant = createDependant(_option);
  90. SharedHandle<RequestGroup> dependee = createDependee(_option, "notExist", 40);
  91. BtDependency dep(dependant, dependee);
  92. CPPUNIT_ASSERT(dep.resolve());
  93. CPPUNIT_ASSERT
  94. (!dependant->getDownloadContext()->hasAttribute(bittorrent::BITTORRENT));
  95. CPPUNIT_ASSERT_EQUAL(std::string("/tmp/outfile.path"),
  96. dependant->getFirstFilePath());
  97. }
  98. void BtDependencyTest::testResolve_dependeeInProgress()
  99. {
  100. std::string filename = "single.torrent";
  101. SharedHandle<RequestGroup> dependant = createDependant(_option);
  102. SharedHandle<RequestGroup> dependee =
  103. createDependee(_option, filename, File(filename).size());
  104. dependee->increaseNumCommand();
  105. BtDependency dep(dependant, dependee);
  106. CPPUNIT_ASSERT(!dep.resolve());
  107. CPPUNIT_ASSERT_EQUAL(std::string("/tmp/outfile.path"),
  108. dependant->getFirstFilePath());
  109. }
  110. } // namespace aria2