XmlRpcMethodTest.cc 18 KB

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