XmlRpcMethodTest.cc 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519
  1. #include "XmlRpcMethod.h"
  2. #include <cppunit/extensions/HelperMacros.h>
  3. #include "DownloadEngine.h"
  4. #include "SelectEventPoll.h"
  5. #include "Option.h"
  6. #include "RequestGroupMan.h"
  7. #include "ServerStatMan.h"
  8. #include "RequestGroup.h"
  9. #include "XmlRpcMethodImpl.h"
  10. #include "BDE.h"
  11. #include "OptionParser.h"
  12. #include "OptionHandler.h"
  13. #include "XmlRpcRequest.h"
  14. #include "XmlRpcResponse.h"
  15. #include "prefs.h"
  16. #include "TestUtil.h"
  17. #include "DownloadContext.h"
  18. namespace aria2 {
  19. namespace xmlrpc {
  20. class XmlRpcMethodTest:public CppUnit::TestFixture {
  21. CPPUNIT_TEST_SUITE(XmlRpcMethodTest);
  22. CPPUNIT_TEST(testAddUri);
  23. CPPUNIT_TEST(testAddUri_withoutUri);
  24. CPPUNIT_TEST(testAddUri_notUri);
  25. CPPUNIT_TEST(testAddUri_withBadOption);
  26. CPPUNIT_TEST(testAddUri_withPosition);
  27. CPPUNIT_TEST(testAddUri_withBadPosition);
  28. #ifdef ENABLE_BITTORRENT
  29. CPPUNIT_TEST(testAddTorrent);
  30. CPPUNIT_TEST(testAddTorrent_withoutTorrent);
  31. CPPUNIT_TEST(testAddTorrent_notBase64Torrent);
  32. CPPUNIT_TEST(testAddTorrent_withPosition);
  33. #endif // ENABLE_BITTORRENT
  34. #ifdef ENABLE_METALINK
  35. CPPUNIT_TEST(testAddMetalink);
  36. CPPUNIT_TEST(testAddMetalink_withoutMetalink);
  37. CPPUNIT_TEST(testAddMetalink_notBase64Metalink);
  38. CPPUNIT_TEST(testAddMetalink_withPosition);
  39. #endif // ENABLE_METALINK
  40. CPPUNIT_TEST(testChangeOption);
  41. CPPUNIT_TEST(testChangeOption_withBadOption);
  42. CPPUNIT_TEST(testChangeOption_withoutGid);
  43. CPPUNIT_TEST(testChangeGlobalOption);
  44. CPPUNIT_TEST(testChangeGlobalOption_withBadOption);
  45. CPPUNIT_TEST(testTellStatus_withoutGid);
  46. CPPUNIT_TEST(testTellWaiting);
  47. CPPUNIT_TEST(testTellWaiting_fail);
  48. CPPUNIT_TEST(testNoSuchMethod);
  49. CPPUNIT_TEST_SUITE_END();
  50. private:
  51. SharedHandle<DownloadEngine> _e;
  52. SharedHandle<Option> _option;
  53. public:
  54. void setUp()
  55. {
  56. RequestGroup::resetGIDCounter();
  57. _option.reset(new Option());
  58. _option->put(PREF_DIR, "/tmp");
  59. _option->put(PREF_SEGMENT_SIZE, "1048576");
  60. _e.reset(new DownloadEngine(SharedHandle<EventPoll>(new SelectEventPoll())));
  61. _e->option = _option.get();
  62. _e->_requestGroupMan.reset
  63. (new RequestGroupMan(std::deque<SharedHandle<RequestGroup> >(),
  64. 1, _option.get()));
  65. }
  66. void tearDown() {}
  67. void testAddUri();
  68. void testAddUri_withoutUri();
  69. void testAddUri_notUri();
  70. void testAddUri_withBadOption();
  71. void testAddUri_withPosition();
  72. void testAddUri_withBadPosition();
  73. #ifdef ENABLE_BITTORRENT
  74. void testAddTorrent();
  75. void testAddTorrent_withoutTorrent();
  76. void testAddTorrent_notBase64Torrent();
  77. void testAddTorrent_withPosition();
  78. #endif // ENABLE_BITTORRENT
  79. #ifdef ENABLE_METALINK
  80. void testAddMetalink();
  81. void testAddMetalink_withoutMetalink();
  82. void testAddMetalink_notBase64Metalink();
  83. void testAddMetalink_withPosition();
  84. #endif // ENABLE_METALINK
  85. void testChangeOption();
  86. void testChangeOption_withBadOption();
  87. void testChangeOption_withoutGid();
  88. void testChangeGlobalOption();
  89. void testChangeGlobalOption_withBadOption();
  90. void testTellStatus_withoutGid();
  91. void testTellWaiting();
  92. void testTellWaiting_fail();
  93. void testNoSuchMethod();
  94. };
  95. CPPUNIT_TEST_SUITE_REGISTRATION(XmlRpcMethodTest);
  96. void XmlRpcMethodTest::testAddUri()
  97. {
  98. AddUriXmlRpcMethod m;
  99. XmlRpcRequest req("aria2.addUri", BDE::list());
  100. req._params << BDE::list();
  101. req._params[0] << BDE("http://localhost/");
  102. {
  103. XmlRpcResponse res = m.execute(req, _e.get());
  104. CPPUNIT_ASSERT_EQUAL(0, res._code);
  105. const std::deque<SharedHandle<RequestGroup> > rgs =
  106. _e->_requestGroupMan->getReservedGroups();
  107. CPPUNIT_ASSERT_EQUAL((size_t)1, rgs.size());
  108. CPPUNIT_ASSERT_EQUAL(std::string("http://localhost/"),
  109. rgs.front()->getDownloadContext()->getFirstFileEntry()->getRemainingUris().front());
  110. }
  111. // with options
  112. BDE opt = BDE::dict();
  113. opt[PREF_DIR] = BDE("/sink");
  114. req._params << opt;
  115. {
  116. XmlRpcResponse res = m.execute(req, _e.get());
  117. CPPUNIT_ASSERT_EQUAL(0, res._code);
  118. CPPUNIT_ASSERT_EQUAL(std::string("/sink"),
  119. _e->_requestGroupMan->findReservedGroup(2)->
  120. getDownloadContext()->getDir());
  121. }
  122. }
  123. void XmlRpcMethodTest::testAddUri_withoutUri()
  124. {
  125. AddUriXmlRpcMethod m;
  126. XmlRpcRequest req("aria2.addUri", BDE::list());
  127. XmlRpcResponse res = m.execute(req, _e.get());
  128. CPPUNIT_ASSERT_EQUAL(1, res._code);
  129. }
  130. void XmlRpcMethodTest::testAddUri_notUri()
  131. {
  132. AddUriXmlRpcMethod m;
  133. XmlRpcRequest req("aria2.addUri", BDE::list());
  134. req._params << BDE::list();
  135. req._params[0] << BDE("not uri");
  136. XmlRpcResponse res = m.execute(req, _e.get());
  137. CPPUNIT_ASSERT_EQUAL(1, res._code);
  138. }
  139. void XmlRpcMethodTest::testAddUri_withBadOption()
  140. {
  141. AddUriXmlRpcMethod m;
  142. XmlRpcRequest req("aria2.addUri", BDE::list());
  143. req._params << BDE::list();
  144. req._params[0] << BDE("http://localhost");
  145. BDE opt = BDE::dict();
  146. opt[PREF_FILE_ALLOCATION] = BDE("badvalue");
  147. req._params << opt;
  148. XmlRpcResponse res = m.execute(req, _e.get());
  149. CPPUNIT_ASSERT_EQUAL(1, res._code);
  150. }
  151. void XmlRpcMethodTest::testAddUri_withPosition()
  152. {
  153. AddUriXmlRpcMethod m;
  154. XmlRpcRequest req1("aria2.addUri", BDE::list());
  155. req1._params << BDE::list();
  156. req1._params[0] << BDE("http://uri1");
  157. XmlRpcResponse res1 = m.execute(req1, _e.get());
  158. CPPUNIT_ASSERT_EQUAL(0, res1._code);
  159. XmlRpcRequest req2("aria2.addUri", BDE::list());
  160. req2._params << BDE::list();
  161. req2._params[0] << BDE("http://uri2");
  162. req2._params << BDE::dict();
  163. req2._params << BDE((int64_t)0);
  164. m.execute(req2, _e.get());
  165. std::string uri =
  166. _e->_requestGroupMan->getReservedGroups()[0]->getDownloadContext()->getFirstFileEntry()->getRemainingUris()[0];
  167. CPPUNIT_ASSERT_EQUAL(std::string("http://uri2"), uri);
  168. }
  169. void XmlRpcMethodTest::testAddUri_withBadPosition()
  170. {
  171. AddUriXmlRpcMethod m;
  172. XmlRpcRequest req("aria2.addUri", BDE::list());
  173. req._params << BDE::list();
  174. req._params[0] << BDE("http://localhost/");
  175. req._params << BDE::dict();
  176. req._params << BDE((int64_t)-1);
  177. XmlRpcResponse res = m.execute(req, _e.get());
  178. CPPUNIT_ASSERT_EQUAL(1, res._code);
  179. }
  180. #ifdef ENABLE_BITTORRENT
  181. void XmlRpcMethodTest::testAddTorrent()
  182. {
  183. AddTorrentXmlRpcMethod m;
  184. XmlRpcRequest req("aria2.addTorrent", BDE::list());
  185. req._params << BDE(readFile("single.torrent"));
  186. BDE uris = BDE::list();
  187. uris << BDE("http://localhost/aria2-0.8.2.tar.bz2");
  188. req._params << uris;
  189. {
  190. XmlRpcResponse res = m.execute(req, _e.get());
  191. CPPUNIT_ASSERT_EQUAL(0, res._code);
  192. CPPUNIT_ASSERT_EQUAL(std::string("1"), res._param.s());
  193. SharedHandle<RequestGroup> group = _e->_requestGroupMan->findReservedGroup(1);
  194. CPPUNIT_ASSERT(!group.isNull());
  195. CPPUNIT_ASSERT_EQUAL(std::string("/tmp/aria2-0.8.2.tar.bz2"),
  196. group->getFirstFilePath());
  197. CPPUNIT_ASSERT_EQUAL((size_t)1, group->getDownloadContext()->getFirstFileEntry()->getRemainingUris().size());
  198. CPPUNIT_ASSERT_EQUAL(std::string("http://localhost/aria2-0.8.2.tar.bz2"),
  199. group->getDownloadContext()->getFirstFileEntry()->getRemainingUris()[0]);
  200. }
  201. // with options
  202. BDE opt = BDE::dict();
  203. opt[PREF_DIR] = BDE("/sink");
  204. req._params << opt;
  205. {
  206. XmlRpcResponse res = m.execute(req, _e.get());
  207. CPPUNIT_ASSERT_EQUAL(0, res._code);
  208. CPPUNIT_ASSERT_EQUAL(std::string("/sink/aria2-0.8.2.tar.bz2"),
  209. _e->_requestGroupMan->findReservedGroup(2)->getFirstFilePath());
  210. }
  211. }
  212. void XmlRpcMethodTest::testAddTorrent_withoutTorrent()
  213. {
  214. AddTorrentXmlRpcMethod m;
  215. XmlRpcRequest req("aria2.addTorrent", BDE::list());
  216. XmlRpcResponse res = m.execute(req, _e.get());
  217. CPPUNIT_ASSERT_EQUAL(1, res._code);
  218. }
  219. void XmlRpcMethodTest::testAddTorrent_notBase64Torrent()
  220. {
  221. AddTorrentXmlRpcMethod m;
  222. XmlRpcRequest req("aria2.addTorrent", BDE::list());
  223. req._params << BDE("not torrent");
  224. XmlRpcResponse res = m.execute(req, _e.get());
  225. CPPUNIT_ASSERT_EQUAL(1, res._code);
  226. }
  227. void XmlRpcMethodTest::testAddTorrent_withPosition()
  228. {
  229. AddTorrentXmlRpcMethod m;
  230. XmlRpcRequest req1("aria2.addTorrent", BDE::list());
  231. req1._params << BDE(readFile("test.torrent"));
  232. req1._params << BDE::list();
  233. req1._params << BDE::dict();
  234. XmlRpcResponse res1 = m.execute(req1, _e.get());
  235. CPPUNIT_ASSERT_EQUAL(0, res1._code);
  236. XmlRpcRequest req2("aria2.addTorrent", BDE::list());
  237. req2._params << BDE(readFile("single.torrent"));
  238. req2._params << BDE::list();
  239. req2._params << BDE::dict();
  240. req2._params << BDE((int64_t)0);
  241. m.execute(req2, _e.get());
  242. CPPUNIT_ASSERT_EQUAL((size_t)1,
  243. _e->_requestGroupMan->getReservedGroups()[0]->
  244. getDownloadContext()->getFileEntries().size());
  245. }
  246. #endif // ENABLE_BITTORRENT
  247. #ifdef ENABLE_METALINK
  248. void XmlRpcMethodTest::testAddMetalink()
  249. {
  250. AddMetalinkXmlRpcMethod m;
  251. XmlRpcRequest req("aria2.addMetalink", BDE::list());
  252. req._params << BDE(readFile("2files.metalink"));
  253. {
  254. XmlRpcResponse res = m.execute(req, _e.get());
  255. CPPUNIT_ASSERT_EQUAL(0, res._code);
  256. CPPUNIT_ASSERT_EQUAL((size_t)2, res._param.size());
  257. CPPUNIT_ASSERT_EQUAL(std::string("1"), res._param[0].s());
  258. CPPUNIT_ASSERT_EQUAL(std::string("2"), res._param[1].s());
  259. SharedHandle<RequestGroup> tar = _e->_requestGroupMan->findReservedGroup(1);
  260. CPPUNIT_ASSERT(!tar.isNull());
  261. CPPUNIT_ASSERT_EQUAL(std::string("/tmp/aria2-5.0.0.tar.bz2"),
  262. tar->getFirstFilePath());
  263. SharedHandle<RequestGroup> deb = _e->_requestGroupMan->findReservedGroup(2);
  264. CPPUNIT_ASSERT(!deb.isNull());
  265. CPPUNIT_ASSERT_EQUAL(std::string("/tmp/aria2-5.0.0.deb"),
  266. deb->getFirstFilePath());
  267. }
  268. // with options
  269. BDE opt = BDE::dict();
  270. opt[PREF_DIR] = BDE("/sink");
  271. req._params << opt;
  272. {
  273. XmlRpcResponse res = m.execute(req, _e.get());
  274. CPPUNIT_ASSERT_EQUAL(0, res._code);
  275. CPPUNIT_ASSERT_EQUAL(std::string("/sink/aria2-5.0.0.tar.bz2"),
  276. _e->_requestGroupMan->findReservedGroup(3)->getFirstFilePath());
  277. }
  278. }
  279. void XmlRpcMethodTest::testAddMetalink_withoutMetalink()
  280. {
  281. AddMetalinkXmlRpcMethod m;
  282. XmlRpcRequest req("aria2.addMetalink", BDE::list());
  283. XmlRpcResponse res = m.execute(req, _e.get());
  284. CPPUNIT_ASSERT_EQUAL(1, res._code);
  285. }
  286. void XmlRpcMethodTest::testAddMetalink_notBase64Metalink()
  287. {
  288. AddMetalinkXmlRpcMethod m;
  289. XmlRpcRequest req("aria2.addMetalink", BDE::list());
  290. req._params << BDE("not metalink");
  291. XmlRpcResponse res = m.execute(req, _e.get());
  292. CPPUNIT_ASSERT_EQUAL(1, res._code);
  293. }
  294. void XmlRpcMethodTest::testAddMetalink_withPosition()
  295. {
  296. AddUriXmlRpcMethod m1;
  297. XmlRpcRequest req1("aria2.addUri", BDE::list());
  298. req1._params << BDE::list();
  299. req1._params[0] << BDE("http://uri");
  300. XmlRpcResponse res1 = m1.execute(req1, _e.get());
  301. CPPUNIT_ASSERT_EQUAL(0, res1._code);
  302. AddMetalinkXmlRpcMethod m2;
  303. XmlRpcRequest req2("ari2.addMetalink", BDE::list());
  304. req2._params << BDE(readFile("2files.metalink"));
  305. req2._params << BDE::dict();
  306. req2._params << BDE((int64_t)0);
  307. XmlRpcResponse res2 = m2.execute(req2, _e.get());
  308. CPPUNIT_ASSERT_EQUAL(0, res2._code);
  309. CPPUNIT_ASSERT_EQUAL(std::string("/tmp/aria2-5.0.0.tar.bz2"),
  310. _e->_requestGroupMan->getReservedGroups()[0]->
  311. getFirstFilePath());
  312. }
  313. #endif // ENABLE_METALINK
  314. void XmlRpcMethodTest::testChangeOption()
  315. {
  316. SharedHandle<RequestGroup> group(new RequestGroup(_option));
  317. _e->_requestGroupMan->addReservedGroup(group);
  318. ChangeOptionXmlRpcMethod m;
  319. XmlRpcRequest req("aria2.changeOption", BDE::list());
  320. req._params << BDE("1");
  321. BDE opt = BDE::dict();
  322. opt[PREF_MAX_DOWNLOAD_LIMIT] = BDE("100K");
  323. #ifdef ENABLE_BITTORRENT
  324. opt[PREF_MAX_UPLOAD_LIMIT] = BDE("50K");
  325. #endif // ENABLE_BITTORRENT
  326. req._params << opt;
  327. XmlRpcResponse res = m.execute(req, _e.get());
  328. CPPUNIT_ASSERT_EQUAL(0, res._code);
  329. CPPUNIT_ASSERT_EQUAL((unsigned int)100*1024,
  330. group->getMaxDownloadSpeedLimit());
  331. #ifdef ENABLE_BITTORRENT
  332. CPPUNIT_ASSERT_EQUAL((unsigned int)50*1024, group->getMaxUploadSpeedLimit());
  333. #endif // ENABLE_BITTORRENT
  334. }
  335. void XmlRpcMethodTest::testChangeOption_withBadOption()
  336. {
  337. SharedHandle<RequestGroup> group(new RequestGroup(_option));
  338. _e->_requestGroupMan->addReservedGroup(group);
  339. ChangeOptionXmlRpcMethod m;
  340. XmlRpcRequest req("aria2.changeOption", BDE::list());
  341. req._params << BDE("1");
  342. BDE opt = BDE::dict();
  343. opt[PREF_MAX_DOWNLOAD_LIMIT] = BDE("badvalue");
  344. req._params << opt;
  345. XmlRpcResponse res = m.execute(req, _e.get());
  346. CPPUNIT_ASSERT_EQUAL(1, res._code);
  347. }
  348. void XmlRpcMethodTest::testChangeOption_withoutGid()
  349. {
  350. ChangeOptionXmlRpcMethod m;
  351. XmlRpcRequest req("aria2.changeOption", BDE::list());
  352. XmlRpcResponse res = m.execute(req, _e.get());
  353. CPPUNIT_ASSERT_EQUAL(1, res._code);
  354. }
  355. void XmlRpcMethodTest::testChangeGlobalOption()
  356. {
  357. ChangeGlobalOptionXmlRpcMethod m;
  358. XmlRpcRequest req("aria2.changeGlobalOption", BDE::list());
  359. BDE opt = BDE::dict();
  360. opt[PREF_MAX_OVERALL_DOWNLOAD_LIMIT] = BDE("100K");
  361. #ifdef ENABLE_BITTORRENT
  362. opt[PREF_MAX_OVERALL_UPLOAD_LIMIT] = BDE("50K");
  363. #endif // ENABLE_BITTORRENT
  364. req._params << opt;
  365. XmlRpcResponse res = m.execute(req, _e.get());
  366. CPPUNIT_ASSERT_EQUAL(0, res._code);
  367. CPPUNIT_ASSERT_EQUAL((unsigned int)100*1024,
  368. _e->_requestGroupMan->getMaxOverallDownloadSpeedLimit());
  369. #ifdef ENABLE_BITTORRENT
  370. CPPUNIT_ASSERT_EQUAL((unsigned int)50*1024,
  371. _e->_requestGroupMan->getMaxOverallUploadSpeedLimit());
  372. #endif // ENABLE_BITTORRENT
  373. }
  374. void XmlRpcMethodTest::testChangeGlobalOption_withBadOption()
  375. {
  376. ChangeGlobalOptionXmlRpcMethod m;
  377. XmlRpcRequest req("aria2.changeGlobalOption", BDE::list());
  378. BDE opt = BDE::dict();
  379. opt[PREF_MAX_OVERALL_DOWNLOAD_LIMIT] = BDE("badvalue");
  380. req._params << opt;
  381. XmlRpcResponse res = m.execute(req, _e.get());
  382. CPPUNIT_ASSERT_EQUAL(1, res._code);
  383. }
  384. void XmlRpcMethodTest::testNoSuchMethod()
  385. {
  386. NoSuchMethodXmlRpcMethod m;
  387. XmlRpcRequest req("make.hamburger", BDE::none);
  388. XmlRpcResponse res = m.execute(req, 0);
  389. CPPUNIT_ASSERT_EQUAL(1, res._code);
  390. CPPUNIT_ASSERT_EQUAL(std::string("No such method: make.hamburger"),
  391. res._param["faultString"].s());
  392. CPPUNIT_ASSERT_EQUAL
  393. (std::string("<?xml version=\"1.0\"?>"
  394. "<methodResponse>"
  395. "<fault>"
  396. "<value>"
  397. "<struct>"
  398. "<member>"
  399. "<name>faultCode</name><value><int>1</int></value>"
  400. "</member>"
  401. "<member>"
  402. "<name>faultString</name>"
  403. "<value>"
  404. "<string>No such method: make.hamburger</string>"
  405. "</value>"
  406. "</member>"
  407. "</struct>"
  408. "</value>"
  409. "</fault>"
  410. "</methodResponse>"),
  411. res.toXml());
  412. }
  413. void XmlRpcMethodTest::testTellStatus_withoutGid()
  414. {
  415. TellStatusXmlRpcMethod m;
  416. XmlRpcRequest req("aria2.tellStatus", BDE::list());
  417. XmlRpcResponse res = m.execute(req, _e.get());
  418. CPPUNIT_ASSERT_EQUAL(1, res._code);
  419. }
  420. static void addUri(const std::string& uri,
  421. const SharedHandle<DownloadEngine>& e)
  422. {
  423. AddUriXmlRpcMethod m;
  424. XmlRpcRequest req("aria2.addUri", BDE::list());
  425. req._params << BDE::list();
  426. req._params[0] << BDE(uri);
  427. CPPUNIT_ASSERT_EQUAL(0, m.execute(req, e.get())._code);
  428. }
  429. void XmlRpcMethodTest::testTellWaiting()
  430. {
  431. addUri("http://1/", _e);
  432. addUri("http://2/", _e);
  433. addUri("http://3/", _e);
  434. addUri("http://4/", _e);
  435. TellWaitingXmlRpcMethod m;
  436. XmlRpcRequest req("aria2.tellWaiting", BDE::list());
  437. req._params << BDE((int64_t)1);
  438. req._params << BDE((int64_t)2);
  439. XmlRpcResponse res = m.execute(req, _e.get());
  440. CPPUNIT_ASSERT_EQUAL(0, res._code);
  441. CPPUNIT_ASSERT_EQUAL((size_t)2, res._param.size());
  442. CPPUNIT_ASSERT_EQUAL(std::string("2"), res._param[0]["gid"].s());
  443. CPPUNIT_ASSERT_EQUAL(std::string("3"), res._param[1]["gid"].s());
  444. // waiting.size() == offset+num
  445. req = XmlRpcRequest("aria2.tellWaiting", BDE::list());
  446. req._params << BDE((int64_t)1);
  447. req._params << BDE((int64_t)3);
  448. res = m.execute(req, _e.get());
  449. CPPUNIT_ASSERT_EQUAL(0, res._code);
  450. CPPUNIT_ASSERT_EQUAL((size_t)3, res._param.size());
  451. // waiting.size() < offset+num
  452. req = XmlRpcRequest("aria2.tellWaiting", BDE::list());
  453. req._params << BDE((int64_t)1);
  454. req._params << BDE((int64_t)4);
  455. res = m.execute(req, _e.get());
  456. CPPUNIT_ASSERT_EQUAL(0, res._code);
  457. CPPUNIT_ASSERT_EQUAL((size_t)3, res._param.size());
  458. }
  459. void XmlRpcMethodTest::testTellWaiting_fail()
  460. {
  461. TellWaitingXmlRpcMethod m;
  462. XmlRpcRequest req("aria2.tellWaiting", BDE::list());
  463. XmlRpcResponse res = m.execute(req, _e.get());
  464. CPPUNIT_ASSERT_EQUAL(1, res._code);
  465. }
  466. } // namespace xmlrpc
  467. } // namespace aria2