Aria2ApiTest.cc 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. #include "aria2api.h"
  2. #include <cppunit/extensions/HelperMacros.h>
  3. namespace aria2 {
  4. class Aria2ApiTest:public CppUnit::TestFixture {
  5. CPPUNIT_TEST_SUITE(Aria2ApiTest);
  6. CPPUNIT_TEST(testAddUri);
  7. CPPUNIT_TEST(testAddMetalink);
  8. CPPUNIT_TEST(testAddTorrent);
  9. CPPUNIT_TEST(testRemovePause);
  10. CPPUNIT_TEST(testChangePosition);
  11. CPPUNIT_TEST_SUITE_END();
  12. Session* session_;
  13. public:
  14. void setUp()
  15. {
  16. SessionConfig config;
  17. KeyVals options;
  18. session_ = sessionNew(options, config);
  19. }
  20. void tearDown()
  21. {
  22. sessionFinal(session_);
  23. }
  24. void testAddUri();
  25. void testAddMetalink();
  26. void testAddTorrent();
  27. void testRemovePause();
  28. void testChangePosition();
  29. };
  30. CPPUNIT_TEST_SUITE_REGISTRATION(Aria2ApiTest);
  31. void Aria2ApiTest::testAddUri()
  32. {
  33. A2Gid gid;
  34. std::vector<std::string> uris(1);
  35. KeyVals options;
  36. uris[0] = "http://localhost/1";
  37. CPPUNIT_ASSERT_EQUAL(0, addUri(session_, &gid, uris, options));
  38. CPPUNIT_ASSERT(!isNull(gid));
  39. DownloadHandle* hd = getDownloadHandle(session_, gid);
  40. CPPUNIT_ASSERT(hd);
  41. CPPUNIT_ASSERT_EQUAL(1, hd->getNumFiles());
  42. FileData file = hd->getFile(1);
  43. CPPUNIT_ASSERT_EQUAL((size_t)1, file.uris.size());
  44. CPPUNIT_ASSERT_EQUAL(uris[0], file.uris[0].uri);
  45. deleteDownloadHandle(hd);
  46. options.push_back(KeyVals::value_type("file-allocation", "foo"));
  47. CPPUNIT_ASSERT_EQUAL(-1, addUri(session_, &gid, uris, options));
  48. }
  49. void Aria2ApiTest::testAddMetalink()
  50. {
  51. std::string metalinkPath = A2_TEST_DIR"/metalink4.xml";
  52. std::vector<A2Gid> gids;
  53. KeyVals options;
  54. #ifdef ENABLE_METALINK
  55. CPPUNIT_ASSERT_EQUAL(0, addMetalink(session_, &gids, metalinkPath, options));
  56. CPPUNIT_ASSERT_EQUAL((size_t)2, gids.size());
  57. gids.clear();
  58. options.push_back(KeyVals::value_type("file-allocation", "foo"));
  59. CPPUNIT_ASSERT_EQUAL(-1, addMetalink(session_, &gids, metalinkPath,
  60. options));
  61. #else // !ENABLE_METALINK
  62. CPPUNIT_ASSERT_EQUAL(-1, addMetalink(session_, &gids, metalinkPath,
  63. options));
  64. #endif // !ENABLE_METALINK
  65. }
  66. void Aria2ApiTest::testAddTorrent()
  67. {
  68. std::string torrentPath = A2_TEST_DIR"/test.torrent";
  69. A2Gid gid;
  70. KeyVals options;
  71. #ifdef ENABLE_BITTORRENT
  72. CPPUNIT_ASSERT_EQUAL(0, addTorrent(session_, &gid, torrentPath, options));
  73. CPPUNIT_ASSERT(!isNull(gid));
  74. options.push_back(KeyVals::value_type("file-allocation", "foo"));
  75. CPPUNIT_ASSERT_EQUAL(-1, addTorrent(session_, &gid, torrentPath, options));
  76. #else // !ENABLE_BITTORRENT
  77. CPPUNIT_ASSERT_EQUAL(-1, addTorrent(session_, &gid, torrentPath, options));
  78. #endif // !ENABLE_BITTORRENT
  79. }
  80. void Aria2ApiTest::testRemovePause()
  81. {
  82. A2Gid gid;
  83. std::vector<std::string> uris(1);
  84. KeyVals options;
  85. uris[0] = "http://localhost/1";
  86. CPPUNIT_ASSERT_EQUAL(0, addUri(session_, &gid, uris, options));
  87. DownloadHandle* hd = getDownloadHandle(session_, gid);
  88. CPPUNIT_ASSERT(hd);
  89. CPPUNIT_ASSERT_EQUAL(DOWNLOAD_WAITING, hd->getStatus());
  90. deleteDownloadHandle(hd);
  91. CPPUNIT_ASSERT_EQUAL(-1, pauseDownload(session_, (A2Gid)0));
  92. CPPUNIT_ASSERT_EQUAL(0, pauseDownload(session_, gid));
  93. hd = getDownloadHandle(session_, gid);
  94. CPPUNIT_ASSERT(hd);
  95. CPPUNIT_ASSERT_EQUAL(DOWNLOAD_PAUSED, hd->getStatus());
  96. deleteDownloadHandle(hd);
  97. CPPUNIT_ASSERT_EQUAL(-1, unpauseDownload(session_, (A2Gid)0));
  98. CPPUNIT_ASSERT_EQUAL(0, unpauseDownload(session_, gid));
  99. hd = getDownloadHandle(session_, gid);
  100. CPPUNIT_ASSERT(hd);
  101. CPPUNIT_ASSERT_EQUAL(DOWNLOAD_WAITING, hd->getStatus());
  102. deleteDownloadHandle(hd);
  103. CPPUNIT_ASSERT_EQUAL(-1, removeDownload(session_, (A2Gid)0));
  104. CPPUNIT_ASSERT_EQUAL(0, removeDownload(session_, gid));
  105. hd = getDownloadHandle(session_, gid);
  106. CPPUNIT_ASSERT(!hd);
  107. }
  108. void Aria2ApiTest::testChangePosition()
  109. {
  110. int N = 10;
  111. std::vector<A2Gid> gids(N);
  112. std::vector<std::string> uris(1);
  113. KeyVals options;
  114. uris[0] = "http://localhost/";
  115. for(int i = 0; i < N; ++i) {
  116. CPPUNIT_ASSERT_EQUAL(0, addUri(session_, &gids[i], uris, options));
  117. }
  118. CPPUNIT_ASSERT_EQUAL(-1, changePosition(session_, (A2Gid)0, -2,
  119. OFFSET_MODE_CUR));
  120. CPPUNIT_ASSERT_EQUAL(2, changePosition(session_, gids[4], -2,
  121. OFFSET_MODE_CUR));
  122. CPPUNIT_ASSERT_EQUAL(5, changePosition(session_, gids[4], 5,
  123. OFFSET_MODE_SET));
  124. CPPUNIT_ASSERT_EQUAL(7, changePosition(session_, gids[4], -2,
  125. OFFSET_MODE_END));
  126. }
  127. } // namespace aria2