BtDependencyTest.cc 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #include "BtDependency.h"
  2. #include "SingleFileDownloadContext.h"
  3. #include "DefaultPieceStorage.h"
  4. #include "BtContext.h"
  5. #include "RequestGroup.h"
  6. #include "Option.h"
  7. #include "Exception.h"
  8. #include "SegmentMan.h"
  9. #include <cppunit/extensions/HelperMacros.h>
  10. class BtDependencyTest:public CppUnit::TestFixture {
  11. CPPUNIT_TEST_SUITE(BtDependencyTest);
  12. CPPUNIT_TEST(testResolve);
  13. CPPUNIT_TEST(testResolve_loadError);
  14. CPPUNIT_TEST(testResolve_dependeeFailure);
  15. CPPUNIT_TEST(testResolve_dependeeInProgress);
  16. CPPUNIT_TEST_SUITE_END();
  17. RequestGroupHandle createDependant(const Option* option)
  18. {
  19. RequestGroupHandle dependant = new RequestGroup(option, Strings());
  20. SingleFileDownloadContextHandle dctx =
  21. new SingleFileDownloadContext(0, 0, "");
  22. dctx->setDir("/tmp");
  23. dependant->setDownloadContext(dctx);
  24. return dependant;
  25. }
  26. RequestGroupHandle createDependee(const Option* option, const string& torrentFile, int64_t length)
  27. {
  28. RequestGroupHandle dependee = new RequestGroup(option, Strings());
  29. SingleFileDownloadContextHandle dctx =
  30. new SingleFileDownloadContext(1024*1024, length, torrentFile);
  31. dctx->setDir(".");
  32. dependee->setDownloadContext(dctx);
  33. DefaultPieceStorageHandle ps = new DefaultPieceStorage(dctx, option);
  34. dependee->setPieceStorage(ps);
  35. ps->initStorage();
  36. dependee->initSegmentMan();
  37. return dependee;
  38. }
  39. public:
  40. void setUp() {}
  41. void testResolve();
  42. void testResolve_loadError();
  43. void testResolve_dependeeFailure();
  44. void testResolve_dependeeInProgress();
  45. };
  46. CPPUNIT_TEST_SUITE_REGISTRATION( BtDependencyTest );
  47. void BtDependencyTest::testResolve()
  48. {
  49. string filename = "test.torrent";
  50. Option option;
  51. RequestGroupHandle dependant = createDependant(&option);
  52. RequestGroupHandle dependee = createDependee(&option, filename, File(filename).size());
  53. dependee->getPieceStorage()->markAllPiecesDone();
  54. BtDependency dep(dependant, dependee, &option);
  55. CPPUNIT_ASSERT(dep.resolve());
  56. BtContextHandle btContext = dependant->getDownloadContext();
  57. CPPUNIT_ASSERT(!btContext.isNull());
  58. CPPUNIT_ASSERT_EQUAL(string("/tmp/aria2-test"), btContext->getActualBasePath());
  59. }
  60. void BtDependencyTest::testResolve_loadError()
  61. {
  62. try {
  63. Option option;
  64. RequestGroupHandle dependant = createDependant(&option);
  65. RequestGroupHandle dependee = createDependee(&option, "notExist", 40);
  66. dependee->getPieceStorage()->markAllPiecesDone();
  67. BtDependency dep(dependant, dependee, &option);
  68. CPPUNIT_ASSERT(dep.resolve());
  69. SingleFileDownloadContextHandle dctx = dependant->getDownloadContext();
  70. CPPUNIT_ASSERT(!dctx.isNull());
  71. CPPUNIT_ASSERT_EQUAL(string("/tmp/index.html"), dctx->getActualBasePath());
  72. } catch(Exception* e) {
  73. cerr << e->getMsg() << endl;
  74. delete e;
  75. CPPUNIT_FAIL("an exception was thrown.");
  76. }
  77. }
  78. void BtDependencyTest::testResolve_dependeeFailure()
  79. {
  80. Option option;
  81. RequestGroupHandle dependant = createDependant(&option);
  82. RequestGroupHandle dependee = createDependee(&option, "notExist", 40);
  83. BtDependency dep(dependant, dependee, &option);
  84. CPPUNIT_ASSERT(dep.resolve());
  85. SingleFileDownloadContextHandle dctx = dependant->getDownloadContext();
  86. CPPUNIT_ASSERT(!dctx.isNull());
  87. CPPUNIT_ASSERT_EQUAL(string("/tmp/index.html"), dctx->getActualBasePath());
  88. }
  89. void BtDependencyTest::testResolve_dependeeInProgress()
  90. {
  91. string filename = "test.torrent";
  92. Option option;
  93. RequestGroupHandle dependant = createDependant(&option);
  94. RequestGroupHandle dependee = createDependee(&option, filename, File(filename).size());
  95. dependee->increaseNumCommand();
  96. BtDependency dep(dependant, dependee, &option);
  97. CPPUNIT_ASSERT(!dep.resolve());
  98. }