Aria2ApiTest.cc 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  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(testChangeOption);
  12. CPPUNIT_TEST_SUITE_END();
  13. Session* session_;
  14. public:
  15. void setUp()
  16. {
  17. SessionConfig config;
  18. KeyVals options;
  19. session_ = sessionNew(options, config);
  20. }
  21. void tearDown()
  22. {
  23. sessionFinal(session_);
  24. }
  25. void testAddUri();
  26. void testAddMetalink();
  27. void testAddTorrent();
  28. void testRemovePause();
  29. void testChangePosition();
  30. void testChangeOption();
  31. };
  32. CPPUNIT_TEST_SUITE_REGISTRATION(Aria2ApiTest);
  33. void Aria2ApiTest::testAddUri()
  34. {
  35. A2Gid gid;
  36. std::vector<std::string> uris(1);
  37. KeyVals options;
  38. uris[0] = "http://localhost/1";
  39. CPPUNIT_ASSERT_EQUAL(0, addUri(session_, &gid, uris, options));
  40. CPPUNIT_ASSERT(!isNull(gid));
  41. DownloadHandle* hd = getDownloadHandle(session_, gid);
  42. CPPUNIT_ASSERT(hd);
  43. CPPUNIT_ASSERT_EQUAL(1, hd->getNumFiles());
  44. FileData file = hd->getFile(1);
  45. CPPUNIT_ASSERT_EQUAL((size_t)1, file.uris.size());
  46. CPPUNIT_ASSERT_EQUAL(uris[0], file.uris[0].uri);
  47. deleteDownloadHandle(hd);
  48. options.push_back(KeyVals::value_type("file-allocation", "foo"));
  49. CPPUNIT_ASSERT_EQUAL(-1, addUri(session_, &gid, uris, options));
  50. }
  51. void Aria2ApiTest::testAddMetalink()
  52. {
  53. std::string metalinkPath = A2_TEST_DIR"/metalink4.xml";
  54. std::vector<A2Gid> gids;
  55. KeyVals options;
  56. #ifdef ENABLE_METALINK
  57. CPPUNIT_ASSERT_EQUAL(0, addMetalink(session_, &gids, metalinkPath, options));
  58. CPPUNIT_ASSERT_EQUAL((size_t)2, gids.size());
  59. gids.clear();
  60. options.push_back(KeyVals::value_type("file-allocation", "foo"));
  61. CPPUNIT_ASSERT_EQUAL(-1, addMetalink(session_, &gids, metalinkPath,
  62. options));
  63. #else // !ENABLE_METALINK
  64. CPPUNIT_ASSERT_EQUAL(-1, addMetalink(session_, &gids, metalinkPath,
  65. options));
  66. #endif // !ENABLE_METALINK
  67. }
  68. void Aria2ApiTest::testAddTorrent()
  69. {
  70. std::string torrentPath = A2_TEST_DIR"/test.torrent";
  71. A2Gid gid;
  72. KeyVals options;
  73. #ifdef ENABLE_BITTORRENT
  74. CPPUNIT_ASSERT_EQUAL(0, addTorrent(session_, &gid, torrentPath, options));
  75. CPPUNIT_ASSERT(!isNull(gid));
  76. options.push_back(KeyVals::value_type("file-allocation", "foo"));
  77. CPPUNIT_ASSERT_EQUAL(-1, addTorrent(session_, &gid, torrentPath, options));
  78. #else // !ENABLE_BITTORRENT
  79. CPPUNIT_ASSERT_EQUAL(-1, addTorrent(session_, &gid, torrentPath, options));
  80. #endif // !ENABLE_BITTORRENT
  81. }
  82. void Aria2ApiTest::testRemovePause()
  83. {
  84. A2Gid gid;
  85. std::vector<std::string> uris(1);
  86. KeyVals options;
  87. uris[0] = "http://localhost/1";
  88. CPPUNIT_ASSERT_EQUAL(0, addUri(session_, &gid, uris, options));
  89. DownloadHandle* hd = getDownloadHandle(session_, gid);
  90. CPPUNIT_ASSERT(hd);
  91. CPPUNIT_ASSERT_EQUAL(DOWNLOAD_WAITING, hd->getStatus());
  92. deleteDownloadHandle(hd);
  93. CPPUNIT_ASSERT_EQUAL(-1, pauseDownload(session_, (A2Gid)0));
  94. CPPUNIT_ASSERT_EQUAL(0, pauseDownload(session_, gid));
  95. hd = getDownloadHandle(session_, gid);
  96. CPPUNIT_ASSERT(hd);
  97. CPPUNIT_ASSERT_EQUAL(DOWNLOAD_PAUSED, hd->getStatus());
  98. deleteDownloadHandle(hd);
  99. CPPUNIT_ASSERT_EQUAL(-1, unpauseDownload(session_, (A2Gid)0));
  100. CPPUNIT_ASSERT_EQUAL(0, unpauseDownload(session_, gid));
  101. hd = getDownloadHandle(session_, gid);
  102. CPPUNIT_ASSERT(hd);
  103. CPPUNIT_ASSERT_EQUAL(DOWNLOAD_WAITING, hd->getStatus());
  104. deleteDownloadHandle(hd);
  105. CPPUNIT_ASSERT_EQUAL(-1, removeDownload(session_, (A2Gid)0));
  106. CPPUNIT_ASSERT_EQUAL(0, removeDownload(session_, gid));
  107. hd = getDownloadHandle(session_, gid);
  108. CPPUNIT_ASSERT(!hd);
  109. }
  110. void Aria2ApiTest::testChangePosition()
  111. {
  112. int N = 10;
  113. std::vector<A2Gid> gids(N);
  114. std::vector<std::string> uris(1);
  115. KeyVals options;
  116. uris[0] = "http://localhost/";
  117. for(int i = 0; i < N; ++i) {
  118. CPPUNIT_ASSERT_EQUAL(0, addUri(session_, &gids[i], uris, options));
  119. }
  120. CPPUNIT_ASSERT_EQUAL(-1, changePosition(session_, (A2Gid)0, -2,
  121. OFFSET_MODE_CUR));
  122. CPPUNIT_ASSERT_EQUAL(2, changePosition(session_, gids[4], -2,
  123. OFFSET_MODE_CUR));
  124. CPPUNIT_ASSERT_EQUAL(5, changePosition(session_, gids[4], 5,
  125. OFFSET_MODE_SET));
  126. CPPUNIT_ASSERT_EQUAL(7, changePosition(session_, gids[4], -2,
  127. OFFSET_MODE_END));
  128. }
  129. void Aria2ApiTest::testChangeOption()
  130. {
  131. A2Gid gid;
  132. std::vector<std::string> uris(1);
  133. KeyVals options;
  134. uris[0] = "http://localhost/1";
  135. options.push_back(KeyVals::value_type("dir", "mydownload"));
  136. CPPUNIT_ASSERT_EQUAL(0, addUri(session_, &gid, uris, options));
  137. DownloadHandle* hd = getDownloadHandle(session_, gid);
  138. CPPUNIT_ASSERT(hd);
  139. CPPUNIT_ASSERT_EQUAL(1, hd->getNumFiles());
  140. FileData file = hd->getFile(1);
  141. CPPUNIT_ASSERT_EQUAL((size_t)1, file.uris.size());
  142. CPPUNIT_ASSERT_EQUAL(uris[0], file.uris[0].uri);
  143. CPPUNIT_ASSERT_EQUAL(std::string("mydownload"), hd->getOption("dir"));
  144. CPPUNIT_ASSERT(hd->getOption("unknown").empty());
  145. KeyVals retopts = hd->getOption();
  146. CPPUNIT_ASSERT(std::find(retopts.begin(), retopts.end(),
  147. KeyVals::value_type("dir", "mydownload"))
  148. != retopts.end());
  149. deleteDownloadHandle(hd);
  150. // failure with null gid
  151. CPPUNIT_ASSERT_EQUAL(-1, changeOption(session_, (A2Gid)0, options));
  152. // change option
  153. options.clear();
  154. options.push_back(KeyVals::value_type("dir", "newlocation"));
  155. CPPUNIT_ASSERT_EQUAL(0, changeOption(session_, gid, options));
  156. hd = getDownloadHandle(session_, gid);
  157. CPPUNIT_ASSERT_EQUAL(std::string("newlocation"), hd->getOption("dir"));
  158. deleteDownloadHandle(hd);
  159. // failure with bad option value
  160. options.clear();
  161. options.push_back(KeyVals::value_type("file-allocation", "foo"));
  162. CPPUNIT_ASSERT_EQUAL(-1, changeOption(session_, gid, options));
  163. }
  164. } // namespace aria2