Aria2ApiTest.cc 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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(testRemovePause);
  9. CPPUNIT_TEST(testChangePosition);
  10. CPPUNIT_TEST_SUITE_END();
  11. Session* session_;
  12. public:
  13. void setUp()
  14. {
  15. SessionConfig config;
  16. KeyVals options;
  17. session_ = sessionNew(options, config);
  18. }
  19. void tearDown()
  20. {
  21. sessionFinal(session_);
  22. }
  23. void testAddUri();
  24. void testAddMetalink();
  25. void testRemovePause();
  26. void testChangePosition();
  27. };
  28. CPPUNIT_TEST_SUITE_REGISTRATION(Aria2ApiTest);
  29. void Aria2ApiTest::testAddUri()
  30. {
  31. A2Gid gid;
  32. std::vector<std::string> uris(1);
  33. KeyVals options;
  34. uris[0] = "http://localhost/1";
  35. CPPUNIT_ASSERT_EQUAL(0, addUri(session_, &gid, uris, options));
  36. CPPUNIT_ASSERT(!isNull(gid));
  37. DownloadHandle* hd = getDownloadHandle(session_, gid);
  38. CPPUNIT_ASSERT(hd);
  39. CPPUNIT_ASSERT_EQUAL(1, hd->getNumFiles());
  40. FileData file = hd->getFile(1);
  41. CPPUNIT_ASSERT_EQUAL((size_t)1, file.uris.size());
  42. CPPUNIT_ASSERT_EQUAL(uris[0], file.uris[0].uri);
  43. deleteDownloadHandle(hd);
  44. options.push_back(KeyVals::value_type("file-allocation", "foo"));
  45. CPPUNIT_ASSERT_EQUAL(-1, addUri(session_, &gid, uris, options));
  46. }
  47. void Aria2ApiTest::testAddMetalink()
  48. {
  49. std::string metalinkPath = A2_TEST_DIR"/metalink4.xml";
  50. std::vector<A2Gid> gids;
  51. KeyVals options;
  52. CPPUNIT_ASSERT_EQUAL(0, addMetalink(session_, &gids, metalinkPath, options));
  53. CPPUNIT_ASSERT_EQUAL((size_t)2, gids.size());
  54. gids.clear();
  55. options.push_back(KeyVals::value_type("file-allocation", "foo"));
  56. CPPUNIT_ASSERT_EQUAL(-1, addMetalink(session_, &gids, metalinkPath,
  57. options));
  58. }
  59. void Aria2ApiTest::testRemovePause()
  60. {
  61. A2Gid gid;
  62. std::vector<std::string> uris(1);
  63. KeyVals options;
  64. uris[0] = "http://localhost/1";
  65. CPPUNIT_ASSERT_EQUAL(0, addUri(session_, &gid, uris, options));
  66. DownloadHandle* hd = getDownloadHandle(session_, gid);
  67. CPPUNIT_ASSERT(hd);
  68. CPPUNIT_ASSERT_EQUAL(DOWNLOAD_WAITING, hd->getStatus());
  69. deleteDownloadHandle(hd);
  70. CPPUNIT_ASSERT_EQUAL(-1, pauseDownload(session_, (A2Gid)0));
  71. CPPUNIT_ASSERT_EQUAL(0, pauseDownload(session_, gid));
  72. hd = getDownloadHandle(session_, gid);
  73. CPPUNIT_ASSERT(hd);
  74. CPPUNIT_ASSERT_EQUAL(DOWNLOAD_PAUSED, hd->getStatus());
  75. deleteDownloadHandle(hd);
  76. CPPUNIT_ASSERT_EQUAL(-1, unpauseDownload(session_, (A2Gid)0));
  77. CPPUNIT_ASSERT_EQUAL(0, unpauseDownload(session_, gid));
  78. hd = getDownloadHandle(session_, gid);
  79. CPPUNIT_ASSERT(hd);
  80. CPPUNIT_ASSERT_EQUAL(DOWNLOAD_WAITING, hd->getStatus());
  81. deleteDownloadHandle(hd);
  82. CPPUNIT_ASSERT_EQUAL(-1, removeDownload(session_, (A2Gid)0));
  83. CPPUNIT_ASSERT_EQUAL(0, removeDownload(session_, gid));
  84. hd = getDownloadHandle(session_, gid);
  85. CPPUNIT_ASSERT(!hd);
  86. }
  87. void Aria2ApiTest::testChangePosition()
  88. {
  89. int N = 10;
  90. std::vector<A2Gid> gids(N);
  91. std::vector<std::string> uris(1);
  92. KeyVals options;
  93. uris[0] = "http://localhost/";
  94. for(int i = 0; i < N; ++i) {
  95. CPPUNIT_ASSERT_EQUAL(0, addUri(session_, &gids[i], uris, options));
  96. }
  97. CPPUNIT_ASSERT_EQUAL(-1, changePosition(session_, (A2Gid)0, -2,
  98. OFFSET_MODE_CUR));
  99. CPPUNIT_ASSERT_EQUAL(2, changePosition(session_, gids[4], -2,
  100. OFFSET_MODE_CUR));
  101. CPPUNIT_ASSERT_EQUAL(5, changePosition(session_, gids[4], 5,
  102. OFFSET_MODE_SET));
  103. CPPUNIT_ASSERT_EQUAL(7, changePosition(session_, gids[4], -2,
  104. OFFSET_MODE_END));
  105. }
  106. } // namespace aria2