XmlRpcMethodTest.cc 17 KB

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